Skip to content

配置系统 — 练习

练习 1:编写自定义配置文件

创建一个自定义的 config.toml,配置模型、沙箱策略和 MCP 服务器。

参考答案

一个典型的 config.toml 配置示例:

toml
# 基础模型配置
model = "o4-mini"

# 沙箱策略
[sandbox]
enabled = true
level = "auto"  # auto / require / forbid

# MCP 服务器配置
[mcp_servers.filesystem]
command = "npx"
args = ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/project"]

[mcp_servers.database]
url = "https://mcp.example.com/database"
headers = { Authorization = "Bearer ${DB_TOKEN}" }

# 生命周期钩子
[hooks]
# 在每次命令执行前运行
[hooks.pre_exec]
command = "echo 'executing: $CODEX_COMMAND'"

# 技能配置
[skills]
enabled = ["code-review", "test-gen"]

配置加载顺序:

  1. 全局配置 ~/.config/codex/config.toml
  2. 项目配置 .codex/config.toml(当前目录)
  3. Cloud 配置(如已登录)
  4. CLI 覆盖(--model--sandbox 等)

每个配置值通过 ConfigLayerSource 记录来源,便于调试。Diagnostics 系统会在配置冲突或验证失败时给出明确的错误信息和来源追踪。

练习 2:分析 Schema 验证规则

阅读 JSON Schema 定义,分析各配置项的类型约束和验证规则。

参考答案

Codex 的配置验证分为两个阶段:

第一阶段:Schema 类型检查schema 模块)

  • 确保配置值的类型正确(如 model 是字符串、sandbox 是枚举值)
  • 检查必需字段是否存在
  • 验证嵌套结构的完整性

第二阶段:Constraint 业务约束constraint 模块)

  • Constrained<T> 包装配置值,在访问时执行额外的业务规则
  • ConstraintResult 返回约束检查的结果(通过/失败/警告)
  • ConfigRequirements 定义特定场景(如 exec 模式)的特殊配置需求

关键验证规则:

  • model 必须是有效的模型标识符
  • sandbox 枚举值只能是 auto/require/forbid
  • mcp_servers 的每个条目必须包含 command(Stdio)或 url(HTTP)
  • hooks 的处理器配置必须包含有效的命令
  • 路径类配置(cwdworkspace_roots)必须是有效的 AbsolutePathBuf

Diagnostics 系统收集所有验证错误,按严重程度分类(Error/Warning/Info),并附带上来源信息(ConfigLayerSource),帮助用户快速定位配置问题。

练习 3:追踪配置加载流程

从程序启动开始,追踪配置文件的加载、解析、验证和合并流程。

参考答案

配置加载流程(从 CLI 入口到最终 Config):

  1. CLI 解析MultitoolCli::parse() 提取 CliConfigOverrides--model--sandbox 等参数),构造 LoaderOverrides

  2. 确定配置路径

    • 全局:~/.config/codex/config.tomlCONFIG_TOML_FILE 常量)
    • 项目:./.codex/config.toml
    • codex_home 目录确定
  3. TOML 加载loader 模块):

    • 读取全局 config.toml → 解析为 ConfigToml
    • 读取项目 config.toml → 合并到全局配置
    • 加载 permissions_tomlprofile_toml
  4. Cloud 配置cloud_config_bundle 模块):

    • 通过 CloudConfigBundleLoader 从云端拉取配置
    • 应用 cloud_config_layers 中的各层配置
  5. 合并(优先级:CLI > Cloud > 项目 > 全局 > 默认):

    • 逐字段合并,高优先级覆盖低优先级
    • ConfigLayerSource 记录每个值的最终来源
  6. 验证

    • Schema 类型检查
    • Constrained<T> 业务约束检查
    • 生成 Diagnostics(错误/警告)
  7. 输出:最终 Config 对象传递给 Session/App

  8. 热更新fingerprint 检测配置变更时触发 MtimeConfigReloader 重新加载

拓展挑战

  • 分析 fingerprint 模块的配置变更检测机制
  • 研究 CloudConfigBundle 的云端配置同步流程
  • 设计一个新的配置项并添加完整的 Schema 验证
  • 分析 MtimeConfigReloader 的文件监控和自动重载机制