Skip to main content

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, or skipped
  • 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.

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)

Source distribution for aer1kit 0.1.0
File Size Uploaded
aer1kit-0.1.0.tar.gz 8.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for aer1kit 0.1.0
File Interpreter ABI Platform
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

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page