Home / Articles

Nine Architectural Pillars for Production-Grade Agentic AI Systems

Learn a nine-pillar architecture blueprint—spanning zero trust networking, data tiers, and evidence-binding—for building auditable, enterprise-grade agentic AI systems.

20 min read4681 words

This article is published in English.

The Demo-to-Production Gap Nobody Talks About

Building a weekend prototype of an AI agent is easy.

Wire an LLM to a tool-calling loop, hook it up to a vector store, slap on a chat interface, and suddenly you've got something that looks impressive in a demo. Leadership is delighted. The engineers are energized. Someone scribbles "Q3 pilot" on a whiteboard.

Then reality sets in once the system goes live. Nearly every organization hits the same set of failures, in some order:

The agent issues a refund for the wrong amount — because nobody drew a clear line between what the AI decides and what runs as fixed, executable logic. A security audit blocks the launch — because customer records were silently routed through an external embedding API. Someone from compliance asks why the system produced a particular answer months ago — and there's no way to reconstruct the reasoning. The giant agent script becomes impossible to touch — because prompt engineering, business rules, and API integration are all tangled together in one file. The output shifts after a routine re-indexing — and nobody can reproduce what the assistant said the previous month.

The uncomfortable reality is this:

Choosing a model was never the difficult part. Structuring the system around that model is.

An agentic system isn't just a thin AI layer bolted onto scripts. It's fundamentally a deterministic enterprise system that happens to contain a probabilistic reasoning core — and it demands the same engineering discipline you'd apply to a payments platform or core banking infrastructure.

This series lays out a complete architectural blueprint for building that kind of system. It's structured around nine core design decisions — nine pillars — that every production-grade agentic platform has to get right simultaneously, because when one fails, the others tend to fail with it.

Our Running Example: Aurora Bank

Architecture discussed in the abstract rarely sticks. So across this series, we'll ground every concept in a concrete, if fictional, scenario:

Aurora Bank is a mid-sized retail bank employing 4,000 people. They're rolling out "Aurora Assistant" — an agentic platform designed to: — answer staff questions about policy and compliance, — support loan processing (retrieving documents, verifying details, drafting decisions), — and manage customer service tasks such as refunds, account lookups, and ticket routing.

The limitations Aurora operates under mirror what most real enterprises deal with:

  1. Customer personal data cannot leave the bank's own infrastructure.
  2. Any automated decision needs to be explainable to a regulator on request.
  3. Transactions involving money must strictly follow policy — there's zero room for improvisation.
  4. The assistant needs to talk to more than 20 internal systems (SAP, Salesforce, core banking platforms, ServiceNow, and others).
  5. Security assumes breach is inevitable and requires strong containment by default.

Hold onto these five constraints as you read on — each of the nine pillars exists specifically to address limitations like these.

Five Guiding Principles

Before diving into the pillars themselves, it helps to absorb the underlying philosophy:

  1. Treat the model as one component among many, not as the architecture itself. Models get replaced every few months; your architecture needs to survive that churn.
  2. Keep reasoning probabilistic on the inside, but make the boundaries deterministic. The LLM can think freely, but actions must run through fixed code.
  3. Make sure every action generates a record. If you cannot replay a decision, you cannot defend it later.
  4. Isolate components by trust level, and mediate every access request. Agents are capable, which is precisely why they're risky — contain that risk deliberately.
  5. Build as though an audit is coming and as though you'll get paged at 3 a.m. Sooner or later, both will happen.

Now let's go through each pillar in turn — what it means, why this particular structure is the right one, an accompanying diagram, a concrete example, and the consequences of skipping it.

Pillar 1 — Logical Architecture: Why Six Layers Is Correct

The question here is simple to state: what are the core building blocks of the system, and which layer owns which responsibility?

An agentic platform breaks down into six logical layers.

Why six, and not three or nine?

