Every agent action evaluated against the applicable rule pack at runtime. Sub-15ms p95 on customer infrastructure (loopback). 12 enforced layers + 5 jurisdictional packs in one synchronous call.
Agent posts intended action + agent_id (passport-bound)
Jurisdiction + risk classification select rule pack(s)
Identity → input sanitiser → tool sandbox → data protection → behavioural → …
ALLOW · WARN · BLOCK + reason_codes + Ed25519 signature
POST /api/protect
{
"agent_id": "agent_b3a9f1...",
"action": "send_email",
"target": "external_address",
"context": { "contains_pii": true }
}
→ {
"decision": "BLOCK",
"reason_codes": ["GDPR_ART5_DATA_MINIMISATION_MISSING", "EU_AI_ACT_ART26_HUMAN_OVERSIGHT_MISSING"],
"layers_checked": 12,
"latency_ms": 6.3,
"signature": "ed25519:..."
}
Every BLOCK and WARN decision returns the codes that fired. Operators can pin alerts on specific codes; auditors can grep the audit log to prove a rule was enforced. Codes are stable identifiers, not human-readable prose.
Rule packs declare which layers they read. L10 Data Protection is invoked by GDPR (Art. 5, 25), EU AI Act (Art. 10), and POPIA (s17, s36). L14 Confidence Scoring by EU AI Act (Art. 14) and GDPR (Art. 22). L4 Agent Police by NIST RMF Govern + Manage and EU AI Act Art. 9 + 72.
Operators see WHICH layer enforced WHICH pack rule in the response — not a black-box decision, but a traceable chain.