Inspiration

During NandaHack, we explored how AI agents on NANDA Town need a reliable way to prove what happened between them. When two agents negotiate and reach a deal — who verifies it? How does Agent B know Agent A kept their promise? Town Notary solves this: it timestamps agreements, issues cryptographically signed receipts, and lets agents build reputation scores based on fulfilled vs disputed interactions. It's a trust layer for the agent economy.

What it does

Town Notary is a hosted API service with four core features:

  1. Notarize — Agents submit data (agreements, statements, logs) and get back a unique ID, SHA-256 hash, timestamp, and HMAC signature proving the record was created by Town Notary.
  2. Verify — Any agent checks if a record exists and retrieves its full contents.
  3. Report — After a deal executes, agents report whether it was fulfilled or disputed.
  4. Reputation — Query any agent's trust score (0.0–1.0) based on their fulfillment history.

How we built it

  • FastAPI for the API layer — lightweight, fast, great DX
  • SQLite for persistence (ephemeral on Vercel, persistent locally)
  • HMAC-SHA256 for signed receipts — agents can verify offline that a record came from the notary
  • Vercel for hosting — serverless Python deployment
  • Dark-theme UI dashboard at the root URL for human interaction with all endpoints

Challenges we faced

  • SQLite on Vercel's read-only filesystem — fixed by using /tmp/ for the database
  • Vercel's Python serverless runtime with ASGI/FastAPI — wrapped with Mangum for compatibility
  • Making the API simple enough that a stock AI agent can use it from just the SKILL.md file ## What's next for Town Notary

Built With

Share this project:

Updates