Platform Logs vs Independent Evidence
Every serious agent platform logs what its agents do. The logs are real and the dashboards are useful. For running the system day to day they are the right tool. This page answers a narrower question: what does a platform log prove to someone who does not trust you, and what has to change before a log becomes evidence.
A platform log is the operator's own record
Strip away the product around it and a platform audit log has one structure: the party that runs the agents also writes the record, stores the record, and controls its retention. An administrator with the right role can shorten the retention window, export a filtered view, or delete entries. None of that is a flaw. It is what an operations log is for.
It also means the log is self-attestation. When the record of what an agent did is held by the same organization whose agent did it, the record proves what the operator chose to keep. A reader who trusts the operator learns a lot from it. A reader who is auditing the operator learns only that the operator says so.
Two readers, two records
Most days the reader of an agent log is you. An engineer debugging a run, a security team triaging an alert, an admin reviewing usage. For that reader the platform log wins. It sits closer to the runtime and it is already in your tooling.
The reader changes when something goes wrong across an organizational boundary. A customer disputes what your agent did on their account. A regulator examines your AI controls. A counterparty in a dispute asks how you know the record was not edited after the incident. For that reader, "our platform logs everything" answers the wrong question. They are not asking whether a record exists. They are asking why they should believe it, given that you hold it and could change it.
What has to hold before a log counts as evidence
A record convinces a non-trusting reader when that reader can check it without taking the holder's word for anything. Asqav receipts are built around five properties that make that check possible:
- The record is signed server-side by an operator unaffiliated with the agent's operator, so the recorded party cannot forge or backdate its own record.
- The wire format is published as an IETF Internet-Draft, draft-marques-asqav-compliance-receipts, so a reader does not need the vendor's tooling to parse it.
- The verify key is public at
GET /.well-known/jwks.json, so the reader resolves the signing key themselves. - The verifier is open source and runs offline, so verification routes through no one. Independent Verification walks through the exact checks.
- Each receipt chains to its predecessor by SHA-256, so a deleted record leaves a broken link instead of silence.
United States federal litigation gives this shape of record a procedural home. Under Federal Rule of Evidence 902(14), data authenticated by a process of digital identification, such as a hash value comparison, can be self-authenticating when a qualified person certifies the process. A receipt that carries the action's digests and an independently verifiable signature supports exactly that kind of certification.
Keep the platform, add the evidence layer
Asqav does not replace your agent platform's logging and does not ask you to move anything. It runs alongside, and there are three deployed paths in.
Sign actions at the call site. The SDK signs each agent action as it happens, in process, and the receipt is independent of whatever else your platform records. Start at Agent Receipts.
Stream receipts into the tooling you already run. Asqav ships native output formatters for Splunk HEC, Datadog Logs, and generic CEF on the webhook delivery path, so receipts land next to your existing platform events. See SIEM Streaming.
Attest an export after the fact. When the activity already happened and all you hold is the platform's export, you can still fix it in time and form. Hash the export and sign an observation receipt over the digest:
import hashlib
export_bytes = open("agent-audit-export.json", "rb").read()
digest = "sha256:" + hashlib.sha256(export_bytes).hexdigest()
receipt = agent.sign(
"platform:log_export",
{"source": "agent-platform-audit-log", "window": "2026-06-01/2026-06-07"},
receipt_type="protectmcp:observation:result_bound",
result_digest=digest,
capture_topology="passive_telemetry",
)
print(receipt.signature_id)
Be precise about what that last receipt proves. It proves the export existed in exactly that form at signing time and that no byte of it has changed since, and the signature on that claim comes from an operator that is not you. It does not prove the platform captured every action, and it does not prove nothing was edited before the export was taken. The capture_topology=passive_telemetry value states that limit inside the audit trail itself: the cloud rejects receipt types that would claim active enforcement from an after-the-fact vantage point, as described in Capture Topology.
An attested export turns "trust our log" into "the log you were shown is the log that existed on this date". That is a narrower claim and a stronger one.
Where to go next
- What Your Auditor Will Ask For: the concrete asks, mapped to what you hand over.
- Independent Verification: the offline checks a third party runs on a receipt.
- Verify a Receipt Without Asqav: a ten-minute walkthrough with no Asqav account.
- Key Custody and Disclosure: who holds which keys, and why that is the load-bearing fact.