Top 1% Engineers, issue 3
Multi agent orchestration: split by context, not by role
Multi agent orchestration in practice: when one agent stops being enough, the patterns and what each one passes along, and why writes stay with one agent.

Split agents where the context splits
One agent writes; the others search and review in their own windows.
- Check the signalsContext near the limit, overlapping tools, a strong single-agent baseline
- Write the briefObjective, output format, sources and boundaries, in one string
- Search subagentReads many articles, returns three policy lines
- Refund agentThe only agent that proposes a change
- Clean-context reviewSees the proposal and the policy lines only
- ApproveA person approves every refund
Where does the context split in the agent you run now?
Top 1% Engineerslearnwithparam.com/newsletter
My agent keeps getting worse as I add tools, so should I turn it into a team? That is the multi agent orchestration question, and the controlled evidence says it depends on the task. A study from Google Research, Google DeepMind and MIT tested multi-agent setups across six benchmarks. Against one agent, results ranged from +80.8% on decomposable financial reasoning to -70.0% on sequential planning, depending on the task and the architecture1.
Add an agent only where context can be cut cleanly: subagents search, read and review in their own windows and hand back short answers, and every write stays with one agent.
The first issue ended on a rule: a second agent helps only when the work splits cleanly. This issue answers how to tell, where to cut and what crosses the cut. The support ticket triage from the last two issues has grown to about twenty tools across the helpdesk, billing, shipping and the knowledge base. Each section changes one thing in it.
When one agent is not enough: three signals to check first
One agent is enough until it runs near its context limit, juggles overlapping tools, or scores low on your hard cases. The first two have cheaper fixes than a second agent. Anthropic's guidance says that outside a few such situations, coordination costs typically exceed the benefits2. OpenAI's guide starts from the same place: maximize one agent first, and split when it keeps failing complicated instructions or picking the wrong tools3.
The first signal is context. An agent that routinely runs near its context limit while quality drops may be hitting context pressure, and Anthropic notes that compaction is pushing that limit out2. So try compaction before you try a team.
The second signal is tools, and the sources disagree on the threshold. Anthropic's guidance puts it at 15 to 20 or more tools, and suggests on-demand tool search before a second agent2. OpenAI says overlap matters as much as count: some agents manage more than 15 distinct tools while others struggle with fewer than 10 overlapping ones3.
LangChain's benchmark, a hundred examples on one model, shows where the drop comes.
We see that the single agent baseline falls off sharply when there are two or more distractor domains.
The triage agent shows the overlap case. Its billing invoice lookup and its shipping order lookup sound alike, and it picks the wrong one on order disputes. The first fix is a rename and a description of what each returns.
The third signal is the baseline. In the same controlled study, tasks where a single agent already scored above 45% got negative returns from more agents, because coordination cost more than the headroom left1. We have no score for the triage agent, so measure yours on your hard cases before you add anyone.
- Gate: ContextContext near the limitQuality drops as context fills; try compaction first
- Gate: ToolsOverlapping toolsTwenty or more, or two that overlap; rename and try tool search
- Gate: BaselineStrong baselineAbove 45% alone, more agents gave negative returns
- AgentWhat is left to cutThe lookup that pours in the most text it never uses
Where to cut: split by context, not by role
If the checks still point to a split after the cheap fixes, cut where the context splits, not where the job titles split. Anthropic's guidance says work should only be split when context can be truly isolated, because agents split by problem type play a telephone game and lose fidelity at each handoff2.
In one experiment with agents specialized by software development role (planner, implementer, tester, reviewer), the subagents spent more tokens on coordination than on actual work.
The controlled study did not test roles, but it shows the same rule from the task side: the same move gains on work that splits apart and loses on work that runs in sequence1.
- Decomposable financial reasoning, a gain+80.8%
- Sequential planning, a loss-70.0%
Anthropic gives a test for the cut: isolation works best when a subtask generates more than 1000 tokens, most of it irrelevant to the main task, and has clear criteria for what to extract2. Lookups that need filtering before use fit it best.
In the triage agent, the knowledge-base and past-ticket search passes that test. Compaction trims old turns, but every policy question still pulls whole articles into the window, and the lead needs only the few policy lines that apply. The refund decision does not split, as the first issue showed: the order and the payment facts must sit in one context.
Agent orchestration patterns and what each one passes along
Each orchestration pattern sets a default for what the next agent sees, and the patterns differ mostly in that default. In the Claude Agent SDK a subagent starts fresh, and the docs are blunt: the only content passed from parent to subagent is the Agent tool's prompt string5. In the OpenAI Agents SDK a handoff goes the other way, and the new agent sees the entire previous conversation unless you set an input filter6.
LangGraph's supervisor passes the full message history down by default7, and a LangGraph swarm by default puts every agent on one shared message list8. Microsoft's Magentic-One is a supervisor whose lead plans, tracks progress and re-plans to recover from errors9.
- Passes: the briefOrchestrator and workersInvites over-spawning
- Passes: the whole historyHandoffUnless filtered; our read: context grows
- Passes: full history downSupervisorThe lead plans and re-plans on errors
- Passes: one shared listSwarmOur read: agents read each other's noise
- Passes: the brief, then waitsSynchronous fan-outSimple to coordinate; blocks on the slowest worker
Anthropic's research system recorded two of these failures; the handoff and swarm costs are our read of their defaults. Anthropic's early research agents spawned 50 subagents for simple queries and distracted each other with updates10. In 2025 its lead agents waited for each set of subagents to finish, which kept coordination simple but created bottlenecks10.
In Claude Code, the orchestrator and worker pattern is a Markdown file. Each subagent runs in its own context window with its own system prompt, tool access and permissions11, and only the name and description are required. The body states the four parts Anthropic says every worker needs: an objective, an output format, the sources to use and clear boundaries10.
.claude/agents/policy-search.md---
name: policy-search
description: Finds the support policy lines that apply to one ticket. Use for refund, return and warranty questions.
tools: Read, Grep, Glob
---
Objective: find the policy lines that answer the question in the brief.
Output: at most three lines, each quoted exactly with its article id,
or "none found".
Sources: help articles in kb/articles and closed tickets in kb/tickets.
Boundaries: read only. Do not draft a reply, decide a refund or
summarise what you read.A subagent can spawn subagents of its own, up to three layers below the main conversation by default11. A search worker needs none, so its tool list leaves the Agent tool out. In the triage service, the same worker runs from the Agent SDK, and code builds the brief from the ticket, because that string is all the worker will see.
policy_search.pyfrom claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage
WORKER = open(".claude/agents/policy-search.md").read().split("---", 2)[2]
def brief(ticket_id: str, product: str, question: str) -> str:
# The worker sees this string and nothing else from the ticket.
return (
f"Ticket {ticket_id}, product {product}.\n"
f"Question: {question}\n"
"Return at most three policy lines with their article ids."
)
async def policy_lines(ticket_id: str, product: str, question: str) -> str | None:
options = ClaudeAgentOptions(
system_prompt=WORKER,
allowed_tools=["Read", "Grep", "Glob"],
disallowed_tools=["Bash", "Write", "Edit"], # read only
max_turns=10,
)
prompt = brief(ticket_id, product, question)
async for message in query(prompt=prompt, options=options):
if isinstance(message, ResultMessage):
return message.result # None if the run ended in an error
return NoneKeep every write with one agent and add readers
Search splits cleanly because it only reads, and the same reasoning says every write should stay with one agent. Cognition argued in 2025 that actions carry implicit decisions, conflicting decisions carry bad results, and you should by default rule out architectures that break that12. Ten months later it ships multi-agent setups, on one condition.
multi-agent systems work best today when writes stay single-threaded and the additional agents contribute intelligence rather than actions.
The second agent with evidence behind it is a reader. Cognition reports that its review agent, which shares no context with the coding agent, still finds bugs in pull requests that coding agent wrote13. It is Cognition's own data, with no PR count given.
bugs per pull request, on average, caught by a review agent with no shared context in PRs the coding agent wrote
In the UC Berkeley failure study, adding one high-level verification step to ChatDev raised task success by 15.6%14. ChatDev is a research framework, not a production system, but the step that helped was a check on finished work, the reader role this section argues for.
In the triage service, the refund agent stays the single writer, and it only proposes. A policy reviewer agent gets the proposal and the policy lines, never the refund agent's reasoning, and either passes it or names the rule it breaks. A support lead approves, as in the first issue.
Cognition also found that agents assume they share state with their children when they don't13. That is why the reviewer gets its input written out in full.
Why the orchestration belongs in your code
The orchestration belongs in your code because, in our read, every agent boundary is a lossy compression: one context squeezed into a short string for another. That pays when what gets dropped is noise, like the articles the search worker read, and fails when what gets dropped is a decision, like why the refund agent trusted one payment record. So the boundary belongs where you can write down what crosses it, and code is where you can log it.
When the routing is code, a bad refund traces to the brief that went in and the answer that came back. The major frameworks all support that mode next to their agent-led ones. OpenAI's Agents SDK docs say orchestrating via code makes tasks more deterministic and predictable in speed, cost and performance15. CrewAI says to start any production application with a Flow16, and Google's ADK composes agents and deterministic nodes in one graph17.
No independent benchmark ranks these frameworks, and all three let you keep the routing in code, so we think that choice matters more than the framework. Keep that code thin. Anthropic found that harness code written around one model's habits became dead weight on the next: on Claude Opus 4.5, the behavior it worked around was gone18.
Trace every run, since small changes cascade in agent systems and full production tracing is what let Anthropic diagnose why its agents failed10. The router stays the match statement from the first issue, calling the policy search and the reviewer as plain functions and logging every brief and every answer.
To settle the question on your own task, the lab compares one agent with three on quality, time and token cost. Its three agents are a planner, an engineer and a reviewer, the role split the second section warns about. Treat it as a test of whether that split beats one agent on your work.
What to do on Monday
- Run the three signals. Check whether context runs near the limit, whether tools overlap or keep growing, and how one agent scores on twenty hard tickets you already have.
- Fix the cheap ones first. Use compaction for context, and tool search plus clearer tool names and descriptions for tools.
- Carve out one read-only subagent. Pick the lookup that reads the most and keeps the least, and give it a brief with an objective, an output format, sources and boundaries.
- Keep one writer. Every action that changes data comes from one agent, and a reviewer with a clean context checks it before a person approves.
- Trace every handoff. Log the brief that went in and the answer that came back, so a bad result points to the boundary that lost it.
Build it with me: the Free Live Lab Build a Multi-Agent System with MCP, live on Thursday, October 29.
In the agent you run now, where does the context split?
Param
Sources
- Kim et al., Towards a Science of Scaling Agent Systems (arXiv 2512.08296v3), 2026
- Anthropic, Building multi-agent systems: When and how to use them, 2026
- OpenAI, A practical guide to building agents, 2025
- LangChain, Benchmarking Multi-Agent Architectures, 2025
- Claude Code Docs, Subagents in the SDK, 2026
- OpenAI Agents SDK docs, Handoffs, 2026
- langgraph-supervisor-py README (GitHub), 2026
- langgraph-swarm-py README (GitHub), 2026
- arXiv 2411.04468, Magentic-One: A Generalist Multi-Agent System for Solving Complex Tasks, 2024
- Anthropic Engineering, How we built our multi-agent research system, 2025
- Claude Code docs, Create custom subagents, 2026
- Cognition, Don't Build Multi-Agents, 2025
- Cognition, Multi-Agents: What's Actually Working, 2026
- Cemri et al., UC Berkeley, Why Do Multi-Agent LLM Systems Fail? (arXiv 2503.13657), 2025
- OpenAI Agents SDK docs, Orchestrating multiple agents, 2026
- CrewAI docs, Introduction, 2026
- Google Agent Development Kit docs, Workflows, 2026
- Anthropic Engineering, Scaling Managed Agents: Decoupling the brain from the hands, 2026