Durable Autonomous Systems · Steps 38–43Chapter 43 of 45

Who Controls the Agent? Build an Explicit Agent Control Plane

Page content

A production agent can have excellent models, good tools, durable workflows and strong verifiers and still be architecturally confused.

The confusion usually appears in one question:

Who is actually in control?

If the answer is effectively:

whatever the model decides next

you do not have a controlled autonomous system.

You have a probabilistic component that has gradually accumulated operating-system responsibilities.

That is the wrong boundary.

The central rule of this chapter is:

The model should not control the system that controls the model.

A stronger formulation is:

Reasoning may be probabilistic. Control must remain explicit, inspectable and enforceable.

This chapter turns the architecture we have built throughout this series into an explicit agent control plane.


The Search Problem: “How Should I Architect a Production AI Agent Control Plane?”

Many agent architectures begin with an execution loop:

while not done:
    thought = model(state)
    action = choose_tool(thought)
    result = execute(action)
    state = update(state, result)

That can be useful for experimentation.

But once the agent can:

  • mutate repositories,
  • send messages,
  • deploy software,
  • spend money,
  • create infrastructure,
  • coordinate other agents,
  • wait for humans,
  • resume after hours,
  • migrate between workers,
  • learn new capabilities,

that loop is no longer a sufficient architecture.

Because each consequential action depends on more than the model’s current reasoning.

It depends on facts such as:

Is the intent still current?
Is this task inside the system's demonstrated competence?
Is the action authorized?
Is this execution placement permitted?
Is the relevant state fresh?
Is the verifier available and strong enough?
Is the workflow owner still current?
Is the error budget healthy enough for this authority level?
Is the release approved for this cohort?
Is the security scope valid?
Is the side effect idempotent?

Those are control questions.

They should not be answered by letting the same model that wants to act simply declare them true.


1. The Architecture Has Split Into Two Planes

By Step 43, the system we have built naturally separates into two broad layers.

                    CONTROL PLANE

    intent            competence          authority
      │                    │                  │
    policy             placement           security
      │                    │                  │
    budgets            reliability         releases
      │                    │                  │
  escalation       capability portfolio    ownership
      │                    │                  │
      └────────────────────┼──────────────────┘
                    EXECUTION PLANE

        models → retrieval → search → tools
                 ↓                 ↓
              critics           workers
                 ↓                 ↓
              candidates → verifiers → actions

The execution plane performs work.

The control plane determines:

  • whether work should happen,
  • under which authority,
  • using which resources,
  • with which limits,
  • under which release,
  • against which intent,
  • with which verification requirements,
  • and what happens when assumptions fail.

The distinction is similar to many mature infrastructure systems.

A scheduler is not a container.

A Kubernetes control plane is not a pod.

A database transaction coordinator is not the SQL query itself.

Likewise:

The agent control plane is not the model.


2. Why “The Agent” Is Too Vague

The phrase the agent decided hides too much.

Suppose a production coding system modifies a repository.

What actually happened?

Potentially:

user intent accepted
intent version created
task classified
competence checked
authority ceiling selected
placement selected
workflow admitted
model proposes candidate
tests/verifier evaluate candidate
mutation policy evaluated
repository state revalidated
current owner/fencing token checked
commit authorized
mutation executed
postcondition verified

Saying the agent committed the patch collapses all of this into one fictional actor.

That makes failures hard to reason about.

A better architecture treats each decision as belonging to a specific subsystem.


3. Control Plane vs Execution Plane

A useful rule is:

execution proposes
control permits
verification establishes outcome

Not:

model proposes
model authorizes
model verifies
model declares success

The second system is circular.

It can still work often.

But when it fails, the same correlated reasoning process may generate the error, approve the error and explain why the error was correct.

That is precisely what the architecture in this series has been designed to avoid.


4. The Control Plane Should Own Intent

Step 37 introduced intent versioning.

Intent belongs in the control plane because it determines what the system is currently allowed to pursue.

A minimal intent object might look like:

@dataclass(frozen=True)
class IntentVersion:
    intent_id: str
    version: int
    status: str
    scope: str
    supersedes: str | None
    created_by: str
    created_at: datetime

An execution worker may receive intent state.

It should not be able to rewrite the authoritative intent registry simply because its model decides that a different objective would be better.

