Route 1: the recorder callback
The collector package turns the framework's own step events into receipts, with no change to how the agent is written:
pip install smolagents-aer1
from smolagents import CodeAgent, InferenceClientModel
from smolagents_aer1 import AER1Recorder
recorder = AER1Recorder()
agent = CodeAgent(tools=[], model=InferenceClientModel(),
step_callbacks=[recorder])
agent.run("your real task here")
recorder.save("receipts.jsonl") # your evidence fileEach recorded step fixes the hash of its record at execution time. The evidence file is yours: keep it with the project, attach it to the delivery, or hand it to a reviewer, who can recompute any receipt in it without your environment, your keys, or your say-so.
Route 2: tools through the receipt-issuing endpoint
If your SmolAgents agent loads tools from an MCP server, point it at https://zambo.dev/mcp. Calls served through that endpoint return a receipt inside the response itself, with a public URL at https://zambo.dev/run/ that anyone can open. This route receipts the tool work your agent does through the endpoint's tools: research, checking, continuity, and the rest of the working set, and it needs no collector package at all. The two routes compose: recorder for the agent's own steps, endpoint receipts for the tool calls it makes.
Verify one yourself before you rely on it
Take any receipt from your first run and check it at zambo.dev/verify. The verifier recomputes the commitment from the saved bytes and compares it with the commitment fixed when the step ran. A match means the saved record is the record made at execution. Then do the negative test every evidence system should survive: change one character in a copy of the record and check again. It fails, plainly, in public. A record system that cannot fail in public cannot pass in a way that means anything.
And keep the claim honest when you present it: a receipt proves the saved step record was not changed after it was saved. It does not prove the generated code was good. Review still matters; the receipt just makes the review about the real steps instead of about a summary of them.
Questions, answered
How do I add receipts to a SmolAgents agent?
Install smolagents-aer1 from PyPI and attach its AER1Recorder to the agent's step callbacks. Every step the agent takes is recorded as an AER-1 receipt as it happens, and recorder.save writes the evidence file. The second route needs no package: give the agent tools served through the Zambo MCP endpoint at https://zambo.dev/mcp, and each call returns its own receipt with a public URL. Either way, checking a receipt is free at zambo.dev/verify and needs no account.
Why do SmolAgents runs need receipts more than most?
A code agent's real work happens inside generated code: the plan reads clean while the executed steps decide what actually happened. Console output is written by the same run it describes and scrolls away with the session. A receipt is fixed at the moment each step runs and is checkable from outside the run entirely, so a reviewer can confirm which steps executed and what they returned without trusting the transcript the agent printed about itself.
What does a SmolAgents receipt prove?
It proves the saved step record was not changed after it was saved. The receipt fixes a hash of the step's record at execution time; recompute it later and a match means the record is the one that was made. It does not prove the agent's code was correct or its answer right. What it settles is the factual layer underneath every review: which steps ran, in what order, and what came back, in a form someone who was not present can verify.
Can I receipt only some steps or some agents?
Yes. The recorder attaches per agent, so you can start with the one agent whose work leaves your machine: the one that talks to clients, spends money, or writes to production. Steps recorded before you attach it stay unrecorded, and the gap is honest: the evidence file shows exactly which runs carry receipts and which predate the recorder. Most teams start with one agent for one day, verify a receipt by hand, and then extend it.