The dog barks. The guard decides. The owner has the last word.
How InnerWarden decides when an AI agent misbehaves: rules decide, the graph connects what the rules cannot see alone, models only suggest, humans keep the veto. One night, seven moments.


WOOF!





The hot path is deterministic and local: milliseconds, offline, nothing shipped to a third party. Models exist in three bounded shapes: a local classifier that proposes, an anomaly learner that observes, and an optional LLM that advises behind floors, budgets, a circuit breaker and the needs-human veto. Turn every model off and the product still decides, the same way, every time. Escalation to a person is rare by design: it happens only for high-impact actions below the confidence floor. Most nights, no one is woken at all.
Who is who
A local classifier (distilled SecureBERT, in-process ONNX, 50 to 200 ms, about 87 MB, default off). It proposes a disposition; it cannot act. A per-host autoencoder learns this machine's normal for 7 days and stays advisory.
Every command is scored before it runs, against fixed, inspectable thresholds. Same input, same verdict, evidence attached. When nothing matches, the log says so rather than calling silence safe.
Processes, files, IPs, users and domains as nodes, joined by typed relations. It gives the guard lineage (which process really spawned this) and provenance, which is why the graph outranks any model: where a privilege came from is a graph walk, not a guess. Correlation then connects staged events, because single events lie and sequences do not. Shipped in Pro and Enterprise on Linux hosts.
Only ambiguous cases go further. Confident allow and confident deny never consult a model.
Bring your own, default off: your provider (Anthropic, OpenAI, Azure or a local Ollama), your key, referenced by env var name and never stored. Severity floor, call budget, circuit breaker, and a shadow mode that logs agreement but is never allowed to act. In Community the second opinion fires only on the ambiguous review band.
High-impact actions below the confidence floor wait for a person. No model can override the owner. No LLM configured? The review goes to a human, full stop. And this is rare by design: almost everything resolves deterministically at the guard; the owner is pulled in only when the stakes and the ambiguity are both high.
Three models, three leashes. The Warden Model (distilled SecureBERT student, in-process ONNX, 50 to 200 ms, about 87 MB) ships behind a build feature, default off, and proposes one of four dispositions. The anomaly autoencoder learns a host's normal for 7 days with the deterministic rules as its teacher; its score is blended, never sovereign, advisory only. LLM triage is bring your own (Anthropic, OpenAI, Azure or local Ollama), default off, behind a severity floor, per-tick call budget, circuit breaker, allowlists, protected-IP rules and the needs-human veto; shadow mode logs agreement and is never allowed to act. In Community the optional second opinion fires only on the ambiguous review band; with no LLM configured the review goes to a human. Keys are referenced by environment variable name, never stored. Facts verified against messaging/how-it-decides.md section 4.