Before consequential mutation:

assert operation.intent_version == intent_registry.current(operation.intent_id)

This one boundary prevents enormous classes of stale-work failures.


5. The Control Plane Should Own Competence

Capability is not competence.

A model may occasionally succeed at a task outside the system’s validated operating envelope.

That does not automatically expand production authority.

Competence evidence might depend on:

task family
risk class
model/runtime version
toolset
verifier bundle
placement
release
workload cohort
sample size
false-success rate
UNKNOWN rate

The control plane answers:

Do we have evidence that this system is good enough
for this class of task at this authority level?

The model can provide features or semantic classification input.

But promotion of competence claims remains external.

This prevents:

model performs novel task once
model concludes it is competent
model expands its own autonomy

That is not learning.

That is self-authorized scope expansion.


6. The Control Plane Should Own Authority

Authority answers a different question:

Even if the system is competent, is it allowed to perform this action here?

From Step 29, useful authority classes include:

A0  observe
A1  propose
A2  reversible execution
A3  bounded external effect
A4  consequential external effect
A5  privileged / high-blast-radius action

The same competence may support different authority in different contexts.

For example:

competence: database migration analysis = VALIDATED

does not imply:

production database mutation = authorized

Authority should be represented as explicit policy and capabilities.

Not as a sentence inside a prompt.


7. The Control Plane Should Own Security Policy

Step 41 established an important boundary:

Data does not become authority because an LLM interprets it as an instruction.

That principle belongs naturally in the control plane.

Security policy decides whether:

  • a credential may be issued,
  • a tenant boundary may be crossed,
  • data may leave a region,
  • a tool may mutate a system,
  • generated code may leave quarantine,
  • a model may receive a secret,
  • a workflow may enter a privileged placement.

The model may request capabilities.

The credential broker decides whether to grant them.

model proposal
capability request
security + authority policy
scoped grant
privileged tool

This transforms broad ambient authority into narrow, observable grants.


8. The Control Plane Should Own Placement Eligibility

Step 34 introduced capability-aware placement.

Placement is more than choosing a model.

A valid execution target may depend on:

model/runtime
provider
region
GPU/CPU pool
tool locality
sandbox profile
verifier availability
data residency
authority ceiling
failure domain
capacity

The control plane should first apply hard constraints:

eligible = [
    target
    for target in targets
    if target.supports(task)
    and target.allowed_for(data_class)
    and target.authority_ceiling >= required_authority
    and target.verifier_strength >= required_verifier
    and target.health == "HEALTHY"
]

Only then should optimization consider:

  • latency,
  • cost,
  • utilization,
  • warm state,
  • model quality,
  • marginal value.

This preserves the rule:

Placement is constraint satisfaction before optimization.


9. The Control Plane Should Own Resource Budgets

Models, search, retrieval, critics, tools and humans all consume resources.

Step 16 introduced dynamic compute allocation.

Step 21 introduced admission control and quotas.

The control plane should own the shared resource ledger.

run budget
├─ model tokens
├─ model calls
├─ search expansion
├─ tool calls
├─ GPU time
├─ browser time
├─ external API cost
├─ human-review budget
├─ verification reserve
└─ reconciliation reserve

An execution worker should not be able to reset its budget by restarting.

A child agent should not get a fresh unlimited budget simply because it was delegated work.

A retry should not recreate the original spend allowance.

Resource state is durable control-plane state.


10. Reliability Must Influence Control

Step 27 introduced SLOs and error budgets.

Reliability should not live only in a dashboard.

It should affect runtime authority.

For example:

HEALTHY
  → normal autonomy

WATCH
  → more verification

CONSTRAINED
  → reduced speculation / smaller rollout

FREEZE
  → no new authority expansion
     no risky behavioral release
     human review for consequential work

The important relationship is:

observed reliability
control policy
execution authority

Not:

observed reliability
slide deck next month

11. Behavioral Releases Belong in the Control Plane

Step 24 treated agent behavior as a production interface.

A behavioral release may include:

model
prompts
router
search policy
budget policy
retrieval
memory behavior
tools
verifiers
security policy
placement policy
workflow definition

The control plane should know exactly which release governs a run.

