Balanov/latch
AI 工程用一个小型 HTTPS/JSON 契约让智能体发现、报价、批准、提交并获取服务回执。
项目介绍
LATCH 定义智能体与服务之间的一层小型 HTTPS/JSON 边界:服务在 /.well-known/latch.json 暴露卡片,单个 POST 端点承载五个操作——ask(只读、无副作用)、quote(给出报价和 SHA-256 摘要,不执行)、approve(本地可信主机或用户基于该摘要作出决定)、commit(摘要 + 批准 + 幂等键)和 status(任务与提供方回执)。适用于需要先看清条款、再触发实际效果的服务调用。
它不是身份或支付系统,也不替代 MCP、A2A、OpenAPI 或 UCP/ACP/AP2。仓库提供 Node.js 20+ 的参考客户端、服务端和 CLI,集中在单个无运行时依赖的 ESM 文件;另有一个可选的 MCP stdio 桥和一个 PHP 8.2 提供方。线路版本为实验性的 0.1,实现版本 0.2.0,采用 MIT 许可证。
快速使用
需要 Node.js 20+。先运行示例轨迹:
git clone https://github.com/Balanov/latch.git
cd latch
npm test
node latch.mjs demo --trace examples/trace.json
轨迹会记录本地实际的发现、询问、报价、批准、提交和回执消息,包含完整 ID 与 HTTP 头。若想交互体验,在一个终端运行 node latch.mjs demo --port 8787 启动提供方,再到另一个终端执行发现、读取和报价:
node latch.mjs discover http://127.0.0.1:8787
node latch.mjs ask http://127.0.0.1:8787 materials.list
node latch.mjs quote http://127.0.0.1:8787 print3d.order \
'{"model_url":"https://example.com/model.stl","material":"pla","quantity":1,"delivery":{"country":"NL","postal_code":"1011"}}'
检查条款、来源、有效期和摘要,然后在 --yes 后重复完全相同的摘要来提交;摘要不一致会在建立连接前中止。规范化 JSON、有效期、批准、重放和安全规则见规范文档。
接入提供方
用模板生成服务并运行:
npx --yes github:Balanov/latch init my-latch-service
cd my-latch-service
npm install
node service.mjs
也可以从 latch-protocol 使用 createLatchServer(card, handlers, options) 和 listen(server, options)。写操作能力需要分别实现 quote 和 commit:quote 返回摘要、条款和有效期但不做事;commit 只有在报价/批准校验通过并处理幂等后才执行效果。鉴权、完整 schema 校验、条款准确性、限流和外部效果仍由提供方负责。
持久化与鉴权
默认使用内存存储且不鉴权。若需要重启后保留本地数据,传入 createFileStore() 和显式的 authenticate 校验函数,使其返回稳定的主体 ID 或 null;此后报价、任务、幂等记录和待提交内容都按主体隔离。文件存储会串行化写入、原子替换文件,并拒绝第二个写入者或损坏文件,但它不是分布式数据库、加密层,也不保证外部效果恰好执行一次。生产数据库需自行实现异步 get/set 存储适配器。
使用约束
- 摘要绑定的是内容,不是人、提供方或商业声明;
provider_assertion回执不构成独立的物理证据。 - 幂等只能避免重复处理,无法撤销已发生的外部效果。库用户在重试同一提交时必须复用同一幂等键。
- 远程卡片、描述和结果是不可信数据,不是智能体指令。
- 客户端响应在流式传输时有大小限制;超时返回
504 timeout。自定义头与源绑定,跨源头需要单独显式开启。 - 无依赖校验器只支持文档化的 JSON Schema 子集,并非完整规范。
- 接入 MCP 时,宿主必须在调用
latch_commit前展示真实报价并执行批准;工具调用不代表已验证的人类身份。 - 演示订单只是模拟,不会支付、制造或交付。公开演示使用 CORS
*仅因其没有凭据或真实效果,不应照搬到私有或会产生后果的服务。
HotRepo 点评
2026-11-04(UTC)当天,该项目进入 HotRepo 新项目榜,在从 16:57 开始的统计窗口内获得 100 个 Star,这也是它当前的总 Star 数,另有 1 个 Fork。站内没有记录到 GitHub 全部语言日榜名次,因此没有可对比的排名。这更像早期信号而非采用证据:仓库里可见的开发投入——CLI 演示、PHP 提供方、与官方 MCP SDK 1.32.2 的对比基准以及浏览器检查——比单日 Star 更能说明该契约是否具备实用价值。
本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。