news 2026/10/2 8:16:14

OpenRig cross-host架构深度解析:在多台机器上运行一个Agent团队

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OpenRig cross-host架构深度解析:在多台机器上运行一个Agent团队

OpenRig cross-host架构深度解析:在多台机器上运行一个Agent团队

【免费下载链接】openrigMulti-agent harness that runs Claude Code and Codex together as one system项目地址: https://gitcode.com/GitHub_Trending/op/openrig

OpenRig 是一个开源的多智能体运行框架(multi-agent harness),能把 Claude Code 与 Codex 组合成一支可持久化、可恢复、可观测的 Agent 团队。它的 cross-host(跨主机)架构更进一步:让你把这支 Agent 团队拆开放到多台机器上运行,却仍然像一个统一系统那样协调、寻址和通信。

一、为什么 Agent 团队需要多台机器

单台机器运行多个 Agent 会遇到三个瓶颈:

  • 🖥️资源挤占:多个模型会话同时编译、测试,CPU 和上下文窗口互相争抢;
  • 🌐环境割裂:有的 Agent 需要 macOS 环境,有的更适合 Linux 服务器;
  • 🔒隔离不足:不同权限、不同密钥的 Agent 挤在同一台机器上,信任边界模糊。

OpenRig 的单机模型是:一份 YAML 拓扑(RigSpec)→rig up一条命令启动 → 每个 Agent 一个 tmux 会话,由本地 Daemon(HTTP 服务 + SQLite)统一管理。TUI 里可以直接看到团队全貌:

cross-host 架构在这个模型之上只做一件事的扩展:把"一台机器上的一个 Daemon"变成"N 台机器上的 N 个 Daemon,外加一张把它们连起来的注册表"。

二、三层骨架:本地 Daemon、主机注册表与传输通道

层次职责关键实现
本地控制面每台主机独立运行自己的 OpenRig Daemon、SQLite 数据库与 tmux 会话,并持有一个 daemon 端铸造的selfHostIdserver.ts
主机注册表记录"我的对等机器是谁":主机别名、传输方式、认证指针host-registry.ts
传输通道跨主机执行 rig 命令:HTTP 直连或 SSH 单跳中继cross-host-executor.ts

注意"每个容器/主机一个 Daemon、本地数据库、本地 HOME,唯一共享面是网络"这条原则——它保证了任何一台机器宕机都不会污染其他主机的状态。

三、一行命令注册远程主机:rig host 速览

主机注册表就是主机之间的"通讯录"。常用动词:

rig host add --id <主机id> --transport http --url http://B:7433 --bearer-env TOKEN_ENV rig host ls --json # 查看已注册主机 rig host select <id> # 持久化"当前主机"指针(类似 kubectl 的 current-context) rig host doctor # 分步体检:连通性、认证、daemon 可达性 rig host pair # 双向配对握手

两条值得记住的设计细节:

  • 🚫保留字:kernel、host、local以及虚拟域令牌永远不能被注册为主机别名,避免寻址歧义(见 host-registry.ts 的RESERVED_HOST_IDS);
  • 🔐密钥卫生:注册表里只存认证指针(环境变量名或文件路径),任何代码路径都不会把 token 明文落盘。

四、两种传输方式:HTTP 直连与 SSH 单跳

HTTP 直连

Daemon 以 HTTP 暴露后,注册表记录url+ bearer 指针即可。这里有一道强制护栏:Daemon 一旦绑定非 loopback 地址,必须同时配置OPENRIG_AUTH_BEARER_TOKEN,否则拒绝启动——跨网络可达性与鉴权是耦合在一起的。

SSH 单跳

适合没有开放端口的场景。执行器通过一次 ssh 调用在远端跑sh -lc "rig ...",并且刻意区分五种失败模式,让你知道该修哪一层:

failedStep含义你该做什么
ssh-unreachable连不上远程 shell修 SSH
permission-gate认证被拒修 bearer/权限
remote-daemon-unreachable到了远端但 Daemon 不可达修远端 Daemon
remote-command-failed命令执行返回非零修远端 rig
remote-command-not-found远端找不到rig修远端 PATH/安装

把"修 SSH"和"修远端 Daemon"混成一个 failed,是多数多机系统的通病;OpenRig 在 cross-host-types.ts 中把它们显式拆开了。

五、跨主机寻址:三段式地址 seat@rig@host

OpenRig 里的座位地址是成员@rig(如dev-owner@first-project)。cross-host 加了一段主机限定:

rig send dev-main@rig-b@B "ping" --host B

解析规则很克制(见 cross-host-target.ts):

  • 形如X@Y@Z且Z恰好是已注册主机 id → 拆成target=X@Y、host=Z;
  • Z不是已注册主机 → 原样透传并响亮报错,绝不下沉成静默歧义;
  • 优先级:显式--host> 目标糖语法 >rig host select持久化选择;同一命令里两者冲突会直接报错。

六、身份三重奏:跨主机消息如何精确回家

