Skip to content

Codex App 与 CLI 的第三方模型和双配置 ​

先把官方登录保留在 ~/.codex,再用 ~/.codex-api 试第三方模型。App 与 CLI 在同一种模式下读取同一个目录;切换模式时改变启动环境,不来回复制 auth.json。 第三方接入能否完成,取决于协议、认证、模型目录和客户端版本四个条件。[S1][S2][E1]

本文把一次 Windows 原生 Codex 配置检查改写成通用教程。核验日期为 2026-09-03:CLI 0.153.0、App 内置运行时 0.153.0-alpha.5、桌面包 26.901.1978.0、OpenCodex 2.14.0。这些是实验版本,不是最低支持版本。[E1]

1. 概述 ​

先解决哪个问题 ​

你的目标推荐做法需要额外核验
App 和 CLI 共用官方 ChatGPT 登录两者使用默认 ~/.codex 与同一认证存储后端新进程读取的 HOME、登录类型、官方模型列表
CLI 临时试一个兼容模型命名 profile,或独立 API HOMECLI 的 --profile 行为与协议支持
App 和 CLI 都切换到第三方启动前共同选择 API HOME,在其根配置指定 providerApp 是否实际接收该 HOME、模型选择器、一次真实请求
同一个列表显示多个上游模型能识别路由模型 ID 的代理,例如 OpenCodex路由规则、代理认证、服务启动与退出恢复
恢复纯官方模式移除第三方覆盖,停止代理与自启动,再重启客户端不能只看配置文件或服务停止提示

先决条件:能编辑 TOML,了解环境变量,会在 PowerShell 或终端检查进程;第三方服务需要你自行取得授权。学习目标:解释每个文件的职责、建立两套可选择配置、识别模型显示与请求成功的区别、恢复官方默认。[S1][S2]

范围是本机 App 与 CLI 的配置。本文不承诺任意“OpenAI 兼容”接口都可使用,不扩展到云端 Codex,也不提供个人账号、真实服务地址或认证文件。

2. 使用 ​

第一步:给两种模式各留一个 HOME ​

text
~/.codex/                      官方模式:App + CLI
  config.toml                  用户配置
  auth.json                    文件存储模式下的官方登录,私密
~/.codex-api/                  API 模式:App + CLI
  config.toml                  第三方 provider 配置
  catalog.json                 可选:与运行时兼容的模型目录

CODEX_HOME 不只影响配置,还影响认证和本地状态。两套 HOME 会形成两份会话与缓存;同一模式共用一个 HOME 才是本文的“复用”。独立 HOME 不意味着自动共享 MCP、插件、技能和历史;确实需要复用的非敏感设置应有自己的来源与同步方式。[S1][E1]

下载模板:官方配置、第三方配置、模型目录示例、Windows 启动脚本。将模板合并到目标文件,不要覆盖已有的 MCP、项目规则或插件配置。

官方模式不需要手写模型名称、模型目录或服务地址。为了明确使用本机文件认证,模板只包含:

toml
cli_auth_credentials_store = "file"

使用 keyring 或 auto 时,凭据位置会不同;先确认现有后端再决定是否更改。不要为了“共享”把 API key 写进官方 auth.json。同一 HOME、同一存储后端下的登录与退出可能影响两个入口。[S2]

第二步:配置一个 Responses 兼容的上游 ​

把下面配置放进 API HOME 的 config.toml。example_gateway、模型 ID、域名均为占位符,需要按上游文档替换:

toml
model_provider = "example_gateway"
model = "provider-model-id"

[model_providers.example_gateway]
name = "Example Responses gateway"
base_url = "https://gateway.example.com/v1"
env_key = "EXAMPLE_MODEL_API_KEY"
wire_api = "responses"
supports_websockets = false

在核验版本中,wire_api 仅接受 responses。只支持 /chat/completions 的接口需要协议适配层。supports_websockets = false 只是禁用可选传输;它不会修复错误的 Responses 事件流、工具调用或模型 ID。[S3]

