EU AI Act Annex III: 2 December 2027. See what it requires →

Evidence a regulator can check without trusting you

Verify signed, chained decisions with exportable evidence.

HMAC-SHA256

Signed at capture

Daily roots

Anchored off host

8 frameworks

Pre-mapped controls

Exit codes

Verifier runs in CI

A tamper-evident chain, not just a log

Signed at capture

Each emitted SDK or gateway decision record is HMAC-SHA256 signed before delivery; supported policy changes join the server-side sealed evidence stream.

Loss is declared, not hidden

The optional atomic outbox persists and replays signed records, while other sender-visible loss is declared with gap markers and pre-persistence death remains outside the guarantee.

A chain, not a pile

Each signature includes the previous event's signature, so altering one breaks the chain and deleting one gaps the sequence.

Server countersignature

Ingest re-signs every accepted event with a server-held key and rejects replays, so a compromised client cannot fabricate records.

What one governed decision leaves behind

Model version (resolved)gpt-4o-2024-08-06
Policy state at call timeversion hash c9a1f3e
PII detectionsEMAIL · SSN · IP_ADDRESS
Enforcement decisionALLOWED · BLOCKED · REDACTED
Sequence numberseq_no: 42
Previous event signatureprev_sig: b7e2d4...
Session identitysession_id: sdk_s_...
IP (last octet masked)192.168.1.0
Delegation chainparent → child agent ids
User / tenant attributionuser_id · tenant_id
HMAC event chain · session_id: sdk_s_a1b2
llm.callseq: 1
sig: a3f9c1...prev: -
pii.detectedseq: 2
sig: b7e2d4...prev: a3f9c1
policy.blockseq: 3
sig: c1a8f5...prev: b7e2d4
llm.callseq: 4
sig: d4b9e2...prev: c1a8f5

Delete or alter any event and the signatures stop matching. Tampering is detectable without trusting obsvr.

Proof that outlives the host

Qualified WORM retention

Hosted deployments can anchor roots in S3 Object Lock governance mode, with authorized-principal bypass disclosed and compliance mode available by agreement.

Daily roots, anchored twice

Each day's events are hashed into a Merkle tree whose root is committed to S3 Object Lock and a dedicated GitHub repo.

Ed25519-signed roots

Anyone can verify a daily root with the published public key alone, with no obsvr credential and no obsvr backend in the loop.

Point-in-time provenance

The resolved model snapshot and policy version are hash-sealed into the daily root, so what was live last quarter stays provable.

Nobody has to take our word for it

obsvr-verify-bundle

The standalone verifier recomputes the Merkle root offline and checks the Ed25519 signature with the public key alone.

obsvr-verify, in the SDK

Checks the client chain and separates two things a single pass/fail hides: a record that was altered, and one that is intact but incomplete.

Verification travels with the evidence

The script, daily roots, and anchoring status travel inside the evidence package, so your auditor confirms the chain without calling you.

Prove what was live. Months later.

auditor · offline
$ obsvr-provenance --at 2026-01-14
model gpt-4o-2024-08-06 · resolved snapshot, hash-sealed
policy c9a1f3e · hash-sealed in the daily root
✓ sealed by anchored root · roots/…/2026-01-14.json

The chain is the compliance story

SOC 2EU AI ActGDPRISO 42001NIST AI RMFOWASP LLM Top 10HIPAACCPA
Explore compliance and the evidence pack

The system holding the evidence is secured at every layer

Read the full security posture