Codex CLI 配置隔离教程:让每个终端进程使用不同的 API、模型和供应商

Midsummer 2026-07-15 02:27 1

今天准备用 OpenDesign 修复一个项目的 UI,需要通过 Codex CLI 调用火山GLM-5.2。与此同时,我还有一个终端正在使用 OpenAI 官方的 GPT-5.6 Sol 执行长任务。


如果直接使用 CC Switch 切换 Provider,当前正在运行的任务也会受到影响。因此,我研究了一下如何让不同终端分别使用不同的配置,并且互不影响,现在将学习成果分享给大家。


一、基本知识


以 Windows 操作系统为例,默认情况下,Codex CLI 会读取:


%USERPROFILE%\.codex

例如:


C:\Users\Administrator\.codex

这里通常包含下面两个核心文件,但它们不一定同时存在,具体取决于配置和凭据存储方式:


.codex
├── config.toml
├── auth.json
├── ...
├── ...
├── ...


  • auth.json:保存 API Key等敏感信息。

  • config.toml:配置模型、Provider、Base URL、Reasoning Effort、MCP、插件等运行参数。


我们如果一直使用这一个配置没问题,但是有时候我们另开一个终端,也就是需要同时使用多个 Provider(供应商) 时,就会变得非常麻烦。因为每个供应商的keybaseurlmodel可能都不相同。


比如我有这么几个配置组合:OpenAI官方OpenRouter君の公益自建中转站。每次切换都去修改:modelbase_urlAPI KeyProvider,效率很低,而且容易改错。


虽然很多人和作者一样都在使用 CC Switch 管理不同的 Provider,但它更适合切换当前默认配置,并不适合多个终端同时使用不同配置。


二、使用 CODEX_HOME 实现配置隔离


2.1 原理


Codex CLI 支持通过环境变量 CODEX_HOME 指定配置目录。


例如,在 PowerShell 中运行如下命令:


$env:CODEX_HOME="C:\CodexProfiles\OpenRouter"
codex

CMD 中对应的命令为:


set "CODEX_HOME=C:\CodexProfiles\OpenRouter"
codex

也可以写成一行:


set "CODEX_HOME=C:\CodexProfiles\OpenRouter" && codex

以上设置都只对当前终端窗口及其启动的子进程生效,不会影响其他终端。


那么 Codex 就会读取:


C:\CodexProfiles\OpenRouter

中的:


config.toml
auth.json

而不是默认目录的两个配置文件。


同理,在 PowerShell 中运行如下命令即可切换到另一套配置,整个过程无需修改任何文件。


$env:CODEX_HOME="C:\CodexProfiles\Official"
codex

2.2 第一步,创建配置文件夹


创建一个专门且安全的目录,然后在其中创建 N 个文件夹,每个文件夹对应一套配置。如下所示,在 CodexProfiles 文件夹下创建了 4 个配置目录。


C:\
└── CodexProfiles
├── Official
│ ├── config.toml
│ └── auth.json

├── OpenRouter
│ ├── config.toml
│ └── auth.json

├── 君の公益
│ ├── config.toml
│ └── auth.json

└── 自建中转站
├── config.toml
└── auth.json

每个目录都是一套相互独立的环境,大部分配置,如 ProviderAPI KeyBase URLmodel等,都可以实现隔离。


2.3 第二步,复制CC Switch的配置过来


CC Switch 的每个配置项中都有如下参数:



auth.jsonconfig.toml 的内容分别复制到对应配置目录中的同名文件。


如果你不是用的 CC Switch,也可以直接复制默认 ~/.codex 目录中的 config.toml 与 auth.json,然后根据需要修改即可。


2.4 第三步,使用对应的配置开始会话


PowerShell:


$env:CODEX_HOME="C:\CodexProfiles\OpenRouter"
codex

另一个窗口:


$env:CODEX_HOME="C:\CodexProfiles\Official"
codex

