
人工智能AI Agent多智能体Agent 编排代码智能体CLI【免费下载链接】openrigMulti-agent harness that runs Claude Code and Codex together as one system项目地址https://gitcode.com/GitHub_Trending/op/openrig点击查看免费下载导读本文以 openrig 仓库中refocusing技能的核心参考文档 references/refocus.md 为骨架系统讲解 openrig 如何在 Claude Code / Codex 的长时运行会话中检测漂移drift、用纯目录路径回溯真实上下文并通过四级内容阶梯在不修改插件的前提下替换注入内容。读完本文你将掌握 Refocus 的三个自检问题、trace-to-root.py双树追踪的配置参数、自动 hook 的事件契约与全部环境变量以及如何在$OPENRIG_HOME/refocus/REFOCUS.md或上下文包中落地自己的 Refocus 内容。一、Refocus 是什么保住长会话的所得而不是重启在 openrig 的多 Agent 编排体系中一次长时任务可能跨越数小时的会话、经历上下文压缩compaction、甚至切换 occupant。此时 Agent 往往保留了大量已学到的经验却逐渐偏离最初的产品结果product outcome。Refocus 的定位正是保留长会话已获得的 expertise同时将其重新锚定在当前意图与真实上下文中——它既不是重启restart也不是唤醒空闲 seatwake更不是阶段检查点checkpoint这一点在 SKILL.md 中有明确声明。refocus.md给出了检测漂移的三个核心自检问题这是整个机制的思想基石What is the person actually trying to get? Not your current task — the outcome.用户真正想要的是什么不是当前任务而是最终成果。Does what you are doing RIGHT NOW move that? If you cannot say what a user gets, stop and say so.此刻正在做的事是否推进那个成果如果说不清用户能得到什么就停下来并明说。What have you concluded without opening the file or running the thing?有哪些结论是你没打开文件、没实际运行就得出的文档点明对这三个问题的任何一处感到不安就是漂移信号——drift feels like work漂移伪装成忙碌。当 Agent 觉得自己在干活却无法回答用户会得到什么时正是需要 Refocus 的时刻。refocusing技能的元数据声明其适用场景为长时运行 Agent 可能丢失产品成果时、上下文被压缩后、工作跨越重大边界时、或在下一个关键动作之前需要一次新鲜的基于路径的追踪时它不用于新会话导向、唤醒空闲 seat 或检查点见 SKILL.md。二、双树路径回溯trace-to-root.py 只靠目录路径说话2.1 为什么是path-only tracerefocus.md明确指出refocusing技能携带的是与来源适配的纯路径追踪source-appropriate path-only trace实现是 scripts/trace-to-root.py。脚本的 docstring 写道Render topology and work context by ascending directory paths only.——只通过向上攀升目录路径来渲染拓扑与工作上下文而不是靠 Agent 凭记忆重建层级。脚本默认同时遍历两棵树topology 树向上读取每一层的LEARNED.md该节点累积的已学经验work 树向上读取每一层的SPEC.md意图并解析对应的NOTES.md进行中的笔记。在遍历过程中rigs、pods、seats、missions、slices这些货架目录SHELVES本身不产生节点只作为层级的骨架trace-to-root.py 第 11 行SHELVES {rigs, pods, seats, missions, slices}。2.2 遍历广度与深度两个核心环境变量文档给出的两个核心配置参数OPENRIG_REFOCUS_TREEStopology|work|both默认both控制追踪哪些上下文域。topology只走LEARNED.md链work只走SPEC.md/NOTES.md链both两者都走。OPENRIG_REFOCUS_DEPTHlight|full默认light控制每个节点贡献多少内容。light下工作树只合成intent:字段与节点名称拓扑树只截取LEARNED.md的前 800 字符full则输出完整节点正文与 notes 全文。在脚本实现中light深度对LEARNED.md的截断发生在 800 字符边界并在截断处追加[… use --depth full for the rest]提示对工作树节点light深度会从SPEC.md的 YAML frontmatter 中解析出intent:字段支持普通值、引号包裹、以及|/块状语法解析失败则输出MISSING INTENT — no readable intent: fieldtrace-to-root.py 第 98-125、128-135、155-194 行。2.3 命令行用法SKILL.md 推荐直接从技能目录运行捆绑脚本而不是从记忆重建层级python3 scripts/trace-to-root.py --trees both --depth light脚本支持的参数与文档中的环境变量一一对应--trees topology|work|both默认取OPENRIG_REFOCUS_TREES未设置时为both--depth light|full默认取OPENRIG_REFOCUS_DEPTH未设置时为light--topology-start path显式指定拓扑起点--work-start path显式指定工作起点。根目录通过rig config get解析topology 树取topology.rootwork 树取workspace.root也可以用OPENRIG_TOPOLOGY_ROOT、OPENRIG_WORKSPACE_ROOT环境变量直接覆盖trace-to-root.py 第 25-28、242、251 行。2.4 起点推导当前节点从哪来当脚本无法推导当前节点时文档与 SKILL.md 给出的对策是设置OPENRIG_REFOCUS_TOPOLOGY_NODE或OPENRIG_REFOCUS_WORK_NODE或传入对应的--*-start选项。脚本的默认推导逻辑是拓扑起点优先读OPENRIG_REFOCUS_TOPOLOGY_NODE否则调用rig whoami --json从identity.rigName与identity.sessionName中取出 rig 名与 seatsessionName中之前的部分拼出{root}/rigs/{rig}/seats/{seat}trace-to-root.py 第 197-213 行工作起点优先读OPENRIG_REFOCUS_WORK_NODE否则从当前工作目录向上攀升找到第一个包含SPEC.md或README.md的目录trace-to-root.py 第 216-229 行。在自动 hook 场景下refocus.cjs还会先调用rig queue whoami --json读取currentWork.workNodePath即 seat 当前持有的类型化接力棒来推导工作起点显式环境变量总是优先任何失败都返回 null绝不猜测一个工作节点去悄悄重定向整条 trace见 hooks/scripts/refocus.cjs 第 99-114 行。2.5 缺失即证据诚实报告缺口脚本对链上的任何缺口都采用报告缺口并继续的策略而不是补造父节点找不到LEARNED.md会输出MISSING LINK找不到SPEC.md/README.md会输出MISSING LINK — no SPEC.md or README.mdnotes 无法解析会输出NOTES RESOLUTION GAP或NOTES GAP。SKILL.md 对此给出了操作原则A missing chain file is evidence: report the gap and continue; never follow pointers to invent a second parent.缺失的链文件本身就是证据报告缺口并继续绝不顺着指针去发明第二个父节点。三、内容阶梯不修改插件即可替换默认内容refocus.md的核心设计之一是内容阶梯content ladder默认内容可以被替换且无需编辑插件。按优先级从高到低OPENRIG_REFOCUS_CONTENT_REF——一个上下文包引用由rig context get解析OPENRIG_REFOCUS_CONTENT_FILE——由操作者撰写的文件$OPENRIG_HOME/refocus/REFOCUS.md——实例级内容本文件shipped default——随插件发布的默认内容。这套阶梯在 hook 中的落地实现hooks/scripts/refocus.cjs 第 41-92 行严格遵循文档顺序若设置了OPENRIG_REFOCUS_CONTENT_REF则spawnSync(rig, [context, get, contentRef])成功即以rig context get的输出作为内容测试断言其输出以OPENRIG_REFOCUS_CONTENT_REFref标注来源见 refocus-context-ref.test.ts 第 138-152 行解析失败时会在载荷头部输出REFOCUS CONTENT REF FAILED: ref — 原因失败横幅并仍用 shipped default 兜底保证该轮对话依然能得到通用内容refocus-context-ref.test.ts 第 154-163 行断言了失败横幅 兜底内容的组合未设置 REF 时按OPENRIG_REFOCUS_CONTENT_FILE→$OPENRIG_HOME/refocus/REFOCUS.md→ shipped default 的顺序查找第一个存在且非空的文件连 shipped default 都不可读的极端情况下hook 还会回退到硬编码的三行通用问题。优先级在测试中被显式钉死REF wins over FILEREF 存在时 FILE 的内容绝不出现、FILE above instance content、instance content above the shipped default见 refocus-context-ref.test.ts 第 172-180 行。3.1 与 onboarding 资产的关系引用而非复制refocus.md特别说明新 seat 会收到独立的 onboarding 资产openrig-onboarding-01.md与openrig-onboarding-02.md本文件只引用这些资产并不复制它们的世界安装This file only cites those assets; it does not copy their world install.。测试同样断言默认内容包含对两个 onboarding 资产名的引用refocus-context-ref.test.ts 第 257-267 行这保证了新会话的初始导向由 onboarding 包负责而 Refocus 只管长会话的重新锚定两者职责不重叠、不互相污染。四、自动触发与事件契约何时、如何注入上下文4.1 事件注册差异Claude 与 Codexhook 注册于插件级 hook 配置文件hooks/claude.json在UserPromptSubmit、PostCompact、Stop三个事件注册refocus.cjs --runtime claudehooks/codex.json在UserPromptSubmit、PostCompact注册refocus.cjs --runtime codex不注册Stop。SessionStart 永不注册、也永不注入——即使手动调用 hook遇到SessionStart也直接静默退出refocus-context-ref.test.ts 第 194-201 行断言两个运行时的配置都不含SessionStart且手动触发时 stdout 为空因为新会话的导向是 onboarding 包的职责陈旧注册不能污染世界安装。4.2 触发条件阈值、压缩事件与按需hook 的触发判定逻辑hooks/scripts/refocus.cjs 第 246-254 行增长阈值仅对 Claude 运行时生效thresholdDue harness claude grown threshold()。默认阈值为2,600,000 字节约 2.6MB由OPENRIG_REFOCUS_BYTES覆盖且只接受正有限数值否则回退默认值PostCompact 事件Codex 运行时精确使用该事件绝不退化为字节/重置阈值测试uses Codex PostCompact exactly对此做了专门钉死见 refocus-context-ref.test.ts 第 245-255 行按需触发OPENRIG_REFOCUS_NOW默认关闭可强制在本轮触发挂起状态此前Stop/PostCompact留下的 pending 也会触发。4.3 pending 机制只在提示词边界消费上下文这是整个事件契约最精妙的部分Stop/PostCompact 保留应触发状态due state上下文只在 UserPromptSubmit 边界被消费——因为只有在那里 harness 才能真正把additionalContext送达模型。具体流程refocus-context-ref.test.ts 第 366-445 行事件为Stop或PostCompact时写入pendingOn/pendingAt不输出任何内容stdout 为空退出事件为UserPromptSubmit且有 pending 或阈值到期时输出hookSpecificOutput包含hookEventName: UserPromptSubmit与additionalContext载荷随后清除 pending 并记录firedAt/firedOn同一次交付后再次触发不再重复输出consumes one context-visible delivery。注入消息的形态hooks/scripts/refocus.cjs 第 268-307 行REFOCUS (原因). Answer briefly, out loud, before your next move: trace 输出 内容阶梯解析出的正文其中原因三选一on demand按需、just compacted — your picture is lossy刚压缩过、X.XMB of work since your last refocus自上次 refocus 以来的增长量。4.4 总开关与禁用语义OPENRIG_REFOCUS_ENABLED默认开启取0、false、off、no大小写不敏感之一即为关闭关闭时 hook 在读取任何输入前直接退出refocus-context-ref.test.ts 第 226-243 行同时验证了默认开启、按需触发与显式关闭三种形态。五、状态管理occupant 身份键、基线重置与安全边界5.1 状态键到 occupant 而非 seatOPR.0.5.6.25hook 的测量状态存放在$OPENRIG_HOME/refocus/下。这里有一个重要的演进设计状态键到 OCCUPANT会话身份而不是到 seat。原因在 hooks/scripts/refocus.cjs 第 161-166 行的注释与 refocus-occupant-baseline.test.ts 第 1-7 行的背景说明中讲得很清楚seat 键控的状态会让新 occupant 继承前任的lastBytes在前任 24.37MB 对后任 5.1MB的真实样本上新 occupant 的增量被永久算成零增长还会继承前任的 pending 交付。实现要点身份从 hook 事件字段推导session_id/sessionId/transcript 文件名新 occupant 首次观测时以自己的当前 transcript 大小为基线任何增长从基线起算绝不继承遗留的${seat}.json文件永不被读取、导入或重写仅作为诊断/迁移材料保留在磁盘上当既无会话身份也无 transcript 路径时只写入诊断哨兵文件seatKey#no-identity-sentinel.jsonactiveEpisode标记绝不产生基线、增长、pending 或触发首个缺失事件告警一次有效身份事件清除标记后续独立剧集可再次告警一次refocus-occupant-baseline.test.ts 第 154-182 行。5.2 基线重置shrink 先清 pending当 transcript 大小比上次记录缩小时说明发生了新的 occupant 或会话重建hook 会在计算是否到期之前完成三件事清除 pending、将基线重置为当前大小、写一次baseline reset告警。重置本身不触发 refocus陈旧 pending 永远无法穿越重置进入交付refocus-occupant-baseline.test.ts 第 99-119 行逐条断言了重置静默、重置后亚阈值增长保持静默、从重置点再次增长到阈值才触发一次。5.3 敌意身份与路径安全状态文件名由 seat 键 身份键组成身份键经过清洗仅保留[A-Za-z0-9._-]、截断到 64 字符并在截断发生冲突时追加 SHA-256 前 8 位稳定后缀保证不同的身份保持不同、所有路径都落在状态目录内、长度有界。测试用../../etc/passwd这类敌意输入验证了不存在路径逃逸并用 80 字符前缀相同的两个身份验证了冲突后缀的区分能力refocus-occupant-baseline.test.ts 第 184-203 行。六、环境变量与配置速查表综合文档、SKILL.md、脚本与 hook 源码Refocus 的全部可配置项如下环境变量默认值作用OPENRIG_REFOCUS_TREESboth追踪域topology只走LEARNED.md、work只走SPEC.md/NOTES.md、bothOPENRIG_REFOCUS_DEPTHlight内容强度lightintent 名称LEARNED.md截断 800 字符、full完整正文OPENRIG_REFOCUS_TOPOLOGY_NODE空显式指定拓扑起点否则rig whoami --json推导OPENRIG_REFOCUS_WORK_NODE空显式指定工作起点否则先rig queue whoami后沿 cwd 上升OPENRIG_REFOCUS_CONTENT_REF空内容阶梯第 1 级上下文包引用经rig context get解析OPENRIG_REFOCUS_CONTENT_FILE空内容阶梯第 2 级操作者撰写的文件路径$OPENRIG_HOME/refocus/REFOCUS.md内置内容阶梯第 3 级实例级内容文件由 hook 直接读取OPENRIG_REFOCUS_ENABLED开启总开关0/false/off/no之一即关闭OPENRIG_REFOCUS_BYTES2600000Claude 运行时的 transcript 增长阈值字节OPENRIG_REFOCUS_NOW关闭按需强制本轮触发OPENRIG_TOPOLOGY_ROOT/OPENRIG_WORKSPACE_ROOT空覆盖rig config get topology.root/workspace.root的根目录解析OPENRIG_HOME/OPENRIG_SESSION_NAME/PYTHON环境相关hook 的状态目录、seat 名、Python 解释器解析hook 通过PYTHON定位解释器实操中最常见的两种定制方式只替换提示内容不动逻辑向$OPENRIG_HOME/refocus/REFOCUS.md写入自己的三问/方法论hook 会按阶梯自动优先采用多实例共享一套内容设置OPENRIG_REFOCUS_CONTENT_FILE/path/to/team-refocus.md或把内容打进上下文包后用OPENRIG_REFOCUS_CONTENT_REF引用——注意 REF 是最高优先级且解析失败会有明确的失败横幅与兜底便于排障。七、源码级验证测试如何钉死这份契约Refocus 的行为契约并非文档自说自话而是被两组测试逐条钉死refocus-context-ref.test.ts覆盖内容阶梯优先级REF FILE 实例内容 shipped default、REF 失败横幅与兜底、SessionStart 永不注册/永不注入、所有已注册事件的输出要么是合法 no-op 要么是 schema 有效的hookSpecificOutput、Codex 精确使用PostCompact、默认开启/按需/可关闭、真实的双树 trace fixtureLEARNED.md链 SPEC.md/NOTES.md链在light下只输出 intent 与文件名、full下输出完整正文与 notes、Stop保留 pending 且UserPromptSubmit消费一次、以及rig queue whoami推导--work-start的当前工作绑定OPR.0.5.8.14refocus-occupant-baseline.test.ts钉死 occupant 身份键规则新 occupant 从自身基线起算、绝不继承前任lastBytes与 pending、两种身份缺失层级transcript 键控回退 / 纯诊断哨兵、shrink 先清 pending 再重置基线、有界且碰撞稳定的文件名、遗留 seat 键状态只保留不迁移。这两组测试与 SKILL.md、refocus.md、trace-to-root.py、refocus.cjs 四份公开资产共同构成 Refocus 机制的完整证据链文档定义意图与配置脚本实现纯路径回溯hook 实现事件驱动注入测试锁定行为边界。结语Refocus 是 openrig 面向长时多 Agent 会话的方向校验器用三个问题做思想内核用trace-to-root.py的纯路径双树追踪做事实来源用四级内容阶梯做可定制性用UserPromptSubmit边界消费的 pending 机制做事件安全再用 occupant 身份键控的状态管理保证测量不被 seat 复用污染。无论你是想理解 openrig 的内部机制还是想为自己的团队定制 Refocus 提示内容都可以从$OPENRIG_HOME/refocus/REFOCUS.md或OPENRIG_REFOCUS_CONTENT_REF开始几分钟内让这套漂移检测落地到自己的实例上。赞分享人工智能AI Agent多智能体Agent 编排代码智能体CLI【免费下载链接】openrigMulti-agent harness that runs Claude Code and Codex together as one system项目地址https://gitcode.com/GitHub_Trending/op/openrig点击查看免费下载相关推荐Serial Studio 黄金会话回归Spec 0047基于双重重放与时间戳溯源对齐的解析器漂移检测方案Serial Studio 黄金会话回归Spec 0047基于双重重放与时间戳溯源对齐的解析器漂移检测方案 本技术指南完整解析 Serial Studio桌面应用数据可视化物联网OpenRig Refocus Channel把定向内容实时送达运行中 Seat 的机制与实践OpenRig Refocus Channel把定向内容实时送达运行中 Seat 的机制与实践 导读 在 OpenRig 多智能体编排系统中一个正在运行的人工智能AI Agent多智能体Agent 编排代码智能体CLIApache Spark SQL SET PATH 详解SQL Path 会话解析路径机制与配置指南Apache Spark SQL SET PATH 详解SQL Path 会话解析路径机制与配置指南 本文档围绕 Apache Spark SQL 4.2 引大数据数据分析批处理流处理机器学习图计算上一篇告别网盘限速烦恼九大平台一键直链下载终极指南下一篇Convex 本地组件Local Components实战指南在应用内部用 defineComponent 与 app.use 构建隔离的后端模块创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考