Rightshold™ Sign up

Evidence Delivery · $99 / 30 days · Offers open November 18, 2026 · online purchasing currently unavailable

Answers · AI evidence

We're designing the audit log for our AI agents and keep seeing the IETF Agent Audit Trail draft mentioned. What does it require in each log record, why does it want some records written before the agent acts, and is it actually a standard yet?

Last updated

TL;DR: The Agent Audit Trail (AAT) draft, now at revision -09 (October 26, 2026), defines a JSON record for every agent action with mandatory fields: a UUIDv4 record_id, an RFC 3339 timestamp, a persistent agent_id URI, a principal naming who the agent acted for (type, id and a reference to the grant or delegation, added in -07), agent_version, session_id, action_type (tool_call, tool_response, decision, delegation, escalation, error, lifecycle), action_detail, outcome (success, failure, timeout, denied, escalated), trust_level (L0 to L4), parent_record_id, prev_hash (SHA-256 of the previous record canonicalized per RFC 8785) and record_phase. record_phase says whether the record was written before, during or after the action: denials and escalations must be written before execution, because a denial logged afterwards proves nothing was actually stopped. Raw inputs and outputs must not go in the log, only their hashes. It is an individual Internet-Draft, not adopted by an IETF working group and not a standard; it expires April 29, 2027 unless revised.

What should I check, step by step?

1. Give every record a fresh UUIDv4, a UTC timestamp with milliseconds, a persistent agent_id URI and the semantic version of the agent software.

  1. Name the principal on every record: whether a human, organization, service or agent authorized it, a pseudonymous or role-based id for a person, and authority_ref pointing to the grant, delegation record or token it relied on (null, with the basis explained, if there isn't one).
  2. Write the decision record before the action runs whenever the agent is stopped or sent to a human. The draft makes pre_execution mandatory for denied and escalated decisions and denied delegations.
  3. For high-risk systems under the EU AI Act, write a pre-execution authorization record before any action that changes external state, moves money or delegates, and a post-execution record of the result that links back to it.
  4. Chain the records: each carries the previous record's id and the SHA-256 of its RFC 8785 canonical JSON, so a deleted or edited record breaks verification.
  5. Hash, don't store, prompts, outputs, tool parameters and reasoning. Keep raw data in a separate access-controlled system linked by record_id.
  6. Above trust level L1, have a component outside the agent write and sign the records with its own key, under a different OS account, and verify the chain from somewhere else.
  7. Keep records at least 6 months after the session closes (12 months recommended for EU AI Act high-risk systems), and handle erasure requests with signed tombstone records rather than deleting entries.

What fields does every IETF Agent Audit Trail record have to contain?

The draft splits fields into mandatory and optional. The mandatory set answers who acted (agent_id, agent_version), for whom (principal), in what context (session_id, trust_level), what happened (action_type, action_detail, outcome), when (timestamp, record_phase) and where the record sits in the chain (parent_record_id, prev_hash). Optional fields cover human overrides, recording component, signer key id, content fingerprints and decision-reproducibility digests.

Why does the Agent Audit Trail draft require some records to be written before the agent acts?

Revision -00 didn't require a record at the moment of authorization, and the draft now names the gap: a log written after the fact can be perfectly well formed and still give no evidence that a policy check stopped anything. record_phase closes it by stating when each record was written.

Should an AI agent write its own audit log, and what does a hash-chained log prove?

At trust levels L0 and L1 an agent may log itself, but must say so, and the draft is plain that self-recording is weaker evidence because the agent could leave things out. From L2 up, records should come from a gateway, sidecar or external monitor that signs with its own key, kept where the agent can't reach it. The draft also warns that if the agent's operator assigns trust levels, it can avoid independent recording by labelling consequential actions L0 or L1, so downgrades must themselves be recorded.

How do I ask Rightshold about this (free, no key)?

Add the MCP server https://www.rightshold.com/mcp to Claude, Cursor, ChatGPT, Grok or VS Code, then ask: “Before our refunds agent issues a refund, record the pre-execution authorization decision: which agent and version, the principal and the grant it acted under, and a hash of the full AAT-style record we keep, with no customer details, so we can show the gate ran before the money moved.”

One-click setup

{
  "tool": "record_action",
  "arguments": {
    "action_type": "agent.decision.pre_execution",
    "outcome": "success",
    "occurred_at": "2026-11-13T16:45:00Z",
    "client_event_id": "refund-agent:dec-2026-11-13-0117",
    "summary": "record_phase pre_execution; agent urn:agent:refunds.example v3.2.0; principal organization urn:org:support-ops, authority_ref grant G-REF-22 (refunds up to 100 USD); action_type decision for tool_call payments.refund; authorized to proceed; post-execution record to reference this client_event_id",
    "action_sha256": "<sha256 of the RFC 8785 canonical JSON of your full AAT record>"
  }
}

Rightshold isn't affiliated with the IETF or the draft's author, and its ledger isn't an implementation of the AAT format. Details are from draft-sharif-agent-audit-trail-09 (October 26, 2026) and its datatracker page, read November 13, 2026. Internet-Drafts are works in progress that can change or lapse at any time, and this one is an individual submission, not an IETF standard or working-group document. Not legal or compliance advice.

What are the sources?

Related

Not legal advice. JSON · Markdown · All answers

Get a free API key in one call

No card and no email needed. 100 free credits; the license and policy checks stay free without a key.

curl -s -X POST https://www.rightshold.com/v1/accounts/signup -H "Content-Type: application/json" -d '{"accept_terms":true}'
export RIGHTSHOLD_API_KEY=rs_...   # the api_key from the reply (shown once)
curl -s https://www.rightshold.com/v1/licenses/check -H "Authorization: Bearer $RIGHTSHOLD_API_KEY" \
  -H "Content-Type: application/json" -d '{"license":"MIT","intended_use":{"commercial_use":true}}'