首页 / 文章

Claude Code的Codex插件:安装、配置及避免审核循环

如何同时运行 Codex 和 Claude Code:选择主机、安装官方插件、共享 AGENTS.md 规则、使用审查与救援命令,以及限制审查循环次数。

发布者:REACTAPP.TOP阅读约 17 分钟3926 词

来源: Codex Plugin for Claude Code: Choose, Install, and Run a Reliable Two-Agent Workflow

任何同时运行过两个编程工具的人都知道这种流程:一个终端负责规划,另一个负责审核,而你则像个带意见的剪贴板,在两者之间来回复制文本。一旦试图让这种对话自动化,它们就会为逗号的使用问题开始争论,原本打算在午餐前结束的工作,到了下午四点还在反复修改同一个标题。

OpenAI 为 Claude Code 提供的官方插件 codex-plugin-cc 可以大幅减少复制操作。它允许你在 Claude Code 内部调用 Codex 的评审、任务分配和会话转移功能。使用方法非常简单:先将 Codex CLI 安装到机器上,然后在 Claude Code 中注册 OpenAI 的市场平台,接着安装该插件并重新加载页面,最后执行设置命令即可完成配置。如果采用相反的架构,即让 Claude 作为客户端在 Codex 内运行,则需要另一个独立的反向插件,且具有不同的安装路径。无论哪种情况,合理的步骤都是先共享项目相关说明,再设置相应的评审和任务交接规则,最后才实现自动化流程。

这种效率提升源于更短的切换时间,而非更智能的模型。那种只有一个主机终端、由客户端代理自行执行审查工作的系统,可以免去人工在各个窗口之间来回传输差分内容的麻烦。以下细节来自插件的文档和社区文章,而这些命令或模型名称自收集以来可能已发生变化,因此在依赖它们之前请务必查阅最新的README文件。

在安装任何内容之前先确定方向

想象一下坐进一辆汽车,车内的两个导航系统同时启动。一个倾向于走高速公路,另一个则喜欢走小路,而且它们都不会等你指定驾驶员。如果在不决定由谁来指挥下一个转向的情况下就驶离车道,最终就会因为两个屏幕互相干扰而陷入困境。

根本问题出在主机上。Claude Code 的 Codex 插件更像是额外的浏览器,而非额外的操控装置,因此在执行首个安装命令之前就必须确定由哪个终端来驱动。

存在两种方案,每种都有其特定的操作流程。$cc: 命令并不适用于 Claude Code 会话,而粘贴到 Codex 中的 /plugin 命令也无法调用相同的插件。

官方方案:Claude Code 内部的 Codex

这是 OpenAI 专为该目的开发的产品,名为 codex-plugin-cc。Claude Code 依然是工作空间,而 Codex 则作为访客代理加入,能够审查代码、对设计提出质疑、负责修复问题、运行后台任务以及在不同会话之间保持状态。

插件市场其实就是 Claude Code 用来查找可安装插件的注册表。操作步骤为:添加 OpenAI 的市场,安装 codex@openai-codex,重新加载页面,然后运行 /codex:setup。该插件会与你的本地 Codex CLI 以及 Codex 应用服务器通信,不会启动独立的云运行环境。当 Claude Code 已经处于你计划好的位置并可用于搜索和操作时,可选择此方式。如果博客文章与仓库的 README 内容不一致,以 README 的内容为准。

反向方式:Claude 内置在 Codex 中

Sendbird 的 cc-plugin-codex 则采用相反的机制。Codex 承载服务,而 Claude Code 作为访客被调用,通常是通过每个任务对应的新的非交互式 claude -p 子进程来调用。安装操作在 Codex 内部完成:

codex plugin marketplace add sendbird/codex-marketplace
codex plugin add cc@sendbird
$cc:setup

有一个幂等辅助命令 npx cc-plugin-codex install,可以重复运行以进行更新。$cc:setup 会检查钩子、缓存信任度以及可写路径,而反向钩子则需要在 ~/.codex/config.toml 的 [features] 部分设置 hooks = true。

