OpenRig rig stream详解:实时观察Agent输出的流式通道(完整指南)
【免费下载链接】openrigMulti-agent harness that runs Claude Code and Codex together as one system项目地址: https://gitcode.com/GitHub_Trending/op/openrig
OpenRig 是一个多智能体(Multi-agent)驾驭框架,它把 Claude Code 和 Codex 组合成同一支队伍来管理。当你同时运行多个 AI Agent 时,最头疼的就是"每个 Agent 在各自的终端里刷屏,输出分散且无法追溯"。rig stream就是 OpenRig 提供的实时流式观察通道:它是一条只追加(append-only)的 Agent 输出流,你可以随时向其中写入观察、按时间查询历史,甚至用一条命令像"直播"一样实时看每个 Agent 说了什么。
为什么需要 rig stream 这个流式通道
想象一个由 8 个 Agent 组成的团队在同一个代码仓库里工作:
每个 Agent 的终端输出是独立且易失的——你关掉终端,过程就看不见了。rig stream把关键信息收进一条统一的、持久化、只追加的信息流中:
- 写入即留痕:每条消息由 Agent 会话发出后永久保留在 daemon 的 SQLite 数据库里(
stream_items表),写入后不可修改,只能归档; - 实时可观察:通过 SSE(Server-Sent Events)通道,你连接上就能先回放历史、再实时接收新消息;
- 身份可信:消息来源由传输层身份(bearer 身份)确定,而不是消息体里自报家门,无法冒充其他 Agent。
对新手来说,可以把它理解成"整个 Agent 团队的群聊广播流 + 完整聊天记录"。
前置准备:先跑起来一个 rig
rig stream依赖 daemon 在后台运行,所以先确认你的 rig 已经启动。最简单的路径:
npm install -g @openrig/cli rig up first-project --cwd .启动后可以用rig tui --shared打开共享仪表盘看团队全景(拓扑图、上下文用量、状态),而rig stream则负责"逐字逐句"地看每个 Agent 的输出细节。
rig stream 五个核心子命令一览
rig stream的所有子命令都通过 daemon 的 HTTP API 工作(源码见 stream.ts):
| 子命令 | 作用 | 典型场景 |
|---|---|---|
emit | 向流中追加一条消息 | Agent 汇报进展、提示需要 review |
watch | 实时监控流(历史回放 + 实时推送) | 你盯着团队干活的全过程 |
list | 按时间列出历史消息 | 排查"刚才谁说了什么" |
show | 按 ID 取单条消息 | 精确定位某条观察 |
archive | 软归档一条消息 | 清理噪音但保留审计记录 |
实时观察Agent输出:rig stream watch 实战
这是rig stream最核心的用法:
rig stream watch连接成功后,daemon 会先把已有消息回放一遍,然后持续实时推送新消息,每一行显示:
[2026-09-17T16:45:06Z dev-owner@factory] 已完成候选改动,等待 review如果你要把它接进脚本或二次开发,加--json即可,每行输出一个完整的StreamItemJSON 对象:
rig stream watch --json下面是一段 10 秒的真实录制:左侧是拓扑树,右侧面板里 lead、driver、qa 等 Agent 的状态与输出正在实时更新——这正是流式通道在后台默默支撑的"现场感":
两个实用提醒📌
watch只建立一条连接,断线后不会自动重连,需要重新执行命令;- 它要求 daemon 正在运行,daemon 未启动时命令会直接失败退出。
写入流消息:rig stream emit 与提示标签
任何 Agent 座位都可以向流中追加一条观察:
rig stream emit --source dev-owner@factory --body "发现数据库迁移缺失,已提交候选补丁"除了正文,还可以附带**提示(hint)**元数据,方便后续分拣:
--hint-destination:期望由哪个座位处理;--hint-type:类型,如review、handoff、idea;--hint-urgency:紧急度routine/urgent/critical;--hint-tags:逗号分隔的标签;--interrupt:标记为打断型消息。
这些 hint 就是list命令中--hint-destination、--tag过滤项的依据。另外--id提供幂等性:相同的stream_item_id重复提交只会返回同一行,适合脚本重试。
历史查询与归档:list / show / archive
回放历史是流式通道的另一半价值——输出不会随终端关闭而消失:
# 只看某个 Agent 最近 20 条输出 rig stream list --source dev-owner@factory --limit 20 # 按时间窗口 + 标签精确过滤 rig stream list --since 2026-09-17T00:00:00Z --tag review # 按 ID 看单条 / 软归档 rig stream show <streamItemId> rig stream archive <streamItemId>注意两点:--tag是精确成员匹配而非子串匹配;归档是"软"操作,审计行永久保留,只是默认不出现在list里(加--include-archived可查)。
stream 与 queue 的分工:什么时候用哪个
OpenRig 的协作层分了两档(详见 coordination-primitive.md):
rig stream(L1 层):轻量、只追加的"观察与接收"通道。适合播报进展、抛出想法、留痕审计——它不承担任务的领取、流转与关闭;rig queue(L3 层):有状态的"工作队列",支持 claim、handoff、闭单原因等完整生命周期。真正需要把一块工作交给别人跟进时,用 queue。
简单记忆:stream 用来"说",queue 用来"派活"。流式消息的读取接口还支撑着实验性的流分类 worker(见 stream-classifier-worker.md)。
幕后原理速览:SSE + SQLite
整条链路很短,理解它有助于排障:
- CLI 只通过 HTTP 调用 daemon API:
POST /api/stream/emit、GET /api/stream/list、GET /api/stream/sse(路由实现见 routes/stream.ts); - daemon 将消息写入 SQLite 的
stream_items表(只追加,仅archived_at可被更新),领域逻辑在 stream-store.ts; watch消费的是 SSE 端点:先由数据库做初始回放,再由事件总线把新消息实时推给当前连接,每条消息对应一行data:帧(SSE 消费逻辑见 stream.ts 的consumeWatch)。
也就是说,"实时观察"= 数据库里的历史回放 + 事件总线的直播推送,二者在同一条 SSE 连接上无缝衔接。
常见问题清单 🔍
| 现象 | 原因与解法 |
|---|---|
watch连接失败 | daemon 未启动或状态异常,先确认 rig 正在运行 |
| 连接断开后没有新消息 | watch不自动重连,重新执行即可,不会丢历史(数据库持久化) |
--tag过滤不到预期消息 | 标签是精确匹配,请核对 emit 时写入的原文 |
| 想删掉消息 | 只能archive软归档,审计行永久保留,这是设计约束 |
完整的命令行参考可在 cli-reference.md 的 "Coordination Primitive" 一节查到。
小结
rig stream用最小的代价给多 Agent 团队装上了"行车记录仪 + 直播间":
- 一条命令
rig stream watch实时看所有 Agent 的输出; - 只追加、持久化到 SQLite,历史永远可查、不可篡改;
- 配合 hint 元数据与归档机制,轻松从信息流中分拣出需要处理的信号。
下次你的 Agent 团队开始干活,先开一个rig stream watch——比逐个切终端看输出高效得多。
【免费下载链接】openrigMulti-agent harness that runs Claude Code and Codex together as one system项目地址: https://gitcode.com/GitHub_Trending/op/openrig
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考