关于 codex-collab
codex-collab 通过 Codex app-server JSON-RPC 协议连接 Claude 与 Codex。它支持通过命令行运行任务和代码审查,也支持异步对等消息,以延续对话并协调工作。
主要功能
- 01通过命令行执行任务与审查
- 02异步对等消息
- 03续接并查看对话线程
- 04配置 Codex 服务连接方式
- 05转发审批与咨询消息
适用场景
- 01让 Codex 执行编码任务
- 02审查拉取请求或本地改动
- 03从 Claude 续接 Codex 对话
- 04查看任务进度并接收咨询
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ kevin7qi/ codex-collab --skill codex-collab安装后在 Claude Code 中输入/codex-collab确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
CODE_OF_CONDUCT.md.gitattributesLICENSEbun.lockCONTRIBUTING.md.gitignoreCLAUDE.mdREADME.zh-CN.mdpackage.jsonREADME.mdinstall.ps1install.sh.github/workflows/ci.ymlcontracts/contracts.test.tsscripts/ci-local.tssrc/approvals.tsbroker-client.tsapprovals.test.tsbroker.test.tsbroker.tsclaude-transcript.test.tsclaude-tasks.tsclaude-tasks.test.tsclaude-transcript.tsclaude-sessions.tsbroker-server.tsbroker-server.test.tsclaude-sessions.test.tsclaude-trust.test.tscodex-session.test.ts详细介绍
codex-collab
codex-collab 是 Claude 和 Codex 之间的桥接工具。它通过 codex app-server JSON-RPC 协议与 Codex 通信,让你能够以结构化、事件驱动的方式使用 Codex 的能力,包括发送提示词、代码审查、使用工具和编辑文件。需要安装 bun,并确保 codex CLI 位于 PATH 中(运行 codex-collab health 进行验证)。
选择使用方式
codex-collab peer up(前台运行,只需几秒,支持幂等)会输出工作区地址 codex(myproject-a1b2c3);ListAgents 会显示该地址,以及每个进行中对话对应的一个条目。向其中任意对象发送 SendMessage,是与 Codex 对话的常规方式。需要 review、在当前轮次内获取结果(run 会阻塞运行并以状态码退出),或使用 --goal、--template 或交互式审批策略时,请改用 CLI。两种方式会生成相同的线程:通过 CLI 启动的线程之后仍可发送消息,而通过消息建立的对话也会显示在 codex-collab threads 中。
选择使用方式
通过 codex-collab CLI 驱动 Codex 交互:使用 run 执行任务,使用 review 进行代码审查,使用 --resume 继续后续对话。ask 通道用于 Codex 在任务中途联系你;next 会监听这些事件。
原生对等消息传递
向 codex(myproject-a1b2c3) 发送 SendMessage 会开始或继续一段对话。任何消息开头都可以包含由 key: value 行组成的头部块;在 Codex 看到文本前,这些行会被移除。topic: 用于命名或选择对话(后续的 topic: 会切换到该对话,或开始新对话);model:、effort: 和 timeout:(每轮的秒数;默认值为 3600 或 config timeout)用于设置对话配置,并在后续消息中从下一轮起更改配置;sandbox: 和 approval: 在对话开始时确定(approval: 只接受 auto;Codex Guardian 的交互式审批提示会发送到 CLI 客户端,无法通过消息传递处理)。解析会在遇到第一行不属于已识别键的行时停止,因此普通文本不会被误当作头部内容。
topic: auth refactor
effort: xhigh
sandbox: read-only
Review the login flow and tell me what you would change.
每段对话都会以独立条目的形式显示在 ListAgents 中,条目名称就是对话名称。回复消息的 from 地址即可继续对应的对话;如果向正在忙碌的对话发送消息,该消息会被送入正在运行的轮次,并在该轮结束时得到回复。消息传递是异步的:发送后请结束当前轮次——不要轮询、休眠或阻塞等待回复。回复会作为跨会话消息自行到达并唤醒你的会话,即使消息到达时你正忙于其他工作也是如此。若回复在当前轮次中途到达,它会并入你的上下文并显示在 Claude Code 终端中,但不会显示在会话的远程视图(手机、网页)中。通常只需转述回复的内容;只有在必须让对话记录包含原文时,才需要运行 codex-collab output <id> --last——例如面向远程读者,或接收方的 crossSessionInbound 设置拦截了回复时。
通过消息传递的对话会写入与 CLI 运行相同的运行记录,因此可以对其使用 codex-collab progress <id>、output、follow 和 kill;<id> 是对话地址中的短 ID(peer-<id>.sock),codex-collab threads 会将这些对话与 CLI 运行一同列出。超过时限的轮次会停止并报告超时,因此没有消息表示 Codex 仍在工作——使用 progress 查看它正在做什么,而不是等待。如果 Codex 在任务中途需要你作出判断,可能会发送 [consult] 消息;回复该地址即可作答。如果你不回复,Codex 会在超时后自行继续。
如果 peer up 报告消息传递不可用(Windows 或较旧版本的 Claude Code),则由 CLI 处理所有操作。
Codex 也可以直接联系你:在 Codex 会话中运行 codex-collab send,会通过 Codex 自己创建的临时对等端 codex(<thread>-<hash>-<task>) 向你的会话发送消息,每条消息对应一个临时对等端;消息的最后一行会指出 Codex 线程。使用 SendMessage 回复该地址。回复会一直为 Codex 会话保留,无论工作需要多长时间,直到任务在发送四小时后过期,因此消息中不包含截止时间。在由 codex-collab 启动的会话中,用户通过 Remote Control 回答提示所花的时间不计入这几小时;用户一旦回答,剩余回复时间至少为 60 分钟(config linger)。如果 send 在工作区中未找到 Claude 会话,它会恢复最近停止的后台会话(保留原有对话),或者启动一个新会话——在工作目录中创建 claude(<workspace>-<hash>) 会话,不包含用户的任何对话,并以 auto 权限模式运行,使其可以执行 Codex 交办的工作;默认情况下,该会话会在空闲 60 分钟后停止(config linger)。
Codex 自己的应用服务器
当 Codex 运行共享应用服务器(codex app-server daemon start,绑定到 ~/.codex/app-server-control/app-server-control.sock)时,工作区代理会连接到该服务器,而不是启动一个私有服务器。config server 用于控制此行为:auto(默认值)会在套接字有响应时连接共享服务器,否则回退到私有服务器;shared 会强制使用共享服务器,没有共享服务器时则失败;private 则绝不连接共享服务器。环境变量 CODEX_COLLAB_SERVER 可覆盖单次调用的设置;CODEX_COLLAB_SERVER_SOCKET 可覆盖控制套接字路径。设置会在代理启动时读取;运行 codex-collab peer up 会重启工作区代理,使更改生效。health 会显示代理连接的是哪台服务器。
共享服务器上的一切都处于同一个空间:你启动的轮次会实时显示在 Codex 应用或终端 UI 中,threads --discover 会标记其他客户端已打开或正在运行的线程,而 run --resume <id> 会加入此类线程。发送给正在运行轮次的线程的提示词会并入该轮次,而该轮次仍归属于另一个客户端:用户会在自己查看的位置处理审批,codex-collab 绝不会处理。如果提示词包含覆盖项(-m、-s、--approval、--dir)或 --goal,codex-collab 会拒绝,因为这些设置不能应用于他人的轮次。codex 终端 UI 会拒绝其正在监视的线程上的所有动态工具调用,这意味着轮次中途向你发出的咨询会在你回答前被拒绝;codex-collab 会将你的回答作为注入消息发送到正在运行的轮次。在空闲线程上启动的轮次则照常归你所有。没有共享服务器时,Codex 允许每个线程由一个写入方操作;如果线程被其他地方占用,请求会被拒绝并返回退出代码 8,同时列出可能占用它的进程类型,但无法判断实际是哪一种。代理释放线程后,该线程通常会在约 7 分钟后(Codex 0.153.4)解除占用:CLI 运行会在线程轮次结束时解除;消息对话则会在线程对等方退出时解除(空闲 30 分钟)。
运行命令
run 命令可以一次调用处理带提示词的任务:启动一个线程、发送提示词、等待本轮完成,然后打印输出。
# Research task
codex-collab run "what does this project do?" -s read-only --content-only
# Implementation task
codex-collab run "add input validation to the login form" --content-only
# Resume an existing thread (preserves conversation context)
codex-collab run --resume <id> "now check the error handling" --content-only
# Specify working directory (omit -d if already in the project dir)
codex-collab run "investigate the auth module" -d /path/to/project --content-only
# Long or quote-riddled prompt: pass it on stdin with `run -` (no shell-quoting hazards)
cat prompt.md | codex-collab run - --content-only
重要 — 所有 codex-collab Bash 命令的执行规则:
-
始终使用
dangerouslyDisableSandbox=true——该工具会写入~/.codex-collab/,此路径不在沙盒允许列表中。 -
对于
run和review:还要使用run_in_background=true——这些命令需要运行几分钟。启动后,告知用户任务正在运行,然后结束本轮。运行期间:不要轮询、阻塞、等待,也不要启动 Agent 进行监控——任务完成后会自动通知你。如果 Codex 运行期间有其他任务完成,请照常处理,不要检查 Codex。收到通知后:根据下文的“上下文效率与结果可见性”展示结果。 -
run --detach会在几秒内返回——请在前台运行。 -
对正在运行的任务执行
follow会一直阻塞,直到任务完成;follow --watch则永不退出:两者主要供用户在自己的终端窗格中查看——不要自行运行--watch。唯一面向 Agent 的用法:在后台 Bash 中执行follow <id>,作为分离运行任务的完成信号(参见下文的“分离运行”)。对已完成的任务执行follow会在前台快速重放结果。 -
next会阻塞,直到有内容需要响应——请在后台运行;命令退出即表示收到通知(参见下文的next部分)。 -
其他所有命令(
kill、threads、progress、output、peek、peer、approve、decline、answer、questions、clean、delete、config、models、templates、skill、health、version):请在前台运行——这些命令会在几秒内完成。update也在前台运行,但update --yes会下载并重新构建,因此需要几分钟。
如果用户在任务进行期间询问进度,请使用 TaskOutput(block=false) 读取后台输出流,或使用 codex-collab progress <id> 仅查看日志末尾。<id> 是 codex-collab 线程的短 ID(8 位十六进制),不是 Claude Code 任务 ID——它会显示在第一行进度信息中([codex] Thread a1b2c3d4 started);使用 codex-collab threads 可查看线程列表。进度信息会实时流式输出:
[codex] Thread a1b2c3d4 started (gpt-5.6-sol, workspace-write)
[codex] Running: npm test
[codex] Edited: src/auth.ts (update)
[codex] Turn completed (2m 14s, 1 file changed)
代码审查
对于常规 PR 审查,调用 review 时不要提供提示词。 默认的 pr 模式会针对默认分支运行内置的结构化差异工作流:
# PR-style review against default branch (default — NO prompt)
codex-collab review -d /path/to/project --content-only
# Review uncommitted changes
codex-collab review --mode uncommitted -d /path/to/project --content-only
# Review a specific commit
codex-collab review --mode commit --ref abc1234 -d /path/to/project --content-only
提供提示词会切换到 custom 模式——该模式会将你的文本作为自由格式指令发送,并绕过内置的差异工作流。如果聚焦或定向审查比默认差异工作流更合适(例如,“审查其中的安全问题”“只检查错误处理”),请使用此模式。常规 PR 审查默认使用 pr 模式:
codex-collab review "Focus on security issues in auth" -d /path/to/project --content-only
审查为单次执行。 每次调用 review 都会在临时审查子线程中运行一次审查,然后退出——你无法继续该次审查,也无法向审查者提出后续问题。要跟进审查发现的问题,请在提示词中提供相关审查输出,并使用 run --resume <id>。
review --resume <id> 适用于在 Codex 已经处理过的任务线程上下文中运行审查。它会将该上下文分叉到一个临时的只读审查线程中,因此不会重新配置或修改原始任务线程。不带 --resume 的 review 会创建一个在审查结束后消失的临时线程——无先前上下文的独立审查请使用此方式。
审查模式:pr(默认)、uncommitted、commit、custom
上下文效率与结果可见性
- 读取输出时使用
--content-only——仅显示结果文本,不显示进度行。 run和review会在完成时打印结果;后台任务的结果会写入其输出文件。- 使用 Bash 而不是 Read 工具读取结果:用
cat查看后台输出文件,或对已完成的会话运行codex-collab output <id> --last(--last:仅显示最新一轮)。Bash 输出会显示在用户可见的对话记录中;Read 工具的内容只会留在你的上下文中,不会显示给用户。 - 然后只补充综合分析——结果已经显示在屏幕上,因此不要重复内容:说明你核实了什么、不同意什么,以及还会补充什么。
恢复会话
连续任务涉及同一项目时,恢复现有会话。Codex 会保留对话历史,因此在 Codex 已有前次交流的上下文时,“现在修复你发现的问题”或“也检查一下测试”等后续请求会更有效。任务无关或针对不同项目时,开启新会话。
如果用户要求继续或跟进先前的任务,但你的上下文中没有会话 ID,请按以下流程查找:
codex-collab threads --discover——查看最近的 5 个会话(服务器端和本地)。如果会话是在本次会话中启动的,使用codex-collab threads --session将列表缩小到这些会话。- 如果不确定哪个会话合适,运行
codex-collab peek <id>查看候选会话的最后一次交流。 - 对于特别长的会话,如果仅查看最后一次交流还不够,使用
codex-collab peek <id> --limit 100 --full启动子 Agent,并让其总结。这样可以避免大量内容涌入你自己的上下文。 - 运行
codex-collab run --resume <id> "..."继续会话。
只有在确实需要恢复会话时才运行 --discover——这是按需执行的查找操作。
--resume 标志接受两种 ID 格式:
--resume <short-id>——8 位十六进制短 ID(支持前缀匹配,例如a1b2)--resume <thread-id>——完整的 Codex 会话 ID(UUID,例如019d680c-7b23-7f22-ab99-6584214a2bed)
| 情况 | 操作 |
|---|---|
| 同一项目,新提示词 | codex-collab run --resume <id> "prompt" |
| 同一项目,需要审查 | codex-collab review --resume <id> |
| 不同项目 | 开启新会话 |
| 会话卡住或出错 | 运行 codex-collab kill <id>,然后开启新会话 |
如果忘记了会话 ID,使用 codex-collab threads 查找活跃会话。
分离运行与跟踪
何时分离: 默认使用后台 run——即使当前轮次结束,它也会继续运行,并免费发送完成通知。只有在以下两种情况下才使用 --detach:(1)轮次必须在当前 Claude 会话结束后继续运行——会话退出或重启时,后台任务会被终止,从而中断正在进行的轮次;而分离运行会继续执行,其结果之后可通过 output <id> --last 获取;(2)用户在自己的终端中操作,并希望轮次不受该 shell 影响。不要分离常规任务:你会失去自动完成通知(下文将介绍如何恢复)。
run --detach 会将轮次交给分离运行器,并在轮次实际开始运行后立即返回——轮次的生命周期与调用它的 shell 脱钩,因此即使 shell 或会话结束,它也不会被终止:
codex-collab run "large refactor task" --detach --approval auto
# [codex] Detached: thread a1b2c3d4 running (gpt-5.6-sol)
# [codex] Follow: codex-collab follow a1b2c3d4
follow [id] 是运行中线程的实时视图:它会先重放当前运行截至此时的内容,然后持续输出事件(命令及其退出代码、文件编辑、Guardian 决策、审批提示),直到运行结束,并以最终状态退出(退出代码 0 = 已完成)。如果未提供 ID,它会连接到工作区的活动运行(或重放最近一次运行),因此用户只需输入 codex-collab follow。如果运行已结束,它会重放该运行并退出,因此也可以快速查看发生了什么。
对于多轮 Claude ⇄ Codex 对话,建议用户在单独的终端窗格中保持 codex-collab follow --watch 运行——它不会在轮次之间退出:每个新运行都会自动捕获(每个运行只显示一次,按启动顺序排列,即使线程并发运行也不例外;某个运行若在显示另一个运行期间结束,则会快速重放)。它会呈现专门设计的彩色视图,不消耗模型上下文,并可通过 Ctrl-C 停止。如果有多个线程并行运行,且用户希望为每个线程使用专用窗格,可通过 follow <id> --watch 将其限定到某个线程。
分离运行的完成信号(面向 Agent): 分离父进程会在轮次开始时退出,而不是在轮次结束时退出——因此,将 run --detach 放到后台运行不会提供完成通知。需要此类通知时,可在后台 Bash 中运行 codex-collab follow <id>:它会在运行到达终止状态时立即退出(退出代码 0 = 已完成),该退出就是通知。
无需轮询即可等待问题和审批(next)
codex-collab next 会阻塞,直到工作区中出现第一个需要响应的事件——ask 通道中的问题(见下文“Ask 通道”)或待处理的交互式审批;随后会完整打印该事件(问题正文和回答命令;无需再执行 questions <id>),然后退出。退出代码:0 已交付事件 · 10 工作区空闲(没有正在运行的任务,也没有待处理事项——这是自动清理路径,因此运行结束后监听进程不会悬空)· 3 仅在明确指定 --timeout <sec> 时返回。
只要运行可能产生可回答的内容,就应启动它:任何使用 ask 通道的运行(--template collab),或可能阻塞的审批模式(on-request、on-failure、untrusted)。如果使用 --approval never 且没有 ask 模板,就不会触发任何事件——此时启动监听器是浪费(运行结束时它会退出 10)。使用 auto 时,Guardian 会自主处理审批,但问题仍会触发。
操作方式:同时启动运行任务和 next,将它们作为两个后台 Bash 命令,然后继续工作——next 退出就是通知。next 只监听一个工作区——使用与运行任务相同的 -d 启动它(直接运行 next 只会监听当前工作目录对应的工作区,且不会看到其他工作区的事件,最终会退出 10):
codex-collab next -d /path/to/project # in background Bash; its exit = something needs you
# → Question q7f3a2c1 expires in 9m
#
# <full question text>
#
# Answer with: codex-collab answer q7f3a2c1 "<text>" -d '/path/to/project'
在同一条消息中作答并重新启动监听:next 退出时,并行调用 answer(或 approve)以及一个新的 next——这样每个事件只需一次唤醒和一轮交互。仅在作答后重新启动监听;next 不会记住已交付的事件,因此若问题仍待处理时就重新启动,它会立即对同一事件触发。挂起的 next 不消耗上下文,长时间运行的任务可能会多次提问——持续循环,直到运行任务完成(它退出时会通知你),或 next 退出 10。
无论运行任务由哪个进程持有,磁盘上的状态都会为这一切提供支持:运行记录(workspaces/*/runs/<runId>.json)会在阻塞期间保存 pendingQuestion 和 pendingApproval,并通过 questions[] 记录已解决事项的审计轨迹。
提问通道(Codex 提问,你来回答)
在长时间运行或自主运行期间,Codex 可以在一轮中途暂停并向你提问,而不会让整个运行赌上你的回复。使用内置的 collab 模板启动运行,即可教会它使用该通道:
codex-collab run "large refactor task…" --template collab --timeout 3600
在一轮中途,Codex 会运行 codex-collab ask "…",最多等待 10 分钟,然后以两种方式之一结束,并将结果都写入 Codex 自己的上下文:你的回答(用于引导),或友好的无回答通知(失败时继续;运行会继续,未回答的问题会记录在运行记录中)。问题关乎判断,而非许可——与审批不同,问题不会导致运行被永久阻塞。模板会声明该通道及其成本,但刻意不规定任何规则:是否提问、何时提问,由 Codex 自行决定。
下方的邮箱是 Codex 在一轮中途提问时使用的通道,也是其他一切机制失效时的回退方式。
恢复长时间的协作对话时,请重申该通道。 通道说明会随首条提示词传递,而长对话会从最早的内容开始压缩,因此请在恢复提示词中用自己的话补上一句话(例如:“协作通道仍然开放——codex-collab ask 可以联系到我。”)。Codex 只需要了解大意;具体机制可通过 codex-collab --help 重新查阅。
待回答的问题会显示在进度流中(以及 follow):
[codex] QUESTION FROM CODEX (expires in 10m)
[codex] Migrating auth to JWT next. Drop the FK constraints or dual-write?
[codex] Answer: codex-collab answer q7f3a2c1 "<text>" -d '/path/to/project'
按以下优先顺序处理:
- 根据你掌握的上下文回答——是你启动了运行,通常正好掌握问题所需的信息。问题具有中断优先级:你斟酌期间,Codex 正在消耗截止时间预算。
- 超出你的授权范围时,升级给用户处理——如果问题涉及偏好或产品决策,请转达问题,并将用户的回答转达回来。
- 明确拒绝——使用
codex-collab answer <id> "Your call — proceed and note the decision",而不是任由问题悄然过期,这样审计记录就能区分有意决定“继续”和无人及时回答。
撰写回答:传递判断,而非只给出答案。 说明选择、理由,以及 Codex 应在什么情况下改弦更张或再次提问——只回复一个“是”只能引导一次决策,有理有据的回答则能引导之后的多次决策。对于较长的回答:codex-collab answer <id> - 会从标准输入读取内容。
codex-collab questions # list pending questions (id, age, time left)
codex-collab questions <id> # full text of one question (list view clips long ones)
codex-collab answer <id> "text" # answer one (prefix matching works)
审批
默认情况下,Codex 会自动批准所有操作(--approval never)。如需更严格的控制:
# Require approval for Codex-initiated actions
codex-collab run "refactor the auth module" --approval on-request --content-only
# Guardian decides each request autonomously — approve or deny, never blocking on a human
codex-collab run "refactor the auth module" --approval auto --content-only
使用 --approval auto 时,Guardian 会自行审批或拒绝每项请求——不会升级到交互流程,因此自动运行永远不会阻塞。其决策会显示在进度流中(Guardian approved (low risk): …),完整内容则保存在对话日志中;判断类决策和拒绝还会显示为 Guardian warning: … 行,其中包含风险等级、用户授权评估及理由。请注意,Guardian 会权衡该操作是否由用户提出——用户明确要求的命令具有较高的授权等级,通常会获批;Guardian 的作用是发现模型超出授权范围行事的情况。
Guardian 拒绝某项操作后,运行会继续(Agent 会另寻方法),拒绝记录会保存在本地,并附上进度提示(Override available: codex-collab approve --guardian <review-id>)。如果用户认为该操作其实没有问题:
codex-collab approve --guardian # list pending denials
codex-collab approve --guardian <review-id> # override one (prefix ok)
覆盖操作会在该对话中记录用户对这项具体操作的批准——不会立即执行任何操作;Agent 会在该对话的下一次运行中重试(codex-collab run --resume <short-id> "continue")。授权仅适用于该项具体操作,不适用于类似操作。
在交互式策略(on-request、on-failure、untrusted)下,审批请求会显示:
[codex] APPROVAL NEEDED
[codex] Command: rm -rf node_modules
[codex] Approve: codex-collab approve <approval-id>
[codex] Decline: codex-collab decline <approval-id>
回复 approve 或 decline:
codex-collab approve <approval-id>
codex-collab decline <approval-id>
CLI 参考
run、review、--detach 和 follow 的用法示例位于上方相应章节;以下是其余命令:
codex-collab output <id> [--last] # Full log for thread (--last: only the latest turn's output)
codex-collab progress <id> # Recent activity (tail of log)
codex-collab threads [--all|--discover] # List threads (--discover: include server-side, top 5)
codex-collab threads --session # Only threads the current session has run
codex-collab peek <id> [--limit N --full] # Recent conversation slice from server
codex-collab kill <id> [--clear] # Stop a running thread; an active goal is paused first (--clear abandons it)
codex-collab delete <id> # Archive thread (recoverable via `codex unarchive`), delete local files
codex-collab delete <id> --purge # Permanently delete server-side instead — NOT recoverable; needs explicit user intent
codex-collab clean # Delete old logs, stale mappings, old question files
codex-collab approve <id> | decline <id> # Answer a pending approval
codex-collab peer [up] # Peer status; `peer up` starts or restarts the workspace broker (and its peer)
codex-collab peer up # Start or restart the workspace broker (applies a changed `config server`)
codex-collab answer <id> "text" # Answer a pending ask-channel question (see The Ask Channel)
codex-collab questions [id] # List pending questions (with an ID: show its full text)
codex-collab next [--timeout <sec>] # Block until a question/approval needs you; print it in full
# (exit 0 = event, 10 = workspace idle, 3 = timeout)
codex-collab ask "q" [--timeout <sec>] # (invoked BY CODEX mid-turn, not by you) post a question, wait, fail open
codex-collab config [key] [value] [--unset] # Show/set/unset persistent defaults (model, mode, server, reasoning, sandbox, approval, timeout, memory)
codex-collab skill sync [--yes] # Regenerate installed SKILL.md — diff first, --yes applies (see Staying Up to Date)
codex-collab update [--check|--skip|--yes] # Check for / install a newer release (see Staying Up to Date)
codex-collab models | templates | health | version
注意:jobs 仍可用作 threads 的弃用别名。
选项
| 标志 | 描述 |
|---|---|
-m, --model <model> | 模型名称(默认值:auto — 最新可用模型) |
-r, --reasoning <level> | 推理力度:none、minimal、low、medium、high、xhigh、max、ultra(默认值:auto — 模型所支持的最高等级,最高为 xhigh) |
-s, --sandbox <mode> | 沙盒:read-only、workspace-write、danger-full-access(默认值:workspace-write)。review 不接受此标志(退出码为 1)——审查始终以只读模式运行,因此不要传入此标志,即使只是重述默认值也不行 |
-d, --dir <path> | 工作目录(默认值:cwd) |
--resume <id> | 恢复现有线程(run 和 review) |
| --timeout <sec> | (run、review)轮次超时时间,单位为秒(默认值:3600)。不要调低此值——Codex 任务通常需要 5–15 分钟,大型审查可能超过 20 分钟。目标处于活动状态时,超时时间适用于整个目标;到期后目标会暂停(参见 Goal Mode)。 |
| --timeout <sec> | (run、review)轮次超时时间,单位为秒(默认值:3600)。不要调低此值——Codex 任务通常需要 5–15 分钟,大型审查可能超过 20 分钟。目标处于活动状态时,超时时间适用于整个目标;到期后目标会暂停(参见 Goal Mode)。(ask)回答截止时间,默认值为 600。(next)等待时限,默认值为 none——它会一直等待,直到发生事件或工作区空闲。 |
| --approval <policy> | never、on-request、on-failure、untrusted、auto(默认值:never)——参见 Approvals。review 不接受此标志(退出码为 1):Codex 会将审查子 Agent 锁定为 never,因此此标志永远不会生效 |
| --memory | 允许 Codex 的记忆功能从本次运行创建的线程中学习(默认情况下,创建的线程会被排除,以免 Agent 驱动的会话影响 Codex 对用户的认知) |
| --detach | (run)轮次开始运行后立即返回——参见 Detached Runs |
| -w, --watch | (follow)持续跟进每个新运行,而不是退出——参见 Detached Runs |
| --mode <mode> | 审查模式:pr、uncommitted、commit、custom |
| --ref <hash> | --mode commit 的提交引用 |
| --base <branch> | PR 审查的基准分支(默认值:自动检测默认分支) |
| --all | 列出所有线程,不限制显示数量(threads 命令) |
| --discover | 向 Codex 服务查询本地索引中没有的线程(threads 命令);将其在 app-server 上标记为 open 或 active |
| --json | JSON 输出(threads、peek 命令) |
| --full | 在 peek 输出中包含所有项目类型(默认仅显示消息) |
| --template <name> | run 命令的提示词模板(优先检查 ~/.codex-collab/templates/,然后使用内置模板) |
| --goal <objective> | (run)在第一轮之前为线程创建目标(在 --resume 时替换目标)——参见 Goal Mode。仍需提供提示词:提示词是第一轮内容,目标是持续生效的目标。review 不接受此标志(退出码为 1)——审查是在临时线程上执行的单轮操作 |
| --budget <tokens> | (run)--goal 的令牌预算。请设置充足的预算——用量会按每轮完整上下文计算,因此单个小轮次也可能消耗约 60k。review 不接受此标志(退出码为 1) |
| --content-only | 仅输出结果文本(不输出进度行) |
| --last | (output)仅输出最新一轮的内容,而非整个线程历史记录(隐含 --content-only) |
| --session | (threads)仅显示当前会话运行过的线程 |
| --limit <n> | 限制显示的项目数量 |
| -- | 结束选项;后续参数均视为提示词文本 |
| - | (run)从 stdin 读取提示词——适用于较长或引号较多的提示词 |
退出代码(run、review)
0 已完成 · 1 失败 · 3 超时(活动目标已暂停,可恢复)· 4 已中断(kill)· 5 因等待审批而终止 — 请求已作废,因此不要尝试回答;使用更长的 --timeout 或 --approval auto 恢复 · 6 broker 忙碌且没有可用回退方案 — 暂时性问题,请重试 · 7 目标因受阻或用量/预算限制而结束 — Codex 需要指引:提供指导以恢复该线程,或使用 kill --clear 放弃目标 · 8 线程正被另一个进程占用(Codex 应用、终端会话)— 等待其释放,或在那里将其关闭;不会丢失任何内容。对于后台运行的任务,应根据退出代码而不是通过扫描输出文本来进行分支处理。
目标模式
目标会让服务不断自行启动后续轮次,直到目标完成(Codex 的目标模式,即用户 ~/.codex/config.toml 中的 goals = true)。Codex 可以在某一轮中途创建目标,也可以由你显式设置 — 对于需要轮数不定的开放式目标(让 CI 通过、迁移每个调用位置)很有用;范围明确的单项任务则无需使用:
codex-collab run "survey the call sites first" --goal "migrate all call sites to the v2 API, tests green" --budget 150000 --timeout 7200
codex-collab run "survey the call sites first" --goal "migrate all call sites to the v2 API, tests green" --budget 150000 --template collab --timeout 7200
run 会跟踪整个目标:后续轮次会流入同一条运行记录和日志,follow/output/threads 都能看到这些内容,且运行的退出代码反映目标的最终状态 — 已完成(0)、受阻/受限(7)、超时并暂停(3)。实际影响:
-
为目标运行设置较长的
--timeout(以小时计,而非分钟)— 它限制的是整个目标的时长,到期后会安全地暂停目标,而不会让它在后台无提示地继续运行。 -
暂停的目标会在该线程上运行新一轮时恢复(
run --resume <id> "...");使用kill --clear可放弃目标。 -
目标进行期间,提问通道和审批照常工作 —
next也会显示后续轮次中的问题。 -
目标进行期间,审批和咨询消息照常工作 — 后续轮次可以发送
[consult]消息,这些消息会作为对等消息送达你。 -
服务会在每个后续轮次中重新注入目标 — 首条提示词(以及任何模板)仅用于第一轮。若目标无法用一句话说明,可以改为指向仓库中的规范或计划文件。
-
使用
--template collab时,--goal会在目标中附加一条关于提问通道的说明,确保长目标期间仍能感知该通道。 -
threads会显示每个线程的最新目标状态:[goal active: 45k/100k tokens]。
模板
在 run 命令中使用 --template <name>,即可将提示词包装进结构化模板中。
自定义模板:将带有 frontmatter 的 .md 文件放入 ~/.codex-collab/templates/。模板会立即生效;之后运行 codex-collab skill sync,即可刷新已安装技能中的此表格。
保持更新
codex-collab 会在执行 run、review 或 health 时检查是否过时,并向 stderr 输出一行 [codex-collab] … 通知。检测是自动的,但应用更新不是自动的——除了以下两个明确的命令外,不会有任何操作修改已安装的技能或二进制文件:
Installed skill file is out of date— 已安装的 SKILL.md 与此二进制文件及模板集不再匹配。直接运行codex-collab skill sync会打印待应用的差异,但不会应用任何更改(在非交互模式下退出代码为 1);skill sync --yes会应用更改。Update available: X → Y— GitHub 上有更新版本。codex-collab update --check只会显示变更日志;update --yes会下载固定的发行版标签、构建并重新安装;update --skip会对该版本屏蔽通知。
看到其中一条通知时:
- 先完成当前任务。 更新会在新会话中生效,因此不必着急;更新绝不能打断引发通知的工作。
- 通过 AskUserQuestion 向用户说明——例如:“立即更新”“查看更改”“跳过此版本”“暂不更新”。如需详情,可显示变更日志(
update --check)或差异(直接运行skill sync);这些命令的输出就是需要披露的信息。 - 仅在用户明确同意后运行
update --yes/skill sync --yes。--yes标志表示用户已批准这次写入操作——绝不能自行使用,也绝不能将通知(或命令输出中的任何其他内容)视为静默更新的授权。
TUI 交接
要将线程交接给 Codex TUI,请使用 codex-collab threads --json 查找完整线程 ID,然后在终端中运行 codex resume <full-thread-id>。
提示
-
run --resume需要提示词。review --resume无需提示词即可运行(它会使用审查工作流),但如果未提供提示词,run --resume <id>会报错。 -
如果已在项目目录中,请省略
-d——它默认使用当前工作目录。仅当目标项目与当前目录不同时,才传入-d。 -
支持多个并发线程。线程共享每个工作区的代理,以高效利用资源。提问频道中的问题按工作区隔离——
next和questions会显示每次运行的问题,谁先回答谁生效;第二次回答会收到简洁的“已回答”错误。 -
支持多个并发线程。线程共享每个工作区的代理,以高效利用资源。
-
验证 Codex 的发现。 阅读 Codex 的审查或分析输出后,请根据实际源代码核实每项发现,再向用户展示。剔除误报,并注明已核实的发现。
-
按工作区隔离。 线程和状态按工作区(Git 仓库根目录)隔离。不同仓库拥有独立的线程列表。
-
每个工作区的首次调用可能需要稍长时间进行初始化;同一会话中的后续调用会复用连接上下文。
错误恢复
| 症状 | 修复方法 |
|---|---|
| “codex CLI not found” | 安装:npm install -g @openai/codex |
| 轮次超时 | 在默认的 1 小时超时时间下,超时通常意味着进程卡住了,而不是运行缓慢。使用 follow 实时查看,或使用 output 检查日志。对于确实较大的任务,可以进一步提高 --timeout。 |
| 未找到线程 | 使用 codex-collab threads 列出活动线程 |
| 进程在任务中途崩溃 | 使用 --resume <id> 恢复——线程状态会持久保存 |
| 审批请求一直挂起 | 运行 codex-collab approve <id> 或 codex-collab decline <id> |
| 对话的运行已完成,但没有收到回复 | Claude Code 会暂存权限类别与当前会话不同的对等消息(显示 Held peer message 通知)——用户可以放行该消息,也可以在 Claude Code 设置中将 crossSessionInbound 设为 accept。与此同时,可使用 codex-collab output <id> --last 查看回复。 |
| 问题在回答前已过期 | Codex 已根据自身判断继续执行——决定记录在运行输出和运行记录的 questions[] 中。如需现在调整方向,请在运行结束后执行 run --resume <id>。 |