Est.

Agentic AI Architecture Patterns Overview

Agentic AI requires distinct architecture layers beyond the model to act autonomously and reliably.

Contributing Editor · · 16 min read
Cover illustration for “Agentic AI Architecture Patterns Overview”
MCP 101 (mcp vs api, mcp servers, spec updates, mcp oauth) · July 23, 2026 · 16 min read · 3,577 words

The canonical stack that all five patterns plug into

Most people, when they first encounter agentic AI, think of it as a smarter chatbot. It isn't. The distinction matters more than it appears. A conventional model responds; an agentic system acts. It doesn't just decide what to say. It decides what to do, in what order, with what tools, and then it observes what happened and adjustes. That shift, from response to action, changes the entire design problem.

The architecture that emerges from that shift has a shape. At the top, a user submits a goal. An intent router parses what that goal actually requires. An agent orchestrator takes over, and beneath it sits the machinery: a planner, a tool executor, a reflector, a memory and state layer, and references to other agents. Every major design pattern in agentic AI maps onto one of those slots. Nothing sits outside the stack; everything connects to it.

Here is an analogy that has helped me think about this clearly. The foundation model is like a CPU, powerful at computation but inert on its own. The agent is like a process, a running instance with a goal. The agentic framework is like an operating system, the scaffolding that gives the process access to memory, I/O, and other processes. That framing makes explicit something that gets obscured in a lot of marketing language: the model is not the system. The model is one component of the system, and the system is what actually produces behavior.

Every production agent relies on three tiers of external resources beyond the model itself. First, a memory layer, which we will examine at length later, covering episodic, semantic, and procedural memory. Second, a tool layer: APIs, databases, code executors, search indices. Third, a coordination layer that governs how agents relate to each other. None of these are optional at scale. They are the substance of what makes an agent an agent rather than a glorified prompt.

Patterns exist because compound systems have too many moving parts to design from first principles each time. A pattern is a reusable solution to a recurring structural problem, and when you are building systems where errors compound across steps rather than staying isolated to a single response, you want every structural problem to be a solved one. One more thing worth saying at the outset: the patterns are not mutually exclusive. Most real-world agents combine two or more of them. The patterns are a vocabulary, not a menu.

Gartner named agentic AI the top strategic technology trend for 2025. Microsoft's 2025 Work Trend Index found that 81% of business leaders anticipated moderate to extensive agent integration within twelve to eighteen months. At that scale, the architecture choices are not academic. They are the decisions that determine whether these systems are purposeful or merely expensive.

ReAct: the foundational loop most agents run on

If you have built or used a capable agent, you have almost certainly encountered ReAct, whether or not you called it that. The loop is: Thought, Action, Observation, repeat until the goal is met. The agent reasons about what to do, executes something, sees what happened, and reasons again. Simple in description. Consequential in practice.

The pattern comes from research published in 2022 by Yao and colleagues, who found that interleaving reasoning traces with actions improved both accuracy and interpretability compared to either pure action or pure reasoning approaches alone. That finding holds up intuitively once you sit with it. A pure action agent, one with no explicit reasoning trace, is fast but opaque. When it fails, you often have no idea why, because there is no visible decision process to inspect. A pure reasoning agent, chain-of-thought all the way down, can describe what it would do in impressive detail but never actually does anything. ReAct splits the difference: it acts, and it shows its work.

That inspectability is underrated. In production, when an agent makes a bad call, you want to reconstruct what it was thinking. With ReAct, you can. Without it, you are debugging a black box.

Where ReAct excels: tasks with well-defined tools and observable outcomes. Web search, database queries, code execution, API calls. The external environment provides feedback at each step, and the loop tightens around that feedback. Where ReAct runs into trouble: long-horizon tasks, where the agent can lose track of the overall goal while buried in subtask execution, and output quality, because the loop does not include a mechanism for the agent to review what it produced before returning it. Those gaps are what motivate the next two patterns.

Think of ReAct as the baseline metabolism of an agent. Fast, iterative, grounded in external feedback. The minimal viable loop. Everything else is built on top of it or around it.

Reflection: how agents check and improve their own outputs

There is a structural problem with how language models generate text. They produce tokens sequentially, each one conditioned on what came before. There is no pause at the end to step back and ask, "Is this any good?" Without an explicit feedback loop, the model cannot assess its own output. It just finishes.

