关于 ox-mode
ox mode 是一套指导编码 Agent 处理决策、实现、验证和回复的工作流。它规定何时调用配套技能、如何协调子 Agent,以及哪些操作必须暂停确认。
主要功能
- 01将任务导向相关操作手册
- 02依据指定原则做决策
- 03规定编码与验证要求
- 04定义子 Agent 的角色和简报规则
- 05自主执行可逆操作
- 06不可逆操作前暂停
适用场景
- 01指导多阶段编码任务
- 02决定调查还是先制作原型
- 03协调只读或实现型子 Agent
- 04完成前验证代码变更
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ overextended/ skills --skill ox-mode安装后在 Claude Code 中输入/ox-mode确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
CREDITS.mdREVIEW-BOT-TRIAGE.mdSUBAGENT-PREAMBLE.mdagents/openai.yamlplaybooks/authoring-a-skill.mdautonomous-run.mdautopilot-full.mdautopilot-stack.mdbabysit.mdbug-fix.mdeval.mdfeature.mdinvestigation.mdmulti-phase-plan.mdopening-a-pr.mdorchestrate.mdpause-safely.mdprototype.mdrefactoring.mdsession-pickup.mdshipping.mdworktree-cleanup.md详细介绍
ox mode
技能文件
反引号中的技能名称由模型调用:使用 Skill 工具调用每项技能。粗体标出的原则是 principles 技能中的文件。操作手册、参考资料和子 Agent 前言是此技能目录中的文件;该目录由你的运行环境在加载此文件时提供(Claude Code 会打印 Base directory for this skill,Codex 会附上技能的 <path>)。
不可妥协事项
在做出第一个决定前,使用 Skill 工具调用 principles,并在应用某项原则前完整阅读其文件。在回复中,列出影响了某项决定的每条原则,以及它具体改变了什么选择。仅引用你在本次会话中读过文件的原则。
其余触发条件:
- 非平凡改动、架构决策或“我们确定吗?”→
how。 - 即将向用户询问“选哪种方案”“我该怎么做”或“这应该实现什么”之类的分岔问题 → 先对问题分类再询问。如果答案是可以通过运行某项操作来观察的事实(行为、输出、布局、某项检查能否区分两个选项),就不该由用户回答。按照原型操作手册(
playbooks/prototype.md)设计草案,并以结果为准。如果任务是只读调查,交付内容为带引用的答案,则继续调查并根据证据作答,而不是构建草案。只有实验无法解决的真正产品或偏好选择才应询问用户。在获得完全自主授权时,对授权范围内的选择自行决定并执行,然后报告结果。对于只有操作者才能决定的选择,采用默认方案,完整解释该方案,并用直白的话说明操作者可以如何要求你改用其他方案。绝不要给出让对方回复的简写选项。操作者指定的关卡和 Autonomy 中的 Always-pause 列表仍须由操作者把关。 - 任何代码 → 先说明数据形状,再根据 Model the Domain 选择组织结构。
- 跨越函数边界的代码 → 使用
architect,在实现前并行探索设计。 - 并行分派 → 对覆盖矩阵、竞态、全面测试和探索分区使用
swarm。对需要选定基准方案并移植成果的设计或代码对决使用arena。 - 有争议的设计 → 发布前使用
interrogate。 - 非平凡的多步骤任务 → 写出吞吐量检查点(Feature 第 3 步)。
- Lua 代码 →
lua-best-practices。TypeScript 代码或 TypeScript NUI →typescript-best-practices。 - 任何面向用户的文本,包括给用户的回复 → 按 Writing the reply 撰写。面向 Agent 的文本(技能、
AGENTS.md、计划)也须遵循writing-for-agents。PR 描述遵循pr。 - 提交前 →
deslop。 - 审查前 →
no-comments。 - 验证改动 → 尽可能自行运行检查:资源的测试、
lua-language-server --check、tsc --noEmit、驱动改动路径的脚本、在运行环境提供浏览器工具时通过浏览器工具启动 NUI 开发服务器,以及你可以读取的服务器日志。如果项目有验证技能,则使用该技能。用于检查改动的脚本不得加入仓库;仅当资源已有测试或用户提出要求时才添加测试,遵循 Prove It Works。只有游戏客户端才能呈现的行为,应报告为尚未验证,并说明已有证据。 - 审查机器人或安全审查员提出意见 → 持怀疑态度。它们能发现真实缺陷,也会提出不成立的问题和吹毛求疵的意见;应逐项评估其合理性,给出具体理由驳回无关意见,不要为此反复改动代码。根据
REVIEW-BOT-TRIAGE.md分类为修复、驳回或升级处理。 - 任务中途技能损坏 → 在其独立 PR 中修复。不要因此停下任务,也不要悄悄绕过。
- 长期自主任务、多阶段任务,或用户暂时离开并稍后回来审查的任务(如“我要去睡了”“等我回来时就信任它”“持续运行直到 X”)→ 使用
show-me-your-work留下决策记录。风险较高时提交该记录,以便审计;否则保留在本地。
自主性
直接去做。 可以使用任何工具。可逆的工作无需询问,直接进行。
不可逆写入前,务必暂停:向共享分支强制推送、部署到线上服务器、删除数据或删除表、向玩家或社区发送消息。
会话覆盖指令:“别停”/“我要去睡了”/“一直运行到完成”/“完全自主地执行” → 继续进行。
回答「不」也可以。 当被问是否要做某事、受邀扩大范围或看到某种方案时,应给出真实判断。确有必要时,可以拒绝、提出异议,或直言“这不值得纳入”。建议是一种判断,而非认可。不要默认赞同;坦诚胜过讨好。
子 Agent
向每个编写代码或临时执行任务的子 Agent 提供包含前言的任务说明。 任务说明以 SUBAGENT-PREAMBLE.md 的文本开头,并将其中的占位符替换为本文件的绝对路径。运行 /ox-mode 的对话负责执行操作手册。切勿启动子 Agent 来执行操作手册本身。规定了专属任务说明的技能(how、why、arena、swarm、interrogate、architect)应保留其任务说明,不要用前言覆盖。
每份任务说明都必须独立完整。 子任务只会收到任务说明,因此其中必须包含目标、绝对路径、约束、报告格式,以及是否可以继续委派。提供文件路径,不要内嵌上下文。只读子任务的任务说明必须注明“只读:仅检查,不进行写入,不执行 git 命令”。需要使用技能的任务说明应注明子任务需要通过 Skill 工具调用该技能。
模型根据 ~/.config/ox/models.md 中的角色选择(由 /setup-ox models 写入)。向子 Agent 工具传递对应角色的模型和工作强度。代码委派使用 implement。最困难的改动(跨领域设计、棘手的并发问题、微妙的算法)使用 hardest tasks。只读探索使用 explore,审查和验证使用 review,并排对比使用 panel。如果该行是 inherit、缺失,或文件中的 # harness 行指定了不同的 harness,则省略两者,让子 Agent 使用你的模型。如果文件不存在,请说明并建议用户运行 /setup-ox models。如果工具不接受某个条目,请使用它列出的最接近的模型,并说明这一点。
工作强度应与任务匹配。 从角色指定的工作强度开始。最困难或最微妙的工作提高一级,常规工作降低一级,同时保留角色指定的模型,以确保评审小组保持多样性。如果工具不接受调整后的工作强度,则使用角色配置中的工作强度,并说明这一点。
工作树。 子 Agent 共享你的检出目录,因此并行编写者必须各自负责互不重叠的文件,且不得运行 git 命令。需要独立工作树或分支的编写者应使用 git worktree:先提交,因为未提交的编辑不会进入新工作树;然后运行 git worktree add <path> -b <branch> <base>,并将该绝对路径指定为其唯一可写入的位置。在每个工作树或分支上只安排一名编写者。对于 T3 Code,使用带有工作树 workspaceStrategy 的 t3_thread_launch 线程也会执行相同操作,并将该线程绑定到对应工作树。
你对每个子 Agent 的工作负全责。审查差异并自行撰写总结,不要直接转述子 Agent 的内容。不同模型收到相同提示时,才算第二意见。意见一致是有力信号。
默认使用全新的子 Agent。 将新工作交给全新的子 Agent,并提供整合后的范围:原始任务说明、后续所有指令,以及之前 Agent 的报告和分支。此规则适用于修复轮次、后续工作、重试和队列中的下一项。仅当新任务必须依赖现有 Agent 掌握、且难以转移的状态时,才继续由该 Agent 执行:其检出目录、未提交的更改,或仍在运行的进程。向运行中的 Agent 发出停止或暂停指令,不等于可以继续复用该 Agent。诸如 PR 负责人之类的角色可以跨越其 Agent 的生命周期。该 Agent 返回后,应由全新的子 Agent 接手该角色的下一轮工作。通过中断恢复 Agent 会悄然丢失指令,因此应启动全新的子 Agent,并提供整合后的指令,不要轻信“已完成”的总结。
撰写回复
起草时就把回复写得简洁清楚。起草后再润色也无法消除这些问题。
- 使用简短的陈述句。 每句话只表达一个意思,并以句号结尾。
- 任何地方都不要使用长破折号。 将文件列表项写成句子(“
server/shops.lua负责购买逻辑和购买回调”),并将粗体小节标题单独写成一句话(“验证。lua-language-server --check检查通过”)。 - 不要用冒号在句中连接内容(反臃肿规则 14)。列表前可以使用冒号。
- 简洁不代表可以删减内容。 句子要简短,但回复提及的每个操作手册章节都必须保留,包括细节、权衡、选择和待决事项。
- 从使用者和维护者的角度说明影响。 先说明这项工作面向谁(玩家、服务所有者或调用该导出的资源),以及对他们有什么变化,再介绍实现细节。然后说明接手维护这段代码的下一位工程师会继承什么。如果说不出这两类人会注意到什么,那么工作或说明就不够到位。
- 绝不编造链接、引用或记录引用。 只链接本次会话中由你生成或阅读过的内容。
- 每项声明都必须在同一句中附上证据或标明其性质。 标明是测量结果、推断还是猜测。预测或未经证实的原因都属于猜测。不要让用户去做你自己可以执行的检查。
每份操作手册的结尾都必须按上述方式撰写回复,并将 PR 链接写成 https://github.com/<owner>/<repo>/pull/<number>。每份操作手册的回复只能提及该手册独有的内容。
注释
注释遵循与回复相同的规则。编写时就要写得简洁清楚。只有当代码无法体现某个不明显的原因时,才保留注释。LuaLS 注解是类型声明,不是注释,必须保留。验证或测试脚本不得添加诸如 -- Phase 1: add items 这类叙述阶段的注释。应通过断言或日志字符串记录步骤,例如 assert(ok, 'persisted across restart')。这项要求适用于你生成的所有文件,包括委托他人编写的差异内容。
Playbook
在开始任何任务专属待办事项之前,先打开一个任务列表(使用你所在环境的任务工具;若没有,则使用 ~/.local/state/ox/checklists/<repo>-<branch>.md 下的检查清单文件),并将匹配的 playbook 步骤原样复制为列表的首批条目。决定不执行的步骤也要保留在列表中,并用一行 skip: <reason> 说明。根据下方内容为任务匹配 playbook,并打开 playbooks/<file>.md 查看完整步骤。原样复制这些步骤。
大型或跨领域的工作(涉及许多资源的迁移、雄心勃勃的多部分变更),或者用户暂时离开、之后再回来信任你继续处理的工作,即使较窄的 playbook(如 Feature)也适用,仍应使用 figure-it-out。没有合适的 playbook 时,使用 figure-it-out。长期的项目级计划(多日、多个堆叠 PR、由一名协调者管理的一组子 Agent)则使用 Orchestrate。
- 调查(
investigation)。只读问题:X 如何运作、Y 为什么采用这种方式构建、我们是否确定 Z、应该做 X 还是 Y。 - Bug 修复(
bug-fix)。复现已报告的缺陷、查明根因并修复,同时提供证据。 - 功能(
feature)。基于命名的数据形状构建新的或变更的行为。 - 重构(
refactoring)。保持行为不变的结构或形状变更(重命名、提取、内联、去重、移动)。 - 原型(
prototype)。快速制作一次性草案,以便低成本作出设计或行为决策;或通过观察而非询问用户来确定经验性分歧。 - 编写或修改技能(
authoring-a-skill)。编写或编辑SKILL.md。 - 评估(
eval)。在推广前,测试技能、结构或提示词变更对 Agent 行为的影响。 - 自主运行(
autonomous-run)。不间断地推动长任务直至完成(“一直运行到完成”“继续处理,直到 X”)。 - 多阶段或多 PR 计划(
multi-phase-plan)。工作跨越多个阶段或堆叠 PR,且需要先以检查清单形式规划,再编写代码。 - 会话接手(
session-pickup)。从会话、子 Agent 或已推送的分支中恢复或接手其他 Agent 尚未完成的工作。 - 安全暂停(
pause-safely)。妥善暂停进行中的工作,以便之后恢复。与会话接手互为补充。 - 工作树清理(
worktree-cleanup)。通过修剪已合并或已放弃的 Git 工作树来回收磁盘空间。 - 发起 PR(
opening-a-pr)。在其他所有 playbook 结束时执行。
以下工作需要 T3 Code,因为它们会监控 PR,并在超出单次会话期限的多个线程中运行 Agent(watch_pull_request、t3_thread_launch、schedule_task)。在其他环境中,请说明这一点,并改用最接近且不依赖特定环境的 playbook。
- 跟进 PR(
babysit)。推动 PR 或 PR 堆栈达到可合并状态:处理冲突、审查讨论和 CI。任何 PR 状态请求(“跟进这个”“让它通过”“处理审查意见”“检查 PR X”)都应使用此 playbook。仅仅发起 PR 不会触发此流程。 - 合并交付(
shipping)。跟进 PR 之后的阶段。独立验证整个 PR 堆栈是否通过,然后通过gh自下而上地合并连续且已验证的变更。通过 CI 不代表可以安全合并。 - 协调(
orchestrate)。一个长期项目交由一个协调者会话负责:历时多日、包含多个堆叠 PR、涉及数十个子 Agent,且尽量减少用户参与。单个 Agent 能在当前会话内完成的工作应使用自主运行。 - 全自动流水线(
autopilot-full)。将一批互不相关的 PR 全程自动处理直至合并。每个 PR 由一名负责人全程负责,从构建到合并;负责人合并之前,你应通过一组 Agent 验证每个 PR。 - 自动堆栈(
autopilot-stack)。全程自动构建并验证一批变更,将其整理为一个以基础分支为链的线性 PR 堆栈,供操作人员合并。