Orchestrator-worker

Orchestrator-worker is the most useful multi-agent pattern in production. One agent is the orchestrator: it reads the task, breaks it up, hands pieces to specialized workers, and stitches the results. The workers are themselves agents, but narrow. Each has its own system prompt, its own tools, its own budget. This pattern is a workflow engine where the workflow is designed by an agent.

The shape

Why split the work

When it's worth it vs overkill

Workers are just agents with narrower scope

Every worker is itself a small ReAct agent:

The orchestrator treats each worker as a single tool call: research_worker(topic: "..."). From the orchestrator's point of view, it's making tool calls. Under the hood, each tool call is a whole sub-agent running.

A worked example: writing a technical report

Task: "Write a 1000-word piece about the state of serverless databases in 2026."

  1. Orchestrator plans: need research, need outline, need draft. Research and outline can partially overlap, draft depends on both.
  2. In parallel:
    • research_worker(topic: "serverless databases 2026") → uses web_search, fetch, returns key facts + 10 source URLs.
    • research_worker(topic: "limitations of serverless DBs") → returns counter-arguments.
  3. After research: outline_worker(facts: ..., style: "technical") → returns a numbered outline.
  4. Draft: draft_worker(outline: ..., facts: ..., word_count: 1000) → returns the piece.
  5. Orchestrator synthesizes: combines the draft with a citation footer from the research URLs, returns to user.

Same task done single-agent would have been 30+ tool calls in one confusing loop with a bloated context. Split, it's 4 bounded workers running in 2 parallel phases. Faster, cheaper, and way easier to debug.

Design checklist

Pitfalls

What to do with this