Execute all plans in a phase using wave-based parallel execution. Orchestrator stays lean — delegates plan execution to subagents. Orchestrator coordinates, not executes. Each subagent loads the full execute-plan context. Orchestrator: discover plans → analyze deps → group waves → spawn agents → handle checkpoints → collect results. Read STATE.md before any operation to load project context. Load all context in one call: ```bash INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.js init execute-phase "${PHASE_ARG}") ``` Parse JSON for: `executor_model`, `verifier_model`, `commit_docs`, `parallelization`, `branching_strategy`, `branch_name`, `phase_found`, `phase_dir`, `phase_number`, `phase_name`, `phase_slug`, `plans`, `incomplete_plans`, `plan_count`, `incomplete_count`, `state_exists`, `roadmap_exists`. **If `phase_found` is false:** Error — phase directory not found. **If `plan_count` is 0:** Error — no plans found in phase. **If `state_exists` is false but `.planning/` exists:** Offer reconstruct or continue. When `parallelization` is false, plans within a wave execute sequentially. Check `branching_strategy` from init: **"none":** Skip, continue on current branch. **"phase" or "milestone":** Use pre-computed `branch_name` from init: ```bash git checkout -b "$BRANCH_NAME" 2>/dev/null || git checkout "$BRANCH_NAME" ``` All subsequent commits go to this branch. User handles merging. From init JSON: `phase_dir`, `plan_count`, `incomplete_count`. Report: "Found {plan_count} plans in {phase_dir} ({incomplete_count} incomplete)" Load plan inventory with wave grouping in one call: ```bash PLAN_INDEX=$(node ~/.claude/get-shit-done/bin/gsd-tools.js phase-plan-index "${PHASE_NUMBER}") ``` Parse JSON for: `phase`, `plans[]` (each with `id`, `wave`, `autonomous`, `objective`, `files_modified`, `task_count`, `has_summary`), `waves` (map of wave number → plan IDs), `incomplete`, `has_checkpoints`. **Filtering:** Skip plans where `has_summary: true`. If `--gaps-only`: also skip non-gap_closure plans. If all filtered: "No matching incomplete plans" → exit. Report: ``` ## Execution Plan **Phase {X}: {Name}** — {total_plans} plans across {wave_count} waves | Wave | Plans | What it builds | |------|-------|----------------| | 1 | 01-01, 01-02 | {from plan objectives, 3-8 words} | | 2 | 01-03 | ... | ``` Execute each wave in sequence. Within a wave: parallel if `PARALLELIZATION=true`, sequential if `false`. **For each wave:** 1. **Describe what's being built (BEFORE spawning):** Read each plan's ``. Extract what's being built and why. ``` --- ## Wave {N} **{Plan ID}: {Plan Name}** {2-3 sentences: what this builds, technical approach, why it matters} Spawning {count} agent(s)... --- ``` - Bad: "Executing terrain generation plan" - Good: "Procedural terrain generator using Perlin noise — creates height maps, biome zones, and collision meshes. Required before vehicle physics can interact with ground." 2. **Spawn executor agents:** Pass paths only — executors read files themselves with their fresh 200k context. This keeps orchestrator context lean (~10-15%). ``` Task( subagent_type="gsd-executor", model="{executor_model}", prompt=" Execute plan {plan_number} of phase {phase_number}-{phase_name}. Commit each task atomically. Create SUMMARY.md. Update STATE.md. @~/.claude/get-shit-done/workflows/execute-plan.md @~/.claude/get-shit-done/templates/summary.md @~/.claude/get-shit-done/references/checkpoints.md @~/.claude/get-shit-done/references/tdd.md Read these files at execution start using the Read tool: - Plan: {phase_dir}/{plan_file} - State: .planning/STATE.md - Config: .planning/config.json (if exists) - [ ] All tasks executed - [ ] Each task committed individually - [ ] SUMMARY.md created in plan directory - [ ] STATE.md updated with position and decisions " ) ``` 3. **Wait for all agents in wave to complete.** 4. **Report completion — spot-check claims first:** For each SUMMARY.md: - Verify first 2 files from `key-files.created` exist on disk - Check `git log --oneline --all --grep="{phase}-{plan}"` returns ≥1 commit - Check for `## Self-Check: FAILED` marker If ANY spot-check fails: report which plan failed, route to failure handler — ask "Retry plan?" or "Continue with remaining waves?" If pass: ``` --- ## Wave {N} Complete **{Plan ID}: {Plan Name}** {What was built — from SUMMARY.md} {Notable deviations, if any} {If more waves: what this enables for next wave} --- ``` - Bad: "Wave 2 complete. Proceeding to Wave 3." - Good: "Terrain system complete — 3 biome types, height-based texturing, physics collision meshes. Vehicle physics (Wave 3) can now reference ground surfaces." 5. **Handle failures:** **Known Claude Code bug (classifyHandoffIfNeeded):** If an agent reports "failed" with error containing `classifyHandoffIfNeeded is not defined`, this is a Claude Code runtime bug — not a GSD or agent issue. The error fires in the completion handler AFTER all tool calls finish. In this case: run the same spot-checks as step 4 (SUMMARY.md exists, git commits present, no Self-Check: FAILED). If spot-checks PASS → treat as **successful**. If spot-checks FAIL → treat as real failure below. For real failures: report which plan failed → ask "Continue?" or "Stop?" → if continue, dependent plans may also fail. If stop, partial completion report. 6. **Execute checkpoint plans between waves** — see ``. 7. **Proceed to next wave.** Plans with `autonomous: false` require user interaction. **Flow:** 1. Spawn agent for checkpoint plan 2. Agent runs until checkpoint task or auth gate → returns structured state 3. Agent return includes: completed tasks table, current task + blocker, checkpoint type/details, what's awaited 4. **Present to user:** ``` ## Checkpoint: [Type] **Plan:** 03-03 Dashboard Layout **Progress:** 2/3 tasks complete [Checkpoint Details from agent return] [Awaiting section from agent return] ``` 5. User responds: "approved"/"done" | issue description | decision selection 6. **Spawn continuation agent (NOT resume)** using continuation-prompt.md template: - `{completed_tasks_table}`: From checkpoint return - `{resume_task_number}` + `{resume_task_name}`: Current task - `{user_response}`: What user provided - `{resume_instructions}`: Based on checkpoint type 7. Continuation agent verifies previous commits, continues from resume point 8. Repeat until plan completes or user stops **Why fresh agent, not resume:** Resume relies on internal serialization that breaks with parallel tool calls. Fresh agents with explicit state are more reliable. **Checkpoints in parallel waves:** Agent pauses and returns while other parallel agents may complete. Present checkpoint, spawn continuation, wait for all before next wave. After all waves: ```markdown ## Phase {X}: {Name} Execution Complete **Waves:** {N} | **Plans:** {M}/{total} complete | Wave | Plans | Status | |------|-------|--------| | 1 | plan-01, plan-02 | ✓ Complete | | CP | plan-03 | ✓ Verified | | 2 | plan-04 | ✓ Complete | ### Plan Details 1. **03-01**: [one-liner from SUMMARY.md] 2. **03-02**: [one-liner from SUMMARY.md] ### Issues Encountered [Aggregate from SUMMARYs, or "None"] ``` **Route based on execution mode:** **If `--gaps-only` (gap closure execution):** ``` ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ GSD ► GAP FIXES EXECUTED ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Phase {X}: {Name} — gap closure plans executed. ─────────────────────────────────────────────────────────────── ## ▶ Next Up **Re-verify fixes** — confirm gaps are closed `/clear` then `/gsd:verify-work {X}` ─────────────────────────────────────────────────────────────── ``` **If normal execution (no flags):** ``` ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ GSD ► EXECUTION COMPLETE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Phase {X}: {Name} — all plans executed. ─────────────────────────────────────────────────────────────── ## ▶ Next Up **Verify what was built** — manual acceptance testing `/clear` then `/gsd:verify-work {X}` ─────────────────────────────────────────────────────────────── **Also available:** - `/gsd:plan-phase {X+1}` — skip verification, plan next phase - `/gsd:complete-milestone` — if all phases done ``` Orchestrator: ~10-15% context. Subagents: fresh 200k each. No polling (Task blocks). No context bleed. - **classifyHandoffIfNeeded false failure:** Agent reports "failed" but error is `classifyHandoffIfNeeded is not defined` → Claude Code bug, not GSD. Spot-check (SUMMARY exists, commits present) → if pass, treat as success - **Agent fails mid-plan:** Missing SUMMARY.md → report, ask user how to proceed - **Dependency chain breaks:** Wave 1 fails → Wave 2 dependents likely fail → user chooses attempt or skip - **All agents in wave fail:** Systemic issue → stop, report for investigation - **Checkpoint unresolvable:** "Skip this plan?" or "Abort phase execution?" → record partial progress in STATE.md Re-run `/gsd:execute-phase {phase}` → discover_plans finds completed SUMMARYs → skips them → resumes from first incomplete plan → continues wave execution. STATE.md tracks: last completed plan, current wave, pending checkpoints.