Skip to main content Home Creators chachamaru127 claude-code-harness harness-work
harness-work HAR: Execute Plans.md tasks from single task to full parallel team run. Trigger: implement, execute, do everything, breezing, team run, parallel, composer, composer 2.5. Do NOT load for: planning, review, release, setup.
Jump to install Skills Marketplace Discover and explore AI skills built by the community.
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Copy promptShow prompt details A direct command skips the review prompt. Inspect the source before running it.
npx skills add https://github.com/Chachamaru127/claude-code-harness --skill harness-workThe command stays on one line. Scroll horizontally to inspect it before copying.
Prefer a local copy? Download the files currently available to SkillsMP.
Download Zip Downloading... More from this repository Generic release automation for projects using Keep a Changelog + GitHub. Single confirmation gate then end-to-end automation: bump detection, CHANGELOG promotion, PR/main merge, tag, GitHub Release. Trigger: release, version bump, publish. Do NOT load for: implementation, review, planning, setup.
Generic release automation for projects using Keep a Changelog + GitHub. Single confirmation gate then end-to-end automation: bump detection, CHANGELOG promotion, PR/main merge, tag, GitHub Release. Trigger: release, version bump, publish. Do NOT load for: implementation, review, planning, setup.
Generate an Acceptance Demo HTML for non-engineer vibecoders right before ship/wait/reject decision. Reads back the acceptance_criteria that were stored as personal-preference.v1 by harness-plan-brief (joined by user_request_hash), then renders a single-file HTML showing each criterion as verified or unverified along with a ship/wait/reject recommendation. Use when the user asks for an acceptance review, wants to decide whether to ship a delivered task, or says: acceptance demo, accept demo, åãå
¥ã倿, åå
¥ã¬ãã¥ãŒ, ship/wait/reject å€å®, æ€åã¬ãã¥ãŒ. Do NOT load for: implementation, code review, release work.
name harness-work description HAR: Execute Plans.md tasks from single task to full parallel team run. Trigger: implement, execute, do everything, breezing, team run, parallel, composer, composer 2.5. Do NOT load for: planning, review, release, setup. description-en HAR: Execute Plans.md tasks from single task to full parallel team run. Trigger: implement, execute, do everything, breezing, team run, parallel, composer, composer 2.5. Do NOT load for: planning, review, release, setup. description-ja HAR:Plans.md ã¿ã¹ã¯ã1ä»¶ããå
šäžŠåããŒã å®è¡ãŸã§æ
åœãå®è£
ããŠãå®è¡ããŠãå
šéšãã£ãŠãbreezingãããŒã å®è¡ãparallelãcomposerãã³ã³ããŒã¶ãŒãcomposer 2.5 ã§èµ·åããã©ã³ãã³ã°ã»ã¬ãã¥ãŒã»ãªãªãŒã¹ã»ã»ããã¢ããã«ã¯äœ¿ããªãã kind workflow purpose Execute Plans.md tasks end to end through Codex-native tools trigger implement, execute, do everything, breezing, team run, parallel, composer, composer 2.5, composer mode, ã³ã³ããŒã¶ãŒ shape workflow role executor pair harness-review owner harness-core since 2026-05-05 allowed-tools ["Read","Write","Edit","Grep","Glob","Bash","spawn_agent","send_input","wait_agent","close_agent"] argument-hint [all] [task-number|range] [--backend claude|codex|cursor] [--cursor] [--codex] [--parallel N] [--no-commit] [--resume id] [--breezing] [--auto-mode] [--tdd-bypass] effort high
Harness Work
Harness ã®çµ±åå®è¡ã¹ãã«ã
以äžã®æ§ã¹ãã«ãçµ±å:
work â Plans.md ã¿ã¹ã¯ã®å®è£
ïŒã¹ã³ãŒãèªå倿ïŒ
impl â æ©èœå®è£
ïŒã¿ã¹ã¯ããŒã¹ïŒ
breezing â ããŒã ãã«èªåå®è¡
parallel-workflows â 䞊åã¯ãŒã¯ãããŒæé©å
ci â CI 倱ææã®åŸ©æ§
Quick Reference
ãŠãŒã¶ãŒå
¥å ã¢ãŒã åäœ harness-workauto ã¿ã¹ã¯æ°ã§èªåå€å®ïŒäžèšåç
§ïŒ harness-work allauto å
šæªå®äºã¿ã¹ã¯ãèªåã¢ãŒãã§å®è¡ harness-work 3solo ã¿ã¹ã¯3ã ãå³å®è¡ harness-work --parallel 5parallel 5ã¯ãŒã«ãŒã§äžŠåå®è¡ïŒåŒ·å¶ïŒ harness-work --codexcodex Codex CLI ã«å§èšïŒæç€ºæã®ã¿ïŒ harness-work --breezing allbreezing resolved backend ã§ããŒã å®è¡ïŒé
åžæ¢å®ã¯ claudeãuser/project default ã§ cursor å¯ïŒ harness-work --breezing --backend cursor allbreezing Cursor worker backend ãæç€ºããŠããŒã å®è¡ harness-work --breezing --backend claude allbreezing Codex native subagent worker ãæç€ºããŠããŒã å®è¡ harness-work --breezingbreezing ããŒã å®è¡ãåŒ·å¶ harness-work 3 --plan roadmapsolo named Plans ã® roadmap ããã¿ã¹ã¯3ãå®è¡
Execution Mode Auto SelectionïŒãã©ã°ãªãæã®èªåå€å®ïŒ
æç€ºçãªã¢ãŒããã©ã°ïŒ--parallel, --breezing, --codexïŒããªãå Žåã
察象ã¿ã¹ã¯æ°ã«å¿ããŠæé©ãªã¢ãŒããèªåéžæãã:
察象ã¿ã¹ã¯æ° èªåéžæã¢ãŒã çç± 1 ä»¶ Solo ãªãŒããŒãããæå°ãçŽæ¥å®è£
ãæé 2ã3 ä»¶ ParallelïŒTask toolïŒ Worker åé¢ã®ã¡ãªãããåºå§ããéŸå€
Lead èª¿æŽ + Worker 䞊å + Reviewer ç¬ç«ã®äžè
åé¢ã广ç
ã«ãŒã«
æç€ºãã©ã°ã¯åžžã«ãªãŒãã¢ãŒããäžæžã ãã
--parallel N â Parallel ã¢ãŒãïŒã¿ã¹ã¯æ°ã«é¢ä¿ãªãïŒ
--breezing â Breezing ã¢ãŒãïŒã¿ã¹ã¯æ°ã«é¢ä¿ãªãïŒ
--codex â Codex ã¢ãŒãïŒã¿ã¹ã¯æ°ã«é¢ä¿ãªãïŒ
--codex ã¯æç€ºæã®ã¿çºå ãCodex CLI ãæªã€ã³ã¹ããŒã«ã®ç°å¢ããããããèªåéžæããªã
--codex ã¯ä»ã¢ãŒããšçµã¿åããå¯èœ: --codex --breezing â Codex + Breezing
Execution Backend SelectionïŒå®è£
ããã¯ãšã³ãéžæïŒ ããã¯ãšã³ãïŒã©ã®ã©ã³ã¿ã€ã ãå®è£
ããã ïŒã¯ãããããžãŒïŒå®è¡ã¢ãŒã: solo / parallel / breezingïŒãšçŽäº€ããã
ããããžãŒããäœã¯ãŒã«ãŒã§ã»ã©ãåå²ããŠåããããæ±ºããã®ã«å¯Ÿããããã¯ãšã³ãã¯ãå®è£
ã®æã誰ãåãããããæ±ºããã
ãã®å¥çŽã¯ host-neutral ã§ããïŒspec.mdãExecution Backend ContractãïŒãCodex host ãã harness ãé§åããŠã Claude Code ããé§åããŠãåãã«æ¯ãèãã
backend å®è£
ã®æ
ãæ å§èšã³ãã³ã claudeïŒglobal fallbackïŒCodex native subagentïŒspawn_agent({message, fork_context})ïŒ spawn_agent ã§ worker ã spawn codexCodex CLI bash "${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh" task --write "<prompt>"cursorcursor-agentïŒmodel composer-2.5-fastïŒ bash "${HARNESS_PLUGIN_ROOT}/scripts/cursor-companion.sh" task --write --workspace <worktree> "<prompt>"
解決æé run éå§æã« 1 åã ã解決ãããbackend å€å®ã¯ å¿
ã resolver çµç± ã«ããHARNESS_IMPL_BACKEND env ã ããçŽèªã¿ããŠå€å®ããªã:
bash "${HARNESS_PLUGIN_ROOT} /scripts/resolve-impl-backend.sh"
precedenceïŒé«ãé ïŒ: --backend <v> / --cursor / --codex ãã©ã° > HARNESS_IMPL_BACKEND ç°å¢å€æ° > ãããžã§ã¯ã env.local ã®ååè¡ > ãŠãŒã¶ãŒ ~/.config/claude-harness/impl-backend.env ã®ååè¡ > call-site defaultã
æç€ºãã©ã°ïŒ--backend / --cursor / --codexïŒã¯ env / file / default ãåžžã«äžæžãããããããžã§ã¯ãèšå®ã¯ãŠãŒã¶ãŒã¹ã³ãŒããäžæžãããã
Codex host ã® --breezing / breezing ãé
åž plugin ã§ã¯ call-site default ãå€ããªãã
ãã©ã°ãªã㯠resolve-impl-backend.sh ã®çµæã«åŸããæªèšå®æã® fallback 㯠claudeã
Cursor ãæ¢å®ã«ãããç°å¢ã¯ HARNESS_IMPL_BACKEND=cursor ã env / project env.local / user-scope config ã«èšå®ããã
æç€ºçã« Cursor ã䜿ãå Žå㯠--backend cursor / --cursorãCodex native subagent worker ãžæ»ãå Žå㯠--backend claude ãæž¡ãã
ã¢ãã«åã®æ£æ¬ã¯ model-routing.shãæ¬ããã¥ã¡ã³ãäžã® composer-2.5-fast ã¯åç
§å€ã§ãããå®è§£æ±ºã¯ bash "${HARNESS_PLUGIN_ROOT}/scripts/model-routing.sh" --host cursor --role worker --field model ã«åŸãïŒdrift 鲿¢ïŒã
èªç¶èšèª backend trigger ãŠãŒã¶ãŒã composer / ã³ã³ããŒã¶ãŒ / Composer ã§ / composer 2.5 / composer ã¢ãŒã ãšèšã£ãå Žåã¯ãcursor backend æå®ãšããŠæ±ãã
ãã㯠--cursor ãšåã intent ã ããbackend ã®ç¢ºå®å€ã¯å¿
ã resolve-impl-backend.sh ã§è§£æ±ºããã
解決æã¯æç€º override ãšã㊠--backend cursor ãæž¡ããenv / project / user file / default ããåªå
ãããã
Lead 㯠composer ã Codex native Worker å
ã®è¿œå agent ãšè§£éãããé claude backend ã®èŠçŽã©ãã Worker agent ãæãŸãã« cursor-companion.sh ãçŽæ¥åŒã¶ã
role-scoped å¶çŽ ããã¯ãšã³ã㯠role-scoped ã解決æžã¿ããã¯ãšã³ãã䜿ãã®ã¯å®è£
ïŒworkerïŒããŒã«ã ãã
Reviewer ãš Advisor ã®äž¡ããŒã«ã¯åžžã« brainïŒ--host claudeãOpusïŒã«åºå®ããã
Reviewer ã cursor / codex ããã¯ãšã³ãã« routing ããªãïŒå®è£
ããããã¯ãšã³ããèªåã®åºåãã¬ãã¥ãŒããŠã¯ãªããªãïŒã
é claude ããã¯ãšã³ãã® self_review ã²ãŒã backend ã codex ãŸã㯠cursor ã®å Žåãworker-report.v1 ã self_review é
åãçæãããªãã
ãã®ãã Lead 㯠self_review ã²ãŒããã¹ããã ããLead ã® diff ã¬ãã¥ãŒãå¯äžã®å質ã²ãŒããšããïŒæ¢åã® codex path ãšåãæ±ãïŒã
cursor ããã¯ãšã³ãã® bannerïŒå§èšåã«å¿
é ïŒ backend ã cursor ã®ãšããLead ã¯å§èšåã«æ¬¡ã® 1 è¡ banner ãå¿
ãåºåãã:
â ïž cursor backend: model=composer-2.5-fast / R01-R13 ã¬ãŒãã¬ãŒã«ã¯ cursor-agent å
éšã«é©çšãããªã / åºå㯠Lead ã¬ãã¥ãŒãŸã§ untrusted
cursor ã® write å§èšã¯å°çš .git ãæã€ worktree å
ã§å®è¡ããLead ã main ãž cherry-pick ããïŒcherry-pick çµè·¯ã§ R01-R13 ãé©çšãããïŒã
ã¬ããã³ã¹è©³çŽ°ã¯ .claude/rules/cursor-cli-only.md ãåç
§ã
ãªãã·ã§ã³ ãªãã·ã§ã³ 説æ ããã©ã«ã allå
šæªå®äºã¿ã¹ã¯ã察象 - N or N-Mã¿ã¹ã¯çªå·/ç¯å²æå® - --parallel N䞊åã¯ãŒã«ãŒæ° auto --sequentialçŽåå®è¡åŒ·å¶ - --codexCodex CLI ã§å®è£
å§èšïŒæç€ºæã®ã¿ãèªåéžæããªãïŒ false --backend <claude|codex|cursor>æç€ºããã¯ãšã³ãéžæïŒworker ããŒã«ã®ã¿é©çšãprecedence æäžäœïŒ resolver resultïŒæªèšå®æã¯ claudeïŒ --cursorcursor backendïŒ--backend cursor ã®å¥åïŒ false --plan NAMEplans/manifest.json ã® named plan ã䜿ãactive/default --no-commitèªåã³ãããæå¶ false --resume <id|latest>ååã»ãã·ã§ã³åé - --breezingLead/Worker/Reviewer ã®ããŒã å®è¡ false --no-tddTDD ãã§ãŒãºã¹ããã false --tdd-bypassç·æ¥æã ã TDD 匷å¶ã bypassãHARNESS_TDD_BYPASS_REASON ãŸãã¯æç€ºçç±ã audit ã«æ®ã false --no-simplifyAuto-Refinement ã¹ããã false --auto-modeAuto Mode rollout ãæç€ºã芪ã»ãã·ã§ã³ã® permission mode ãäºæãªå Žåã®ã¿æ¡çšãæ€èš false
Progressive Disclosure ãŸããã®æ¬æã§å
¥å£ãèªåéžæã忢æ¡ä»¶ã ãã確èªããã
詳现ã¯å¿
èŠã«ãªã£ãæã ãèªãã
詳现 åç
§ Codex native Solo / Parallel / Breezing ã®å
·äœæé references/execution-modes.mdcompanion reviewãReviewer fallbackãAI Residualsãä¿®æ£ã«ãŒã references/review-loop.mdå®äºå ±åã®çæ references/completion-report.mdãã¹ã/CI 倱ææã®åãã±ããå references/failure-reticketing.md仿§æ£æ¬ãã§ãã¯ã®åºæº docs/plans/spec-ssot.md
éèŠåæ¢æ¡ä»¶
Plans.md ãæ§ãã©ãŒãããã§ DoD / Depends / Status ãèªããªãæã¯åæ¢ããã
仿§ãå®è£
倿ã«åœ±é¿ããã®ã« project spec SSOT ãèŠã€ãããªãæã¯ãå
ã«ä»æ§æ£æ¬ãäœæ/æŽæ°ããŠããå®è£
ããã
sprint-contract ã required ãªã®ã« ready ã§ãªãæã¯å®è£
ã«é²ãŸãªãã
critical / major review finding ãæ®ã£ãŠããæã¯å®äºã«ããªãã
ãã¹ãã匱ãããskip ãããæåŸ
å€ãå®è£
ã«åãããŠç·©ãã圢ã§ã¯è§£æ±ºããªãã
helper script 㯠host project ã® scripts/ ã§ã¯ãªã ${HARNESS_PLUGIN_ROOT}/scripts/ ããåŒã¶ã
è€æ° Plans.md ãããå Žåã¯ã1 run ã®äžã§ plan ãåãæ¿ããªããå¿
èŠãªã --plan NAME ãæç€ºããŠæ°ãã run ãéå§ããã
Token Optimization (v2.1.69+) : git æäœã䌎ããªã軜éã¿ã¹ã¯ã§ã¯
plugin settings ã® includeGitInstructions: false ãæå¹ã«ããŠ
ããã³ããããŒã¯ã³ãåæžã§ããã
ã¹ã³ãŒããã€ã¢ãã°ïŒåŒæ°ãªãæïŒ harness-work
ã©ããŸã§ãããŸãã?
1) 次ã®ã¿ã¹ã¯: Plans.md ã®æ¬¡ã®æªå®äºã¿ã¹ã¯ â Solo ã§å®è¡
2) å
šéšïŒæšå¥šïŒ: æ®ãã®ã¿ã¹ã¯ããã¹ãŠå®äº â ã¿ã¹ã¯æ°ã§èªåã¢ãŒãéžæ
3) çªå·æå®: ã¿ã¹ã¯çªå·ãå
¥åïŒäŸ: 3, 5-7ïŒâ ä»¶æ°ã§èªåã¢ãŒãéžæ
åŒæ°ãããªãå³å®è¡ïŒå¯Ÿè©±ã¹ãããïŒ:
harness-work all â å
šã¿ã¹ã¯ãèªåã¢ãŒãéžæ
harness-work 3-6 â 4ä»¶ãªã®ã§ Breezing èªåéžæ
Effort ã¬ãã«å¶åŸ¡ïŒOpus 4.8 / v2.1.111+ïŒ effort ã¯ã¢ãã«ã®æšè«åŒ·åºŠãéžã¶æ£åŒãªãããlow(â)/medium(â)/high(â)/xhigh ã® 4 段éã§ã
/effort auto ã§ããã©ã«ãã«ãªã»ããã§ããïŒmax 㯠v2.1.72 ã§å»æ¢ãxhigh ãåŸç¶ïŒã
Opus 4.8 ã§ã¯ thinking ã¯æ¢å® off ã§ãeffort ãæšè«æ·±åºŠã®äž»ã¬ããŒïŒéå»ã®ã©ã® Opus ãã effort ã®åœ±é¿ã倧ããïŒã
ãæµ
ãæšè«ãã芳枬ããã prompt ã§åé¿ãã effort ãäžããã
ãã®ããè€éã¿ã¹ã¯ã®åŒ·å㯠free-text markerïŒæ§ ultrathinkïŒã spawn prompt ã«æ³šå
¥ããæ¹åŒã廿¢ ãã
è€é床ã¹ã³ã¢ãã Worker spawn ã® effort tier ãéžã¶ æ¹åŒã«çµ±äžããã
å€èŠçŽ ã¹ã³ã¢ãªã³ã° ã¿ã¹ã¯çææã«ä»¥äžã®ã¹ã³ã¢ãåç®ããã
èŠçŽ æ¡ä»¶ ã¹ã³ã¢ ãã¡ã€ã«æ° 倿Žå¯Ÿè±¡ 4 ãã¡ã€ã«ä»¥äž +1 ãã£ã¬ã¯ã㪠core/, guardrails/, security/ ãå«ã +1 ããŒã¯ãŒã architecture, security, design, migration ãå«ã +1 倱æå±¥æŽ agent memory ã«åã¿ã¹ã¯ã®å€±æèšé²ãã +2 æç€ºæå® PM ãã³ãã¬ãŒãã« effort: high / effort: xhighïŒæ§ ultrathink ãäºæåçïŒèšèŒãã +3ïŒèªåæ¡çšïŒ
effort tier ã®æ±ºãæ¹ïŒæ³šå
¥ããªãïŒ ã¹ã³ã¢ãã effort tier ã escalation signal ãšããŠæ±ºããïŒultrathink çã® marker æååã spawn prompt ã« æžããªã ïŒã
é©çš lever ã¯æ¬¡ã® 2 ã€ã ã:
session /effort : è€éã¿ã¹ã¯ã®ãããã«å
¥ãåã« host ã /effort high / /effort xhigh ãèšå®ããïŒsession åäœã§å¹ã確å®ãª leverïŒã
worker frontmatter : agents/worker.md ã® effortïŒæ¢å® mediumïŒã floorãCC ã® Agent / Task spawn API 㯠per-spawn ã® effort æå®ãå
¬éããªããããworker 1 äœããšã« effort ãäžããæ©æ§ã¯ãªããã¹ã³ã¢ã¯ worker-report.v1 ã® task_complexity_note ã«èšé²ããLead ã session effort åŒãäžãã®å€æææã«ããã
ã¹ã³ã¢ code-riskïŒcore/guardrails/security/architecture/migration ãå«ãïŒ effort tier 0-2 äžå mediumïŒWorker frontmatter æ¢å®ã®ãŸãŸïŒâ¥ 3 ãªã high⥠3 ãã xhigh
breezing ã¢ãŒãã§ãåãããžãã¯ãé©çšããïŒharness-work ãäžæ¬åããŠç®¡çïŒã
å®è¡ã¢ãŒã詳现
Harness helper script root Harness ã忢±ãã helper script ã¯ãäœæ¥å¯Ÿè±¡ãããžã§ã¯ãã® scripts/ ã§ã¯ãªããå¿
ã plugin bundle root ããåŒã¶ã
HARNESS_PLUGIN_ROOT="${HARNESS_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-} } "
if [ -z "$HARNESS_PLUGIN_ROOT " ] && [ -n "${CLAUDE_SKILL_DIR:-} " ]; then
probe="$(cd "${CLAUDE_SKILL_DIR} " && pwd) "
while [ "$probe " != "/" ] && [ ! -d "$probe /scripts" ]; do
probe="$(cd "$probe /.." && pwd) "
done
[ -d "$probe /scripts" ] && HARNESS_PLUGIN_ROOT="$probe "
fi
以éã® node "${HARNESS_PLUGIN_ROOT}/scripts/..." / bash "${HARNESS_PLUGIN_ROOT}/scripts/..." ã¯ããã®è§£æ±ºæžã¿ root ãåæã«ããã
Backend-resolved executor path (Solo / Parallel / Breezing) Solo / Parallel / Breezing ã¯åã resolver result ããå®è£
executor ãéžã¶ã
harness-work 3 --cursor ãš user/project HARNESS_IMPL_BACKEND=cursor ã¯ã1 ä»¶ã¿ã¹ã¯ã§ã local Read/Write/Edit/Bash ã« fall through ããŠã¯ãããªãã
resolver_backend_arg = ""
if explicit_backend_value in ["claude", "codex", "cursor"]:
resolver_backend_arg = "--backend {explicit_backend_value}"
backend = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/resolve-impl-backend.sh\" {resolver_backend_arg}")
if explicit_flag == "--cursor":
backend = "cursor"
if explicit_flag == "--codex":
backend = "codex"
if topology in ["solo", "parallel"] and backend in ["cursor", "codex"]:
BASE_REF = git("rev-parse", "HEAD")
WT_ID = "{task.number}-$(date +%Y%m%d-%H%M%S)-$$"
worktree_path = ".claude/worktrees/{backend}-{WT_ID}"
worktree_branch = "{backend}-work/{WT_ID}"
bash("mkdir -p .claude/worktrees && git worktree add -b {worktree_branch} {worktree_path} {BASE_REF}")
companion_prompt = "{task prompt}\n\nAfter making changes, create exactly one git commit in this worktree before returning."
if backend == "cursor":
companion_output = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/cursor-companion.sh\" task --write --workspace {worktree_path} \"{companion_prompt}\"")
else:
companion_state_file = "{worktree_path}/.claude/state/codex-primary-environment.json"
companion_output = bash("HARNESS_CODEX_PRIMARY_ENV_STATE_FILE={companion_state_file} bash \"${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh\" task --write -C {worktree_path} \"{companion_prompt}\"")
latest_commit = git("-C", worktree_path, "rev-parse", "HEAD")
if backend == "cursor" and git("-C", worktree_path, "status", "--porcelain") != "":
git("-C", worktree_path, "add", "-A")
git("-C", worktree_path, "-c", "user.name=cursor-composer", "-c", "user.email=cursor-composer@local", "commit", "--no-verify", "-m", "cursor: delegated change")
latest_commit = git("-C", worktree_path, "rev-parse", "HEAD")
if latest_commit == BASE_REF:
raise EscalationError("{backend} companion produced no commit")
worker_result = {type: "companion-result.v1", baseCommit: BASE_REF, commit: latest_commit, worktreePath: worktree_path, branch: worktree_branch, files_changed: git("-C", worktree_path, "diff", "--name-only", "{BASE_REF}..HEAD"), summary: companion_output}
enter_shared_review_loop(worker_result)
else:
run_native_solo_or_parallel()
Parallel 㯠task ããšã«ãã® resolver path ãé©çšããã
backend=cursor / codex ã®å Žå㯠native Worker spawn ã䜿ãããtask ããšã« isolated companion worktree ãäœæã㊠companion-result.v1 ã«æ£èŠåããŠããå
±é review / cherry-pick loop ã«å
¥ãã
Solo ã¢ãŒãïŒ1 ä»¶æã®èªåéžæïŒ
Plans.md ãèªã¿èŸŒã¿ã察象ã¿ã¹ã¯ãç¹å®
Plans.md ãååšããªãå Žå : harness-plan create --ci ãèªååŒã³åºã â Plans.md ãçæããŠç¶è¡
ããããŒã« DoD / Depends ã«ã©ã ããªãå Žå: Plans.md ãæ§ãã©ãŒãããã§ããharness-plan create ã§åçæããŠãã ããã â 忢
äŒè©±ã«æªèšèŒã¿ã¹ã¯ãããå Žå : çŽåã®äŒè©±ã³ã³ããã¹ãããèŠä»¶ãæœåºããPlans.md ã« cc:TODO ã§èªå远èš
æœåºããžãã¯: ãŠãŒã¶ãŒçºèšããã¢ã¯ã·ã§ã³åè©ïŒããã远å ããããä¿®æ£ããããå®è£
ãïŒãæ€åº
è¿œèšæã¯ v2 ãã©ãŒãããïŒTask / å
容 / DoD / Depends / StatusïŒã«æºæ
远èšåŸããŠãŒã¶ãŒã«ãPlans.md ã«ä»¥äžã远èšããŸããããšè¡šç€ºïŒ5 ç§ã¿ã€ã ã¢ãŠãä»ãããã³ãããããã©ã«ã: ç¶è¡ïŒ
1.5. ã¿ã¹ã¯èæ¯ç¢ºèª ïŒ30 ç§ïŒ:
ã¿ã¹ã¯ã®ãå
容ããšãDoDããã ç®ç ïŒãã®ã¿ã¹ã¯ãè§£ã課é¡ïŒã 1 è¡ã§æšè«è¡šç€º
git grep / Glob 㧠圱é¿ç¯å² ïŒå€æŽãåã¶ãã¡ã€ã«/ã¢ãžã¥ãŒã«ïŒãæšè«è¡šç€º
æšè«ã«èªä¿¡ãããå Žå: ãã®ãŸãŸå®è£
ã«é²ãïŒãããŒé
å»¶ãªãïŒ
æšè«ã«èªä¿¡ããªãå Žå: ãŠãŒã¶ãŒã« 1 åã ã確èªïŒããã®çè§£ã§åã£ãŠããŸããïŒãïŒ
1.6. 仿§æ£æ¬ preflight :
æ¢åã® project spec SSOT ãæ¢ãïŒäŸ: docs/spec/00-project-spec.md, docs/ARCHITECTURE.md, docs/HANDOFF.md, docs/oem/PROJECT_COMPASS.md, docs/specs/ïŒ
task ã product behavior / API / data model / permission / billing / integration / tenant boundary ãå€ããå Žåãspec ããªããã° docs/spec/00-project-spec.md ãäœã
spec ãå€ãããŸã㯠task ãšççŸããå Žåã¯ãå®è£
åã« spec ãæŽæ°ãã
typo / format / dependency bump / docs-only / åäœå€æŽãªã refactor 㯠skip çç±ãæ®ããŠç¶è¡ãã
Worker / Reviewer ãžæž¡ã context ã«ã¯ spec_path ãŸã㯠spec_skip_reason ãå«ãã
ã¿ã¹ã¯ã cc:WIP ã«æŽæ°
TDD ãã§ãŒãº ïŒ[skip:tdd] ãªã & ãã¹ãFWååšæïŒ:
a. ãã¹ããã¡ã€ã«ãå
ã«äœæïŒRedïŒ
b. 倱æã確èª
c. bash "${HARNESS_PLUGIN_ROOT}/scripts/log-tdd-red.sh" ã§ .claude/state/tdd-red-log/<task-id>.jsonl ã« FAIL èšŒè·¡ãæ®ããscript ãå©çšã§ããªãç°å¢ã§ã¯ãliteral 㪠failing test output ã worker-report ã® self_review evidence ã«æ·»ä»ãã
d. --tdd-bypass ã䜿ãå Žåã¯ãHARNESS_TDD_BYPASS=1 ãš HARNESS_TDD_BYPASS_REASON="<çç±>" ãæç€ºããTDD ãçç¥ããçç±ã sprint-contract / worker-report ã«æ®ã
node "${HARNESS_PLUGIN_ROOT}/scripts/generate-sprint-contract.js" <task-id> ã§ sprint-contract.json ãçæ
Reviewer 芳ç¹ã®è¿œèšã bash "${HARNESS_PLUGIN_ROOT}/scripts/enrich-sprint-contract.sh" ã§å ããbash "${HARNESS_PLUGIN_ROOT}/scripts/ensure-sprint-contract-ready.sh" ã§ approved ã確èª
Advisor consultïŒå¿
èŠæã®ã¿ïŒ :
é«ãªã¹ã¯ taskïŒneeds-spike / security-sensitive / state-migrationïŒã¯ãååå®è¡åã« 1 åã ãçžè«ãã
åãåå ã®å€±æã 2 åç¶ãããã3 åç®ã«å
¥ãåã«çžè«ãã
plateauïŒè¡ãè©°ãŸãæ€ç¥ïŒã PIVOT_REQUIRED ãè¿ããæã¯ããŠãŒã¶ãŒãžæ¢ããŠæããåã« 1 åã ãçžè«ãã
çžè«çµæã¯ advisor-response.v1 ã§åãåããPLAN ã¯é²ãæ¹ã®çµã¿æ¿ããCORRECTION ã¯å±æä¿®æ£ãSTOP ã¯å³ãšã¹ã«ã¬ãŒã·ã§ã³ãšããŠæ±ã
åã trigger_hash ã§ã¯ 1 åããçžè«ããªããtask ããšã®çžè«åæ°ã¯æå€§ 3 å
backend-resolved executor path ã§ã³ãŒããå®è£
ïŒGreenïŒ
backend=claude: local / native Read/Write/Edit/Bash path ã§å®è£
backend=cursor / codex: äžèš companion worktree path ã§å®è£
ããcompanion-result.v1 ãå
±é review loop ã«æž¡ã
/simplify ã§ Auto-RefinementïŒ--no-simplify ã§çç¥å¯ïŒ
èªåã¬ãã¥ãŒã¹ããŒãž ïŒãã¬ãã¥ãŒã«ãŒããåç
§ïŒ:
Codex exec åªå
ã§ã¬ãã¥ãŒå®è¡ â ãã©ãŒã«ããã¯ã§å
éš Reviewer agent
sprint-contract.json ã® reviewer_profile ã runtime ã®å Žå㯠bash "${HARNESS_PLUGIN_ROOT}/scripts/run-contract-review-checks.sh" ãå®è¡
REQUEST_CHANGES ã®å Žå: ææãå
ã«ä¿®æ£âåã¬ãã¥ãŒïŒMAX_REVIEWS = read_contract(contract_path, ".review.max_iterations") or 3ïŒ
APPROVE ã§æ¬¡ã¹ããããžãself-check ã ãã§ã¯å®äºã確å®ããªã
bash "${HARNESS_PLUGIN_ROOT}/scripts/write-review-result.sh" ã§ review artifact ãæ£èŠåããŠä¿åïŒbrowser profile 㯠--browser-result ãæž¡ããbrowser_verdict == PENDING_BROWSER ã®æã¯ static verdict ãæ¡çšïŒ
git commit ã§èªåã³ãããïŒ--no-commit ã§çç¥å¯ïŒ
ã¿ã¹ã¯ã cc:å®äº ã«æŽæ°ïŒcommit hash ä»äžïŒ
git log --oneline -1 ã§çŽè¿ã® commit hashïŒç瞮圢 7 æåïŒãååŸ
Plans.md ã® Status ã cc:å®äº [a1b2c3d] 圢åŒã§æŽæ°
commit ããªãå ŽåïŒ--no-commit æïŒã¯ hash ãªãã§ cc:å®äº ã®ã¿
ãªããå®äºå ±å ïŒCompletion Report Output Contract ãš references/completion-report.md ãåç
§ïŒ
倱ææã®èªååèšç» ïŒãã¹ã/CI 倱ææã®ã¿ïŒ:
ãã¹ãå®è¡çµæã確èª
倱æããå Žå: ä¿®æ£ã¿ã¹ã¯æ¡ã state ã«ä¿åããæ¿èªã³ãã³ãçµç±ã§ Plans.md ã«è¿œå ïŒã倱æã¿ã¹ã¯ã®èªååãã±ããåãåç
§ïŒ
æåããå Žå: 次ã¿ã¹ã¯ãžé²ã
Parallel ã¢ãŒãïŒ2ã3 ä»¶æã®èªåéžæ / --parallel N ã§åŒ·å¶ïŒ [P] ããŒã¯ä»ãã¿ã¹ã¯ã N ã¯ãŒã«ãŒã§äžŠåå®è¡ã
--parallel N ã§æç€ºæå®ããå Žåã¯ãã¿ã¹ã¯æ°ã«é¢ä¿ãªããã®ã¢ãŒãã䜿çšã
åäžãã¡ã€ã«ãžã®æžã蟌ã¿ãç«¶åããå Žå㯠git worktree ã§åé¢ã
å task ã®å®è£
executor 㯠Backend-resolved executor path ã«åŸãã
--parallel N --cursorã--backend cursorããŸã㯠default HARNESS_IMPL_BACKEND=cursor ã®å ŽåãParallel ã§ã native Worker spawn ã§ã¯ãªã task ããšã® Cursor companion worktree ã䜿ãã
Codex ã¢ãŒãïŒ--codex æç€ºæã®ã¿ïŒ å
¬åŒãã©ã°ã€ã³ codex-plugin-cc ã® companion çµç±ã§ Codex CLI ã«ã¿ã¹ã¯ãå§èšããã
BASE_REF="$(git rev-parse HEAD) "
WT_ID="codex-$(date +%Y%m%d-%H%M%S) -$$"
WORKTREE_PATH=".claude/worktrees/${WT_ID} "
git worktree add -b "codex-work/${WT_ID} " "$WORKTREE_PATH " "$BASE_REF "
HARNESS_CODEX_PRIMARY_ENV_STATE_FILE="$WORKTREE_PATH /.claude/state/codex-primary-environment.json" \
bash "${HARNESS_PLUGIN_ROOT} /scripts/codex-companion.sh" task --write -C "$WORKTREE_PATH " \
"ã¿ã¹ã¯å
容ãå®äºåã«ãã® worktree ã§ exactly one git commit ãäœæããŠãã ããã"
CODEX_PROMPT=$(mktemp /tmp/codex-prompt-XXXXXX.md)
cat "$CODEX_PROMPT " | HARNESS_CODEX_PRIMARY_ENV_STATE_FILE="$WORKTREE_PATH /.claude/state/codex-primary-environment.json" \
bash "${HARNESS_PLUGIN_ROOT} /scripts/codex-companion.sh" task --write -C "$WORKTREE_PATH "
rm -f "$CODEX_PROMPT "
git -C "$WORKTREE_PATH " diff "$BASE_REF ..HEAD"
WORKTREE_HEAD="$(git -C "$WORKTREE_PATH " rev-parse HEAD) "
git cherry-pick --no-commit "$BASE_REF ..$WORKTREE_HEAD "
companion 㯠App Server Protocol çµç±ã§ Codex ãšéä¿¡ãã
Job 管çã»thread resumeã»æ§é ååºåãæäŸããã
çµæãæ€èšŒããåè³ªåºæºãæºãããªãå Žåã¯èªåã§ä¿®æ£ã
Breezing ã¢ãŒãïŒ4 件以äžã§èªåéžæ / --breezing ã§åŒ·å¶ïŒ Lead / Worker / Advisor / Reviewer ã®åœ¹å²åé¢ã§ããŒã å®è¡ããã
Codex host ã® Breezing 㯠resolver result ã«åŸããé
åž plugin ã®ãã©ã°ãªã fallback 㯠claude ãªã®ã§ã
spawn_agent, wait_agent, send_input, close_agent ã䜿ã£ã Codex native subagent orchestration ãäºææ¢å®ã
--backend cursor / --cursorããŸã㯠user/project config ã® HARNESS_IMPL_BACKEND=cursor ãããæã ã
cursor-companion.sh ã§ Cursor worker ã«å§èšããã
å€ã TeamCreate / TaskCreate ããŒã¹ã®èª¬æã¯æ¡ããªãã
çŸè¡ã® shipped default 㯠bypassPermissions
--auto-mode ã¯äºæãªèŠªã»ãã·ã§ã³åãã® opt-in rollout ãã©ã°ãšããŠæ±ã
permissions.defaultMode ã agent frontmatter ã® permissionMode ã«ã¯æªææžåã® autoMode å€ãæžããªã
CC v2.1.69+ : nested teammates ã¯ãã©ãããã©ãŒã åŽã§çŠæ¢ãããããã
Worker/Reviewer ããã³ããã«ã¯åé·ãª nested 鲿¢æèšã远å ããªãã
Lead (this agent)
âââ Worker (resolver result: Codex native spawn_agent / codex-companion / cursor-companion) â å®è£
æ
åœ
âââ Advisor (claude-code-harness:advisor) â æ¹éå©èš
âââ Reviewer (code-reviewer agent) â ã¬ãã¥ãŒæ
åœ
Phase A: Pre-delegateïŒæºåïŒ :
Plans.md ãèªã¿èŸŒã¿ã察象ã¿ã¹ã¯ãç¹å®
äŸåã°ã©ããè§£æããå®è¡é åºã決å®ïŒDepends ã«ã©ã ïŒ
åã¿ã¹ã¯ã®ä»æ§æ£æ¬ preflight ãè¡ããå¿
èŠãªã docs/spec/00-project-spec.md ãŸãã¯æ¢å spec ãå®è£
åã«æŽæ°
åã¿ã¹ã¯ã® effort ã¹ã³ã¢ãªã³ã°ïŒeffort tier å€å® â high/xhighïŒ
node "${HARNESS_PLUGIN_ROOT}/scripts/generate-sprint-contract.js" ã§ sprint-contract.json ãçæ
bash "${HARNESS_PLUGIN_ROOT}/scripts/enrich-sprint-contract.sh" ã§ Reviewer 芳ç¹ãå ããbash "${HARNESS_PLUGIN_ROOT}/scripts/ensure-sprint-contract-ready.sh" ã§æªæ¿èªãªã忢
Phase B: DelegateïŒWorker spawn â å¿
èŠæ Advisor â ã¬ãã¥ãŒ â cherry-pickïŒ :
åã¿ã¹ã¯ã«ã€ããŠä»¥äžã鿬¡ å®è¡ããïŒäŸåé ïŒ:
API æ³šèš : 以äžã¯ Codex native ã® subagent API æ§æã§èšè¿°ããã
backend=claude ã®æã ã spawn_agent(...), send_input(...), wait_agent(...), close_agent(...) ããã®ãŸãŸäœ¿ãã
backend=cursor / codex ã®æã¯ Worker agent ã spawn ãããLead ã companion ãçŽæ¥åŒã¶ã
Claude Code åãã®ãµããšãŒãžã§ã³ãæ§æãã¡ãã»ãŒãžéä¿¡æ§æã¯æ··ããªãã
for task in execution_order:
# B-0. backend 解決ïŒé
åž fallback 㯠claudeãuser/project default ã§ cursor å¯ïŒ
resolver_backend_arg = ""
if explicit_backend_value in ["claude", "codex", "cursor"]:
resolver_backend_arg = "--backend {explicit_backend_value}"
backend = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/resolve-impl-backend.sh\" {resolver_backend_arg}")
if explicit_flag == "--cursor":
backend = "cursor"
if explicit_flag == "--codex":
backend = "codex"
# B-1. sprint-contract ãçæ
contract_path = bash("node \"${HARNESS_PLUGIN_ROOT}/scripts/generate-sprint-contract.js\" {task.number}")
contract_path = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/enrich-sprint-contract.sh\" {contract_path} --check \"DoD ã reviewer 芳ç¹ã§ç¢ºèª\" --approve")
bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/ensure-sprint-contract-ready.sh\" {contract_path}")
# B-2. Worker å§èšïŒworktree åé¢ïŒ
Plans.md: task.status = "cc:WIP" # çææã«æŽæ°ïŒæªçæã¿ã¹ã¯ã¯ cc:TODO ã®ãŸãŸïŒ
if backend == "cursor":
BASE_REF = git("rev-parse", "HEAD")
WT_ID = "{task.number}-$(date +%Y%m%d-%H%M%S)-$$"
worktree_path = ".claude/worktrees/cursor-{WT_ID}"
worktree_branch = "cursor-work/{WT_ID}"
bash("mkdir -p .claude/worktrees && git worktree add -b {worktree_branch} {worktree_path} {BASE_REF}")
print("ð cursor / $(bash \"${HARNESS_PLUGIN_ROOT}/scripts/model-routing.sh\" --host cursor --role worker --field model) / {branch} / {task.number}")
companion_prompt = "{task prompt}\n\nAfter making changes, create exactly one git commit in this worktree before returning."
companion_output = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/cursor-companion.sh\" task --write --workspace {worktree_path} \"{companion_prompt}\"")
latest_commit = git("-C", worktree_path, "rev-parse", "HEAD")
if git("-C", worktree_path, "status", "--porcelain") != "":
git("-C", worktree_path, "add", "-A")
git("-C", worktree_path, "-c", "user.name=cursor-composer", "-c", "user.email=cursor-composer@local", "commit", "--no-verify", "-m", "cursor: delegated change")
latest_commit = git("-C", worktree_path, "rev-parse", "HEAD")
if latest_commit == BASE_REF:
raise EscalationError("cursor companion produced no commit")
worker_result = {type: "companion-result.v1", baseCommit: BASE_REF, commit: latest_commit, worktreePath: worktree_path, branch: worktree_branch, files_changed: git("-C", worktree_path, "diff", "--name-only", "{BASE_REF}..HEAD"), summary: companion_output}
worker_id = null
elif backend == "codex":
BASE_REF = git("rev-parse", "HEAD")
WT_ID = "{task.number}-$(date +%Y%m%d-%H%M%S)-$$"
worktree_path = ".claude/worktrees/codex-{WT_ID}"
worktree_branch = "codex-work/{WT_ID}"
bash("mkdir -p .claude/worktrees && git worktree add -b {worktree_branch} {worktree_path} {BASE_REF}")
companion_prompt = "{task prompt}\n\nAfter making changes, create exactly one git commit in this worktree before returning."
companion_state_file = "{worktree_path}/.claude/state/codex-primary-environment.json"
companion_output = bash("HARNESS_CODEX_PRIMARY_ENV_STATE_FILE={companion_state_file} bash \"${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh\" task --write -C {worktree_path} \"{companion_prompt}\"")
latest_commit = git("-C", worktree_path, "rev-parse", "HEAD")
if latest_commit == BASE_REF:
raise EscalationError("codex companion produced no commit")
worker_result = {type: "companion-result.v1", baseCommit: BASE_REF, commit: latest_commit, worktreePath: worktree_path, branch: worktree_branch, files_changed: git("-C", worktree_path, "diff", "--name-only", "{BASE_REF}..HEAD"), summary: companion_output}
worker_id = null
else:
print("ð claude / native-subagent / {branch} / {task.number}")
worker_id = spawn_agent({
message: "ã¿ã¹ã¯: {task.å
容}\nDoD: {task.DoD}\ncontract_path: {contract_path}\nspec_path: {spec_path}\nspec_skip_reason: {spec_skip_reason}\nmode: breezing\n\näœæ¥ã¯åé¢ worktree ã§è¡ããå®äºåŸã« git commit ããŠãã ããã\nå®äºæã¯ {commit, worktreePath, branch, files_changed, summary} ãè¿ããŠãã ããã",
fork_context: true
})
worker_result = wait_agent({ targets: [worker_id] })
# worker_result ã«ã¯ {commit, worktreePath, branch, files_changed, summary} ãå«ãŸãã
# backend=cursor/codex ã§ã¯ Lead ã companion stdout ã companion-result.v1 ã«æ£èŠåããã
# B-3. Worker ã advice request ãè¿ããæã ããLead ã Advisor ãåŒã¶
if backend == "claude" and worker_result.type == "advisor-request.v1":
advisor_id = spawn_agent({
message: worker_result.request_json,
agent_type: "default",
fork_context: true
})
advisor_result = wait_agent({ targets: [advisor_id] })
close_agent({ target: advisor_id })
send_input({
target: worker_id,
message: "advisor-response.v1: {advisor_result}"
})
worker_result = wait_agent({ targets: [worker_id] })
# B-4. Lead ãã¬ãã¥ãŒå®è¡ïŒCodex exec åªå
ïŒ
if backend == "claude":
diff_text = git("-C", worker_result.worktreePath, "show", worker_result.commit)
else:
diff_text = git("-C", worker_result.worktreePath, "diff", "{worker_result.baseCommit}..HEAD")
verdict = codex_exec_review(diff_text) or reviewer_agent_review(diff_text)
profile = jq(contract_path, ".review.reviewer_profile")
review_input = "review-output.json"
if profile == "runtime":
review_input = bash("cd {worker_result.worktreePath} && bash \"${HARNESS_PLUGIN_ROOT}/scripts/run-contract-review-checks.sh\" {contract_path}")
runtime_verdict = jq(review_input, ".verdict")
if runtime_verdict == "REQUEST_CHANGES":
verdict = "REQUEST_CHANGES"
elif runtime_verdict == "DOWNGRADE_TO_STATIC":
pass # runtime æ€èšŒã³ãã³ããªã â static verdict ããã®ãŸãŸäœ¿ã
browser_result = ""
if profile == "browser":
# browser artifact ãã route / browser_mode / execution_instructions ãåå©çšã㊠browser runner ãèµ·åããã
browser_artifact = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/generate-browser-review-artifact.sh\" {contract_path}")
browser_result = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/browser-review-runner.sh\" {browser_artifact}")
browser_verdict = jq(browser_result, ".browser_verdict")
if browser_verdict == "REQUEST_CHANGES":
verdict = "REQUEST_CHANGES"
elif browser_verdict == "APPROVE" and verdict != "REQUEST_CHANGES":
verdict = "APPROVE"
# browser_verdict == PENDING_BROWSER ã®ãšã㯠static verdict ãç¶æãã
# review_input ã DOWNGRADE_TO_STATIC ã®å Žå㯠static review çµæã䜿ã
if review_input != "review-output.json" and jq(review_input, ".verdict") == "DOWNGRADE_TO_STATIC":
review_input = "review-output.json" # static review ã®çµæã«ãã©ãŒã«ããã¯
bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/write-review-result.sh\" {review_input} {latest_commit} --browser-result {browser_result}")
# B-5. ä¿®æ£ã«ãŒãïŒREQUEST_CHANGES æãcontract ã® max_iterations ãŸã§ïŒ
review_count = 0
# sprint-contract ãååšãããšãã®ã¿ max_iterations ãèªããååšããªãå Žå㯠3ïŒåŸæ¹äºæïŒ
MAX_REVIEWS = read_contract(contract_path, ".review.max_iterations") or 3
latest_commit = worker_result.commit
while verdict == "REQUEST_CHANGES" and review_count < MAX_REVIEWS:
if backend == "claude":
send_input({
target: worker_id,
message: "ææå
容: {issues}\nä¿®æ£ã㊠amend ããŠãã ãã"
})
# Worker ãä¿®æ£ â amend â æŽæ°ããã commit hash ãè¿ã
updated_result = wait_agent({ targets: [worker_id] })
latest_commit = updated_result.commit
elif backend == "cursor":
previous_commit = latest_commit
companion_output = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/cursor-companion.sh\" task --write --workspace {worker_result.worktreePath} \"Review findings:\n{issues}\n\nFix the findings and commit the result.\"")
latest_commit = git("-C", worker_result.worktreePath, "rev-parse", "HEAD")
if git("-C", worker_result.worktreePath, "status", "--porcelain") != "":
git("-C", worker_result.worktreePath, "add", "-A")
git("-C", worker_result.worktreePath, "-c", "user.name=cursor-composer", "-c", "user.email=cursor-composer@local", "commit", "--no-verify", "-m", "cursor: review fix")
latest_commit = git("-C", worker_result.worktreePath, "rev-parse", "HEAD")
if latest_commit == previous_commit:
raise EscalationError("cursor companion retry produced no new commit")
worker_result.commit = latest_commit
worker_result.summary = companion_output
else:
previous_commit = latest_commit
companion_state_file = "{worker_result.worktreePath}/.claude/state/codex-primary-environment.json"
companion_output = bash("HARNESS_CODEX_PRIMARY_ENV_STATE_FILE={companion_state_file} bash \"${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh\" task --write -C {worker_result.worktreePath} \"Review findings:\n{issues}\n\nFix the findings and commit the result.\"")
latest_commit = git("-C", worker_result.worktreePath, "rev-parse", "HEAD")
if latest_commit == previous_commit:
raise EscalationError("codex companion retry produced no new commit")
worker_result.commit = latest_commit
worker_result.summary = companion_output
if backend == "claude":
diff_text = git("-C", worker_result.worktreePath, "show", latest_commit)
else:
diff_text = git("-C", worker_result.worktreePath, "diff", "{worker_result.baseCommit}..HEAD")
verdict = codex_exec_review(diff_text) or reviewer_agent_review(diff_text)
review_count++
# B-6. Worker çµäº
if backend == "claude":
close_agent({ target: worker_id })
# B-7. APPROVE â trunk ã« cherry-pickïŒfeature ãã©ã³ãçµç±ïŒ
# Worker ã® Branch Guard ã«ãã trunk HEAD ã¯åãããcommit 㯠feature ãã©ã³ãäžã«ããæ³å®
if verdict == "APPROVE":
TRUNK=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's|refs/remotes/origin/||' || echo "main")
git checkout "$TRUNK" # safety: æ¢ã« trunk ãªã no-op
# feature ãã©ã³ãã® commit ãæ¢ã« trunk ã«ããïŒBranch Guard 倱ææã®ãã©ãŒã«ããã¯ïŒã確èª
if git("merge-base", "--is-ancestor", latest_commit, "HEAD"):
pass # æ¢ã« trunk äž â cherry-pick äžèŠïŒåå
¥é²æ¢ïŒ
else:
if backend == "claude":
git cherry-pick --no-commit {latest_commit} # feature branch â trunk
else:
git cherry-pick --no-commit {worker_result.baseCommit}..{latest_commit} # companion range â trunk
git commit -m "{task.å
容}"
# Worker ã® worktree ã remove ããŠãã feature ãã©ã³ããåé€
if worker_result.worktreePath:
git worktree remove {worker_result.worktreePath} --force
if worker_result.branch and worker_result.branch not in ["main", "master"] and worker_result.branch != TRUNK:
git branch -D {worker_result.branch}
Plans.md: task.status = "cc:å®äº [{hash}]"
# auto-checkpoint èšé²ïŒåªçæ§ã¬ãŒã (c)ïŒ
# Plans.md æžãæãçŽåŸã«åŒã¶ã倱æããŠã fail-openïŒ|| trueïŒã§ã«ãŒããæ¢ããªã
HASH=$(git rev-parse --short HEAD)
REVIEW_RESULT_PATH=".claude/state/review-results/${task.number}.review-result.json"
bash "${HARNESS_PLUGIN_ROOT}/scripts/auto-checkpoint.sh" \
"${task.number}" "${HASH}" "${contract_path}" "${REVIEW_RESULT_PATH}" \
|| true # fail-open: harness-mem æªèµ·åç°å¢ã§ãç¶ç¶
else:
â ãŠãŒã¶ãŒã«ãšã¹ã«ã¬ãŒã·ã§ã³
# B-8. Progress feed
print("ð Progress: Task {completed}/{total} å®äº â {task.å
容}")
Work Mode Lifecycle (bin/harness work-mode) Claude Code çãšåäžã®å¥çŽïŒæ£æ¬: skills/harness-work/SKILL.md ã®ååç¯ïŒã
R04/R05 ã®ç¢ºèª skip ãèªã ctx.WorkMode 㯠SQLite work_states è¡ã§ã®ã¿ç«ãŠããã
ïŒHARNESS_WORK_MODE / ULTRAWORK_MODE env 㯠skill ããèšå®ã§ããªãïŒã
Lead 㯠Phase A éå§åïŒsolo å®è¡ã§ã¯æåã®å®è£
ã¢ã¯ã·ã§ã³åïŒã« bin/harness work-mode on ãå®è¡ãã
run çµäºæã¯æåã»å€±æã»äžæã®å
šçµè·¯ ã§ bin/harness work-mode off ãå®è¡ãããrun åäœã§ 1 åã®ã¿ã
session ID ã解決ã§ããªãå Žåãwork-mode ã¯éãŒãçµäºãçç±ã stderr ã«åºãã
Advisor ProtocolïŒå
šã¢ãŒãå
±éïŒ Advisor ã¯ãå®è£
è
ãã§ããã¬ãã¥ãŒæ
åœãã§ããªãã
è¿·ã£ãæã ããå®è¡åœ¹ã次ã®äžæ©ã決ããããã®çžè«åœ¹ãšããŠå
¥ãã
Worker 㯠generic 㪠subagent ãå¢ããããå¿
èŠæã ã advisor-request.v1 ãè¿ã
Lead ã advisor ã 1 åã ãåŒã¶
Advisor 㯠PLAN / CORRECTION / STOP ã®ã©ãããè¿ã
Lead ã¯ãã® advice ãåã Worker ã«è¿ããŠç¶è¡ããã
Reviewer ã¯æåŸã®ææç©ã ããèŠããadvisor ã®è¿çã« APPROVE / REQUEST_CHANGES ãåºããªã
Solo ã¢ãŒãã§ã® Advisor solo å®è¡ã§ã¯èŠªã»ãã·ã§ã³èªèº«ã Lead ãå
Œããã
ã€ãŸããèªåã§å®è£
ããèªåã§ advisor ã«çžè«ããæåŸã¯ç¬ç«ã¬ãã¥ãŒã«åãã圢ã«ãªãã
çžè«æ¡ä»¶ã¯ loop / breezing ãšåã
çžè« budget ã task ããšã«æå€§ 3 åã§åã
STOP ã¯ãã®å Žã§æ¢ãŸãããŠãŒã¶ãŒå€æãžäžãã
review artifact ã® gate ã¯é£ã°ããªã
Sprint Contract sprint-contract ã¯ããã®ã¿ã¹ã¯ãäœã§åæ Œã«ãããããæ©æ¢°ã§ã人ã§ãåãæå³ã§èªãã圢ã«ããå°ããªå¥çŽãã¡ã€ã«ã§ãã
æ¢å®ã®ä¿åå
㯠.claude/state/contracts/<task-id>.sprint-contract.json ã§ãã
node "${HARNESS_PLUGIN_ROOT} /scripts/generate-sprint-contract.js" 32.1.1
çæç©ã«ã¯æ¬¡ãå«ããŸãã
checks: DoD ãåè§£ãã確èªé
ç®
non_goals: ä»åãããªãããš
runtime_validation: test, lint, typecheck ãªã©ã®æ€èšŒã³ãã³ã
If you grep the same symbol twice in the same session, switch to harness_ast_search.
For a bugfix where homologous implementations appear across multiple modules, run harness_ast_search to find all implementations before editing.
Only when changed files include .ts or .tsx, the DoD requires zero new harness_lsp_diagnostics errors; if the harness MCP is not connected or the changed file types are not eligible, treat diagnostics as not-configured and non-blocking.
browser_validation: browser reviewer ãæ®ãã¹ã UI ãããŒæ€èšŒé
ç®
browser_mode: scripted ãŸã㯠exploratory
route: browser reviewer ã playwright / agent-browser / chrome-devtools ã®ã©ãã䜿ãã
risk_flags: needs-spike, security-sensitive, ux-regression ãªã©
reviewer_profile: static, runtime, browser
Phase C: Post-delegateïŒçµ±åã»å ±åïŒ :
å
šã¿ã¹ã¯ã® commit log ãéèš
ãªããå®äºå ±å ïŒCompletion Report Output Contract ãš references/completion-report.md ã® Breezing ãã³ãã¬ãŒãïŒãåºå
Plans.md ã®æçµç¢ºèªïŒå
šã¿ã¹ã¯ cc:å®äº ã«ãªã£ãŠãããïŒ
CI 倱ææã®å¯Ÿå¿ CI ã倱æããå Žå:
ãã°ã確èªããŠãšã©ãŒãç¹å®
ä¿®æ£ã宿œ
åäžåå ã§ 3 å倱æãããèªåä¿®æ£ã«ãŒãã忢
倱æãã°ã»è©Šã¿ãä¿®æ£ã»æ®ãè«ç¹ããŸãšããŠãšã¹ã«ã¬ãŒã·ã§ã³
倱æã¿ã¹ã¯ã®èªååãã±ããå ã¿ã¹ã¯å®äºåŸã«ãã¹ã/CI ã倱æããå Žåãä¿®æ£ã¿ã¹ã¯æ¡ãèªåçæããæ¿èªåŸã« Plans.md ãžåæ ãã:
ããªã¬ãŒæ¡ä»¶ æ¡ä»¶ ã¢ã¯ã·ã§ã³ cc:å®äº åŸã«ãã¹ã倱æä¿®æ£ã¿ã¹ã¯æ¡ã state ã«ä¿åããæ¿èªãåŸ
〠CI 倱æïŒ3åæªæºïŒ ä¿®æ£ã宿œãã倱æã«ãŠã³ããã€ã³ã¯ãªã¡ã³ã CI 倱æïŒ3åç®ïŒ ä¿®æ£ã¿ã¹ã¯æ¡ãæç€º + ãšã¹ã«ã¬ãŒã·ã§ã³
ä¿®æ£ã¿ã¹ã¯ã®èªåçæ
倱æåå ãåé¡ïŒsyntax_error / import_error / type_error / assertion_error / timeout / runtime_errorïŒ
.claude/state/pending-fix-proposals.jsonl ã«ä¿®æ£ã¿ã¹ã¯æ¡ãä¿å:
çªå·: å
ã¿ã¹ã¯çªå· + .fix ãµãã£ãã¯ã¹ïŒäŸ: 26.1.fixïŒ
å
容: fix: [å
ã¿ã¹ã¯å] - [倱æåå ã«ããŽãª]
DoD: ãã¹ã/CI ãéãããš
Depends: å
ã¿ã¹ã¯çªå·
ãŠãŒã¶ãŒã approve fix <task_id> ãéããš Plans.md ã« cc:TODO ã§è¿œå
reject fix <task_id> ã§ææ¡ãç Žæ£ãpending ã1ä»¶ã ãã®ãšã㯠yes / no ã§ãå¿çå¯èœ
ã¬ãã¥ãŒã«ãŒã å®è£
å®äºåŸïŒã¹ããã 5 ã®åŸïŒã«èªåå®è¡ãããå質æ€èšŒã¹ããŒãžã
å
šã¢ãŒãå
±é ïŒSolo / Parallel / BreezingïŒã§çµ±äžçã«é©çšãããã
Parallel ã¢ãŒãã§ã¯å Worker ã step 10ïŒå€éšã¬ãã¥ãŒåä»ïŒãšããŠåãã«ãŒããå®è¡ããã
ã¬ãã¥ãŒå®è¡ã®åªå
é äœ 1. Codex execïŒåªå
ïŒ
â codex ã³ãã³ããååšããªã or ã¿ã€ã ã¢ãŠãïŒ120sïŒ
2. å
éš Reviewer agentïŒãã©ãŒã«ããã¯ïŒ
APPROVE / REQUEST_CHANGES ã®å€å®åºæº ã¬ãã¥ã¢ãŒã«ã¯ä»¥äžã®éŸå€åºæºãæž¡ãããã®åºæºã®ã¿ ã§ verdict ãå€å®ãããã
åºæºå€ã®æ¹åææ¡ã¯ recommendations ãšããŠè¿ãããverdict ã«ã¯åœ±é¿ããªãã
éèŠåºŠ å®çŸ© verdict ãžã®åœ±é¿ critical ã»ãã¥ãªãã£è匱æ§ãããŒã¿æå€±ãªã¹ã¯ãæ¬çªé害ã®å¯èœæ§ 1 ä»¶ã§ã â REQUEST_CHANGES major æ¢åæ©èœã®ç Žå£ã仿§ãšã®æç¢ºãªççŸããã¹ãäžéé 1 ä»¶ã§ã â REQUEST_CHANGES minor åœåæ¹åãã³ã¡ã³ãäžè¶³ãã¹ã¿ã€ã«äžçµ±äž verdict ã«åœ±é¿ããªã recommendation ãã¹ããã©ã¯ãã£ã¹ææ¡ãå°æ¥ã®æ¹åæ¡ verdict ã«åœ±é¿ããªã
éèŠ : minor / recommendation ã®ã¿ã®å Žå㯠å¿
ã APPROVE ãè¿ãããšã
ããã£ãã»ããè¯ãæ¹åã㯠REQUEST_CHANGES ã®çç±ã«ãªããªãã
Codex exec ã¬ãã¥ãŒïŒå
¬åŒãã©ã°ã€ã³çµç±ïŒ ã¿ã¹ã¯éå§æã® HEAD ã BASE_REF ãšããŠä¿æãããã® ref ãšã®å·®åãã¬ãã¥ãŒå¯Ÿè±¡ã«ããã
å
¬åŒãã©ã°ã€ã³ codex-plugin-cc ã® companion review ã䜿çšããã
BASE_REF=$(git rev-parse HEAD)
bash "${HARNESS_PLUGIN_ROOT} /scripts/codex-companion.sh" review --base "${BASE_REF} "
REVIEW_EXIT=$?
verdict ãããã³ã° ïŒå
¬åŒãã©ã°ã€ã³ â Harness 圢åŒïŒ:
å
¬åŒãã©ã°ã€ã³ã¯ review-output.schema.json æºæ ã®æ§é ååºåãè¿ãã
Harness ã® verdict 圢åŒãžã®å€æã«ãŒã«:
å
¬åŒ plugin Harness verdict åœ±é¿ approveAPPROVE- needs-attentionREQUEST_CHANGES- findings[].severity: criticalcritical_issues[]1ä»¶ã§ã â REQUEST_CHANGES findings[].severity: highmajor_issues[]1ä»¶ã§ã â REQUEST_CHANGES findings[].severity: medium/lowrecommendations[]verdict ã«åœ±é¿ããªã
AI Residuals ã¹ãã£ã³ã¯åŒãç¶ã bash "${HARNESS_PLUGIN_ROOT}/scripts/review-ai-residuals.sh" ã§å®è¡ãã
companion review ã®çµæãšåãããŠæçµ verdict ãå€å®ããã
AI_RESIDUALS_JSON="$(bash "${HARNESS_PLUGIN_ROOT} /scripts/review-ai-residuals.sh" --base-ref "${BASE_REF} " 2>/dev/null || echo '{"tool" :"review-ai-residuals" ,"scan_mode" :"diff" ,"base_ref" :null,"files_scanned" :[],"summary" :{"verdict" :"APPROVE" ,"major" :0,"minor" :0,"recommendation" :0,"total" :0},"observations" :[]}') "
å
éš Reviewer agent ãã©ãŒã«ãã㯠Codex exec ã䜿ããªãå ŽåïŒcommand -v codex ã倱æããŸã㯠exit code â 0ïŒ:
Agent tool: subagent_type="reviewer"
prompt: "以äžã®å€æŽãã¬ãã¥ãŒããŠãã ãããå€å®åºæº: critical/major â REQUEST_CHANGESãminor/recommendation ã®ã¿ â APPROVEãdiff: {git diff ${BASE_REF}}"
Reviewer agent 㯠Read-onlyïŒWrite/Edit/Bash ç¡å¹ïŒã§å®å
šã«ã¬ãã¥ãŒãå®è¡ããã
ä¿®æ£ã«ãŒãïŒREQUEST_CHANGES æïŒ review_count = 0
# sprint-contract ãååšãããšãã®ã¿ max_iterations ãèªããååšããªãå Žå㯠3ïŒåŸæ¹äºæïŒ
contract_path = get_sprint_contract_path() # äŸ: .claude/state/contracts/<task-id>.sprint-contract.json
MAX_REVIEWS = read_contract(contract_path, ".review.max_iterations") or 3
while verdict == "REQUEST_CHANGES" and review_count < MAX_REVIEWS:
1. ã¬ãã¥ãŒææãè§£æïŒcritical / major ã®ã¿å¯Ÿè±¡ïŒ
2. åææã«å¯ŸããŠä¿®æ£ãå®è£
3. å床ã¬ãã¥ãŒãå®è¡ïŒåãå€å®åºæºã»åãåªå
é äœïŒ
review_count++
if review_count >= MAX_REVIEWS and verdict != "APPROVE":
â ãŠãŒã¶ãŒã«ãšã¹ã«ã¬ãŒã·ã§ã³
â ãMAX_REVIEWS åä¿®æ£ããŸããã以äžã® critical/major ææãæ®ã£ãŠããŸãã+ ææäžèЧã衚瀺
â ãŠãŒã¶ãŒå€æãåŸ
ã€ïŒç¶è¡ / äžæïŒ
Breezing ã¢ãŒãã§ã®é©çš Breezing ã¢ãŒãã§ã¯ Lead ãã¬ãã¥ãŒã«ãŒããå®è¡ããïŒäžèš Phase B åç
§ïŒ:
Worker ã worktree å
ã§å®è£
ã»commit â Lead ã«çµæè¿åŽ
Lead ã Codex exec ã§ã¬ãã¥ãŒïŒåªå
ïŒ/ Reviewer agentïŒãã©ãŒã«ããã¯ïŒ
REQUEST_CHANGES â Lead ã send_input ã§ Worker ã«ä¿®æ£æç€ºããwait_agent ã§åå¿çãåŸ
〠â Worker ã amend
ä¿®æ£åŸãåã¬ãã¥ãŒïŒMAX_REVIEWS = read_contract(contract_path, ".review.max_iterations") or 3 åãŸã§ïŒ
APPROVE â Lead ã trunkïŒããã©ã«ããã©ã³ãïŒã« cherry-pick â Plans.md ã cc:å®äº [{hash}] ã«æŽæ°
Completion Report Output Contract Before rendering a Solo, forced single-task Parallel, or Breezing completion
report:
Resolve the active locale with the shared get_harness_locale function from
${HARNESS_PLUGIN_ROOT}/scripts/config-utils.sh. Pass an explicit session or
user language as its optional argument; otherwise keep the resolver priority
of project i18n.language, CLAUDE_CODE_HARNESS_LANG, then default en.
Unset, invalid, and resolved en render the English template.
Only resolved ja renders the Japanese template.
Japanese input alone does not select the Japanese template.
Read references/completion-report.md and render exactly one template for
the selected mode and locale.
Keep machine-readable status and review values in English, and never mix
English and Japanese labels in one report.
é¢é£ã¹ãã«
harness-plan â å®è¡ããã¿ã¹ã¯ãèšç»ãã
harness-sync â å®è£
ãš Plans.md ãåæãã
harness-review â å®è£
ã®ã¬ãã¥ãŒ
harness-release â ããŒãžã§ã³ãã³ãã»ãªãªãŒã¹