1. 为什么 Codex App 接入中转站后功能会“缺胳膊少腿”
Codex App 的功能其实分成两层:一层是模型推理,也就是你发出去的对话请求最终由哪个 Provider 来回答;另一层是账号态,包括 Codex Mobile 同步、插件调用、额度查询、会话历史这些周边能力。很多人第一次配第三方 Provider API 时,直接把auth.json里的OPENAI_API_KEY填成中转站的 Key,结果模型能跑,但 Codex Mobile 登不上、插件报未授权、额度页面一片空白。原因不复杂——这些周边功能依赖的是官方登录态,而不是一个裸的 API Key。
所以真正要解决的问题不是“怎么把请求打到中转站”,而是“怎么在请求走中转站的同时,把官方登录态保留下来”。Codex 的配置文件里恰好留了一个开关:requires_openai_auth。它的语义是告诉 Codex,这个自定义 Provider 仍然需要官方 Auth 登录态来支撑周边功能,但模型请求本身走你指定的base_url。把auth.json保持chatgpt模式、config.toml里挂上自定义 Provider 并打开这个开关,就能做到“登录态归官方管,推理请求归中转站管”。
这篇就按这个思路,给你一份可以直接复制的config.toml骨架,再配上逐步验证动作,让你在本地确认 Provider API 连通性和功能完整性。适合已经在用 Codex App、想接统一 Key/API 通道、又不想丢掉 Mobile 和插件的同学。下面所有路径以 macOS/Linux 的~/.codex/为例,Windows 对应%USERPROFILE%\.codex\。
2. 前置准备:TaoToken 的 Key、地址与配置文件位置
在动config.toml之前,先把三样东西备齐:一个可用的 Bearer Token、正确的base_url、以及确认 Codex 的配置目录。
TaoToken 这边,你可以先到官网了解整体能力,再进控制台创建 Key。地址统一走https://taotoken.net/api,注意 API 域名后面不要带多余路径,Codex 会自己在后面拼/responses之类的端点。Key 的创建入口在控制台的 API Keys 页面,生成后只显示一次,建议当场复制到密码管理器。
| 项目 | 取值 | 说明 |
|---|---|---|
| base_url | https://taotoken.net/api | 不带尾斜杠,不带 UTM |
| Bearer Token | 控制台生成的 Key | 形如sk-开头的一串 |
| wire_api | responses | Codex 走 Responses API 通信 |
| requires_openai_auth | true | 保留官方登录态的关键开关 |
| 配置目录 | ~/.codex/ | 含config.toml与auth.json |
如果你还没创建 Key,可以走这个入口:API Keys 页面在https://taotoken.net/api-keys,登录后点新建即可。文档在https://taotoken.net/doc,里面有各语言 SDK 的接入示例,配 Codex 时主要看 Responses API 那一段。
注意:
experimental_bearer_token是敏感字段,配置文件权限一定要收紧,后面第 5 节会给chmod命令。
3. 可复制的 config.toml 骨架与 auth.json 改法
先处理auth.json。这个文件决定 Codex 用哪种登录模式。把它改成下面这样:
{ "auth_mode": "chatgpt", "OPENAI_API_KEY": null }auth_mode设成chatgpt,OPENAI_API_KEY保持null。这样 Codex 启动时会继续走 ChatGPT Auth 登录流程,不会因为看到 Key 就切到纯 API Key 模式。如果你之前已经把 Key 填进去了,记得清空。
接着改~/.codex/config.toml。下面这份骨架可以直接抄,把base_url和experimental_bearer_token换成你自己的值:
model_provider = "OpenAI" [model_providers.OpenAI] name = "OpenAI" base_url = "https://taotoken.net/api" wire_api = "responses" experimental_bearer_token = "sk-你的Key" requires_openai_auth = true逐项说明一下。model_provider = "OpenAI"指定当前激活的 Provider 名字,要和下面[model_providers.OpenAI]的表名一致。base_url填 TaoToken 的 API 地址,Codex 会把请求发到这里而不是官方端点。wire_api = "responses"表示用 Responses API 协议通信,这是 Codex 当前版本实际调用的接口形态。experimental_bearer_token填你在控制台生成的 Key。requires_openai_auth = true是整套配法的核心,它让 Codex 在使用自定义base_url的同时,继续维持官方登录态,从而解锁 Mobile、插件、额度查询这些依赖登录态的功能。
如果你还想同时保留多个 Provider 方便切换,可以再加一段:
[model_providers.TaoToken] name = "TaoToken" base_url = "https://taotoken.net/api" wire_api = "responses" experimental_bearer_token = "sk-你的Key" requires_openai_auth = true然后把顶部的model_provider改成"TaoToken"即可。名字随便取,只要上下一致。
操作顺序建议按这个来:先正常完成 Codex 的 ChatGPT Auth 登录,确认能进主界面;再改auth.json;再改config.toml;然后重启 Codex App;最后去 TaoToken 后台看请求日志。顺序反了容易出现登录态被覆盖的情况。
4. 验证请求:确认 Provider API 连通与功能完整
配完不验证等于没配。验证分两层:先确认请求真的打到了base_url,再确认周边功能没掉。
第一层,看 TaoToken 控制台的请求日志。重启 Codex App 后随便发一句对话,比如“用一句话解释什么是 Responses API”。回到控制台的日志页面,如果能看到这条请求的记录,说明 Provider 路由生效了。日志里通常能看到模型名、耗时、token 用量,这些能帮你判断是不是真的走了中转站。
第二层,用命令行直接打一次接口,排除 Codex 本身的干扰:
curl -s https://taotoken.net/api/responses \ -H "Authorization: Bearer sk-你的Key" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-4o-mini", "input": "ping" }'如果返回里有正常的输出结构,说明 Key 和base_url都没问题。这一步能过,Codex 里的请求基本也能过。如果这里就报 401,那是 Key 的问题;报 404,多半是base_url写错了路径。
第三层,验证功能完整性。打开 Codex Mobile,看能不能正常同步会话;进插件面板,看插件能不能调用;打开额度查询页面,看数据是否正常显示。这三项都正常,说明requires_openai_auth = true起作用了,登录态被保留了下来。
我试过在改完配置后不重启直接发请求,结果 Codex 还在用旧的 Provider 配置,日志里看不到新请求。所以重启这一步别省。
5. 本篇常见错排查:401、404、功能缺失与权限问题
配这套东西踩坑的概率不低,下面几个是最常见的。
报 401 Unauthorized。先检查experimental_bearer_token有没有填错,注意别把sk-前缀漏了。再确认这个 Key 在 TaoToken 控制台里是启用状态,没有过期或被禁用。如果 Key 没问题,检查auth.json里的OPENAI_API_KEY是不是null,有时候残留的旧 Key 会干扰。
报 404 Not Found。九成是base_url写错了。正确值是https://taotoken.net/api,不要带尾斜杠,不要自己加/v1或/responses,Codex 会自己拼。如果你从别处抄来的配置带了/v1,删掉。
Codex Mobile 或插件用不了。检查requires_openai_auth是不是true,这个字段拼写容易错,是requires_openai_auth不是require_openai_auth。另外确认auth.json的auth_mode是chatgpt,如果变成了apikey,登录态就丢了。
改了配置不生效。Codex App 有配置缓存,改完必须完全退出再重启,不是关窗口那种。macOS 上可以用Cmd+Q彻底退出。
权限太松导致 Key 泄露风险。配置文件里存了明文 Key,建议收紧权限:
chmod 600 ~/.codex/config.toml ~/.codex/auth.json这样只有当前用户能读写。另外experimental_bearer_token和requires_openai_auth都带实验性质,Codex 后续版本行为可能变,升级前先备份这两个文件:
cp ~/.codex/config.toml ~/.codex/config.toml.bak cp ~/.codex/auth.json ~/.codex/auth.json.bak请求能通但模型不对。有些中转站对模型名有映射规则,你填的模型名可能被转到别的模型上。去 TaoToken 文档里确认支持的模型列表,或者直接在控制台日志里看实际调用的模型名。
6. 长期编码与 Agent 场景的接入建议
如果你只是偶尔在 Codex App 里对话,上面这套配置够用了。但如果你要把 Codex 当长期编码助手,或者跑 Agent 类的自动化任务,建议把接入方式再规范一下。
长期编码场景下,请求量大、会话长,Key 的管理要更细。可以在 TaoToken 控制台里给不同用途创建不同的 Key,比如一个给 Codex App 日常对话,一个给 CI 里的自动化脚本,这样出问题能快速定位是哪个环节的 Key 失效了。控制台入口在https://taotoken.net/console,Key 管理在https://taotoken.net/api-keys。
Agent 场景通常需要更稳定的通道和更明确的额度控制。TaoToken 的 Coding Plan 就是为这类长期编码需求准备的,入口在https://taotoken.net/coding-plan,适合需要持续调用、又想把成本管起来的同学。配 Codex 时把base_url和 Key 换成 Plan 对应的值即可,config.toml结构不变。
如果你用的是 Claude Code 这类工具,接入思路类似,文档在https://taotoken.net/doc里有对应说明。模型对话的在线调试入口在https://taotoken.net/chat,配之前可以先去那里确认模型可用性,省得在本地反复试。
最后提醒一句,requires_openai_auth这个开关目前是让 Codex 保留官方登录态的关键,但它依赖 Codex 当前版本的实现。升级 Codex 后如果发现 Mobile 或插件又用不了,先回来看这个字段是不是被新版本改了语义,再对照本文的排查清单走一遍。配置备份留着,回滚成本很低。