Request pipeline
Safe House runs as Phase 0.5 — after agent identification resolves the agent config and policy, but before quota enforcement or message forwarding. This placement is intentional: the gateway already knows which agent is handling the request (so Safe House config can be loaded), but no downstream resources have been consumed yet. Phase 0.5 is not a single screen per turn. It runs once per inbound surface the request carries: the inbound message, and — whenscreen_surfaces.tool_responses is enabled — each tool result the agent is handing back to the model in that same request body. A turn that makes three tool calls comes back through Phase 0.5 with those results in tow, and they are screened there, before Phase 3 forwards anything. Nothing about tool-result screening is deferred to Phase 4 or to a later request.
Phase-by-Phase breakdown
Phase 0 — Agent identification
The gateway resolves theAuthorization header to an agent record and loads the agent’s alignment card, canonical protection card (including the org’s protected_surface), and policy bundle from cache. If Safe House mode is off (the default), Phase 0.5 is skipped entirely with no performance cost.
Phase 0.5 — Safe House screening
Behavior depends on the configured mode (off / observe / nudge / enforce — the same four-value vocabulary as autonomy_mode/integrity_mode; see Safe House concept):
- enforce
- observe
- nudge
Safe House runs synchronously. The gateway awaits the L1→L2→L3 verdict for the inbound message (and for each screened tool result) before deciding whether to continue.
pass/warn: the pipeline continues; the request body is forwarded unchanged (warndecorates a flagged tool result as untrusted first).quarantine/block: the flagged content is withheld from what’s forwarded, and the response carriesfront=enforcedonX-Mnemom-Verdict. For a quarantined message,X-Mnemom-Advisorycarries asource: "safe_house.quarantine"entry naming the quarantine id.
Tool results are screened here, in the same request
Whenscreen_surfaces.tool_responses is enabled, Phase 0.5 does not stop at the inbound message. The gateway extracts the tool results from the inbound body of the request it is currently handling and screens each on its own tool_result surface — a separate L1 pass, a separate L2 judgement, a separate verdict per tool result. This is a bare await in the request path, not a background task. Coverage is not unconditional: a request that fans out to many tool calls in a single turn is not guaranteed full coverage.
The per-tool verdicts are then applied to that same request body before Phase 3 dispatches it:
The request body is re-serialized after this rewrite and that serialization is what Phase 3 forwards. None of this is handed off to the Phase 4 AIP pass or to the agent’s next request.
Phase 1 — Quota enforcement
Standard token and request quota checks run here. In enforce mode, this phase is only reached by messages that passed Safe House screening, so quota is not consumed by quarantined or blocked attempts.Phase 2 — Policy evaluation
The three-layer policy merge (org → agent → transaction) runs here. Safe House operates independently of the policy engine — a message can pass Safe House and fail policy, or vice versa.Phase 3 — Forward to AI provider
The message is forwarded to the configured AI provider (Anthropic, OpenAI, Gemini, etc.). In enforce mode, only messages with a Safe Housepass, warn, or nudge verdict reach this stage — and what is forwarded is the body as rewritten by Phase 0.5, with withheld tool results already replaced by their quarantine notices and warned tool results already decorated.
Phase 4 — AIP conscience analysis
The streaming response is teed through the AIP analysis pipeline. If Safe House scored the inbound message with a non-zero threat score (even if the verdict waspass), that score and the specific threat categories detected are injected into the conscience prompt. This gives AIP additional signal to scrutinize the resulting reasoning.
What Phase 4 does with the AIP verdict depends on the agent’s integrity mode. In enforce mode the response is gated the same turn — it is evaluated before it is delivered, so a violating response is blocked rather than returned (on streaming this adds latency). In observe and nudge modes the response is returned without being gated this turn; the verdict is recorded (and, for nudge, carried into the agent’s next turn).
The enrichment looks like:
protected_surface (forbidden operations, sealed assets) happens in Phase 0.5, not Phase 4. The same is true of tool-result screening — it is a Phase 0.5 front-door check on the inbound body, not something Phase 4 picks up afterwards. By the time Phase 4 runs, the org’s hard policy floor has already been evaluated and every screened tool result has already been withheld, decorated, or passed. Phase 4 AIP enrichment adds behavioral context from the alignment card; it does not re-derive the org’s protected_surface and it is not the tool-result screen.
Caching
Safe House configuration and session state are cached (the same cache used for quota state). This is why a Safe House config change can take up to the TTL below to take effect on live traffic:Pre-emptive nudge injection
This is the one Safe House mechanism that genuinely carries to a later request — and it is an advisory, not a screen. When a message passes Safe House screening but its L2 score is ≥ 0.6, Safe House writes a record to theenforcement_nudges table. On the agent’s next request, the gateway’s standard nudge injection logic picks this up and prepends a notice to the system prompt:
Attestation
Safe House scores are included in the attestationinputCommitment hash. When proof generation runs for a checkpoint, the hash commits to:
- The message content
- The Safe House L1 score, L2 score, and verdict
- The session risk level at time of message
- Whether any canary patterns were matched
Hardened-default Safe House configuration
For agents operating in high-trust, high-risk environments (financial automation, infrastructure management, regulated data handling), set a hardened protection card viaPUT /v1/protection/agent/{agent_id}. A reasonable starting baseline against the canonical UnifiedProtectionCard:
enforce mode is on (instead of observe); thresholds are tighter than defaults; and all four surfaces are screened — incoming (user/principal prompts), outgoing (the agent’s response), tool_calls (arguments going to tools), and tool_responses (values coming back from tools, screened in Phase 0.5 of the request that carries them, before the model sees them). Trust nothing implicitly: trusted_sources starts empty and is widened only with explicit, audited entries.
Canary credentials (sh.canary.triggered) and session-escalation policy are configured separately from the protection card; see Canary credentials and the webhook event catalog for the canonical surfaces.
On the hosted gateway, Safe House needs no separate setup or API keys from you — L2 analysis runs on a judge model the gateway hosts for you.
See also
- Safe House concept — What Safe House is and how the threat categories work
- Safe House Quickstart — Enable and test Safe House in 5 minutes
- Enforcement Modes — How the gateway handles downstream violations
- Policy Engine — The parallel policy evaluation system