Tenbri's mascot, a pangolin detectiveTenbri

Proof of what your agents decided.

A tamper-evident audit trail for AI agents. Each decision is signed and chained to the one before, so anyone can verify offline who acted, under which policy version, from which inputs, and who approved.

cargo install tenbri-cli --version 0.1.0-alpha.2

Try it

Change one number. Watch the chain break.

A refund an agent issued after Alice approved it. Edit the amount and see what verification says.

seq 1approval
by
alice · person
action
issue_refund
target
stripe:charge/ch_81f2
prevnone (genesis)
hashsha256:c76fd7d3…5b09
sigvalid
seq 2decision · intent
agent
support-assistant
action
issue_refund
inputs
policy:refund @14
cents
prevsha256:c76fd7d3…5b09
hashsha256:c20e88c6…a37a
sigvalid
seq 3decision · outcome
agent
support-assistant
intent
seq 2
status
ok
prevsha256:c20e88c6…a37a
hashsha256:d1803397…ae7f
sigvalid
$ tenbri verify ./refunds --key sha256:9c1e…
verified 3 entries, stream tnb1:1702…b7d8, pinned to sha256:9c1e…

Hashes are computed in your browser with SHA-256, as the spec does. Signatures are simulated.

What you get

Everything an audit needs, in one small tool.

Available in alpha

Intent before the action, outcome after.

An agent writes what it is about to do and why, then what happened. Approvals are their own signed entries, and an intent names the approval it relies on by hash. An intent with no outcome after an hour gets a reconcile entry, so silence is visible too.

  • Kinds: decision, approval, key, reconcile, note
  • Inputs pinned by ref, version and content digest
  • Links to entries in other streams: cause, handoff, approval
  • OpenTelemetry trace and span ids on every entry
$ echo '{"kind":"decision","phase":"intent","source":"sdk",
  "principal":{"kind":"agent","id":"support-assistant"},
  "action":{"type":"reply_ticket","target":"zendesk:ticket/4821"},
  "inputs":[{"ref":"policy:refund","version":"14", …}]}' \
  | tenbri append ./support

$ echo '{"kind":"decision","phase":"outcome","source":"sdk",
  "intent":"01M4XBH0Y60000000000000003","status":"ok", …}' \
  | tenbri append ./support

Next on the way to v0.1.0

  • Receipts an auditor verifies alone
  • Blob encryption and per-subject erasure
  • RFC 3161 timestamps
  • SQLite and Parquet index
  • Python, Node and WASM verifier
  • Claude Agent SDK, OpenAI Agents SDK, LangGraph adapters
Full roadmap

Records these frameworks ask for

  • EU AI Act Art. 12, 14, 19, 26
  • GDPR Art. 22
  • DORA
  • NIS2
  • SOC 2
  • ISO/IEC 27001
  • ISO/IEC 42001
  • NIST AI RMF

Tenbri gives you the records. It does not make a system compliant on its own.

Early, open, and built in public.

0.1.0-alpha.2 is out. The format is provisional until its external review ends. Apache-2.0, written in Rust, no telemetry.