从本地凭据管理器给启动进程提供 EXAMPLE_MODEL_API_KEY,不要把真实值写入模板、命令历史或 PR。App 从桌面图标启动时未必继承终端变量;需要令真正启动 App 的进程取得变量。也可使用官方支持的 [model_providers.<id>.auth] 命令型认证,从凭据管理器取短期 token;不得同时配置 env_key、内联 bearer 或 requires_openai_auth。[S1][S3]

requires_openai_auth = true 会选择 OpenAI 认证,并忽略 env_key;只有明确需要 OpenAI 登录透传的可信代理才使用它,不能把它当作“开启第三方支持”的开关。[S2]

第三步:让 App 与 CLI 选择同一模式 ​

Windows 原生:在已配置好密钥环境的 PowerShell 中运行下载的启动脚本:

powershell
.\Start-Codex.ps1 -Mode official -Surface cli
.\Start-Codex.ps1 -Mode api -Surface cli
.\Start-Codex.ps1 -Mode official -Surface app
.\Start-Codex.ps1 -Mode api -Surface app

这四条是备选操作,按需要运行一条。脚本仅在启动期间设置进程级 CODEX_HOME,随后恢复调用终端的值。启动 App 前要求完全退出旧实例,并从已安装 MSIX 包发现可执行文件。安装布局变化会明确报错。[E2]

验收 HOME:在 App 的设置中打开实际配置文件,核对路径;再核对其内置 app-server 的 config/read。不能用另一个终端里的 $env:CODEX_HOME 证明 GUI 已切换。若安装方式忽略启动环境,先停止切换并查清真实配置入口;不要盲目删除默认目录或创建目录联接。该脚本的语法已验证,跨所有安装方式的 GUI 切换尚未验证。[S4][E2]

macOS / Linux CLI:变量只作用于本次进程:

bash
CODEX_HOME="$HOME/.codex" codex
CODEX_HOME="$HOME/.codex-api" codex

macOS GUI 可由终端向实际 App 可执行文件传递同一环境,但需要先确认安装路径并完全退出旧实例。本次没有验证 macOS GUI 双 HOME 启动,不将其写成通用复制命令。[E1]

第四步:需要模型选择器时再增加目录 ​

model 选择请求使用的模型;model_catalog_json 提供启动时加载的模型元数据。两者职责不同。模型目录示例是完整的、用于结构测试的虚构条目;上下文长度、推理档位、图片和工具能力必须按真实上游填写。[S3][E2]

在 API 配置的第一个表头之前加入实际绝对路径,例如:

toml
model_catalog_json = 'C:\Users\Example\.codex-api\catalog.json'

将 Example 替换为本机用户目录。TOML 中表头后的键属于该表:把这行放在 [model_providers.example_gateway] 后面会写到错误层级。

先按各自的真实可执行文件验证目录:

powershell
codex debug models --help
codex -c 'model_catalog_json="C:\Users\Example\.codex-api\catalog.json"' debug models

随后用 App 内置的 codex.exe 重复同一检查,再重启 App 看选择器。全局 CLI 与 App 可能打包不同版本。不要直接把上游 main 分支的目录当作跨版本通用文件;已有版本不兼容的可复现报告。[S5][E2]

第五步:需要时才引入 OpenCodex ​

OpenCodex 是本地代理:它把带路由前缀的模型 ID 分发到相应 provider,也会修改 Codex 的模型目录和连接配置。在 2.14.0 的文档中,loopback 集成写入顶层 openai_base_url;非 loopback 使用命名 provider。它另有自己的 OPENCODEX_HOME,不能与 CODEX_HOME 混为一谈。[S6][E1]

在隔离测试目录下安装并阅读当前帮助,再初始化;ocx init 会修改所选 Codex 配置:

powershell
$env:CODEX_HOME = Join-Path $env:USERPROFILE '.codex-api'
$env:OPENCODEX_HOME = Join-Path $env:USERPROFILE '.opencodex-lab'
npm install -g @bitkyc08/opencodex@2.14.0
ocx --help
ocx init
ocx start

完成后退出这个测试终端,避免环境变量影响下一次官方启动。provider 的认证与模型选择按 OpenCodex Providers 配置;这里不复制生产配置。官方 ChatGPT 登录透传、API key 路由、账号池是三种不同关系,不能通过修改模型名称相互替代。[S6][S7]

3. 原理 ​

