
Opticon → Tracing
The trace list
Each row is one Guard API / Desktop Agent call, showing the input, the Guardian’s output, latency, tags, and scores. For a Desktop Agent call, the trace’s session is the matched Control Profile name, and its metadata carries the request’s URL, HTTP method, Content-Type, and headers; the input call and its output call share one Trace ID, so you see a full request→response cycle as a single trace. For an API call, the session is the caller’ssession_id, and the caller can link two calls by passing the same trace_id.
Tags and scores make it easy to filter and aggregate:
- the action —
PASS,MASK,BLOCK - policy results — e.g.
PII Masking Policy:MASK,TOPIC:BLOCK - the caller — e.g. the API key name
- the stage —
process_type:input - scores — per policy name, rolled up by policy type
A trace’s detail
Open a trace to see the full picture: the original input, theprocessed_content (the processed content delivered onward), the resolved action, every detected item, and the call metadata (API key, model config, process type). Starting with v1.4, any verdict that forwards content (PASS and MASK) forwards the processed content rather than the original — so processed_content is what actually went out. See Response format.

A MASK trace in detail — the action is MASK
Opticon Fail-Safe (Fail-Open / Fail-Closed)
Trace recording is normally asynchronous: if Opticon is down or unresponsive, the Guard verdict (PASS / MASK / BLOCK) is still returned and only the record is lost — the observation plane fails open. In audit-critical operations that gap matters: an unrecorded request is an unauditable request. Starting in v1.3, each project chooses what happens when a trace ultimately fails to record, with the Opticon Fail-Safe setting in Project Settings → General:
Project Settings → General → Opticon Fail-Safe
Fail-Closed recording attempts are bounded — a time and retry ceiling — so an unresponsive Opticon results in a BLOCK, never an indefinitely hanging response. When Opticon recovers, requests flow normally again with no manual reset.
The policy is per project because traces are recorded through the project’s Opticon binding — and even packets that reach a project without matching any Project Guardian (observe-and-log only) are logged under that binding. Audit posture can also differ per project within one company.
What doesn’t trigger it — Fail-Closed applies only when a trace should exist but couldn’t be recorded. Requests that never produce a trace are unaffected:
- entries whose Opticon logging is explicitly turned off (an intentional opt-out, not a failure)
- paths that never generate a trace in the first place (auth failures, deterministic gates, unsupported inputs, over-limit rejections)
- projects with no Opticon binding configured