
1. Windows 11 上 Codex CLI 与桌面端账号打架的真实场景如果你在 Windows 11 上同时用 Codex 桌面端和命令行工具大概率遇到过这种糟心事桌面端登录着自己的账号结果在 PowerShell 里跑一下codex它要么提示你重新登录要么直接把桌面端的登录态给顶掉了。更麻烦的是有些团队希望桌面端继续用账号体系而终端里想走独立的 API Key 计费两套东西共用一个C:\Users\用户名\.codex目录配置互相覆盖出了问题根本不知道是谁改的。这个问题的本质是 Codex CLI 默认会读取用户主目录下的.codex文件夹而桌面端也用同一个位置存认证信息和配置。两者共享同一份auth.json和config.toml只要有一方触发登录流程或者写入配置另一方就会受影响。Windows 11 下这个问题尤其明显因为 PowerShell 的环境变量作用域、npm 全局路径、执行策略这几件事凑在一起新手很容易卡在第一步。我这篇要解决的就是这个在 Windows 11 上从零装好 Node.js 和 Codex CLI然后通过CODEX_HOME环境变量给终端单独开一套配置目录让它用独立的 API Key 走 TaoToken 的接口桌面端继续用原来的账号两边互不干扰。整套流程的核心就一句话——用不同的 CODEX_HOME 目录隔离两套环境。下面每一步都给可复制的命令和配置片段照着做能一次跑通。适合谁看在 Windows 11 上用 Codex 桌面端做日常开发、又想在内核终端里用 API 模式跑批量任务或脚本的人以及被终端一登录桌面端就掉线折腾过的同学。你需要的基础只有一点会用 PowerShell 复制粘贴命令。2. 前置准备Node.js LTS 与 Codex CLI 安装避坑先说环境。Codex CLI 是 npm 包所以第一步是把 Node.js 装好。Windows 11 自带 winget直接一条命令搞定winget install --id OpenJS.NodeJS.LTS中途提示接受协议就输入y。装完之后一定要关掉当前 PowerShell 重新开一个否则 PATH 不会刷新你会以为装失败了。新窗口里验证node -v npm.cmd -v这里有个 Windows 11 特有的坑如果你直接敲npm -v很可能报这个错无法加载文件 C:\Program Files\nodejs\npm.ps1因为在此系统上禁止运行脚本。这不是 npm 没装好而是 PowerShell 的执行策略拦截了npm.ps1脚本。不要去改系统执行策略Set-ExecutionPolicy最省事的做法是统一用npm.cmd代替npm。后面所有命令我都写成npm.cmd你照抄就不会踩这个坑。接着装 Codex CLInpm.cmd install -g openai/codex装完验证一下装到哪了、版本是多少where.exe codex codex.cmd --version正常会输出类似C:\Users\用户名\AppData\Roaming\npm\codex C:\Users\用户名\AppData\Roaming\npm\codex.cmd codex-cli x.x.x如果where.exe codex没有任何输出说明 npm 全局路径没进 PATH。先查路径npm.cmd config get prefix常见结果是C:\Users\用户名\AppData\Roaming\npm。临时加进当前窗口的 PATH 就能用$env:Path ;C:\Users\用户名\AppData\Roaming\npm where.exe codex想永久生效就去系统属性 → 环境变量里把这条路径加到用户变量 Path但临时加已经够跑通本文流程了。更新 CLI 的时候记住一条铁律更新前先关掉正在运行的终端 Codex且绝对不要运行codex.cmd logout。更新命令是codex.cmd --version npm.cmd view openai/codex version npm.cmd install -g openai/codexlatest codex.cmd --versionlogout会清掉认证信息如果你桌面端和终端共用过目录这一下可能把桌面端也带崩。这也是为什么我们要做目录隔离——隔离之后终端这边的操作就碰不到桌面端了。3. 可复制配置用 CODEX_HOME 隔离终端 API 环境这一步是全文的核心。默认情况下 Codex CLI 读的是C:\Users\用户名\.codex桌面端也用这个。我们要给终端单独指定一个目录比如.codex-api-openai通过CODEX_HOME环境变量告诉 CLI 这次别读默认目录读我指定的这个。先创建目录并打开配置文件$env:CODEX_HOME$HOME\.codex-api-openai New-Item -ItemType Directory -Force $env:CODEX_HOME | Out-Null notepad $env:CODEX_HOME\config.toml$env:CODEX_HOME是当前 PowerShell 窗口的临时变量只影响这个窗口关掉就失效——这正是我们要的隔离效果。在打开的记事本里粘贴下面这份配置model_provider OpenAI model 供应商提供的模型名 review_model 供应商提供的模型名 model_reasoning_effort xhigh disable_response_storage true network_access enabled windows_wsl_setup_acknowledged true [model_providers.OpenAI] name OpenAI base_url https://taotoken.net/api/v1 wire_api responses env_key OPENAI_API_KEY [features] goals true需要你替换的只有两处供应商提供的模型名换成 TaoToken 文档里给的模型 IDbase_url按你实际用的接口地址填。TaoToken 的 API 入口是https://taotoken.net/api配置里通常补上/v1后缀具体以文档为准。这里有两个关键点必须讲清楚。第一不要把真实 API Key 写进 config.toml。配置里只写env_key OPENAI_API_KEY意思是去环境变量里找这个名字的 Key真正的 Key 在启动时临时注入。第二不要写requires_openai_auth true。这一项表示走账号认证而不是 API Key一旦写上CLI 就会忽略你的环境变量去走登录流程正好和我们的目标相反。判断标准很简单配置里出现env_key且没有requires_openai_auth才是纯 API Key 模式。wire_api responses这一项也要留意它要求后端兼容 responses 接口形式。如果你的服务只兼容普通 chat completions这一项可能要调整否则会报接口不支持的错。这个放到第 5 节排错里细说。配置存好之后日常启动终端 API 模式就三行$env:CODEX_HOME$HOME\.codex-api-openai $env:OPENAI_API_KEY你的API_KEY codex.cmdKey 只存在于当前窗口的临时变量里关掉 PowerShell 就没了不会落盘也不会被桌面端读到。想确认当前窗口是不是 API 模式跑这两条Get-ChildItem Env:CODEX_HOME Get-ChildItem Env:OPENAI_API_KEY看到CODEX_HOME指向.codex-api-openai、OPENAI_API_KEY有值就说明隔离生效了。想退出 API 模式直接关窗口或者手动清Remove-Item Env:CODEX_HOME -ErrorAction SilentlyContinue Remove-Item Env:OPENAI_API_KEY -ErrorAction SilentlyContinue4. 验证请求确认 CLI 走的是独立 API 而非桌面端账号配置写完不能只看文件得实际发一次请求确认它真的走了 API Key。启动之后在 Codex CLI 里随便问一句让它回个话比如让它解释一段代码或者生成一个简单函数。如果它正常返回内容说明请求已经打到base_url指向的接口上了。更严谨的验证方式是看它有没有弹登录。如果 CLI 启动后要求你账号登录那基本可以断定配置没走 API Key回去检查三件事Get-ChildItem Env:CODEX_HOME Get-ChildItem Env:OPENAI_API_KEY notepad $env:CODEX_HOME\config.toml确认config.toml里有env_key OPENAI_API_KEY并且没有requires_openai_auth true。这两条同时满足CLI 才会从环境变量读 Key。再验证一下桌面端没被影响。保持桌面端登录状态不动在另一个 PowerShell 窗口跑一遍 API 模式然后回到桌面端看它是否还在登录态。因为两套环境用的是不同目录桌面端.codex终端.codex-api-openai理论上互不干扰。我实测下来只要不在终端里跑logout桌面端登录态是稳的。还有一个容易忽略的点如果你同时开着桌面端和终端 Codex不要让它们同时改同一个项目文件夹。两个进程并发写文件容易冲突稳妥做法是同一时间只让一个 Codex 动项目文件另一个只用来查看或讨论。这不是配置问题是使用习惯问题但踩过一次就知道疼。验证通过后你的日常结构应该是这样Codex 桌面端 └── 使用默认 .codex 目录 └── 保持账号登录不退出、不 logout PowerShell 终端 Codex CLI └── 使用 .codex-api-openai 目录 └── 通过 OPENAI_API_KEY 环境变量调用 API两套环境物理隔离配置和认证各管各的这才是双轨使用该有的样子。5. 常见报错排查401、local proxy failed 与接口不兼容这一节把实际会撞到的报错列出来对照着查。报错一401 Unauthorized。最常见的原因是 Key 没注入或者名字对不上。先确认当前窗口的环境变量Get-ChildItem Env:OPENAI_API_KEY如果没输出说明你没设或者设完关了窗口。重新设一遍再启动。如果 Key 有值还报 401检查config.toml里的env_key是不是OPENAI_API_KEY名字必须和环境变量名完全一致大小写敏感。另外确认 Key 本身没过期、额度没用完。报错二local proxy failed 或连接被拒。这类通常是base_url写错或者网络层到不了目标地址。先核对base_url是否和文档一致注意结尾的/v1有没有漏或多。有些服务要求带/v1有些不带以文档为准。如果地址没问题检查本机网络是否能正常访问该域名公司网络有出口限制的话也会表现为连接失败。报错三reading choices 相关解析错误。这个多半是wire_api和后端接口形式不匹配。配置里写的是wire_api responses但后端只支持 chat completions 时返回结构对不上CLI 解析choices字段就会失败。解决办法是确认你的服务支持哪种接口形式按文档调整wire_api的值。报错四OAuth 或要求登录。出现登录提示说明配置被判定为账号模式。回去检查config.toml里有没有误写requires_openai_auth true有就删掉。同时确认CODEX_HOME确实指向了.codex-api-openai而不是默认目录——如果变量没生效CLI 读的是桌面端那份配置自然走账号认证。报错五npm 执行策略错误。前面提过npm -v报npm.ps1 禁止运行脚本统一改用npm.cmd即可不用动系统策略。报错六where.exe codex 找不到。用npm.cmd config get prefix查全局路径临时加 PATH$env:Path ;C:\Users\用户名\AppData\Roaming\npm where.exe codex排查顺序建议固定下来先看环境变量有没有生效再看 config.toml 内容对不对最后看 base_url 和接口形式。这三层从内到外能覆盖九成以上的问题。6. 长期使用建议与接入入口跑通之后把几个习惯固定下来能省很多事。第一永远不要在 API 模式里跑codex.cmd logout也不要在桌面端随手点退出登录隔离环境最怕的就是手动去清认证。第二把启动 API 模式的三行命令存成一个.ps1脚本或者记事本片段每次复制粘贴避免手敲漏掉CODEX_HOME那一行——漏了它CLI 就跑去读桌面端配置了。第三Key 只放临时环境变量不写进任何配置文件不截图不外发。如果你还没拿到可用的 API Key或者想确认模型 ID 和接口地址怎么填可以走这几个入口需要创建和管理 Key访问 TaoToken API Keys想先在线验证模型能不能通用 模型对话 试一句长期在终端里跑编码和 Agent 任务看 Coding Plan配置参数和接口细节对照接入文档控制台总入口Console最后给一个我自己的收尾习惯每次更新 Codex CLI 之前先关掉所有终端 Codex 进程更新完在 API 模式窗口里跑一次codex.cmd --version确认版本再发一句测试请求确认 Key 还有效。这三步做完桌面端和终端两边都能安心用不会出现更新完发现登录态没了的意外。