第 4 讲:Config 配置系统与 Feature Flags

Codex 源码解析 · 第 4 讲

Codex 源码解析系列 第 4 讲:Config 配置系统与 Feature Flags 基于 OpenAI Codex 源码 · 2026-09-28 💡 本讲一句话: Codex 启动时不是读一个 config.toml,而是把 package、system、cloud、user、profile、项目目录、CLI 参数等十来个来源按优先级叠成一份"有效配置";企业还能用 requirements 层强制 pin 住某些 feature flag。读完这一讲,你就知道任何一行 TOML 最终为什么生效(或没生效)。 一、一次启动,十份配置:分层模型 第 3 讲结尾留了个问题: sandbox_mode 、 approval_policy 这些协议字段是怎么从 TOML 变成枚举的?答案在 codex-config crate(约 20K 行)+ core 的 config 模块里。先看 loader 源码里的"官方说明书"——它把整个分层顺序写成了文档注释: 📄 codex-rs/config/src/loader/mod.rs (第 98-135 行,节选) /// To build up the set of admin-enforced constraints, requirements layers are // 管理端约束(requirements)也分层收集,顺序与配置层一致 /// collected in ascending precedence order, matching config layers... // 低优先级在前、高优先级在后——两条栈共用同一套"后叠的赢"语义 /// - system `/etc/codex/requirements.toml` (Unix) or // 系统级 requirements:管理员放在 /etc 下 /// `%ProgramData%\OpenAI\Codex\requirements.toml` (Windows) // Windows 走 ProgramData 目录 /// - cloud: enterprise-managed cloud config bundle requirements // 企业云配置包里的 requirements 片段 /// - legacy: `/etc/codex/managed_config.toml` (Unix) reinterpreted as // 旧版 managed_config.toml 被重新解释为 requirements——向后兼容 /// Configuration is built up from multiple layers in the following order: // 下面是配置层(config)的完整优先级顺序,从低到高: /// - package: optional default configuration supplied with the Codex package // package:随安装包内置的默认值(defaults.toml),垫底 /// - admin: managed preferences (*) // admin:macOS 托管设备偏好(MDM),企业管控入口 /// - system `/etc/codex/config.toml` (Unix) or ... // system:系统级配置,管理员可全局改默认 /// - cloud enterprise-managed cloud config bundle fragments // cloud:企业云下发的配置片段 /// - user `${CODEX_HOME}/config.toml` // user:用户全局配置——大多数人只写这一层 /// - profile `${CODEX_HOME}/<name>.config.toml`, when selected // profile:选中的命名档案,只需写差异项 /// - cwd `${PWD}/config.toml` (loaded but disabled when the directory is untrusted) /…

阅读全文:Codex 源码解析 第 4 讲