1. Codex CLI 启动就报 model not found 的真实场景Codex CLI 报model not found或unsupported model本质不是 CLI 崩了而是你请求里带的模型标识服务端在自己的可用列表里找不到匹配项。这个报错经常出现在两个动作之后一是你手动改了~/.codex/config.toml里的model字段二是你把请求端点从官方切到了第三方兼容网关。前者多半是拼写或大小写问题后者多半是模型命名规则没对齐。我先把报错长什么样摆出来方便你对照。完整版通常是这样{ error: { message: The model gpt-5-codex-preview does not exist or you do not have access to it., type: invalid_request_error, code: model_not_found } }精简版可能只有一行{detail: unsupported model}这两种文案指向同一件事请求已经到达服务端认证也过了但服务端在业务层校验模型名时没通过。注意这个阶段区分很重要——如果是网络层问题你看到的是超时、DNS 解析失败、连接被拒而不是这种结构化的 JSON 错误。所以看到model not found排查方向应该锁定在「模型标识」和「端点配置」两条线上而不是去查网络。适合读这篇的人有三类刚接触 Codex CLI、照着旧教程配完就报错的新手把端点切到兼容网关后模型名对不上的开发者以及团队里配置模板更新后部分机器还在用旧模型名的维护者。下面我会从auth.json和模型名映射两条线把定位路径一步步走完每一步都给可复制的配置和验证命令。2. 接入前的准备TaoToken 的 Base URL 与 Key 怎么拿在动手改配置之前先把要用的端点和凭证准备好。Codex CLI 走的是 OpenAI 兼容协议所以你需要三样东西Base URL、API Key、Model ID。这三件套缺一不可而且必须来自同一个服务方混用最容易触发model not found。TaoToken 的接入信息这样取官网入口是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 端点固定为 https://taotoken.net/api 。注意 API 地址后面不加任何查询参数配置里就写这个干净的基础地址。Key 的获取路径是登录后进控制台在 API Keys 页面创建。创建时建议给 Key 起个能识别用途的名字比如codex-cli-local方便以后在团队里区分是哪台机器在用。创建完立刻复制保存页面刷新后通常不再完整显示。模型标识这块要特别小心。兼容网关的模型名不一定和官方原生名一致有的会带厂商前缀有的会做别名映射。所以拿到 Key 之后第一件事不是急着写进config.toml而是先确认这个端点当前支持哪些模型标识。你可以用一条最小的 curl 请求去探具体命令在下一节给。这里有个我踩过的坑很多人把官方文档里的模型名直接抄进第三方网关配置结果网关那边根本没映射这个名字服务端自然返回model not found。正确做法是以你实际接入的端点文档为准而不是以官方原生名为准。准备阶段还要确认一件事你的 Codex CLI 版本。不同版本读取配置的路径和字段名可能有差异先跑一下版本命令确认codex --version如果版本较老部分子命令比如列模型的命令可能不存在那就只能靠文档和 curl 探测来确认模型清单。把版本号记下来后面排查时有用。3. 可复制的 auth.json 与 config.toml 配置片段这一节是核心配置写对了model not found基本就消失一大半。Codex CLI 的凭证和模型配置分两处凭证在auth.json模型和端点在config.toml。两处都要改只改一处会出现认证过了但模型对不上或者模型对了但认证失败的情况。先看auth.json。它的默认路径是~/.codex/auth.json字段结构如下把OPENAI_API_KEY的值换成你在控制台创建的那串 Key{ OPENAI_API_KEY: sk-你的TaoToken密钥, tokens: null, last_refresh: null }注意tokens和last_refresh保持null就行走 API Key 模式不需要填 OAuth 相关的字段。如果你之前登录过官方账号这两个字段可能有值建议清成null避免 CLI 优先走 OAuth 分支导致认证混乱。再看config.toml路径是~/.codex/config.toml。这里要同时声明模型提供方和默认模型model gpt-5-codex model_provider taotoken [model_providers.taotoken] name TaoToken base_url https://taotoken.net/api env_key OPENAI_API_KEY wire_api chat几个字段逐个说明。model是默认模型标识必须和端点支持的名称完全一致大小写敏感。model_provider指向下面定义的提供方块名。base_url就是前面说的干净地址不要带/v1之外的路径也不要带查询参数。env_key告诉 CLI 从哪个环境变量读 Key这里和auth.json里的字段名对应。wire_api指定协议类型兼容端点一般用chat。如果你更习惯用环境变量而不是auth.json也可以在 shell 里导出export OPENAI_API_KEYsk-你的TaoToken密钥但要注意环境变量的优先级和auth.json可能冲突建议二选一别同时配。团队场景下我推荐用auth.json因为路径固定、便于批量检查。配置改完先别急着跑任务用下一节的最小请求验证连通性确认模型标识真的被端点接受再进入正式使用。4. 用最小 prompt 验证连通性与预期输出配置写好后直接跑复杂任务容易把配置问题和任务问题混在一起。正确做法是先用一条最小请求验证「端点 Key 模型」三件套是否对齐。有两种验证方式任选其一。第一种是用 curl 直接打端点绕开 CLI这样能确认问题到底出在配置还是 CLIcurl https://taotoken.net/api/chat/completions \ -H Authorization: Bearer sk-你的TaoToken密钥 \ -H Content-Type: application/json \ -d { model: gpt-5-codex, messages: [{role: user, content: ping}], max_tokens: 16 }预期返回是一个标准的 chat completion 结构choices数组里有内容model字段回显你请求的模型名。如果这里就报model_not_found说明模型标识不对回到上一节换一个端点支持的名称再试。如果这里报 401说明 Key 有问题检查是否复制完整、是否有多余空格。第二种是直接用 CLI 跑一条最小 promptcodex exec 回复一个字好预期输出是模型返回的简短内容同时终端不会出现任何model not found或unsupported model字样。如果 CLI 报错但 curl 正常那问题在 CLI 的配置读取路径上检查config.toml是否被正确加载、model_provider是否拼对。验证通过后建议再跑一次带上下文的稍长请求确认多轮对话也正常codex exec 用一句话说明什么是递归两条都通过说明接入链路完整可用。这时候再去跑你真正的编码任务就不会被配置问题干扰。5. 本篇常见报错对照排查这一节把最容易撞上的几个报错列出来对照着查。每个都给出触发原因和具体动作。401 Unauthorized或invalid_api_key认证没过。先确认auth.json里的 Key 和config.toml里env_key指向的变量一致再确认 Key 没有过期或被删除。如果同时看到 401 和 model not found先解决 401因为认证没过时模型校验根本不会执行。model not found且 curl 也报同样错模型标识不对。去端点文档确认当前支持的模型名逐字替换config.toml里的model字段。注意大小写兼容端点通常要求全小写。unsupported model和上一条同源多半是模型名带了端点不认的前缀或者用了已下线的旧名。换成端点文档里明确列出的名称。local proxy failed或连接被拒这不是模型问题是端点地址写错了。检查base_url是否为https://taotoken.net/api有没有多写路径或参数。reading choices相关解析错误请求发出去了但返回结构不符合预期通常是wire_api字段设错确认设为chat。OAuth相关报错说明 CLI 还在走 OAuth 分支。把auth.json里的tokens和last_refresh清成null强制走 API Key 模式。团队批量排查可以用这条命令扫各机器的模型配置grep -H ^model ~/.codex/config.toml 2/dev/null输出会列出每台机器当前用的模型名方便统一比对更新。6. 把配置固化下来减少反复排查model not found这类报错反复出现根源往往是配置没有固化每次换环境都靠记忆手敲。我的做法是把auth.json和config.toml做成模板新机器直接复制只替换 Key 一个变量。模型名写死在模板里不临时改。另外养成一个习惯切换模型或端点前先用第 4 节的 curl 命令探一下确认模型标识被接受再写进配置。这个前置动作花不了半分钟能省掉后面一堆排查。如果你需要长期跑编码任务或 Agent 流程可以了解下 Coding Plan把端点和额度一起规划好减少中途换配置的次数。模型对话入口适合临时验证某个模型是否可用接入文档则把字段细节讲得更全遇到拿不准的字段名可以去查。把这几处配合起来用配置这块基本不会再成为你的阻塞点。