还有第三个非官方选项:一个社区市场(yanchuk/claude-plugin-codex),它提供 $claude setup 命令。应将其视为社区软件,不要与 OpenAI 的插件混淆。

如果想要判断哪种产品更好,那是另一回事,此处的讨论仅限于配置方式。简而言之,决策取决于谁是主机、谁是客户端,以及允许输入哪种安装命令。

在 Claude Code 中安装官方插件

除非标题注明相反,否则本节其余内容将按照官方流程进行。品牌对比、VS Code与Cursor是独立的内容,而CLI本身,包括平台安装程序及首次运行时的沙箱选项,也有专门的安装文档。

如果Node.js版本低于18.18,或者机器上未对Codex进行身份验证,又或者跳过了重新加载步骤就判定插件出错,那么操作将会失败。

确认文档中规定的要求

官方插件需要 Node.js 18.18 或更高版本。Sendbird 的反向插件仅需 Node.js 18+,但通过官方途径使用的用户则必须满足更高的要求。此外,你还需要一个可正常运行的本地 Codex CLI 以及支付方式,也就是说需要 ChatGPT 的套餐(根据上游文档说明,免费套餐也可使用)或 OpenAI 的 API 密钥。Claude Code 也有自己的要求,要么使用 Anthropic 的 API 密钥,要么选择 Claude Pro 或 Max 套餐。这样一来就需要两款产品并分别付费,而该插件并不会将它们整合在一起。

如果缺少 CLI,请先安装它:

npm install -g @openai/codex

然后按照文档中记载的 Claude Code 流程进行身份验证:

!codex login

避免使用镜像网站和第三方可执行文件列表。合法的软件包来自 GitHub 仓库以及指定范围的 npm CLI。如果你的日常工具是 IDE 的侧边栏而非 Claude Code,那么你需要使用其他托管平台,其操作方法各有不同。

添加市场、安装、重新加载、配置

安装官方插件只需四条斜杠命令。斜杠命令是指在 Claude Code 会话中输入的 /command,而非shell路径中的二进制文件。请按以下顺序执行这些命令:

/plugin marketplace add openai/codex-plugin-cc
/plugin install codex@openai-codex
/reload-plugins
/codex:setup

/reload-plugins 可以刷新当前激活的插件列表,若跳过此步骤,即便安装成功,相关命令仍可能显示为缺失状态。/codex:setup 用于确认 Codex 已完成身份验证,当命令行界面不存在时,它还会建议通过 npm 安装全局的 @openai/codex 包。这就是官方规定的完整安装流程。人们通常将插件相关的问题归咎于插件本身,其实问题多出在安装前的准备步骤中。

为项目配置 Codex,而不仅是针对机器

全局安装虽然能提供相关命令,但并不能告知 Codex 如何处理特定的代码仓库。用户默认设置与项目自定义设置分别存储在不同的文件中,且只有当项目被确认可信时,其配置文件才会被加载。

常见的错误是直接编辑用户文件来设置项目的模型,之后却疑惑为何另一个仓库会继承该设置。实际上这种继承正是设计意图:该编辑操作配置的是机器环境,而非项目结构。

用户设置与受信任项目的覆盖设置

用户级别的配置保存在~/.codex/config.toml中,这是Codex为每个项目读取的主目录文件。而受信任项目的覆盖设置则保存在仓库根目录下的.codex/config.toml中。“受信任”指的是Codex的项目信任标志:只有当目录被标记为受信任时,覆盖设置才会被加载,未被信任的项目结构则会忽略本地文件。这是安全机制而非漏洞,因此当项目文件似乎无法加载时,在调试TOML文件之前请先检查信任设置。

合理的划分方式是将敏感信息及默认的谨慎设置保留在用户文件中,而一旦信任该项目结构,再将特定于仓库的模型及沙箱配置选项放入项目文件中。

模型与推理行为

此处有两个关键参数:model和model_reasoning_effort。上游项目的README中展示了类似这样的项目级覆盖配置:

model = "gpt-5.4-mini"
model_reasoning_effort = "high"