@dataclass(frozen=True)
class BehavioralRelease:
    release_id: str
    model_bundle: str
    prompt_bundle: str
    policy_bundle: str
    verifier_bundle: str
    placement_policy: str
    security_policy: str
    workflow_version: str

Without this, you cannot reliably answer:

What behavior did we actually deploy?


12. Capability Portfolio Decisions Belong Above Execution

Step 32 asked which capabilities are worth owning at all.

That is not an execution-time model decision.

The capability portfolio may decide:

ACQUIRE
ACQUIRE_PREREQUISITE
PROPOSAL_ONLY
KEEP_HUMAN
USE_DETERMINISTIC_SOFTWARE
USE_EXTERNAL_SPECIALIST
DEFER
EXCLUDE
RETIRE

The execution plane consumes this policy.

It does not rewrite it opportunistically.

This preserves the principle:

An agent may discover capability gaps. It should not unilaterally decide which capabilities deserve organizational investment or production authority.


13. Ownership Is Control-Plane State

Distributed workers require explicit ownership.

Step 20 established leases and fencing.

Step 42 extended ownership to multi-agent coordination.

A worker may currently possess work.

That does not mean it owns the right to mutate indefinitely.

A control-plane ownership record might contain:

@dataclass(frozen=True)
class OwnershipRecord:
    work_id: str
    owner_id: str
    epoch: int
    lease_expires_at: datetime

At commit time:

assert presented_epoch == ownership.current_epoch(work_id)

This lets stale workers keep computing harmlessly while preventing stale mutation authority.


14. Commitments Also Belong in the Control Plane

Step 38 separated plans from commitments.

A plan may be discarded.

A commitment may require:

  • satisfaction,
  • release,
  • transfer,
  • compensation,
  • reconciliation.

Commitments therefore cannot live only in model context.

They need durable lifecycle state.

PROPOSED
ACTIVE
SATISFIED
RELEASE_PENDING
RELEASED
TRANSFER_PENDING
TRANSFERRED
BREACHED
RECONCILIATION_REQUIRED
UNKNOWN

The control plane ensures that replanning does not silently orphan obligations.


15. Durable Workflow State Belongs in the Control Plane

Step 39 established:

Make the workflow durable and treat the model as disposable.

That makes the workflow engine one of the strongest control-plane primitives.

It tracks:

current workflow state
pending waits
retry counters
timers
external events
commitments
cancellation state
reconciliation work
activity outcomes
budgets

The model can be invoked at explicit decision points.

But the model is not the process clock.


16. The Mutation Gateway Is the Hard Boundary

Many control-plane concepts become useful only when they meet at one enforceable point.

That point is the mutation gateway.

Before a consequential action, the platform should validate something like:

current intent?            yes
state fresh?               yes
competence sufficient?     yes
authority valid?           yes
security scope valid?      yes
placement permitted?       yes
ownership current?         yes
budget available?          yes
verifier evidence valid?   yes
release permitted?         yes
operation idempotent?      yes

Only then:

COMMIT

A useful deterministic structure is:

@dataclass(frozen=True)
class CommitRequest:
    operation_id: str
    intent_id: str
    intent_version: int
    candidate_hash: str
    state_versions: dict[str, str]
    authority_grant_id: str
    ownership_epoch: int
    verifier_evidence_id: str
    release_id: str
    placement_id: str


def authorize_commit(req: CommitRequest, control: ControlState) -> str:
    if not control.intent_is_current(req.intent_id, req.intent_version):
        return "STALE_INTENT"
    if not control.state_is_current(req.state_versions):
        return "STALE_STATE"
    if not control.authority_valid(req.authority_grant_id):
        return "AUTHORITY_DENIED"
    if not control.owner_is_current(req.operation_id, req.ownership_epoch):
        return "STALE_OWNER"
    if not control.verifier_evidence_valid(
        req.verifier_evidence_id,
        candidate_hash=req.candidate_hash,
    ):
        return "VERIFICATION_INVALID"
    if not control.release_permitted(req.release_id):
        return "RELEASE_BLOCKED"
    return "ALLOW"

This should stay boring.

Boring is good.

If a deterministic invariant can decide whether a stale operation should execute, do not ask an LLM.


17. Models Can Still Participate in Control Decisions

An explicit control plane does not mean every decision must be a hardcoded rule.

Some control questions are semantic.

