news 2026/10/22 21:29:48

OpenRig 中把 Agent 舰队视图渲染到 cmux:`rig terminal --provider cmux` 全解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OpenRig 中把 Agent 舰队视图渲染到 cmux:`rig terminal --provider cmux` 全解
  • 人工智能
  • AI Agent
  • 多智能体
  • Agent 编排
  • 代码智能体
  • CLI

【免费下载链接】openrig

Build your own network of agents from Claude Code, Codex and Pi: persistent teams with roles, shared context and owned work.

项目地址:https://gitcode.com/GitHub_Trending/op/openrig
点击查看免费下载

OpenRig 的rig terminal命令族可以把一个 rig、pod、mission、slice 或手工保存的视图,变成一组实时可交互的 agent 终端瓦片;瓦片渲染到哪一层,由 provider 决定——herdr 是默认且受证明门(proof-gated)约束的 provider,cmux 则是 best-effort 的备选 provider。本文以 openrig-cmux 技能文档 为主线,讲清 cmux 作为 provider 的地位、三个动词的完整用法、honest-partial 结果读取、只读与安全护栏,并结合 CLI 命令实现 与 cmux provider 适配器 给出源码级佐证,读完后可在不破坏 daemon 会话的前提下,把任意 OpenRig 视图安全地开到 cmux 里。

cmux 在 OpenRig 视图体系中的定位:best-effort provider

先建立一个核心心智模型:OpenRig 决定"哪些"agent 组成一个视图,provider 负责把像素渲染出来。同一套rig terminal表面、同一组 agent、同一套语义可以在 herdr 和 cmux 之间自由携带——视图是provider-agnostic的,一个保存的视图可以在任意一个 provider 中打开。

cmux 与 herdr 的地位差异是理解这个技能的关键:

  • herdr 是默认 provider,且是 proof-gated 的;cmux 是 best-effort——它跑在同一个rig terminal <provider>+ web-launcher 邻域上,但"cmux 没开出来"不构成一次 slice 失败。只有在明确想要 cmux 时才使用它;否则默认走 herdr(不带--provider的rig terminal open <view>)。
  • 文档元数据中该技能标记为stage: candidate,与 openrig-herdr 互为 sibling skill;cmux 技能本身也声明是 clean-room 撰写的,但 cmux 作为 OpenRig 自有的 shipped provider 集成,没有 herdr 那样的 AGPL arm's-length 约束——针对 herdr 的"绝不链接/内嵌/插件化"的 clean-room 护栏不适用于 cmux。

源码层面这个"best-effort"不是修辞。CmuxProviderAdapter 的文件头注释写明:cmux 在部分渲染时保持 best-effort / non-gating——某个 cmux 开不出来的页面会被诚实地降级(命名,绝不静默丢弃);而完全没有连接 cmux 表面时,返回诚实的拒绝(cmux_unavailable),与 herdr 的 socket 门和 rig-cmux 路由的 503 语义对齐。另一个值得注意的事实:cmux 表面永远是本地的(cmux 运行在操作者自己的机器上),所以 cmux 级别的降级会打上local这个 host 哨兵值。

命令表面:三个动词,--provider cmux

cmux 表面与 herdr 完全相同,就是rig terminal的三个动词加--provider cmux:

rig terminal open <view> --provider cmux [--json] # 把视图打开到 cmux(不带 flag 时默认 herdr) rig terminal views [--json] # 同一套视图库,provider-agnostic rig terminal status --provider cmux [--json] # cmux 的存活/健康状态

<view>的解析规则与 herdr 完全一致,按序解析为以下五类之一:

视图形式含义
rig 名称该 rig 内所有存活 agent,自动排版
pod:<rig>/<podNamespace>rig 清单按 pod 过滤后的全部存活 agent
mission:<id>正在该 mission 上工作的 agent(打开时从拓扑实时派生)
slice:<id>正在该 slice 上工作的 agent(实时派生)
保存视图名用户手工定义的分组(见下文 Saved views)

