本文所有命令和输出,都是 2026-09-28 在 Codex CLI 0.158.0(当前最新版)上实测的原样结果。网上 4 到 6 月写的教程有几处已经对不上新版了,文中会标出来。
先说 4 件老教程里没写的事
config.toml里写[profiles.xxx]的老写法,新版直接报错,要改成单独的配置文件(第 5 节)- GPT-6 系列(gpt-6-sol / gpt-6-astra / gpt-6-luna)已经进了 Codex 自带的模型目录,不用再手动补;DeepSeek 这类第三方模型还需要补(第 3 节)
- 接第三方服务商时,启动信息里的思考强度显示是
none,写代码建议手动调高(第 4 节) - 出错时会先重试 5 次,屏幕上一直刷
Reconnecting... 1/5,很容易被当成网络问题,真正的原因在 5/5 之后那一行(第 7 节)

1. 安装
Codex CLI 是一个 npm 包,装好 Node.js(16 以上)就行:
npm install -g @openai/codex
codex --version
输出:
codex-cli 0.158.0
已经装过的,升级也是这一句,后面加 @latest:
npm install -g @openai/codex@latest

2. 国内怎么用:接一个 OpenAI 兼容的服务商
Codex 不一定要登录 ChatGPT 账号,它可以接任何支持 Responses 接口的 OpenAI 兼容服务商。国内用法就三步:拿到服务商的 API key 和接口地址 → 写进配置文件 → 用 key 登录。
2.1 配置文件在哪
- macOS / Linux:
~/.codex/config.toml - Windows:
C:\Users\你的用户名\.codex\config.toml
没有这个文件就新建一个。
2.2 写配置
本文以 wanapis 为例,换成你用的服务商地址即可:
model_provider = "wanapis"
model = "gpt-6-sol"
[model_providers.wanapis]
name = "wanapis"
wire_api = "responses"
requires_openai_auth = true
base_url = "https://api.wanapis.com/v1"
每个字段是什么意思:
| 字段 | 说明 |
|---|---|
model_provider |
默认用哪个服务商,对应下面 [model_providers.xxx] 里的 xxx |
model |
默认模型,名字要和服务商那边一字不差 |
wire_api |
必须写 "responses"。新版已经不支持 "chat",写了配置直接加载失败 |
requires_openai_auth |
写 true,Codex 才会带上你登录的 key |
base_url |
服务商的接口地址,要带 /v1,但不要写到 /v1/responses |

wire_api 写成 "chat" 的话,一启动就是这个报错:
Error loading config.toml: `wire_api = "chat"` is no longer supported.
How to fix: set `wire_api = "responses"` in your provider config.
in `model_providers.wanapis.wire_api`
所以只提供 Chat Completions 接口、没有 Responses 接口的服务商,新版 Codex 接不了。

2.3 用 key 登录
printenv OPENAI_API_KEY | codex login --with-api-key
--with-api-key 从标准输入读 key,所以先 export OPENAI_API_KEY=你的key,再用上面这句登录。成功会显示:
Successfully logged in
Windows 在 PowerShell 里也一样,用管道把 key 传给 codex login --with-api-key。
2.4 跑一下,看通没通
codex exec "只回复两个字母:ok"
输出里看这几行:
OpenAI Codex v0.158.0
--------
workdir: /你的项目目录
model: gpt-6-sol
provider: wanapis
...
--------
user
只回复两个字母:ok
codex
ok
tokens used
2,776
provider 是你配的服务商、最后回了 ok,就通了。
如果当前目录不是 git 仓库,会报:
Not inside a trusted directory and --skip-git-repo-check was not specified.
在项目目录里跑,或者加上 --skip-git-repo-check。
3. 接 DeepSeek 等国产模型
同一个服务商下,换模型只要加 -m:
codex exec -m deepseek-v4.1-flash "只回复两个字母:ok"
能跑通,但会多一行警告:
warning: Model metadata for `deepseek-v4.1-flash` not found. Defaulting to fallback metadata; this can degrade performance and cause issues.
意思是 Codex 自带的模型目录里没有这个模型,只能用一套默认参数。消掉它要自己补一份模型目录,三步:
第一步,导出 Codex 自带的目录:
codex debug models --bundled > ~/.codex/models.json
0.158 自带 10 个模型,里面已经有 gpt-6-astra、gpt-6-sol、gpt-6-luna、gpt-5.6-sol,所以用 GPT-6 的不用做这一节。
第二步,打开 ~/.codex/models.json,在 models 数组里把 gpt-6-sol 那一整条复制一份,slug 改成 deepseek-v4.1-flash,display_name 顺手改成 DeepSeek V4.1 Flash。
第三步,在 config.toml 最上面加一行,写绝对路径:
model_catalog_json = "/Users/你的用户名/.codex/models.json"
注意这一行要放在所有 [xxx] 小节的前面,放到 [model_providers.wanapis] 下面就成了那个小节的字段,不生效。
再跑 -m deepseek-v4.1-flash,警告就没了。

4. 思考强度:第三方服务商默认是 none
接第三方服务商时,启动信息里有一行:
reasoning effort: none
而 Codex 自带目录里,gpt-6-sol 的默认值是 medium,gpt-6-astra 是 low。写代码建议在 config.toml 里显式写上:
model_reasoning_effort = "high"
重新启动就变成:
reasoning effort: high
可选值有 low / medium / high / xhigh / max / ultra,越往后想得越久、越慢、token 越多。日常写功能 medium 或 high 就够了。