跨主机协作最容易出 bug 的是"回信"。OpenRig 用身份三重奏成员@rig@selfHostId解决:

  1. id 是读的,不是猜的:每台主机的selfHostId由 daemon 端铸造、存为永不改写的单例,你只能从/healthz捕获它(L5 runbook 明确要求 "adopt-by-read");
  2. 发送即盖章:跨主机 send 会把来源主机写进发件人身份,From: orch@rig-a@A,回复原样回到 A;
  3. 同名 rig 碰撞:A、B 两台机器各有一个叫shared的 rig 时,回复只落回来源主机的座位,绝不误投给本地"同名替身";
  4. 优雅降级:来源 Daemon 停止后,From:降级为两段式而不是崩溃(fail-open 控制实验就内置在测试夹具里)。

这套行为有完整的可复现验证脚本:L5 多主机 runbook 用两个容器模拟两台命名主机,把注册、盖章、碰撞、降级全部跑成自动化证据。

七、动手实践:在两台机器上运行一个 Agent 团队

第 0 步|两台机器装好前置:Node.js 22/24 + tmux,然后npm install -g @openrig/cli。

第 1 步|先在本机看团队长什么样:启动 UI 后,在左侧 Explorer 点选demorig 加载实时拓扑:

拓扑图里每个 Pod(orch、dev、rev)内的座位都标注了运行器(Claude/Codex),点开 lead 座位的 CMUX 按钮可直接进入编排者终端:

第 2 步|让 B 机对外暴露 HTTP:

OPENRIG_HOST=0.0.0.0 OPENRIG_AUTH_BEARER_TOKEN=<你的token> rig daemon start curl -fsS http://127.0.0.1:7433/healthz # 记下 selfHostId

第 3 步|在 A 机注册 B 机(id 用第 2 步捕获到的值):

rig host add --id <B的selfHostId> --transport http --url http://B:7433 --bearer-env B_TOKEN rig host doctor

第 4 步|跨主机发送第一条消息:

rig send dev-main@my-rig "ping" --host <B的别名>

到这一步,你就在两台机器上拥有了一个统一寻址、身份可溯源、回复精确回家的 Agent 团队。

八、关键源码与文档路径

模块路径
项目总览与安装README.md
主机注册表与认证解析packages/cli/src/host-registry.ts
跨主机命令执行器packages/cli/src/cross-host-executor.ts
三段式目标解析packages/cli/src/cross-host-target.ts
host 命令族(add/ls/doctor/pair)packages/cli/src/commands/host.ts
多主机测试 runbookdocker/testbed/runbooks/L5-multi-host-and-51-09.md
碰撞/回信活体实验夹具packages/daemon/test/fixtures/self-host-live-legs/RUNBOOK.md

小结

OpenRig 的 cross-host 架构没有引入复杂的消息中间件,而是用本地 Daemon + 主机注册表 + 双传输通道三层薄结构,把多机问题还原成"通讯录 + 寻址 + 身份盖章"三个可独立验证的问题。对新手而言,记住三段式地址seat@rig@host和rig host命令族,就拿到了多机 Agent 团队的全部入口。🚀

【免费下载链接】openrigMulti-agent harness that runs Claude Code and Codex together as one system项目地址: https://gitcode.com/GitHub_Trending/op/openrig

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/2 8:11:11

Python + Neo4j 知识图谱上传实战:从 CSV 到可查图谱的完整链路

简介&#xff1a;本资源为基于Python与Neo4j的知识图谱上传与处理设计源码&#xff0c;面向希望掌握图数据库应用、数据上传与图查询分析的开发者与研究人员&#xff0c;可作为课程设计、毕业项目或工程实践的参考方案。压缩包共25个文件&#xff0c;约27.84MB&#xff0c;以12…

作者头像 李华
网站建设 2026/10/2 8:10:52

Claude Code卡顿真相:UI线程阻塞与Spinner诊断指南

1. 这不是Bug&#xff0c;是UI线程在喊救命&#xff1a;Claude Code卡顿的本质真相你点下“生成”按钮&#xff0c;光标转成那个不停旋转的小圆圈——Spinner——然后它就停在那里&#xff0c;一动不动。三秒、五秒、十秒……你开始怀疑是不是网络断了&#xff0c;是不是API密钥…

作者头像 李华
网站建设 2026/10/2 8:10:25

学术表达的语病怎么搭?按语病类型拆解

学术表达读起来不地道&#xff0c;多数时候不是词汇量不够&#xff0c;而是句子里藏着可以命名的结构毛病。把这些毛病按类型拆开——搭配失当、成分冗余、指代含混、口语化、语序错位、逻辑断裂——逐类换搭法&#xff0c;比通篇推倒重写省力得多。下面按这六类逐层拆解&#…

作者头像 李华
网站建设 2026/10/2 8:08:44

Windows 下 Codex CLI 与 Claude Code 安装配置全攻略

每次在技术群里看到有人晒 Codex CLI 和 Claude Code 的操作视频&#xff0c;底下总有 Windows 用户哀嚎“又用不了”。其实这俩工具在 Windows 上没那么难搞&#xff0c;只是默认会遇到几个坑&#xff1a;Node 版本不对、PowerShell 执行策略挡脚本、终端编码乱掉、环境变量不…

作者头像 李华