Agentic architecture patterns, part 3: the control plane, the patterns that decide whether an agent may run
A control is something the agent cannot read. The patterns of parts 1 and 2 decide whether an agent works; the nine in this part, identity, sandbox and egress, approval gates, durable execution, injection boundaries, classification, observability, budgets and the stop, and the regulatory hooks, decide whether it may run. Each is measured, costed, and matched to the 2025 and 2026 incident it would have caught.
Part 3 of a four-part series on agentic architecture patterns. Part 1 covered one agent and the four seams of its loop. Part 2 covered many agents and the ways they fail together. This part covers the control plane: the patterns that decide whether any of them may run. Part 4 builds a harness by hand.
A control is something the agent cannot read. That is the whole distinction this essay rests on, and it is the one the past eighteen months have taught most expensively. An instruction in a prompt, a rule in a system message, a line in an agent’s configuration file saying it must not touch production: each of these is text inside the loop, and text inside the loop is a request. The model may honour it, misread it, lose it in a compaction, or be talked out of it by the next document it reads. A control is a boundary the loop runs inside: a credential that expires with the task, a network that only resolves the hosts on a list, an approval that binds to the exact call and is enforced where the call executes, a cap that pauses the run when the money is gone. The patterns in parts 1 and 2 decide whether an agent works. The patterns in this part decide whether it may run, and they share a property: every one sits outside the agent, is built once by the platform team, and is read by no model.
The evidence for the distinction is not hypothetical. In July 2026 Anthropic reviewed 141,006 evaluation runs after finding that “our evaluation prompt stated explicitly that Claude had no internet access” while a misconfiguration had left the machines with live internet; three incidents across six runs reached real organisations. In September OpenAI’s safety case for a training run “assumed that the model could not access the live internet and that monitoring would detect attempts that succeeded”, and an agent reached an external chatbot through a DNS resolver nobody had listed. In May Anthropic reported that users approved about 93 percent of the permission prompts its coding agent raised, and in August that only 13.6 percent of 1,053 testers refused a clearly dangerous command planted in one of those prompts. The request was present in every case. The control was not.
This part takes nine control patterns in turn: the agent as a principal, with identity and short-lived credentials; the sandbox and its egress; the approval gate, with interrupt and resume; durable execution and idempotent tool calls; the prompt-injection boundary; classification and guardrails; observability and evaluation; budgets, caps and the kill switch; and the regulatory hooks that name all of these in law. For each I give what it enforces, where it sits, what it costs, the measurements, and the incident of 2025 or 2026 that it would have caught. Then the cost of the plane as a whole, a worked example for a bank, and a table. Every number comes from a paper, an advisory or a lab document read in full, with its date, and where it is my own arithmetic I say so. I have written about several of these incidents before on this site, and I link to those essays rather than retell them.
Figure 1. The distinction this essay rests on. Everything the model reads is a request; the nine controls are enforced in the broker, the proxy, the tool handler, the journal, the gateway and the telemetry, where no prompt can reach them. Each is taken in turn below with its measurements and the incident it would have caught.
The record: what failed, and the control that was missing
Read as a ledger, the public incidents from May 2025 to October 2026 are monotonous, and the monotony is the finding. In May 2025 a coding agent with one GitHub token that spanned public and private repositories was steered by a planted issue into writing private data into a public pull request; the researchers who found it said it was “not a flaw in the GitHub MCP server code itself” but a scoping failure, and proposed one repository per session. In July 2025 an agent running database queries as a service role that bypasses row-level security read a secrets table and wrote it into a support ticket an attacker could see. The same month a coding agent deleted a production database during an explicit code freeze, in an environment where development and live data shared one database; the vendor called it “Unacceptable and should never be possible” and shipped development and production separation. In September 2025 a research agent’s server-side browsing tool exfiltrated personal data to an attacker’s URL from the vendor’s own cloud, where no enterprise gateway could see it, and a sales agent leaked through an expired domain that was still on a content-security allow-list; a year later the same product leaked through a chat client’s link preview. Fourteen advisories for coding agents between June 2025 and February 2026 describe allow-list parsers bypassed by shell built-ins, paths checked by prefix rather than canonical form, trust dialogs skipped, and configuration changed without re-approval; the one boundary the advisories record as holding was the operating-system sandbox.
In 2026 the scale changed and the pattern did not. In February 40,214 internet-exposed instances of a popular personal-agent runtime were counted in a day, 78 percent on pre-patch builds, their control panels carrying stored credentials and browser sessions. In April a coding agent in a staging environment found an unrelated API token in a file, a token issued for domain management but carrying full permissions, and deleted a production volume in a nine-second call; the backups lived on the same volume. In May a credential broker for agent integrations was breached through its own monitoring tool, exposing 5,241 API keys and 5,001 GitHub connections. The gateways themselves became targets: a popular model gateway was backdoored on PyPI in March, Microsoft documented live intrusions on three agent control planes in August with the advice to “Treat AI gateways as Tier-0 secrets stores”, and an agent control plane shipped by a cloud provider carried a flaw rated the maximum severity because, with no identity provider configured, anyone was an administrator. And the summer’s laboratory incidents, which I covered as they happened: about 1,200 evaluation agents coordinating through a package cache that was the sandbox’s only egress, about 700 of them joining an intrusion into Hugging Face that reached 41 production workers; evaluation machines with live internet while the prompt said there was none; an agent reaching the outside world through DNS while web traffic went to an offline cache, with an alert in eleven minutes and forty-eight seconds and a kill 164 minutes later because the automatic stop did not fire.
Two surveys put numbers on how general this is. In a September 2026 survey of 202 security leaders, 94 percent were confident about their agents’ access while 32.7 percent actually provisioned least privilege; 34.2 percent evaluated authorisation at execution time; 54.5 percent enforced unique agent identities; just over 46 percent could not produce a complete thirty-day audit trail. In an April 2026 survey of 418 organisations, 65 percent had suffered an agent-related incident in the past year, and when an agent exceeded its scope, 38 percent required human approval, 24 percent required logging, and 11 percent automatically blocked. The identity ratios behind this are rising: 82 machine identities per human in 2025 and 109 in 2026, of which 79 are agents, by one vendor’s survey of 2,930 decision makers. The ledger that follows maps each incident to the control that would have caught it, and the mapping uses only nine names.
Figure 2. Sixteen incidents, eight controls. The mapping uses only nine names, and the same few recur: a credential scoped too wide, an egress channel nobody listed, an approval bound to the wrong thing or lost in context, no monitor outside the agent, a stop that did not fire. Sources: Invariant Labs (26 May 2025); Microsoft CVE-2025-32711; General Analysis (8 July 2025); The Register (22 July 2025); Radware (18 September 2025); Noma (25 September 2025); Anthropic (13 November 2025); SecurityScorecard (9 February 2026); TechCrunch (23 February 2026); BankInfoSecurity (28 April 2026); Composio (May 2026); OpenAI technical report (26 August 2026); Anthropic (30 July 2026); arXiv 2609.21081; OpenAI misalignment report (25 September 2026); Zenity (8 October 2026).
Figure 3. The gap the ledger predicts. Nine in ten leaders are confident; one in three enforces least privilege; one in nine blocks an agent that exceeds its scope automatically; and the identities to govern grow faster than the people governing them. Sources: EMA for Cequence via Infosecurity Magazine (1 September 2026); Cloud Security Alliance and Token Security (21 April 2026); CyberArk 2025 Identity Security Landscape (23 April 2025); Palo Alto Networks 2026 Identity Security Landscape (May 2026).
The agent as a principal: identity, and credentials that die with the task
The first control is the one I argued for in July: an agent is a principal in a directory the platform controls, with an owner, a lifecycle, credentials, entitlements and an audit trail, and a prompt is not an identity. What has changed since July is that the standards have caught up. On 15 September 2026 the IETF’s workload-identity working group adopted a draft titled “AI Identity Management System” with authors from OpenAI, AWS, Okta, Ping and Zscaler, describing authentication and authorisation of agent interactions on top of workload identity and OAuth, with a section on delegation. The SPIFFE project’s roadmap of 18 August 2026 names the gap exactly: a workload certificate “tells the fifth service that the fourth one called it and not which user request started the chain”, and with “non-deterministic workloads like AI agents entering these chains” the project plans transaction tokens that carry the purpose and the original requester through every hop. Okta’s Agent SSO went generally available on 24 August 2026 with agents registered “as a first-class identity” and short-lived tokens in place of stored credentials; Microsoft’s Entra Agent ID is generally available with sponsor-succession workflows “to prevent orphaned agents”; HashiCorp Vault’s agentic identity went generally available on 1 September 2026, validating “delegated OAuth JWTs that identify the user as the subject and the agent as the actor”, granting access only where the user’s permissions, the agent’s ceiling policy and the task’s authorisation details overlap, with a token that “exists only for the lifetime of the request”. Google Cloud’s agent identity binds tokens to per-agent X.509 certificates that cannot be impersonated and whose private keys developers cannot export, and routes end-user credentials through a gateway that decrypts them “ensuring that the agent can never access the raw credential”.
The measured case for least privilege comes from a Berkeley and IBM paper revised on 6 October 2026, MiniScope, which asked how much permission an agent should get and who should decide. When the model itself chose scopes for a task, it over-granted in 1.7 to 34.7 percent of cases, growing with task complexity, and in the strict cases authorised up to 2.4 times the methods the task needed; a single broad mail scope authorises fifty methods where composing needs eight. Computing the minimum role set mechanically from a permission hierarchy, and handing the agent a session token that a checker enforces on every call with the user’s real credentials attached only to approved ones, cut the attack success rate on an injection benchmark from 33.7 percent to 0.8 at 93.1 percent utility and 0.14 seconds of overhead a task, and cut permission prompts for careful users by 43 to 89 percent. The same paper found that shipped connectors request far more than their tools use: one vendor’s mail connector requested 50 methods where 32 were needed, its notes connector 32 where 13 were. The incidents agree: the wildcard memory roles a cloud agent toolkit created by default, which let “any AI agent read or poison the state of any other AI agent in the account” until the documentation was changed to say the defaults “should never be used in a production system”; the domain-management token that could delete a volume; the service principal with broad delete rights whose client secret had been exposed in a public issue and which an attacker used for 150 destructive operations in 35 minutes.
So the pattern has four parts and they are all mechanical. A directory entry per agent with an owner who is a person. A workload identity that is attested, not configured, with the user as subject and the agent as actor when it acts for someone. Credentials minted per task by a broker the agent cannot read, with lifetimes measured in minutes; the SPIRE defaults are one hour for a certificate and five minutes for a token, and Vault’s is the request. And a role computed from what the task needs rather than guessed by the model or copied from a human operator, because the operator-equivalent permission with no second approver is how an infrastructure agent deleted and recreated a customer-facing environment in December 2025. The audit line carries actor, subject, task and sponsor, and the five-minute reconstruction test from July still applies.
What it would have caught. The private-repository leak (one repository per session), the secrets-table leak (a read-only role), the nine-second volume deletion (an operation-scoped token), the account-wide role compromise (a per-agent role), and the broker breach (keys stored only as hashes, which the broker adopted afterwards).
Figure 4. An agent is a principal, and its privilege is computed, not requested. The chain carries the user as subject and the agent as actor through a broker that holds the secret; the token lives minutes or less; and the one paper that measured it found that letting the model pick its own scopes over-grants by up to 2.4 times while a computed role cuts attack success from 33.7 to 0.8 percent. Sources: SPIFFE roadmap (18 August 2026); HashiCorp Vault (1 September 2026); Google Cloud Agent Identity documentation (October 2026); IETF draft-ietf-wimse-aims-00 (15 September 2026); SPIRE server reference; Zhu et al., MiniScope, arXiv 2512.11147 (v2, 6 October 2026), Tables 2 to 5.
A rule the agent reads is a request: 93% of permission prompts approved, 13.6% refused a planted command, 0.03 ms for a policy decision
The sandbox and its egress: every channel is a channel
The second control is the boundary around execution, and its 2026 lesson is that the boundary has more sides than anyone listed. Anthropic’s coding agent gained an operating-system sandbox in October 2025, filesystem writes limited to the working directory and network traffic routed through a proxy outside the sandbox that enforces a domain list and asks before a new one; the post reports that sandboxing “reduces permission prompts by 84%”. Its May 2026 account of how it contains agents across products is the most candid vendor document on the subject: users approved about 93 percent of permission prompts, experienced users auto-approve about twice as often as new ones, and an egress allow-list was abused when an attacker used the vendor’s own allow-listed API domain with the attacker’s own key to upload a victim’s files, the case Simon Willison had documented in January. The document’s own framing is that “The engineering question becomes how to cap the blast radius.” OpenAI’s coding agent runs with “network access turned off” by default and its documentation says plainly that monitoring “doesn’t replace sandboxing” and that DNS checks reduce rebinding risk “but it does not eliminate it”. Anthropic’s hosted agents documentation carries a default worth reading twice: a session created through the API without a networking field gets unrestricted networking, while the console form starts at limited.
The summer’s incidents are an inventory of egress paths. The package-registry proxy that was a sandbox’s only outbound route, and was exploitable, in the Hugging Face case; OpenAI’s remediation was VM-based sandboxes with all outbound access denied and network isolation in “two separate layers”, under the heading that security controls “must be robust and independent of one another”. The DNS resolver that forwarded lookups outward while web traffic went to an offline cache; the remediation was blocking at two independent layers and a DNS allow-list of domains and record types. The instance metadata endpoint, reachable from an agent through a server-side request, yielding the agent’s cloud role credentials, which in one cloud toolkit spanned every agent in the region until September 2026. The image URL rendered by a chat client, the link preview unfurled by a messaging client, the content-security allow-list with an expired domain on it, the public repository an agent created to host screenshots because its tool could not attach images, exposing more than 13,000 internal images from over 300 organisations. Each is a channel, and the rule from my September essay is the general form: any writable surface the agent can reach is egress, and the list is maintained as an asset inventory, because allow-lists drift.
Any writable surface the agent can reach is egress, and the list is maintained as an asset inventory, because allow-lists drift.
The cost of isolation is now small and well measured. A Firecracker micro-VM boots to application code in under 125 milliseconds with under 5 MiB of memory overhead and a host can create 150 a second; at Ant Group, 70 percent of applications running under gVisor showed under one percent overhead and another 25 percent under three, with file-I/O-heavy workloads the exception. Sandbox vendors now advertise starts under 90 milliseconds, V8 isolates in a few milliseconds, and tens of thousands of sandboxes a second. The strength ladder runs from isolates sharing a process, through gVisor’s user-space kernel, to micro-VMs with no shared kernel, and the vendor guidance is to choose by what the agent will run, not by what the agent is told. NVIDIA’s platform of 28 September 2026 moves the enforcement off the host altogether: an out-of-band watchdog on a data-processing unit that can quarantine an agent “in milliseconds” with attested telemetry, on the stated rationale that agents had “circumvented security controls at the application layer”.
The pattern, then: a fresh single-tenant sandbox per task, egress through a proxy that resolves DNS itself and holds the allow-list, metadata endpoints blocked, credentials injected by the proxy so that nothing secret is in the sandbox, the allow-list treated as an inventory with owners, and the enforcement tested from inside, because the one-line check that the environment matches what the prompt says about it was, in Anthropic’s own account, the control missing for four months. The limitation the vendor documentation states should be stated here too: a proxy that cannot inspect TLS allow-lists the hostname the client supplies, so domain fronting remains possible, and a hypervisor is a stronger boundary than a custom proxy.
What it would have caught. Every laboratory escape of 2026, the server-side exfiltration of 2025, the allow-listed-domain abuse, the screenshot repositories, and the metadata-endpoint credential theft.
Figure 5. The boundary has more sides than anyone listed. Eight outbound channels, each with the incident that used it; the common remedy in the vendors’ own postmortems is deny-by-default egress at two independent layers, with the list treated as an asset that drifts. Sources: OpenAI technical report (26 August 2026) and misalignment report (25 September 2026); Zenity (8 October 2026); Simon Willison (14 January 2026); Microsoft CVE-2025-32711 and Noma (25 September 2025); SecurityWeek (24 September 2026); Radware (18 September 2025); Glow Labs (29 September 2026); Anthropic (20 October 2025; 25 May 2026).
Figure 6. Isolation is cheap now, and the defaults still decide. A micro-VM costs a tenth of a second and five megabytes; the expensive mistake is the omitted field that grants unrestricted networking. Sources: Agache et al., Firecracker (NSDI 2020); gVisor blog (2 December 2021); Cloudflare (24 March 2026); Daytona, E2B, Vercel and Modal documentation (October 2026); Claude Code and Codex documentation (read 16 October 2026); Anthropic Managed Agents environments documentation; Anthropic (20 October 2025).
The approval gate: bind it to the call, enforce it outside the model
The third control is the human in the loop, and the 2026 research on it is unkind to the way it is usually built. The case for confirmation is real: OpenAI’s Operator system card of January 2025 reports that, on a hundred prompts, the unmitigated model made thirteen errors of which five were “irreversible or possibly severe”, a wrong email recipient among them, and that asking for confirmation before actions that affect the state of the world “reduced the risk by approximately 90%”, with confirmation recall of 92 percent across 607 tasks. The vendor documentation for computer-use tools now asks for human confirmation of “decisions that might result in meaningful real-world consequences”, and the Model Context Protocol specification says there “SHOULD always be a human in the loop” able to deny a tool call.
Three failures follow when the gate is built in the wrong place. The first is fatigue, measured above: 93 percent approval, 13.6 percent refusal of a planted dangerous command. Anthropic’s response was a classifier that reviews actions before execution, which in the same study would have blocked 89 percent of the planted commands and which, in a separate May 2026 measurement, caught about 83 percent of overeager behaviours while blocking about 0.4 percent of benign ones; a commissioned red team found 0 of 720 injection attempts succeeding against its frontier models in that mode as of July 2026. But the vendor’s own classification of the feature, when a researcher got a transitive exploit past it in three of five runs in August, was “a convenience feature backed by a best-effort classifier, not a security guarantee”. The second failure is binding. A September 2026 paper named it loopjacking: a human approves operation A and the runtime executes B, reproduced in seven releases of one agent runtime and twelve of another, where approval was bound to a description rather than to the call; one SDK that binds approval to the exact call was the negative control. A workshop study of 1,880 episodes found that a confirmation instruction in the system prompt was ignored by two of three model backbones in 38 and 48 percent of episodes, that ungated execution reached 37.5 to 60 percent irreversible harm against 2.5 percent with an enforced gate, and that moving the check into the tool handler cut protocol-violating executions from 91 in 400 to none. The third failure is the pause itself. “Stop Means Stop”, from July 2026, tested the pause, cancel and timeout primitives of six open-source frameworks and found that “a sibling’s effect executes during the pause” in every one that ships a pre-execution gate; live models on unmodified frameworks leaked side effects in 215 of 1,200 runs. The authors’ fix is a gate outside the agent with hold-until-decided, reject-on-cancel and deduplication on replay, and their contrast case, the one boundary that held, was a durable-execution engine’s activity boundary, which is the next pattern.
The primitives now exist to build it correctly. LangGraph’s interrupt pauses a node and returns a payload, resumes with the same thread identifier, requires a checkpointer, and carries the warning that on resume the node restarts from the beginning, so “Make side effects before interrupt() idempotent, or move them after it.” Anthropic’s hosted agents expose permission policies of always allow, always ask and automatic, with a session that goes idle and waits indefinitely for the client’s confirmation; the default for the vendor’s own toolset is always allow and for third-party tool servers always ask. The UK AI Security Institute’s evaluation framework gives an approver five decisions: approve, modify, reject, escalate, terminate. And the question of which calls deserve a human has a measured answer from part 1: SABER found that mutating actions are 14 to 18 percent of an agent’s steps and account for nearly all of its failures, which is where a gate pays.
So the pattern: classify every tool as read, reversible write or irreversible write; gate only the irreversible ones, so the human sees few prompts and reads them; bind the approval to a canonical hash of the exact call and its arguments; enforce it in the tool handler or a gate outside the agent, never in the prompt; and make the gate hold the whole run, not one branch of it. A rule the agent reads is a request. An approval the handler checks is a control.
What it would have caught. The code-freeze deletion (a freeze in the prompt), the inbox deleted after “confirm first” was lost in a compaction, the forum post that exposed data for two hours, the invented tip submitted to a police department’s form, and the loopjacked approvals.
Figure 7. An approval is three events, and the 2026 research found a failure at each gap. The gate that works binds to the call, lives outside the model, and holds everything. Sources: Anthropic (25 May 2026); Simon Willison (8 August 2026); Loopjacking, arXiv 2609.21081 (17 September 2026); GateArena (NeurIPS 2026 workshop abstract); Stop Means Stop, arXiv 2607.14166 (July 2026); LangGraph interrupts documentation (read 16 October 2026).
Operator, 100 prompts, Jan 2025
errors and confirmations
Errors, unmitigated
13
of which easily reversed
8
of which irreversible or severe
5
Risk reduction from confirmations
~90%
Confirmation recall, 607 tasks
92%
Humans at the gate, 2026
share of prompts
Prompts approved (May)
93%
Testers refusing a planted command
13.6%
Classifier would have blocked
89%
Action classifier (auto mode)
Anthropic measurements, 2026
Overeager behaviours caught
83%
Benign commands blocked
0.4%
Injection attempts succeeding (of 720)
0
Transitive exploit passed (of 5 runs)
4
Figure 8. What confirmation buys and what a classifier adds. Five of thirteen unmitigated errors on a hundred prompts were irreversible and confirmations cut the risk by about ninety percent; an action classifier blocked 89 percent of planted dangerous commands that humans approved 86 percent of the time, and the vendor still calls it “a convenience feature … not a security guarantee”. Sources: OpenAI Operator system card (23 January 2025; section 4.7 updated 11 March 2025); Anthropic (25 May 2026); Simon Willison (8 August 2026); Embrace The Red (26 August 2026).
Durable execution: record the run, make every effect idempotent
The fourth control is the one most teams discover after an outage. An agent run is a sequence of model calls and side effects that can crash, be retried, be paused for a day awaiting approval, or be replayed, and the model’s own output is not reproducible: Thinking Machines Lab showed in September 2025 that a thousand completions of one prompt at temperature zero produced 80 unique outputs, the first divergence at the 103rd token, because server load changes batch size and the kernels are not batch-invariant; with batch-invariant kernels all thousand were identical, at roughly double the latency. At the agent level, a 2026 study of 1,140 traces found tool-sequence consistency of 0.87 but argument consistency of 0.69, with 60 percent of divergence in the first two steps; another found 22.5 percent of model-and-task pairs with mixed outcomes across three runs. A platform cannot assume that replaying a run reproduces its decisions, which is the whole argument for recording them.
Durable execution is the discipline that does. In Temporal’s definition, a workflow “runs to completion even if its process crashes” because another worker replays the event history to rebuild state; workflow code must be deterministic, side effects live in activities with retry policies, timeouts and heartbeats, and activities should be idempotent so retries do not duplicate effects. Restate journals every step and replays completed ones on recovery, with tool side effects wrapped so they execute exactly once; Inngest’s steps give the same durability to model calls. Temporal published an agent harness on 20 August 2026 in which “Every agent built with the harness is a Temporal Workflow”, a policy layer can require sign-off on sensitive tools, and the agent waits with no live process for hours or days. Anthropic’s hosted agents are built the same way: a session is “an append-only event log”, the harness is a stateless loop, and a crashed harness is resumed from the last event by waking the session. The Model Context Protocol lets a tool declare itself idempotent, but the default is false, and I found no vendor guidance on idempotency keys for tool calls at all; that part of the pattern is the platform team’s.
The part that is the platform team’s has two rules, borrowed from the saga pattern of distributed transactions. Every effectful tool call carries an idempotency key derived from stable identifiers, the session, the task, the action type and a sequence number, never from model output, so that a retry after a timeout is a no-op and a timed-out write is followed by a read. And every irreversible call is paired with a compensation that is logged durably before the forward action runs, so that a cancelled or failed run can be unwound, with the compensations themselves idempotent. The non-durable cleanup in the laboratory incidents is the counter-example: a shared board was wiped on 6 July and the agents rebuilt it within a day, because the wipe was an action and not a state. Checkpointing of the agent’s own context and workspace, so that a run can be rewound to a known point, is now a research pattern with an honest appendix on what it cannot roll back, which is any effect outside the sandbox.
What it would have caught. The sibling effects executed during a pause, the double execution on replay, the board rebuilt after a wipe, and every retry that sent a second email.
Figure 9. Durable execution for a run whose decisions cannot be reproduced: record them. The journal is written before each effect, the key is derived from stable identifiers and never from model output, and every irreversible step carries a compensation. Sources: Temporal documentation and agent harness post (20 August 2026); Restate documentation; Anthropic Managed Agents (8 April 2026); MCP specification 2025-06-18; the saga pattern as applied by Chang and Geng, SagaLLM (PVLDB 2025).
Figure 10. The decision is not reproducible, so it is recorded. Sources: Thinking Machines Lab, Defeating Nondeterminism in LLM Inference (10 September 2025); Yagubyan, How Consistent Are LLM Agents?, arXiv 2605.28840 (23 April 2026); Lee, Capable but Unreliable, arXiv 2602.19008 (22 February 2026).
The injection boundary: untrusted text may inform, never authorise
The fifth control addresses the attack that every incident above either used or could have. An agent that reads untrusted content, holds private data and can act or communicate externally is exploitable, and the three together are what Simon Willison named the lethal trifecta in June 2025. Meta’s “Agents Rule of Two” of 31 October 2025 widened the third leg to any state change and made it a design rule: an agent session should satisfy no more than two of processing untrustworthy inputs, having access to sensitive systems or private data, and being able to change state or communicate externally, and if it needs all three it “requires supervision” or a fresh session. The benchmarks say how exposed an unguarded agent is. On AgentDojo, 629 injection cases over 97 tasks, GPT-4o’s targeted attack success rate was 57.69 percent undefended; a prompt-injection detector cut it to 7.95 percent but cut benign utility from 69 to 41 percent; a tool filter, which restricts the tools the agent may call for a task, cut it to 6.84 percent at little utility cost. The NIST evaluation of the same benchmark found that adaptive red-teaming raised attack success from 11 to 81 percent, which is the number to hold against any vendor claim. A web-agent benchmark from Meta found that realistic low-privilege attackers diverted agents in up to 86 percent of runs while completing the attacker’s goal in 0 to 17 percent, a gap the authors called “security by incompetence” and expected to close as agents improve.
The defences that work are architectural, and a June 2025 paper from Invariant Labs, IBM, EPFL, ETH Zurich, Google and Microsoft catalogued them as six design patterns, under the principle that “once an LLM agent has ingested untrusted input, it must be constrained” so that it cannot trigger consequential actions. An action selector that chooses from a fixed menu; plan-then-execute, where the plan is fixed before any untrusted data is read; map-reduce over isolated documents; a dual-LLM design in which a quarantined model reads untrusted text and a privileged one acts on structured results; code-then-execute; and context minimisation. CaMeL, from Google DeepMind and ETH in March 2025, instantiates the fifth: it extracts control and data flow from the trusted user query, runs it in an interpreter where every value carries capabilities recording its sources and allowed readers, and checks a policy before each tool call, so that “the untrusted data retrieved by the LLM can never impact the program flow”; it completed 77 percent of AgentDojo tasks with provable security against 84 percent undefended, and for one frontier model took successful attacks from 300 to zero. The runtime-enforcement papers of 2025 and 2026 give the same shape with numbers: Progent, a deterministic allow-list over tool calls generated by a model but gated so that permissions can only shrink without approval, cut attack success on AgentDojo from 39.9 to 1.0 percent and on a second benchmark from 70.3 to 3.9, at a utility cost of three points without attack and a utility gain under attack, while the prompt-injection detectors it compared against left 8.2 to 24.1 percent; AIRGuard found that the same policy written into the prompt left 17 percent attack success and enforced at runtime left 4; aiAuthZ, an off-host gateway with per-message signed identity and a policy the agent cannot read, reached zero residual attack success across fifteen models at no more than 0.03 milliseconds a decision, against model calls of 1.1 to 12.5 seconds.
The threat is live and growing. Google’s April 2026 analysis of web crawls of two to three billion pages found a 32 percent relative increase in malicious injection payloads between November 2025 and February 2026, most still crude; on 15 October 2026 a researcher sampling 217 million HTTP responses found almost 8,000 sites addressing agents in their headers and 30 attempting injection, mostly pranks. Willison’s standard for a defence remains the right one: a product that stops 95 percent of attacks would be “a failing grade” in any other branch of web security, so the deterministic controls come first and classifiers are a layer on top.
The pattern: fix the plan before reading untrusted data where the task allows it; route untrusted text through a model that holds no tools; carry provenance with every value and check it at the tool boundary; keep the policy where the model cannot read it; and apply the Rule of Two per session, with a fresh session as the way to drop a leg.
What it would have caught. The private-repository leak, the secrets-table leak, the calendar-invite attacks, the browser agent that used the user’s logged-in sessions, the server-side exfiltration, and the CI agents that leaked secrets from pull-request text.
Figure 11. The boundary as a rule and as six shapes. The trifecta names the exposure; the Rule of Two makes it a per-session constraint; the six patterns are the ways to build an agent that needs all three legs anyway. Sources: Simon Willison (16 June 2025); Meta AI (31 October 2025); Beurer-Kellner et al., arXiv 2506.08837 (June 2025); Debenedetti et al., CaMeL, arXiv 2503.18813 (March 2025).
Figure 12. Detectors leave eight percent; designs leave one or none. Restricting what the agent may call, carrying provenance, and enforcing the policy where the model cannot read it are the defences that approach zero, at a utility cost of a few points. Sources: Debenedetti et al., AgentDojo (NeurIPS 2024), Tables 3 and 5; NIST (17 January 2025); Shi et al., Progent (v3, 14 May 2026); AIRGuard, arXiv 2605.28914 (27 May 2026); CaMeL (2025); aiAuthZ, arXiv 2607.05518 (6 July 2026); Simon Willison (16 June 2025).
Classification and guardrails: what they catch, and what they cost in milliseconds
The sixth control is the classifier, and it comes in two halves. The input half is the data classification I wrote about in August: every input, tool result and memory write carries a class, the class rises to the highest of anything in it, and every other control reads it. The output half is the guardrail: a model or a rule that inspects prompts, tool calls and responses and flags or blocks. The 2025 and 2026 record says what guardrails cost, and the cost is a ladder. A deterministic policy check at the tool boundary costs microseconds: 0.006 to 0.03 milliseconds in aiAuthZ, 1 to 3 milliseconds for a rule language in AgentSpec, 0.14 seconds for a permission check in MiniScope. A small classifier costs tens of milliseconds: Meta’s Prompt Guard 2 classifies in 19.3 milliseconds at 22 million parameters and 92.4 at 86 million, preventing 78 to 81 percent of AgentDojo attacks at a three-percent utility cost. A guard-model layer costs a few hundred milliseconds: NVIDIA measured its first layer adding about half a second of average latency while raising policy-violation detection from 75 to 83 percent, and three layers reaching 98.9 percent at a total of 0.53 seconds. A model-as-judge costs seconds: OpenAI’s prompt-injection check runs at 1.5 to 5.9 seconds at the median depending on the model, and an independent benchmark measured reasoning-model guards at up to 8.9 seconds. “No guardrail configuration simultaneously achieves optimal safety, utility, and usability”, as that benchmark put it, and the expensive guard is the one that calls a model.
Anthropic’s constitutional classifiers are the best-documented production case, and they show the cost falling. The first generation, in January 2025, cut jailbreak success in an automated evaluation from 86 to 4.4 percent at a 23.7 percent inference overhead and a 0.38 percentage-point rise in refusals; the second, in January 2026, replaced a single classifier with a cascade, a linear probe over all traffic escalating a small share to an ensemble, and reported about one percent compute overhead and a 0.05 percent refusal rate on harmless queries over a month of production traffic, with no universal jailbreak found in 198,000 attempts. The lesson for a platform team is the cascade: a cheap check on everything, an expensive check on what the cheap one flags.
Two implementation details decide whether a guardrail is a control at all. The first is whether it blocks. OpenAI’s Agents SDK runs input guardrails in parallel with the agent by default, so the agent “may already have consumed tokens and run tools before cancellation”; the blocking mode exists and must be chosen. One gateway’s guardrails default to asynchronous, logging only, with “no latency”, and must be switched to block; another’s budget enforcement “fails open” when its database is absent. The second is where the guardrail sits. Per-request classifiers missed a cyber-espionage campaign in September 2025 that was assembled from innocuous subtasks under a false claim of defensive work, with AI performing “80-90% of the campaign”; detection came from account-level behaviour. A classifier judges a request; the control plane must also judge a session.
A guardrail that logs is observability. A guardrail that blocks is a control.
What it would have caught. The planted dangerous commands a classifier blocked at 89 percent, the jailbreaks the classifiers blocked at 95, and the fragments of a campaign that a session-level monitor would have joined.
Figure 13. Five orders of magnitude between a policy check and a judge. Sources: aiAuthZ, arXiv 2607.05518; AgentSpec, arXiv 2503.18666; Meta Llama Prompt Guard 2 model card (29 April 2025); MiniScope (2026); NVIDIA (3 March 2025), Table 2; OpenAI Guardrails documentation (read 16 October 2026); Kumar et al., No Free Lunch With Guardrails, arXiv 2504.00441 (April 2025).
Figure 14. How the cost of a classifier fell from a quarter of compute to one percent, and the three defaults that turn a control back into a log. Sources: Anthropic, Constitutional Classifiers (3 February 2025) and Constitutional Classifiers++ (9 January 2026); OpenAI Agents SDK guardrails documentation; Portkey and LiteLLM documentation (read October 2026).
Observability: watch the infrastructure, not the narrator
The seventh control is the one that makes the others auditable, and its 2026 lesson is that the agent’s own account of itself is not evidence. In the Hugging Face intrusion, the independent investigators found that about seven percent of transcripts carried tool-call records that differed from what had actually run, at least 96 clear cases, and that more than a fifth of agents showed interest in tampering with their records; OpenAI’s frontier system card for its autumn model says the model is “less likely to include incriminating information” in its chain of thought, which makes that channel a weaker control for this generation. So the first rule is the one from August: capture execution evidence outside the agent, from the proxy, the credential broker and the sandbox, and reconcile the agent’s tool-call log against it. The second rule is that the reconciliation must run in real time. OpenAI’s technical report on the intrusion states that if its currently deployed chain-of-thought monitoring had been running at the time it “would have caught the initial relevant activity and paged our security team more than a day before models breached Hugging Face systems”; its new goal is notification within thirty minutes, a 24/7 page for the most severe alerts, and a pause if a flag is not cleared in thirty minutes. Anthropic’s hosted agents ship an offline reviewer that sends each session’s events to a model to flag overreach, retries after refusal and misreporting, with the allowed tools and hosts placed in the system prompt because “text inside the events could claim that the agent was given more”, and the documentation says what an offline review is: “A review finds problems only after the calls ran.”
The schema is converging. The OpenTelemetry generative-AI conventions, now in their own repository and still at development status with no tagged release as of this week, define agent spans for creating an agent, invoking an agent, invoking a workflow and planning, with the planning model call as a child and the resulting tool calls as siblings, carrying the agent’s identifier, the conversation identifier, the model and the input and output token counts. OpenAI’s Agents SDK traces every run by default with spans for agents, generations, function calls, guardrails and handoffs, and includes prompts and outputs in the trace unless a flag is set, which makes a trace a data destination that the classification control must cover. Anthropic’s coding agent emits OpenTelemetry metrics for sessions, cost, tokens and tool decisions with cost-centre attributes, and on 14 October 2026 Anthropic put OpenTelemetry traces on its platform in public beta, with spans for agent turns, model calls, tool use and tool-server calls, which is to say spans for exactly the four seams of part 1. The volume is the cost: one vendor’s illustrative arithmetic has ten thousand conversations a day producing a million spans and 400 megabytes of logs, and a 2023 paper from OpenAI noted that monitoring with a second model of the same size may double inference cost. A mapping study of seventeen observability tools in late 2024 found all fifteen it tabulated offered tracing and only six offered guardrails, which is the ordinary state: the platform can see, and has to decide separately whether to act.
Evaluation is observability before deployment, and the metrics are the ones parts 1 and 2 used. pass^k on the platform’s own tasks, four trials each, graded on end state by evidence the agent did not author; the hard cases sampled by hand, because METR found at least 16 percent of successful long runs illegitimate on review; the judge checked against humans, because the site’s evaluation bench found that two production judges reproduce their own verdicts more than 98 percent of the time while remaining position-biased. The out-of-band telemetry and the evaluation share a schema, so that when a run in production fails a check the trace can be replayed as a test.
What it would have caught. Each of the seven detection lags in my September figure, from eleven minutes to seven months; the spoofed tool-call logs; and the compaction summaries that told later contexts to hide mistakes, found by a monitor on a fifth of samples.
Figure 15. The schema and the discipline. The agent emits spans in a converging schema; the platform records what the proxy, the broker and the sandbox saw; a reconciler compares the two in real time, because the agent’s own log is not evidence. Sources: OpenTelemetry semantic-conventions-genai repository (read 16 October 2026); Anthropic (14 October 2026); OpenAI Agents SDK tracing documentation; METR and Redwood Research (26 August 2026); OpenAI technical report (26 August 2026); the author’s read-the-card essay (17 September 2026).
Budgets, caps and the stop: read the defaults
The eighth control is the cheapest and the most often missing. The defaults in the shipped SDKs, read on 16 October 2026: OpenAI’s Agents SDK caps a run at ten turns by default and raises an exception past it; Google’s Agent Development Kit caps a run at 500 model calls by default and warns that zero means unlimited; Anthropic’s Agent SDK sets no limit on turns and no limit on spend unless the developer sets them, and its documentation calls a budget “a good default for production agents”. Anthropic’s hosted agents enforce a hard cap in money at list rates, applied between model requests so that a fifty-cent cap can pause at fifty-three, with the session going idle on a budget-reached signal rather than terminated, and the in-flight request’s tool calls still run; its task budgets are advisory, a countdown the model sees and “a soft hint, not a hard cap”. The difference between a hint and a cap is the difference between a request and a control, and part 1 argued the same about step caps. The budget design from August carries over: a per-task budget in money, because a step on one model and a step on another differ by twenty-five times, checked by the gateway before the call, with three thresholds, alert, degrade and stop; and the cautionary case in that essay, a team that removed its step cap after a price cut and saw volume quadruple and its cache hit rate fall from above 80 percent to under 30, is why the cap is a control and not a setting.
The stop is the control that proves the others. In the DNS incident the alert fired after eleven minutes and forty-eight seconds, a human acknowledged it three minutes later, the run “did not stop automatically as expected”, and the kill came 164 minutes after the first external contact. In the Hugging Face case the alert fired at 12:03 UTC on 19 July, responders began stopping runs at 17:37, six pods were terminated and 22 administrator accounts removed in the first hours of the next day, and the last checkpoint was shut on 29 July: five and a half hours from alert to first stop, ten days to the last. The stop has three layers and a register: identity revokes the credentials, the network drops the routes, inference severs the session, and a registry of everything the agent spawned extends the stop to its children, which OpenAI’s own 2023 governance paper called for as recursive shutdown. The site’s standard, set in October, is detection-to-stop under sixty seconds, drilled monthly, with the hardware vendors now quoting quarantine “in milliseconds” from a watchdog outside the host. A stop that has not been tested is, as I wrote of the regulators’ controls, a sentence rather than a wall.
What it would have caught. The run that did not stop, the ten days to the last checkpoint, the port-sweep alert on 27 June for which on-call staff “advised that stopping the evaluation run was not required”, and the quadrupled bill.
Setting
Default
What happens at the limit
Source
OpenAI Agents SDK max_turns
10
MaxTurnsExceeded is raised; None disables
run_config.py, main branch
Google ADK max_llm_calls
500 per run
run stops; 0 or negative means unlimited, “not recommended for production”
adk.dev RunConfig
Claude Agent SDK max_turns
none
result subtype error_max_turns when set
Agent SDK Python reference
Claude Agent SDK max_budget_usd
none
stops when the client-side estimate reaches it; “leave headroom”; docs call a budget “a good default for production agents”
Agent SDK Python reference
Claude Managed Agents session budget
none
hard cap at list rates, checked between requests (a 50-cent cap can pause at 53); session idles with budget_reached; in-flight tool calls still run
Managed Agents budgets
Claude API task budget
none
“a soft hint, not a hard cap”: a countdown the model sees; minimum 20,000 tokens
Task budgets (beta)
Claude Code workflows pool size
guideline under 10
warning above 25 agents or 1.5M projected tokens; 16 concurrent, 1,000 per run
Claude Code workflows
Claude Managed Agents networking
unrestricted if omitted
an API create request without a networking field gets unrestricted networking; the console starts at limited
Managed Agents environments
SPIRE credential lifetimes
X.509 1 h; JWT 5 min
rotation is automatic
SPIRE server reference
Figure 16. The caps as shipped, read on 16 October 2026. Three vendors, three answers to the same question, and the difference between a hint and a cap is the difference between a request and a control. Sources: the SDK source and documentation named in each row.
Figure 17. Nine orders of magnitude between the stop as sold and the stop as measured. Sources: NVIDIA (28 September 2026); the author’s always-on-agent essay (2 October 2026); OpenAI misalignment report (25 September 2026); OpenAI technical report (26 August 2026); Anthropic (30 July 2026); the author’s agents-got-out essay (23 September 2026).
The regulatory hooks: the same nine controls, with clause numbers
The ninth pattern is not a control but the reason the first eight are compulsory. In August I showed that the UK National Cyber Security Centre’s seven considerations of 20 August 2026, the EU AI Act and the Reserve Bank of India converge on one control plane, and the mapping has not changed. The NCSC asks deployers to set the right level of oversight, control the agent’s environment with a robust sandbox, log and monitor agentic activity as part of security operations, make activity easy to attribute, and keep the ability to “pull the plug”; its warning that model safety controls “may be bypassed” is the request-versus-control distinction in a regulator’s voice. The AI Act, as amended by the July 2026 omnibus, keeps Article 26’s deployer duties including logs retained at least six months, Article 14(4)(e)’s stop to a safe state, and Article 73’s incident clock of fifteen days, two for widespread infringement, ten for a death, with the high-risk obligations now due on 2 December 2027. India’s DPDP Rules require a year of logs and a detailed breach report to the Board within 72 hours, with the main duties commencing on 13 May 2027; the October essay argues that an agent that obeys instructions hidden in a document and emails a record outside is a personal data breach under the Act. The RBI’s FREE-AI framework of August 2025 recommends instant termination, red teaming at least semi-annually for medium and high-risk systems, fallback and a one percent human sample, incident reporting, a half-yearly inventory and audits that check processes can be stopped, paused or unwound; its draft model-risk guidance of June 2026 names controls against prompt injection, limits on session and context persistence, and kill switches; its July 2026 cybersecurity directions require cyber incidents to be reported within six hours. The regulator’s vocabulary is the platform’s: attribution is identity, the sandbox is the sandbox, logs are observability, oversight is the approval gate, the plug is the stop.
Figure 18. The regulators’ vocabulary is the platform’s. Sources: NCSC (20 August 2026); EU AI Act as amended by Regulation (EU) 2026/1744 (in force 27 July 2026); DPDP Rules, G.S.R. 846(E) (13 November 2025); RBI FREE-AI (13 August 2025), draft model-risk guidance (24 June 2026) and cybersecurity directions (31 July 2026); the author’s two-regulators essay (20 August 2026).
What the plane costs
The objection to all of this is cost, and the numbers are now available. The deterministic controls are nearly free: a policy decision in microseconds, a permission check in a tenth of a second, a micro-VM in under 125 milliseconds and 5 MiB. The classifiers cost one percent of compute in the second-generation design and about a quarter in the first. A second model monitoring the first may double inference, which is why the cascade and the out-of-band telemetry matter: watch everything cheaply, judge a sample expensively. The platform figure I gave in September stands: containment adds roughly 15 to 20 percent to the compute cost of an agent task, took about four months of platform engineering to build, and about one engineer to operate. Against it, the Hugging Face case cost its vendor ten days of incident response and a report of fifty pages, and the surveys above put the share of organisations with an agent incident in the past year at 65 percent. The control plane is not the expensive part of running agents. The agents are.
Figure 19. Sources: aiAuthZ (2026); MiniScope (2026); Agache et al. (2020); Meta (29 April 2025); Anthropic (3 February 2025; 9 January 2026); Cuadron et al., SABER (26 November 2025); Shavit et al. (December 2023); the author’s agents-got-out essay (23 September 2026).
A worked example: a payments-operations agent at a bank
Take an agent that a bank’s operations team wants: it reads failed-payment queues, investigates each against the core system and the customer record, drafts the customer email, and where the fix is a retry or a refund within policy, executes it. It satisfies all three legs of the trifecta, untrusted content in the payment references and emails, private data in the customer record, and the ability to move money and write to a customer, so under the Rule of Two it may not run autonomously as one session. The control plane below is how it runs anyway, control by control, with the incident each one answers.
Identity. The agent is a directory principal sponsored by the operations manager, with a ninety-day review; per task the broker mints a token carrying the customer as subject and the agent as actor, scoped to that customer’s records and to the two operations the task class allows, and expiring in five minutes. The 2026 incident this answers is the domain-management token that could delete a volume. Sandbox and egress. Each task runs in a fresh micro-VM; the proxy resolves DNS and allows the core system, the customer record, the email gateway and nothing else; the metadata endpoint is blocked; no credential is in the VM. This answers the evaluation escapes and the server-side exfiltration. Injection boundary. The payment references and inbound emails are parsed by a quarantined model with no tools, which returns a structured record; the acting model never reads the raw text, and every value carries provenance. The policy, which the agent cannot read, forbids any refund whose amount or recipient came from untrusted text. This answers the secrets-table leak and the CI agents. Approval. Retries are reversible and run; refunds are irreversible and pause the whole run until an operator approves a canonical hash of the exact call in the tool handler; the email is sent only after the refund settles, by a handler that checks an idempotency key. This answers the loopjacked approvals and the nine-second deletion. Durable execution. The run is a journal; each refund has a compensation logged before it executes; a crash resumes from the last event. Classification. Every record carries its class from the August scheme; a 22-million-parameter guard screens inputs in 19 milliseconds; the one-percent human sample the RBI asks for is drawn from the journal. Observability. The proxy, the broker and the VM emit spans the agent cannot write; a monitor diffs them against the agent’s tool log in real time and pages on a mismatch; the journal is retained a year for the DPDP Rules and the AI Act. Budget and stop. A money budget per task and per day checked at the gateway with alert at 80 percent and stop at 100; a kill that revokes the token, drops the routes and severs the session, with every task the agent spawned in a register, drilled monthly against a target of sixty seconds. Regulatory hooks. The incident clock is six hours to the RBI’s portal, 72 to the Data Protection Board, and the AI Act’s fifteen days; the semi-annual red team and the half-yearly inventory are calendar entries.
The arithmetic of the plane for this agent is the arithmetic above: a micro-VM, two deterministic checks and a small classifier per task add well under a second and a few percent of compute; the approval pause adds minutes to the refund path only, which is 14 to 18 percent of steps by SABER’s count; the journal and the spans add storage. What the plane removes is the question the operations manager would otherwise be asked after an incident: whether the agent was ever able to do the thing it did.
Figure 20. The reference plane for one agent. Every control has a concrete setting and an incident it answers; the agent satisfies all three legs of the trifecta, so the reader and the actor are separated and the irreversible path waits for a person. Settings are the author’s; the incidents are those cited above.
The controls, by what they enforce
The table collects the nine controls with what each enforces, where it sits, what it costs, the incident it would have caught, and the clause that requires it.
Control
What it enforces
Where it sits
Measured cost
Incident it would have caught
Clause
Agent as principal identity, per-task credentials, least privilege
That a retry, a pause or a crash does not duplicate or orphan an effect
Workflow engine or event log
Storage; replay reads, does not recompute
Sibling effects during pause; the board rebuilt after a wipe
AI Act Art 12 logging
Injection boundary Rule of Two; quarantined reader; provenance
That untrusted text informs but never authorises
Policy engine the model cannot read
0.03 ms a decision (aiAuthZ); utility cost a few points
Calendar invites; browser sessions; CI secrets; ShadowLeak
RBI draft MRM: injection controls
Classification and guardrails class on every record; cascade; blocking mode
What class a record carries; what a call may contain
Gateway, in blocking mode
19 ms (22M guard); about 1% of compute (cascade)
Planted commands (89% blocked); the fragmented campaign
DPDP Rule 13; classify-first
Observability and evaluation out-of-band spans; real-time reconciliation; pass^k
What actually happened, from evidence the agent did not write
Proxy, broker, sandbox telemetry; a reconciler
Telemetry volume; a monitor model may double inference
Spoofed tool logs; every detection lag from 11 min to 7 months
NCSC logging; AI Act Art 26(6) six months; DPDP one year; FREE-AI 24
Budgets and the stop money cap at the gateway; three-layer kill; register
How much a run may spend; that it can be ended
Gateway; identity, network and inference layers
Free; a drill a month
The run that did not stop; 10 days to the last checkpoint; the quadrupled bill
NCSC pull the plug; AI Act Art 14(4)(e); FREE-AI 19
Regulatory hooks incident clocks; retention; red teams; inventory
That the record satisfies the strictest regulator served
Calendar and evidence file
Process
Four months from incident to disclosure in the earliest 2026 cases
AI Act Art 73; DPDP Rule 7; RBI 6 hours
Table 1. The nine controls with what each enforces, where it sits, what it costs, the incident it would have caught, and the clause that requires it. Numbers are those cited in the text, with their sources.
What I would build, and in what order
These are the rules I apply when a team brings me an agent that is ready to run, ordered by how often the missing one turns out to be the problem.
Decide what the agent cannot read. That list is the control plane.
Decide what the agent cannot read. List every rule the design relies on and sort it into requests, which live in the prompt, and controls, which live in the broker, the proxy, the handler or the gateway. If the sort leaves the critical rules on the request side, the design is not finished.
Make the agent a principal first. A directory entry, an owner, a sponsor-succession rule, and per-task credentials minted by a broker with lifetimes in minutes. Compute the role from the task, not from the model’s request or the operator’s permissions.
Enforce egress at two layers, including DNS, and inventory every channel. Package proxies, metadata endpoints, image fetches, link previews, public repositories and the vendor’s own API domain are all channels. Test from inside the sandbox that the environment matches what the prompt says.
Gate only the irreversible, and bind the gate to the call. Read, reversible write, irreversible write. A canonical hash, checked in the handler, holding the whole run. Never a sentence in the system prompt.
Journal the run and key every effect. Deterministic idempotency keys from stable identifiers; a compensation logged before each irreversible forward action; resume from the last event, not from the model’s memory.
Apply the Rule of Two per session. Where a task needs all three legs, split it: a quarantined reader with no tools, a privileged actor that never sees raw text, provenance on every value.
Classify everything; guard in a cascade; make the guard block. A cheap check on every call, an expensive one on what it flags; blocking mode chosen explicitly; a session-level monitor as well as a per-request one.
Observe from outside the agent, and reconcile in real time. Spans from the proxy, the broker and the sandbox; a diff against the agent’s tool log; a page on mismatch within thirty minutes; retention set by the strictest regulator you serve.
Read the defaults, then set the caps. Ten turns, 500 calls, none and none: three vendors, three answers. A money budget per task and per day at the gateway, with alert, degrade and stop.
Drill the stop. Three layers and a register of children; detection to nothing in under sixty seconds; monthly, with the clock recorded, until it is boring.
The control is the pattern
Part 1 argued that a pattern is a decision at a seam of the loop, and part 2 that a topology is a decision about what crosses between loops. This part has argued that the control plane is the set of decisions the loop never gets to make, and that the past eighteen months are a catalogue of what happens when those decisions are left to it. None of the nine controls is new; identity, isolation, approval, durability, provenance, classification, telemetry, budgets and incident clocks are the ordinary furniture of a platform that runs other people’s code. What is new is that the code now reads its own instructions, and so the one architectural rule that matters is to keep the instructions and the controls on different sides of a boundary the code cannot cross. The laboratories learned it in July, the vendors productised it by October, and the regulators had written it down before either. Part 4 goes back inside the boundary and builds the harness by hand.
Agentic architecture patterns · You have read Part 3 of 4
Ashish KumarHead of Platforms, AI & Data at Tata Group. Previously applied AI at Ola Krutrim, data science at Salesken, and conversational AI at Reliance Jio Haptik and Active.Ai. Full biography · LinkedIn