danbauer.net / governed-agents

Governed agent operations

Agents make security operations faster. The design problem is letting them work at that speed without handing them the keys.

A reference design for an enterprise security estate, set beside the version I run every day. Same pattern, two scales.

Companion page: the two-handed estate, how work is split across model families before it reaches these gates.

FIG 01 · REFERENCE DESIGN, ENTERPRISE SCALE
flowchart TB
    ref_SVC["<b>Security services</b><br/>detection · keys and certificates ·<br/>secrets · crypto inventory · AI model testing"]
    ref_FLEET["<b>Agent fleet</b><br/>watches, analyzes, proposes;<br/>holds no write credentials"]
    ref_G1["<b>Guardrails</b><br/>deterministic checks on every change<br/>to the agents' own code and prompts"]
    ref_G2["<b>Independent review</b><br/>parallel reviewers, an adversarial<br/>verifier, one verdict"]
    ref_G3{{"<b>Signed approval</b><br/>a person signs the exact change;<br/>what is signed is what runs"}}
    ref_G4["<b>Access tiers</b><br/>read · propose-only · narrow lanes<br/>of earned autonomy, revocable"]
    ref_PROD[("Production estate")]
    ref_EV["<b>Evidence and reporting</b><br/>every action logged; risk, value<br/>and status for leadership"]
    ref_SVC ==> ref_FLEET
    ref_G1 -. "checks" .-> ref_FLEET
    ref_FLEET -- "changes to itself" --> ref_G2
    ref_FLEET -- "changes to production" --> ref_G3
    ref_G3 --> ref_G4 --> ref_PROD
    ref_FLEET -. "publishes" .-> ref_EV
    class ref_SVC,ref_FLEET,ref_EV core
    class ref_G1 rail
    class ref_G2,ref_G4 check
    class ref_G3 gate
    class ref_PROD store
    classDef core fill:#EAF2FB,stroke:#1667b8,stroke-width:1.5px,color:#16324f
    classDef rail fill:#FFFFFF,stroke:#1667b8,stroke-width:1.2px,stroke-dasharray:5 4,color:#16324f
    classDef gate fill:#0e7a4e,stroke:#0e7a4e,stroke-width:1.5px,color:#FFFFFF
    classDef check fill:#F2FAF6,stroke:#0e7a4e,stroke-width:1.5px,color:#16324f
    classDef store fill:#FFFFFF,stroke:#5b7288,stroke-width:1.2px,color:#16324f

Agents watch and propose. A person signs the exact change before anything reaches production, and autonomy is earned one narrow lane at a time.

FIG 02 · RUNNING TODAY, ONE OPERATOR
flowchart TB
    home_WORK["<b>Workloads</b><br/>research sweep · AI game server ·<br/>homelab ops and backups · assistant routines"]
    home_FLEET["<b>Claude Code + a 15-agent team</b><br/>reads, drafts, proposes;<br/>sends nothing on its own"]
    home_G1["<b>Session hooks</b><br/>owned by root, so the agent<br/>cannot edit its own rails"]
    home_G2["<b>Review squad</b><br/>parallel auditors, an adversarial<br/>verifier, one ship verdict"]
    home_G3{{"<b>Human release</b><br/>list what leaves, scan for secrets;<br/>the release is logged"}}
    home_G4["<b>Narrow write lanes</b><br/>dashboard buttons write one word;<br/>sends and posts stay human"]
    home_OUT[("Git remotes · web · inboxes")]
    home_EV["<b>Dashboard and graded claims</b><br/>what waits on whom; every state claim<br/>measured, observed, reported or inferred"]
    home_WORK ==> home_FLEET
    home_G1 -. "brackets every session" .-> home_FLEET
    home_FLEET -- "changes to itself" --> home_G2
    home_FLEET -- "anything outbound" --> home_G3
    home_G3 -- "released exactly as reviewed" --> home_OUT
    home_G4 -. "limits what the dashboard can change" .-> home_FLEET
    home_FLEET -. "publishes" .-> home_EV
    class home_WORK,home_FLEET,home_EV core
    class home_G1 rail
    class home_G2,home_G4 check
    class home_G3 gate
    class home_OUT store
    classDef core fill:#EAF2FB,stroke:#1667b8,stroke-width:1.5px,color:#16324f
    classDef rail fill:#FFFFFF,stroke:#1667b8,stroke-width:1.2px,stroke-dasharray:5 4,color:#16324f
    classDef gate fill:#0e7a4e,stroke:#0e7a4e,stroke-width:1.5px,color:#FFFFFF
    classDef check fill:#F2FAF6,stroke:#0e7a4e,stroke-width:1.5px,color:#16324f
    classDef store fill:#FFFFFF,stroke:#5b7288,stroke-width:1.2px,color:#16324f

The same pattern on my own hardware: a homelab, a fifteen-agent team, and nothing that leaves without a release.

DWG 03 · HOW THE CONTROLS MAP
PRINCIPLE
AT ENTERPRISE SCALE
RUNNING TODAY
GRADE
Agents propose; people decide
No write credentials. Every production change goes through an approval queue.
Nothing is sent, posted, submitted or pushed by an agent. Every outbound act waits for a human release.
MEASURED
Rails the agent cannot edit
Deterministic guardrails on every change to the agents' own code, prompts and tooling.
Session hooks owned by root fire every session, whether or not the model remembers them.
MEASURED
Independent review
Parallel reviewers, then an adversarial verifier that tries to refute each finding, then one verdict.
The review squad runs before anything ships or runs unattended. It caught a replay bug in a write path before the job was switched on.
REPORTED
Approve the exact change
A person signs the specific change. What is signed is what executes, nothing broader.
A release lists what leaves from the remote's own record, scans for secrets, and is logged.
MEASURED
Autonomy only narrows
Read, propose-only, and a few narrow lanes of earned autonomy, each revocable on a miss.
Dashboard buttons write a single status word. Anything broader becomes a request a person reads later.
OBSERVED
Evidence by default
Every agent action logged; risk, value and status reported without a data call.
Every claim about system state carries a grade. Nothing irreversible acts on an ungraded claim.
MEASURED
Controls are measured
Each control has a fire rate and a miss rate, and autonomy is granted on that evidence.
A guard is backtested over its history before it ships. A misfire on 2026-10-20 was fixed only after the corrected rule was replayed over 120 days of data.
MEASURED

The grade says how each claim about the running estate is known.

FIG 04 · ROLLOUT PATH · AUTONOMY IS EARNED
OBSERVEagents read and reportexit: agree with analystsPROPOSEapproval queue liveexit: approval and rework ratesNARROW AUTONOMYone low-risk laneexit: miss rate under thresholdRESPONDcontainment, same tiersexit: one lane at a time
DWG 05 · WHAT I WOULD MEASURE
Time to approved change. From finding to signed change, by change type.
Approved as written. Share of proposals approved, sent back or rejected.
Fire and miss rates. For every guardrail, reviewed monthly.
Evidence on hand. Collected continuously by the system, not gathered for an audit.
Hours returned. Analyst time moved from routine triage to work that needs judgment.
Autonomy earned. Lanes opened and lanes withdrawn, with the miss that closed each one.