Skip to main content Home Creators whyzsm tiny-agents 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/whyzsm/tiny-agents --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 tech-tmax-backend-architect-team Single-Agent T-MAX Java backend architecture and engineering rule package. Use when Codex must design, implement, review, or diagnose T-MAX backend services involving Java 8, Spring Boot, Kylin, MyBatis XML, TiDB/MySQL, Apollo/Nacos, Feign, AnePageHelper, ResponseResult/DataGridResult, UEP export, Redis, RabbitMQ, or Maven multi-module repositories. Routes one Agent through repository intake, architecture decisions, API/data contracts, implementation diagnosis, quality/security review, and bounded evidence loops while keeping builds, tests, live calls, commits, and pushes as separate authority boundaries.
Create polished consulting-style single-file HTML research reports from messy business notes, screenshots, metrics, and iterative user feedback. Use this skill whenever the user asks for a åšè¯¢é£/èŸçåšè¯¢é£/ç ç©¶æ¥å/æ±æ¥æ¥å/HTMLæ¥å, wants business or AI landing-practice material turned into a management-facing report, asks to add charts/diagrams, or asks to update report metrics and keep the whole HTML report consistent.
harmonyos-app-store-self-check Audit HarmonyOS applications for AppGallery/AGC release readiness, including Huawei UX/HMI controls, system-feature integrations, and performance gates for multi-input interaction, latency, frame rate, content display, memory, and CPU. Use when users ask for éž¿èäžæ¶èªæ£ãåºçšåžåºå®¡æ žãAGCååžåæ£æ¥ãæ§ä»¶/ç³»ç»ç¹æ§/人æºäº€äº/çŸå/éç§/æé/æªåŸ/æ§èœæ žå¯¹æ release å
éšçŠ, especially for Stage-model projects with module.json5, build-profile.json5, hvigorw, and local-first data constraints.
Related occupations SOC
Based on SOC occupation classification
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 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","Task","Monitor"] argument-hint [all] [task-number|range] [--codex] [--parallel N] [--no-commit] [--resume id] [--breezing] [--auto-mode] [--tdd-bypass] user-invocable true 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 ã«å§èšïŒæç€ºæã®ã¿ïŒ Cursor host (adapter candidate) cursor Task/subagent routing via .cursor/AGENTS.md; not auto-selected /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 åé¢ã®ã¡ãªãããåºå§ããéŸå€ 4 ä»¶ä»¥äž Breezing Lead èª¿æŽ + Worker 䞊å + Reviewer ç¬ç«ã®äžè
åé¢ã广ç
ã«ãŒã«
æç€ºãã©ã°ã¯åžžã«ãªãŒãã¢ãŒããäžæžã ãã
--parallel N â Parallel ã¢ãŒãïŒã¿ã¹ã¯æ°ã«é¢ä¿ãªãïŒ
â Breezing ã¢ãŒãïŒã¿ã¹ã¯æ°ã«é¢ä¿ãªãïŒ
--breezing
--codex â Codex ã¢ãŒãïŒã¿ã¹ã¯æ°ã«é¢ä¿ãªãïŒ
--codex ã¯æç€ºæã®ã¿çºå ãCodex CLI ãæªã€ã³ã¹ããŒã«ã®ç°å¢ããããããèªåéžæããªã
--codex ã¯ä»ã¢ãŒããšçµã¿åããå¯èœ: --codex --breezing â Codex + Breezing
Execution Backend SelectionïŒå®è£
ããã¯ãšã³ãéžæïŒ ããã¯ãšã³ãïŒã©ã®ã©ã³ã¿ã€ã ãå®è£
ããã ïŒã¯ãå®è¡ã¢ãŒãïŒããããžãŒ: solo / parallel / breezingïŒãšçŽäº€ããã
å®è¡ã¢ãŒãããäœã¯ãŒã«ãŒã§ã»ã©ãåå²ããŠåããããæ±ºããã®ã«å¯Ÿããããã¯ãšã³ãã¯ãå®è£
ã®æã誰ãåãããããæ±ºããã
backend å®è£
ã®æ
ãæ å§èšã³ãã³ã claudeïŒæ¢å®ïŒTask subagentïŒagents/worker.mdïŒ Agent tool ã§ 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 ã®ååè¡ > æ¢å®å€ claudeããããžã§ã¯ãèšå®ã¯ãŠãŒã¶ãŒã¹ã³ãŒããäžæžãããã
æç€ºãã©ã°ïŒ--backend / --cursor / --codexïŒã¯ env / file / default ãåžžã«äžæžãããã
èªç¶èšèª 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 ã Claude Worker å
ã®è¿œå agent ãšè§£éãããé claude backend ã®èŠçŽã©ãã Worker agent ãæãŸãã« cursor-companion.sh ãçŽæ¥åŒã¶ã
role-scoped å¶çŽ ããã¯ãšã³ã㯠role-scoped ã解決æžã¿ããã¯ãšã³ãã䜿ãã®ã¯å®è£
ïŒworkerïŒããŒã«ã ãã
Reviewer ãš Advisor ã®äž¡ããŒã«ã¯åžžã« brainïŒ--host claudeãOpusïŒã«åºå®ããã
Reviewer ã cursor / codex ããã¯ãšã³ãã« routing ããªãïŒå®è£
ããããã¯ãšã³ããèªåã®åºåãã¬ãã¥ãŒããŠã¯ãªããªãïŒã
bash "${HARNESS_PLUGIN_ROOT} /scripts/model-routing.sh" --host cursor --role worker --field model
bash "${HARNESS_PLUGIN_ROOT} /scripts/model-routing.sh" --host claude --role reviewer --field model
bash "${HARNESS_PLUGIN_ROOT} /scripts/model-routing.sh" --host claude --role advisor --field model
ã¢ãã«åã®æ£æ¬ã¯ model-routing.sh åŽãæ¬ããã¥ã¡ã³ãäžã® composer-2.5-fast ã¯åç
§å€ã§ãããå®éã®è§£æ±ºã¯äžèšã³ãã³ãã«åŸãïŒdrift 鲿¢ïŒã
é claude ããã¯ãšã³ãã®ããããžãŒïŒWorker ä»åšãªãïŒ backend ã codex ãŸã㯠cursor ã®å ŽåãLead 㯠Worker agent (claude-code-harness:worker) ã spawn ããªã ã
代ããã« Lead èªèº«ã cursor-companion.sh / codex-companion.sh ãçŽæ¥åŒã¶ã
Worker å±€ã®ä»åšã¯ backend=claude ã®ãšãã ãã
backend çµè·¯ claudeïŒæ¢å®ïŒLead â Worker (claude-code-harness:worker agent) â ⊠â Lead review â cherry-pick codexLead â codex-companion.sh task --write â Lead review â cherry-pick cursorLead â cursor-companion.sh task --write --workspace <isolated-wt> â Lead review â cherry-pick
é claude backend ã§ Worker ãéã«æããšãLead â Worker â companion â composer/codex ãšäºæ®µå§è²ã«ãªããWorker ã®ååšæçŸ©ïŒagent å¥çŽã«ãã self_review 5 ä»¶ã®ã²ãŒãïŒã空åãããïŒé claude ã§ã¯ worker-report.v1 ã self_review ãçæãããªãããïŒãLead 㯠Worker ãã¹ãããã㊠companion ãçŽæ¥åŒã¶ã
é claude backend ã® companion åŒã³åºãã§ããLead ã¯å
ã«å°çš worktree ãäœããcompanion stdout ã companion-result.v1 çžåœã® {baseCommit, commit, worktreePath, branch, files_changed, summary} ã«æ£èŠåããŠããæ¢åã® Lead review / cherry-pick çµè·¯ãžæž¡ããREQUEST_CHANGES æã¯ SendMessage ã䜿ãããåã worktree ã§ cursor-companion.sh / codex-companion.sh ãåå®è¡ããbaseCommit..HEAD ãåã¬ãã¥ãŒã㊠range cherry-pick ããã
é 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 ãåç
§ã
Lead ã® cherry-pick åã²ãŒãïŒcontract grep ãå¿
é ïŒ é claude backend (cursor / codex) ã®åºåã main ã«ãšã蟌ãåã«ãLead 㯠ç®èŠ diff + contract grep ã®äºæ®µã²ãŒã ãå¿
ãéããç®èŠ diff ã ãã§ APPROVE ããªãã
ã²ãŒã ã³ãã³ã æ€ç¥ã§ãããã® diff ç®èŠ git show <sha>倿Žãæå³ã©ãããã»ä»ãã¡ã€ã« touch ãªããã»support tier 衚èšäžå€ã contract grep bash tests/test-support-claim-wording.shå
¬é support 衚èšã®ç Žå£ contract grep bash scripts/ci/check-consistency.shi18n / locale / mirror / capability matrix ã®åºå®æååå¥çŽç Žå£ contract grep bash tests/validate-plugin.shplugin é
åžå¥çŽã»hook é
ç·
å
š PASS ã®ãšãã ã cherry-pick ã1 ä»¶ã§ã fail ãªã revert ãŸã㯠composer ã«åå§èšïŒåäžæååå¥çŽãä¿ã€ããæç€ºïŒã
çç±: docs / README / locale / capability-matrix / spec.md ã«ã¯ grep ã§ç£èŠããã åºå®æååå¥çŽ ããã (äŸ: README_ja.md ã® 5åè©ã¯ãŒã¯ãããŒ)ãcomposer ã¯è¡šé¢çãªèšèªçéè€ãæ©æ¢°çã«åæžããåŸåããããç®èŠ diff ã§ã¯ã綺éºãª dedupãã«èŠããŠãåºå®å¥ãç Žå£ãããã
ãªãã·ã§ã³ ãªãã·ã§ã³ 説æ ããã©ã«ã allå
šæªå®äºã¿ã¹ã¯ã察象 - N or N-Mã¿ã¹ã¯çªå·/ç¯å²æå® - --parallel N䞊åã¯ãŒã«ãŒæ° auto --sequentialçŽåå®è¡åŒ·å¶ - --codexCodex CLI ã§å®è£
å§èšïŒæç€ºæã®ã¿ãèªåéžæããªãïŒ false --backend <claude|codex|cursor>æç€ºããã¯ãšã³ãéžæïŒworker ããŒã«ã®ã¿é©çšãprecedence æäžäœïŒ claude --cursorcursor backendïŒ--codex ãšåæ§ãæç€ºæã®ã¿ãcursor-agent æªã€ã³ã¹ããŒã«ç°å¢ãããããèªåéžæããªãïŒ false --plan NAMEplans/manifest.json ã® named plan ã䜿ãactive/default --no-commitèªåã³ãããæå¶ false --resume <id|latest>ååã»ãã·ã§ã³åéãé·ã空ããåŸã¯ /recap 䜵çšãæšå¥š - --breezingLead/Worker/Reviewer ã®ããŒã å®è¡ false --no-tddTDD ãã§ãŒãºã¹ããã false --tdd-bypassç·æ¥æã ã TDD 匷å¶ã bypassãHARNESS_TDD_BYPASS_REASON ãŸãã¯æç€ºçç±ã audit ã«æ®ã false --no-simplifyAuto-Refinement ã¹ããã false --auto-modeHarness åŽã® Auto Mode rollout ãæç€ºãCC 2.1.111 ã§äžèŠã«ãªã£ã --enable-auto-mode ãšã¯å¥ç© false
Progressive Disclosure ãŸããã®æ¬æã§å
¥å£ãèªåéžæã忢æ¡ä»¶ã ãã確èªããã
詳现ã¯å¿
èŠã«ãªã£ãæã ãèªãã
詳现 åç
§ Solo / Parallel / Codex / Breezing ã®å
·äœæé references/execution-modes.mdCodex reviewãReviewer fallbackãAI Residualsãä¿®æ£ã«ãŒã references/review-loop.mdSolo / Breezing å®äºå ±åã®çæ 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 ãæå¹ã«ããŠ
ããã³ããããŒã¯ã³ãåæžã§ããã
Prompt Cache (CC 2.1.108+) : é·ãã®å®è£
ã --resume ãå€çšããäœæ¥ã§ã¯
ENABLE_PROMPT_CACHING_1H=1 ãåªå
ããã
ã¹ã³ãŒããã€ã¢ãã°ïŒåŒæ°ãªãæïŒ /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 ãéžã¶ æ¹åŒã«çµ±äžããã
ãã㯠docs/model-routing-policy.mdïŒeffort ã free-text ããæšæž¬ããªãïŒãš
.claude/rules/opus-4-7-prompt-audit.md åæ Œæ¡ä»¶ 5ïŒxhigh ã¯åŒã³åºãåŽãéžã¶ïŒãšæŽåããã
å€èŠçŽ ã¹ã³ã¢ãªã³ã° ã¿ã¹ã¯çææã«ä»¥äžã®ã¹ã³ã¢ãåç®ããã
èŠçŽ æ¡ä»¶ ã¹ã³ã¢ ãã¡ã€ã«æ° 倿Žå¯Ÿè±¡ 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 ãäžæ¬åããŠç®¡çïŒã
Worker 㯠Sonnet 4.6 ã®ãã xhigh ã¯å®å¹ high ã«ããŠã³ã°ã¬ãŒããããããtier åŒãäžãèªäœã¯æå¹ïŒdocs/effort-level-policy.mdïŒã
å®è¡ã¢ãŒã詳现
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_non_claude_companion_review_loop(worker_result)
else:
run_native_solo_or_parallel()
def enter_non_claude_companion_review_loop(worker_result):
# companion-result.v1 has no worker_id and no worker_result.self_review.
# Do not use the Worker-only SendMessage/self_review loop for cursor/codex.
latest_commit = worker_result.commit
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 = 0
MAX_REVIEWS = read_contract(contract_path, ".review.max_iterations") or 3
while verdict == "REQUEST_CHANGES" and review_count < MAX_REVIEWS:
previous_commit = latest_commit
if backend == "cursor":
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.\"")
else:
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 backend == "cursor" and 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("{backend} companion retry produced no new commit")
worker_result.commit = latest_commit
worker_result.summary = companion_output
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++
if verdict == "APPROVE":
git cherry-pick --no-commit {worker_result.baseCommit}..{worker_result.commit}
Parallel 㯠task ããšã«ãã® resolver path ãé©çšããã
backend=cursor / codex ã®å Žå㯠native Worker spawn ã䜿ãããtask ããšã« isolated companion worktree ãäœæã㊠companion-result.v1 ã«æ£èŠåããŠãã non-Claude companion å°çšã® range 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:å®äº ã®ã¿
ãªããå®äºå ±å ïŒãå®äºå ±åãã©ãŒããããåç
§ïŒ
倱ææã®èªååèšç» ïŒãã¹ã/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ã»æ§é ååºåãæäŸããã
çµæãæ€èšŒããåè³ªåºæºãæºãããªãå Žåã¯èªåã§ä¿®æ£ã
Cursor ã¢ãŒãïŒadapter candidateãèªåéžæããªãïŒ Cursor host ã§ã¯ .cursor/AGENTS.md ãš .cursor-plugin/plugin.json ã
bootstrap routeãCursor 㯠candidate ã®ãŸãŸ â supported claim ã¯çŠæ¢ã
Solo / Parallel : Task tool ãŸã㯠.cursor/agents/worker.md subagent
Breezing : Worker 䞊å㯠non-overlapping file groups ã®ã¿;
Reviewer / cherry-pick / Advisor 㯠core ã©ããçŽå
Multitask / background agents : smoke target ã®ã¿ãClaude Agent Teams parity
ã䞻匵ããªã
bash scripts/model-routing.sh --host cursor --role worker --format json
Explicit Task/subagent model ã routed default ããåªå
ã
bash tests/test-cursor-adapter-candidate.sh
Breezing ã¢ãŒãïŒ4 件以äžã§èªåéžæ / --breezing ã§åŒ·å¶ïŒ Lead / Worker / Advisor / Reviewer ã®åœ¹å²åé¢ã§ããŒã å®è¡ããã
Codex ã§ã¯ spawn_agent, wait, send_input, resume_agent, close_agent
ã䜿ã£ã native subagent orchestration ãåæã«ãã
å€ã TeamCreate / TaskCreate ããŒã¹ã®èª¬æãæ¡ããªãã
Cursor ã§ã¯ Task/subagent/background agents ãž mapping ãããã
review/cherry-pick ã®çŽå責å㯠core åŽã«æ®ãïŒadapter smoke targetïŒã
çŸè¡ã® 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 (task-worker agent) â å®è£
æ
åœ
âââ Advisor (claude-code-harness:advisor) â æ¹éå©èš
âââ Reviewer (code-reviewer agent) â ã¬ãã¥ãŒæ
åœ
Phase A: Pre-delegateïŒæºåïŒ :
Plans.md ãèªã¿èŸŒã¿ã察象ã¿ã¹ã¯ãç¹å®
äŸåã°ã©ããè§£æããå®è¡é åºã決å®ïŒDepends ã«ã©ã ïŒ
åã¿ã¹ã¯ã® 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 æ³šèš : 以äžã¯ Claude Code ã® API æ§æã§èšè¿°ã
Codex ç°å¢ã§ã¯ Agent(...) â spawn_agent(...), SendMessage(...) â send_input(...) ã«èªã¿æ¿ãã
詳现㯠team-composition.md ã® API ãããã³ã°è¡šãåç
§ã
for task in execution_order:
# 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 spawnïŒãã©ã¢ã°ã©ãŠã³ããworktree åé¢ïŒ
# Agent tool ã®æ»ãå€ã« agentId ãå«ãŸãã â ä¿®æ£ã«ãŒãã§ SendMessage ã«äœ¿çš
Plans.md: task.status = "cc:WIP" # çææã«æŽæ°ïŒæªçæã¿ã¹ã¯ã¯ cc:TODO ã®ãŸãŸïŒ
# 鿬¡ /harness-work ã飿ããŠããæã universal violations ãäŒæããã
# ïŒååå®è¡æã¯ universal_violations = [] ã§åæåæžã¿æ³å®ïŒ
briefing_header = ""
if universal_violations:
briefing_header = (
"ðš åäžã»ãã·ã§ã³ã§æ¢ã«æ€åºããã universal éåïŒåçºçŠæ¢ïŒ:\n"
+ "\n".join(f"- {v}" for v in universal_violations)
+ "\n\n"
)
worker_result = Agent(
subagent_type="claude-code-harness:worker",
prompt=briefing_header + "ã¿ã¹ã¯: {task.å
容}\nDoD: {task.DoD}\ncontract_path: {contract_path}\nmode: breezing",
isolation="worktree",
run_in_background=false # ãã©ã¢ã°ã©ãŠã³ãã§å®è¡ â Worker å®äºãŸã§åŸ
æ©
)
worker_id = worker_result.agentId # SendMessage çšã«ä¿æ
# worker_result ã«ã¯ {commit, worktreePath, files_changed, summary} ãå«ãŸãã
# B-3. Worker ã advice request ãè¿ããæã ããLead ã Advisor ãåŒã¶
if worker_result.type == "advisor-request.v1":
advisor_result = Advisor(
prompt=worker_result.request_json
)
worker_result = SendMessage(
to=worker_id,
message="advisor-response.v1: {advisor_result}"
)
# B-3.5. self_review ã²ãŒãïŒReviewer spawn åãLead ãæ©æ¢°çã«æ€èšŒïŒ
# Worker ã® worker-report.v1 ã« active self_review rules ãããããå
š verified=true ã〠evidence é空ã§ããããš
# tdd.enforce.enabled=true ã〠tdd_required=true ã®æã¯ `tdd-red-evidence-attached` ã active rule ãšããŠå¿
é
# verified=false ãŸã㯠evidence=="" ã 1 ä»¶ã§ãããã° Reviewer ã spawn ãã Worker ã«å·®ãæ»ã
self_review_failures = 0
MAX_SELF_REVIEW_RETRIES = 2 # 3 åç® (retries=2) ã§ Lead ã escalate
while True:
unverified = [
r for r in worker_result.self_review
if (not r.get("verified")) or (not r.get("evidence"))
]
if not unverified:
break # å
š rule verified â B-4 (å®ã¬ãã¥ãŒ) ãžé²ã
self_review_failures += 1
if self_review_failures > MAX_SELF_REVIEW_RETRIES:
# 3 åç®ã§ãæªç¢ºèªé
ç®ãã â Lead ã« escalate
Plans.md: task.status = "cc:TODO" # çæåã«æ»ã
raise EscalationError(f"self_review ã 3 åã®å·®ãæ»ãã§ãæªç¢ºèª (rules: {[u['rule'] for u in unverified]})")
# Worker ã«å·®ãæ»ã (Reviewer spawn ãã)
SendMessage(
to=worker_id,
message=f"self_review ã«æªç¢ºèª rule ããããŸã: {[u['rule'] for u in unverified]}ãå rule ã® evidence ãå®ã³ãã³ãåºåãŸã㯠literal ãã¹ãçµæã§åããTDD å¿
é æã¯ .claude/state/tdd-red-log/<task-id>.jsonl ãŸã㯠literal failing test output ãæ·»ã㊠verified=true ã«ããŠãã amend ããŠãã ãã"
)
worker_result = wait_for_response(worker_id)
# B-4. Lead ãã¬ãã¥ãŒå®è¡ïŒCodex exec åªå
ïŒ
diff_text = git("-C", worker_result.worktreePath, "show", worker_result.commit)
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 ãŸã§ïŒ
# Worker ã¯ãã©ã¢ã°ã©ãŠã³ãã§å®äºæžã¿ã ããSendMessage ã§åéå¯èœ
# ïŒCC: SendMessage(to: agentId) / Codex: resume_agent(agent_id) + send_inputïŒ
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:
SendMessage(to=worker_id, message="ææå
容: {issues}\nä¿®æ£ã㊠amend ããŠãã ãã")
# Worker ãä¿®æ£ â amend â æŽæ°ããã commit hash ãè¿ã
updated_result = wait_for_response(worker_id)
latest_commit = updated_result.commit
diff_text = git("-C", worker_result.worktreePath, "show", latest_commit)
verdict = codex_exec_review(diff_text) or reviewer_agent_review(diff_text)
review_count++
# B-6. 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:
git cherry-pick --no-commit {latest_commit} # feature branch â 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-7. Progress feed
print("ð Progress: Task {completed}/{total} å®äº â {task.å
容}")
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 ãªã©ã®æ€èšŒã³ãã³ã
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 ãéèš
ãªããå®äºå ±å ïŒãå®äºå ±åãã©ãŒããããã® 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} " --include-untracked 2>/dev/null || echo '{"tool" :"review-ai-residuals" ,"scan_mode" :"diff" ,"base_ref" :null,"include_untracked" :true,"files_scanned" :[],"untracked_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 ã SendMessage ã§ Worker ã«ä¿®æ£æç€º â Worker ã amend
ä¿®æ£åŸãåã¬ãã¥ãŒïŒMAX_REVIEWS = read_contract(contract_path, ".review.max_iterations") or 3 åãŸã§ïŒ
APPROVE â Lead ã trunkïŒããã©ã«ããã©ã³ãïŒã« cherry-pick â Plans.md ã cc:å®äº [{hash}] ã«æŽæ°
å®äºå ±åãã©ãŒããã ã¿ã¹ã¯å®äºæïŒcc:å®äº + commit åŸïŒã«èªååºåãããèŠèŠçãµããªã
éå°éå®¶ã«ã倿Žå
容ãšåœ±é¿ãäŒããããšãç®çãšããã
ãã³ãã¬ãŒã âââââââââââââââââââââââââââââââââââââââââââââââ
â â Task {N} å®äº: {ã¿ã¹ã¯å} â
âââââââââââââââââââââââââââââââââââââââââââââââ€
â â
â â äœãããã â
â ⢠{倿Žå
容 1} â
â ⢠{倿Žå
容 2} â
â â
â â äœãå€ããã â
â Before: {æ§åäœ} â
â After: {æ°åäœ} â
â â
â â 倿Žãã¡ã€ã« ({N} files) â
â {ãã¡ã€ã«ãã¹ 1} â
â {ãã¡ã€ã«ãã¹ 2} â
â â
â â æ®ãã®èª²é¡ â
â ⢠Task {X} ({status}): {å
容} â Plans.md â
â ⢠Task {Y} ({status}): {å
容} â Plans.md â
â ïŒPlans.md ã« {M} ä»¶ã®æªå®äºã¿ã¹ã¯ããïŒ â
â â
â commit: {hash} | review: {APPROVE} â
âââââââââââââââââââââââââââââââââââââââââââââââ
çæã«ãŒã«
äœãããã : git diff --stat HEAD~1 ãš commit message ããèªåæœåºãæè¡çšèªã¯æå°éã«ããåè©ã§å§ãã
äœãå€ããã : ã¿ã¹ã¯ã®ãå
容ããšãDoDããã Before/After ãæšè«ããŠãŒã¶ãŒäœéšã®å€åãéèŠ
倿Žãã¡ã€ã« : git diff --name-only HEAD~1 ããååŸã5 ãã¡ã€ã«è¶
ã¯çç¥ããŠä»¶æ°è¡šç€º
æ®ãã®èª²é¡ : Plans.md ã® cc:TODO / cc:WIP ã¿ã¹ã¯ãäžèŠ§è¡šç€ºãPlans.md ã«èšèŒæžã¿ãã©ãããæç€º
review : ã¬ãã¥ãŒçµæïŒAPPROVE / REQUEST_CHANGES â APPROVEïŒã衚瀺
Parallel ã¢ãŒãã§ã®å ±å
1 ã¿ã¹ã¯ ïŒ--parallel åŒ·å¶æïŒ: Solo ãã³ãã¬ãŒãã䜿çš
è€æ°ã¿ã¹ã¯ : Breezing éçŽãã³ãã¬ãŒãã䜿çšïŒäžèšåç
§ïŒ
Breezing ã¢ãŒãã§ã®å ±å å
šã¿ã¹ã¯å®äºåŸã«ãŸãšããŠåºåãåã¿ã¹ã¯ã¯ç°¡ç¥çïŒäœãããã + commit hash ã®ã¿ïŒã§äžèЧãã
æåŸã«å
šäœãµããªïŒåèšå€æŽãã¡ã€ã«æ° + æ®ã課é¡ïŒãåºåãã:
âââââââââââââââââââââââââââââââââââââââââââââââ
â â Breezing å®äº: {N}/{M} ã¿ã¹ã¯ â
âââââââââââââââââââââââââââââââââââââââââââââââ€
â â
â 1. â {ã¿ã¹ã¯å 1} [{hash1}] â
â 2. â {ã¿ã¹ã¯å 2} [{hash2}] â
â 3. â {ã¿ã¹ã¯å 3} [{hash3}] â
â â
â â å
šäœã®å€æŽ â
â {N} files changed, {A} insertions(+), â
â {D} deletions(-) â
â â
â â æ®ãã®èª²é¡ â
â Plans.md ã« {K} ä»¶ã®æªå®äºã¿ã¹ã¯ãã â
â ⢠Task {X}: {å
容} â
â â
âââââââââââââââââââââââââââââââââââââââââââââââ
é¢é£ã¹ãã«
harness-plan â å®è¡ããã¿ã¹ã¯ãèšç»ãã
harness-sync â å®è£
ãš Plans.md ãåæãã
harness-review â å®è£
ã®ã¬ãã¥ãŒ
harness-release â ããŒãžã§ã³ãã³ãã»ãªãªãŒã¹