将这些值视为会过时的示例。模型标签变化很快,截图中出现的字符串一周后就可能失效。请先复制键值,再对照最新文档确认其有效性,之后再将它们提交到仓库中。该插件还支持简写 spark,它对应的是 gpt-5.3-codex-spark;这种对应关系虽已有文档说明,但同样会过时,如果后续的 README 取消了这一对应关系,请以 README 为准。

model_reasoning_effort = "high" 并非一个可随意调整的质量控制滑块,因为更高的设置会在每轮推理中消耗更多令牌。仅在设计难题或严重的测试失败情况下使用该设置,切勿在简单的重命名操作中一直保持此设置。

审批与沙箱测试

第三方 ShakaCode 指南记载了官方插件 README 未重点提及的交互式覆盖设置与环境密钥,因此应将其视为第三方指导内容。approval_policy 用于控制 Codex 在执行操作前是否需要询问用户,其可选值为 untrusted 和 on-request。sandbox_mode 则限制进程可操作的范畴,可选值为 read-only、workspace-write 和 danger-full-access。

approval_policy = "untrusted"
sandbox_mode = "workspace-write"

在相关指南中,这是处理功能时的标准配置:Codex 可以在工作区内进行编辑,但仍然会在操作前询问用户,仿佛对该目录的信任度仅限于部分内容。请将 danger-full-access 保留给那些你已经信任的测试运行器和构建脚本,绝不要在初次查看陌生代码库时使用它。

在命令行界面中,codex --auto-edit 在执行 shell 命令前仍会提示用户,而 codex --full-auto 则会在完全隔离的环境中运行且不会给出任何提示。这些标志仅用于改变提示行为,并非同义表述,因此不要仅仅因为 --full-auto 听起来更果断就选用它。

人们常常会安装第二个插件以避免错过某些功能,但实际上缺失的往往是需要在执行第一个命令之前做出的主机相关决策。

供两种代理使用的项目统一数据源

当两名智能体在同一棵树上工作且没有共享指令时,他们会在周四之前各自设计出两种不同的代码风格。届时会出现重复的代码检查规则、重复的测试命令,还会出现撤销另一名智能体刚刚建立的规范的审查情况。Codex的仓库规则来自Markdown文件AGENTS.md,而Claude Code对应的文件则是CLAUDE.md。你需要制定一套规范来明确两者之间的关系,因为除非有人刻意安排,否则它们不会保持一致。

关于这些选项的最详尽说明可见ShakaCode的claude-code-with-codex.md。该文档会标注对应模型版本,因此可依据它来制定文件管理策略,但不可用于确定默认模型标签。

引用单个指令文件

将构建命令、架构说明及相关规范放入AGENTS.md中,再将CLAUDE.md设为指向该文件的引用:

# Project Instructions
See @AGENTS.md for build commands, architecture, and conventions.

还有两个文件未处理,与 Claude 相关的笔记仍可放在指针下方。其代价在于需要持续维护,因为若忘记更新指针,Claude 就会继续跟随过时的信息。通过 ~/.codex/config.toml,也可以让 Codex 在缺少 AGENTS.md 时自动回退。

project_doc_fallback_filenames = ["CLAUDE.md", "COPILOT.md"]

那是读取路径,而非合并操作。Codex会查找这些文件名,但不会将三个文件整合为一份策略。

用符号链接连接通用规则

简单的方法是使用一条命令:

ln -s AGENTS.md CLAUDE.md

一个索引节点,两个名称,因此通用规则保持一致。不过这也存在实际弊端:由于不再有第二个文件,便无法将针对不同工具的指令分开管理。如果Claude需要某个Codex绝不能看到的钩子功能,符号链接无法实现这一点。

保留共享核心内容并添加工具专用扩展

那些必须保持一致的规则,比如测试命令、代码检查设置以及“不得重新格式化”之类的要求,应放在AGENTS.md中;而仅适用于Claude或仅适用于Codex的说明则放在CLAUDE.md中。这是较为成熟的方案,但需要持续维护,正因如此很多团队选择跳过这一做法,随后再将功能偏差归咎于模型本身。