The traditional three-tier model — presentation, logic, data — glosses over exactly the parts that make an agentic system distinct: orchestration, model selection, tool integration, and trust boundaries. On the other hand, splitting things into nine separate boxes tends to break apart pieces of functionality that really need to stay together.

Six turns out to be the minimum number of layers where each one has a single job, a single owner, and a single reason to ever change. You can test this by asking, for any given layer: could this layer change on its own without forcing every other layer to change with it?

  1. Experience layer (L1) shifts constantly — new interfaces, new channels, new front-end requirements.
  2. Orchestration (L2) shifts with every new use case you add.
  3. Reasoning (L3) shifts each time a stronger model becomes available, so it needs to be replaceable without touching anything else.
  4. Integration (L4) shifts whenever the business connects a new system.
  5. Data (L5) shifts slowly on its own, but the governance rules wrapped around it shift as regulation evolves.
  6. Governance (L6) sits off to the side as a cross-cutting rail rather than a bottom layer, because identity, auditing, evaluation, guardrails, and cost control need to reach into every other layer instead of being confined to the base of the stack.

A useful mental model is a restaurant kitchen: it's organized into stations — grill, sauté, pastry — so each cook can specialize, and the head chef can replace one station without tearing apart the whole kitchen.

Aurora in practice: because of the sovereignty requirement covered in Pillar 2, Aurora Bank eventually needs to replace an external LLM with a self-hosted one. Since reasoning is isolated in its own layer, this becomes nothing more than a routing configuration change inside L3 — no tool integrations are touched, and no prompts need rewriting.

If you skip this: every new use case turns into an edit of one bloated, tangled file. Swapping models becomes impractical. Nobody can say with confidence where the audit logic actually lives.

Takeaway: layers exist to mark where change is allowed to happen. Designing them well means designing the seams of the system, not just its parts.

Pillar 2 — Physical Architecture: Why Sovereign Deployment Is Feasible

The question to answer: where does the system physically run, and what — if anything — is permitted to cross outside your own boundary?

"Sovereign" in this context means models, data, embeddings, and execution traces all stay inside infrastructure you control, with a single, logged, filtered gateway serving as the only path to the outside world.

Why does this option exist now, when it wasn't realistic a few years back?

  1. Open-weight models have closed the gap. Models such as Llama 3.x, Qwen 2.5, and Mistral can now be self-hosted and still deliver production-quality results for classification, extraction, summarization, and RAG-based answering.
  2. Quantization makes it affordable. 4-bit quantization techniques let a single 80GB GPU serve a model in the 70B-parameter class, and smaller models need far less hardware still.
  3. Inference infrastructure is mature. vLLM provides continuous batching and strong throughput for production, Ollama is well suited to development work, and Kubernetes can orchestrate the runtime the same way it does any other service.
  4. The economics hold up. For a mid-size organization applying caching and batching, a modest GPU pool is enough to serve traffic at the scale of an internal assistant.

An important nuance: choosing sovereign-first doesn't mean external models are banned outright. It means any call that leaves the boundary is opt-in, scoped to a specific data classification, and routed through a single gateway — never triggered by a silent default setting. That's the reasoning behind drawing the egress gateway as one door: a single guarded door beats twenty unlocked windows.

Aurora in practice: everything sensitive — customer document embeddings, agent execution traces, PII — remains inside the boundary. The only traffic allowed to leave is anonymized market-rate lookups, and even those pass through the gateway, which logs every byte transmitted.

If you skip this: a default setting in some SaaS embedding tool quietly ships customer transcripts to a third-party vendor. Your observability platform ends up storing PII-laden traces on servers outside the country. The security review fails — and the project fails along with it.

Takeaway: the system boundary is a decision you have to make deliberately. If you don't make it explicitly, a vendor's default configuration will end up making it for you.

Pillar 3 — The C4 Model: Getting Documentation Right

The question: How do you document a system so each audience sees exactly the level of detail they need?

The C4 model, created by Simon Brown, gives you four zoom levels — think of it like panning and zooming on a map.

