2026年8月31日 2 分钟阅读

两台电脑上的 AI Agent 如何互相派活?a2acast 用加密消息和 A2A 把它们连起来

tinyash 0 条评论

当编码 Agent 都在同一台电脑上时,交接任务并不难:共享一个 Git 仓库、开几个终端,或者让一个编排器负责调度即可。真正麻烦的是跨机器协作。笔记本上的 Claude Code 想让台式机跑一组测试,Mac 上的 Codex 想把任务交给办公室 Windows 电脑,传统做法往往意味着开放端口、配置 VPN、维护一个中转服务,最后还要处理不同 Agent Harness 的唤醒方式。

a2acast 是一个很小但定位明确的方案:用一个标准库 Python 文件和 ntfy 中继,把不同机器上的 AI Agent 组成加密消息网。它不要求自建服务器,不要求公网入站端口,也不把任务强行绑定到某一家模型或 Agent 平台。更重要的是,它把“发消息”和“派 A2A 任务”放在同一套命令行接口里,适合已经有多台开发机器、又不想先搭一套控制平面的开发者。

一分钟建立两台机器的消息网

项目 README 给出的最短路径是:在机器 A 安装并初始化网格,然后把初始化命令打印出的代码私下交给机器 B。

uv tool install a2acast
mesh init home

python3 mesh.py join mesh1-XXXX...

实际使用时,机器 B 可以通过 uvpipx 安装正式包;README 也展示了从仓库下载单文件的开发版本。mesh initmesh join 完成后会进入 watcher,节点会用主机名加入网格。若在脚本或没有 TTY 的 Agent 环境中调用,则保持立即返回的行为,不会因为启动监听器而卡住自动化流程。

节点之间不需要预先登记机器清单。建立连接后,可以广播消息、按节点名称发送消息,或者测试往返延迟:

mesh send all "hello mesh"
mesh ping 
mesh ask  "run the tests and summarize failures" --wait 300

mesh send 适合发“我已经推送了某个分支”这类通知;mesh ask 则是带任务 ID 的请求。接收端可以用 mesh reply "" 返回结果,任务记录还能通过 mesh tasks 查看。这个分层很实用:普通同步不必伪装成复杂 Agent 调度,真正需要远端执行时才升级成可追踪的任务。

它解决的不是“远程执行”,而是消息传递

a2acast 的默认网络路径是两端主动连接 ntfy 中继的 HTTPS 出站连接。主题名由网格密钥和节点名派生,消息正文在发送前加密,因此中继看到的是密文、主题标识、大小和时间信息,而不是任务内容。两台处于 NAT 后面的电脑因此不需要端口转发、VPN 或自建公网服务器。

这也带来一个必须说清楚的边界:它默认只是消息和任务传输层,不会替你取得远端 Agent 的权限。交互式节点收到任务后,使用的是自己所在机器上的模型、工具和权限。换句话说,a2acast 让任务抵达另一台机器,但不等于凭空创造了一个安全的远程 Shell。

项目采用 Python 标准库实现,README 描述的消息保护包括 HKDF-SHA256 密钥派生、HMAC-SHA256、独立认证密钥、随机 128 位 nonce,以及对网格 ID、relay topic 和时间戳的绑定。过期、篡改、错路由和重放的消息会被丢弃。消息大小也有现实限制:小于中继约 4 KB 的内容走普通保留,大消息通过附件传输,离线超过约 3 小时可能只收到唤醒而收不到正文。需要长期保存的内容应该放进 Git 仓库或其他持久化通道,而不是把大段日志塞进消息。

接入 Claude Code、Codex 和 Copilot

a2acast 的价值不只在 mesh send。它为不同 Harness 提供了插件和设置命令,把“收到消息后提醒 Agent”这一步接入各自的生命周期:

/plugin marketplace add husker/a2acast
/plugin install a2acast
mesh claude-setup

codex plugin marketplace add husker/a2acast
codex plugin add a2acast@a2acast
mesh codex-setup

copilot plugin marketplace add husker/a2acast
copilot plugin install a2acast@a2acast
mesh copilot-setup

Claude 和 Copilot 可以唤醒空闲会话来处理 MESH_TASK;Codex 没有同样的进程内唤醒路径,项目因此提供了可选的 supervisor。启用它需要显式运行 mesh codex-setup --supervise,再用 mesh codex-allow 添加允许执行任务的节点。默认 allowlist 为空,两个动作缺一不可,这比“所有加入网格的节点都能执行代码”安全得多。

