Skip to content

URL: https://mkdocs.justinsforge.com/memory/general/reference_fanout_orchestrator/

Fanout orchestrator

Forge's name for Anthropic's native multi-agent orchestration feature in Claude Code, invoked here as /fanout. Skill definition: .claude/skills/fanout/SKILL.md.

What it is

Anthropic's official name for this feature is "Workflow" (Dynamic Workflows): a tool that runs a JavaScript orchestration script in the background. The script defines phases and fans work out to subagents, either pipeline() (ordered, phase N's output visible to phase N+1) or parallel() (order-independent, no cross-item visibility until the barrier). Up to 16 agents concurrent, a 1000-agent lifetime cap per run, optional per-agent model override. Progress is watchable via /workflows.

Why "fanout" and not "workflow"

Forge already uses "workflow" constantly to mean an n8n automation graph (CT106). Adopting Anthropic's term verbatim would make the spoken word "workflow" ambiguous mid-conversation, either triggering the wrong system by name or getting misread as an n8n change. Justin approved "fanout" as forge vocabulary for this feature on 2026-07-09 specifically to resolve that collision.

Convention: say "n8n workflow" for n8n; say "fan out" / "/fanout" / "fan out agents" for this. Never launch a multi-agent run just because the bare word "workflow" appeared in an n8n-context sentence.

Decision table

Tool Shape Lifespan Use when
Plain Task-tool subagent One isolated task, inline in the current session Minutes, returns inline One-off delegation, no cross-checking need, result feeds straight back into this conversation
/spawn One full interactive Claude Code session (tmux + remote control) Until killed, can run days Ongoing pairing, emergent work that isn't bounded to one task list
/execute-plan Sequential worker-per-task against an approved /feature-plan, with a /code-review gate per task One session's lifetime, resumable via ledger Building one feature across N ordered, mostly-independent tasks
/fanout Multi-phase, N-way parallel/pipelined agents against a wide, independent work-list; in-session background orchestration script One /workflows-monitored run; 16-concurrent cap, 1000-agent lifetime cap Wide fan-out: audit every file in a directory, migrate N files to a new pattern, research a question from several angles and cross-check them
/autoagent-project Manager + N specialists + Reporter + Quota guard as systemd timers, headless, no human in the loop Days, survives session death Genuinely autonomous multi-day builds Justin won't babysit
n8n workflow (CT106) Declarative automation graph, event/schedule triggered, no LLM reasoning by default Persistent infra Recurring automations, webhooks, integrations; not an LLM-reasoning task at all

The load-bearing distinction between /execute-plan and /fanout isn't task size or urgency, it's fan-out shape. A feature that touches 12 files but has one coherent goal and ordered dependencies is still an /execute-plan job. A task that decomposes into 12 genuinely independent, parallelizable units is a /fanout job.

Cost and scale guidance

  • Workers default to model: 'sonnet' in every fanout script. Reserve opus for a coordinator/synthesis leg that needs real judgment (plan-big-execute-small: coordinator plans and synthesizes, cheap workers read and grind), and only with an explicit reason.
  • Default pipeline() over parallel(). Only use parallel() when a phase's items are genuinely order-independent and synthesis doesn't need cross-item context to be coherent.
  • Scale gates on Justin's own language, not on task size:
Justin's ask Agent pool Verify
Quick check / no qualifier 3-5 agents none, or a single spot-check
"thorough" / "comprehensive" larger pool, up to the 16-concurrent cap 3-vote adversarial verify
  • Adversarial verify (independent skeptic agents re-checking a sample of findings without seeing the primary agent's conclusion first) is the standard forge quality pattern for audit/review/research fanouts. Not optional for those shapes; skip it only for build/migration fanouts where correctness is checked by tests or a diff review instead.
  • Dropped coverage (work-list items that exceeded the concurrency budget or agent cap) is always log()-ed and surfaced in the final report, never silently truncated.
  • Billing: subscription quota only, same as every other Claude-powered surface in this house (claude -p under the hood). No separate API cost axis to weigh.

Worked example: LESSONS.md debt sweep across scripts/

Scenario: Justin wants every script under scripts/ audited for doctrine debt (band-aids, missing idempotency, catch-and-ignore without a # Why swallowed: comment) and the findings triaged for LESSONS.md.

  1. Scout inline (Step 0). ls scripts/*.sh scripts/*.py | wc -l in the current session to size the corpus (say ~140 scripts). No dispatch yet.
  2. Author the script (Step 1). Justin didn't say "thorough," so: partition the file list into 8 chunks, one sonnet agent per chunk in parallel() (chunks are independent, no cross-item context needed for phase 2). Each agent reads its files and returns flagged debt candidates as file:line, rule violated, one-line justification. pipeline() phase 2: one sonnet synthesis agent dedupes and ranks by severity.
  3. Adversarial verify (Step 2). This is an audit, so add phase 3: 2-3 skeptic agents each independently re-check a sample of the flagged findings (without seeing the synthesis agent's severity ranking) and vote confirm/reject. Reconcile disagreements before finalizing.
  4. Coverage (Step 3). If _archive/ or scripts-dormant-* subfolders got excluded from the chunker on purpose, log() states that explicitly rather than the report silently looking complete.
  5. Results (Step 4). Write the synthesized, verified findings to comms/results/lessons-debt-sweep-scripts.md. Since triage into LESSONS.md is itself a follow-up decision Justin needs to make, also write /handoff lessons-debt-sweep-scripts so a future session (or Justin directly) can pick up the entries worth logging.
  • .claude/skills/fanout/SKILL.md, the skill this reference backs
  • .claude/skills/execute-plan/SKILL.md, the sequential single-feature counterpart
  • .claude/skills/autoagent-project/SKILL.md, the multi-day headless counterpart
  • .claude/skills/DeepResearch/SKILL.md, single-question research; escalate to fanout when the research needs multiple independent, cross-checked angles
  • .claude/agents/worker.md, the result-file contract every fanned-out worker follows
  • Parallel Agent Orchestration, a distinct, older manual pattern (the Agent tool plus the worktree rig, a session acting as integrator over background tasks). Not the same mechanism as /fanout's native Workflow tool; that pattern has no phases/pipeline/parallel structure or agent cap, it is discipline over ad hoc background Agent calls. Reach for /fanout for phase-structured, capped, verifiable fan-out; reach for that pattern specifically for CreatorTrack worktree-isolated multi-branch builds.