1. 为什么要把 Claude 和 Codex 放在一起用
如果你最近在折腾 AI 编程,大概率会遇到一个很现实的矛盾:Claude 系列模型在理解整个代码库、拆解复杂需求、做架构规划上确实顺手,但它的 token 消耗速度也让人心疼,一个中等规模的重构任务跑下来,账单涨得比进度快。而 Codex 这类专注代码生成的模型,在具体函数实现、单元测试补全、报错定位上又准又便宜,可它不太擅长跟你来回讨论「这个模块到底该不该拆」。
我试过单独用其中一个跑完整流程,结果要么是规划阶段烧掉太多额度,要么是生成阶段反复返工。后来把两者按职责分开——Claude 负责想清楚要做什么、改哪些文件、按什么顺序推进,Codex 负责真正落笔写代码和执行命令——效率明显不一样了。这套协同开发模式的核心就是一句话:让贵的模型做决策,让便宜的模型做执行。
具体到成本,拿常见的 claude-sonnet 系列和 gpt-5-codex 对比,后者的单价大约只有前者的三成多。也就是说,原本 Claude 一个人干的活,现在把其中「写代码、跑测试、改 bug」这些占大头 token 的环节交给 Codex,整体花费能压下来接近一半。这不是靠某个黑科技,而是靠任务分工把 token 花在刀刃上。
那怎么让两个工具真正协同起来,而不是你手动复制粘贴?答案是 MCP(Model Context Protocol)。通过一个叫 codex-mcp-server 的中间层,Claude Code 可以把「执行代码修改」这件事直接委托给 Codex CLI,自己只保留规划、搜索、验证的职责。你在 Claude Code 里提需求,它在后台调用 Codex 完成实际编辑,整个过程你只需要授权一次。
这套工作流适合谁?适合已经在用 Claude Code 或 Codex 中至少一个、并且手头有多个模型额度需要统筹的开发者。如果你只是偶尔写几行脚本,可能感受不到差别;但如果你经常做多文件重构、从零搭原型、或者维护一个中等以上规模的仓库,这种分工带来的成本和质量收益会非常直观。下面我会从统一 API 通道的配置讲起,一步步把环境搭起来,再跑一个真实的小任务验证协同是否生效。
2. 用 TaoToken 统一 API 通道的前置准备
在讲具体配置之前,先解决一个绕不开的问题:Claude Code 和 Codex 默认各自走各自的厂商通道,你要分别管理两套 Key、两套计费、两套网络配置。一旦要在两者之间做协同,Key 散落在不同地方,排查问题时连「这次请求到底走了哪个通道」都说不清。所以第一步是把它们收敛到同一个 API 入口。
TaoToken 在这里扮演的就是统一通道的角色。它提供一个兼容的 API 地址,你只需要在 Claude Code 和 Codex 里把 Base URL 指向同一个入口,用同一个 Key 就能调用不同模型。这样做的好处很实际:账单集中、模型切换不用改代码、出问题时看一份日志就够了。官网入口是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 地址是 https://taotoken.net/api ,注意 API 地址后面不加任何查询参数。
你需要提前准备的东西不多:
- 一个可用的 TaoToken API Key,在控制台的 API Keys 页面生成,地址是 https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=
- Node.js 环境(建议 18 以上),因为 Claude Code 和 Codex 都是 npm 全局包
- 一个终端,Windows 用户建议用 WSL2,Linux 和 macOS 直接开终端就行
安装两个 CLI 工具的命令很直接:
npm install -g @anthropic-ai/claude-code npm install -g @openai/codex装完之后分别验证版本,确认都在 PATH 里:
claude -v codex --version如果两条命令都能打印出版本号,说明基础环境没问题。接下来是配置模型通道。这里我建议用 cc-switch 这个图形化工具来管理,因为 Claude Code 和 Codex 的配置文件格式不一样,手改容易漏字段。cc-switch 的下载地址在它的 release 页面,选对应系统的包安装即可。Linux 下用 dpkg 安装:
sudo dpkg -i CC-Switch-v3.5.1-Linux.deb装好后在终端输入cc-switch就能打开界面。在 Claude 标签页里填入 TaoToken 的 Base URL 和 Key,模型 ID 填你打算用的 Claude 模型,比如claude-sonnet-4-5-20250929。Codex 标签页同理,Base URL 同样指向 TaoToken,模型 ID 填gpt-5-codex。这样两个工具就都走同一个通道了。
有一点要提醒:Codex 的配置里approval_policy和sandbox_mode这两个字段很关键。协同模式下 Claude 会频繁调用 Codex 执行写操作,如果approval_policy设成每次都要确认,你会被弹窗打断到崩溃。建议设成never,同时sandbox_mode用workspace-write,既能让 Codex 自由改工作区文件,又不会越界动系统目录。这些字段在 cc-switch 的 Codex 配置界面里都能直接改,改完保存会自动写入~/.codex/config.toml。
3. 可复制的 MCP 与模型配置片段
环境装好、通道统一之后,接下来是让 Claude Code 能调用 Codex。这靠的是 codex-mcp-server 这个 MCP 服务。它的作用是在 Claude Code 和 Codex CLI 之间架一座桥,Claude 通过标准 MCP 协议发指令,codex-mcp-server 翻译成 Codex 能执行的调用。
在 cc-switch 里配置 MCP 很省事。切到 Claude 标签,点 MCP 进入管理页,添加一个新的 MCP,填入下面这段 JSON:
{ "args": [ "-y", "@cexll/codex-mcp-server" ], "command": "npx" }保存的时候注意界面上有个「同步到 codex」的勾选项,勾上它,Codex 那边的 MCP 配置也会一并写好,省得你再配一遍。保存后记得点启用,MCP 才会真正加载。
配置完成后,用命令行验证一下写入结果。Claude 的配置在~/.claude.json,直接 cat 出来看:
cat ~/.claude.json你应该能在里面找到mcpServers字段,里面包含codex-mcp-server的条目。再用claude mcp list确认服务处于可用状态。Codex 这边看~/.codex/config.toml:
cd ~/.codex cat config.toml重点确认几个字段。下面是我实测可用的 Codex 配置片段,你可以对照自己的文件:
approval_policy = "never" disable_response_storage = true model = "gpt-5-codex" model_provider = "taotoken" model_reasoning_summary = "detailed" network_access = true preferred_auth_method = "apikey" sandbox_mode = "workspace-write"这里model_provider指向你在 cc-switch 里配的 TaoToken 通道,model是 Codex 实际调用的模型 ID。approval_policy = "never"配合sandbox_mode = "workspace-write"是协同模式能顺畅跑起来的前提,否则每次写文件都要你手动点确认。
还有一步容易被忽略但很关键:修改~/.claude/CLAUDE.md,给 Claude Code 注入协同工作的角色设定。这个文件相当于 Claude 的系统提示,你在这里告诉它「你只负责规划和验证,所有代码编辑必须通过 codex-mcp-server 调用 Codex 执行」。核心逻辑是强制分工:Claude 做 intake、上下文收集、计划、验证;每一个 edit、command、test 都走mcp__codex-mcp-server__ask-codex。只有当 Codex 连续失败两次时,才允许 Claude 自己动手,并且要打上CODEX_FALLBACK标记。
把下面这段精简后的指令写进~/.claude/CLAUDE.md:
You are the planner. Claude Code performs intake, context gathering, planning, and verification only. Every edit, command, or test must be executed via Codex CLI (mcp__codex-mcp-server__ask-codex). Use the default payload: { "model": "gpt-5-codex", "sandboxMode": "workspace-write", "fullAuto": true, "yolo": true, "search": true } Switch to direct execution only after Codex CLI is unavailable or fails twice consecutively, and log CODEX_FALLBACK. Respond in Chinese. Include file paths with line numbers in summaries.这段设定的精髓在于把「想」和「做」彻底分开。Claude 不再直接改你的文件,它只输出计划,然后通过 MCP 把具体改动交给 Codex。你可以在 Claude Code 里看到它先列步骤,再一步步调用 Codex,最后汇总结果。这样既用上了 Claude 的规划能力,又把 token 消耗大的代码生成环节转移到了更便宜的 Codex 上。
4. 验证协同调用是否真正生效
配置写完不代表就能跑通,得用一个真实任务验证整条链路。我选了一个足够简单但涉及多文件生成的任务:让 Claude Code 做一个网页版打地鼠小游戏。这个任务的好处是它需要 HTML、CSS、JS 三部分配合,能清楚看出 Claude 有没有把编码工作委托出去。
打开 Claude Code,输入提示词:
请帮我生成一个打地鼠的网页版本小游戏正常情况下,Claude 不会立刻开始写代码,而是先做任务拆解。你会看到它列出类似这样的计划:确定游戏结构、生成 HTML 骨架、编写 CSS 样式、实现 JS 逻辑、验证交互。然后它开始调用mcp__codex-mcp-server__ask-codex,把「生成 HTML 骨架」这一步交给 Codex。
第一次调用时 Claude Code 会弹出授权提示,问你是否允许调用这个 MCP 工具。选择允许,并且如果界面提供「始终允许」选项,勾上它,后面就不会反复打断。授权后你会看到 Codex 开始工作,终端里出现 Codex CLI 的执行输出。
怎么确认真的是 Codex 在干活而不是 Claude 自己写的?看后端日志。如果你在 TaoToken 控制台看调用记录,会发现请求分两类:一类是 Claude 模型的对话请求,用于规划和验证;另一类是 gpt-5-codex 的请求,用于实际代码生成。两条线交替出现,正好对应「Claude 规划 → Codex 执行 → Claude 验证」的循环。
任务跑完后,工作目录里会多出一个whack-a-mole.html。用浏览器打开它,应该能看到一个可玩的打地鼠游戏:地鼠随机从洞里冒出来,点击得分,有时间限制。如果游戏能正常玩,说明整条协同链路是通的。
这里有个细节值得注意:Claude 在验证阶段会自己检查 Codex 生成的代码有没有明显问题。如果它发现某个函数逻辑不对,会再次调用 Codex 去修,而不是自己动手改。这个「发现问题 → 委托修复 → 再验证」的循环,正是协同模式比单模型更稳的地方。单模型往往在生成后就直接交付,缺少这道交叉检查。
如果你在验证时发现 Claude 直接自己写了代码,没有调用 Codex,那多半是CLAUDE.md的指令没生效,或者 MCP 服务没启用。回到第 3 步检查claude mcp list的输出,确认codex-mcp-server状态是 connected。另外确认~/.claude/CLAUDE.md文件确实被读取了,可以在 Claude Code 里问它「你的工作流程是什么」,看它是否复述出「通过 Codex 执行编辑」的设定。
5. 协同配置中常见的报错与排查
这套流程跑通之前,我自己踩过几个坑,这里按报错现象整理出来,方便你对照排查。
401 Unauthorized:这个最常见,基本是 Key 或 Base URL 配错了。先检查 TaoToken 的 Key 有没有复制完整,前后有没有多余空格。然后确认 Claude 和 Codex 两边的 Base URL 都指向https://taotoken.net/api,注意结尾不要带斜杠,也不要加任何查询参数。如果 Key 是对的但还报 401,去控制台看这个 Key 是否被禁用或额度耗尽。
local proxy failed / connection refused:这个报错通常出现在 Codex 侧,说明它连不上配置的model_provider。检查~/.codex/config.toml里的 provider 配置,确认base_url和wire_api字段正确。如果你用的是 cc-switch 生成的配置,重新保存一次让它覆盖写入。另外确认本机网络能正常访问 TaoToken 的 API 地址,可以用 curl 简单测一下连通性。
reading choices: unexpected end of JSON input:这个报错说明请求发出去了,但返回的内容不是合法 JSON,多半是通道返回了错误页或者空响应。先确认模型 ID 拼写正确,比如gpt-5-codex不要写成gpt5-codex。然后检查该模型在你的 TaoToken 账户下是否可用。如果模型 ID 没问题,可能是通道临时波动,重试一次通常能恢复。
OAuth 相关报错 / authentication failed:Codex 有时会尝试走 OAuth 流程,但在 API Key 模式下这不应该发生。确认preferred_auth_method = "apikey"已经写入配置。如果之前登录过 Codex 的 OAuth,清理一下~/.codex下的凭据缓存再重试。
MCP 工具调用无响应:Claude Code 发出调用后卡住,没有返回。先看claude mcp list里codex-mcp-server是否 connected。如果显示 failed,手动跑一下npx -y @cexll/codex-mcp-server看能不能启动,报错信息会直接告诉你缺什么依赖。常见的是 Node 版本过低,升级到 18 以上即可。
Codex 写文件被拒绝:如果 Codex 报权限错误,检查sandbox_mode是不是设成了read-only。协同模式需要workspace-write,否则它只能读不能写。同时确认approval_policy = "never",不然每次写操作都会挂起等你确认,看起来就像卡死了。
排查时有个通用思路:先确认单模型能通,再确认 MCP 能通,最后确认协同能通。也就是先用 Claude Code 单独聊一句,再用 Codex 单独跑一个简单编辑,两者都正常后再测 MCP 调用。这样能把问题范围快速缩小到某一层,不用在整条链路上瞎猜。
6. 把协同工作流用起来的几个建议
跑通之后,这套模式怎么用才顺手,我分享几个实际体会。
第一,任务颗粒度要适中。太小的任务,比如改一个变量名,走一遍「Claude 规划 → Codex 执行 → Claude 验证」反而比直接改慢。太大的任务,比如「重构整个项目」,Claude 的规划会很长,Codex 执行时容易偏离。比较合适的是「实现一个模块」「修一组相关 bug」「补一批测试」这种规模,既有规划价值,又能让 Codex 充分发挥。
第二,善用CLAUDE.md里的角色设定。除了强制分工,你还可以在里面加项目特定的规则,比如「前端统一用 Tailwind」「所有新函数必须带单元测试」「不要引入新的第三方依赖」。这些规则会被 Claude 在规划时考虑进去,也会通过 payload 传给 Codex,相当于给整个协同流程加了一层项目规范。
第三,关注成本分布。协同模式省钱的前提是 Codex 承担了大部分 token 消耗。如果你发现账单还是很高,去 TaoToken 控制台看调用记录,确认是不是 Claude 的对话轮次过多。有时候 Claude 会反复确认需求,这种来回对话很烧 token。可以在提示词里一次性把需求说清楚,减少它的追问轮次。
第四,模型 ID 可以按需替换。本文用的是claude-sonnet-4-5-20250929和gpt-5-codex,但 TaoToken 通道支持多种模型,你可以根据任务类型换。比如纯前端任务换更便宜的 Codex 变体,复杂架构任务换更强的 Claude 版本。切换只需要改 cc-switch 里的模型 ID,不用动 MCP 配置。
如果你还没开始配,建议先去 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 生成一个 Key,然后按第 2 节的步骤把两个 CLI 装好、通道统一。配置过程中遇到报错,对照第 5 节排查。等打地鼠那个任务能跑通,你就有一套可复用的多模型协同工作流了。后续想扩展,比如接入更多 MCP 工具、做自动化测试生成,都可以在这个基础上加。