--- name: orchestrate description: Coordinate agents across plan, implement, test, and review, or fan out 3+ independent workstreams. Triggers "orchestrate", "parallel agents", "fan out", "split work", "overnight", "autonomous task". context: fork agent: maestro --- # Multi-Agent Orchestration ## Standalone Codex Create each bounded worker with `spawn_agent`, deliver context to a running worker with `send_message`, trigger another turn for an idle existing worker with `followup_task`, wait with `wait_agent`, and stop a current turn with `interrupt_agent` only when necessary. Never spawn `codex-verifier` or call `codex-run.ts`. Read the live concurrency limit and stay within it. Writers share the working tree unless the live host explicitly offers isolation. Assign non-overlapping ownership and serialize implementer and test-writer phases; only read-only reviewers may overlap. Codex implementers are not promised Claude worktree isolation. The lead owns every git operation: subagents never commit, stash, switch branches, or touch worktrees; they leave changes in place and report them, and the lead stages, verifies, and commits once per territory. ## Phase 1: Research & Feasibility (GO/NO-GO Gate) Before delegating to agents: 1. **Parse requirements** - Break down what needs to happen 2. **Identify workstreams** - Which are independent? Which have dependencies? 3. **Assess scope** - Is this actually multi-agent work, or simpler than it looks? 4. **Sort into two piles** (the Orchestration Tax — your review attention is the serial bottleneck and it doesn't parallelize): - **Delegate-async** — isolated, well-specified work where your judgment lands at the *gate* (you review the finished result): scaffolding, mechanical refactors, test writing, doc generation, independent file areas. Fan these out. - **Hold-the-lock** — work where the judgment *is* the work: a subtle bug, an architecture decision, anything that needs your evolving mental model of the system. Parallelizing these doesn't scale output — it thrashes the one serial resource and everything comes back worse. Do them yourself, serially, one at a time. **GO/NO-GO Verdict**: - **GO** - 3+ *delegate-async* workstreams, clear boundaries, agents work independently. Proceed — fan out the first pile only. - **SIMPLIFY** - <3 workstreams, OR the work is mostly *hold-the-lock* regardless of size. Delegate the isolated bits with direct Agent() calls and keep the judgment-heavy parts yourself. - **NO-GO** - Requirements unclear, scope too large, or high risk of file conflicts. Report and stop. Do not proceed past this gate without an explicit verdict. ## Phase 2: Orchestrate Delegate to the Maestro agent for multi-agent task orchestration. The Maestro agent handles: agent selection, parallel execution, workflow coordination, and agent teams. For simple delegation (1-2 agents), use Agent() directly without invoking this skill. ## Verify Subagent Claims Independently A subagent's "done" is a claim, not a result. Before building on it, committing, or reporting success: 1. **Re-run the briefed verification yourself** against the real artifact — the actual build, the actual binary's output, the actual grep sweep. Never forward a subagent's self-reported pass as your own verification. 2. **Check the capability envelope.** Subagents may lack tools you assume (a no-Bash implementer cannot run builds or delete files — it will improvise, e.g. zeroing a file instead of removing it, and still report done). Read what the agent *says it couldn't do*, then absorb the gap yourself: run the deletion, the build, the test. 3. **Re-delegate vs fix solo.** A trivial break found during verification (single file, few lines) — fix it solo with a one-line stated reason; round-tripping to a fresh subagent costs more than the fix. Anything that adds scope goes back out as a new, fully-briefed delegation. 4. **Resume, don't respawn.** If a subagent's report was cut off or is missing a section, Claude uses SendMessage; standalone Codex uses `send_message` while it is running or `followup_task` once idle. A respawn rebuilds its context from nothing and re-does paid work. Failure mode this section exists to prevent: chaining on an unverified "done" and discovering three phases later that the build never ran. ## Standalone Codex orchestration Follow the native lifecycle at the top of this skill. Keep the number of live agents within the concurrency limit reported by the current Codex session; queue dependent work instead of over-subscribing it. Use `spawn_agent` for each new bounded workstream and never invoke the Claude-to-Codex bridge. Claude agent teams and dynamic workflows are Claude-only. Do not try to emulate their APIs in Codex; native agents plus the current concurrency limit are the Codex path for the fan-out guidance below. ## When to Fan Out (Teams mode) Use full parallel team fan-out instead of sequential subagent delegation when: | Scenario | Fan out? | Why | |----------|----------|-----| | 3+ independent file areas | Yes | Maximum parallelism, isolated context per agent | | Frontend + Backend + Tests | Yes | No file conflicts, clear boundaries | | Large codebase analysis | Yes | Independent context per agent prevents bleed | | Competing approaches | Yes | Explore alternatives in parallel before deciding | | Sequential dependent work | No | Use subagents in sequence; fan-out adds overhead | | Quick single investigation | No | Overhead not worth it; use `/explore` directly | ### Prerequisites for fan-out Two different mechanisms get confused here, so be explicit about which one you want: - **Subagent fan-out** (`Agent` calls in one message) needs **nothing enabled**. This is what cc-settings actually uses, and what the rest of this skill assumes. Each subagent gets its own context window and reports back to you. - **Agent teams** (teammates that message each other and share a task list) are experimental and disabled by default upstream; **cc-settings enables them** via `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS: "1"` in `config/10-core.json`. Enabled means *available*, not automatic — Claude forms a team only when you ask, or when it proposes one and you approve. Pick a team over plain fan-out only when workers need to **challenge each other mid-flight**; if you just need N results collected, fan-out is cheaper and lands them in one place. Full rule: `CLAUDE-FULL.md` → "Agent teams — enabled, deliberately not the default". - Feasibility gates that come before cost: teammate permission prompts surface in the **lead**, so a team is not unattended; `/resume` does not restore in-process teammates; teammates cannot spawn teammates; and two teammates editing one file overwrite each other, so split by file ownership at spawn. - For split panes: tmux, or iTerm2 with the `it2` CLI. `config/10-core.json` pins `teammateMode: "auto"`. - A team forms when the lead spawns the first teammate and is cleaned up when the session ends; there is no create or delete tool. ### Alternative: dynamic workflows (research preview) A [dynamic workflow](https://code.claude.com/docs/en/workflows) is a JS harness that spawns subagents, holds plan state *outside* your context window, runs up to 16 agents concurrently (1000 total; raise the concurrency cap with `CLAUDE_CODE_WORKFLOW_MAX_CONCURRENT_AGENTS`, 1–256, since v2.1.269), and resumes from cached results within a session. The trigger isn't task *size* — it's whether the task risks one of three failure modes a single context window is prone to: - **Agentic laziness** — stopping at 20 of 50 items and declaring done. → *fan-out-and-synthesize*: one agent per item, barrier-join the results. - **Self-preferential bias** — preferring your own output when you're also the judge. → *adversarial verification*: a separate agent refutes each finding; or a *tournament* of pairwise comparisons (more reliable than absolute scoring for ranking or taste). - **Goal drift** — losing "don't do X" constraints across compaction. → each subagent gets a focused, isolated goal that can't drift. Shapes worth naming when you build one: **classify-and-act**, **fan-out-and-synthesize**, **generate-and-filter**, **tournament**, **loop-until-done** (spawn until a stop condition, not a fixed count). Not only for marathons — a **quick workflow** is valid: _"quick workflow to adversarially check this one assumption."_ - **Budget** — workflows burn more tokens; cap with _"…budget 10k tokens"_ and the harness enforces it. - **Size** — dynamic workflows default to a medium size guideline, aiming for fewer than 10 agents (lowered from 15 in v2.1.271; Pro plans default to small); the running workflow's status line shows the current default. Override per-project via the `workflowSizeGuideline` settings key when a task genuinely needs more. - **Quarantine** — for triage over untrusted input, agents that read public/untrusted content must not also take privileged actions; split reading from acting so an injected page can't trigger a privileged step. Two entry points: - One-shot: say _"use a workflow to …"_ or the keyword `ultracode` in your prompt. Pair with `/loop` for repeatable triage/verification/research. - Session-wide: `/effort ultracode` — auto-orchestrates a workflow for every substantive task. The maestro `Agent()` fan-out above is the **default** in cc-settings; workflows are for replayability or scale beyond subagent fan-out. Don't rewire skills to *depend* on the Workflow tool — its API is still preview-stage — but a skill may ship an *opt-in* example (see `audit`'s `references/nuclear-review.workflow.js`): a template you adapt, never a runtime dependency. ## Output Report: team composition (when fan-out chosen), task assignments, coordination strategy, and progress. --- ## Variant: Phased Long-Running Execution For tasks too large for a single context window. Implements checkpoint/restore, automatic verification, and graceful recovery. ### When to Use - Large refactors spanning 10+ files - Full feature implementation with tests - Migration tasks (dependency upgrades, API changes) - Any task estimated at >50% context window ### Checkpoint Strategy #### Context-Threshold Checkpoints No hook saves checkpoints automatically — the agent must invoke `checkpoint.ts save` itself when it notices context usage crossing a threshold. See `hooks/checkpoint.md` for the recommended actions at 70% / 80% / 90%. #### Manual Checkpoints Save checkpoints at these milestones: - After completing a logical phase - Before risky operations (schema changes, large refactors) - After passing verification #### Maintenance Checkpoints A completed phase is a **commit checkpoint, not a stopping point** — the job is the whole plan, not the first green milestone; finishing a phase means starting the next, and you only hand back to the user on a genuine blocker. On long runs, spend one pass every few phases on maintenance before drift accumulates: prune plan bloat (tasks that no longer match what the code taught you), refresh the live handoff so a cold resume lands cleanly, delete dead TODOs, and reconcile the plan with the current architecture rather than preserving development-only shims the plan predates. Stamp the plan with the commit it was written against (`git rev-parse --short HEAD`) and re-stamp on every maintenance pass. The reconcile semantics: re-run the done-criteria of tasks marked complete (a "done" that no longer verifies gets reopened, not trusted), refresh file/line refs that drifted since the stamp, and retire tasks obsoleted by intervening changes with a one-line reason so they aren't re-litigated later. #### Checkpoint Contents See `hooks/checkpoint.md` for the full checkpoint JSON schema, storage location, and recommended checkpoint threshold actions. Save/restore state with `/checkpoint` — see that skill for the commands. ### Verification Stack Every checkpoint must pass Levels 1-3 before saving. Full verification (Levels 1-5) at task completion. See `hooks/verification-check.md` for the complete 5-level stack, per-agent requirements, and failure handling. ### Workflow #### Phase 1: Planning ``` Agent(planner, "Break down [task] into phases with dependencies and estimates") ``` Produce a phased plan with: - A `## Functional DAG` up top (`docs/functional-dag.md`) — the fan-out piles are its columns, so the parallelizable set is read off the diagram instead of guessed - Ordered phases with dependencies - Token estimates per phase - Checkpoint points identified - Verification criteria per phase #### Phase 2: Execution Loop For each phase: 1. **Start**: Log phase start 2. **Implement**: Execute the phase work 3. **Verify**: Run verification stack 4. **Checkpoint**: Save state if milestone reached 5. **Monitor**: Check context usage, checkpoint if threshold hit To drive this loop unattended, set a `/goal` whose condition matches the completion promise — e.g. `/goal all phases complete, tsc + lint + tests exit 0, git status is clean`. The goal evaluator runs after every turn and keeps the session going until the condition holds; it survives `--resume` so a goal set before a handoff carries into the next session. #### Phase 3: Completion ```markdown ## Verification Summary - [x] TypeScript compiles - [x] Biome lint passes - [x] Tests pass (N/N) - [x] All phases completed COMPLETE ``` ### Recovery from Interruption When resuming after interruption: 1. Run `checkpoint.ts restore` to load latest state 2. Check git status for uncommitted work 3. Review remaining todos 4. Run verification to confirm baseline 5. Continue from next incomplete phase ### Completion Promise The task is NOT complete until: ``` 1. All phases done 2. Verification passes (compile + lint + test) 3. Git is clean (all changes committed) 4. Summary provided with what was done ``` Only then output: ``` COMPLETE ``` **Never claim completion with failing verification.** ### Example ``` User: "Migrate all class components to hooks across the app" → Agent(planner, "Break migration into phases by module") Plan: 6 phases, ~4 context windows estimated Phase 1: Core hooks (auth, routing) → Implement → Verify → Checkpoint at 30% Phase 2: Feature hooks (dashboard, settings) → Implement → Verify → Checkpoint at 55% → Context at 70% → agent checkpoints, continue Phase 3: Shared components → Context at 90% → agent checkpoints, hands off [New session resumes from checkpoint] Phase 4-6: Continue... → Final verification → COMPLETE ```