
Start with one agent unless the work has a real reason to split. A multi-agent architecture earns its extra complexity when the task can run in genuinely independent branches, needs hard tool or permission boundaries, or benefits from isolated specialist contexts and independent validation. A fixed token threshold such as “64k means upgrade” is not a reliable rule because context limits and long-context behavior vary by model, task, prompt structure, and tool payload.
Single-Agent vs. Multi-Agent: Enterprise Decision Matrix
| Decision factor | Prefer one agent | Prefer multiple agents | Why it matters |
|---|---|---|---|
| Task shape | Mostly sequential; later steps depend heavily on earlier details. | Several branches can investigate or execute independently. | Parallel work is one of the clearest reasons to pay coordination overhead. |
| Context | One shared working context improves consistency. | Specialists need different context slices or large independent evidence sets. | Isolation can reduce irrelevant context, but handoffs can also lose information. |
| Tools and permissions | The same trust boundary and tool set apply to the whole job. | Read, write, execute, approve, or notify permissions should be separated. | Separate executors can make least-privilege policies easier to enforce. |
| Validation | The same agent can verify output with deterministic checks. | A reviewer must be independent from the producer or use a different evidence path. | Independence is useful only when the reviewer has a distinct rubric, context, or authority. |
| Latency and cost | Tight budget, low latency, predictable call count. | Higher value per task can justify extra calls, especially when work runs concurrently. | More agents add orchestration, messaging, retries, and evaluation surface. |
| Operational ownership | One team owns the full capability. | Capabilities are maintained by different teams or change independently. | Architectural boundaries can mirror real ownership boundaries. |
Agent Architecture
Reality Check
Decide whether one agent, a deterministic workflow, or multiple specialist agents best fit the work you actually need to run.
Split only when the boundary changes the outcome.
Describe the workload, not the technology preference.
Answer every question. The recommendation is produced by explicit architecture rules, then adjusted for cost, latency, and context-coupling risk.
Why this fits
Watch-outs
Next implementation test
Do Not Confuse a Multi-Step Workflow With a Multi-Agent System
A single agent can plan, call several tools, retrieve documents, write code, inspect results, and revise its own answer without becoming a multi-agent system. The defining architectural change is that multiple agent contexts or role-specific model instances coordinate through explicit handoffs, routing, shared state, or an orchestrator. This distinction matters because many workflows become more reliable by adding deterministic stages before they need another autonomous agent.
A predictable process often belongs in code rather than in another prompt. If the sequence is always “extract fields, validate schema, calculate totals, then request human approval,” a deterministic workflow with bounded model calls is easier to test than four agents negotiating what to do next. Multi-agent orchestration is most valuable when the path itself is dynamic or when independent specialists need freedom to pursue different approaches.
What Actually Breaks a Single-Agent Architecture?
Single-agent systems usually fail because the working state becomes noisy, the tool set becomes too broad, or the agent has to remember too many competing instructions while performing a long chain of actions. Long context alone is not the whole problem: placement, relevance, duplicated tool output, schema complexity, and the number of decisions the model must carry forward all affect reliability. Research on long-context models has repeatedly shown that models may use information unevenly across a long prompt, which is why context design matters even when the nominal context window is large.
- Context pollution: unrelated tool outputs, logs, documents, and intermediate drafts crowd the same history.
- Tool ambiguity: the agent has too many similar tools or must infer subtle permission differences at runtime.
- State drift: goals, constraints, and accepted decisions are reinterpreted after many turns.
- Sequential bottlenecks: independent investigations are forced to run one after another.
- Permission sprawl: one agent receives write or execution rights that are unnecessary for most of its work.
- Weak self-review: the same context that produced an answer also anchors the review process.
The original idea of a universal “64k token barrier” should therefore be removed. Different models expose different context capacities, and degradation can appear well before the advertised limit or not appear at the same point for another task. A better promotion trigger is measured failure: if a carefully optimized single-agent baseline still loses critical instructions, selects the wrong tools, or cannot maintain evaluation quality as context grows, context isolation becomes an architectural option worth testing.
Why Naive Agent Loops Can Become Expensive