Why does C4 fit agentic systems so well?

  1. Agentic systems are naturally confusing. Asking "where does the agent actually live?" doesn't have a clean answer. C4 forces you to be precise: an agent isn't a single box on a diagram — it's a collection of containers (the runtime, a gateway, various stores) that exchange messages. C4 surfaces those exchanges instead of hiding them.
  2. No single diagram satisfies three different readers. A regulator wants the Context view — what touches customer data. A security reviewer wants the Container view — which process actually holds credentials. An engineer wants Components. C4 hands each of them their own zoom level, so nobody has to argue about which shapes belong on whose diagram.
  3. Treating diagrams as code keeps documentation alive. When diagrams live in Structurizr, Mermaid, or PlantUML, get committed to the repository, and go through pull-request review, they change alongside the code itself — rather than fossilizing in a slide deck nobody has touched since the last reorg.
  4. The fourth zoom level is optional, not mandatory. Reserve it for the small slice of logic — maybe 5% — that's genuinely intricate enough to need it.

Aurora in practice: When a regulator asks precisely which components can touch customer PII, Aurora can answer within an afternoon. The team shows the Container diagram annotated with the zone labels introduced in Pillar 4, plus the Component diagram for the agent runtime — both generated straight from the current repository state, versioned alongside the code that produced them.

Without this discipline: new hires end up reverse-engineering the architecture from source code. Auditors get handed a 60-slide deck that's 14 months out of date. Every architectural disagreement degenerates into a debate about rectangles on a whiteboard.

Takeaway: documentation functions as the interface between your architecture and every human who has to trust it. C4 turns that interface into something versioned and reviewable, instead of a static artifact.

Pillar 4 — Zero Trust Networking: Why Five Zones, Specifically

The question: Once something gets compromised — and eventually something will — how do you contain the damage?

Zero trust means granting no implicit trust anywhere: every single call gets authenticated (via mTLS and workload identity), authorized through a policy check, and encrypted, even for traffic that never leaves your own network. For an agentic platform, the correct segmentation splits into five zones:

Why does the count land on exactly five?

Because each boundary has to separate a genuinely distinct trust level — and agents introduce a trust level that traditional architectures simply never had to account for:

  1. Z1, the Edge — where untrusted traffic first arrives. It's under constant attack, so you assume it's already compromised.
  2. Z2, the Application layer — serves end users directly. Semi-trusted.
  3. Z3, the Agent zone — the risky newcomer. Agents invoke arbitrary tools, consume untrusted content pulled from the web (opening the door to prompt injection), and generate output that's only semi-trusted at best. Folding Z3 into Z2 would let an agent's tool calls inherit the same trust level as a logged-in user — a dangerous outcome. Giving agents their own zone means their credentials are scoped strictly to acting as an agent, nothing broader.
  4. Z4, the Data zone — where the crown jewels sit. The agent zone can only reach this data by going through the hub, with per-tool access scopes — direct access is never permitted.
  5. Z5, Management — secrets and CI/CD pipelines are the keys to everything. A deployment pipeline must never share network space with a path that handles live requests.

Fewer than five zones would collapse boundaries that separate genuinely different trust levels. More than five would just add extra walls without introducing any new trust boundary. Five is the precise right number.

Aurora in practice: an attacker injects a prompt via a compromised web page, attempting to trick the research sub-agent into pulling HR salary records. The zone policy blocks the Z3-to-HR path outright, since that spoke's scope simply doesn't include HR systems. The hub logs the attempt, and the attacker walks away with nothing but public web data. The agent got manipulated; the bank's data stayed untouched.

Without this segmentation: a single leaked connector API key would hand an attacker — or a rogue agent — an unobstructed path straight into the entire data layer.

Takeaway: agents dramatically increase the risk of lateral movement across a network. Proper zoning turns a compromised agent from a breach headline into a single logged event.

Pillar 5 — Hub-and-Spoke Integration: The Right Pattern for Agents