Examples:

  • Which task family best describes this request?
  • Is this new task similar to a validated competence cohort?
  • Which two plans represent materially different risk profiles?
  • Which observation would most reduce blocking uncertainty?

A model may help answer those questions.

But the output should enter the control plane as evidence or a proposal.

For example:

model classification
confidence / evidence
policy boundary
allowed execution class

Not:

model says "this is safe"
privileged action executes

18. Learned Control Policies Need Their Own Competence

Suppose we replace deterministic routing with a learned policy.

That policy itself becomes a production component.

It needs:

  • benchmark evidence,
  • versioning,
  • shadow deployment,
  • canary rollout,
  • drift monitoring,
  • rollback,
  • authority limits.

This was established in Step 15.

A learned router should never sit outside the rules that govern other learned components.

The control plane must control learned control policies too.

That sounds recursive.

It is manageable if hard invariants remain outside the learned policy.

hard security / authority / residency constraints
             learned optimizer
          eligible-choice ranking

The optimizer may choose among permitted targets.

It cannot make a prohibited target permitted.


19. Escalation Is a Control-Plane Transition

Human escalation should not be modeled as:

model gets nervous
sends Slack message

It should be a structured state transition.

AUTONOMOUS
HUMAN_REVIEW_REQUIRED
WAITING_FOR_APPROVAL
APPROVED / REJECTED / REQUEST_EVIDENCE

The approval binds to:

  • intent,
  • candidate,
  • environment,
  • state identity,
  • authority scope,
  • expiry.

The control plane owns this transition.

The model may explain why escalation is recommended.

It cannot convert explanation into authorization.


20. The Control Plane Must Survive Model Failure

A useful architectural test is:

If the model becomes unavailable, can the platform still preserve safety, ownership and obligations?

The answer should be yes.

The system may lose capability.

But it should still know:

  • which workflows exist,
  • which commitments are active,
  • which operations are ambiguous,
  • which intents were cancelled,
  • which approvals expired,
  • which leases are stale,
  • which side effects require reconciliation.

This is one of the clearest signs that the model is not the operating system.


21. The Control Plane Must Survive Worker Failure

Similarly, if a worker dies:

worker process dies
lease expires
workflow remains durable
new worker acquires ownership
checkpoint / workflow state restored
state + intent revalidated
continue safely

No privileged fact should exist only in worker RAM.

That includes:

  • authority assumptions,
  • retry count,
  • commitment ownership,
  • budget remaining,
  • external side-effect state.

22. The Control Plane Must Survive Intent Changes

Step 37 showed that cancellation must be enforceable even when workers miss the event.

The control plane provides that enforcement.

intent v7 ACTIVE
worker A running

intent v8 SUPERSEDES v7

worker A misses notification
worker A finishes tool proposal
worker A reaches commit gateway

commit gateway:
    presented intent = v7
    current intent   = v8

    → STALE_INTENT

No cooperation from the worker is required.

That is what makes it a real control boundary.


23. The Control Plane Must Survive Security Degradation

Suppose the credential service fails.

The safe behavior may be:

mutation authority unavailable
continue read-only analysis
prepare candidate
defer privileged commit

Likewise, if verification infrastructure is down:

candidate generated
verification unavailable
UNKNOWN / DEFERRED

Not:

verifier unavailable
model seems confident
ship anyway

Control-plane degradation should contract authority, not silently weaken standards.


24. The Control Plane Is a State Machine, Not Just a Service

It may be tempting to create one giant AgentControlPlaneService.

That is not necessarily the right abstraction.

The control plane is better understood as a set of explicit state machines and registries.

IntentRegistry
CompetenceRegistry
AuthorityPolicy
CapabilityRegistry
OwnershipRegistry
CommitmentLedger
WorkflowStore
ReleaseRegistry
BudgetLedger
PlacementRegistry
SecurityPolicy
ReliabilityState
VerificationRegistry

Each should have narrow responsibilities.

The architecture should avoid recreating a god object with a more impressive name.


25. Avoid Control-Plane Monoliths

Centralized policy does not require centralized implementation.

A production system may have separate services for:

  • identity,
  • authorization,
  • workflow,
  • placement,
  • reliability,
  • releases,
  • verification,
  • capability management.

What matters is that the contracts are explicit.

A mutation gateway might combine results from several authoritative systems.