这一解析规则在 CLI 命令定义 的头部注释中得到印证:<view>在 daemon 端解析,open的结果是唯一共享的{ opened, absent, degraded }分区,在 CLI 侧与路由 JSON 中逐字节一致。

从 open 子命令的实现 还能看到一个与 cmux 直接相关的行为细节:--window(或省略--provider的默认路径)会请求在桌面打开新终端窗口,而显式传入 provider(herdr/cmux)时是复用其现有工作区、不打开新窗口;--window路径内部甚至明确禁止 cmux——terminal-window.ts 中有校验:"--window supports herdr or tmux. Use cmux without --window."。也就是说,cmux 的使用方式就是直接rig terminal open <view> --provider cmux,让 daemon 渲染进已经运行的 cmux 工作区。

诚实读取结果:opened / absent / degraded 三分区

这是整个技能最重要的行为契约。打开视图的结果是一个分区:每个 seat 恰好落入一个桶,且每个桶都被命名:

  • opened—— 现在正作为瓦片显示的存活 agent;
  • absent—— 视图内当前不存活的 seat:被命名并跳过,绝不静默丢弃。一个只打开了部分 seat 的视图是成功的(部分性被披露),退出码为0;只有没有任何瓦片打开的视图才退出非零;
  • degraded—— 结构性无法铺瓦片的 agent,连同原因命名。v1 的典型情形:注册在 HTTP 通道上的 host 没有 ssh 路径,其瓦片无法组成——读取结果就是"host <id> is http-registered; tiles need ssh",然后跳过而不是丢弃。

退出语义在 CLI 头注释中有逐字对应:"带命名的部分打开 = 带披露的成功 → exit 0;零瓦片打开 → 非零"。程序化消费时读--json输出按分区分支判断,退出码本身只能告诉你"打开了点什么(0)vs 什么都没打开(非零)"。

cmux 适配器忠实地执行同一契约:CmuxProviderAdapter.openView 会原样转发视图合成器(view composer)产出的absent/degraded分类,再叠加 cmux 自身的本地降级;如果视图一个可铺瓦片的页面都没有,则不产生任何 cmux 工作区副作用就返回。

从 openrig-herdr 原样继承的语义

cmux 文档明确声明:以下所有行为与 herdr 完全相同,细节见 openrig-herdr 技能:

  • Honest-partial / honest-degrade—— opened / absent / degraded 各自命名;部分打开退出 0,零瓦片退出非零;http-registered host 的 agent 带原因降级,绝不静默消失。
  • 只读策略—— rig 视图或pod:视图是交互式的;mission:/slice:视图天生只读(read-only by construction);保存视图按成员逐个设置(readOnly)。只读瓦片是tmux attach -r(客户端readonly=1),按键输入在物理上无法送达 agent。
  • 舰队安全护栏—— 瓦片是 daemon 拥有会话的一个视图(嵌套tmux attach):绝不 move/join/kill/re-parent daemon 拥有的 pane;关闭一个瓦片只是 detach 一个客户端,会话本身不受影响;绝不在生产环境对运行中的 seat 现场翻转 tmux 选项(先在隔离环境证明)。
  • 滚动与复制开箱即用—— 依赖 daemon 的终端默认值(启动时按会话设置的 scroll 选项 + tmux 服务器的剪贴板默认值);已经在跑的 seat 在下一次自然重启后拾取滚轮滚动。
  • 限制如实声明—— 瓦片 chrome v1 只是一个普通标签;重复/多视图成员要求同尺寸 pane(不同尺寸的重复 pane 存在 tmux 多客户端的固有 resize 不匹配,这是文档化而非待修复的问题)。

cmux 适配器对"逐字节执行 paneCommand"的承诺在源码注释中同样明确:每个 pane 运行的是 composer 给出的paneCommand原样(包括只读的-r、ssh 包裹、引号保留),遵守 terminal-provider.ts 定义的 provider 契约;布局上一个网格页对应一个 cmux 工作区,通过自带的 CmuxLayoutService 的 split/grid 机制驱动,绝不一个 seat 开一个窗口。

cmux 特有行为