Reflection is the pattern that inserts that pause. It comes in two modes. Internal reflection means the agent prompts itself to critique what it produced before returning it, essentially asking itself a second question about the answer to the first. External reflection means a separate evaluator, another model call, a code linter, a test runner, provides structured feedback that the agent then incorporates. Both modes introduce a check that the base generation step skips.

The more formalized variant is Reflexion, a three-component architecture: an Actor that generates actions, an Evaluator that assesses outcomes, and a Self-Reflection module that produces improvement feedback. Crucially, the agent accumulates experience across trials, which means it can get better at a task not just within a session but by learning from what failed previously. Research by Madaan and colleagues in 2023, working on what they called Self-Refine, found that self-refinement improved performance by approximately twenty percentage points across a range of tasks including dialogue generation and mathematical reasoning. That is a meaningful lift.

But here is the frame that keeps me from overselling reflection: it is a risk-reduction mechanism, not an intelligence upgrade. It catches failures the base reasoning would let through. The agent gets a second pass to catch its own mistakes rather than becoming smarter in any deep sense. That is valuable, but it is a different kind of value than people sometimes assume.

The cost implication is real and worth taking seriously. Every reflection iteration is an additional model call. More calls mean more latency and more cost. The quality gain has to justify the overhead, which means reflection is not the right choice everywhere. It earns its place in high-stakes outputs: long-form content that will be published, code that will actually execute, any domain where a silent error carries genuine cost. For a quick retrieval task with a well-structured answer, the extra pass is not worth it.

Planning: giving agents a stable map for multi-step work

Here is something I have watched happen repeatedly with agents that lack explicit planning: the agent starts a complex task, executes a few subtasks competently, and then, somewhere in the middle of step four, quietly forgets what the overall goal was. It is not a failure of the underlying model's capability. It is a structural problem. The goal gets buried under the accumulation of intermediate context, and the agent loses its orientation. Call it cognitive entropy: the tendency for goal representation to degrade under the weight of execution.

Planning is the pattern that prevents this. The structure is straightforward. In the planning phase, before any tools are called, the agent generates an explicit plan object: a structured artifact that lays out what needs to happen and in what order. In the execution phase, the agent works through the steps while maintaining a reference to the plan. The plan is persistent. The agent can consult it, revise it, and return to it. It survives the execution of individual subtasks in a way that a vaguely held goal in the prompt does not.

This is categorically different from asking the model to figure out the next step on the fly at each turn. The difference is that externalizing the goal structure preserves it. A plan written out is a plan that cannot be silently overwritten by new observations. Dynamic replanning, where the agent revises the plan mid-execution when circumstances change, adds robustness without sacrificing that persistence. The plan changes deliberately rather than eroding accidentally.

There is also a concrete cost optimization built into this pattern that I find underappreciated. You can use a frontier model, one of the large, expensive, highly capable ones, to generate the initial plan, and then execute individual subtasks with a smaller, cheaper model. The planning step benefits from the frontier model's capacity for complex reasoning. The execution steps are often simpler and do not require the same horsepower. That division of labor can reduce per-run costs substantially compared to routing everything through a frontier model, and the quality hit is often minimal because the hard thinking has already been done.

When is planning worth the overhead? When a task has more than three or four dependent steps, when step order matters, when multiple tools need coordination. When is it overkill? Simple retrieval-and-respond. Tasks that fit cleanly in a single ReAct loop. The pattern is powerful enough that there is a temptation to apply it everywhere; the discipline is knowing when it earns its keep.

Tool use: how agents reach beyond their training data

A language model's training data has a cutoff. Its world is static. The moment you need current information, external computation, or the ability to change something in a real system, the model's internal knowledge is insufficient. Tool use is the architectural pattern that closes that gap.

What tool use means at the architectural level is this: the model decides which tool to call, with what parameters, and how to interpret the result. The model is not the executor; it is the router and the interpreter. The tool does the actual work. That distinction matters because it clarifies what the model needs to be good at in a tool-augmented system: reasoning about which tool fits the situation and parsing what the tool returns, not doing the computation itself.

The range of tools in production systems is wide. Retrieval tools: search engines, vector databases, document stores. Computation tools: code executors, calculators, data transformation functions. Action tools: write APIs, form submission, database mutation, email sending. And then, critically, agent invocation: calling another agent as a tool, which is the bridge into multi-agent patterns. The taxonomy matters because different tool types carry different risk profiles. A retrieval tool reads. An action tool writes. Governing them uniformly is a mistake.

