codex同时使用官方账号与第三方 API
Codex 双环境隔离:在同一台 Windows 上同时使用官方账号与第三方 API
通过
CODEX_HOME隔离 VS Code Stable、VS Code Insiders、ChatGPT Desktop 与 Codex CLI 的账号和 API 环境。
1. 背景
大家好,这是一个简单的用户隔离操作,我在 Windows 上使用 Codex / ChatGPT / VS Code 插件时,遇到了一个需求:
由于plus账号的codex额度太少,5X的pro对于开发时间分布并不均匀的我来说会造成浪费 而且codex的风控让我不敢贸然使用ccswitch来切换账户 所以我希望在同一台电脑上同时保留两套 Codex 环境:
-
官方账号环境
- VS Code Stable
- ChatGPT Desktop / Codex Desktop
- 普通 Codex CLI
- 使用 ChatGPT 官方账号
- 走官方订阅额度
-
第三方 API 环境
- VS Code Insiders
- 使用第三方 API 中转站
- 使用独立 API Key
- 和官方账号完全隔离
- 不影响 Stable、普通 CLI 和 ChatGPT Desktop
一开始我以为只要安装两个 VS Code,或者使用 VS Code Profile,就可以实现账号隔离。实际测试后发现并不是这样。
最终可维护的方案是:
不依赖 VS Code Profile,也不依赖 Stable / Insiders 天然隔离,而是通过
CODEX_HOME为 Codex 创建独立的本地身份空间。
2. 问题现象
2.1 VS Code Profile 不能可靠隔离 Codex 账号
我创建了两个 VS Code Profile:
▼text复制代码Codex-Official Codex-API
但两个 Profile 中仍然显示同一个 Codex 账号。
这说明:
▼text复制代码VS Code Profile 只能隔离编辑器设置、扩展列表、UI 状态; 不能可靠隔离 Codex 的认证状态。
2.2 Stable + Insiders 也不是天然隔离
后来我安装了:
▼text复制代码VS Code Stable VS Code Insiders
但如果不做额外配置,二者仍可能读取同一个默认 Codex 认证目录:
▼text复制代码C:\Users\<用户名>\.codex
结果就是:
▼text复制代码Stable 和 Insiders 仍然可能显示同一个 Codex 账号。
2.3 启动脚本中注入代理会引入新的不稳定因素
我为了修复 reconnecting 问题,把代理变量注入 VS Code Insiders 启动脚本:
▼powershell复制代码HTTP_PROXY=http://127.0.0.1:7897 HTTPS_PROXY=http://127.0.0.1:7897 ALL_PROXY=http://127.0.0.1:7897
后来出现了大量网络错误:
▼text复制代码SSL handshake failed ERR_CONNECTION_CLOSED stream disconnected before completion error decoding response body
排查后发现,第三方 API 可以国内直连,因此不应该把代理强行注入到 Insiders 进程中。启动脚本越复杂,后期越难定位问题。
3. 最终架构
最终采用的结构是:
▼text复制代码VS Code Stable / ChatGPT Desktop / 普通 Codex CLI ↓ C:\Users\...\.codex ↓ 官方 ChatGPT 账号 ↓ 官方订阅额度 VS Code Insiders 专用启动器 ↓ CODEX_HOME=C:\Users\...\.codex-insiders-api ↓ 第三方 API Key ↓ 第三方中转站,例如 https://lingsuan.top
核心原则:
▼text复制代码官方账号环境和第三方 API 环境必须使用不同的 CODEX_HOME。
4. 目录规划
4.1 官方账号目录
▼text复制代码C:\Users\...\.codex
用途:
▼text复制代码官方 ChatGPT 账号 VS Code Stable ChatGPT Desktop 普通 Codex CLI
这个目录不要动。
4.2 第三方 API 隔离目录
▼text复制代码C:\Users\...\.codex-insiders-api
用途:
▼text复制代码VS Code Insiders 第三方 API 环境 保存 config.toml 和 auth.json
4.3 Insiders 独立用户数据目录
▼text复制代码C:\Users\...\AppData\Local\VSCode-Insiders-API
用途:
▼text复制代码隔离版 VS Code Insiders 的 user-data-dir 隔离 UI 状态、缓存、扩展 globalState
4.4 Insiders 独立扩展目录
▼text复制代码C:\Users\...\.vscode-insiders-api\extensions
用途:
▼text复制代码隔离版 VS Code Insiders 的扩展目录
5. Codex 配置文件
5.1 config.toml
文件位置:
▼text复制代码C:\Users\...\.codex-insiders-api\config.toml
示例配置:
▼toml复制代码cli_auth_credentials_store = "file" forced_login_method = "api" model_provider = "OpenAI" model = "gpt-5.6-sol" review_model = "gpt-5.6-sol" model_reasoning_effort = "xhigh" disable_response_storage = true network_access = "enabled" windows_wsl_setup_acknowledged = true [model_providers.OpenAI] name = "OpenAI" base_url = "中转站提供网址" wire_api = "responses" requires_openai_auth = true [features] goals = true
5.2 关键字段解释
▼toml复制代码cli_auth_credentials_store = "file"
表示认证信息保存在当前 CODEX_HOME 下的文件中,而不是系统凭据库。
▼toml复制代码forced_login_method = "api"
表示这个环境只允许 API Key 登录,避免误用 ChatGPT OAuth 登录。
▼toml复制代码model_provider = "OpenAI"
这里的 OpenAI 是本地 Provider 名称,不一定代表请求一定发往官方 OpenAI。
▼toml复制代码base_url = "中转站提供网址"
表示请求发往第三方中转站。
▼toml复制代码wire_api = "responses"
表示使用 Responses API 协议。
▼toml复制代码requires_openai_auth = true
表示使用 OpenAI 风格的 Bearer Token,即从 auth.json 中读取:
▼json复制代码{ "OPENAI_API_KEY": "..." }
6. API Key 放在哪里
API Key 不要写进:
▼text复制代码config.toml 启动脚本 项目代码 README 环境变量 setx
只写在:
▼text复制代码C:\Users\...\.codex-insiders-api\auth.json
格式:
▼json复制代码{ "OPENAI_API_KEY": "你的第三方 API Key" }
7. VS Code Insiders 专用启动脚本
文件位置:
▼text复制代码C:\Users\...\Tools\codex-insiders-api\Start-Codex-Insiders-API.ps1
脚本内容:
▼powershell复制代码param( [string]$ProjectPath ) $ErrorActionPreference = "Stop" # 只设置 Codex 隔离目录,不注入代理 $env:CODEX_HOME = "$env:USERPROFILE\.codex-insiders-api" $UserDataDir = "$env:LOCALAPPDATA\VSCode-Insiders-API" $ExtensionsDir = "$env:USERPROFILE\.vscode-insiders-api\extensions" $CandidatePaths = @() $Cmd = Get-Command code-insiders -ErrorAction SilentlyContinue if ($Cmd) { $CandidatePaths += $Cmd.Source } $CandidatePaths += @( "D:\Microsoft VS Code Insiders\Code - Insiders.exe", "$env:LOCALAPPDATA\Programs\Microsoft VS Code Insiders\Code - Insiders.exe", "$env:ProgramFiles\Microsoft VS Code Insiders\Code - Insiders.exe", "${env:ProgramFiles(x86)}\Microsoft VS Code Insiders\Code - Insiders.exe" ) $InsidersExe = $CandidatePaths | Where-Object { $_ -and (Test-Path $_) } | Select-Object -First 1 if (-not $InsidersExe) { throw "未找到 VS Code Insiders 可执行文件。" } $Arguments = @( "--user-data-dir", $UserDataDir, "--extensions-dir", $ExtensionsDir, "--new-window" ) if ($ProjectPath) { if (-not (Test-Path $ProjectPath)) { throw "项目路径不存在:$ProjectPath" } $Arguments += $ProjectPath } Write-Host "Insiders executable: $InsidersExe" Write-Host "" Write-Host "=== Isolated Environment ===" Write-Host "CODEX_HOME = $env:CODEX_HOME" Write-Host "User Data Dir = $UserDataDir" Write-Host "Extensions Dir = $ExtensionsDir" Write-Host "Proxy = disabled" Write-Host "" Start-Process -FilePath $InsidersExe -ArgumentList $Arguments
这个脚本只做三件事:
▼text复制代码1. 设置 CODEX_HOME 2. 指定 VS Code user-data-dir 3. 指定 VS Code extensions-dir
不做:
▼text复制代码HTTP_PROXY HTTPS_PROXY ALL_PROXY NO_PROXY setx 注册表修改
8. 桌面启动器
文件位置:
▼text复制代码C:\Users\...\Desktop\Codex Insiders API.cmd
内容:
▼bat复制代码@echo off powershell.exe -NoProfile -ExecutionPolicy Bypass -File "%USERPROFILE%\Tools\codex-insiders-api\Start-Codex-Insiders-API.ps1" pause
如果想指定项目路径,可以写成:
▼bat复制代码@echo off powershell.exe -NoProfile -ExecutionPolicy Bypass -File "%USERPROFILE%\Tools\codex-insiders-api\Start-Codex-Insiders-API.ps1" -ProjectPath "C:\Users\...\Desktop\question glm5.2" pause
以后打开第三方 API 版 Insiders,只用这个入口。
不要使用普通的:
▼text复制代码Visual Studio Code - Insiders.lnk
否则可能不会加载专用 CODEX_HOME。
9. 验证隔离是否成功
打开隔离版 VS Code Insiders 后,在集成终端执行:
▼powershell复制代码$env:CODEX_HOME
期望输出:
▼text复制代码C:\Users\...\.codex-insiders-api
检查代理是否为空:
▼powershell复制代码$env:HTTP_PROXY $env:HTTPS_PROXY $env:ALL_PROXY
期望为空。
检查配置:
▼powershell复制代码Get-Content "$env:CODEX_HOME\config.toml"
应看到:
▼toml复制代码model_provider = "OpenAI" model = "gpt-5.6-sol" review_model = "gpt-5.6-sol" [model_providers.OpenAI] base_url = "https://lingsuan.top" wire_api = "responses" requires_openai_auth = true
不要执行:
▼powershell复制代码Get-Content "$env:CODEX_HOME\auth.json"
因为里面是 API Key。
只检查是否存在:
▼powershell复制代码Test-Path "$env:CODEX_HOME\auth.json"
10. 验证官方环境是否未被影响
打开普通 PowerShell,不要从 Insiders 中打开。
执行:
▼powershell复制代码$env:CODEX_HOME
期望为空。
这说明普通 Codex CLI 仍然使用默认目录:
▼text复制代码C:\Users\...\.codex
不要在普通 PowerShell 中执行:
▼powershell复制代码codex logout
否则可能退出官方账号环境。
11. 常见问题排查
11.1 Insiders 仍显示官方账号
原因通常是:
▼text复制代码没有通过专用启动器启动 CODEX_HOME 没有生效
检查:
▼powershell复制代码$env:CODEX_HOME
必须是:
▼text复制代码C:\Users\...\.codex-insiders-api
11.2 出现 SSL handshake failed
如果看到:
▼text复制代码SSL handshake failed ERR_CONNECTION_CLOSED
优先检查:
▼powershell复制代码$env:HTTP_PROXY $env:HTTPS_PROXY $env:ALL_PROXY
如果不为空,说明仍然有代理注入。
最终方案不建议给 Insiders 注入代理,因为第三方 API 可以国内直连。
11.3 出现 stream disconnected / error decoding response body
典型错误:
▼text复制代码Error running remote compact task: stream disconnected before completion: Transport error: network error error decoding response body
如果启动脚本无代理、CODEX_HOME 正确、config.toml 正确,那么这通常不是本地配置问题,而是第三方中转站对 Responses API streaming、长上下文、remote compact 场景兼容不稳定。
规避方式:
▼text复制代码1. 新建任务窗口,减少上下文长度 2. 不要在一个 Codex 会话里连续塞太多任务 3. 长任务拆成多个小任务 4. 换更稳定的中转站或模型
12. 维护原则
12.1 只换 API Key
只改:
▼text复制代码C:\Users\...\.codex-insiders-api\auth.json
不要动:
▼text复制代码config.toml 启动脚本 C:\Users\...\.codex
12.2 只换模型
只改:
▼toml复制代码model = "新模型ID" review_model = "新模型ID"
12.3 换中转站
才改:
▼toml复制代码[model_providers.OpenAI] base_url = "新中转站地址"
必要时同步改:
▼toml复制代码model = "新模型ID" review_model = "新模型ID"
13. 最终经验总结
13.1 VS Code Profile 不是 Codex 身份隔离边界
Profile 能隔离 UI 和扩展配置,但不能保证隔离 Codex 登录态。
真正可靠的隔离方式是:
▼text复制代码CODEX_HOME
13.2 Stable + Insiders 也不是天然隔离
两个 VS Code 版本可以帮助分离 UI,但如果它们读同一个:
▼text复制代码C:\Users\...\.codex
那么 Codex 账号仍然可能是同一个。
13.3 启动脚本不要承担过多职责
启动脚本应该只负责:
▼text复制代码CODEX_HOME user-data-dir extensions-dir
不应该混入:
▼text复制代码代理 模型 API Key 业务项目配置
否则后期非常难排查。
13.4 第三方中转的最大风险是 Streaming 兼容性
短请求能成功,不代表长任务、remote compact、上下文压缩也一定稳定。
如果总是在:
▼text复制代码remote compact task stream disconnected error decoding response body
阶段失败,优先怀疑中转站对 Responses API streaming 的兼容性。
14. 最终推荐结构
▼text复制代码官方环境: C:\Users\...\.codex → ChatGPT 官方账号 → Stable / Desktop / 普通 CLI 第三方 API 环境: C:\Users\...\.codex-insiders-api → 第三方 API Key → VS Code Insiders 专用启动器 启动脚本: 只设置 CODEX_HOME / user-data-dir / extensions-dir config.toml: 管理供应商、模型、base_url、wire_api auth.json: 只保存 API Key
一句话总结:
在同一台 Windows 电脑上同时使用 Codex 官方账号和第三方 API,真正可维护的方案不是切账号,而是用
CODEX_HOME创建两个互不共享的 Codex 本地身份空间。
希望对大家有所帮助