Intent Service ───────┐
Authority Service ────┤
Security Service ─────┤
Ownership Service ────┼─→ Mutation Gateway
Verifier Registry ────┤
Release Service ──────┤
State Version Store ──┘

This is very different from one model prompt containing all the relevant rules.


26. CQRS Fits This Architecture Naturally

A control plane often benefits from separating commands from queries.

Queries answer:

What is the current intent?
Who owns this task?
What authority is active?
Which release is permitted?
What competence evidence exists?
Which commitments remain unresolved?

Commands change authoritative state:

SupersedeIntent
GrantAuthority
AcquireOwnership
CreateCommitment
ReleaseCommitment
PromoteCapability
PublishBehavioralRelease

This separation reduces accidental coupling between reading state and mutating policy.

It also makes audit and replay easier.


27. Event-Driven Control Is Useful—But Events Are Not Authority

Many control-plane transitions should emit events.

IntentSuperseded
OwnershipTransferred
CommitmentCreated
VerificationCompleted
CapabilityPromoted
ErrorBudgetBurned
ReleaseRolledBack
SecurityGrantRevoked

Workers may react to those events.

But a delayed event should not become timeless authority.

The current authoritative state remains stronger than event delivery.

At commit time:

event said intent v7 was active

is weaker than:

intent registry says v8 is current

This principle has appeared repeatedly throughout the series.


28. The Control Plane Needs Provenance

Every consequential decision should be explainable as a path through control state.

For example:

operation op-187
intent v12
competence claim comp-44
authority grant auth-91
placement target local-qwen-gpu-2
behavioral release rel-37
verifier evidence ver-618
ownership epoch 8
commit decision ALLOW

That gives replay and incident forensics something concrete to inspect.

Without it, production debugging collapses back into:

“Why did the agent think that was okay?”

That is rarely sufficient.


29. The Control Plane Needs Its Own SLOs

The control plane itself can fail.

Useful SLIs include:

intent-read availability
authorization decision latency
ownership consistency
stale-commit rejection rate
policy evaluation failures
placement-decision latency
verifier-registry freshness
release-resolution correctness
commitment-ledger consistency

A slow or unavailable control plane can become the bottleneck for the entire platform.

But optimizing it must not lead to unsafe caching.

A cached authorization is not automatically valid after:

  • intent supersession,
  • grant revocation,
  • release rollback,
  • state drift.

30. Control-Plane Caching Must Preserve Identity

Some control queries are cacheable.

But cache identity matters.

For example:

competence(task_family, release_id, verifier_bundle)

may be reusable.

Whereas:

is authority grant auth-91 valid right now?

may require fresh revocation state.

The rule is:

Cache immutable evidence aggressively. Cache mutable authority conservatively.


31. Control-Plane Policy Should Be Versioned

Policies change.

Therefore:

policy_v41

should be a real artifact.

A decision record should capture the policy version used.

This matters for:

  • replay,
  • incident investigation,
  • behavioral releases,
  • regulatory audit,
  • regression comparison.

If the answer to:

“Which policy allowed this action?”

is:

“Whatever rules were in the prompt that week”

then the system is not operationally mature.


32. The Control Plane Must Not Trust the Execution Plane Blindly

Workers report results.

Those results are evidence.

They are not automatically authoritative truth.

For example:

worker: "deployment succeeded"

should trigger:

query deployment system
verify version / health / rollout state

Likewise:

model: "tests passed"

is weaker than:

test runner result bound to exact artifact hash

This is the same evidence hierarchy we have built throughout the series.


33. The Execution Plane Should Be Replaceable

A strong control plane makes model substitution easier.

You may switch:

local model
→ frontier model
→ specialist model
→ deterministic implementation

without redesigning:

  • authority,
  • intent lifecycle,
  • security,
  • workflow durability,
  • transaction semantics,
  • replay,
  • reliability.

That is an enormous architectural advantage.

The model becomes a replaceable capability provider.

Not the foundation of the whole system.


34. Control Decisions Should Be Observable

A trajectory trace should include events such as:

CONTROL_INTENT_RESOLVED
CONTROL_COMPETENCE_CHECKED
CONTROL_AUTHORITY_GRANTED
CONTROL_PLACEMENT_FILTERED
CONTROL_BUDGET_RESERVED
CONTROL_VERIFIER_REQUIRED
CONTROL_OWNER_VALIDATED
CONTROL_SECURITY_CHECKED
CONTROL_COMMIT_ALLOWED
CONTROL_COMMIT_DENIED
CONTROL_AUTHORITY_CONTRACTED
CONTROL_ESCALATED

This lets us distinguish:

candidate was bad

from:

candidate was acceptable
but authority policy denied it

or:

candidate was valid
but state became stale before commit

Those are completely different failure modes.


35. A Minimal Control-Decision DTO

A useful control decision might look like:

from dataclasses import dataclass


@dataclass(frozen=True)
class ControlDecision:
    decision_id: str
    operation_id: str
    intent_version: int
    policy_version: str
    release_id: str
    placement_id: str
    competence_claim_id: str | None
    authority_grant_id: str | None
    verifier_evidence_id: str | None
    ownership_epoch: int | None
    outcome: str
    reason_codes: tuple[str, ...]

Notice what is missing:

"model_thoughts": "..."

Natural-language rationale may be useful as supporting context.

But the enforceable decision should be structured.


36. The Control Plane Should Prefer Reason Codes

Instead of returning:

DENIED

prefer:

DENIED
├─ STALE_INTENT
├─ VERIFIER_UNAVAILABLE
├─ AUTHORITY_SCOPE_MISMATCH
├─ SECURITY_POLICY_DENY
├─ COMPETENCE_UNVALIDATED
├─ ERROR_BUDGET_FROZEN
└─ NO_FEASIBLE_PLACEMENT

Reason codes improve:

  • observability,
  • user messaging,
  • debugging,
  • metrics,
  • policy testing,
  • replay.

They also reduce the temptation to ask the model to invent a plausible explanation after the fact.


37. Don’t Put Every Decision in the Control Plane

There is an opposite failure mode.

A team may create an enormous centralized governance layer for trivial choices.

That creates latency and complexity.

The right question is:

Could this decision change authority, correctness, resource allocation, reliability or external state?

If not, execution-local autonomy may be appropriate.

For example:

which sentence should the model rewrite first?

probably does not need a control-plane round trip.

But:

may this model push to main?

absolutely does.


38. Hard Invariants vs Soft Optimization

This distinction is essential.

Hard invariants include:

tenant isolation
current intent
current ownership
credential scope
prohibited operations
data residency
required approval
required verifier class

Soft optimization includes:

cheapest eligible model
fastest eligible region
search width
critic frequency
candidate count

The architecture should be:

hard constraints
eligible choices
soft optimizer

Never:

soft score
maybe violate a hard constraint because score was high

39. The Control Plane Is Where Simplicity Can Return

An interesting effect appears once policy is explicit.

Some decisions that looked like they needed an intelligent agent become ordinary software.

Examples:

if state version changed → revalidate
if intent superseded → deny commit
if verifier missing → UNKNOWN
if lease stale → reject mutation
if authority insufficient → escalate
if budget exhausted → stop optional search

This is good.

The point of agent engineering is not to maximize how many decisions are made by a model.

The point is to use models where semantic flexibility adds value and ordinary software where exact rules already exist.


40. The Model Is Not the Operating System

This is the conclusion of the architecture we have built through forty-three steps.

A production agent may use frontier reasoning models.

It may use local specialists.

It may search trees, debate candidates, call tools, retrieve memory and coordinate other agents.

But the surrounding system must still answer:

what is the objective?
what is trusted?
what is allowed?
what is verified?
what is current?
who owns the work?
what can be spent?
what happens on failure?

Those questions form the operating environment in which reasoning occurs.

The model operates inside that environment.

It should not implicitly define it.

The model is a worker inside the system, not the operating system of the system.


41. A Reference Control-Plane Flow

Putting it together:

User / External Event
Intent Registry
Task + Risk Classification
Competence Registry
Authority / Security Policy
Capability + Placement Eligibility
Admission + Budget Allocation
Durable Workflow
Execution Plane
  ┌───────────────┐
  │ model/search  │
  │ retrieval     │
  │ tools         │
  └───────┬───────┘
      Candidate
 Independent Verification
      Commit Request
     Mutation Gateway
  ┌───────────────────────┐
  │ current intent        │
  │ current state         │
  │ competence            │
  │ authority             │
  │ security              │
  │ ownership             │
  │ verifier evidence     │
  │ release               │
  │ budget                │
  └──────────┬────────────┘
       External Effect
 Postcondition Verification
 Provenance + Reliability Data

