Receipt — sign an agent's work, verify it offline

io.github.ecstatica由 GitHub 帳號 ecstatica 發布v1.1.0更新於 Oct 30, 2026

Ed25519 receipts over work artifacts: issue and verify offline, no account, no chain, no network.

已驗證Streamable HTTP可網頁執行開發者工具安全與監控

概覽

AI 產生的概覽

簽發與驗證 Ed25519 收據,把代理、任務和檔案綁在一起,任何人都能離線確認產物未被更動。

可以做什麼
  • 以 Ed25519 收據為產物簽章,回傳包含產物雜湊、代理、任務、金額與簽章的 JSON
  • 離線驗證收據的簽章、各欄位,並可選擇核對產物雜湊;一旦有更動即回傳失敗原因
適用情境
適用於代理交付檔案後,買方或審核者需要獨立、離線的證據,證明檔案確實由該代理產出且之後未被修改。它不評估工作品質,也不證明身分歸屬。
執行需求
可作為遠端端點或本機程序執行;本機 MCP 伺服器是 Python 腳本,需要 Python 3.10 以上與 cryptography 套件。驗證不需帳號、API 金鑰或網路存取。
安裝前請注意
簽發收據需要 Ed25519 私鑰檔案,應妥善保管並限制檔案權限。收據只證明某把金鑰在某個時間以這些欄位簽署了產物雜湊,並不證明工作品質,也不證明該金鑰屬於某個特定的人。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Receipt — sign an agent's work, verify it offline,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.ecstatica%2Fggbank-receipt/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "receipt-sign-an-agent-s-work-verify-it-o": {
      "type": "http",
      "url": "https://receipt.whirlwindcorp.com/mcp"
    }
  }
}

README

receipt

Sign the work your agent did. Let anyone verify it offline.

A receipt binds an agent, a task and a file with an Ed25519 signature. Verification needs no account, no chain, no network and no permission from us. Change one character of the file or one field of the receipt, and verification fails.

This is the smallest useful thing in the agent economy: the payment rails arrived before the proof rails. x402 passed 138 million payments while most agent jobs remain unfunded and unevaluated by anyone independent.

Install

bash
git clone https://github.com/ecstatica/ggbank-receiptcd ggbank-receiptpython3 -m pip install --user cryptography

No dependency beyond cryptography. Python 3.10+.

Use

bash
# 1. your agent's key (Ed25519, private key mode 0600)python3 receipt.py keygen --out ~/.agent.key
# 2. sign a receipt over the artifact the agent deliveredpython3 receipt.py issue \  --key ~/.agent.key \  --artifact report.pdf \  --task q-1042 \  --agent VOID-9 \  --amount 25 \  --out q-1042.receipt.json
# 3. anyone can verify it, offlinepython3 receipt.py verify --receipt q-1042.receipt.json --artifact report.pdf
OK   signature valid · issuer QRs56MmYfzwtOAih…OK   artifact matches 04002a7e5527bbad…     deliver · VOID-9 · task q-1042 · 25.0 GG · 2026-10-25T11:56:24Z

Send the receipt with the file. The buyer runs one command and knows the file is the one that agent produced and has not changed since.

What it proves, and what it does not

Proves: this key signed this artifact hash with these fields at this time, and nothing has changed since.

Does not prove: that the work is good, or that the key belongs to a particular human. Quality is a separate judgement; identity is a separate claim.

Use it as an MCP server (what agents actually call)

mcp_server.py speaks JSON-RPC over stdio — the protocol Claude Code, Cursor, Codex, Hermes and most agent frameworks already speak. Two tools: issue_receipt, verify_receipt. No network, no dependencies beyond cryptography.

json
{"mcpServers": {"receipt": {"command": "python3", "args": ["/abs/path/mcp_server.py"]}}}
{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"issue_receipt", "arguments":{"artifact_path":"/tmp/report.pdf","agent":"VOID-9","task":"q-1042","amount_gg":25}}}→ {"ok": true, "receipt": {...}}

Verified round trip: issue_receipt → verify_receipt returns ok: true; change the amount and it returns ok: false, reason: "signature: InvalidSignature".

What a receipt contains

json
{ "spec": "ggbank.receipt/1", "verb": "deliver", "agent": "VOID-9", "task": "q-1042", "artifact": {"name": "report.pdf", "sha256": "04002a7e…", "bytes": 18422}, "amount_gg": "25.000000", "fee_gg": "0.125000", "issued_at": "2026-10-25T11:56:24Z", "issuer": "<base64 public key>", "nonce": "…", "signature": "<base64>"}

Canonical JSON (sorted keys, no whitespace) is signed, so the signed bytes are reproducible in any language. Money fields are decimal strings, never floats.

Tamper detection, tested

bash
python3 receipt.py verify --receipt tampered.json     # FAIL signature: InvalidSignaturepython3 receipt.py verify --receipt good.json --artifact edited.pdf                                                      # FAIL artifact: hash mismatch

Licence

MIT.

來源:README.md,提交 a0266f2

工具

2

issue_receipt

Sign an artifact with an Ed25519 receipt. Returns the receipt JSON: artifact hash, agent, task, amount and a signature anyone can verify offline.

輸入參數task必填agent必填key_pathamount_ggartifact_b64artifact_nameartifact_pathartifact_text

verify_receipt

Verify a receipt offline: signature, every field, and optionally the artifact hash. Returns ok=false with the failing reason when anything has changed.

輸入參數receipt必填artifact_b64artifact_pathartifact_text

版本歷史

1
  1. v1.1.0最新Oct 29, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

    請在儲存庫或註冊中心條目中宣告授權條款。