五个状态不能互相证明 ​

状态谁负责不能证明什么
配置目录启动进程与 CODEX_HOME不能证明已有 GUI 进程重新加载
认证provider 的认证方式与凭据存储key 存在不代表有效或有模型权限
路由model_provider、provider URL,或代理覆盖模型名称像 GPT 不代表直连官方
模型目录model_catalog_json、缓存、运行时内置/远端数据列表可见不代表能完成推理
当前任务创建或恢复任务时采用的配置全局默认更改不代表历史任务自动迁移

以上分层来自配置接口与此次实证;排障应分别取证。[S1][S3][S4][E1]

HOME 与 profile 怎么取舍 ​

HOME 用来隔离本地状态;profile 是同一 HOME 中的配置覆盖层。 在 0.134.0 及以后,CLI --profile gateway 读取 $CODEX_HOME/gateway.config.toml,旧 [profiles.gateway] 与顶层 profile = "gateway" 不再适用。[S1]

只在 CLI 临时切换时,可将第三方模板保存成 gateway.config.toml:

bash
codex --profile gateway

App 是否提供相同 profile 选择入口,要按安装版本核验。本文的双入口方案把选定 provider 放在各 HOME 的根 config.toml,不依赖 GUI 认识 CLI flag。[E1]

models_cache.json 是派生数据,不是配置真源。此次 Windows 检查中,两个 HOME 同时存在代理目录与数百条缓存项;停止服务后仍需要移除覆盖并重启。官方模型管理器也分别处理缓存刷新和静态目录。[E1][S8]

4. 开发 ​

实战:把实验机恢复为官方默认 ​

此次处理前,官方 HOME 保留 ChatGPT 认证但被代理改了默认模型与目录;API HOME 使用独立 API 认证。旧 GUI 切换脚本依赖目录联接,而现场已是普通目录;API 配置还给子进程注入了失效的 HOME 路径。这些是该机器的观察,不能推广为 Codex 的默认行为。[E1]

恢复顺序如下,先核对清单再操作:

  1. 在原机保存必要恢复材料,限制访问或加密;不上传 auth.json、环境文件、日志、历史数据库或代理账号数据。
  2. 完全退出 App 与需要重新加载配置的 CLI。保留正常的官方登录文件。
  3. 在卸载 CLI 包之前停止 OpenCodex 并移除其自启动;按当前帮助执行 ocx service stop、ocx service uninstall。ocx restore 只恢复配置,并不停止代理。[S9]
  4. 从生效配置移除第三方 model、model_provider、model_catalog_json、base URL 覆盖与 [model_providers.*];清理相应 *.config.toml、认证辅助脚本、代理注入文件、过期模型缓存。保留无关 MCP 与项目配置。
  5. 清理启动脚本、用户环境和 shell_environment_policy.set 中的旧 HOME、模型 key 与代理覆盖。不要误删其他应用仍使用的凭据源。
  6. 停用 API HOME,保留需要的历史数据;移除其独立 API 认证。需要彻底退出 OpenCodex 时,清理其运行状态并卸载包。
  7. 从默认入口重启 App / CLI,运行下面的验收。恢复官方模式时不手工维护一个“官方模型白名单”,让原生运行时按当前账号取得默认列表。

验收分层:

检查可接受证据
配置无第三方 provider、目录和 URL 覆盖;App / CLI 解析到同一 HOME
认证两个运行时的 account/read 都是 chatgpt,需要官方认证;不输出邮箱或 token
模型两个运行时的 model/list 无代理前缀与第三方条目,分页已读完
后台服务、计划任务、托盘、自动启动入口、原监听端口均无残留
GUI重启后的新任务模型菜单与运行时结果一致
请求如果要宣称模型可用,再做一次不含私密材料的最小请求

App Server 的 initialize → initialized → config/read / account/read / model/list 可以检查原生消费路径;config/read 可能包含敏感设置,应只输出必要字段。[S4]

常见陷阱与反面证据 ​

