How it works
Every tool call passes through a single gate, the Admission Controller, before reaching the OS. There is no path around it.DENY. The tool never executes. The failure produces a context-bound
GUARD_INTERNAL_ERROR deny with evidence_hash and has_forensic_payload: true.
The seven invariants
INV-1 - Single execution gate
No direct path from LLM output to tool execution. The Admission Controller is the only dispatch path.INV-2 - Dual gate requirement
Policy decides intent. Authorization decides capability. Execution requires both.INV-3 - Per-step enforcement
The Admission Controller runs per tool call, per agent step, after planning and before execution.INV-4 - Untrusted executor model
The LLM produces candidates. The control plane decides outcomes. LLM confidence is not a security property.INV-5 - Spotlighting before policy
Content is trust-tagged before policy evaluation. Untrusted content cannot promote its own trust level.INV-6 - Boolean execution condition
execute = (policy == ALLOW) AND (admission == PASS). A partial pass is a block.
INV-7 - Deterministic forensic trace
Every deny response surfaced to the caller carriesevidence_hash,
has_forensic_payload: true, policy_version_id, and decision_trace_id. CI enforces
this across the deny surface.
Admission Controller checks
Each tool call passes sequential checks. Failure at any check returnsDENY immediately.
Pre-filter
Before the full Admission Controller runs, a fast-path classifier routes requests:
The pre-filter also decodes and reclassifies obfuscated inputs. Covered forms include
zero-width insertion, character arrays, hex escapes, base64 blobs, and rot13.
Spotlighting
All content entering policy evaluation is tagged with a trust source before evaluation.
Untrusted content cannot promote its own trust level.
