Codex 升级了,新模型还是不在下拉框里,先查 model_catalog_json。如果它指向一份旧的自定义模型目录,升级程序以后仍然会读这份旧名单。
北京时间 10 月 28 日凌晨,Codex 0.165.0 发布,更新说明明确加入了 GPT-6.1 Terra,模型 ID 是 gpt-6.1-terra。我下载官方 0.165.0 二进制做了本地目录检查:默认目录有 12 个模型;指定一份只保留 Terra 的自定义目录以后,解析结果就只剩这 1 个。
自定义目录会替换内置目录,不会自动和新名单合并。 下面按实际操作顺序排查,命令以 macOS / Linux 为例。

1. 先确认你升级的是哪个 Codex
终端里运行:
codex --version
command -v codex
我这台机器就同时有不同版本:终端 PATH 里的 CLI 是 0.153.4,ChatGPT 桌面应用内置的是 0.163.0-alpha.10.2,今天另外下载来验证的才是 0.165.0。
所以,终端更新过,不代表桌面应用内置的引擎也更新了;桌面应用更新过,也不代表终端会优先调用它。先看实际启动的程序,不用急着重新登录。
下面的 debug models --bundled 已在官方 0.165.0 上验证。如果你的版本没有这个子命令,先运行 codex debug models --help 确认,别把"不支持诊断命令"误认成"账号没有模型"。
2. 看当前程序内置的名单
codex debug models --bundled > codex-bundled.json
python3 -I -c 'import json; d=json.load(open("codex-bundled.json")); print("\n".join(m["slug"] for m in d["models"]))'
--bundled 读取这个二进制自带的目录,不是去服务商的接口问你能用哪些模型。
官方 0.165.0 的结果里包含:
gpt-6.1-sol
gpt-6.1-terra
gpt-5.6-terra
0.164.0 的内置名单没有 gpt-6.1-terra。如果你得到的是旧名单,先解决客户端版本和启动路径。

目录里有模型,只能证明客户端带着这个条目。你的订阅有没有开放、API 服务商是否支持、模型调用能不能完成,还要分别确认。
3. 程序里有,界面却没有:检查自定义目录
之前接过 DeepSeek、调整过单个模型的上下文长度、用过配置切换工具的,尤其要查这一项:
model_catalog_json = "/绝对路径/models.json"
macOS / Linux 可以只打印配置文件里这一行,避免把整份配置和 key 一起贴出去:
python3 -I - <<'PY'
import os, pathlib, re
root = pathlib.Path(os.environ.get("CODEX_HOME") or pathlib.Path.home() / ".codex")
p = root / "config.toml"
print("配置文件:", p)
if p.exists():
lines = p.read_text().splitlines()
found = False
for n, line in enumerate(lines, 1):
if re.match(r"^\s*model_catalog_json\s*=", line):
print(f"{n}: {line}")
found = True
if not found:
print("这份文件中未找到 model_catalog_json")
else:
print("这份配置文件不存在")
PY
如果使用其他 profile、项目配置或命令行覆盖,还要检查相应来源;上面只检查 CODEX_HOME 下的主配置文件。
拿到目录的真实路径后,查看里面有哪些模型。例如文件放在 ~/.codex/models.json:
python3 -I - <<'PY'
import json, pathlib
p = pathlib.Path.home() / ".codex" / "models.json"
d = json.loads(p.read_text())
for m in d["models"]:
print(m["slug"])
PY
路径和你的配置不一样,就修改上面 p 那一行。
今天我做的隔离实验没有登录、没有发模型请求,也没改本机配置。同一个 0.165.0 程序,默认解析出 12 个模型,指定只含 Terra 的目录后只解析出 1 个。旧文件没有新模型,更新客户端也不会自动把它补进这个文件。
这个问题此前有公开案例:Codex GitHub issue 51024 的作者为了自定义上下文长度,用了缺少 GPT-6.1 Sol 的旧目录;刷新目录以后,新启动的 app-server 才重新返回 Sol。那是 Sol 的个案,不能据此判断每一个 Terra 不显示都由同样原因引起。
4. 怎么修,又不把原配置弄丢
先备份 config.toml 和它指向的 JSON 文件。
只想恢复内置模型: 在备份以后,暂时注释 model_catalog_json 那一行,退出相关 Codex 进程后重新打开。这个配置在启动时加载,只关掉一个对话再新建,可能仍然沿用旧进程。注释以后,自定义的第三方条目会暂时消失,这是预期结果。
还需要保留 DeepSeek 等条目: 导出新版内置目录到一个新文件,再把确实需要的第三方条目逐个合进去。不要直接把旧文件覆盖掉:
codex debug models --bundled > codex-bundled-new.json
python3 -I -m json.tool codex-bundled-new.json > /dev/null
先对照新旧文件,再让配置指向合并后的绝对路径。JSON 格式通过,只说明它是合法 JSON;还要有 models 数组、非空条目和当前版本要求的字段。
如果之前为了给一个模型放大上下文而复制了整份旧目录,也按这个办法更新,只保留确实需要的改动。
5. 列表里能选,API 报 model not found
这时候要检查服务端支持。
目录中的 slug 要与服务商实际接受的模型 ID 一致;服务商还需要支持 Codex 使用的 Responses 接口、工具调用和流式事件。只是在 JSON 里加了 gpt-6.1-terra,不会让一个尚未提供它的接口获得这个模型。
我之前在 Codex 0.163.0 上验证过 WanAPIs 的 DeepSeek V4.1 Flash 1017 接入(利益相关:WanAPIs 是我做的接口服务),那组配置的成功不代表新的 Terra 或其他服务商也验证过。本文只验证 0.165.0 的目录行为,没有做 Terra 的在线模型调用或性能评测。
最后做一次有验收的小任务:在测试目录里修一个已知错误,再独立跑测试、看文件差异。我以前测 OpenCode 和 Codex 的第三方接入,都遇到过"退出码是 0,但文件根本没改"的情况,单看命令结束不能证明接入完成。
常见问题
升级后 Terra 还是没出现? 先看实际程序版本,再查旧的 model_catalog_json。不要先删登录凭据。
删除 models_cache.json 能不能解决? 如果配置一直指向旧目录,先处理目录来源。本文没有把删除缓存当成通用修复步骤。
模型显示出来就能用吗? 不能。名单、服务商权限、接口兼容和任务结果是不同的检查项。
第三方模型为什么叫"自定义"? 显示名称和实际请求的模型 ID 是两件事。先核对配置及服务商的请求记录,不要凭一个标签判断调用了什么。
资料核对:OpenAI Codex 的 rust-v0.165.0 发布说明;同标签的 codex-rs/models-manager/models.json;core/src/config/mod.rs 对 model_catalog_json 的说明;GitHub issue 51024。以上均在 2026 年 10 月 28 日核对。