1. 为什么 Prompt 写得好,auth.json 却先报错
很多人在 Codex 里研究 Prompt Design Patterns,把目标、上下文、边界、完成标准写得清清楚楚,结果第一次跑codex exec就卡在鉴权上。我见过太多这种情况:Prompt 结构没问题,模型能力也没问题,问题出在~/.codex/auth.json这个文件根本没配对。
Codex 的鉴权链路其实不复杂。CLI 启动时会读取auth.json,从中拿到 API Key 和 Base URL,然后向对应的服务端发起请求。如果这个文件里的字段名写错、路径放错、或者 Key 和 Base URL 不匹配,你后面 Prompt 设计得再漂亮也没用——请求根本发不出去。
这一篇的核心思路是:先把鉴权通道打通,再谈 Prompt 设计模式。我会用 TaoToken 作为统一的 API 通道,把 Codex 的auth.json配置完整走一遍,包括可复制的 JSON 片段、逐步验证动作、以及常见的报错排查。你跟着做,能在本地复现整条请求链路。
适合谁看:已经在用 Codex CLI 或准备接入 Codex 的开发者,尤其是想把 Prompt 工程落到真实项目里的人。如果你还没配过auth.json,或者配了但一直报 401,这篇就是给你写的。
TaoToken 在这里的角色是统一 Key 和 API 通道。你不需要在多个服务商之间来回切换配置,一个 Base URL 加一个 Key 就能把 Codex 的请求链路固定下来。官网入口在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 地址是 https://taotoken.net/api 。
先说清楚一个概念:Codex 的 Prompt 设计模式(Task Prompt、Skill、Scheduled Task、Playbook)是使用方式的选择,不是四个互斥的产品功能。同样,auth.json的配置也是基础设施层面的选择——它决定了你的 Prompt 能不能稳定地跑起来。两者是分层的关系:鉴权层管通道,Prompt 层管内容。
我试过在同一个项目里同时维护三套鉴权配置,切换的时候经常搞混 Key 和 Base URL 的对应关系。后来统一到 TaoToken 之后,auth.json只需要维护一份,Prompt 里的模型调用也稳定了很多。下面从配置开始。
2. TaoToken 前置准备:Key、Base URL 与 auth.json 路径
在改auth.json之前,你需要先拿到两样东西:API Key 和 Base URL。TaoToken 的 API Key 在控制台里生成,地址是 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。生成之后先复制到安全的地方,后面配置要用。
Base URL 固定为https://taotoken.net/api,注意这个地址不加 UTM 参数,直接写进配置文件就行。
接下来是auth.json的路径。Codex CLI 默认读取用户目录下的.codex文件夹:
- macOS / Linux:
~/.codex/auth.json - Windows:
C:\Users\<你的用户名>\.codex\auth.json
如果你不确定路径,可以在终端里跑codex --version确认 CLI 已安装,然后手动创建.codex目录。有些版本在首次运行时会自动生成这个目录,但auth.json通常需要你自己写。
这里有个容易踩的坑:不同版本的 Codex 对auth.json的字段要求不完全一样。有的版本用OPENAI_API_KEY,有的用api_key,还有的用嵌套结构。我建议你先看一眼当前版本的文档,或者直接跑一次codex exec看它报什么错,根据报错反推字段名。
为了统一,下面给的配置片段用的是当前主流版本兼容的写法。如果你跑的时候报字段缺失,对照第 5 节的排查表改。
在配置之前,建议先确认你的 Key 是有效的。可以打开模型对话页面 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 做一次简单对话,确认 Key 能正常调用。这一步能帮你排除掉「Key 本身有问题」这个变量,后面排查就只剩配置文件的事了。
另外,如果你用的是 Coding Plan 或者需要长期跑 Agent 任务,建议在 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 看一下套餐说明,避免跑到一半额度不够。
准备工作做完,接下来进入实际配置。记住三个要素:Base URL、Key、Model ID。这三个在后面的 JSON 片段里都会出现,缺一不可。
3. 可复制配置:auth.json 完整片段与字段说明
这一节给的是可以直接复制粘贴的配置。先备份你现有的auth.json,然后按下面的结构改。
{ "OPENAI_API_KEY": "sk-你的TaoToken密钥", "OPENAI_BASE_URL": "https://taotoken.net/api", "model": "gpt-4o", "provider": "openai" }这是最简版本。字段说明:
OPENAI_API_KEY填你在 TaoToken 控制台生成的 Key,注意不要带多余空格。OPENAI_BASE_URL固定为https://taotoken.net/api,末尾不要加斜杠。model填你要用的模型 ID,比如gpt-4o或gpt-4o-mini,具体可用模型在模型对话页面能查到。provider一般填openai,因为 Codex 走的是 OpenAI 兼容协议。
如果你的 Codex 版本要求嵌套结构,用这个版本:
{ "openai": { "api_key": "sk-你的TaoToken密钥", "base_url": "https://taotoken.net/api", "model": "gpt-4o" } }两种写法的区别在于字段层级。判断方法很简单:跑一次codex exec "echo test",如果报missing api_key就换成嵌套版,如果报unexpected field就换回扁平版。
还有一个变体是带auth_mode的:
{ "auth_mode": "apikey", "OPENAI_API_KEY": "sk-你的TaoToken密钥", "OPENAI_BASE_URL": "https://taotoken.net/api", "model": "gpt-4o" }auth_mode设为apikey表示用 API Key 鉴权,而不是 OAuth 登录。如果你之前用 ChatGPT 账号登录过 Codex,这个字段可能是oauth,需要改成apikey,否则它会走 OAuth 流程,忽略你的 Key。
配置文件的权限也要注意。在 macOS / Linux 上,auth.json建议设为600:
chmod 600 ~/.codex/auth.jsonWindows 上不用特别设置,但确保文件不在同步盘里,避免被其他程序改掉。
如果你同时用 Cline MCP 或 Claude Code,注意它们的配置文件和 Codex 是分开的。Cline 的 MCP 配置在cline_mcp_settings.json,Claude Code 在~/.claude/settings.json。不要混在一起改,每个工具读自己的配置。
配置写完后,先别急着跑复杂 Prompt。用最简单的命令验证通道是否打通,下一节讲具体步骤。
4. 验证请求:从 codex exec 到成功返回
配置写完,第一步是验证鉴权通道。用最简单的非交互命令:
codex exec "回复 ok"如果配置正确,你会看到模型返回ok或者类似的简短回复。这一步只验证通道,不验证 Prompt 质量。
如果这一步就报错,先看错误类型。401 通常是 Key 无效或字段名不对;local proxy failed通常是 Base URL 写错或网络不通;reading choices通常是返回结构不符合预期,可能是 Base URL 指向了非兼容接口。
通道通了之后,再验证一个带文件读取的 Prompt,确认 Codex 能正常调用工具:
codex exec --sandbox workspace-write "读取当前目录的 README.md,用一句话总结内容"这里--sandbox workspace-write表示允许在工作区内写文件。如果你只是读文件,可以用默认的只读沙箱。这一步能验证 Codex 的工具调用链路是否正常。
接下来验证 Prompt 设计模式里的「一次性任务」结构。写一个带目标、上下文、边界、完成标准的 Prompt:
codex exec "目标:检查当前目录下所有 .py 文件的语法错误。上下文:只检查 .py 文件,忽略 venv 和 node_modules。边界:只报告,不修改任何文件。完成标准:列出每个有语法错误的文件路径和错误行号。"如果返回了结构化的报告,说明 Prompt 结构和鉴权通道都正常。这一步同时验证了两件事:模型能理解结构化 Prompt,请求链路能稳定返回。
对于需要机器可读输出的场景,可以用--json:
codex exec --json "列出当前目录的文件数量"返回的 JSON 里会包含事件流,方便下游脚本解析。如果你需要固定字段,可以配合--output-schema。
验证成功后,建议把这条命令记下来,作为以后排查的基准。每次改完配置,先跑这条命令确认通道没坏,再去调 Prompt。
如果你在验证时遇到OAuth相关的报错,说明auth_mode没设对。回到第 3 节,把auth_mode改成apikey,然后重新跑验证命令。
通道验证通过后,你就可以放心地去设计复杂的 Prompt 了。下一节讲常见报错和排查方法。
5. 常见报错排查:401、local proxy failed、reading choices、OAuth
这一节按报错类型逐个排查。每个报错都给出原因和修复动作。
401 Unauthorized
最常见。原因通常是 Key 无效、字段名不对、或者 Key 和 Base URL 不匹配。排查步骤:先确认OPENAI_API_KEY的值没有多余空格和换行;再确认OPENAI_BASE_URL是https://taotoken.net/api,末尾没有斜杠;然后确认auth_mode是apikey。如果都对了还报 401,去控制台重新生成一个 Key 试试。
local proxy failed
这个报错通常和网络链路有关。先确认 Base URL 能通:
curl -I https://taotoken.net/api如果 curl 也失败,说明网络层有问题,检查你的网络环境。如果 curl 成功但 Codex 报错,检查auth.json里的 Base URL 是不是写成了https://taotoken.net/api/(多了斜杠)或者https://taotoken.net(少了/api)。
reading choices 相关报错
这个报错说明 Codex 收到了返回,但结构不符合预期。常见原因是 Base URL 指向了非 OpenAI 兼容的接口。确认你用的是https://taotoken.net/api,而不是其他路径。另外检查model字段填的模型 ID 是否在可用列表里,填错模型 ID 有时也会导致返回结构异常。
OAuth 相关报错
如果你之前用 ChatGPT 账号登录过 Codex,auth.json里可能有 OAuth 相关的 token。这时候即使你填了 API Key,Codex 也可能优先走 OAuth 流程。修复方法:把auth_mode显式设为apikey,或者删掉 OAuth 相关的字段,只保留 API Key 配置。
字段缺失报错
如果报missing api_key或missing base_url,说明你的 Codex 版本要求的字段名和配置里的不一致。对照第 3 节的两种写法切换。扁平版用OPENAI_API_KEY,嵌套版用openai.api_key。
权限报错
如果报文件权限相关错误,检查auth.json的权限。macOS / Linux 上跑chmod 600 ~/.codex/auth.json。Windows 上确认文件没有被其他程序占用。
排查完记得每次只改一个变量,改完跑一次验证命令。这样能快速定位是哪个字段的问题。
6. 把 Prompt 设计模式接到稳定通道上
鉴权通道打通之后,Prompt 设计模式才有意义。回到本章的主题:Task Prompt、Skill、Scheduled Task、Playbook 这四类模式,本质上是在稳定的请求链路上做内容组织。
一次性任务用清晰的目标、上下文、边界、完成标准就够了。可复用技能把稳定方法固化成 Skill,调用时只提供本次输入。定时任务先手动验证 Prompt,再交给调度器。长任务用阶段门槛和人工决策点推进。
这些模式的共同前提是:请求能稳定发出去,返回能稳定解析。auth.json配置就是这个前提。你不需要每次调 Prompt 都重新配鉴权,但第一次一定要配对。
如果你需要长期跑编码任务或 Agent,建议在 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 看一下套餐,避免额度中断影响任务连续性。API Key 管理在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。
最后给一个实用建议:把验证命令写成一个脚本,每次改完配置跑一遍。这样你调 Prompt 的时候,不会因为鉴权问题浪费时间。通道稳定了,Prompt 设计模式才能真正落地。