如果两个开发者同时进行编辑,仅靠共享的指令是不够的。应使用 git worktrees 等工具将他们的工作目录隔离开,以避免他们为同一个索引发生冲突。对同一份代码同时进行写入操作会导致合并冲突,而这种冲突并非任一开发者故意造成的。

审查、质疑、救援与后台工作

一旦安装了该插件,人们很容易想要将所有流程自动化。更好的做法是使用最适合当前任务的最低限度命令,因为仅用于读取的审查并不等同于实现,而实现也不构成设计依据。

普通审查或对抗性审查

/codex:review 可用于对本地未提交的更改或指定的基准版本进行只读的正确性检查。该命令支持 --base <ref>、--wait 和 --background 参数,且绝不会修改任何文件。

/codex:review --background

/codex:adversarial-review是一种可引导的设计挑战,用于对决策提出质疑,自由文本可以跟在标签之后。

/codex:adversarial-review --base main challenge whether this was the right caching and retry design

在反向路径上,对应的指令是$cc:review和$cc:adversarial-review,它们在不同的主机上执行相同的功能。切勿混淆前缀。仅挑剔导入顺序的评论不算真正的评论,因此需将实际问题写入指令中;如果无法明确表述问题,就还不适合使用推理轮次。

通过救援功能移交修复任务

/codex:rescue会将实现工作交给插件的子代理codex:codex-rescue,与审查指令不同,它会直接修改文件。其标志包括--background、--wait、--resume和--fresh。

/codex:rescue fix the failing test with the smallest safe patch

对应的反向模板是 $cc:rescue。请将请求范围限定得具体一些,因为使用“改进它”这个选项只会让你不得不重新编写代码,还会陷入无法停止的审核循环中。

跟踪与控制后台任务

此处所说的“后台”指的是在您继续使用 Claude Code 时,插件任务仍会持续运行。这并非另一次代码检查,也不能保证相关工作已经完成。

/codex:status
/codex:result
/codex:cancel

/codex:status 可用于查看后台任务的状态,/codex:result 能显示这些任务的输出结果,而 /codex:cancel 则可终止它们。请刻意进行轮询,切勿将无响应视为成功状态。反向插件提供了对应的三个命令:$cc:status、$cc:result 和 $cc:cancel,前缀仍由主机决定。

传输上下文与构建受限的交接循环

Claude Code 中的审阅功能与能够查看先前推理过程的 Codex 会话不同,而且当调试线程已经很长时,复制粘贴会导致信息丢失。/codex:transfer 是官方推荐的解决方案。虽然无法实现完美的状态同步,但它能提供一个持续的 Codex 线程以及用于恢复对话的命令,从而让双方之间的交流无需再由人工介入即可完成。

转移后在 Codex 中继续

/codex:transfer 会在 ~/.claude/projects 下查找源转录文件,如果该 JSONL 文件不存在,则无法自行生成。它输出的指令应在 Codex 应用或 TUI 中执行:

codex resume <session-id>

请使用命令生成的会话ID,切勿使用编造的ID或粘贴的ChatGPT对话URL。

规划、实现、审查、交付

实际推进工作的循环过程相当枯燥:

  1. 在Claude Code中制定计划,并首先写出验收标准。
  2. 要么在Claude Code中实现,要么在补丁范围明确时通过/codex:rescue来实现。
  3. 依次使用/codex:review或/codex:adversarial-review进行审查。
  4. 将控制权交还给相关人员,由其决定接受、拒绝或升级处理。

这个流程必须有个终点。如果总是回到“再试一次”的状态,那么这个流程就会变成无尽的折磨。

终止无止境的审查循环:冲突与预算处理机制

本意是提升质量的功能,却可能因风格问题导致预算过度消耗。运行 /codex:setup --enable-review-gate 可添加一个本地 Stop 钩子,即在每轮结束时触发检查:当 Claude 尝试结束当前轮次时,系统会要求 Codex 先检查结果,确认无误后才允许轮次结束。如果 Codex 发现问题,Claude 就会被阻止继续执行,以便其处理这些问题。在无人监督的情况下,这种循环会迅速耗尽令牌。官方 README 虽然对此有所警示,但并未提供相关的预算控制机制。

