The short answer: a receipt preserves the output, and binds it
The question people actually ask is a good one: does a receipt check the output itself, or only that a tool call happened? The honest answer splits in two, and both halves matter.
A verifiable receipt in the AER-1 format (an IETF Internet-Draft, draft-zambo-aer1-23) is the executing system's record of a call. It preserves the saved result bytes, and binds those bytes under a SHA-256 commitment. Its public page shows the full saved result, not a summary of it, so an empty field, a partial result, or an error is visible exactly as saved. Verification recomputes the commitment from the saved bytes and establishes one narrow thing: the saved result was not changed since it was saved.
What the receipt never does is judge the result. It does not establish that the answer was correct, that an external event happened in the world, or anything about quality or intent. That boundary is the point. A record that claims to prove correctness is overclaiming; a record that preserves the output byte-for-byte and proves the preservation lets you do the judging on the saved artifact instead of on a retelling.
Here is one: receipt 92874efd, a live price call whose full saved output and output digest are on the page for anyone to recompute. Whether the price it saved was the right price is a question the receipt deliberately leaves to you.
The three ways a false "done" happens
"Done" collapses three very different situations into one word. Each one shows up differently when the summary is compared with the record, which is why the comparison shows disagreements the summary alone cannot show.
1. Claimed, with no receipt in the record
The step is in the plan, so it lands in the summary. On the agent's side this can be a skipped step, a tool the agent decided not to use, or a sub-task quietly dropped. In the output, the step reads exactly like the steps that ran. In the record, there is no receipt for it. When work is routed through Zambo, the record carries a receipt for each call, so you can count the run's receipts against the summary's claims. A claimed step with no receipt is a disagreement between the agent's account and the record saved for the call.
2. Saved arguments that differ from the claim
The summary describes one call; the record saves different arguments: a different target, a narrower query than the one reported. The output paraphrases, so the difference is invisible in it. The receipt saves the arguments recorded for the call, alongside the saved result. Diff the saved arguments against the claim and the disagreement is sitting there in plain text.
3. Intervals the summary never mentions
The summary describes work flowing straight through, start to finish. The output has no clock in it. The record does: every receipt carries the timestamp saved for its call, so the record shows the intervals between saved calls, including long ones the summary never mentions. The record does not say what happened inside an interval. It shows the interval, next to the summary that describes continuous work.
What checking a receipt actually checks
Verification is a recompute, not a trust decision. Anyone holding a receipt's link can redo it, with no account and no permission from whoever ran the work:
- The output commitment. Hash the saved result bytes and compare against the digest the receipt carries. A match establishes that the result on the page is the saved result, not changed since it was saved.
- The saved arguments and status. Read the arguments and result recorded for the call, including failures and partial results, saved as they were.
- The workflow root. A multi-step run binds its step receipts under one Merkle root, built from the step receipt identifiers, so the set of steps in a sealed workflow can be checked as a set: a step added or removed after the fact breaks the root.
- The timestamps. Each receipt carries the timestamp saved at its call, which makes intervals between saved calls and differences from a later summary visible.
And the honest limit, stated the same way the draft states it: an AER-1 receipt carries no signing key, and Section 13 of the draft says issuer authentication is not part of the specification. As to origin, a receipt is self-asserted unless a mechanism outside the format establishes more. What the format guarantees is the integrity of the record itself: the saved result, bound at save time, checkable by a stranger. That is a floor a builder can actually meet, and it is the floor that makes disagreements between a summary and the saved record checkable.
Works wherever the agent works
The record does not live inside any one AI's activity log, which is what makes it portable. Calls routed through Zambo over MCP leave the same AER-1 receipt whether the client is Claude, ChatGPT, Gemini, Cursor, Grok, Windsurf, VS Code, or Muse, and whether the work is driven from a chat window or from a framework like LangChain or CrewAI. Connect once at zambo.dev/mcp, and a run started in one AI can be checked in another, by you or by the client the work was for.
Start free: the live demo mints a verifiable receipt with no signup. When you want a whole day of runs receipted and multi-step workflows sealed under one root, the Day Pass is $0.99.
Did my AI agent actually do it? The two-minute check
When the summary lands and doubt follows it, run the comparison directly. It takes about two minutes, and it settles the question claim by claim:
- List the claims. Turn the summary into a checklist: each step it says ran, each result it says came back.
- Match each claim to a receipt. The record of the run holds one receipt per call. A claim with a matching receipt moves to the checkable pile. A claim with no receipt stays a claim, whatever the prose around it sounds like.
- Recompute one receipt end to end. Open it, hash the saved result, compare with the commitment it carries. One full recompute proves the checking method works on this record; then sample the rest.
- Read the timestamps. The intervals between saved calls are part of the record. Work the summary describes as instant that the record spreads over an hour, or the reverse, is a disagreement worth asking about.
The outcome is a split, and the split is the answer: the steps with receipts that recompute are the steps you know ran as recorded, and the steps without them are the steps you only have the agent's word for. If the second pile holds anything that matters, the fix is not a sterner prompt. It is running the work where every call leaves a receipt as it runs, which is what Zambo does: run it through zambo.dev/mcp and cover the day with a $0.99 Day Pass.
Output vs. the record: FAQ
Does a receipt check the output itself, or just that the tool call happened?
One half, stated precisely. The receipt preserves the result bytes saved for the call and binds them under a SHA-256 commitment, and its public page shows the full saved result, so an empty field, a partial result, or an error is visible exactly as saved. Verification recomputes the commitment from the saved bytes and establishes that the saved result was not changed since it was saved. The receipt does not check that a call happened in the world, and it never judges whether the saved result was correct.
How can I tell if my AI agent actually ran a step, or just said it did?
Compare the agent's summary against the run's receipts. When work is routed through Zambo, the record carries a receipt for each call, recorded by the executing layer rather than written by the agent. If the summary names a step and the record holds no receipt for it, the two disagree, and the record is the artifact saved for the call. If a receipt exists, its saved arguments and saved result show the arguments and result recorded for the call.
Can a receipt prove my agent's answer was right?
No, and any record that claims to is overclaiming. A verifiable receipt establishes that the saved result was not changed since it was saved, and shows you that result in full so you can judge it yourself. It does not establish that the result was correct, that an external event happened, or anything about quality or intent. Correctness stays a human judgment; the receipt makes sure you are judging the saved output, not a rewritten summary of it.
What does the receipt show if the call failed or returned partial output?
Exactly what was saved: the failure or the partial result, with its timestamp and status. A receipt does not clean a run up. A failed call leaves a record of a failed call, a partial result is saved as partial, and the gaps between the timestamps on a run's receipts show the intervals between the saved calls, which can be compared with a summary that describes continuous work.
Who can check a receipt, and what does it cost?
Anyone with the receipt's link can open its public page and recompute its commitments, with no account and no permission from the person who ran the work. Checking is free. Running work through Zambo starts free with no signup via the live demo, and a $0.99 Day Pass keeps a whole day of runs receipted and seals multi-step workflows under one root.
Which AI clients does this work with?
Any client that can call tools over MCP: Claude, ChatGPT, Gemini, Cursor, Grok, Windsurf, VS Code, Muse, and frameworks like LangChain and CrewAI. The receipt format is the same AER-1 record regardless of which client made the call, so a run started in one AI can be checked in another, and the record does not depend on any one vendor's activity log.
Did my AI agent actually do it?
Answer it claim by claim, not from the summary's tone. For each step the agent says it ran, find the run's receipt for that call: the receipt fixes the tool, the recorded inputs, the saved result, and the time, under a hash commitment computed when the call ran. Recompute the commitment and read the saved result. Steps whose receipts recompute are steps you know ran as recorded. A claimed step with no receipt behind it is one you only have the agent's word for, and the honest verdict on it is unproven, not done.