On this page
- Every log was there. The explanation wasn't.
- Logs are local observations
- Why isn't a trace ID enough?
- A timeline is not a cause
- What should an AI agent audit trail record?
- Make evidence a condition of publishing
- Sampling is fine for telemetry, not for evidence
- The answer isn't to log everything
- One record, many questions
- Replay needs evidence, not log playback
- Common anti-patterns
- Ten rules for explainable agent execution
- The result: explainable by construction
- Frequently asked questions
- How Frozion keeps one record per decision
- Sources
Logs and traces record what each component observed. They can't, on their own, show why an AI outcome was allowed. An agent audit trail needs shared identifiers that tie together the context used, the proposal, the policy decision, the human approval, the action attempted and the result the target system confirmed, recorded at each consequential step and never sampled away.
Every log was there. The explanation wasn't.
A global manufacturer uses an AI agent to review supplier invoices before payment. One invoice is put on hold because the agent detects a possible supplier-identity mismatch.
The agent retrieved the invoice, the supplier master record, contract amendments and correspondence. A model classified the case as identity_mismatch with a score of 0.91. A policy required manual review. An analyst reviewed a summary and approved a temporary hold. Hours later, a background worker set the hold in the ERP.
The supplier challenges the decision. The incident team collects every record:
- Retrieval logged that it considered fourteen candidates and returned five, but not the document text, for privacy reasons.
- The model gateway logged the model version, latency, tokens and the classification, but not the prompt or context.
- The policy service logged
REVIEW_REQUIREDand a policy version, but identified the worker service rather than the analyst, and not how model output became policy facts. - The approval system logged
approved = trueand the summary shown, but not a fingerprint of the exact proposal the worker later committed. - Tracing showed successful spans, but the human wait started a new trace, and the original had already aged out.
- The ERP logged that a valid service account set the hold.
Every record is accurate. Together they give a timeline. They can't answer the questions that matter: which evidence influenced the score, whether a stale or unauthorized document shaped the ranking, whether the reviewer saw the same proposal the worker committed, which policy obligations were enforced, and whether the ERP change matched what was authorized.

The problem isn't missing logs. It's the absence of a shared evidence model that gives those logs meaning. EY's 2026 survey found that 72% of senior leaders worry they can't trace the data lineage and inputs behind critical AI decisions. This is why.
Logs are local observations
A log line is written by one component, from its own point of view: what it knew, what it tried, what it saw. That's valuable, and incomplete by design. Retrieval doesn't know which policy decision its results will feed. The model gateway doesn't know whether its output becomes a note or a payment. The policy engine doesn't know whether its obligations were enforced.
Different signals answer different questions. Collecting more of one doesn't produce the answer another was meant to give.
| Signal | Good at answering | Can't establish alone |
|---|---|---|
| Application log | What one component saw or did | The full proposal, authority, context and effect |
| Metric | How often, how fast, how much | Which evidence or decision caused one outcome |
| Distributed trace | Which operations took part and where time went | Why a path was allowed, whether an approval still held |
| Audit record | Who changed a protected resource, and when | Which context, model, policy and judgment justified it |
| Model-call record | Which model was called, with what response | Whether the context was permitted or the action authorized |
| Data lineage | Where data came from and how it moved | How data influenced a decision, approval or effect |
Why isn't a trace ID enough?
Because agent work outlives a trace. Tracing links operations across services into one technical path, and that's essential. But agent workflows wait for people, receive events, fan out to models and tools, retry, reconcile and continue hours or days later. A queue consumer starts a new trace. A human approval sits outside tracing altogether. An external API returns a receipt with no trace context. And traces are sampled.
Even a perfect trace answers a technical question: which operation followed which. Explaining a business outcome needs several distinct identifiers that shouldn't be collapsed into one:
| Identifier | The question it answers |
|---|---|
| Workflow version | Which approved definition was in force? |
| Execution ID | Which run produced this evidence? |
| Step | Which boundary emitted or consumed it? |
| Context ID | Which permitted information set was assembled? |
| Proposal ID and fingerprint | Which exact proposal was produced or reviewed? |
| Decision ID | Which policy, rule or model decision applied? |
| Approval ID | Which human judgment was recorded? |
| Operation ID | Which single business action was attempted? |
| Confirmation ID | What did the target system actually confirm? |
The trace ID still matters. It's one member of this set, not the identity of the outcome.
A timeline is not a cause
A timeline shows that one event came before another. It can't show that the earlier event justified, authorized or influenced the later one. That needs explicit, recorded links:
- Context
c-88supplied the evidence for proposalpr-12. - Proposal
pr-12was mapped into the facts policy decisiond-73evaluated. - Decision
d-73required approvala-09, with obligations that had to hold. - Approval
a-09was bound topr-12's exact fingerprint and authorized operationo-61. - Operation
o-61produced confirmatione-14once the ERP changed state.
Without links like these, investigators infer cause from timestamps, log wording and proximity. That gets unreliable fast when work is concurrent, event-driven, retried or long-running.

