| name | orchestrate-epic |
| description | Orchestrate Epic issue as team leader. Delegate sub-issues to member agents in isolated worktrees. Members run in background and communicate via SendMessage. |
| disable-model-invocation | true |
| argument-hint | <epic-issue-url> |
Orchestrate Epic
ããŒã ãªãŒããŒãšããŠè¡åãããµã Issue ãã¡ã³ããŒãšãŒãžã§ã³ããžå§è²ãããã¡ã³ããŒã¯éé¢ããã worktree ã§åäœããã
NOTE: Do NOT use Agent Teams (team_name / TeamCreate). Agent Teams + worktree isolation is a known incompatibility (anthropics/claude-code#33045). Instead, launch members as background agents with isolation: "worktree" and communicate via SendMessage by agent name.
åŒæ°
GitHub ã® Epic Issue URL (äŸ: https://github.com/owner/repo/issues/123)
$ARGUMENTS
圹å²
ãªãŒã㌠(= ãã®ã¡ã€ã³ã»ãã·ã§ã³)
- Epic ãèªã¿ããµã Issue ãæŽãåºã
- äŸåé¢ä¿ãèæ
®ããŠãµã Issue ã®åªå
床ãšå®è¡é åºã決ãã
- å®è¡ã¢ãŒã (鿬¡ãŸãã¯äžŠå) ããŠãŒã¶ãŒã«éžæããŠããã
- ã¡ã³ããŒãšãŒãžã§ã³ããéé¢ããã worktree ã§èµ·åãã
- åã¡ã³ããŒã®ã¬ããŒããã¬ãã¥ãŒããææç©ãæ¿èªãã
- SendMessage ã§ãŠãŒã¶ãŒã®æç€ºãã¡ã³ããŒãžäžç¶ãã
- ã³ãŒãã¯æžããªã
- ãã©ã³ãã¯äœæããªã â èµ·åæç¹ã§ã¢ã¯ãã£ããªããŒã¹ãã©ã³ãã«çãŸã
ã¡ã³ã㌠(member-<issue-number>)
@.claude/agents/worktree-worker.md ã§å®çŸ©ããã
isolation: "worktree" ã§ããã¯ã°ã©ãŠã³ãå®è¡ãã
- worktree å
ã§ã®ã¿äœæ¥ãã
- çè§£ â å®è£
â ã¬ããŒã â ææç©æåºã®ã¯ãŒã¯ãããŒã«åŸã
- SendMessage ã§é²æãå ±åãã
- æçµã¬ããŒãã«
## Worktree Info ãããã¯ãå¿
ãå«ãã (branch / path / wt <branch>)ããŠãŒã¶ãŒã¯ wezterm ã®å¥ãã€ã³ãã wt <branch> ã§ worktree ã«å
¥ããæå
ã® Claude Code ã§ç¶ããè§Šããã
- 人æãããã«ãŒ (requires-user-action): Terraform applyãæ¬çªãããã€ãèªèšŒæ
å ±ã®çºè¡ãªã©ããšãŒãžã§ã³ããå®å
šã«å®äºã§ããªãäœæ¥ã¯ãã³ãŒãéšåãå®äºããæç¹ã§ã¬ããŒãæ«å°Ÿã«
## Requires user action ãããã¯ãç«ãŠãŠå
·äœçãªæé ãåæãããã³ãŒããæªå®äºãªã®ã§ã¯ãªãããã以äžã¯ãŠãŒã¶ãŒäœæ¥ããšããç¶æ
ã¯æ£èŠã®ãŽãŒã«ãšããŠæ±ã£ãŠè¯ãã
- ã»ãã·ã§ã³ã¯ dormant ç¶æ
ã§ä¿æ: PR äœæãæçµã¬ããŒãåŸãã¡ã³ããŒã®ããã»ã¹ã¯å¿çå®äºã§äžæŠ stop ããããã³ã³ããã¹ããš worktree ã¯ç Žæ£ãããªãããªãŒããŒãã SendMessage ãæ¥ãã°èªå resume ããæèãä¿ã£ããŸãŸè¿œå äœæ¥ãã§ããããªãŒããŒãæç€ºçã«
shutdown_request ãéããŸã§ãã®ç¶æ
ãç¶æããã
ã¯ãŒã¯ãããŒ
ãã§ãŒãº 1: Epic ã®èªã¿èŸŒã¿ãšèšç»
-
URL ãããªãŒããŒããªããžããªãIssue çªå·ãæœåºãã
-
Epic ã®è©³çްãååŸãã:
gh issue view <number> --repo <owner>/<repo> --json number,title,body,state,url
-
ãµã Issue ãååŸãã:
gh issue view <number> --repo <owner>/<repo> --json subIssues --jq '.subIssues.nodes[] | {number, title, state}'
-
ååŸã«å€±æããå Žåã¯ãEpic æ¬æã® Issue åç
§ (#123, - [ ] #123) ãããŒã¹ãã
-
åãµã Issue ã®è©³çްãååŸãã:
gh issue view <sub-number> --repo <owner>/<repo> --json number,title,body,state,url
-
ãªãŒãã³ãªãµã Issue ã®ã¿ã«ãã£ã«ã¿ãã
-
äŸåé¢ä¿ãåæããäŸåã°ã©ãã Phase 衚ã§å¯èŠåãããå Phase ã«ã¯åæã«èµ·åå¯èœãªïŒäŸåã解決æžã¿ã®ïŒIssue ã®ã¿ãå
¥ãã:
Phase 1 (䞊åå¯ã»ç¬ç«):
ââ #N1 <title>
ââ #N2 <title>
Phase 2 (#N2 å®äºåŸã»äžŠåå¯):
ââ #N3 <title>
ââ #N4 <title>
Phase 3 (å
šå®äºåŸ):
ââ #N5 <title>
å Issue è¡ã«ãäŸåå
Issue çªå·ããæ«å°Ÿã«èšèŒããŠæ ¹æ ãæç€ºããïŒäŸ: #N3 <title> äŸå: #N2ïŒã
-
é åºä»ã Phase 衚ãšäŸåé¢ä¿ã衚瀺ãããŠãŒã¶ãŒã«ç¢ºèªãã:
å®è¡ã¢ãŒã:
- Sequential â ã¡ã³ããŒã 1 ã€ãã€èµ·åããåã¡ã³ããŒãæ¿èªãããŠããæ¬¡ãéå§ãã (äŸåé¢ä¿ããã€ãã1 ä»¶ãã€ã¬ãã¥ãŒãããå Žååã)
- Parallel â å
šã¡ã³ããŒãåæã«èµ·åããããããç¬ç«ããŠäœæ¥ãã (ãµã Issue éã«äŸåãç¡ãå Žåã®ã¿ãäŸåãããç¶æ
ã§ãããéžã¶ãš [critical] äŸåéåã«ãªãããããã®å Žå㯠Phased Parallel ã䜿ãããš)
- Phased ParallelïŒæšå¥š: äŸåãããäžèŠæš¡ Epic ã®æ¢å®ïŒ â Phase 衚ã®å Phase å
ã¯ã¡ã³ããŒã䞊åèµ·åããPhase å®äºïŒ= ãã® Phase å
ã®å
šã¡ã³ããŒã PR äœæãŸãã¯ãŠãŒã¶ãŒæ¿èªæžã¿ïŒãåŸ
ã£ãŠæ¬¡ Phase ãèµ·åãã
ã¢ãŒããéžæããPhase 衚ã®é åºã確èªããŠãã ããã
ãã§ãŒãº 2: å§è²
ã¡ã³ããŒèµ·åãã¿ãŒã³:
Agent({
name: "member-<issue-number>",
subagent_type: "worktree-worker",
isolation: "worktree",
run_in_background: true,
prompt: "Your assignment: Sub-issue #<number> in <owner>/<repo>.\nTitle: <title>\nURL: <url>\n\nDetails:\n<body>\n\nSend your report to: team-lead\n\nREMINDER: You are in an isolated worktree. NEVER checkout/switch branches in the main repo. Stay in your worktree directory. Run `pwd` before any git operation to confirm.\n\nWORKTREE INFO RULE: In your FINAL report (Phase C), you MUST append a `## Worktree Info` block with three lines: `- Branch: <git branch --show-current output>`, `- Path: <pwd output>`, `- Enter via: \\`wt <branch>\\``. The human user uses this to jump into the worktree from wezterm and continue work in a local Claude Code session there.\n\nSESSION LIFECYCLE RULE: Do not self-terminate. Your process will go dormant after each response, but your context and worktree are preserved; the leader can resume you with SendMessage at any time. The leader will only send shutdown_request after the PR is merged or closed.\n\nPR CREATION RULE: Before opening a PR, check for `.github/PULL_REQUEST_TEMPLATE.md` (and `.github/PULL_REQUEST_TEMPLATE/*.md`). If present, you MUST follow it verbatim: preserve every section heading (e.g. `## Issue`, `## ãªããã®å€æŽãå¿
èŠã`, `## åäœç¢ºèª`, `## ãã®ä»`) in the same order, keep all HTML comments (review-tool instructions, prefix rules) intact, and only fill in the placeholder content inside each section. Do not invent new top-level sections or reorder them. If no template exists, use a concise body with a clear `## Summary` and `## Test plan`."
})
PR ãã³ãã¬æºæ ã¯ã¡ã³ããŒã®çŸ©åããªãŒããŒã¯èµ·åããã³ããã«äžèš PR CREATION RULE ãå«ãŸããŠããããšãæ¯å確èªãããã¡ã³ããŒã PR äœæåŸããªãŒããŒã¯ å¿
ã gh pr view <N> --json body ã§æ¬æãæ€èšŒããã»ã¯ã·ã§ã³èŠåºãã»HTML ã³ã¡ã³ãã®ä¿æãäžå®å
šãªãå³ SendMessage ã§ä¿®æ£æç€ºããïŒäºåŸä¿®æ£ã³ã¹ãã¯èµ·åææç€ºã³ã¹ãããé«ãïŒã
Sequential ã¢ãŒã
åãµã Issue ãé çªã«åŠçãã:
- ã¢ããŠã³ã¹:
Starting member-<issue-number> on #<number>: <title> ãšè¡šç€ºãã
run_in_background: true ã§ã¡ã³ããŒãèµ·åãã
- ã¬ããŒãåä¿¡æ: ã¡ã³ããŒã SendMessage ã§ã¬ããŒããéä¿¡ããããªãŒããŒãã¬ãã¥ãŒããã
- ä¿®æ£ãå¿
èŠãªå Žå:
SendMessage(to: "member-<issue-number>") ã§ãã£ãŒãããã¯ãäžç¶ãããã¡ã³ããŒãä¿®æ£ããŠåã¬ããŒãããã
- æ¿èªããå Žå: ã¡ã³ããŒã«ææç©ã®æåº (ã³ããã & PR) ãžé²ãããäŒããã
- ã¬ããŒãã«
## Requires user action ãããã¯ãå«ãŸããå Žå: ã³ãŒãéšåãéææ¡ä»¶ãæºãããŠããã°æ¿èªããPR æ¬æã®ãåäœç¢ºèªããŸãã¯ããã®ä»ãã»ã¯ã·ã§ã³ã« user action é
ç®ãå¿
ãå«ãããã SendMessage ã§äžç¶ããïŒäŸ: terraform apply ã¯ãŠãŒã¶ãŒåŽã§ dev â staging â production ã®é ã«å®æœ ãªã©ãã¡ã³ããŒãæžããæé ãã®ãŸãŸã PR ã«è»¢èšïŒããã®å Žåãã®ãµã Issue ã¯ãBlocked on userããšããŠæ±ãããŠãŒã¶ãŒäœæ¥å®äºã Epic ã®å鲿¡ä»¶ã«çµã¿èŸŒãã
- ã¡ã³ããŒã倱æãŸãã¯å¿çããªãå Žå: ãã®ãµã Issue ã倱æãšããŠããŒã¯ããç¶è¡ããããŠãŒã¶ãŒã«ç¢ºèªããã
- PR äœææ: PR URL ãš Worktree InfoïŒbranch / pathïŒãå ±åããããªãŒããŒã¯
gh pr view <N> --repo <owner>/<repo> --json body ã§æ¬æãååŸãã.github/PULL_REQUEST_TEMPLATE.md ã®ã»ã¯ã·ã§ã³èŠåºãã»HTML ã³ã¡ã³ãä¿æãæ€èšŒãããéžè±ãããã° gh pr edit <N> --body "$(cat <<'EOF' ... EOF)" ã§å³æŽåœ¢ããïŒã¡ã³ããŒã«æ»ãããéãïŒãæŽåœ¢åŸã次ã®ã¡ã³ããŒãèµ·åããåã«ãŠãŒã¶ãŒã®æ¿èªãåŸ
ã€ã
- ã¡ã³ããŒã¯ dormant ç¶æ
ã§æ®ã次ãžé²ã: ã·ã£ããããŠã³ã¯éããªããã¡ã³ããŒã®ããã»ã¹ã¯å¿çåŸã« stop ããããcontext ãš worktree ã¯ä¿æãããŠããã®ã§ããŠãŒã¶ãŒãè¿œå æç€ºãåºããããªã£ãå Žåã¯ãªãŒããŒçµç±ã§ SendMessage ããã°åéããããŠãŒã¶ãŒãæå
ã§ç¶ããè§Šãããå Žå㯠wezterm ã§
wt <branch> ãæã£ãŠ worktree ã«å
¥ããããã§å¥é Claude Code ãèµ·åãããã·ã£ããããŠã³ã¯ PR ãããŒãžïŒã¯ããŒãºãããåŸã«ãŠãŒã¶ãŒãæç€ºçã«äŸé Œããæ®µéã§ã®ã¿è¡ãã
Parallel ã¢ãŒã
run_in_background: true ã§å
šã¡ã³ããŒãèµ·åããã
- ã¢ãã¿ãªã³ã°: ã¡ã³ããŒã¯å®äºæ¬¡ç¬¬ SendMessage ã§ã¬ããŒããéä¿¡ãããã¡ãã»ãŒãžã¯èªåé
ä¿¡ãããã
- åã¬ããŒããå±ã次第ã¬ãã¥ãŒãã:
- ä¿®æ£ãå¿
èŠãªå Žå: SendMessage ã§ãã£ãŒãããã¯ãäžç¶ããã
- æ¿èªããå Žå: ã¡ã³ããŒã«ææç©ã®æåºãžé²ãããäŒããã
- PR äœæåŸã®æ€èšŒ: PR URL ãš Worktree Info ãåãåã£ãã å¿
ã
gh pr view <N> --repo <owner>/<repo> --json body ã§æ¬æã確èªãã.github/PULL_REQUEST_TEMPLATE.md ã®ã»ã¯ã·ã§ã³èŠåºãã»HTML ã³ã¡ã³ãä¿æãæ€èšŒãããéžè±ãããã° gh pr edit <N> --body "$(cat <<'EOF' ... EOF)" ã§å³æŽåœ¢ããã
- å
šã¡ã³ããŒãæåºãŸãã¯å€±æãããŸã§ç¶ãããã¡ã³ããŒã¯ã·ã£ããããŠã³ãããdormant ç¶æ
ã§æ®ããŠããïŒcontext ãš worktree ã¯ä¿æããããPR ããŒãžïŒã¯ããŒãºåŸã«ãŠãŒã¶ãŒãæç€ºçã«äŸé Œããæç¹ã§ shutdown_request ãéãïŒã
Phased Parallel ã¢ãŒã
äŸåé¢ä¿ã®ããäžèŠæš¡ Epic ã®æ¢å®ã¢ãŒããPhase 衚ïŒãã§ãŒãº 1 ã®æé 7ïŒãå®è¡åäœãšãã:
- çŸåšã® Phase ã«å±ããã¡ã³ããŒã®ã¿äžŠåèµ·åããïŒ
run_in_background: trueïŒãäŸåãæªè§£æ±ºãªæ¬¡ Phase ã®ã¡ã³ããŒã¯èµ·åããªãã
- Parallel ã¢ãŒãåæ§ã«ã¬ããŒãåä¿¡ã»ã¬ãã¥ãŒã»PR æ€èšŒã»ã·ã£ããããŠã³ãé²ããã
- Phase å®äºæ¡ä»¶: ãã® Phase å
ã®å
šã¡ã³ããŒã PR äœææžã¿ããŸãã¯ãŠãŒã¶ãŒãæç€ºçã«ã¹ããããæ¿èªããŠããç¶æ
ã
- Phase å®äºæ: ãµããªãŒè¡šã®è©²åœ Phase è¡ããŠãŒã¶ãŒã«æç€ºããæ¬¡ Phase èµ·åã®æ¿èªãåãïŒå€±æãã Issue ãããã°ããã§åãæ±ãã確èªããïŒã
- ãŠãŒã¶ãŒæ¿èªåŸã次 Phase ã®å
šã¡ã³ããŒã䞊åèµ·åããã以é 1-4 ãç¹°ãè¿ãã
- å
š Phase å®äºåŸããã§ãŒãº 3ïŒãµããªãŒïŒãžé²ãã
ã¡ã³ããŒãšã®ããåã
ãŠãŒã¶ãŒã¯ãã€ã§ã以äžãäŸé Œã§ãã:
- ç¶æ³ç¢ºèª: ãªãŒããŒã
SendMessage(to: "member-<N>") ã§é²æãåãåããã
- æç€ºäŒé: ãªãŒããŒã
SendMessage(to: "member-<N>") ã§æç€ºãäžç¶ãã
- ã¹ããã: åŸ
ããã«æ¬¡ã®ãµã Issue ãžé²ã
ãã§ãŒãº 3: ãµããªãŒãšã¯ãªãŒã³ã¢ãã
å
šãµã Issue ã®åŠçãå®äºãããã以äžã衚瀺ãã:
## Epic Orchestration Summary
Epic: <url>
Mode: Sequential | Parallel | Phased Parallel
| Sub-issue | Title | Member | Status | Branch (`wt <branch>`) | PR |
|-----------|-------|--------|--------|------------------------|----|
| #456 | ... | member-456 | Done | feat/foo | #789 |
| #457 | ... | member-457 | Blocked on user (terraform apply) | feat/bar | #790 |
| #458 | ... | member-458 | Failed | feat/baz | (error) |
Status ã¯ä»¥äžã®ãããã:
- `Done` â PR äœææžã¿ããšãŒãžã§ã³ãåŽã®äœæ¥å®äº
- `Blocked on user (<èŠçŽ>)` â ã³ãŒãå®äºã»PR äœææžã¿ã ããPR æ¬æã® user action ã»ã¯ã·ã§ã³ã§ç€ºããäœæ¥ïŒäŸ: terraform applyãæ¬çªãããã€ïŒããŠãŒã¶ãŒåŽã§æªå®æœ
- `Failed` â ãšãŒãžã§ã³ããéææ¡ä»¶ãæºãããªãã£ã
Branch åã«ã¯ã¡ã³ããŒã®æçµã¬ããŒãã® `## Worktree Info` ããååŸãã branch åãå
¥ããããŠãŒã¶ãŒã¯ wezterm ã®ä»»æãã€ã³ã§ `wt <branch>` ãå®è¡ããã°è©²åœ worktree ã«å
¥ããããã§ Claude Code ãå¥éèµ·åããŠäœæ¥ãç¶ãããããã¡ã³ããŒã»ãã·ã§ã³èªäœã«è¿œå æç€ºãåºãããå Žåã¯ããŠãŒã¶ãŒããªãŒããŒã«äŸé Œããã°ãªãŒããŒã SendMessage ã§å¯Ÿè±¡ã¡ã³ããŒã resume ããã
Completed: <n>/<total> ïŒ`Done` + `Blocked on user` ãéææ±ãã«ã«ãŠã³ãã`Failed` ã¯å«ããªãïŒ
ã¡ã³ããŒã»ãã·ã§ã³ã®ã©ã€ããµã€ã¯ã«:
- ãµããªãŒè¡šç€ºåŸããã¡ã³ããŒã¯èªåã·ã£ããããŠã³ããªããããã»ã¹ã¯å¿çå®äºã§ dormant ã«ãªãããcontext ãš worktree ã¯ä¿æãããããŠãŒã¶ãŒãå PR ã®ããŒãžïŒã¯ããŒãºã確èªããäžã§åå¥ã« shutdown ãäŸé ŒãããŸã§ãã®ç¶æ
ãç¶æããã
- ãŠãŒã¶ãŒã远å ä¿®æ£ãããå Žåã®çµè·¯ã¯ 2 ã€:
- wezterm ã§
wt <branch> ãæã£ãŠ worktree ã«å
¥ããããã§ Claude Code ãå¥éèµ·åïŒã¡ã³ããŒã»ãã·ã§ã³ãšã¯å¥ã®æèã§äœæ¥ïŒ
- ãªãŒããŒã«ãmember- ã«ããäŒããŠããšäŸé Œ â ãªãŒããŒã SendMessage ã§ resumeïŒã¡ã³ããŒã® context ãåŒãç¶ãã§äœæ¥ïŒ
- ãŠãŒã¶ãŒããmember- ãçµäºããå
šå¡çµäºããšæç€ºçã«äŸé ŒãããããªãŒããŒã¯
SendMessage(to: "member-<N>", message: {type: "shutdown_request"}) ãéãã