aer1kit: verifiable execution receipts for your hackathon agent
Built for the Open Agent Hackathon 2026, Track 02: "The Agent That Can Explain Why."
Judges ask "why did your agent do that?" Most teams answer with a story. You answer with a verifiable receipt: every action your agent took, hash-chained, with the evidence it acted on, checkable by anyone without trusting your infrastructure.
What is AER-1?
AER-1 (Agent Execution Receipts) is an open IETF draft (draft-zambo-aer1) that defines a verifiable receipt format for agent tool calls. Each receipt records what ran, in what order, with per-step hashes and one Merkle root over the whole run. Anyone can verify it offline, or check it live at zambo.dev/verify.
Why this wins Track 02
Track 02 rewards agents that can explain themselves. A trace says "the model claims this ran." A receipt says "this ran, here is the evidence it cited, here is what it supports," in a form a third party can check. That is the whole track, and this kit gives it to you in three lines.
Quickstart (3 steps)
1. Clone and install (no dependencies, no API keys):
git clone <this-repo>
cd aer1-hackathon-kit
pip install .
2. Add three lines to your agent:
from aer1kit import ReceiptEmitter
emitter = ReceiptEmitter(goal="what my agent is trying to do")
# after every action your agent takes:
emitter.record("web_search", {"query": "...", "results": [...]})
emitter.record("send_email", {"to": "...", "subject": "..."})
# at the end of the run:
url = emitter.mint() # live verifiable receipt, free, no signup
print(url) # https://zambo.dev/run/<id> - share it with the judges
3. See it work:
python demo.py
The demo runs a scripted research agent (no API keys needed), prints the human-readable "why" explanation, verifies the receipt offline, and mints a live receipt you can open in a browser.
What record() captures
Each call records one receipt step:
tool: short label for the action (web_search,book_flight, ...)evidence: dict of what the action observed or produced. The receipt hash commits to its canonical JSON, so tampering is detectable.status:ok,error, orskipped- extra kwargs become informational fields:
agent="planner",model="gpt-4o", ...
The "explain why" helper
print(emitter.explain(final_answer="..."))
Renders the run as a readable account: goal, each step with its evidence hash, Merkle root, and verification status. Paste it into your demo or your submission writeup.
Verifying receipts
- Offline:
emitter.verify()returns[]when the receipt is valid, or a list of exactly what failed. - Live: paste any receipt JSON at zambo.dev/verify.
- Try it now: run any call at zambo.dev/demo and inspect the receipt it produces.
Files
aer1kit/emitter.py- the whole kit. Stdlib only, no dependencies.examples/explain_why_agent.py- a complete Track 02 example agent.demo.py- one-command demo ending in a live receipt URL.tests/- offline verification tests.
Links
- Hackathon: https://hackathon.genai.works/event/open-agent-hackathon-2026
- Live demo: https://zambo.dev/demo
- Live verifier: https://zambo.dev/verify
- AER-1 IETF draft: https://datatracker.ietf.org/doc/draft-zambo-aer1/
License
Apache-2.0
Metadata
Release files for aer1kit 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| aer1kit-0.1.0.tar.gz | 8.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| aer1kit-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 16.4 kB
Release files / aer1kit-0.1.0.tar.gz
| Download URL | aer1kit-0.1.0.tar.gz |
|---|---|
| Size | 8.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6744b99038639aadbfac18b1b73f3668cc797e90121643abaea49df719c43222
|
|
BLAKE2b-256 checksum How to use checksums |
0cc07ae32dfeab033c7cac344655954cc8e27783af2b46a553c397fbeff55416
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
rambo-pypi-grab/0.1.0
|
Release files / aer1kit-0.1.0-py3-none-any.whl
| Download URL | aer1kit-0.1.0-py3-none-any.whl |
|---|---|
| Size | 7.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9d37317369c8962eb8e6d8671b2f5b2e9d167aab297bf24ded8b955ca006a5ef
|
|
BLAKE2b-256 checksum How to use checksums |
46f095d1c3a0deef2ca30b02804683faf129983ef064a75746d99dcb057fbb88
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
rambo-pypi-grab/0.1.0
|