Copilot 的实现方式也不同:mesh copilot-setup 会把 watcher 配置成项目级 MCP 服务,写入 .github/mcp.json。这样 Copilot 可以在会话期间启动和停止 watcher,并通过 MCP sampling 唤醒空闲会话。它不是把后台进程粗暴塞进终端,而是利用 Copilot 已有的 MCP 生命周期;首次使用时,用户可能需要批准 sampling。

A2A 桥接让它不局限于 CLI

如果团队已经在使用 LangGraph、Google ADK 或 Microsoft Agent Framework,仍然可以利用 a2acast 的跨机器网络。mesh a2a-serve 会启动一个本地桥接服务,为远端节点暴露本机地址,例如 /agents/,并提供 agent card、message/sendtasks/get 等 A2A 风格接口:

mesh a2a-serve

这里的设计取舍是“本地桥接、远端消息”。a2acast 不把每台电脑变成公网 A2A 服务,而是让本地框架通过 localhost 访问桥接层,再由桥接层把任务送进加密网格。对已有 Agent 框架的团队来说,这比重写一套 transport adapter 更容易试用。

安全上最容易忽略的三件事

第一,join code 就是网格密钥的交付方式。README 明确提醒:它和机器上的 .meshwire.json 都必须保护好,配置文件会使用 0600 权限,join code 应通过私密渠道传递,不要贴到公共聊天或工单里。

第二,加密认证的是“持有网格密钥的成员”,不是某个具体用户或对话。拿到 join code 的成员可以解密流量、发送经过网格认证的消息,并声称某个 sender name。因此,收到任务后仍应使用 Agent 自己的权限规则进行判断,不能把“来自加密网格”误认为“业务上已获授权”。

第三,Codex supervisor 的 allowlist 按 sender-name 字符串授权,而不是按一次对话或密码学会话授权。它默认使用只读沙箱进行纵深防御,但只读并不代表不会读到仓库里的秘密,更不代表不能把秘密放进回复。因此,只有在明确知道对端是谁、任务内容可信时,才应该开启自动执行。

若 join code、配置文件或成员机器已经泄露,应在可信节点执行 mesh rotate-key,再把新生成的轮换命令通过私密渠道交给其他可信节点。项目文档还强调,单独的进程、临时密钥目录或 Git worktree 不是同一 OS 用户下的安全边界;真正需要隔离共置 Agent 时,应使用不同 OS 账户或沙箱。

从“通知”到可复现交接

跨机器协作最容易失败的地方,不是消息能不能送达,而是消息送达后双方是否知道下一步是什么。建议把消息写成可执行的交接记录:先说明仓库和分支,再写任务边界、验证命令和回传格式。例如,不要只发“帮我看看登录问题”,而是发送“请在 auth-fix worktree 运行测试,整理失败用例,不要修改主分支,完成后返回失败数量和日志摘要”。远端 Agent 的回复也应尽量包含状态、证据和下一步,而不是只返回一句“已完成”。

对于需要传输较长日志的任务,可以让 Agent 把原始输出留在共享仓库,再通过 a2acast 只发送提交哈希、文件路径和摘要。这样既绕开约 4 KB 的内联消息限制,也让结果能被复查。若对端离线,发送者要考虑附件的约 3 小时 TTL;不能把“消息已经发出”当成“任务一定会被完整接收”。在重要任务上,保留 mesh tasks 的任务记录,并在收件端再次确认目标节点名称,避免把结果发给 all 广播频道。

适合什么团队

如果需求只是“让 CI 在远程机器上跑测试”,a2acast 可能显得过于面向 Agent;如果需求是企业级审计、集中凭据、细粒度身份和长期任务队列,它又不是完整控制平面。但对个人开发者、小团队和多台工作站而言,它填补了一个具体空档:不自建服务,也能让 Claude Code、Codex、Copilot 或其他 A2A 客户端互相通知、询问和交接任务。

最稳妥的落地方式是先只启用 mesh sendmesh pingmesh tasks,确认节点命名、密钥保管和消息大小都符合预期;第二阶段再接入插件;最后才考虑 codex-supervise 这类自动执行能力。把消息网络、Agent 权限和代码执行三个层次分开,才能让“跨机器协作”成为效率提升,而不是新的隐形远程执行入口。

相关链接

发表评论

你的邮箱地址不会被公开,带 * 的为必填项。