多个终端可以同时运行,例如一个使用 OpenAI 官方模型,一个使用第三方 Provider,另一个使用自建兼容服务,彼此互不影响。



Codex CLI 也支持通过 --profile 切换命名配置。如果只需要切换模型、推理强度等参数,使用 Profile 更轻量;本文选择 CODEX_HOME,是因为它还能隔离认证凭据和其他本地状态,也就是可以换API提供商。



三、踩坑


3.1 问题1


3.1.1 问题


一开始,我把几个配置项放到了:


C:\Users\Administrator\.codex\providers

例如:


C:\Users\Administrator\.codex\providers\公益站

然后运行如下环境变量后启动 Codex


$env:CODEX_HOME="C:\Users\Administrator\.codex\providers\公益站"

结果我发现模型跟我配置文件的不一样,且出现了下面的警告:


Ignored unsupported project-local config keys...

例如:


Ignored unsupported project-local config keys in

C:\Users\Administrator\.codex\config.toml

然后模型还不生效。


3.1.1 解决方案


方法其实很简单:使用 cd 切换到实际项目目录,或者切换到一个不包含冲突 .codex\config.toml 的目录,然后再启动 Codex。例如:


cd "C:\Projects\MyProject"
codex

3.1.3 问题出现的原因


当时,我通过 CODEX_HOME 指定的新用户级配置是:


C:\Users\Administrator\.codex\providers\公益站\config.toml

与此同时,我的 PowerShell 当前工作目录正好是:


C:\Users\Administrator

而该目录下原本就存在 Codex 的默认配置文件:


C:\Users\Administrator\.codex\config.toml

在没有修改 CODEX_HOME 时,这份文件通常作为用户级配置使用。


但是,当我通过 CODEX_HOME 将用户级配置切换到其他目录后,原来的配置文件便不再是本次运行的用户级配置。由于它的路径又刚好符合:


<当前工作目录>\.codex\config.toml

Codex 将其额外作为当前目录的项目级配置加载。


问题就出在这里:一个 config.toml 文件中可以写入 model_providermodel_providersnotify 等字段,但这些字段能不能生效,还要取决于这份文件是作为用户级配置还是项目级配置加载。


原来的配置文件本就是由 CC Switch 作为用户级配置生成的,因此其中包含:


model_provider = "custom"

[model_providers.custom]
name = "SakuraAPI"
base_url = "https://saxxx1.icu"

notify = [ ... ]

但这次运行中,它被 Codex 当作项目级配置加载。Codex 读取到这些字段后,认为它们不支持从项目配置层生效,因此将其忽略,并输出:


Ignored unsupported project-local config keys:
model_provider, model_providers, notify

例如,原来的配置中还有:


model = "gpt-5.5"

而我新指定的配置中设置的是:


model = "gpt-5.6-sol"

由于项目级配置的优先级高于用户级配置,旧文件中的 model = "gpt-5.5" 仍然生效,并覆盖了新用户配置中的 model = "gpt-5.6-sol"


当我使用 cd 切换到一个没有 .codex\config.toml 的目录后,原来的默认配置不再被识别为当前目录的项目配置,新 CODEX_HOME 中的配置就正常生效了。


3.2 问题2


现象如下:


PS C:\Users\Administrator\Desktop> $env:CODEX_HOME="C:\Users\Administrator\.codex\providers\SakuraAPI"
PS C:\Users\Administrator\Desktop> codex
Error loading configuration: 系统找不到指定的文件。 (os error 2)

经查,这是CC-Switch干的好事,由于我们在CC-Switch配置供应商时候,开启了模型映射,所以出现了这一配置项,如下图所示。



解决方案,就是直接在config.toml中删除下面这一行:


model_catalog_json = "cc-switch-model-catalog.json"


最新回复 (1)
  • admin2 07-15 02:39
    1

    ccs我也疑惑为什么codex供应商没有单独的终端,cc供应商有单独的终端

* 帖子来源Linux.do
返回