The question: how can agents connect to 20-plus enterprise systems without turning the integration layer into unmanageable spaghetti?

The answer is a single Integration Hub surrounded by certified spokes.

Why does this matter especially for agents? Look at the arithmetic. Connecting everything directly gives you 10 systems times 8 agents, or 80 separate integrations. Route everything through a hub instead, and you need only 10 spokes plus 8 agent connections — 18 links total.

Every direct point-to-point link is a spot where credentials end up hardcoded, logging gets forgotten, and behavior quietly diverges from the rest of the system. Multiply that by 80 connections and you've created 80 places an auditor can't fully see into. Agents make this worse, not better, because each new agent tends to want access to everything.

Centralizing through a hub gives you control over four things that matter a great deal:

1. Auth brokering — the hub stores the actual Salesforce credentials, while agents only carry a scoped, revocable hub token. Revoke one token and you've contained one agent, nothing more. 2. Schema translation — the word "customer" can mean three different things depending on whether you're looking at SAP, the CRM, or the support desk. The hub reconciles that once, instead of forcing eight separate agent codebases to do it independently. 3. Reliability — rate limiting and circuit breakers at the hub stop one unstable spoke from triggering a cascade of retries across a whole swarm of agents. 4. A single audit chokepoint — one consistent log format, one place to answer the question "which agent touched which record, when, and under what scope?"

An added benefit is that MCP-style tool servers let spokes become pluggable, standardized components instead of one-off integration code.

How this plays out at Aurora: bringing ServiceNow online as system #21 means building one spoke. From the next day forward, every agent can use it under the same authentication model, the same rate limits, and the same audit trail as the other 20 systems. Doing this point-to-point would have meant eight separate integration projects and eight separate credential handoffs.

Without this pattern: every agent ends up holding its own copy of the Salesforce password. Nobody can trace which agent modified a given customer record. Adding a new tool takes a full quarter of engineering work.

Takeaway: the hub does for tools what the supervisor does for agents — a single, fully instrumented entry point.

Pillar 6 — Data Architecture: Why You Need Distinct Tiers

The question: how should data be structured so that answers can be reproduced, records can be deleted on demand, and the whole pipeline stays governable?

The answer is five tiers, arranged as a pipeline:

T0 — Source systems. These are the systems of record. You don't own them, and they change on their own schedule, without warning. T1 — Raw landing zone. Write-once copies of everything as it's ingested. This is the anchor point for any rebuild, never edited or deleted except under an explicit retention policy. T2 — Curated data. Cleaned, deduplicated, chunked, tagged for PII, and enriched with lineage identifiers. T3 — Serving layer. Vector indexes, knowledge graphs, semantic caches — all rebuildable artifacts that can be regenerated from T2 whenever needed. T4 — Agent-generated data. Conversation logs, memories, traces, and produced outputs. This tier is append-only, rarely planned for in advance, and often contains the most sensitive material in the entire system.

Why five tiers specifically?

If this resembles the familiar medallion architecture — bronze, silver, gold — that's intentional; tiers T1 through T3 are exactly that well-established pattern. What the agentic context adds are the two tiers at either end: an explicit boundary at the source (T0, because ingestion contracts need to be spelled out) and a tier for agent output (T4, because what agents produce is data too, with its own retention, privacy, and audit requirements).

Structuring data into tiers converts two otherwise painful problems into routine work:

1. Reproducibility. Instead of "we changed the chunking strategy and now the answers are different" turning into a crisis, you simply rebuild T3 from T2 overnight. If a model gets corrupted, you regenerate T2 from T1. You never need to re-crawl the original source systems. 2. Deletion. When a customer invokes their right to erasure under GDPR, explicit lineage means the deletion request cascades deterministically through T1, T2, T3, and T4 by identifier — no manual digging required.

The rule underlying all of this: a vector index is a cache, never a source of truth.

