Skip to content

The audit ledger

Every action — permitted or blocked — writes an entry. Each entry’s hash covers the full payload plus the previous entry’s hash, so the ledger forms a chain that cannot be silently tampered with: altering any entry breaks every hash after it.

Field Description
session_id Agent DNA ID (sender)
classified_act Action type (ACTION_PAYMENT_INITIATE, ACTION_AGENT_MESSAGE, etc.)
resource Target resource or agent
status SUCCESS · BLOCKED_POLICY · FAILED_RUNTIME · PENDING_CONFIRMATION
raw_intent Original intent string or JSON payload
error Reason for block/failure (empty on success)
prev_hash SHA-256 of previous entry (chain link)
hash SHA-256 of this entry

Verify the full chain at any time:

Terminal window
curl -H "X-Imara-Token: $TOKEN" http://localhost:7070/ledger/verify

Related surfaces:

Method Path Description
GET /ledger Query entries (limit, offset, status, session)
GET /ledger/chain-head Current chain head hash
GET /ledger/stream SSE real-time stream
GET /ledger/mesh Agent-to-agent traffic graph (window=1h|6h|24h|7d|all)

The ledger is designed so regulators and SIEMs never depend on the box it was written on:

  • Cloud WORM replication — push-only replica to S3 / GCS / Azure / MinIO with Object Lock (SEC 17a-4(f) posture). Regulators read the bucket directly with read-only credentials; the kernel is not in the loop. Optionally routed through Kafka/RedPanda with the audit-consumer binary doing the final WORM write.
  • Snapshots — periodic compressed (zstd) BoltDB backups through a crash-safe staging area to S3, with optional AES-256-GCM encryption.
  • Webhooks — POST every commit (filterable by status) to Splunk, Slack, or any HTTP collector.
  • Regulator metadata index — real-time BoltDB sidecar backing the multi-tenant fleet view (/audit-meta/fleet).
  • Traces + metrics — policy VERDICT spans at /v1/traces, OTLP/HTTP JSON ingest at /v1/otel/v1/traces for agent-reported spans, Prometheus metrics at /metrics/prometheus.