"My agent said done, but nothing happened."
If you build with AI agents, you've lived that sentence. The agent hands you an answer, and you have exactly one reason to believe the work happened: the agent said so. A log file isn't evidence — anyone with a text editor can write a log file.
I'm rambo, director of ops at Zambo, the trust layer for AI work — give your AI hands. We spend all day on this problem. But this post isn't a pitch. It's a challenge, and it comes with a real artifact.
First, the term, stated plainly:
An AI agent receipt is a verifiable record proving a specific AI-agent tool call actually executed — what ran, when it ran, and what came back. Unlike a log file, which anyone can edit, a receipt is issued by the system that ran the call and can be independently checked. Zambo issues one for every completed call: 100+ tools, free, 20 calls per tool per day, no account or API key.
The receipt
This morning I ran one live call — a BTC price check — through the free tier. The system handed back this receipt. Every value below is real, copied from the live receipt, and you can check each one yourself in about a minute. I'll show you how.
Receipt ID: bb3f3f18-9b2f-4d5e-b46d-d261b7ae665e
Tool: live_price (arguments: {"symbol": "BTC"})
Timestamp: 2026-09-19T10:14:28.402Z
Observed result:
BTC · $81,264.00 USD
▲ 4.08% (24h) · Market cap: $1632.14B
Live price via CoinGecko · Sat, 19 Sep 2026 10:14:28 GMT
Output hash (SHA-256):
sha256:29a96563a64f8f904ce51c9ac5907138fe688c564927e3e901370f85d5809d41
Canonical bytes (base64):
eyJ0ZXh0IjoiQlRDIMK3ICQ4MSwyNjQuMDAgVVNEXG7ilrIgNC4wOCUgKDI0aCkgwrcgTWFya2V0IGNhcDogJDE2MzIuMTRCXG5cbkxpdmUgcHJpY2UgdmlhIENvaW5HZWNrbyDCtyBTYXQsIDE5IFNlcCAyMDI2IDEwOjE0OjI4IEdNVCJ9
Upstream evidence: CoinGecko, queried 2026-09-19T10:14:28.339Z
Evidence hash: sha256:6d41e99fb5eea08aede210fe0feb856c81d3037c5db12c298fc5247dfdf5e5ce (96 bytes)
Nostr anchor event: a4fc12e3699da4570625b4436d2bb7faebece9669383fa6fe8af6ad786f50fe2
Relay hints: wss://relay.damus.io · wss://nos.lol · wss://relay.primal.net
View it live: https://zambo.dev/run/bb3f3f18-9b2f-4d5e-b46d-d261b7ae665e
What each field means, in plain language
Receipt ID — the serial number. Quote it and anyone can pull up this exact receipt.
Observed result — what the tool actually returned, byte for byte. Not a summary, not a paraphrase. The bytes.
Output hash — the SHA-256 fingerprint of the result. Change one character of the output and this fingerprint changes completely. This is what binds the result to the receipt: the receipt doesn't just claim an output, it fingerprints it.
Canonical bytes — the exact bytes that were hashed, base64-encoded so they survive copy-paste. This is the load-bearing field. Because the bytes are public, the fingerprint is recomputable by anyone — including you, in step 2 below. A receipt whose hash you can't recompute is just a claim with nice formatting.
Timestamp — when the call executed: 2026-09-19T10:14:28.402Z.
Upstream evidence — the call hit CoinGecko at 10:14:28.339Z, and the raw 96-byte upstream response is hashed too. The receipt page lets you fetch those exact bytes. So the receipt doesn't say "trust me" — it points at the evidence and says "check."
Nostr anchor — the fingerprint is also published to public Nostr relays as event a4fc12e3…50fe2, timestamped outside of Zambo entirely. Even if you trust our server exactly zero, the fingerprint exists in a public log you can look up.
What it doesn't do
Honest scope matters more than the pitch: a receipt proves the call executed and binds the returned result. It does not prove the result is correct. If the upstream API had returned garbage, this receipt would faithfully bind garbage. That's not a weakness of the format — it's the boundary of what "proof of execution" means. Anyone selling you proof the answer was right is selling something else.
Verify it yourself — 3 steps, public info only
1. Open the receipt: https://zambo.dev/run/bb3f3f18-9b2f-4d5e-b46d-d261b7ae665e
2. Recompute the fingerprint yourself. Copy the canonical bytes and run:
printf '%s' 'eyJ0ZXh0IjoiQlRDIMK3ICQ4MSwyNjQuMDAgVVNEXG7ilrIgNC4wOCUgKDI0aCkgwrcgTWFya2V0IGNhcDogJDE2MzIuMTRCXG5cbkxpdmUgcHJpY2UgdmlhIENvaW5HZWNrbyDCtyBTYXQsIDE5IFNlcCAyMDI2IDEwOjE0OjI4IEdNVCJ9' | base64 -d | sha256sum
(macOS: use shasum -a 256 instead of sha256sum.)
You should get exactly 29a96563a64f8f904ce51c9ac5907138fe688c564927e3e901370f85d5809d41 — the hash printed on the receipt. I ran this before publishing. It matches.
3. Check the anchor. The receipt page links a public viewer for the Nostr anchor event — same fingerprint, timestamped on relays Zambo doesn't control. Or click "Open the verification endpoint" on the receipt page: the server recomputes the hash from its stored bytes and answers verified:true. If it ever doesn't say verified, don't trust the page.
The challenge
Now the fun part. Forge one.
Produce a receipt in this format — a fingerprint that recomputes from the canonical bytes, upstream evidence that hashes correctly, an anchor that resolves on public relays — for a call that never happened. Post your attempt publicly and drop me the link. If you break the format, I genuinely want to know. A receipt format that can't survive contact with motivated skeptics is decoration, and I'd rather hear it from you than from someone with worse intentions.
No bounty, no leaderboard, no prize pool. The challenge is the point: this whole category runs on the objection "a log file isn't evidence," so let's put the evidence on the table and see if it holds.
Want to run your own first? The Receipt Test hands you a live receipt for a real call — free, no account. Then bring it back here and try to fake it. I'll wait.
Keep reading — the series on proving AI work actually happened:
- Your AI Agent Said "Done." Nothing Happened. Here's the Fix.
- Your AI Says "Done" — But Did It Actually Do Anything?
- How to Verify Your AI Agent Actually Completed the Task
- What Is an AI Agent Receipt?
- Agents Are About to Pay Each Other. They'll Need Receipts.
- Your Agent Did the Work. Prove It.
Full series: https://dev.to/rambozambo/series/44379
Top comments (0)