> https://router.one/zh/blog/opencode-vs-claude-code-vs-codex-cli 的 Markdown 镜像，供 AI 助手与爬虫使用。Router One 是 OpenAI 兼容的统一 LLM API 网关。
> 发布：2026-09-02 · 作者：Router One Team

# OpenCode vs Claude Code vs Codex CLI：一把 Key 全跑通

_OpenCode、Claude Code、Codex CLI 三个终端编程 agent 按开源协议、可用模型、配置方式、计费与国内直连对比，并给出一把 Router One Key 同时接入三者的配置。_

OpenCode、Claude Code、Codex CLI 是 2026 年国内开发者真正会放进候选名单的三个终端编程 agent，一句话结论：要在 Claude 系列上拿到最大自主性，选 **Claude Code**；要一个沙箱优先、跑 GPT 系列的 agent，选 **Codex CLI**；不想绑定任何一家厂商、要开源且能对接任意 OpenAI 兼容端点的 agent，选 **OpenCode**。

在 Router One 上，OpenCode 意味着一个配置文件就能调用全部 40+ 模型。三个工具都能用同一把 Router One Key 计费：Claude Code 走 Anthropic 兼容端点，Codex CLI 走 Responses 端点，OpenCode 走 OpenAI 兼容端点，每一次请求都落进同一个钱包、带同一套每请求成本 Trace；端点国内直连、无需 VPN，充值用支付宝或银行卡，不需要境外信用卡。下面按可验证的属性对比三者——开源协议、模型家族、配置方式、计费路径、国内可用性——然后给出在一个账号上把三个都跑起来的完整配置。