下面提到的三轮限制是基于上述缺陷提出的编辑指导建议,并非官方插件功能,也不存在 --max-iterations 3 这样的参数。

先明确功能验收标准

在任何人进行审查之前先列出所有阻碍因素,并确保其具有实际意义:必须通过的测试、绝不能出现退化的功能表现,以及属于自动拒收范畴的安全或数据问题。除非仓库的说明文件已明确禁止,否则格式、注释风格和标题级别均不属于阻碍因素。可将样式要求纳入审查标准,但两名审核人员可能会就某个H2标题的级别争论三轮仍无法达成一致。

有一个值得警惕的案例:当对仅包含文档的提交启用审查机制时,两名审核人员就某个标题应使用H2还是H3级别争论不休,最终导致审查会话中断,尽管页面内容本身已经是正确的。由于缺乏明确的完成标准,审查机制便自行制定了规则。应将检查清单存储在AGENTS.md文件中,这样两名审核人员就能看到完全一致的规则。在审查指令中再次说明这些要求也没问题,但像“让它更简洁”这类模糊的请求反而会导致内容被重新编写。

设定迭代次数并强制人工决策

每次修改仅允许进行三轮审查与修正:

  • 第一轮:仅解决功能障碍。
  • 第二轮:处理剩余的所有障碍,不得新增样式问题。
  • 第三轮:最终检查,之后停止。

完成三轮后,由人工决定是合并、回退还是重写规范,机器人不得再次投票。关于 tmux 封装工具和自定义脚本的社区讨论仅视为实验性证据,不属于第二种官方方案,因此应将这些脚本视为他人的实验成果,而非 OpenAI 下发的指令。

当没有任何实际变化时停止

Sendbird的逆向插件会获取工作树的指纹,当前一次Codex操作实际上没有带来任何变化时,就会跳过轮次结束后的审查。这一保护机制在逆向流程中有相关文档记载,而上游的审核节点并不会宣布同样的跳过操作。在官方流程中,指纹由你自身提供:如果git status显示状态正常,则跳过另一次审查;如果上一次操作仅修改了注释,需确认这些注释是否在通过列表中,若不在则停止流程。

在完成至少一次人工审查并通过检查清单之前,不要自动启用审核节点。请最后再开启--enable-review-gate选项,绝不要一开始就启用。

按流程、认证、信任及过期任务分类的故障排除

在重新安装任何内容之前,先诊断路径问题。官方上游路径的故障与反向插件的钩子故障在令人沮丧的聊天消息中看起来很相似,但实际上属于不同的系统。重新安装几乎从来都不是首要的检查步骤。