How this plays out at Aurora: QA finds that the chunking logic had been silently dropping table rows. Aurora re-embeds two million documents from T2 overnight using the corrected chunker, with no need to re-crawl any source system and no panic over missing history. A month later, the team can reconstruct and compare how a given question would have been answered before and after the fix.

Without tiering: the vector store becomes the only copy of the data that exists. Deletions at the source never propagate downstream. A question like "what did the assistant tell this customer back in March?" simply can't be answered.

Takeaway: design your data architecture around the rebuild you will eventually need, and the deletion you are legally obligated to perform.

Pillar 7 — Agentic Design: Why a Supervisor with Sub-Agents Beats a Monolith

The question here: how should you structure the "society" of agents that make up your system?

The pattern that has proven itself in production is orchestrator-worker: a single Supervisor holds the overall goal, and a set of Sub-Agents each handle a narrow, specialized task.

Why does splitting responsibilities beat building one giant agent with fifty tools bolted on?

1. Context gets diluted fast. When one agent has to juggle fifty tools and an open-ended goal, its performance drops in measurable ways — wrong tool choices, forgotten constraints, lost thread of the task. A specialist that owns five tools and a tight scope is far more dependable. 2. You can actually test it. There's no meaningful way to unit-test a sprawling mega-prompt. But you can build a dedicated eval suite for each sub-agent — say 200 test cases for a Researcher and 50 for a Writer. That turns agent regression testing into something real and repeatable. 3. You get a single control point. The supervisor becomes the one place where you enforce budgets (a cap of 12 steps, or €0.40 per task), manage retries, trigger human escalation, and wrap every hand-off with guardrails. 4. Work runs in parallel and parts are swappable. Sub-agents can execute concurrently, and any one of them can be replaced — a stronger LLM, a cheaper one, or a fully deterministic retrieval step — without disturbing the rest of the system.

It's worth stressing that "sub-agent" doesn't mean "LLM all the way down." In Aurora's setup, the affordability calculator sub-agent contains no LLM at all — it's deterministic code dressed up with an agent-style interface. This foreshadows Pillar 8.

Aurora in practice: the loan-assistance flow splits into a Researcher (pulls policy documents), a Checker (verifies documents), a Calculator (computes affordability using plain code), and a Writer (drafts the customer-facing letter). Each of these is evaluated, versioned, and owned independently. If the Writer's tone scores dip after a model swap, you fix that one specialist instead of untangling a monolith.

Skip this pillar and: you end up shipping a seventy-tool mega-agent that occasionally calls the refund API twice, for reasons nobody can pin down — and everyone is too nervous to touch it.

Takeaway: splitting up the work isn't only about efficiency. In agentic systems, it's the actual source of reliability.

Pillar 8 — Determinism vs. Reasoning: The Decision That Matters Most

The question: exactly where in the system do you let probabilistic AI judgment take over, and where does behavior stay pinned down by code and policy?

This is the keystone pillar — every other one exists to support or enforce whatever answer you give here.

The guiding principle is simple:

LLMs propose. Deterministic systems dispose.

Use the LLM for what it excels at: classification, extraction, drafting, planning. Use deterministic code for what regulation and sound engineering require: validation, moving money, changing state, enforcing compliance.

In practice, this means treating your workflows as state machines, where the LLM only gets a vote at specific, enumerated decision points, and plain code handles everything else.

Why does this rank as the single most consequential design choice? Because it shapes everything else that follows:

1. Reliability — the paths that touch money contain no room for surprise behavior. 2. Auditability — because the decision forks are enumerable, you can list every single point where judgment was exercised. 3. Cost control — you avoid spending tokens on tasks a simple if-statement already handles for free. 4. Architectural coherence — the supervisor from Pillar 7 is where you inject this boundary, the hub from Pillar 5 enforces it at the tool layer, the zones from Pillar 4 contain any failures, and the evidence store from Pillar 9 proves after the fact what actually happened.

