1. Windows 桌面版 Codex App 启动失败到底卡在哪
Codex App 的 Windows 桌面版,本质是一个本地客户端外壳,它启动时要完成三件事:读取本地认证文件、向配置的模型服务地址发起一次握手、拿到模型列表后渲染主界面。这三步里任何一步失败,表现都是「窗口一闪而过」「一直转圈」「弹一个看不懂的英文报错」。很多人第一反应是重装,但重装解决不了认证文件的问题,因为auth.json是独立于程序目录存放的。
我先把结论放前面:Windows 桌面版 Codex App 启动问题里,占比最高的一类不是程序坏了,而是auth.json里的base_url指向了一个当前网络环境访问不通的地址,或者api_key字段为空、格式不对、带了多余空格。客户端在启动阶段会同步读取这个文件,读不到合法配置就直接退出,日志往往只留一行failed to load auth config,看起来像崩溃,其实是配置校验没过。
这篇面向的是这样几类人:刚在 Windows 上装完 Codex App、双击图标没反应的新手;之前用官方地址能跑、后来想换成自建网关地址结果启动失败的人;以及把auth.json放错目录、改了半天没生效的人。你不需要懂 Node 或 Rust,只要会找文件、会改 JSON、会用一条 curl 验证地址通不通,就能跟着走完。
需要先明确一个概念:Codex App 桌面版和网页版不是一回事。网页版登录态存在浏览器里,桌面版把登录态和模型服务地址落在本地一个 JSON 文件里,这个文件就是auth.json。它的路径在 Windows 上通常是%USERPROFILE%\.codex\auth.json,也就是C:\Users\你的用户名\.codex\auth.json。启动失败时,第一件事就是确认这个文件存在、内容合法、路径没写错。
还有一个高频误区:把auth.json放在安装目录下。安装目录在Program Files里,普通权限写不进去,客户端也不会去那里读。正确位置永远是用户主目录下的.codex文件夹。如果你之前按某些教程把文件丢在安装目录,启动失败是必然的,挪回来就好。
下面按「先定位现象、再准备配置、然后落地文件、接着验证请求、最后排错」的顺序展开。每一步都给可复制的命令和片段,你照着做即可。
2. 用 TaoToken 准备 Base URL 与 Key 的前置动作
在动auth.json之前,得先有一个能用的服务地址和一把 Key。这里我用 TaoToken 作为模型服务入口来演示,因为它同时提供对话和编码两类能力,桌面版 Codex App 需要的正是「一个兼容的 Base URL + 一把 Key + 一个模型 ID」这三件套。
先解释这三个东西分别是什么。Base URL 是客户端发请求的根地址,Codex App 会在它后面拼上/v1/chat/completions或/v1/responses这类路径;Key 是身份凭证,放在请求头的Authorization里;模型 ID 是你要调用的具体模型名字,比如某个编码能力强的模型。三者缺一,启动握手就会失败。
TaoToken 的 API 根地址是https://taotoken.net/api。注意这里不要带任何查询参数,客户端拼接路径时如果 Base URL 末尾多了斜杠或参数,很容易拼出//v1这种畸形路径,导致 404。建议在auth.json里就写成干净的https://taotoken.net/api。
Key 的获取在控制台里完成。打开https://taotoken.net/console,登录后进入 API Keys 页面,新建一把 Key。新建时建议给它起个能认出来的名字,比如codex-win-desktop,方便以后区分是哪台机器在用。复制出来的 Key 一般以固定前缀开头,是一长串字符,复制时注意别把首尾空格带进去,这是后面 401 报错的头号原因。
如果你只是想先验证模型能不能通,不想马上写进配置文件,可以先用模型对话页面手动发一条消息,确认账号和额度正常。地址是https://taotoken.net/models,进去选一个模型,发一句「你好」,能正常返回就说明 Key 和额度没问题。这一步能帮你把「账号问题」和「客户端配置问题」提前分开。
对于长期要用 Codex App 做编码、跑 Agent 任务的场景,建议直接看 Coding Plan,它更适合高频调用,地址是https://taotoken.net/coding-plan。桌面版客户端本身不区分你用的是按量还是套餐,它只认 Key,所以套餐选择不影响auth.json的写法,只影响你的成本。
准备阶段还要确认一件事:你的 Windows 网络能正常访问taotoken.net。在 PowerShell 里跑一条命令即可:
curl.exe -I https://taotoken.net/api如果返回HTTP/1.1 200或401、404之类的 HTTP 状态码,说明网络层是通的,401只是没带 Key,属于正常。如果卡住不动或报连接超时,那启动失败就跟auth.json无关了,先解决网络可达性。这一步能省掉大量瞎改配置的时间。
3. 可复制的 auth.json 配置片段与目录规范
现在进入正题,写auth.json。先确认目录。在 PowerShell 里执行:
echo $env:USERPROFILE输出类似C:\Users\Administrator。那么目标路径就是C:\Users\Administrator\.codex\auth.json。如果.codex文件夹不存在,先建:
New-Item -ItemType Directory -Force -Path "$env:USERPROFILE\.codex"然后创建或覆盖auth.json。用记事本打开容易存成带 BOM 的 UTF-8,某些版本解析会出问题,建议用 PowerShell 直接写:
@' { "OPENAI_API_KEY": "sk-你的TaoToken密钥", "OPENAI_BASE_URL": "https://taotoken.net/api", "model": "你的模型ID" } '@ | Set-Content -Encoding UTF8 "$env:USERPROFILE\.codex\auth.json"这段 JSON 里三个字段是关键。OPENAI_API_KEY放你的 TaoToken Key;OPENAI_BASE_URL固定写https://taotoken.net/api,不要加/v1,也不要加末尾斜杠;model填你要用的模型 ID。不同客户端版本对字段名可能有细微差异,有的版本读api_key和base_url,有的读带OPENAI_前缀的写法。如果你改完仍启动失败,可以两个版本都保留,客户端会取它能识别的那个:
{ "OPENAI_API_KEY": "sk-你的TaoToken密钥", "OPENAI_BASE_URL": "https://taotoken.net/api", "api_key": "sk-你的TaoToken密钥", "base_url": "https://taotoken.net/api", "model": "你的模型ID" }写完后立刻校验 JSON 合法性,这是最容易被忽略的一步。一个多余的逗号就能让整个文件解析失败,客户端表现就是启动即退出。用 PowerShell 验证:
Get-Content "$env:USERPROFILE\.codex\auth.json" -Raw | ConvertFrom-Json如果没有任何输出、直接回到提示符,说明 JSON 合法。如果报ConvertFrom-Json : 传入的对象无效,那就是语法错了,回去检查逗号和引号。中文引号、全角逗号是重灾区,务必用英文半角。
再确认文件编码和内容:
Get-Content "$env:USERPROFILE\.codex\auth.json"输出应该和你写入的一致,Key 完整、地址完整。如果看到开头有 `` 这种乱码字符,说明带了 BOM,用上面的Set-Content -Encoding UTF8重写一遍即可。
关于权限:如果你在写入时提示拒绝访问,说明当前不是管理员。可以右键 PowerShell 选择「以管理员身份运行」再执行写入命令。注意,只有写入.codex目录这一步可能需要管理员权限,日常启动 Codex App 不需要一直用管理员运行,这一点和网上一些「右键管理员运行」的说法要区分开——管理员运行解决的是首次创建目录的权限问题,不是启动问题的通用解。
配置写好后,先别急着开客户端。用一条 curl 直接验证这套 Key 和地址能不能通,能把问题范围缩到最小:
curl.exe https://taotoken.net/api/v1/models ` -H "Authorization: Bearer sk-你的TaoToken密钥"返回一个包含模型列表的 JSON,就说明 Key 和地址都是对的,接下来启动失败就一定是客户端侧的问题,而不是配置内容的问题。
4. 启动验证与成功结果确认
配置就绪后,启动 Codex App。第一次启动建议从开始菜单或桌面图标正常双击,不要一上来就用管理员运行,这样能复现真实用户场景。观察三件事:窗口是否出现、是否停在加载页、有没有弹出报错框。
如果窗口正常出现并进入主界面,说明auth.json被成功读取。此时做一次实际请求验证,别只看界面。在客户端里新建一个会话,发一句简单指令,比如「用 Python 写一个读取 CSV 并打印前五行的脚本」。能正常流式返回内容,就说明整条链路通了:客户端读取配置 → 请求 TaoToken → 返回结果渲染。
成功时你会看到几个特征:界面不再转圈,输入框可编辑,返回内容是逐字出现的。如果返回是空白的,或者一直显示「thinking」不动,那多半是模型 ID 写错了。模型 ID 必须和服务端实际支持的名称完全一致,大小写敏感。你可以回到https://taotoken.net/models页面确认可用模型名,再回填到auth.json的model字段。
再补一个验证动作:查看客户端日志。Codex App 一般会在%USERPROFILE%\.codex\下生成日志文件,名字类似log或codex.log。启动成功后日志里会有类似auth config loaded和request completed的行。如果启动失败,日志里通常能看到具体原因,比如invalid api key、connection refused、unexpected token。学会看日志,比反复重装高效得多。
用 PowerShell 快速看日志尾部:
Get-Content "$env:USERPROFILE\.codex\log" -Tail 50如果文件名不对,先列目录:
Get-ChildItem "$env:USERPROFILE\.codex"找到日志文件再读。日志里出现401就是 Key 问题,出现ENOTFOUND或ETIMEDOUT就是网络或地址问题,出现SyntaxError就是 JSON 语法问题。这三类覆盖了绝大多数启动失败。
成功之后,建议把这份可用的auth.json备份一份,比如复制成auth.json.bak。以后升级客户端或误改配置,直接还原即可,不用重新找 Key。这个习惯能省很多事。
5. 常见启动报错逐条排查
这一节按真实报错来对。你遇到的现象大概率在下面几条里。
第一条,401 Unauthorized或日志里invalid api key。原因通常是 Key 复制时带了空格、Key 已失效、或者auth.json里字段名写错导致客户端读到了空值。排查:用第 3 节的 curl 命令直接测 Key,如果 curl 也 401,就是 Key 本身的问题,回控制台https://taotoken.net/api-keys重新生成一把;如果 curl 通但客户端 401,就是字段名问题,把OPENAI_API_KEY和api_key两个都写上。
第二条,local proxy failed或connection refused。这通常出现在你之前配过本地代理地址、后来那个本地服务没开的情况。检查auth.json里的OPENAI_BASE_URL是不是还指向http://127.0.0.1:某端口。如果是,改成https://taotoken.net/api。同时检查系统环境变量里有没有残留的HTTP_PROXY、HTTPS_PROXY,有的话清掉:
Remove-Item Env:HTTP_PROXY -ErrorAction SilentlyContinue Remove-Item Env:HTTPS_PROXY -ErrorAction SilentlyContinue第三条,日志里reading choices或unexpected end of JSON input。这是服务端返回了非预期结构,常见原因是 Base URL 拼错,比如写成了https://taotoken.net/api/v1,客户端又拼了一次/v1,变成/api/v1/v1/...,返回 404 的 HTML 页面,客户端按 JSON 解析就报错。解决:Base URL 只写到https://taotoken.net/api,路径交给客户端拼。
第四条,OAuth相关报错,比如oauth token expired或failed to refresh token。桌面版如果之前用过账号登录模式,本地会缓存 OAuth 令牌,切到 Key 模式后旧令牌可能还在干扰。处理方式是清掉.codex下的令牌缓存文件,只保留auth.json。先看目录里有什么:
Get-ChildItem "$env:USERPROFILE\.codex" -Force把token.json、credentials.json这类文件移走或删除,再重启客户端。注意别删auth.json。
第五条,启动一闪而过、日志为空。这多半是auth.json的 JSON 语法错误,客户端在解析阶段就崩了,来不及写日志。用第 3 节的ConvertFrom-Json验证,重点查全角符号和多余逗号。
如果你用的是 CC Switch 这类多配置切换工具,或者 Cline 的 MCP 配置、Codex 的auth.json,记住三件套必须同时正确:Base URL 写https://taotoken.net/api,Key 写 TaoToken 生成的密钥,Model ID 写服务端支持的模型名。三者任意一个错,表现都是启动或请求失败。切换工具的好处是能保存多套配置,但坏处是容易切到一套过期的,排查时先确认当前生效的是哪一套。
6. 把配置固化下来并持续可用
排查完、跑通之后,最后一步是让它稳定。我的做法是把auth.json纳入一个简单的版本管理,比如复制到网盘或私有 Git 仓库,Key 用占位符替换,真 Key 单独存。这样换机器时不用重新摸索。
另外,模型 ID 会随服务端更新变化,建议每隔一段时间回https://taotoken.net/models确认一次当前可用模型名,避免某天突然启动失败却找不到原因。如果你要长期跑编码任务,Coding Plan 页面https://taotoken.net/coding-plan里有适合高频调用的方案,配置写法不变,只是计费方式不同。
接入文档在https://taotoken.net/doc,里面有针对不同客户端的字段说明,遇到字段名不确定时以文档为准。需要新建或轮换 Key 时去https://taotoken.net/api-keys。日常想快速验证模型是否正常,用https://taotoken.net/models发一条消息最快。
最后留一个实用习惯:每次改完auth.json,先跑ConvertFrom-Json校验,再跑一次 curl 验证 Key,最后才启动客户端。这三步顺序固定下来,能把绝大多数启动问题挡在打开客户端之前。