除继承语义外,cmux 有三条自己的注意点:

  1. 每 agent 的 open-or-focus—— cmux 自带的集成是"节点没开就开、已开就聚焦";当一个 seat 已经在 cmux 中铺好瓦片时,再次打开得到的是聚焦而非重复瓦片。这与 herdr 路径的复用逻辑(复用已有工作区/tab,且保留旧工作区内容)在效果上对应。
  2. shipped 的 "Launch in cmux" 入口被保留(字节兼容),并泛化进了 provider + view picker;从 web launcher 打开 cmux 仍然可用。对应的 rig 作用域路由见 rig-cmux.ts。
  3. 没有 AGPL arm's-length 顾虑—— 与 herdr 不同,cmux 是 OpenRig 自己的 shipped provider 集成,herdr 适用的 clean-room/绝不内嵌护栏不是 cmux 的约束(该技能文档本身仍是 clean-room 撰写的)。

另外,rig terminal status --provider cmux的健康读取最终落在 CmuxProviderAdapter.liveness:cmux 适配器不可用时返回alive: false并带 detail"cmux is not connected",配合--json可以程序化判断"best-effort 的 best-effort 到底在不在"。

Saved views:手工编写terminal-views.yaml,provider 无关

保存视图是手工编写在terminal-views.yaml中的(v1 没有 save/write 动词),并且是provider-agnostic的。用rig terminal open <id> --provider cmux即可在任何保存视图上重新打开 cmux。派生视图(rig、pod:<rig>/<pod>、mission:<id>、slice:<id>)是实时计算的,永不写入该文件。

文件本身存放在 OpenRig home 根目录下,原子写入(tmp + rename)、字节稳定。Schema(字段名与顺序必须严格一致,可选字段缺失时省略,绝不写null):

version: 1 views: - id: my-view-id # 必填 — `rig terminal open <id>` 接受的 id name: Human Name # 必填 members: - seat: pod-member@rig # 必填 — 规范化的会话名 label: agent . slice # 可选 — pane 标签 host: some-host-id # 可选 — 结构化 host id(绝不是 `member@rig@host` 字符串); # 本地省略。ssh 注册的 host 可铺瓦片; # http 注册的 host 诚实降级(命名 + 跳过,带原因) tmuxSession: sessname # 可选 — 默认取 `seat` readOnly: true # 可选 — 省略 = 交互;true = `tmux attach -r`

一个按请求组装保存视图的 agent,写这份 YAML然后打开该 id:rig terminal open my-view-id(要 cmux 就加--provider cmux)。同一份视图库在 herdr 或 cmux 中都能打开。

本地 cmux 设置的读取与修正

CLI 侧还有一个与 cmux 相关的细节:cmux-config.ts 负责读取与修正~/.config/cmux/settings.json中的automation.socketControlMode。默认值是cmuxOnly(CMUX_DEFAULT_SOCKET_CONTROL_MODE);解析逻辑对 JSONC 容忍尾逗号与注释,解析失败时返回默认模式并附带格式化的解析错误;off与cmuxOnly被标记为与 socket 控制不兼容的模式(CMUX_INCOMPATIBLE_MODES),upsertCmuxSocketControlMode则以最小 diff 的方式(jsonc-parser 的 modify/applyEdits)把目标模式写回去,保证已有配置不被无谓重排。如果你在排查"cmux 连不上 / status 报 not connected"时,这一层本地设置的兼容性是第一个值得核对的点。

实践要点速查

  • 默认不加--provider走 herdr;只在明确需要 cmux 时才--provider cmux,且 cmux 路径不与--window组合。
  • 部分打开是成功:退出码 0 + JSON 中的absent/degraded命名分区才是完整信息;零瓦片才非零。
  • mission:/slice:视图天生只读,这是构造而非约定;保存视图的只读粒度是 per-member。
  • 瓦片是 daemon 会话的嵌套 attach 视图:只 detach、不动 pane、不现场翻转运行中 seat 的 tmux 选项。
  • 保存视图手工写terminal-views.yaml,字段名与顺序严格照 schema;派生视图永不落盘。
  • cmux 表面永远本地:cmux 级降级的 host 字段是local哨兵;cmux 未连接时得到的是诚实拒绝(cmux_unavailable语义)而非静默失败。