5. 多套配置来回切:profile 的新写法
老教程教的是在 config.toml 里加一段 [profiles.ds],新版直接报错:
Error loading config.toml: --profile `ds` cannot be used while ~/.codex/config.toml contains legacy `profile = "ds"` or `[profiles.ds]` config; move those settings into ~/.codex/ds.config.toml and remove the legacy profile selector/table. See https://developers.openai.com/codex/config-advanced#profiles for more information.
新写法:每个 profile 单独一个文件,放在 ~/.codex/ 下,文件名是 名字.config.toml,里面只写要改的项。比如建一个用 DeepSeek 的:
echo 'model = "deepseek-v4.1-flash"' > ~/.codex/ds.config.toml
codex -p ds
启动信息里就是:
model: deepseek-v4.1-flash
provider: wanapis
记得把 config.toml 里老的 [profiles.xxx] 段删掉,留着的话,-p 用到同名的 profile 就会报上面那个错。
我自己是这么分的:默认 gpt-6-sol 写功能、做 review;codex -p ds 用 DeepSeek 跑测试、查资料、改格式这种不费脑子的活,它出字快。

6. 同一个会话里换模型
不用开新会话,恢复会话时加 -m 就行:
codex resume --last -m gpt-6-sol
非交互模式对应的是:
codex exec resume --last -m gpt-6-sol "接着刚才的,review 一下改动"
上下文、改过的文件、跑过的命令都还在,只会多一行提醒:
warning: This session was recorded with model `deepseek-v4.1-flash` but is resuming with `gpt-6-sol`. Consider switching back to `deepseek-v4.1-flash` as it may affect Codex performance.
这只是提醒,不影响干活。我实测:先用 DeepSeek 跑一轮,让它记住「蓝莓」这个词;再 resume --last -m gpt-6-sol 问它刚才记住了什么,Sol 答出了「蓝莓」。上下文确实带过去了。
我最常用它做交叉审查:一个模型改完代码,换另一个模型带着完整上下文来审。同一个模型审自己写的代码,基本都觉得没问题。有一次 DeepSeek 修完一个价格解析的 bug,切到 Sol 一审,挑出了 "¥1,,299"、"¥12,34" 这种会被悄悄吞掉的输入。

7. 报错速查(0.158 实测原文)
先说一个行为:出错时 Codex 会先自动重试 5 次,屏幕上一直刷:
ERROR: Reconnecting... 1/5
ERROR: Reconnecting... 2/5
ERROR: Reconnecting... 3/5
很多人看到这个就以为是网络问题,去换梯子。其实要等到 5/5 之后,下面那一行才是真正的原因:

| 5/5 之后那一行 | 原因 | 怎么改 |
|---|---|---|
unexpected status 401 Unauthorized: Invalid token |
key 错了,或者没登录上 | 重新 codex login --with-api-key |
unexpected status 503 Service Unavailable: ... 无可用渠道(distributor) |
模型名写错了,或者这个服务商没有这个模型 | 去服务商的模型列表核对名字,一个字母都不能差 |
unexpected status 404 Not Found: Invalid URL (POST /v1/responses/responses) |
base_url 写到了 /v1/responses |
改成只到 /v1 |
unexpected status 404 Not Found,请求地址是 /responses |
base_url 漏了 /v1 |
在末尾补上 /v1 |
base_url 漏 /v1 这一条,不同服务商报的不一样:有的直接说「少了 /v1」,有的会返回一个网页,Codex 那边就只剩一句 stream disconnected before completion,和网络不稳长得一模一样,最难往地址上想。
其它几个常见的:
| 报错 | 原因 | 怎么改 |
|---|---|---|
Error loading config.toml: --profile ... legacy ... [profiles.xx] |
老的 profile 写法 | 见第 5 节 |
Error loading config.toml: wire_api = "chat" is no longer supported |
新版不支持 chat | 改成 wire_api = "responses" |
warning: Model metadata for ... not found |
模型不在 Codex 自带目录里 | 能用;想消掉见第 3 节 |
warning: This session was recorded with model ... |
会话中途换了模型 | 只是提醒,可以忽略 |
Not inside a trusted directory and --skip-git-repo-check was not specified. |
当前目录不是 git 仓库 | 到项目目录里跑,或加 --skip-git-repo-check |
卡在 Reading additional input from stdin... 不动 |
在脚本或 CI 里跑 codex exec,它在等标准输入 |
命令末尾加 < /dev/null |
8. 一份完整的配置
~/.codex/config.toml:
model_catalog_json = "/Users/你的用户名/.codex/models.json"
model_provider = "wanapis"
model = "gpt-6-sol"
model_reasoning_effort = "high"
[model_providers.wanapis]
name = "wanapis"
wire_api = "responses"
requires_openai_auth = true
base_url = "https://api.wanapis.com/v1"
~/.codex/ds.config.toml:
model = "deepseek-v4.1-flash"
日常用法:
codex:默认 gpt-6-solcodex -p ds:用 DeepSeekcodex resume --last -m 模型名:会话中途换模型,上下文不丢
以上基于 Codex CLI 0.158.0,2026-09-28 实测。Codex 更新很快,遇到和本文对不上的地方,先 codex --version 看一下版本。