Agent Action Receipt

A small proof protocol for real tool access

A receipt for every action that matters.

Bind the request, authority, outcome, and signing key into a hash-chained record—without retaining raw tool arguments or results.

Local-first · no prompts stored · no hosted ledger · MIT

Paper-cut layers show an action card becoming a sealed, linked receipt.
Every layer carries forward.

“The tool may have succeeded. The audit log may have failed.”

Make that split explicit, instead of reconstructing it after an incident.

The protocol

Two slips, one accountable action.

A prepared receipt is filed before the tool runs. A signed final receipt follows—or an unresolved outbox item does.

  1. 01

    Prepare

    Hash the authority and arguments; append a signed intent receipt before the side effect.

  2. 02

    Execute

    Run your tool unchanged. Results and failures become hashes, not raw payloads.

  3. 03

    Finalize

    Append the outcome. If persistence fails after success, surface a durable outbox item.

Browser-only sandbox

File a sample action.

Nothing leaves this page. The sample records only hashes in memory, then verifies the linked chain.

Ready to file a new action.

No receipts yet

File a sample action to see its two linked slips.

One small surface

Wrap the call—not your whole agent.

Bring your own Ed25519 signer backed by an OS keychain or KMS. The package never handles private-key storage.

npm install @sociobot/agent-action-receipt

const ledger = createReceiptLedger({ signer, actor });
const action = await ledger.execute({ tool, authority, args, run });

await ledger.drainOutbox();
verifyBundle(ledger.exportBundle());

Honest boundaries

Evidence, not magic.