If every step resends the entire conversation plus all previous tool output, the amount of input processed across the full run can grow much faster than the visible final prompt. With roughly constant new payload per step, cumulative input can approach quadratic growth in the number of steps even though the context at any single step grows linearly. This is a billing and latency effect of repeatedly processing history, not a claim that every model’s attention cost or provider pricing follows one universal formula.
Mathematical Context Growth
For a simple sequential agent loop, assume step i sends the fixed prompt or state overhead P plus the tool and intermediate payloads accumulated up to that point. The cumulative input processed across t steps can then be represented as:
Here, P is the repeated prompt/state overhead and Tj represents the new tool or intermediate payload introduced at step j. If roughly the same amount of new history is added on each step and the whole history is resent, the context visible at one step grows linearly while cumulative input processed across the run can approach quadratic growth. Summarization, state compaction, retrieval, caching, and selective context can change that pattern substantially.
A decomposed multi-agent run can instead give each specialist only its required prompt and isolated context slice. A simplified bookkeeping model is:
This second expression does not mean multiple agents automatically use fewer tokens. Handoff summaries, duplicated instructions, retries, reviewer passes, and synthesis can increase total consumption. The advantage is context isolation: each specialist can work with a smaller, more relevant slice when the task genuinely decomposes cleanly.
Multiple agents can therefore reduce irrelevant context, but they can also duplicate instructions, summaries, and handoff messages. Anthropic’s published multi-agent guidance reports that comparable multi-agent implementations can consume substantially more tokens than single-agent approaches, so context isolation should be justified by better task outcomes rather than treated as a free efficiency gain. In practice, evaluate total cost per successful task, not tokens per individual call.
When Multiple Agents Earn Their Overhead

Three patterns consistently justify a serious multi-agent test: real parallelism, hard specialization boundaries, and independent verification. The strongest cases often combine two of them, such as a research system that sends separate investigators down independent paths while a lead agent synthesizes the findings, or a code workflow that keeps generation separate from security approval and execution. The LangChain multi-agent documentation similarly emphasizes that many complex tasks still work well with one agent and that architecture should follow the required context and control pattern.
- Parallel research or exploration: several independent questions can be investigated at once, then merged.
- Specialist context: each role needs a different knowledge base, prompt, model, or tool set.
- Permission isolation: reading, modifying, executing, and approving are intentionally separated.
- Independent evaluation: the reviewer needs a distinct rubric or evidence path rather than the producer’s full reasoning history.
- Distributed ownership: different teams maintain capabilities that should remain independently deployable.
Four Architecture Patterns to Compare Before You Build
| Pattern | Best fit | Main advantage | Main failure mode |
|---|---|---|---|
| One agent + tools | Bounded tasks with one coherent owner. | Lowest coordination overhead and easiest tracing. | Context and tool sprawl as the capability grows. |
| Deterministic workflow + model nodes | Known sequence with strict checkpoints. | High testability and explicit failure handling. | Rigid when the route genuinely needs to change dynamically. |
| Supervisor + specialists | Dynamic routing across distinct capabilities. | Central control with isolated specialist contexts. | Supervisor becomes a routing bottleneck or loses detail at handoff. |
| Parallel specialists + synthesizer | Breadth-first research, discovery, or independent analysis. | Independent context windows and concurrent work. | Duplicate work, conflicting findings, and expensive synthesis. |
Context Isolation Helps, but Handoffs Create a New Failure Surface
A clean handoff should contain the minimum state the next role needs: the task, accepted constraints, evidence or artifacts, uncertainty, and the decision the next agent must make. Passing an entire conversation defeats much of the benefit of context isolation, while over-compressing the handoff can remove assumptions that later become important. Treat the handoff schema as a production API contract rather than free-form chat between agents.
Structured state also makes evaluation easier. You can test whether the router chose the right specialist, whether a worker returned the required fields, whether the reviewer rejected known bad outputs, and whether the synthesizer preserved supported evidence. A multi-agent design that cannot be evaluated at its handoffs is usually harder to debug than the single-agent system it replaced.
Production Skeleton: LangGraph With Explicit Routing and Validation