What should an AI agent audit trail record?
Evidence at every consequential step, tied together by shared IDs: the context used, the proposal, the policy decision, the approval, the action and the confirmed result. The fix starts with the workflow definition. If the consequential steps (context selection, proposals, policy decisions, approvals, actions, confirmations) are explicit in the definition, the runtime can emit a typed evidence event at each one, tied to the version and execution:
| Evidence event | What it preserves | The question it answers |
|---|---|---|
| Request accepted | Who asked, for what, for which tenant and purpose | What started this? |
| Context selected | Sources used and rejected, provenance, freshness, scope | What was allowed to influence the decision? |
| Proposal produced | Proposal, model or rule version, supporting evidence | What was proposed? |
| Policy decided | Policy version, facts evaluated, decision, obligations | What did policy decide, for which proposal? |
| Approval recorded | What the reviewer saw, their authority, conditions, expiry | What did the person authorize? |
| Action attempted | Operation ID, attempt, target, authority | What did the system try? |
| Effect confirmed | The target system's receipt and resulting state | What actually happened? |
An evidence event isn't a verbose log line. It marks a defined change in meaning or authority, and it can carry a snapshot, a fingerprint, a reference to protected storage, or a mix, depending on consequence and privacy.
Make evidence a condition of publishing
Ad hoc logging asks each team to guess what might be useful later. Governed evidence is declared up front: the workflow states which evidence each consequential step must produce, and a workflow that can't produce it doesn't publish.
That also defines what happens at runtime when evidence can't be produced. Instead of continuing silently and leaving an unexplained action behind, the step stops, captures a protected snapshot, routes to a person, or proceeds under an explicit, recorded exception.
Sampling is fine for telemetry, not for evidence
Observability tools sample and expire data to control cost. That's right for telemetry. It's wrong for evidence. The trace you sampled away may be the execution someone challenges next quarter. Keep two separate guarantees:
- Operational observability: statistically useful signals about system behavior. Sample it.
- Execution evidence: the minimum record needed to explain one specific outcome. Never sample it.
The answer isn't to log everything
The naive fix (keep every prompt, document, payload and output forever) creates a second high-value store full of personal data, credentials, trade secrets and restricted documents. Complete evidence and data minimization aren't opposites:
| Design choice | Purpose |
|---|---|
| Reference plus fingerprint | Prove which protected item was used without copying it into logs |
| Protected snapshot | Keep the exact historical content where reconstruction needs it |
| Field-level redaction | Keep correlation and meaning, drop unnecessary detail |
| Role- and purpose-specific views | Show each viewer only what they may inspect |
| Retention by evidence class | Keep receipts, policy evidence and telemetry for different periods |
| Tamper evidence | Detect modification, deletion or substitution |
Explainability is not universal visibility. An auditor may need to verify that a restricted source influenced a decision without reading it. A developer may need the failing mapping without seeing customer data.
One record, many questions
The same execution shouldn't force every stakeholder to build their own version of the truth from different dashboards. One evidence model can serve them all:
| Stakeholder | Their question | What they see |
|---|---|---|
| Engineering | Which contract, mapping or step caused the unexpected path? | Path, payloads, validation, versions, errors |
| Operations | Where did it wait, retry, fail or overspend? | State changes, attempts, timing, receipts |
| Security | Which identity, authority and policy allowed or denied it? | Authority chain, policy facts, enforcement |
| Audit | Did the approved process produce the recorded effect? | Definition, decisions, approvals, confirmation |
| Business owner | What evidence and judgment produced this outcome? | Context, proposal, reason, decision, result |
Replay needs evidence, not log playback
Replaying log lines reproduces a story. It doesn't rebuild the state, versions, context, authority, policy or approvals behind a decision. With an evidence model you can inspect a past run without executing anything, reconstruct its path, or simulate the same case under a proposed change, all without touching live systems. When a historical model or document is gone, you can still tell an honest reconstruction from a present-day rerun.
Common anti-patterns
| Anti-pattern | Why it fails | What to do instead |
|---|---|---|
| Add more unstructured logs | More volume, no shared meaning | Typed evidence events with shared identifiers |
| Trace ID as the business identity | One outcome spans traces, waits and systems | Distinct IDs for proposal, decision, approval, operation, confirmation |
| Model-call logs as the explanation | They omit authority, policy, approval and effect | Link proposals to context, policy, approval and result |
| Infer cause from timestamps | Concurrency makes adjacency misleading | Record causal links explicitly |
| Keep every prompt forever | Privacy, security and residency risk | References, fingerprints, protected snapshots |
| Rely on sampled traces for audit | The challenged run may be gone | Capture evidence independently of sampling |
| Audit only the final change | Proves something changed, not why | Link the confirmation back to the decision chain |
Ten rules for explainable agent execution
- Treat logs as local observations, not the full record.
- Tie every consequential record to the workflow version, execution and step.
- Keep distinct identifiers for context, proposals, decisions, approvals, operations and confirmations.
- Record causal links instead of inferring them.
- Emit typed evidence at context selection, proposal, policy, approval, action and confirmation.
- Make evidence completeness part of publishing.
- Never sample mandatory evidence.
- Minimize sensitive content; keep references, fingerprints and provenance.
- End the chain with the target system's confirmation, not a successful request.
- Serve operations, audit, business and replay from one permission-aware record.
The result: explainable by construction
Logs, metrics, traces and audit records all remain essential. Their limit isn't that they're weak. It's that each one is written by a component whose job is smaller than the whole outcome. An evidence model supplies the missing layer and lets you answer the question that matters after a challenge: why did the agent produce this outcome, and can we prove it was the outcome we allowed?
Frequently asked questions
Isn't distributed tracing enough to audit an AI agent?
Tracing shows which technical operations called which. Agent work often spans several traces, human waits and external systems, and traces are sampled and expire. A trace ID is one useful identifier, not the identity of the business outcome.
Should we log every prompt and document to be safe?
No. That creates a second high-value data store full of personal and restricted content. Record references, digests and protected snapshots where the decision needs them, and show each viewer only what their role and purpose allow.
What should an AI agent audit trail contain?
The request and who made it, the context that was allowed to influence the decision, the proposal, the policy decision and its obligations, any human approval, the action attempted, and the result the system of record confirmed, all linked by stable identifiers.
How does this work for agents we already run?
When an existing agent's tool calls go through a governed runtime, every call lands on one record: the rule, the facts it decided on, any approval, the attempt and the confirmed result. Call logs show what an agent called; the record shows why.
How Frozion keeps one record per decision
Frozion writes the record as the work runs, not after. Each decision gets one tamper-evident record covering the rule, the facts, the approval, the attempt and the confirmed outcome. Role-based views give operations, engineering, security, risk, audit and business owners the slice they need from the same record. Evidence exports cleanly, and auditors can get scoped, read-only access.
Sources
- NIST SP 800-92, Guide to Computer Security Log ManagementFoundations of enterprise log management.
- NIST SP 800-53 Rev. 5, Audit and AccountabilityAudit content, protection, timestamps and retention.
- OpenTelemetry Logs Data ModelEvent time, observed time, trace and span IDs.
- W3C Trace ContextPropagating trace identifiers across systems.
- OpenTelemetry samplingReducing trace volume, and why sampled data can't be audit evidence.
- W3C PROV-ONeutral provenance relationships among entities, activities and agents.
- NIST AI Risk Management Framework 1.0Traceability, documentation and accountability across the AI lifecycle.
- OWASP Logging Cheat SheetKeep secrets and sensitive data out of logs.
- EY survey: autonomous AI outpaces oversight, Sep 202672% worry they can't trace data lineage and inputs behind critical AI decisions.
More in Evidence & inspectability
Audit & explanation 2
Lineage & provenance 3
Versioning & replay 2
Other topics



