webaesbyamin/agent-receipts

GitHub: webaesbyamin/agent-receipts

为 AI Agent 的每次操作生成可验证、不可篡改的加密签名收据,解决自主系统中「如何证明 Agent 确实做了它声称的事情」这一信任问题。

Stars: 0 | Forks: 0

# Agent Receipts **加密签名证明,证实 AI Agent 确实执行了它所声称的操作。** [![agent-receipts MCP server](https://glama.ai/mcp/servers/webaesbyamin/agent-receipts/badges/score.svg)](https://glama.ai/mcp/servers/webaesbyamin/agent-receipts) [![npm version](https://img.shields.io/npm/v/@agent-receipts/sdk.svg)](https://www.npmjs.com/package/@agent-receipts/sdk) [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](./LICENSE) Agent Receipts 是一个本地优先、开源的系统,用于为自主 Agent 的操作创建可验证、不可篡改的收据。每一个操作都经过 Ed25519 签名、内容哈希和链式链接 —— 无需托管的 API。可用作 MCP server、Node.js SDK 或 CLI。 ## 现实世界示例 我构建了 ModQuote —— 一个面向汽车维修店的多租户 SaaS。在开发过程中,我广泛使用 Claude Code 来审计和修复代码库。 问题在于:当出现问题时,我无法证明 Claude 接收了什么输入、它修改了什么,或者输出是否符合预期。 有了 Agent Receipts,现在每个 Claude Code 会话都会生成签名收据: - **Input hash(输入哈希)** 确切证明了 Claude 看到的代码内容 - **Output hash(输出哈希)** 确切证明了它生成的内容 - **Constraints(约束)** 能够捕捉延迟峰值或成本超出预算的情况 - **Chains(链)** 展示多步审计会话的完整序列 当修复未按预期工作时,我可以调出收据,验证签名,并查看确切的输入/输出哈希 —— 无需猜测,无需“Claude 肯定误解了”。 这就是日志和收据的区别。日志告诉你发生了什么。收据能证明发生了什么。 ## 快速开始:MCP Server 将 Agent Receipts MCP server 添加到你的 AI 工具配置中,每个操作都会自动获得加密收据。 ### Claude Desktop 添加到 `~/Library/Application Support/Claude/claude_desktop_config.json`: ``` { "mcpServers": { "agent-receipts": { "command": "npx", "args": ["@agent-receipts/mcp-server"] } } } ``` ### Claude Code 添加到你项目根目录的 `.mcp.json` 中: ``` { "mcpServers": { "agent-receipts": { "command": "npx", "args": ["@agent-receipts/mcp-server"] } } } ``` ### Cursor 添加到你项目根目录的 `.cursor/mcp.json` 中: ``` { "mcpServers": { "agent-receipts": { "command": "npx", "args": ["@agent-receipts/mcp-server"] } } } ``` ## 快速开始:SDK ``` npm install @agent-receipts/sdk ``` ``` import { AgentReceipts } from '@agent-receipts/sdk' const ar = new AgentReceipts() const receipt = await ar.track({ action: 'generate_report', input: { query: 'Q4 revenue' }, output: { total: 142000 }, }) console.log(receipt.receipt_id) // rcpt_8f3k2j4n... console.log(receipt.signature) // ed25519 signature ``` ## 快速开始:CLI ``` npx @agent-receipts/cli init # Generate signing keys npx @agent-receipts/cli keys # Show public key npx @agent-receipts/cli list # List all receipts npx @agent-receipts/cli verify # Verify a receipt signature ``` ## 工作原理 1. **Agent 执行一个操作** —— API 调用、代码生成、数据查找 2. **输入/输出进行 SHA-256 哈希** —— 原始数据不会离开你的机器 3. **创建收据** —— 操作、哈希、时间戳、Agent ID、元数据 4. **收据经 Ed25519 签名** —— 使用本地生成的私钥 5. **任何人都可以验证** —— 分享你的公钥;接收方独立验证 ## MCP 工具参考 MCP server 暴露了 14 个 AI Agent 可以直接调用的工具: | 工具 | 描述 | 关键参数 | |------|-------------|----------------| | `track_action` | 通过自动哈希跟踪 Agent 操作 | `action`, `input`, `output`, `constraints` | | `create_receipt` | 使用预计算的哈希创建收据 | `action`, `input_hash`, `output_hash`, `constraints` | | `complete_receipt` | 用结果完成待处理的收据 | `receipt_id`, `output`, `status` | | `verify_receipt` | 验证收据的加密签名 | `receipt_id` | | `get_receipt` | 通过 ID 检索收据 | `receipt_id` | | `list_receipts` | 列出收据(可选过滤) | `agent_id`, `status`, `chain_id` | | `get_chain` | 获取链中按时间戳排序的所有收据 | `chain_id` | | `get_public_key` | 导出用于验证的 Ed25519 公钥 | — | | `judge_receipt` | 启动对收据的 AI Judge 评估 | `receipt_id`, `rubric` | | `complete_judgment` | 用结果完成待处理的判定 | `receipt_id`, `verdict`, `score`, `criteria` | | `get_judgments` | 获取收据的所有判定 | `receipt_id` | | `cleanup` | 删除过期收据 (TTL) | `dry_run` | | `generate_invoice` | 从日期范围内的收据生成发票 | `from`, `to`, `format`, `agent_id` | | `get_started` | 显示包含使用示例的入门指南 | — | ## SDK API 参考 ### `new AgentReceipts(config?)` ``` const ar = new AgentReceipts({ dataDir: '~/.agent-receipts', // optional, defaults to ~/.agent-receipts }) ``` ### `ar.track(params)` — 跟踪已完成的操作 ``` const receipt = await ar.track({ action: 'analyze_data', input: { dataset: 'sales_2024' }, output: { summary: 'Revenue up 12%' }, agent_id: 'analyst-v2', chain_id: 'chain_abc', // optional, auto-generated if omitted parent_receipt_id: 'rcpt_prev', // optional, links to parent receipt }) ``` ### `ar.start(params)` — 启动一个待处理收据 ``` const receipt = await ar.start({ action: 'long_running_task', input: { job_id: '12345' }, }) ``` ### `ar.complete(receiptId, params)` — 完成待处理收据 ``` const completed = await ar.complete(receipt.receipt_id, { output: { result: 'done' }, status: 'completed', }) ``` ### `ar.verify(receiptId)` — 验证收据签名 ``` const { verified, receipt } = await ar.verify('rcpt_8f3k2j4n') // verified: true | false ``` ### `ar.get(receiptId)` — 通过 ID 获取收据 ``` const receipt = await ar.get('rcpt_8f3k2j4n') ``` ### `ar.list(filter?)` — 列出收据 ``` const result = await ar.list({ agent_id: 'my-agent', status: 'completed' }) // result.data: ActionReceipt[] // result.pagination: { page, limit, total, total_pages, has_next, has_prev } ``` ### `ar.getPublicKey()` — 获取签名公钥 ``` const publicKey = await ar.getPublicKey() // 64-char hex string (Ed25519 public key) ``` ### `ar.track()` 与约束 ``` const receipt = await ar.track({ action: 'generate_summary', input: { document_id: 'doc-q4-2024' }, output: { summary: 'Revenue grew 12% YoY...' }, latency_ms: 1200, cost_usd: 0.005, constraints: [ { type: 'max_latency_ms', value: 5000 }, { type: 'max_cost_usd', value: 0.01 }, { type: 'min_confidence', value: 0.8 }, ], }) // receipt.constraint_result.passed → true/false ``` ### `ar.getJudgments(receiptId)` — 获取判定 ``` const judgments = await ar.getJudgments('rcpt_8f3k2j4n') ``` ### `ar.cleanup()` — 删除过期收据 ``` const { deleted, remaining } = await ar.cleanup() ``` ### `ar.generateInvoice(params)` — 从收据生成发票 ``` const invoice = await ar.generateInvoice({ from: '2026-01-01', to: '2026-01-31', agent_id: 'my-agent', // optional filter group_by: 'agent', // optional: agent | action | day }) ``` ## CLI 参考 | 命令 | 描述 | |---------|-------------| | `init` | 创建数据目录并生成签名密钥 | | `keys` | 显示公钥 | | `keys --export` | 将公钥导出为 JSON | | `keys --import ` | 导入私钥 (64 个十六进制字符) | | `inspect ` | 美化打印收据 | | `verify ` | 验证收据签名 | | `verify --key ` | 使用外部公钥验证 | | `list` | 列出收据 (默认: 50) | | `list --agent --status ` | 按 Agent 或状态过滤 | | `list --json` | 输出为 JSON | | `chain ` | 显示链中的所有收据 | | `chain --tree` | 以可视化树状图显示链 | | `stats` | 显示汇总收据统计信息 | | `judgments ` | 列出收据的判定 | | `cleanup` | 删除过期收据 | | `cleanup --dry-run` | 预览将被删除的内容 | | `export ` | 将单个收据导出为 JSON | | `export --all` | 将所有收据导出为紧凑 JSON | | `export --all --pretty` | 将所有收据导出为格式化 JSON | | `invoice --from --to ` | 从日期范围内的收据生成发票 | | `invoice --format ` | 输出为 json, csv, md, 或 html | | `seed --demo` | 填充演示数据以进行测试 | | `seed --demo --count ` | 填充自定义数量的演示收据 | | `seed --demo --clean` | 在填充前删除所有收据 | | `watch` | 实时监听新收据 | | `watch --agent ` | 按 Agent、操作或状态过滤监听 | ## 收据格式 ``` { "receipt_id": "rcpt_8f3k2j4n", "chain_id": "chain_x9f2k", "parent_receipt_id": null, "receipt_type": "action", "agent_id": "my-agent", "org_id": "my-org", "action": "generate_report", "status": "completed", "input_hash": "sha256:abc123...", "output_hash": "sha256:def456...", "output_summary": "Generated Q4 report", "model": "claude-sonnet-4-20250514", "timestamp": "2026-02-07T14:32:01.442Z", "completed_at": "2026-02-07T14:32:02.100Z", "latency_ms": 658, "cost_usd": 0.003, "signature": "ed25519:" } ``` 输入和输出在客户端使用 SHA-256 进行哈希处理。原始数据永远不会离开你的环境。收据中仅存储哈希值。 ## 验证 与任何需要验证你收据的人分享你的公钥: ``` # Export your public key npx @agent-receipts/cli keys --export # Verify a receipt with an external public key npx @agent-receipts/cli verify receipt.json --key ``` 验证过程会根据收据的确定性字段重新计算 Ed25519 签名,并确认其与存储的签名匹配。无需网络请求 —— 完全离线。 ## 配置 | 环境变量 | 描述 | 默认值 | |---------------------|-------------|---------| | `AGENT_RECEIPTS_DATA_DIR` | 数据目录路径 | `~/.agent-receipts` | | `AGENT_RECEIPTS_AGENT_ID` | 默认 Agent ID | `local-agent` | | `AGENT_RECEIPTS_ORG_ID` | 组织 ID | `local-org` | | `AGENT_RECEIPTS_ENVIRONMENT` | 环境标签 (`development`, `production`, `staging`, `test`) | `production` | | `RECEIPT_SIGNING_PRIVATE_KEY` | Ed25519 私钥 | 自动生成 | ## 存储 所有数据本地存储在数据目录中: ``` ~/.agent-receipts/ ├── keys/ │ ├── private.key # Ed25519 private key (mode 0600) │ └── public.key # Ed25519 public key ├── receipts/ │ └── *.json # Legacy JSON files (auto-migrated) ├── receipts.db # SQLite database (primary storage) └── config.json # Agent and org configuration ``` 自 v0.2.7 起,收据存储在 SQLite 中,并通过索引查询实现快速过滤和分页。现有的 JSON 收据文件会在首次启动时自动迁移。 ## 架构 ``` ┌─────────────────────────────────────────────┐ │ CLI │ │ @agent-receipts/cli │ ├─────────────────────────────────────────────┤ │ SDK │ MCP Server │ │ @agent-receipts/sdk │ @agent-receipts/ │ │ │ mcp-server │ ├──────────────────────────┴──────────────────┤ │ Crypto + Schema │ │ @agent-receipts/crypto @agent-receipts/ │ │ schema │ └─────────────────────────────────────────────┘ ``` - **schema** — Action Receipt Protocol 的 Zod schemas、TypeScript 类型、JSON Schema - **crypto** — Ed25519 密钥生成、签名、验证、规范序列化 - **mcp-server** — 带有收据引擎、存储和密钥管理的 MCP 协议服务器 - **sdk** — 封装引擎的高级 Node.js SDK - **cli** — 用于检查、验证和管理收据的命令行工具 - **dashboard** — 用于可视化和管理收据的 Mission Control Web UI ## Dashboard (Mission Control) 可视化你系统中的每一个收据、链、Agent、约束和判定。 ``` npx @agent-receipts/dashboard ``` 在 http://localhost:3274 打开 Mission Control —— 可视化、验证和管理所有收据。 功能:实时收据流、链可视化、约束健康监控、判定分数、签名验证、发票生成、暗黑模式、全局搜索。 13 个页面:Overview, Receipts, Receipt Detail, Chains, Chain Detail, Agents, Agent Detail, Constraints, Judgments, Invoices, Verify, Settings, How It Works。 ## 示例 | 示例 | 描述 | |---------|-------------| | [`examples/basic`](./examples/basic) | 带验证的简单操作跟踪 | | [`examples/chained`](./examples/chained) | 带父/子收据链接的多步骤 pipeline | | [`examples/pipeline`](./examples/pipeline) | 带链式收据的文档分析 pipeline | | [`examples/constraints`](./examples/constraints) | 带通过/失败规则的约束验证 | | [`examples/judge`](./examples/judge) | 带评分标准的 AI Judge 评估 | | [`examples/ttl`](./examples/ttl) | 收据 TTL 和清理 | ## 包 | 包 | 描述 | |---------|-------------| | `@agent-receipts/schema` | Action Receipt Protocol 的 Zod schemas 和 TypeScript 类型 | | `@agent-receipts/crypto` | Ed25519 签名、验证和密钥管理 | | `@agent-receipts/mcp-server` | 带收据引擎和存储的 MCP 协议服务器 | | `@agent-receipts/sdk` | 用于跟踪和验证收据的高级 Node.js SDK | | `@agent-receipts/cli` | 用于管理收据的命令行工具 | | `@agent-receipts/dashboard` | Mission Control Web UI — `npx @agent-receipts/dashboard` | ## 路线图 - [x] 本地优先收据存储 (SQLite 带索引查询) - [x] Ed25519 签名和验证 - [x] 带有 14 个工具的 MCP server - [x] Node.js SDK - [x] 带完整命令集的 CLI - [x] 约束验证 (6 种内置类型) - [x] 带基于评分标准评估的 AI Judge - [x] 输出 schema 验证 - [x] 收据 TTL 和清理 - [x] 发票生成 (JSON, CSV, Markdown, HTML) - [x] Mission Control dashboard (13 个页面,暗黑模式,搜索) - [x] Dashboard npm 包 — `npx @agent-receipts/dashboard` - [x] 在线演示地址 [agent-receipts-web.vercel.app](https://agent-receipts-web.vercel.app/) - [ ] 收据锚定到区块链/时间戳服务 - [ ] 多 Agent 收据共享协议 - [ ] 收据压缩和归档 - [ ] 带云数据库的托管层 ## 开发 ``` pnpm install pnpm build pnpm test pnpm dev ``` ## 许可证 MIT — 详见 [LICENSE](./LICENSE)
标签:AI安全, Chat Copilot, Claude桌面, CVE, Ed25519, ETW劫持, MCP服务器, MITM代理, Node.js SDK, SaaS工具, 人工智能代理, 内容哈希, 区块链链式结构, 可验证性, 威胁情报, 完整性保护, 密码学, 开发者工具, 手动系统调用, 数字签名, 日志记录, 本地优先, 自动化攻击, 行为审计, 证据保全, 防篡改, 零基础设施