AER-1 Python verifier: aer1-verify on PyPI

The AER-1 Python verifier is aer1-verify on PyPI. Install it, run it on any AER-1 receipt JSON, and it recomputes every hash commitment locally and prints a verdict: PASS means the receipt's saved result was not changed after the call ran. No network, no account, no trust in any server.

Install

pip install aer1-verify

aer1-verify is a single-file, standard-library-only verifier: no dependencies, no network, no trust in any server, including ours. Current PyPI release: aer1-verify 0.2.16, written against draft-zambo-aer1-26, with workflow-close verification under both Merkle rules.

The three-line check

curl -s "https://zambo.dev/api/v2/receipt/RECEIPT-ID/verify" -o receipt.json
pip install aer1-verify
aer1-verify receipt.json

The first line fetches a receipt as JSON from the public verify endpoint. The third runs the offline check: aer1-verify recomputes every hash commitment locally, prints a PASS or FAIL line per check, and ends with a verdict. Unplug the network before the third line if you want to prove the point: the verdict does not change.

What it checks

Try it on a live receipt

This receipt is from a live Zambo call, a BTC price check run on 2026-10-24: https://zambo.dev/run/26b353a9-8e34-4820-a351-9a65208e11c1. Fetch its JSON with the curl line above (the receipt ID is the last part of the URL), run aer1-verify on it, and compare the verdict with the browser check at zambo.dev/verify. Two codebases, one record, one answer.

What a receipt is, in one sentence: an agent receipt is a record of one ai agent tool call that anyone can check: it keeps the exact saved bytes and their sha-256 digest, and it proves the result was not changed since it was saved, not that it was right.

What a pass means, and what it does not

A pass means the record you are holding is the record that was saved when the call ran. It does not mean the agent's answer was right: a receipt proves the saved result was not changed, not that the result was correct. The verifier enforces that boundary by checking math, not meaning.

Get receipts on your own agent work

Checking receipts is the second half. The first half is making sure your agents' calls leave one: when a client or a teammate disputes what an agent did, the argument ends where a checkable record begins. Add Zambo and every call your agents run through the endpoint comes back with a verifiable AER-1 receipt at a public link, starting with 20 free calls per day.

Frequently asked questions

How do I verify an AER-1 receipt in Python?

Install the verifier with pip install aer1-verify, fetch the receipt as JSON from the public verify endpoint, and run aer1-verify on the file. It prints a PASS or FAIL line per check and a final verdict, entirely offline.

Does aer1-verify need a network connection?

No. aer1-verify is standard library only and verifies a receipt from the receipt data alone: it recomputes the sha-256 hash commitments locally and never calls a server. Fetching the receipt JSON is the only step that needs the network, and any copy of the receipt works.

What does the AER-1 Python verifier check?

It checks the receipt's shape and required fields, that the saved bytes decode strictly and re-encode byte-exactly, and that sha256 of the saved bytes equals the committed output hash. For a workflow close it also recomputes the Merkle root from the step receipts under the declared merkle_version.

Does a passing check prove the agent's answer was right?

No. An agent receipt is a record of one ai agent tool call that anyone can check: it keeps the exact saved bytes and their sha-256 digest, and it proves the result was not changed since it was saved, not that it was right. The check proves the record was not changed; judging whether the work itself was right is still yours.

Where is AER-1 specified?

AER-1 is an open IETF Internet-Draft, draft-zambo-aer1, and the current revision is draft-zambo-aer1-26 on the IETF Datatracker. The public conformance corpus ships with the kit: 126 vectors and 129 checks at kit v1.5.7.

Related

Implementations can carry the proof with them. The AER-1 badge kit gives any project page, profile, or repo a verifiable-receipts badge served from a shields-compatible endpoint, so the claim travels with the work and the check stays one click away.

The conformance corpus behind AER-1 is citable. The AER-1 conformance kit (126 test vectors, 129 checks, kit v1.5.7) is published as a dataset with DOI 10.57967/hf/11245: zambodotdev/aer1-conformance-kit on Hugging Face, with the canonical record at zambo.dev/aer1/corpus.json.