Aurora in practice — the refund flow:

  1. LLM, inside the reasoning zone: reads the customer's email and extracts structured fields — amount: €145, reason: damaged goods, sentiment: frustrated. This step is probabilistic, and that's acceptable, since it's only populating a form.
  2. Deterministic policy engine: amounts up to €200 get auto-approved; €200 to €1,000 trigger rule-based checks; anything above €1,000 requires human sign-off. The LLM never has the authority to move money — it can only propose a value, and the code alone decides what happens with it.

Both extremes here are dangerous, which is why you need to hold the middle ground:

Letting the LLM decide everything ("just let the agent handle it") is how you end up with a prompt-injected email authorizing a €50,000 refund. Letting rules decide everything means a system that can't even parse an ordinary email — effectively rolling back to 1995.

Takeaway: full LLM autonomy is a demo trick; full rule-based rigidity is the past. Production systems require a deliberate, documented map of exactly where each mode applies — and drawing that map correctly is the most consequential decision in designing the whole system.

Pillar 9 — Evidence-Binding / Citation: Why This Is Audit-Defensible

The question: How do you make every output defensible — months or even years after the fact, to an auditor who is actively looking for holes?

Every factual claim has to be tied back to its source evidence, and the entire decision trail must remain unchanged once recorded:

Why does this hold up under audit? Because it gives you three guarantees at once:

1. Hallucination gating. If there's no citation, there's no publication. When the answer-generation step can't attach a valid source, the output gets flagged or suppressed. This turns "just trust the model" into an enforceable, mechanical rule.

2. Full replay capability. If someone asks "why did the system respond this way on March 3rd?", you can reconstruct the exact sequence — the original question, the retrieved passages, the prompt version, the model version, the generated answer, and its citations. Instead of "we believe," you produce the actual record.

3. Root-cause clarity. When an output turns out to be wrong, you can pinpoint the type of failure immediately: was it a retrieval miss (the wrong evidence was pulled) or a reasoning miss (the right evidence was pulled but interpreted incorrectly)? These require entirely different fixes, and without evidence binding, there's no way to tell them apart.

Aurora in practice: The assistant answers a question about penalty terms by citing credit_policy_v12.pdf, page 14, sha256:9f2c…. Later, when policy version 13 is released, that earlier answer still reflects exactly what was accurate at the moment it was given, because the cited evidence is pinned by hash rather than re-fetched dynamically. The compliance reviewer can approve it because the whole chain is replayable, tamper-evident, and correctly time-stamped.

Skip this and: your only defense during an incident or audit becomes "the model said so." You lose the ability to separate a data quality issue from a reasoning failure. Regulators will label the system a black box — and black boxes get shut down.

Takeaway: if the system can't cite it, it doesn't get published.

How the Nine Pillars Interlock

These nine elements aren't a checklist of separate concerns — they form one coherent structure with a core:

Take any single pillar away and the rest starts to crack. Remove the hub-and-spoke layer (5) and determinism (8) can no longer be enforced at the tool-call level. Remove data tiering (6) and evidence binding (9) has nothing reliable left to reference. Remove the C4 documentation (3) and you lose the ability to even explain the remaining architecture during an audit. They only work as a set — either all nine hold, or the whole thing gives way.

What's coming in this series

Each following installment will be a complete deep dive: the guiding principle, an accompanying diagram, a worked example from the Aurora Bank scenario, specific technology choices, common anti-patterns to avoid, and a practical build checklist.

Final Thought

By 2026, having access to a capable model is no longer a differentiator — an API key is something anyone can obtain.

Architecture is what actually separates the systems that last. The teams that succeed in bringing agentic systems into regulated, high-stakes environments will be the ones who understood the real nature of the task: building a deterministic enterprise system that happens to have a probabilistic reasoning engine embedded inside it.

Nine pillars. Nine decisions. Get all of them right, together.

Coming next — Part 1: Logical Architecture, where the six-layer stack gets built layer by layer, the contract between each pair of layers gets defined explicitly, and the anti-patterns that turn agent codebases into unmaintainable messes get examined in detail.