以上行为均可在仓库中逐一核对:命令面与退出语义见 terminal.ts,窗口/provider 校验见 terminal-window.ts,cmux 渲染契约见 cmux-provider-adapter.ts,完整视图模型与 schema 细节见 openrig-herdr/SKILL.md。

  • 人工智能
  • AI Agent
  • 多智能体
  • Agent 编排
  • 代码智能体
  • CLI

【免费下载链接】openrig

Build your own network of agents from Claude Code, Codex and Pi: persistent teams with roles, shared context and owned work.

项目地址:https://gitcode.com/GitHub_Trending/op/openrig
点击查看免费下载

相关推荐

上一篇:Open Design 中的 GitHub 风格设计系统:Primer 基础之上的功能密度与蓝白精确性实战指南
下一篇:RIOT 中的 LC709203F 电池电量计测试应用:编译烧写与源码级运行解析

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

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

SQL Server PIVOT详解:行转列、动态透视与高频避坑指南

简介&#xff1a;SQL Server中实现行转列是报表查询常见的刚需&#xff0c;这份66KB的PDF文档面向需要编写透视查询的数据库开发与数据分析人员。内容围绕店铺一周收入表WEEK_INCOME展开&#xff0c;先给出传统CASE WHEN配合SUM的写法&#xff0c;再重点讲解SQL Server 2005及以…

作者头像 李华
网站建设 2026/10/15 11:32:23

积分图加速均值滤波:O(1)矩形求和的工程实现

1. 积分图不是“加速器”&#xff0c;而是均值滤波的底层算力杠杆你有没有遇到过这样的场景&#xff1a;在做图像预处理时&#xff0c;想对一张 1024768 的灰度图做多尺度滑动窗口均值计算——比如检测局部亮度均值、统计 ROI 区域灰度和、或者为后续的 Haar-like 特征提取做准…

作者头像 李华
网站建设 2026/10/16 5:25:47

英语比较级与最高级:从语法规则到表达直觉的跃迁

1. 这不是语法考试题&#xff0c;而是日常表达的底层开关“比较级与最高级”这六个字&#xff0c;乍看像中学英语课本里被划了重点的语法条目&#xff0c;但如果你真把它当成要背诵默写的规则来对待&#xff0c;那大概率会在真实交流中频频卡壳——不是不会用&#xff0c;而是根…

作者头像 李华
网站建设 2026/10/14 16:34:17

Python知识图谱推荐系统:可解释、可追溯的工程实践

简介&#xff1a;本资源是一份面向计算机专业本科生的毕业设计论文&#xff0c;聚焦Python与知识图谱融合的推荐系统实现&#xff0c;适用于课程设计、毕设参考及知识图谱应用入门实践。全文逾万字&#xff0c;已通过降重处理&#xff0c;结构完整、逻辑清晰&#xff0c;涵盖引…

作者头像 李华
网站建设 2026/10/15 14:36:59

CSS文本布局核心原理与实用技巧:从垂直居中到字体渐变

做前端的人大概都经历过这种时刻&#xff1a;明明只是想“把文字摆中间”&#xff0c;结果一刷新&#xff0c;整个页面错位&#xff0c;字体忽大忽小&#xff0c;方向也完全不对。这些问题的根源&#xff0c;往往不是某个属性没记住&#xff0c;而是没把CSS处理文本的底层逻辑捋…

作者头像 李华
网站建设 2026/10/19 9:33:37

道路改造碎石运输优化:基于线性规划的施工组织设计方法

简介&#xff1a;道路改造项目中碎石运输的设计课程设计&#xff0c;是一份面向运筹学、线性规划及数学建模课程实践的完整案例分析报告&#xff0c;围绕道路改造中的碎石运输总造价最小化问题展开。文档采用多目标规划方法&#xff0c;对比陆路运输与水路陆路联运两类方案&…

作者头像 李华