目标:保留 Claude Code 的交互方式 / Agent Harness,但让实际模型请求通过 cc-switch-cli 转发到已登录的 Codex / ChatGPT 订阅账号,例如使用
gpt-5.6-sol。
本文记录的是一套在 macOS 上实际跑通的完整流程。
配置完成后,调用链路如下:
Claude Code
↓ Anthropic Messages API
cc-switch local proxy
↓ protocol conversion
Codex OAuth / ChatGPT subscription
↓
gpt-5.6-sol
启动后 Claude Code 顶部会显示类似:
gpt-5.6-sol · API Usage Billing
并且可以正常对话。
本文测试环境:
- macOS
- zsh
- Claude Code 已安装
- Codex CLI 已安装
- 有可正常使用的 ChatGPT / Codex 订阅账号
cc-switch-cli使用官方 release 二进制安装
检查:
claude --version
codex --version如果还没有 Codex:
npm install -g @openai/codex然后登录:
codex login浏览器完成授权。
建议先确认订阅和目标模型本身能正常使用:
codex --model gpt-5.6-sol进入后输入:
hi
如果能够正常回复,说明:
- Codex OAuth 正常
- ChatGPT / Codex 订阅正常
gpt-5.6-sol有权限使用
推荐直接使用官方 release 安装脚本。
curl -fsSL https://github.com/SaladDay/cc-switch-cli/releases/latest/download/install.sh | bash默认安装位置通常是:
~/.local/bin/cc-switch
如果提示不在 PATH 中:
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc检查:
cc-switch --help运行:
cc-switch auth login终端会显示类似:
Open this URL: https://auth.openai.com/codex/device
Enter code: XXXX-XXXXX
Waiting for authorization...
打开浏览器完成设备授权。
完成后可查看:
cc-switch auth list启动 TUI:
cc-switch进入 Claude Providers 页面。
新增 Provider:
Add Provider
模板选择:
Codex
建议配置:
Provider name: Codex
ChatGPT Account: 选择刚刚登录的 Managed Account
Default fallback model: gpt-5.6-sol
进入 Model Mapping。
如果模型列表还没加载,可以在 Model Mapping 页面按:
Space
自动拉取账号可用模型。
例如可能看到:
gpt-5.4
gpt-5.4-mini
gpt-5.5
gpt-5.6-luna
gpt-5.6-sol
gpt-5.6-terra
推荐把主要角色映射到:
Default Haiku Model → gpt-5.6-sol
Default Sonnet Model → gpt-5.6-sol
Default Opus Model → gpt-5.6-sol
Default Fable Model → gpt-5.6-sol
Subagent Model → gpt-5.6-sol
保存 Provider。
然后确认:
cc-switch provider list应该看到类似:
ID Name
codex Codex
注意:
Provider ID 是 codex
不是显示名称 Codex。
Codex Provider 本身的 upstream 是:
https://chatgpt.com/backend-api/codex
但 Claude Code 默认发送的是 Anthropic Messages 协议:
/v1/messages
而 Codex backend 使用的是 OpenAI / Responses 风格接口。
因此正确方式不是:
Claude Code
↓
chatgpt.com/backend-api/codex
而是:
Claude Code
↓
cc-switch local proxy
↓
protocol conversion
↓
Codex backend
也就是说,必须经过 cc-switch local proxy。
先查看当前状态:
cc-switch proxy show如果已有 daemon 占用 proxy,可先停掉:
cc-switch daemon stop确认:
cc-switch proxy show理想状态:
Running: no
然后以前台 verbose 模式启动 Claude proxy:
cc-switch proxy --verbose serve --takeover claude正常会看到:
Local Proxy Running
Listening on http://127.0.0.1:15721
Claude: /v1/messages
Manual takeover enabled for: claude
保持这个终端不要关闭。
另开一个终端:
curl -i http://127.0.0.1:15721/v1/messages正常可能返回:
HTTP/1.1 405 Method Not Allowed
allow: POST
这是正常的。
因为 curl 默认使用 GET,而 /v1/messages 只接受 POST。
重点是:
127.0.0.1:15721 可以正常访问
不要直接让 Claude Code 请求:
https://chatgpt.com/backend-api/codex
而是显式让 Claude Code 请求本地 cc-switch proxy:
ANTHROPIC_BASE_URL=http://127.0.0.1:15721 \
ANTHROPIC_AUTH_TOKEN=proxy-placeholder \
ANTHROPIC_MODEL=gpt-5.6-sol \
claude成功后 Claude Code 顶部应显示:
gpt-5.6-sol · API Usage Billing
输入:
hi
如果出现正常回复,例如:
Hi! How can I help?
说明配置成功。
为了避免每次手动启动 proxy 和填写环境变量,可以写一个 zsh function。
建议使用下面这个版本。
cat >> ~/.zshrc <<'EOF'
claude-gpt-auto() {
# 检查 15721 是否已经有 cc-switch proxy 在监听
if ! nc -z 127.0.0.1 15721 >/dev/null 2>&1; then
# 如果 daemon 正在运行,先关闭,避免 takeover 冲突
cc-switch daemon stop >/dev/null 2>&1 || true
# 后台启动 Claude proxy
nohup cc-switch proxy serve --takeover claude \
>/tmp/cc-switch-claude-proxy.log 2>&1 &
# 等待 proxy 启动,最多约 5 秒
for i in {1..10}; do
if nc -z 127.0.0.1 15721 >/dev/null 2>&1; then
break
fi
sleep 0.5
done
fi
ANTHROPIC_BASE_URL=http://127.0.0.1:15721 \
ANTHROPIC_AUTH_TOKEN=proxy-placeholder \
ANTHROPIC_MODEL=gpt-5.6-sol \
claude "$@"
}
alias cg='claude-gpt-auto'
EOF
source ~/.zshrc检查:
type claude-gpt-auto正常应该显示:
claude-gpt-auto is a shell function
以后直接输入:
claude-gpt-auto或者更短:
cg即可。
如果使用 claude-gpt-auto 后台启动 proxy:
tail -f /tmp/cc-switch-claude-proxy.log可以实时查看 cc-switch 日志。
例如:
There's an issue with the selected model (gpt-5.6-sol).
It may not exist or you may not have access to it.
先确认原生 Codex 是否可用:
codex --model gpt-5.6-sol如果原生 Codex 正常,而 Claude Code 不正常,通常不是账号权限问题,而是:
Claude Code 没有经过 cc-switch proxy
检查:
cc-switch proxy show并确保 Claude Code 使用:
ANTHROPIC_BASE_URL=http://127.0.0.1:15721
例如:
cannot run foreground proxy takeover while a daemon-managed proxy session is active
执行:
cc-switch daemon stop然后:
cc-switch proxy show确认:
Running: no
再执行:
cc-switch proxy --verbose serve --takeover claude运行:
ps aux | grep '[c]c-switch'如果看到:
cc-switch daemon start --detach
说明 proxy 子进程由 daemon 管理。
只 kill proxy child 没用,daemon 会自动重新拉起。
正确方式:
cc-switch daemon stop启动:
cc-switch start claude codex另开终端:
ps aux | grep '[c]laude --settings'会看到:
claude --settings /var/folders/.../cc-switch-claude-codex-xxxx.json
然后:
cat /var/folders/.../cc-switch-claude-codex-xxxx.json重点检查:
"ANTHROPIC_BASE_URL"如果是:
https://chatgpt.com/backend-api/codex
说明 Claude Code 是直接请求 Codex backend,而没有经过本地协议转换 proxy。
我们最终跑通的方式是:
ANTHROPIC_BASE_URL=http://127.0.0.1:15721
如果还希望 Claude Code 内部把 Codex CLI 当成 MCP tool 使用,可以额外配置:
claude mcp add codex -s user -- codex mcp-server检查:
claude mcp list | grep codex正常可能显示:
codex: codex mcp-server - ✔ Connected
但需要注意:
Codex MCP 和本文的主模型切换不是一回事。
MCP 只是让 Claude Code 可以调用 Codex 作为一个工具。
本文实现的是:
Claude Code 主模型请求
→ cc-switch proxy
→ Codex OAuth
→ GPT 模型
日常使用只需要:
cg内部自动完成:
检查 127.0.0.1:15721
↓
proxy 未运行
↓
停止冲突 daemon
↓
后台启动 cc-switch proxy
↓
设置 ANTHROPIC_BASE_URL
↓
设置 gpt-5.6-sol
↓
启动 Claude Code
最终:
Claude Code UX / Agent Harness
+
Codex OAuth / ChatGPT Subscription
+
GPT-5.6 Sol
-
cc-switch-cli
https://github.com/SaladDay/cc-switch-cli -
cc-switch-cli Issue #204
Claude Code 能不能通过 cc-switch-cli 接入 Codex 订阅账号的模型? -
OpenAI Codex CLI
https://github.com/openai/codex
cc-switch-cli 是第三方开源项目,并非 OpenAI 或 Anthropic 官方产品。
相关接口、OAuth 流程、Claude Code 行为以及模型名称未来都可能发生变化。如果后续版本无法工作,建议优先检查:
cc-switch --version
claude --version
codex --version
cc-switch proxy show
cc-switch auth list以及 cc-switch-cli 最新 README / Issues。