Multi-Agent Architecture Without the Chaos: When One Agent Is Enough
- Published on
- Reading time
- 13 min read
More agents do not automatically create a better AI system. Start with one agent and clear tools; split only when roles, permissions, context or evaluation genuinely need separate boundaries. A practical architecture for agents, MCP, orchestration and observability. #AIAgents #MultiAgent #MCP #AIArchitecture #AgenticAI #AIEngineering
Multi-Agent Architecture Without the Chaos: When One Agent Is Enough
Multi-agent systems are easy to make impressive in a diagram.
A planner talks to a researcher. The researcher delegates to a browser agent. A critic reviews the output. A writer produces the response. A supervisor decides whether everybody should try again.
The diagram looks intelligent.
The production system may simply have five places to fail instead of one.
Working with agentic systems and MCP tooling has pushed me toward a simpler rule:
Start with one agent. Add another only when you can name the boundary it owns.
The objective is not to maximize the number of agents. It is to make a workflow reliable, understandable and operable.
One agent with good tools is surprisingly capable
A single agent can often:
- Understand a request.
- Retrieve context.
- Search approved sources.
- Call business APIs.
- Read or write structured data.
- Ask for missing information.
- Produce a result.
If those actions share the same permissions, context and success criteria, splitting them across multiple agents may add coordination without adding capability.
A useful baseline is:
User/Task → Agent → Approved tools → Validation → Result
Build this first.
If it works, you have avoided an unnecessary distributed system.
Multi-agent is a distributed-systems problem
The moment several agents collaborate, you inherit familiar engineering questions:
- Who owns state?
- Who can call which tool?
- How is work delegated?
- What happens when one worker fails?
- How do you prevent duplicate actions?
- How does an agent know another agent finished?
- Which output is authoritative?
- How do you trace the complete task?
- When does the system stop?
These are not solved by writing better role prompts.
They require orchestration, contracts, state management, observability and failure handling.
That is why I treat multi-agent architecture as a systems-design decision, not a prompting technique.
When one agent is enough
Keep one agent when the workflow has one clear objective, the same trust boundary, a manageable tool set and context that comfortably belongs together.
For example, a research agent may be able to search, open pages, extract evidence, store findings and prepare a report without requiring separate “searcher,” “reader” and “writer” personalities.
Those may be steps, not agents.
A workflow engine can orchestrate steps without pretending every function is an autonomous colleague.
A role is not automatically an agent
This distinction removes a lot of unnecessary complexity.
“Research,” “validation,” “summarization” and “publishing” can be roles in a process.
They become separate agents only when independent reasoning boundaries provide value.
Before creating a new agent, ask:
Could this be a tool, function, workflow step or deterministic service instead?
If yes, start there.
A validator that checks a JSON schema does not need an identity, memory and LLM.
A database lookup is a tool.
A scheduled trigger is infrastructure.
A permission check is application logic.
Do not turn ordinary software into agents.
When a second agent earns its place
There are several boundaries that can justify separation.
Different permissions
A research agent may have read-only web access while an execution agent can modify a CRM.
Keeping those capabilities separate can reduce the blast radius of mistakes.
Different context
A coding agent may need repository context while a commercial agent needs customer and CRM context.
Combining everything into one context can create noise and unnecessary exposure.
Different models or cost profiles
One role may need a small local model for extraction while another needs a stronger model for complex reasoning.
Separation can make routing and cost control clearer.
Different evaluation criteria
A retrieval agent may be evaluated on evidence quality. An execution agent may be evaluated on whether an action was correct and authorized.
Independent boundaries make those evaluations easier to reason about.
Parallel work
Some tasks genuinely benefit from independent work happening at the same time.
If several research paths do not depend on one another, parallel workers can reduce total latency.
But parallelism alone does not require different personalities. They may be instances of the same worker contract.
Define agents by contracts, not personalities
“Senior researcher,” “brilliant strategist” and “skeptical critic” are prompt descriptions.
Production architecture needs stronger definitions.
For each agent, define:
Input — What structured information can it receive?
Output — What schema must it return?
Tools — Which capabilities can it call?
Permissions — Which data/actions are allowed?
Budget — How many steps, calls or resources may it consume?
Success condition — What does completed mean?
Failure path — Retry, fallback, escalation or stop?
That turns an agent from a character into an operational component.
MCP is useful because tools need boundaries
One reason I work with MCP and built tooling around it is that agent capability should not be hardcoded into one giant prompt/application integration.
MCP gives a standard boundary through which agents can discover and call tools.
Architecturally, that can look like:
Agent → MCP client → MCP servers/plugins → business capabilities
The agent reasons about which approved capability to use while the actual integration remains outside the model.
This separation becomes more valuable as the number of tools grows.
Orchestra MCP and the plugin model
In the ecosystem I have been building, Orchestra MCP represents this idea at the tool/orchestration layer: capabilities can be exposed as plugins instead of rebuilding integrations separately for every agent.
The architectural value is reuse.
A browser capability, content operation, research operation or another business integration can be made available through a controlled interface and used by different agent workflows.
That does not mean every plugin needs its own agent.
Quite the opposite: reusable tools can reduce the need to split agents simply to separate integrations.
Keep orchestration outside free-form conversation
A fragile multi-agent pattern is:
Agent A writes prose to Agent B → Agent B interprets it → Agent C interprets B → action
Every handoff introduces ambiguity.
Where possible, use structured contracts:
objective
inputs
evidence[]
constraints[]
status
next_action
The exact schema depends on the workflow.
The principle is that agents should not have to reverse-engineer each other's intentions from paragraphs when the application can pass typed state.
Natural language is excellent for uncertain human input. It is not always the best internal protocol.
Separate orchestration state from model memory
A task has operational state:
- Pending.
- Running.
- Waiting for a tool.
- Waiting for approval.
- Failed.
- Completed.
That state belongs in the application/workflow layer.
Long-term agent memory solves a different problem: retained knowledge across tasks and sessions.
Do not use a vector store to decide whether a payment workflow already executed.
Do not use chat history as your job queue.
Operational state should be deterministic and transactional.
Shared memory can create accidental coupling
Giving every agent access to one giant memory corpus sounds convenient.
It can also create cross-contamination.
A safer design uses namespaces, tenant boundaries and role-based access to memory.
An agent should recall only what its task and permissions allow.
If agents need shared facts, expose those facts intentionally through a common memory or data service rather than relying on hidden prompt state.
This is one reason I keep long-term memory, such as the capabilities I built in CaBrain, as a separate service rather than embedding it into one agent persona.
The supervisor-agent trap
When a multi-agent workflow becomes unreliable, a common reaction is to add a supervisor agent.
Then the supervisor needs a critic.
Then somebody must evaluate the critic.
This can become recursion disguised as architecture.
Before adding a supervisor model, ask whether the decision can be expressed deterministically.
Examples:
- If required evidence is missing → return to research.
- If schema validation fails → retry once with error details.
- If action requires approval → wait for human.
- If maximum steps reached → stop and escalate.
A workflow engine can enforce these rules more reliably than another LLM.
Use model-based supervision only where the supervisory decision itself genuinely requires interpretation.
Human approval is a first-class participant
Some multi-agent diagrams omit the most important actor: a person.
For consequential actions, the workflow may be:
Research agent → Evidence → Recommendation → Human approval → Execution tool
rather than:
Research agent → Supervisor agent → Execution agent
Human approval is not a failure of autonomy.
It is an architecture boundary when business risk requires accountable authorization.
Observability must cross agent boundaries
When one agent calls one tool, debugging is relatively simple.
When several agents delegate work, you need an end-to-end trace.
For every task, I want to be able to reconstruct:
- Which agent ran.
- Which model/version it used.
- Which input/state it received.
- Which tools it called.
- What evidence it used.
- How many steps it consumed.
- What it returned.
- Why the workflow moved to the next stage.
- Whether a human intervened.
- The final outcome.
Without a shared trace or correlation ID, multi-agent debugging becomes archaeology.
Log decisions, not hidden reasoning
Observability does not require storing private chain-of-thought.
What the system needs is operationally useful information: selected action, tool arguments where safe, validation result, evidence references, error category, workflow transition and outcome.
This is enough to understand system behavior without depending on hidden internal reasoning text.
Evaluate components and the whole workflow
A multi-agent system can have individually strong agents and still fail end to end.
Evaluate at two levels.
Component evaluation
Can the research role find relevant evidence?
Can the extraction role produce the required schema?
Can the execution role use tools correctly?
Workflow evaluation
Did the complete task reach the correct outcome?
Was it authorized?
How many retries were required?
Was evidence preserved through handoffs?
Did the system stop when it should?
The second level is what the business experiences.
Cost grows through coordination
Multi-agent systems can multiply model calls quickly.
Suppose one task involves a planner, three workers, a reviewer and a final writer. Even before retries, one user request may create several inference calls and tool executions.
That can be justified if the task value and quality improvement support it.
But the architecture should make the multiplication visible.
Track cost per successful workflow, not per individual agent call.
If a second agent adds 30% more cost and no measurable improvement, it has not earned its place.
Parallelism needs idempotency
When multiple workers can act concurrently, duplicate execution becomes a real risk.
If two agents discover the same company, create the same CRM record or trigger the same notification, the system needs deterministic protection.
Use unique keys, idempotency tokens, transactional writes and explicit ownership of side effects.
The model should not be responsible for remembering that another agent probably already did it.
Tool permissions should follow least privilege
Do not give every agent every tool.
A researcher may need read access.
A content agent may create a draft but not publish it.
An execution agent may call one specific operational API.
A human may be required to authorize a destructive or financial action.
This reduces both security risk and decision complexity for the model.
Fewer irrelevant tools can also improve tool selection.
Failure handling should be designed before autonomy
For every agent and handoff, define failure classes.
Examples:
Tool unavailable → retry within limit or use fallback.
Missing information → request input.
Invalid structured output → validation feedback and bounded retry.
Permission denied → stop, do not route around security.
Low evidence quality → escalate or return incomplete.
Budget exhausted → stop.
“Let the agent figure it out” is not a failure policy.
A practical architecture
For many business systems, I prefer something like:
Task → Deterministic orchestrator → Agent/worker → MCP tools → Validation → State store → Next deterministic transition
Long-term memory, if required, sits behind its own controlled interface.
Human approval enters at explicit risk boundaries.
Additional agents are introduced only where separation improves permissions, context, parallelism or evaluation.
This architecture is less theatrical than agents endlessly chatting with each other.
That is exactly why I prefer it.
Example: opportunity research
Consider a system researching companies for real business opportunities.
A naive multi-agent design might create separate planner, web-search, company-analysis, buyer-discovery, scoring, critic and outreach agents.
A simpler design can start with:
Discovery → Evidence collection → Structured extraction → Scoring → Human review
Some stages may use models. Others are deterministic services.
If research becomes large enough to benefit from parallel workers, add them behind the same evidence contract.
If buyer discovery needs different data permissions or tools, that may become a separate worker boundary.
The architecture evolves from observed constraints rather than from an agent-org-chart template.
Example: software engineering
A coding workflow might initially use one capable coding agent with repository, test and documentation tools.
A separate reviewer becomes useful if you intentionally want independent context or a different evaluation step.
A deployment capability should not become another free-form agent simply because deployment is a separate job title in a human company.
It may be a deterministic pipeline gated by tests and approval.
Map software boundaries, not human organizational charts.
Five questions before adding another agent
- What capability can the current agent not provide safely or efficiently?
- Does the new role require different permissions or context?
- Can the requirement be a tool or deterministic workflow step instead?
- How will the two components exchange typed state?
- How will we measure whether the extra agent improves the end-to-end outcome?
If those questions do not have strong answers, keep one agent.
What I would optimize for
A production agent architecture should make it easy to answer:
Who can do what?
What state are we in?
Which evidence caused this transition?
What happens if this component fails?
How much did the successful task cost?
Can I replace this model or agent without rebuilding the whole workflow?
Those questions matter more than how sophisticated the agent hierarchy looks.
Multi-agent should be an earned complexity
Multi-agent systems can be powerful. They can separate trust boundaries, parallelize expensive research, isolate context and let specialized workers evolve independently.
But every agent also adds coordination, state, cost, evaluation and failure modes.
Start with the smallest architecture that can complete the task.
Use deterministic orchestration where the rules are known.
Expose capabilities through clear tool boundaries such as MCP.
Add agents only when a real systems boundary appears.
One capable agent with well-designed tools is often better than a committee of agents with unclear ownership.
Designing an AI-agent workflow and deciding whether it needs one agent or several?
I build agentic systems around explicit roles, MCP tools, permissions, memory, observability and controlled production workflows — with complexity added only where it creates measurable value.
Related: AI Agents, Agent Memory with CaBrain, AI Automation vs Traditional Automation, RAG vs Fine-Tuning vs AI Agents and MCP-based agent architecture.
Comments (0)