Building AI SRE in Public #10: Autonomous SRE — and why not yet
Why unsupervised auto-remediation is not the destination. Observe by default, Autopilot propose-only, reality anchors, and investigate → plan → approve → verify as the load-bearing loop — not a fleet of agents that apply because the model sounded sure.
This is episode 10 — the closer — of Building AI SRE in Public. Episodes 1–9 built the machinery: intent → typed plan → safety → multi-context → gated investigation → chronology → local memory → topology. The marketing temptation is to call that stack “autonomous.” We refuse. Autonomy without an approval boundary is how AIOps burned trust the first time.
The claim
AI SRE means investigate with evidence, propose a reviewable PlanResult, fail closed on hard denies, and verify after apply. It does not mean a thousand agents patching prod because a chat session soft-agreed. “Autonomous” is allowed only where policy + explicit gates say so — and even then the default remains proposeOnly. Silent apply is not shipped as the product story.
What people hear when you say autonomous
| Pitch | What operators hear | What we ship instead |
|---|---|---|
| Self-healing cluster | Something mutated while I slept | Observe alerts; human or policy gate before mutate |
| Agent fleet | Who owns the blast radius? | Namespace-scoped Roles; Coordinator probes, not god-mode |
| LLM decided | No audit trail I trust | PlanResult + audit + Reality anchors the model cannot waive |
| Auto-remediate from graph | Edges became root cause | Graph/memory bias Explain — never sole proof / never sole apply |
AIOps already tried unsupervised heal
Correlation engines promised auto-remediation before LLMs. Many failed for boring reasons: brittle rules, noisy alerts, opaque black boxes, and remediations operators would not stake a pager on. Better language models do not erase that history. They make confident wrong plans cheaper to generate. The fix is not a louder model — it is a compiler temperament: typed artifacts, anchors, and humans (or explicit policyAuto) on the mutate path.
The loop we will defend
Load-bearing path
investigate / why / timeline / impact
→ Investigation (EvidenceRef, Unknowns, degraded[])
→ optional PlanResult (actions, risk, blastRadius)
→ Safety hard-deny / risk
→ human approve (or policyAuto + allowlist + apply=true)
→ apply
→ post-apply verifySkip any step and you are back to folklore with kubectl privileges. Soft-agree in the same session is not verify. Memory is not proof. A Knowledge Graph edge is not a rollback.
Autopilot without autonomy theater (ADR-0015)
- Observe remains the default install — read Role, notify, no in-cluster apply implied
- Autopilot is opt-in and allowlist-only (rollback / restart / scale / evict — named targets)
- proposeOnly is the MVP default: emit PlanResult / proposal; human applies with --approve
- policyAuto still requires allowlist + apply=true + explicit gate — never LLM-said-so → apply
- Deny pack: wipe / ns delete / Secret values / fabricated evidence — never allowlistable
Propose, don’t surprise
kprompt agent run -n payments --analyze --heuristic --autopilot-propose
# Apply only with policyAuto + explicit approve — never the silent default
kprompt agent autopilot apply-proposal --file proposal.json --approve --policy ./policy-auto.jsonReality anchors beat second opinions
If an improvement loop can rewrite both the solution and the evaluator, Goodhart wins. Hard deny, PlanResult schema, EvidenceRef kinds, pre-trust caps, post-apply verify, AG-034 memory caps, and Coordinator probe Evidence live in code — not in a prompt that says “be careful.” A second LLM in the same session is not an anchor.
What “not yet” allows later
Narrow policyAuto for boring, reversible actions under RemediationsPolicy can grow. GitOps remains the steady-state source of truth for desired state; Autopilot is incident remediation, not continuous reconcile of everything. Full unsupervised SRE — free-form mutate, cluster-wide god agents, Secret-value CMDB, silent heal from chat — stays an explicit non-goal until a new ADR says otherwise in public.
What ships vs building vs refuse
- Shipped: plan → safety → approve → apply; Observe; Autopilot propose + gated apply; Investigation / timeline / impact / graph MVP
- Shipped: reality anchors docs; memory evidence-not-proof; soft-agree confidence caps
- Building: richer verify, topology UI, deeper Prom/OTel/mesh hops
- Refuse: silent apply as default; “1000 agents” fleets; memory/graph as sole proof; model-waived hard denies
Series close
If you only remember one sentence from ten episodes: AI SRE is a compiler and an approval boundary, not a chatbot with cluster-admin. The wedge ships today. The destination stays honest. Star the repo, open issues when an episode overclaims, and keep the human (or an explicit policy gate) on the mutate path.
Related posts
Building AI SRE in Public #6: Investigation Graph
Chat is a line; ops is a gated graph. Fan-out where edges are real, independent verify (not same-session soft-agree), PlanResult → approve → verify — without becoming a free-form agent fleet.
Read articleBuilding AI SRE in Public #5: Multi-context
AI SRE across kubeconfig contexts: single-context default, explicit read fan-out, per-context mutate approval, aliases, and why we refuse silent fleet --approve or uploading cluster credentials.
Read articleBuilding AI SRE in Public #4: Safety Engine
Policy is code, not LLM vibes. How kprompt’s safety engine hard-denies wipe-class intents, scores risk, forces approval, and why fail-closed is the load-bearing wall of AI SRE.
Read article