如果你已经把范围缩到两个厂商 CLI，[Claude Code vs Codex CLI](https://router.one/zh/blog/claude-code-vs-codex-cli) 深入讲了自主性与沙箱的取舍；如果问题是「终端还是编辑器」，先看 [Cline vs Cursor vs Claude Code](https://router.one/zh/blog/cline-vs-cursor-vs-claude-code)。本文补上两篇都跳过的第三个角：不绑厂商的开源 agent，以及三者共用一把 Key 之后到底变了什么。

## 对照表

|  | OpenCode | Claude Code | Codex CLI |
| --- | --- | --- | --- |
| 开源协议 | 开源（MIT） | Anthropic 的厂商 CLI，不开源 | OpenAI 的厂商 CLI，开源（Apache-2.0） |
| 经 Router One 可调模型 | 目录里任何对话模型：Claude、GPT、Gemini、DeepSeek、Grok、GLM、MiniMax、豆包 | Claude 系列 + DeepSeek V4 | GPT 系列 + DeepSeek V4 |
| 端点家族 | `/v1/chat/completions`（OpenAI 兼容） | `/v1/messages`（Anthropic 兼容） | `/v1/responses` |
| 配置方式 | `opencode.json` 里一个 provider 块 | 两个环境变量，或 `~/.claude/settings.json` 的 `env` 块 | `~/.codex/config.toml` 加 `env_key` |
| 经 Router One 计费 | 钱包按 token 扣费，Key 级消费上限 | 同一个钱包、同一套 Trace | 同一个钱包、同一套 Trace |

协议这一行决定了其余所有行：两个厂商 CLI 只能调 Router One 以各自协议提供的模型，而 OpenCode 说的 `/v1/chat/completions` 是 Router One 上每一个模型都提供的端点，所以它是三者里唯一能在同一份配置里同时调到 Claude、GPT、Gemini 和 DeepSeek 的工具。

## OpenCode：开源，不绑任何厂商

OpenCode 是一个开源（MIT）的终端编程 agent：客户端/服务端架构上的一个 TUI，把模型供应商当成配置来处理。在 `opencode.json` 里声明一个 provider，列出它提供的模型，再以 `provider/model-id` 的形式选用。因为它对你给的任何 base URL 都按 OpenAI 兼容协议通信，一个 provider 块就能覆盖 Router One 上的全部模型，Claude 也包括在内：

```json
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "router-one": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Router One",
      "options": {
        "baseURL": "https://api.router.one/v1",
        "apiKey": "{env:ROUTER_ONE_API_KEY}"
      },
      "models": {
        "anthropic/claude-sonnet-5": { "name": "Claude Sonnet 5" },
        "openai/gpt-5.6-sol": { "name": "GPT-5.6 Sol" },
        "deepseek-v4-pro": { "name": "DeepSeek V4 Pro" }
      }
    }
  },
  "model": "router-one/anthropic/claude-sonnet-5"
}
```

在运行 `opencode` 的 shell 里导出 Key（`export ROUTER_ONE_API_KEY=sk-your-api-key`），OpenCode 加载配置时会把 `{env:…}` 替换成真实值；也可以改用它的 `/connect` 命令把 Key 存起来。配置文件放在项目根目录，或全局放在 `~/.config/opencode/opencode.json`；`opencode models router-one` 会列出你声明的模型。分步版本见 [OpenCode 接入 Router One](https://router.one/zh/integrations/opencode)。

**坑在这里：** 自定义 provider 自己没有模型清单——没在 `models` 里声明的模型对 OpenCode 来说就不存在，而且每个键应填 [/models](https://router.one/zh/models) 上带前缀的精确目录 ID（如 `anthropic/claude-sonnet-5`）——网关也接受多数官方原名作为别名，但目录 ID 是保证匹配的形式。想让剩余上下文显示正常，就给每个模型加一个含 `context` 和 `output` 的 `limit` 对象。`npm` 保持 `@ai-sdk/openai-compatible`，OpenCode 文档把它对应到 `/v1/chat/completions`；文档也允许换成 `@ai-sdk/openai` 走 Responses 协议，或给内置的 Anthropic provider 覆盖 base URL，但这两条路各自只够到该协议原生提供的那部分模型，而且我们没有端到端验证过 OpenCode 覆盖内置 Anthropic provider 这条路（网关本身接受该包发送的 x-api-key 头）。

## Claude Code：Anthropic 协议上的最大自主性

Claude Code 是 Anthropic 的终端 agent：在仓库里跑 `claude`，描述任务，它就自己读文件、改代码、跑测试、迭代，hooks、skills 和 `CLAUDE.md` 留给想把团队规范固化下来的人。它说 Anthropic Messages 协议，所以在 Router One 上走 Anthropic 兼容端点，能调 Claude 系列——Claude Opus 5、Claude Sonnet 5、Claude Haiku 4.5——以及同一端点上的 DeepSeek V4（`deepseek-v4-pro` / `deepseek-v4-flash`）。配置就是两个环境变量：

```bash
export ANTHROPIC_BASE_URL=https://api.router.one
export ANTHROPIC_AUTH_TOKEN=sk-your-api-key
```

也可以交给一键脚本：未安装就先装 Claude Code，把同样两个值写进 `~/.claude/settings.json` 的 `env` 块，再发一个 1 token 的请求验证 Key：

```bash
curl -fsSL https://router.one/install/claude-code.sh | bash -s -- sk-your-api-key
```

注意 base URL 不带 `/v1`——Claude Code 会自己拼路径。Windows 命令见 [CLI 配置指南](https://router.one/zh/docs/guides/cli-setup)。

**坑在这里：** 两个变量，不是三个。`ANTHROPIC_API_KEY` 不需要设置，之前设过请 unset——残留的 export 在当前版本会触发一次多余的授权确认。另外优先级和多数人的直觉相反：`~/.claude/settings.json` 里的 `env` 块会覆盖 shell 的 export，所以如果请求 Trace 里出现了你没料到的 base URL，先查文件再查 shell。

## Codex CLI：Responses 协议上的沙箱优先

Codex CLI 是 OpenAI 的开源终端 agent（Apache-2.0）。它沙箱优先——命令在明确的审批模式下运行——而且说的是 Responses API 线协议而非经典的 Chat Completions，这正是通用中转对它 404、而原生实现了 `wire_api = "responses"` 的网关能直接跑通的原因（见 [Codex 与 Responses API](https://router.one/zh/codex-responses-api)）。通过 Router One 它能调 GPT 系列——GPT-5.6 Sol、GPT-5.5、GPT-5.4、GPT-5.3 Codex Spark——以及 DeepSeek V4。provider 写在 `~/.codex/config.toml` 里：

```toml
model = "gpt-5.6-sol"
model_provider = "router"

[model_providers.router]
name = "Router One"
base_url = "https://api.router.one/v1"
wire_api = "responses"
env_key = "ROUTER_ONE_API_KEY"
```

`env_key` 就是机制本身：配置里写的是环境变量名，Codex 从那个变量读你的 Key，作为 Bearer token 发送，不碰你的 ChatGPT 登录状态。把 `ROUTER_ONE_API_KEY` 写进 shell profile，或者交给一键脚本写文件、持久化变量并验证 Key：

```bash
curl -fsSL https://router.one/install/codex.sh | bash -s -- sk-your-api-key
```

**坑在这里：** `model` 这一行必须是 `/v1/responses` 上提供的模型。在 `config.toml` 里填一个 Claude 系列的 ID，网关会在任何模型跑起来之前就用 400 拒掉请求——Claude 在 Anthropic 兼容端点和 `/v1/chat/completions` 上提供，从不在 Responses 上，每个模型页都列出了它的端点。还有一个只在中转上才会撞到的坑：Codex 的 review 线会以模型 ID `codex-auto-review` 发请求，Router One 的目录里就有它，所以 `/review` 不用改 `review_model` 也能直接用。

## 一把 Key 跑三个工具

「一把 Key 能不能跑三个」的字面答案是能——同一把 `sk-` Key 在三个端点上都被接受。更好的做法是一个工具一把 Key，全部由同一个钱包供血，因为 Key 级归因才能把账本变成答案：

- **每个工具一个硬上限。** 给每把 Key 设 `maxSpend`——比如给一个没用过的 agent 试用一周，设 $10——会话失控时到顶即停，钱包和另外两把 Key 毫发无伤。`rateLimit` 和 `tokenLimitTpm` 能在半路上按住失控的重试循环。
- **每次请求一条成本 Trace。** 每次调用都记录模型、token、花费、延迟和状态（Dashboard → Logs），「那个烧钱的下午是 OpenCode 还是 Claude Code」就是按 Key 筛一下，不用猜。账本具体记什么见[成本追踪](https://router.one/zh/llm-cost-tracking)，「一个工具一把 Key」的实操见[按 Key 归因成本](https://router.one/zh/blog/track-llm-api-costs-per-key)。
- **三个工具共享同模型故障转移。** 上游返回可重试的 5xx 或超时时，Router One 可以把请求改由另一条提供同一个所请求模型的健康线路重试。它不会换成别的模型，也不是零宕机保证——长 agent 会话仍应容忍偶发的失败调用。
- **换模型不换工具。** Claude Code 用 `/model deepseek-v4-pro` 就切到 DeepSeek V4；Codex 改一行 `model =`；OpenCode 在 `models` 下多加一条。三者都不需要新账号、新 Key 或新的计费关系。[模型页](https://router.one/zh/models)就是实时价目表——部分模型最低可到官方公示价的 1 折（最高省 90%），具体见[低价 Claude API](https://router.one/zh/cheap-claude-api) 与[低价 GPT API](https://router.one/zh/cheap-gpt-api)；想要固定月费，钱包之外还有 Pro/Max/Ultra 订阅，见[定价](https://router.one/zh/pricing)。

## 国内使用：差异最大的一节

三个工具默认调用的厂商端点，在国内运营商网络上不挂 VPN 都不稳定；厂商计费也默认你有境外卡——OpenCode 自己没有计费，继承的是你配置的那个供应商的门槛。Router One 把这两堵墙一起拆掉：端点国内直连、无需 VPN；钱包在同一个托管收银台用支付宝或银行卡充值，也支持 6 条链上的 USDT/USDC（Tron、BSC、以太坊、Polygon、Base、Arbitrum），全程不需要美国信用卡。换好端点之后如果仍然报 403 或「unsupported country, region, or territory」，说明请求其实还在走旧端点：对照 [Claude Code 403 排查清单](https://router.one/zh/claude-code-403) 和[地区限制修复](https://router.one/zh/unsupported-country-region-territory)逐项检查。三个工具的国内专属配置页：[Claude Code 国内接入](https://router.one/zh/claude-code-china)、[Codex CLI 国内使用](https://router.one/zh/codex-china)、[OpenCode 接入 Router One](https://router.one/zh/integrations/opencode)。

## 常见问题

**OpenCode 能通过 Router One 调 Claude 模型吗？**
能。OpenCode 说 OpenAI 兼容协议，而 Router One 在 /v1/chat/completions 上和其他模型一起提供 Claude 系列。在 models 里声明精确的目录 ID（例如 anthropic/claude-sonnet-5），再以 router-one/anthropic/claude-sonnet-5 选用即可。

**Claude Code 能调 GPT 模型吗？Codex CLI 能调 Claude 吗？**
不能。Claude Code 说 Anthropic 协议，能调 Claude 系列加 DeepSeek V4；Codex CLI 说 Responses 协议，能调 GPT 系列加 DeepSeek V4。把 Claude 的 ID 发到 /v1/responses，会在任何模型跑起来之前收到 400。DeepSeek V4 是三个工具都能驱动的唯一家族。

**需要三把 API Key 吗？**
一把 Key 三个工具都能用。推荐的做法是一个工具一把 Key，由同一个钱包供血：每把 Key 各带自己的 maxSpend 上限，每请求 Trace 按 Key 筛选，每个工具花了多少是事实而不是估算。

**用这些 CLI 需要 Claude Pro、Claude Max 或 ChatGPT Plus 吗？**
不需要。通过 Router One，三个工具都从预充值钱包按公开的模型费率按 token 扣费，OpenCode 本来就没有厂商订阅这回事。重度用户也可以选 Router One 自己的 Pro/Max/Ultra 订阅作为固定月费的替代，见[定价](https://router.one/zh/pricing)。

**三个工具里哪个最省钱？**
决定账单的是模型，不是工具：同一个模型、同一个公开费率，从哪个工具发出去都是一样的价。差别在每个 agent 每轮发多少上下文、会话跑多长，所以 [Claude Code token 成本详解](https://router.one/zh/blog/claude-code-token-costs-explained)把篇幅花在模型分工、会话卫生和 Key 级上限上——这些建议原样适用于 OpenCode 和 Codex。

## 下一步

- 配置 OpenCode：[OpenCode 接入 Router One](https://router.one/zh/integrations/opencode)
- 国内跑 Claude Code：[Claude Code 国内接入](https://router.one/zh/claude-code-china)
- 国内跑 Codex CLI：[Codex CLI 国内使用](https://router.one/zh/codex-china)，以及[为什么中转对 Codex 404](https://router.one/zh/codex-responses-api)
- 两个厂商 CLI 正面对比：[Claude Code vs Codex CLI](https://router.one/zh/blog/claude-code-vs-codex-cli)；不订 ChatGPT Plus 跑 Codex：[不用 ChatGPT Plus 也能用 Codex CLI](https://router.one/zh/blog/codex-cli-without-chatgpt-plus)
- 终端还是编辑器：[Cline vs Cursor vs Claude Code](https://router.one/zh/blog/cline-vs-cursor-vs-claude-code)、[Aider vs Claude Code](https://router.one/zh/blog/aider-vs-claude-code)
- 实时价格与套餐：[模型页](https://router.one/zh/models)、[定价](https://router.one/zh/pricing)

到 [router.one](https://router.one/zh) 建一把 Key，设好上限，让每个工具各跑一周真实工作，再做决定。

## 相关页面

- 本页规范地址：https://router.one/zh/blog/opencode-vs-claude-code-vs-codex-cli
- Claude Code 中国：https://router.one/zh/claude-code-china
- 全部博客文章：https://router.one/zh/blog
- 模型与每模型 token 价格：https://router.one/zh/models （markdown：https://router.one/zh/models.md ）
- 定价：https://router.one/zh/pricing
- API 文档（markdown）：https://router.one/zh/docs.md
- 公司事实（markdown）：https://router.one/zh/facts/company.md
