Skip to main content

Edge Trace schema

The record format agentic-auth drift record writes and drift check reads. Every model here is closed (extra="forbid") and, by design, has no field anywhere that could carry a token, header, credential, query string, or payload — the absence of those fields is itself the guarantee that a committed trace is safe to check into a repo or attach to a PR.

EdgeEvent (one line of the raw JSONL events file)​

FieldTypeNotes
v1Format version
tsdatetime
source"sidecar" | "sdk"Which enforcement point recorded it
acting_agentstr | nullThe verified acting agent — never the unverified caller
targetstr | nullmcp://... or agent://...
kind"tool" | "delegation" | nullMust match target's scheme
outcome"allow" | "deny" | "observed" | "blocked_infra" | "blocked_local"
reasonstr | nullDeny reason, when applicable

DriftReport (output of drift check)​

FieldNotes
result"pass" | "drift" | "error"
summaryedges_observed, unattributed_calls
undeclaredList of edges observed but not declared, each with a verdict

Verdicts: UNDECLARED_TOOL, UNDECLARED_DELEGATION, UNKNOWN_AGENT — the same three outcomes the how-to guide's Configure the CI drift check walks through wiring into a PR.

Why acting_agent, never caller​

At hop 1 the request's caller might be user:alice, but the agent actually acting is whoever holds the root grant. Recording caller would put an edge like user:alice → agent://orchestrator into the trace — one no manifest could ever declare. The recorder always uses the PDP's verified answer for who's acting; an event with no verified acting agent is counted as unattributed rather than guessed.