Before standardized protocols, building a tool-rich agent meant writing custom integration code for every model-to-tool pair. The combinatorial complexity made serious tool use impractical at scale. Anthropic released the Model Context Protocol in late 2024 specifically to address this. MCP defines three primitive types, Tools, Resources, and Prompts, exposed by servers and consumed by clients. It has reached over 110 million monthly downloads, which signals that the protocol filled a real gap. Google's Agent-to-Agent protocol, released in 2025 and now a Linux Foundation standard alongside MCP, complements it by handling direct agent-to-agent communication and capability delegation, the piece MCP was not designed for.

What standardization changes for the people building these systems is concrete. Tool registries become possible. Access policies can be enforced at the protocol layer rather than rebuilt for each integration. Adding a new tool no longer requires touching the agent's core code. That is a genuine architectural shift, from bespoke plumbing to a governed infrastructure.

The governance dimension deserves more attention than it usually gets. Every tool call is a potential access to an external system or external data. At small scale, you can track this manually. At production scale, with many agents calling many tools across many sessions, ungoverned tool use is an operational risk. Not a hypothetical one.

Multi-agent orchestration and the three topologies that structure it

The intuition behind multi-agent systems is that specialization works. A team of people with defined roles, each expert in their domain, outperforms a single generalist on complex tasks. The same logic applies to agents. Anthropic's June 2025 internal research evaluation found that a multi-agent system with a lead agent orchestrating specialized subagents outperformed a single-agent approach by over 90% on the same tasks. That is a significant performance gain.

The cost of that gain is also significant. The same report found that multi-agent systems consume approximately fifteen times more tokens than standard chat interactions. The architecture earns its overhead only when the task genuinely requires it. Knowing when the task genuinely requires it is the practical skill.

There are three topologies worth understanding, each suited to a different class of problems.

Supervisor and worker

A single orchestrator delegates tasks, manages dependencies, and synthesizes outputs. This is the most common enterprise pattern in practice. It works well for structured, predictable workflows: customer service triage, document processing, data pipelines. The orchestrator has a complete view of the task and can enforce consistency across subagents.

The trade-offs are real. The orchestrator is a single point of failure. If it goes down, the system goes down. Production deployments need multi-region failover for exactly this reason. And if the orchestrator tries to do too much reasoning itself, rather than delegating, it becomes a bottleneck. The design discipline is keeping the orchestrator thin.

Peer-to-peer

No central orchestrator. Agents communicate via a shared message bus, subscribe to task types, and self-assign work. Common implementations use Redis Streams or Kafka as the bus. This topology fits distributed research, exploratory analysis, tasks where no single agent has a complete view of the problem space. It is more resilient to single-point failure because there is no single point.

The trade-offs here cut in the opposite direction. Harder to audit, harder to enforce consistent policy across agents, harder to trace causality when something goes wrong. If you need a clean record of what happened and why, peer-to-peer makes that difficult.

Hierarchical

This adds management layers between the orchestrator and the workers. Sub-orchestrators handle domains; workers handle tasks. It is the right topology for enterprise operations spanning multiple business functions where supervisor-worker becomes too flat to manage. But latency grows with each layer. A multi-layer hierarchical system running a non-trivial task can take tens of seconds and cost meaningfully more per run than a single agent with the right tools. For simple tasks, that overhead is indefensible.

The topology choice is ultimately a risk and cost decision as much as a capability decision. The right question is not "which topology is best" but "which topology matches this specific task's complexity, latency requirements, and governance needs."

Memory architecture and why context windows alone don't solve it

Without an explicit memory layer, an agent begins every session knowing nothing about what happened before. It cannot build on past interactions, cannot remember that a user prefers a particular format, cannot carry expertise accumulated over time. It is perpetually new. For many tasks, that is tolerable. For anything that unfolds over multiple sessions, or that requires an agent to improve over time, it is a serious constraint.

A research framework from Princeton's 2023 work, the CoALA taxonomy, identifies four memory types that production systems converge on. In-context or working memory is what sits in the current prompt window. Episodic memory is records of past interactions. Semantic memory is factual and domain knowledge. Procedural memory is rules, skills, and learned behaviors. Each type has different persistence requirements, different retrieval mechanisms, and different implementation choices.

A reasonable objection here: context windows keep growing. Why not just put everything in context? The answer is that longer context creates problems that scale with the context length. Models pay less attention to content in the middle of very long contexts; the phenomenon is well-documented and has not been solved by simply making windows larger. Compute costs grow quadratically with context length. At production scale, feeding enormous contexts on every call is economically unsustainable. Prompt caching helps at the margins but introduces its own fragility.

