Which agent, on what inputs, decided what. Check it yourself.
An agent decision ends up as one hash in one message on a public ledger. That hash means nothing unless you can rebuild it from the decision itself — the agent, the mandate it acted under, the parameters it was given. Below is a verifier, a real proof package and a real decision record. No account, no API key, no code of ours in the trust path.
Four hops, each recomputed from the record, not from our word.
Four files, one command. Read the verifier first — it is short.
curl -sO https://rubric-protocol.com/docs/verify-apa.py
curl -sO https://rubric-protocol.com/docs/sample-proof.json
curl -sO https://rubric-protocol.com/docs/sample-record.json
curl -sO https://rubric-protocol.com/docs/sample-payload-key.txt
python3 verify-apa.py sample-proof.json sample-record.json \
"$(cat sample-payload-key.txt)"
That is a payment agent, acting under mandate mandate-acme-q3-2026, deciding to pay invoice INV-4419 for 250.00 USDC — bound to Hedera sequence 282686. Open sample-record.json and you will find the parameters the agent was actually given: destination, asset, invoice number, memo. The ledger holds none of that. It holds a commitment to it.
Read the verifier source →It can fail. Here is it failing.
A verifier that always returns green proves nothing. On 30 July 2026 we found that anchors written under tree version 2 committed to the number of batches rather than their contents — logged as RUBRIC-SEC-2026-001, found by writing this script and refusing to make it agree with our own server. Anchors since carry a corrected construction. The verifier tells them apart:
python3 verify-apa.py sample-proof-weak.json
Exit code 1. The signature, the leaf inclusion and the consensus timestamp still hold for those records — but the batch-to-aggregate step is our assertion rather than a proof, and the tool says so instead of showing a checkmark.
Read the specification →Same command, your agent's decisions.
curl -H "x-api-key: $KEY" \
.../verify/v1/proof/ATTESTATION_ID > proof.json
# the record itself — only the payload key opens it
curl -H "x-api-key: $KEY" -X POST \
-d '{"attestationId":"...","payloadKey":"..."}' \
.../verify/v1/payload-decrypt
python3 verify-apa.py proof.json record.json "$KEY_HEX"
The payload key is generated per attestation, returned to you once, and never retained by us. We cannot read your decision records; nor can anyone reading the ledger. You can hand the proof package to an auditor and prove an anchor exists, or hand them the record and key as well and prove exactly what your agent decided and on what inputs. The disclosure is yours to control, and the verification does not involve us either way.