That is no longer a prompt loop.

It is a production architecture for controlled autonomy.


42. What Should Stay Outside Model Control?

A useful default list is:

current intent version
security policy
credential issuance
hard authority ceilings
prohibited operation classes
tenant boundaries
data-residency rules
verification thresholds
held-out benchmark membership
competence-promotion thresholds
release-promotion policy
error-budget policy
ownership fencing
idempotency identity
reconciliation obligations

The model may recommend changes to some of these.

But recommendation and authority remain separate.


43. What Can the Model Control?

Plenty.

Within explicit boundaries, the model can decide:

  • how to decompose a semantic problem,
  • which evidence to request,
  • which candidate approach to pursue,
  • which tool arguments to propose,
  • how to summarize evidence,
  • whether multiple candidate strategies seem materially different,
  • when uncertainty appears high,
  • what explanation to provide to a human reviewer.

The control plane is not anti-agent.

It is what allows richer agent behavior without granting uncontrolled authority.


44. Failure Modes

Failure: the model is root

model chooses tools
model grants itself permission
model declares success

There is no independent boundary.


Failure: giant policy prompt

Every control rule is stuffed into a system prompt.

Prompt wording becomes the authorization layer.


Failure: control-plane god service

One service owns every registry, policy and workflow concern.

A new monolith replaces the old agent loop.


Failure: learned optimizer bypasses hard constraints

A route with a good score becomes eligible despite security or authority rules.


Failure: policy says deny, tool still executes

Control decisions are advisory rather than enforced at the mutation boundary.


Failure: stale cached authorization

A grant is revoked but reused from cache.


Failure: observability without enforcement

The system logs policy violations after the side effect already occurred.


Failure: every micro-choice becomes governance

Control-plane overhead swamps useful execution.


45. Failure Injection

Test the control plane by deliberately creating situations where execution would be unsafe without it.

Examples:

supersede intent while worker is generating action
revoke authority after candidate verification
expire ownership lease before commit
roll back behavioral release during workflow
make verifier unavailable
move repository head after approval
revoke credential capability
exhaust error budget
saturate preferred region
kill worker before operation acknowledgement
send malicious tool output requesting more privileges

Then assert:

no stale intent mutation
no stale owner mutation
no privilege expansion
no unverified commit
no release-bypassing execution
no budget reset
no lost commitment
no duplicate side effect

These are stronger tests than asking whether the model said it understood the policy.


46. Benchmark the Control Plane Against Simpler Systems

The control plane itself adds cost.

Benchmark against:

simple agent + typed tools
simple agent + verifier
simple agent + authority gate
full control plane

Measure:

  • verified success,
  • false success,
  • unauthorized effects,
  • recovery time,
  • latency,
  • cost,
  • operational complexity.

Some systems will not need the full architecture.

That is fine.

The control plane should be built incrementally from measured failure.


47. A Practical Adoption Sequence

A reasonable progression is:

1. typed tools
2. external verification
3. explicit mutation authority
4. durable intent identity
5. state freshness checks
6. ownership/idempotency
7. workflow durability
8. release/provenance tracking
9. competence + placement policy
10. reliability-driven authority
11. capability portfolio governance

Do not begin by building a giant governance platform for a read-only summarization agent.

Add the control surface when the execution surface creates corresponding risk.


48. The Architecture Has Reached Its Capstone

At this point the earlier posts fit into one model.

Reasoning mechanisms
Evidence / verification
Distributed execution
Behavioral releases
Reliability
Competence
Authority
Capability portfolio
Placement
Durable workflows
Security / coordination
CONTROL PLANE

This is the point where the series stops needing new mechanisms.

The remaining work is synthesis.


What Comes Next

The next chapter should assemble the entire architecture into one end-to-end production agent.

Not another new subsystem.

Not another optimization trick.

A reference architecture.

The next principle is:

A production agent is not one model loop. It is a controlled execution path from intent to verified external outcome.

That will be Step 44:

Build a Production AI Agent From First Principles: The Complete Reference Architecture.