The implementation choices by memory type are worth being concrete about. Working memory lives in Redis or an in-memory key-value store, fast and ephemeral. Persistent knowledge, the semantic layer, lives in a vector database. Episodic memory needs a structure that supports retrieval by time, by session, or by relevance. And then there is decision trace memory: structured logs of every prompt, every response, every tool call, every decision the agent made.

Decision trace memory is the one I want to linger on. It is often treated as a debugging artifact, something you capture in case something breaks. But it is also the minimum requirement for knowing what your agent actually did. In a regulated environment, in any context where auditability matters, the trace is not optional. It is the bridge between system behavior and governance. An agent that cannot be audited cannot be trusted at scale, regardless of how capable it is.

Advanced reasoning structures that operate inside single agent steps

Everything discussed so far has been about how agents are structured across steps. These patterns operate inside a single step, shaping how the agent thinks before it acts.

Chain-of-thought is the baseline. The model shows its intermediate reasoning steps before reaching a conclusion. This improves accuracy on tasks that require multi-step inference and makes the reasoning inspectable. For most tasks where reasoning transparency matters, chain-of-thought is the starting point.

Tree of Thoughts extends this into a tree structure. Instead of a single reasoning path, the agent explores multiple paths explicitly, with backtracking when a branch reaches a dead end. Each node in the tree is a partial solution. The tree structure is useful when the right approach is not obvious upfront, when you need to evaluate options rather than just follow the most obvious path. Open-ended problems, creative tasks, strategy questions with multiple valid answers.

Graph of Thoughts generalizes further. Instead of a tree, reasoning can take the form of an arbitrary graph, where thoughts can be merged, refined, split, and reused across branches. Intermediate reasoning on one subproblem can feed into multiple downstream subproblems. This is suited to analytically complex tasks where the subproblems are interdependent rather than sequential.

The practical dimension here is cost. More sophisticated reasoning structures consume more compute. Graph of Thoughts and Tree of Thoughts are more powerful than chain-of-thought, which is more powerful than no explicit reasoning structure. The choice is essentially a decision about how much compute to spend on thinking before acting, calibrated to how much the task benefits from it.

These structures compose with the larger patterns. A ReAct agent can use chain-of-thought for its Thought steps. A planning agent can use Tree of Thoughts to generate candidate plans before committing to one. The patterns are not in competition; they are layers.

How the patterns combine in practice and what drives the choice

Nobody builds a production agent from a single pattern. The patterns combine, and the combinations that make sense are determined by the problem, not by preference.

Consider a research agent tasked with producing a comprehensive analysis of a competitive landscape. The task has more than four dependent steps and requires coordinating multiple tools, so planning is warranted. A frontier model generates the plan. Cheaper models execute individual research subtasks. Each subtask runs a ReAct loop: search, observe, reason, search again. When a subtask produces a draft synthesis, a reflection step reviews it before the result gets passed up to the orchestrator. If the research scope is large enough, the orchestrator delegates to specialized subagents, one for each domain, and a supervisor topology keeps the outputs coherent. All of this runs against a memory layer that preserves findings across the session and logs every decision in a trace.

That is five patterns operating simultaneously. None of them are redundant; each one addresses a different structural problem.

What actually drives the choice? A few considerations recur consistently. Task complexity determines whether planning is necessary. Step interdependency determines whether a single ReAct loop suffices or whether multi-agent coordination is warranted. Error cost determines whether reflection earns its overhead. Latency tolerance determines how many layers the system can afford. And governance requirements determine how robust the memory and tracing infrastructure needs to be.

The mistake I see most often is architecting for capability rather than for the task. Someone sees that a hierarchical multi-agent system with advanced reasoning structures can do impressive things, and they reach for that complexity regardless of whether the problem actually requires it. A simple retrieval task wrapped in a five-agent hierarchy with full reflection passes is slower, more expensive, and harder to debug than a clean ReAct loop. The architecture should be as simple as the task permits and no simpler.

The deeper point is this: these patterns are a map, not a prescription. They tell you what structural problems have reusable solutions, not which solutions to apply. Learning to read the problem, to identify which structural challenges are actually present and which patterns address them, is what separates systems built purposefully from systems built ad hoc. The patterns are well understood now. The judgment about how to combine them is still the hard part.

Sources

  1. thinking.inc
  2. innovatrixinfotech.com
  3. medium.com

More in MCP 101 (mcp vs api, mcp servers, spec updates, mcp oauth)