现象解释与处理
CLI 可列出模型,App 菜单为空已有选择器回归报告;检查内置版本、认证过滤和 GUI,本页不把 CLI 列表当作 GUI 成功。[S10]
修改目录 JSON 后 App 没变化配置参考说明目录在启动时加载;已有 app-server 缓存报告。重启后再核验。[S3][S11]
某个客户端报 JSON 缺字段用匹配运行时的目录结构,两种二进制分别解析。[S5]
代理停了但 App 仍请求 localhost根 URL/profile 还在,或旧进程没有退出;服务停机不等于恢复路由。[E1]
App 正常,但它启动的 CLI 跑到另一个目录检查 shell_environment_policy.set.CODEX_HOME 和终端包装器。[E1]
旧任务仍显示以前的模型新建任务检查默认值;恢复任务可能保留原来的 provider。不要为了整理菜单批量改写会话数据库。
本地服务检查正常,却不能回答服务健康、模型可见、上游认证、Responses 流与工具回合是独立条件。

证伪结果:检索发现目录跨版本解析失败、App 选择器过滤、目录缓存三类反例,足以否定“填好 base_url 就全面支持第三方模型”。本教程保留逐入口验收,未验证的 GUI 或上游能力必须继续标为未验证。[S5][S10][S11]

下一步:完成一次“选择模型 → 普通文本 → 只读工具调用 → 工具结果继续推理”的闭环,再读 项目集成 配置 MCP,或回到 CLI 教程 建立日常操作习惯。

5. 资料库 ​

来源与验证范围 ​

以下来源均于 2026-09-03 取用。在线文档未标独立发布日期时,以取用日与所列版本为准。

编号来源 / 层级用途与范围
S1Advanced Configuration,L0HOME、profile 版本迁移、自定义 provider、认证 helper
S2Authentication,L0文件/keyring 认证、第三方 provider 认证选择
S3Configuration Reference,L0Responses、模型目录、provider 和认证字段
S4App Server,L0原生配置、账号与模型 RPC;App Settings 为配置入口参考
S5Codex #38934,L2 一手复现2026-08-17 的 App 内置版本与 main 模型目录不兼容报告;不是官方支持承诺
S6OpenCodex Installation,项目 L0HOME 所属、目录注入和 loopback 路由方式
S7OpenCodex Providers,项目 L0上游协议、ChatGPT 与 API key 路由边界
S8Codex 0.153.0 models manager,L0 源码运行时模型目录、刷新策略和缓存
S9OpenCodex CLI Lifecycle,项目 L0停止、恢复、服务卸载各自职责
S10Codex #34487,L2 一手问题报告自定义目录已加载但 GUI 不显示的版本相关反例
S11Codex #35129,L2 一手问题报告app-server 静态目录缓存的反例
E1本文 Windows 脱敏实证,E两套 HOME 的配置/认证类型、OpenCodex 本机安装与服务、原生运行时检查;原始配置不公开
E2本仓可下载模板的结构检查,E两种 Codex 二进制的目录解析、TOML 解析与 PowerShell 语法;不代表真实上游调用或通用 GUI 兼容性

检索日志 ​

渠道原始查询或访问路径命中 / 采用
官方域搜索Codex app custom model providers CODEX_HOME configuration返回结果,改为直接访问配置正文
官方域搜索Codex model_catalog_json model providers auth config返回结果,采用 S1–S3 正文
官方文档 GETconfig-advanced、config-reference、auth、app/settings4 页成功,旧 URL 重定向至 learn.chatgpt.com
上游 issue 搜索site:github.com/openai/codex "model_catalog_json" "app"多条结果,打开并采用 S5、S10、S11
上游 issue 搜索site:github.com/openai/codex "CODEX_HOME" "app" "provider"返回配置相互影响的线索,未作为普遍结论
OpenCodex GETgetting-started/installation/、guides/providers/、reference/configuration/providers/、reference/cli/lifecycle/4 页成功,采用安装/provider/生命周期边界
本机实证--version、--help、配置键检查、进程/任务/监听检查、App Server RPC只保留版本、结构、布尔状态与模型名

尚未验证:模板中虚构上游的真实推理与工具回合;所有系统/安装方式下的 GUI 双 HOME 启动;所有第三方模型在当前 App 选择器中的兼容性。配置模板是一套可检查的起点,不能替代这些验收。

为前端工程师打造 · 基于 VitePress 构建