Sentō 是第一个把智能体到智能体(A2A)消息作为一等功能内置的智能体框架。两个智能体配对一次,交换共享密钥,从那以后就能通过 HTTP 互发签名消息。
没有中心服务器。没有发布/订阅 broker。没有托管目录。就是两个 Linux 进程各自带 HTTP endpoint 和一个共享 HMAC secret。
为什么要这个
真实用例:
- Mira(市场)需要 Kai(个人)的数据:Mira 给 Kai 发消息,"Gabriel 这周提了什么任务?" Kai 用相关记忆回复。
- Blair(家务)提醒 Porter(信件处理):Blair 看到学校关于新表格的消息;Porter 处理扫描和归档。
- 负载均衡:一个智能体把子任务传给另一个专门的智能体。
没有 A2A,每次协调都需要你当桥梁。有了这个,智能体能直接合作。
配对怎么工作
# 在智能体 A
sento pair
→ 智能体打印一个代码:SENTO-4F2K
→ 智能体说"让另一个智能体的主人运行 `sento pair SENTO-4F2K`"
# 在智能体 B
sento pair SENTO-4F2K
→ A 的主人在聊天里看到:"智能体 B 想要配对。批准?(yes/no)"
→ A 的主人打:yes
→ 两个智能体交换 HMAC secret
→ 配对存到两边的 ~/.sento-config.json
现在 A 和 B 能通过 HTTP 互发消息。
传输
每个智能体的 Guardian 跑一个 HTTP listener,在自动选的端口上(9876、9877、9878…)。消息是 POST 请求,带:
X-Sento-Signature:body 用共享 secret 做的 HMAC-SHA256X-Sento-Timestamp:RFC3339 时间戳,超过 5 分钟被拒- 速率限制:每对 10 请求/分钟,超过就是 429
送到的消息被 pipe 进目标智能体的 tmux session,就像是标了 ← agent <名字> 的入站聊天消息。
安全模型
- 双方同意:配对需要接收方智能体的 主人 在聊天里批准。智能体不能自动接受。
- HMAC 签名:没有共享 secret 伪造的消息被拒。
- 时间戳窗口:重放攻击 5 分钟后失败。
- 速率限制:行为不当或被攻陷的智能体不能淹掉另一个。
- 只听你批准过的配对:未知发件方在 HTTP 层就被丢,Claude Code 都看不到。
列出和解除配对
sento agents # 列已配对智能体 + 端口 + 最后联系时间
sento agents remove kai # 撤销一个配对;轮转我们这边的 secret
能发什么消息?
任何文本。常见模式:
- 问答("HN 最新的头条是什么?")
- 结构化任务移交("请扫描这张发票:<路径>")
- 状态 ping("你在吗?")
目标智能体像收到普通入站消息一样收到文本,像对一个人类主人那样回应,除了回应通过 A2A 通道走而不是 Discord/Telegram/Slack。
在哪里读代码
src/templates/guardian.js—— HTTP server 实现src/commands/pair.js—— 配对流程src/commands/agents.js—— 列表 + 移除