先建立正确模型:Codex 会合并多层配置
这篇文章适合在 Codex CLI 或 IDE 扩展中修改模型、审批策略、沙箱、网络、MCP 或其他选项后没有变化的开发者。Codex 并不是只读一个 config.toml。个人默认值位于用户级配置,仓库可以有项目级 .codex/config.toml,命令行还可以临时覆盖;CLI 与 IDE 扩展共享同一套配置层,因此问题常常来自“正在使用哪一层”,而不是某个界面单独坏了。
官方当前给出的优先级从高到低为:命令行 flags 与 --config,项目 .codex/config.toml(从项目根到当前工作目录,越近越高),通过 --profile 选中的 Profile 文件,用户配置,Unix 系统配置,最后是内置默认值。只要上层定义了同一个键,下层修改就不会改变最终结果。先把每层列出来,再逐层缩小范围,通常比反复重装 Codex 更快。
可从 GPTUPCN 首页 进入 Codex 中文实践栏目。GPTUPCN 是第三方中文信息与服务入口,并非 OpenAI 官方;配置键、版本行为与组织策略应以执行当天的 Codex 官方文档和本机帮助信息为准。

第一步:先排除命令行临时覆盖
最高优先级是当前启动命令中的专用 flags 和 -c / --config。例如命令行指定了模型,用户配置中的 model 就不会决定本次会话;脚本、终端别名、任务配置或 IDE 启动参数也可能悄悄带入覆盖值。先用最短的标准命令启动一次,再把日常启动命令逐项加回,能快速确认问题是否来自临时参数。
--config 的值按 TOML 解析,不是 JSON。字符串在不同 shell 中还会经历一层引号处理,所以模型名、路径和数组最容易被错误拆分。官方建议有专用 flag 时优先用 flag;任意键才使用 --config,并按所用 shell 正确引用。不要把 API Key、访问 Token 或真实凭据直接写进命令行历史。
| 现象 | 优先检查 | 验证方法 |
|---|---|---|
| 每次启动模型都回到另一个值 | 启动命令或别名中的 model flag | 用不带额外参数的命令新开会话 |
| 脚本运行与手动运行不同 | 脚本内 --config 和工作目录 | 打印实际命令并比较 cwd |
| 数组、路径或布尔值无效 | TOML 语法与 shell 引号 | 先改成单个简单值验证解析 |
| 只有 IDE 不同 | IDE 启动参数与所在项目目录 | 确认 IDE 打开的仓库根和当前目录 |
第二步:沿项目根到当前目录检查 .codex/config.toml
项目配置的优先级高于 Profile 和用户配置。Codex 会从项目根向当前工作目录查找每一层 .codex/config.toml;多个文件设置同一键时,距离当前目录最近的文件获胜。因此在单体仓库根目录修改后没有效果,常见原因是某个子目录还有一份更近的配置。先确认终端当前目录,再从根目录向下列出所有 .codex/config.toml,只比较发生冲突的键。
项目配置只在受信任项目中加载。项目被标记为不信任时,Codex 会跳过项目范围的 .codex/ 层,包括项目配置、hooks 和 rules,但用户级与系统级配置仍然加载。这个行为是安全边界,不应通过复制未知仓库配置到用户级来绕过。先阅读仓库中的规则与脚本,确认来源可信后再调整信任状态。与仓库指令有关的问题可继续查看AGENTS.md 作用域实践。
- 确认当前工作目录属于预期仓库,而不是相邻的副本或 worktree
- 从仓库根到 cwd 列出所有
.codex/config.toml - 比较重复键,记住越靠近 cwd 的项目文件优先级越高
- 项目未信任时先审查内容,不要盲目复制 hooks、rules 或配置
第三步:检查 Profile 是否使用当前文件形式
Profile 用于保存一组可复用差异,并通过 --profile profile-name 选择。当前官方说明的 Profile 文件位于用户配置目录,文件名形如 profile-name.config.toml;文件内直接写顶层配置键,不要再嵌套到 [profiles.profile-name]。基础用户配置先加载,然后 Profile 覆盖它,但项目配置和命令行仍然可以继续覆盖 Profile。
官方高级配置文档特别说明,自 Codex 0.134.0 起,--profile 不再从主 config.toml 中读取旧式 [profiles.profile-name] 表,顶层 profile = "profile-name" 选择器也不再支持。旧配置在升级后“突然失效”时,应把差异移到独立的 profile-name.config.toml,删除旧表和旧选择器,再用显式 --profile 验证。不要同时保留两套同名设置,否则后续排查会继续混淆。
| 配置层 | 典型位置或入口 | 相对优先级 | 常见问题 |
|---|---|---|---|
| 命令行 | flags、-c、--config | 最高 | 临时参数覆盖全部文件 |
| 项目配置 | 仓库内 .codex/config.toml | 高 | 近层覆盖或项目未信任 |
| Profile | 用户目录下独立 profile 配置文件 | 中 | 仍使用旧式嵌套表 |
| 用户配置 | 用户级 config.toml | 基础 | 误以为能覆盖项目设置 |
| 系统与默认值 | 系统配置、内置默认 | 较低 | 组织或系统环境与个人预期不同 |
第四步:区分“值被覆盖”和“值被组织约束拒绝”
在托管设备或团队环境里,管理员可以通过 requirements.toml 约束允许的配置,例如限制审批策略、沙箱模式或其他安全选项。这类限制不是普通优先级覆盖:个人或项目文件即使语法正确,也不能选择组织禁止的值。出现策略提示、某些选项无法保存,或者同一仓库在个人电脑与公司电脑表现不同时,应向管理员核对强制要求,而不是尝试关闭安全校验。
涉及沙箱与网络时,还要区分“配置已生效但权限本来就受限”和“配置没有加载”。先观察实际允许的文件系统、网络与审批行为,再对照Codex 权限与沙箱实践。认证失败则先转到Codex CLI 登录排查;MCP 服务器不显示或连接超时,再看Codex MCP 连接完整清单,不要把三类问题混在一次配置修改里。
第五步:用最小配置做二分验证
保留原文件备份后,选一个容易观察、无敏感信息的键做测试。先在不带 flags 的新会话里只使用用户配置;确认后加入 Profile;再进入可信项目根;最后切换到发生问题的子目录。每加一层都记录最终行为。一旦结果变化,冲突就在刚加入的层。验证完成后恢复业务配置,不要长期保留为了测试而放宽的审批或沙箱权限。
配置解析正常但会话仍保持旧行为时,关闭旧会话并重新启动 CLI 或 IDE,让新进程重新读取文件。CLI 和 IDE 共享配置层,不代表已经运行的会话会实时重载全部设置。修改 MCP、模型提供方、网络或凭据相关配置后,尤其应新开会话验证,并检查实际执行环境是否使用同一个用户目录和当前工作目录。
| 顺序 | 只启用的层 | 期望结果 | 若失败 |
|---|---|---|---|
| 1 | 用户配置 | 简单键可观察生效 | 检查路径与 TOML 语法 |
| 2 | 用户配置 + Profile | 只有差异键被覆盖 | 检查独立 Profile 文件与名称 |
| 3 | 加入可信项目根配置 | 项目键覆盖 Profile | 检查项目信任与仓库根 |
| 4 | 进入目标子目录 | 最近项目配置获胜 | 查找子目录中的重复键 |
| 5 | 加入命令行参数 | flags / --config 最终获胜 | 检查 shell 引号与脚本别名 |
常见误区:套餐、登录与配置文件不是同一层问题
ChatGPT Plus、ChatGPT Pro 或工作区权益决定账号可以访问哪些 Codex 能力;config.toml 负责客户端和项目行为。修改配置不会把未授权账号变成其他套餐,也不能修复登录到了错误 ChatGPT 账号的问题。先用登录状态确认身份与工作区,再排查配置优先级。第三方充值或订阅服务也不应索要 Codex auth 文件、API Key、ChatGPT 密码、验证码、Token 或 Cookie。
另一个误区是把所有失败都归咎于 model 字段。实际上项目不信任会同时跳过项目配置、hooks 和 rules;组织限制会拒绝某些值;MCP 连接失败还可能来自传输、OAuth、启动命令或超时。只选择一个可观察的结果做最小验证,再进入下一层,能避免同时改动模型、网络、沙箱与 MCP 后无法判断哪一项真正产生影响。
结论:从最高优先级向下查,再用最小配置确认
Codex config.toml 不生效时,按固定顺序检查:命令行覆盖,当前目录附近的项目配置,项目信任,独立 Profile 文件,用户配置,系统配置与组织要求。记住 CLI 与 IDE 共享配置层、最近的项目文件优先、未信任项目会跳过 .codex/ 层、--config 按 TOML 解析。找到冲突层后只修正一个来源,并用新会话复测,比删除全部配置或重装工具更安全也更容易复现。
官方资料与延伸阅读
产品界面、价格、额度和规则可能调整,涉及实时信息时请以官方页面与账号内显示为准。
相关文章
继续阅读同一主题下的文章,可以把购买、支付、套餐、账号和到账问题串成完整流程。
常见问题
Codex 用户级 config.toml 和项目 config.toml 谁优先?+
项目 .codex/config.toml 优先于 Profile 和用户配置;同一项目中,从项目根到当前工作目录依次加载,离当前目录最近的项目配置获胜。命令行 flags 与 --config 仍高于项目配置。
为什么仓库里的 .codex/config.toml 完全不生效?+
先检查项目是否被信任。项目未信任时,Codex 会跳过项目范围的 .codex/ 配置、hooks 与 rules,但用户和系统配置仍会加载。
Codex Profile 还可以写在主 config.toml 的 profiles 表里吗?+
当前高级配置文档说明,Codex 0.134.0 及以后应使用独立的 profile-name.config.toml,并通过 --profile 选择;旧式嵌套 Profile 表与顶层选择器不再支持。
Codex CLI 和 IDE 扩展会读取不同的配置吗?+
官方说明 CLI 与 IDE 扩展共享配置层。表现不同通常要继续比较启动参数、打开的仓库根、当前工作目录、项目信任和是否仍在旧会话中。
改 config.toml 能增加 ChatGPT Plus 或 Pro 的 Codex 权益吗?+
不能。账号套餐与工作区权限决定可用权益,配置文件只控制客户端和项目行为。先确认登录的 ChatGPT 账号与工作区,再排查配置。