Per-Action Signed Receipts vs Audit Logs and Third-Party Recordkeepers

A common response to the question of AI agent accountability is: "we already have an audit log" or "we use a designated third-party recordkeeper." Both are real answers, and this page does not dismiss either. It examines what each approach proves, where the structure of each limits what it can prove, and what changes when the signing party is unaffiliated with both the agent's operator and the record subject.

What a managed-cloud batch-signed audit log proves

A managed-cloud batch-signed audit log collects event records and periodically applies a cryptographic signature over a batch. The signature covers the batch as it existed at signing time, which means any record that existed before the batch was cut cannot be altered without breaking the batch signature.

This is real tamper-evidence for the batch boundary. Inside a batch, you know the records were not modified after the batch was signed.

What the structure does not prove:

There is also a real strength worth naming. Batch-signed logs are cheap to operate at scale and integrate naturally into observability pipelines. For operational debugging and internal alerting they are the right tool.

What a designated third-party recordkeeper proves

The designated-third-party model is a compliance structure in which an organization stores its records with a regulated entity that is legally independent from it. The third party holds the records and provides access to regulators.

The structure proves custody: a legally distinct party holds the records and can produce them on demand without asking the subject's permission. That is a verifiable property, recognized in several financial-records regimes.

What the structure does not prove:

The structural distinction: when the signing happens and who holds the key

Per-action signing with an unaffiliated key-holder changes the answer to both questions.

Asqav signs server-side as an operator unaffiliated with the agent's operator. The signing key is in Asqav's custody. The signature is applied to each action individually, at the time of the action, before the next action fires. The recorded party cannot forge or backdate its own receipt.

The wire format is published as an IETF Internet-Draft, draft-marques-asqav-compliance-receipts. The verification key is public at GET /.well-known/jwks.json. A verifier that fetches the key and the receipt can check the signature without contacting Asqav or trusting the agent's operator.

A self-signer or operator-run log is by definition affiliated with the record subject. That affiliation is not a product choice; it is a structural fact. You cannot be both the party whose actions are recorded and the unaffiliated party signing those records. Affiliation is the property that limits what a log proves to someone auditing you.

What the receipt proves

Each Asqav receipt carries fields that are verified in /.well-known/governance.json:

The controls_evaluated key is the enforcement attestation. Its keys - emergency_halt, delegation_scope, quorum, mandate, policy, content_scan - are present only when each control genuinely ran. An absent key means the control never ran on that action, not that it passed silently. This is documented in the wire_vocabulary.guards section of /.well-known/governance.json.

The signature algorithm is ML-DSA-65 (NIST FIPS 204). The signed bytes cover the canonical receipt envelope, so every field cited above is part of the signature surface.

How independent verification works

A reader holding a receipt verifies it through the public surface:

  1. Fetch the verify key from GET /.well-known/jwks.json.
  2. Verify the ML-DSA-65 signature over the canonical receipt bytes.
  3. Check the hash-chain link against the previous receipt in the agent's chain.
  4. Confirm controls_evaluated keys match the deployer's declared policy set.

No Asqav account is needed for steps 1 through 4. The open-source verifier in the asqav SDK on PyPI and @asqav/sdk on npm performs these checks offline. The verify_without_asqav path is documented at Verify Without Asqav.

The endpoint GET /api/v1/verify/{signature_id} is also unauthenticated, per /.well-known/governance.json, so any holder of a signature_id can probe verification without credentials.

Combining approaches

These are not mutually exclusive. Most deployers run all three.

A managed-cloud audit log stays on for operational visibility: dashboards, alerts, debugging. A designated third-party custodian holds batch exports under a compliance program. Asqav receipts add the per-action, unaffiliated-key layer that the other two cannot provide by structure.

The three approaches cover different parts of the audit surface. The batch log proves what the platform chose to record over an interval. The custodian proves the records were held by an independent party. The per-action receipt proves each individual action was recorded at the time it occurred by a party whose key the agent's operator does not control.

Where to go next