The canonical count is 15, evidenced by the live /api/protect response. Here is each layer in one sentence. 2026-05-25.
The AiEGIS evaluation pipeline is fifteen layers. The proof is a single curl against the live endpoint:
curl -sX POST https://aiegis.ie/api/protect \
-H "Authorization: Bearer ${AIEGIS_API_KEY}" \
-H "Content-Type: application/json" \
-d '{"agent_id":"test","action":"read","payload":"x"}'
# response includes:
# "schema_version": "v0.7.0-15layers-2026-05-23",
# "layers_evaluated": [
# {"layer":"L1", "name":"Agent Identity Protocol", "verdict":"ALLOW"},
# {"layer":"L2", "name":"Agent Instruction Language", "verdict":"ALLOW"},
# ... 13 more ...
# {"layer":"L15", "name":"Correlation Engine", "verdict":"ALLOW"}
# ]
The schema_version string itself contains the canonical count: v0.7.0-15layers-2026-05-23. The layers_evaluated array has exactly 15 entries.
Between v0.5 (early 2026) and v0.7 (2026-05-23) three layers moved from "designed but partial" to "fully surfaced in the response":
l9_meta_security with a verdict and a latency.l13_mcp_registry.The how-to-issue-an-agent-passport blog at the time of this writing still references "12 enforced security layers." That phrasing is from when L9, L13, and L15 emitted side-channel verdicts but were not first-class in the response shape. The architecture was always fifteen; the response shape caught up on 2026-05-23.
Per the canonical source at api_v2.py:3464:
| Layer | Name | What it does |
|---|---|---|
| L1 | Agent Identity Protocol | Verifies the agent's Ed25519 passport, checks revocation, asserts operator scope. |
| L2 | Agent Instruction Language | Parses the agent's intended action into a structured form so downstream layers can reason about it. |
| L3 | Compliance / PII | Runs the rule packs (EU AI Act, GDPR, NIST AI RMF, MGAIF, POPIA) over the payload and returns per-pack verdicts. |
| L4 | Agent Police / Scope | Enforces action-level scope: this agent is allowed to read but not write, allowed in EU jurisdiction but not US, etc. |
| L5 | Model Quality Gate | Refuses to dispatch the action if the underlying model fails baseline quality checks (e.g. degraded confidence on a high-risk action). |
| L6 | Input Sanitizer | Strips or rejects prompt-injection patterns and other adversarial input shapes before they reach the agent's reasoning layer. |
| L7 | Memory / Receipt Integrity | Verifies the agent's session memory and the per-decision receipt have not been tampered between layers. |
| L8 | Tool Sandbox / Session TTL | Enforces tool-invocation sandboxing and session expiry; tools cannot exceed their declared scope. |
| L9 | Meta Security | Cross-checks L1-L8 verdicts for internal consistency; catches a layer claiming ALLOW while emitting a high-severity threat. |
| L10 | Data Protection | Applies GDPR / data-residency rules to any output that touches personal data. |
| L11 | Network Security | Enforces network-layer policy: outbound destinations, TLS posture, allowed protocols. |
| L12 | Behavioral Intelligence | Scores the action against the agent's behavioural baseline; outliers trigger WARN or BLOCK. |
| L13 | MCP Registry | Verifies any invoked MCP tool is registered, current, and not revoked. |
| L14 | Confidence Scoring | Aggregates per-layer signal into a single confidence number used by downstream consumers. |
| L15 | Correlation Engine | Correlates across recent actions on the same agent to catch cross-action patterns (e.g. exfiltration spread across small reads). |
A layer count is a structural claim, not a security claim. Fifteen layers that all return ALLOW unconditionally are worse than three layers that each block correctly. The right question for a buyer is not "how many layers" but "what does the runtime do when I send it the input that should fail" — the AIVSS enforcement-effectiveness dimension. See the AIVSS fixture walkthrough for how to score this empirically.
The thing to put in your evidence pack is the layers_evaluated array on a real /api/protect response, not a marketing diagram of fifteen boxes. The array carries per-layer verdicts (ALLOW / WARN / BLOCK) and, for L9 and L13, per-layer latency in milliseconds. That is the substrate the EU AI Act Article 26 walkthrough at /article-26-walkthrough grounds its findings against.