The following example shows the orchestration shape rather than pretending a short snippet is a complete production system. It uses current LangGraph graph primitives to separate routing, worker execution, and validation, while keeping termination explicit. Replace the placeholder worker functions with your actual model or agent calls, and add persistence, retries, observability, authorization, and human approval where your risk model requires them.
from typing import Literal
from typing_extensions import TypedDict
from langgraph.graph import StateGraph, START, END
class WorkflowState(TypedDict, total=False):
request: str
route: Literal["single", "specialist"]
draft: str
approved: bool
attempts: int
def classify(state: WorkflowState):
"""Deterministic or model-based routing can live here."""
request = state["request"].lower()
needs_specialist = any(
term in request for term in ("security", "compliance", "migration")
)
return {
"route": "specialist" if needs_specialist else "single",
"attempts": 0,
}
def general_worker(state: WorkflowState):
# Replace with a real single-agent/model call.
return {"draft": f"General response for: {state['request']}"}
def specialist_worker(state: WorkflowState):
# Replace with a specialist agent using a narrower prompt/tool set.
return {"draft": f"Specialist response for: {state['request']}"}
def validate(state: WorkflowState):
"""Use deterministic checks wherever possible before LLM review."""
draft = state.get("draft", "")
attempts = state.get("attempts", 0) + 1
approved = bool(draft.strip()) and attempts <= 3
return {"approved": approved, "attempts": attempts}
def route_worker(state: WorkflowState) -> Literal["general_worker", "specialist_worker"]:
return "specialist_worker" if state["route"] == "specialist" else "general_worker"
def after_validation(state: WorkflowState) -> Literal["general_worker", END]:
if state.get("approved"):
return END
return "general_worker"
builder = StateGraph(WorkflowState)
builder.add_node("classify", classify)
builder.add_node("general_worker", general_worker)
builder.add_node("specialist_worker", specialist_worker)
builder.add_node("validate", validate)
builder.add_edge(START, "classify")
builder.add_conditional_edges("classify", route_worker)
builder.add_edge("general_worker", "validate")
builder.add_edge("specialist_worker", "validate")
builder.add_conditional_edges("validate", after_validation)
graph = builder.compile()
result = graph.invoke(
{"request": "Review this migration plan for security risks"},
{"recursion_limit": 8},
)
The important production decision is not the framework name; it is whether each boundary has a clear contract. LangGraph supports deterministic edges, conditional routing, loops, and recursion limits, so you can keep control logic explicit instead of asking a supervisor model to improvise every transition. This is particularly useful when a workflow mixes agentic reasoning with actions that must remain predictable.
Cost and Latency: Measure the Whole Successful Run
Multi-agent systems are often more expensive because the system duplicates instructions, creates handoff summaries, invokes additional models, and may repeat work during review. Anthropic’s guidance on when to use multi-agent systems describes multi-agent implementations using several times more tokens than comparable single-agent approaches in its testing, which is a useful warning against adding agents by default. The right metric is cost per accepted outcome at the required quality and latency, not the price of one model call.
Parallelism can still reduce wall-clock time when branches are truly independent. If four research branches each take ten seconds and can run simultaneously, the elapsed time may be closer to the slowest branch plus synthesis than to forty sequential seconds, although provider limits and orchestration overhead still apply. If every branch waits for the previous branch’s output, multiple agents add cost without delivering the main latency benefit.
Security: Separate Permissions Before You Separate Personalities
Tool boundaries are a stronger reason for specialization than persona labels. A research role may need read-only retrieval, an execution role may need a narrowly scoped write permission, and an approval role may need authority to release the final action without having direct access to the execution tool. That arrangement limits blast radius and gives security reviews a concrete boundary to inspect.
Do not assume a separate agent is automatically a security boundary. If all agents share the same credentials, memory store, or unrestricted tool gateway, the system may still have one effective trust domain. Enforce permissions in code, identity, policy, and infrastructure; prompts can explain a rule, but they should not be the only control protecting a destructive action.
How to Decide: A Promotion Gate From One Agent to Many
Build the simplest credible baseline first, then promote only when the evidence shows a persistent limitation. This keeps architecture tied to measured reader or business value rather than to the novelty of an agent pattern. Run the same representative tasks through both designs and compare outcomes under normal and adversarial conditions.
- Quality: task success, factual accuracy, schema validity, and acceptance rate.
- Reliability: retry rate, loop rate, wrong-tool calls, and handoff failures.
- Safety: permission violations, unsafe actions, and reviewer escape rate.
- Latency: median and tail completion time for successful tasks.
- Cost: total model, retrieval, tool, and orchestration cost per accepted result.
- Operability: how quickly a failed run can be traced to the responsible node, tool, or handoff.
Frequently Asked Questions
| Pattern | Best fit | Main advantage | Main failure mode |
|---|---|---|---|
| One agent + tools | Bounded tasks with one coherent owner. | Lowest coordination overhead and easiest tracing. | Context and tool sprawl as the capability grows. |
| Deterministic workflow + model nodes | Known sequence with strict checkpoints. | High testability and explicit failure handling. | Rigid when the route genuinely needs to change dynamically. |
| Supervisor + specialists | Dynamic routing across distinct capabilities. | Central control with isolated specialist contexts. | Supervisor becomes a routing bottleneck or loses detail at handoff. |
| Parallel specialists + synthesizer | Breadth-first research, discovery, or independent analysis. | Independent context windows and concurrent work. | Duplicate work, conflicting findings, and expensive synthesis. |
Next Step: Prove the Boundary Before You Add the Agent
The safest enterprise default is one capable agent inside an explicit workflow, with deterministic validation wherever possible. Add agents only when you can name the boundary they create - parallel branch, specialist context, permission isolation, independent review, or distributed ownership - and measure the improvement on the same task set. That approach keeps the architecture understandable as models, context windows, and orchestration frameworks continue to change.


