Controls · PreFlight
Check the call before the vendor.
PreFlight checks your declared rules before the vendor call. A refusal does not call the vendor. It is included on every plan.
What it checks
PreFlight checks your declared deny rules, and secret markers on the declared-path headers. The headers it reads are X-PF-Protect, X-PF-Declared-Paths, and X-PF-Declared-Targets.
If a marker is in those headers, the call is refused before the vendor. A refused call costs $0. The built-in markers apply until this key saves its own. An empty saved list matches nothing.
What it does not do
The prompt is not read for that check. PreFlight does not train a model, and it does not rewrite the vendor's answer.
A secret marker on a declared path is a PreFlight check, not a TraceGuard check.
The other controls
LoopGuard stops repeated code by structure. TraceGuard writes the tool receipt. Settings are on Set up.
What the caller sees
A match is an HTTP error, not a model reply. The caller receives HTTP 403. The body is error task_refused and reason protect.prod-secrets. The vendor is not called. That call is not a forwarded call, and it costs $0.
The console keeps the decision and the rule. It does not keep the prompt.
If PreFlight cannot decide, the caller receives HTTP 503 and the message “PreFlight is temporarily unavailable; request not processed.” That is not a verdict on the call.
A clean call has no error. It continues to LoopGuard and TraceGuard on the same hop.
Questions
What does the caller see when PreFlight refuses?
HTTP 403, task_refused, reason protect.prod-secrets. There is no model text. The vendor is not called.
What is checked?
The declared-path headers only: X-PF-Protect, X-PF-Declared-Paths, and X-PF-Declared-Targets. A secret marker in those headers is a refusal. The built-in markers apply until this key saves its own. An empty saved list matches nothing.
Is the prompt read?
No. A secret in the prompt is not this check. A secret marker on a declared path is PreFlight. A tool name is TraceGuard.
Where is the record?
The caller has the 403. The console has the decision and the rule name. The prompt is not stored for this check.
Does a refusal count as a forwarded call?
No. The vendor is not called. It costs $0. Contain and Kill are not this check. Contain still calls the model with the tool stripped. Kill ends the hop with a 403, and the vendor is not called.
How is this different from TraceGuard?
PreFlight stops the hop before the vendor, and the caller sees the error. TraceGuard Contain leaves the hop up and the console names the step.