官方上游路径

  • 插件命令不可用:运行 /reload-plugins。如果这些命令仍然缺失,请确认 /plugin install codex@openai-codex 已真正完成,然后再运行 /codex:setup。
  • Codex 无法认证:按照 Claude Code 的操作说明输入 !codex login。该插件会读取本地认证状态,而已登录的 ChatGPT 浏览器标签页并不等同于已登录的 CLI 环境。
  • 项目覆盖设置被忽略:请确认该项目已被信任,且修改内容已保存到仓库根目录下的 .codex/config.toml 文件中,而不仅仅是用户主目录下的文件。
  • Transfer无法找到转录内容:JSONL 文件必须位于 ~/.claude/projects 目录下,从未在该目录写入过内容的会话无法被转移。请先启动一个真正的 Claude Code 项目会话。
  • 过期的后台任务:请使用 /codex:status 查看状态,再使用 /codex:result 或 /codex:cancel 处理,不要因为第一次尝试没有反应就再次启动救援任务。
  • Node版本错误:该插件需要18.18或更高版本的Node,因此在提交问题之前请先运行 node -v 查看版本。
  • 反向插件钩子与缓存信任设置

    如果反向钩子功能无法运行,请在~/.codex/config.toml文件中的[features]部分将hooks设置为true。如果反向设置看起来不完整,请运行$cc:setup命令,该命令用于确认钩子功能、缓存以及可写路径是否正常。对于社区插件而言,$claude setup则是该插件自身的检查流程;由于它并非官方版本,因此其运行失败不应归咎于openai/codex-plugin-cc项目。Sendbird路径下的Windows支持在其代码仓库中被标记为实验性功能,因此如果目标是使用反向插件,建议选择WSL工作环境。

    常见问题的快速解答

    有没有一种正确的组合方式? 其实并没有。首要的决定是选择哪个工具来托管会话。如果以 Claude Code 为托管方,OpenAI 插件加上共享的指令文件以及简短的斜杠命令任务就能满足需求;而以 Codex 为托管方时,Sendbird 的反向插件及其 $cc: 前缀则能从另一侧完成相同的功能。应当将这两种流程分开处理,同时避免两个智能体同时访问同一份文件。

    要安装官方插件究竟需要输入什么内容?在 Claude Code 的提示框中依次输入四行内容:首先添加 openai/codex-plugin-cc 到市场库,接着安装 codex@openai-codex,然后重新加载插件,最后输入 /codex:setup。如果机器上还没有安装 Codex CLI,该命令会提示自动下载;或者你也可以先自行安装 @openai/codex,再通过 !codex login 登录。

    该插件会自带 Codex 后端吗?不会。所有操作都会被转发到你电脑上已有的 Codex CLI 和应用服务器,因此仍需使用相同的登录方式以及相同的 ChatGPT 套餐或 API 密钥。该 CLI 所需的权限要求不变。

    让两个智能体使用相同规则的最简洁方法是什么?有三种可行方案:让CLAUDE.md指向AGENTS.md,或为两者创建符号链接,或将共享的核心配置放在AGENTS.md中,再将工具特定的额外配置留在CLAUDE.md里。在用户配置中设置备用文件名选项,可在AGENTS.md不存在时让Codex读取Claude的文件。符号链接速度最快,但缺点是会丢失工具特定的文件。

    项目级别的模型选择应放在何处?可在已标记为可信的项目根目录下的.codex/config.toml文件中,使用model和model_reasoning_effort这两个键来指定。文档中提供的示例值如gpt-5.4-mini和high等更新较快,建议自行核实。对于不可信的项目,则会自动回退到用户的默认设置。

    审核机制的作用是什么?启用该功能后会注册一个本地的Stop钩子。当Claude试图结束当前轮次时,Codex会先检查相关内容,若发现任何问题就会阻止该轮次继续,以便Claude进行修正。在无监督模式下,这可能会消耗大量令牌。反向插件可以在工作树中没有变化时跳过检查步骤,但这属于其自身的功能,并非上游所承诺的功能。

    如何在不同会话之间切换?在Claude Code中运行/codex:transfer命令。该命令会将保存在~/.claude/projects下的对话记录转换为持久的Codex线程,并输出包含会话ID的codex resume信息,随后你可以在Codex应用或TUI中使用该会话ID。如果该文件夹中没有对话记录,则无需进行转移。

    如何防止这两个人浪费代币? 应事先明确仅与功能相关的验收标准,允许进行三轮审查与修改,之后再让人工介入。只有在通过人工审查后才能开启相应关卡。如果 git status 显示代码状态正常,或者上一轮修改仅涉及样式问题且没有人为其设置阻碍,可自行结束该循环。

    一个安全的首次实验

    选择你已熟悉的某个仓库,以及一个失败的测试用例或一个小改动进行审查,先将其提交或暂存。仅安装官方路径,然后对该改动运行 /codex:review。查看结果后自行决定是否采纳,且在第一个下午不要启用 --enable-review-gate 选项。

    如果该评测有用,请分享 AGENTS.md,并在真实的调试线程中尝试执行一次 /codex:transfer。这就是整个实验内容。模型名称会不断变化,但主机选择和停止条件依然适用。目前尚不清楚,在有人再次要求使用单一供应商之前,各团队还能忍受两个账单和两份指令文件多久。就目前而言,这种架构的合理形态更像是带有规则的门铃,而非持有钥匙的室友。