Doramagic 项目包 · 项目说明书

codex 项目

生成时间:2026-05-13 10:17:37 UTC

项目概述

Codex CLI 是 OpenAI 开发的本地编程智能助手,能够在用户的计算机上本地运行。它是一个跨平台的命令行工具,旨在帮助开发者完成各种编码任务,包括代码编写、文件编辑、Git 操作和终端命令执行。 资料来源:[README.md:1]()

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 安装方式

继续阅读本节完整说明和来源证据。

章节 命令系统(Slash Commands)

继续阅读本节完整说明和来源证据。

章节 快捷键系统

继续阅读本节完整说明和来源证据。

什么是 Codex CLI

Codex CLI 是 OpenAI 开发的本地编程智能助手,能够在用户的计算机上本地运行。它是一个跨平台的命令行工具,旨在帮助开发者完成各种编码任务,包括代码编写、文件编辑、Git 操作和终端命令执行。 资料来源:README.md:1

Codex 提供三种使用形态:

使用形态说明访问方式
CLI 工具本地终端界面,运行在用户计算机上运行 codex 命令
IDE 插件集成在 VS Code、Cursor、Windsurf 等编辑器中安装 IDE 插件
桌面应用独立的桌面客户端体验运行 codex app 或访问网页版

对于云端智能助手版本(Codex Web),用户可以访问 chatgpt.com/codex。 资料来源:README.md:8

安装与运行

安装方式

Codex 支持两种主流安装方式:

# 使用 npm 全局安装
npm install -g @openai/codex

# 使用 Homebrew 安装
brew install --cask codex

安装完成后,直接在终端运行 codex 即可启动。 资料来源:README.md:17-28

核心功能模块

命令系统(Slash Commands)

Codex CLI 内置丰富的斜杠命令系统,用户可以通过 / 前缀调用各种功能:

命令类别功能项说明
会话管理/resume, /fork, /clear恢复会话、分叉会话、清除终端
文件操作/mention, /diff提及文件、显示 Git 差异
配置管理/status, /debug-config, /settings查看状态、调试配置、设置选项
开发工具/skills, /hooks, /mcp技能系统、生命周期钩子、MCP 工具
界面定制/theme, /keymap, /pets, /title主题、快捷键、终端宠物、标题栏
执行控制/plan, /goal, /stop计划模式、目标设置、停止后台进程
权限管理/permissions, /elevate-sandbox权限配置、沙盒提升
高级功能/realtime, /collab, /agent实时语音、协作模式、多代理

资料来源:codex-rs/tui/src/slash_command.rs:1-50

快捷键系统

Codex 的文本用户界面(TUI)支持全面的快捷键绑定,主要包括:

运动类快捷键

操作默认绑定说明
motion_left左移光标向左移动
motion_right右移光标向右移动
motion_up上移光标向上移动一行
motion_down下移光标向下移动一行
motion_word_forwardw移动到下一个单词开头
motion_word_backwardb移动到上一个单词开头
motion_word_ende移动到单词结尾
motion_line_start0移动到行首
motion_line_end$移动到行尾

分页器快捷键

操作功能
scroll_up / scroll_down按行滚动
page_up / page_down按页滚动
half_page_up / half_page_down半页滚动
jump_top / jump_bottom跳转到顶部/底部
close / close_transcript关闭分页器/转录

列表和审批快捷键

类别操作
列表move_up, move_down, accept, cancel
审批open_fullscreen, open_thread, approve, deny, decline

资料来源:codex-rs/config/src/tui_keymap.rs:1-50

底部面板与状态栏

Codex 界面底部面板展示各类快捷操作提示,包括:

  • 命令执行相关快捷键
  • Shell 命令快捷键
  • 文件路径操作(粘贴图片、外部编辑器调用)
  • 历史记录搜索
  • 推理模式切换(reasoning_down / reasoning_up
  • 会话转录显示

底部面板采用双列布局展示各项功能,每列之间有 4 个字符的间距。 资料来源:codex-rs/tui/src/bottom_pane/footer.rs:1-50

状态显示系统

状态栏提供实时的工作环境信息:

状态项说明示例值
AppName应用名称Codex
ProjectName项目名称my-project
GitBranch当前 Git 分支feat/awesome-feature
PullRequestNumberPR 编号PR #123
BranchChanges分支变更统计+12 -3
Permissions权限级别Workspace
ContextRemaining剩余上下文Context 0% left
UsedTokens已使用 Token0 used
Model当前模型gpt-5.2-codex
SessionId会话 ID550e8400-e29b-41d4

资料来源:codex-rs/tui/src/status/card.rs:1-50, codex-rs/tui/src/status_surfaces.rs:1-40

配置系统

配置文件结构

Codex 采用 TOML 格式的配置文件,支持多层级配置:

# 全局配置
[profile.default]
model = "gpt-5"
include_apply_patch_tool = true
include_permissions_instructions = true

# TUI 配置
[profile.default.tui]
session_picker_view = "grid"  # 或 "list"

# 实验性功能
[profile.default.features]
codex_git_commit = true
experimental_realtime = false

配置选项说明

配置项类型说明
model_instructions_file路径自定义模型指令文件(不推荐)
compact_prompt字符串历史压缩提示词
commit_attribution字符串提交信息中的共同作者署名
forced_chatgpt_workspace_id字符串限制登录到特定工作区
forced_login_method枚举强制使用特定登录方式

资料来源:codex-rs/config/src/profile_toml.rs:1-40, codex-rs/config/src/config_toml.rs:1-50

主题与语法高亮

Codex 内置多种语法高亮主题,支持自定义代码显示颜色:

可用主题列表

主题名称类型
catppuccin-latte / macchiato / mocha暖色调
coldark-cold / dark冷色调
dark-neon霓虹风格
dracula经典紫红
githubGitHub 风格
gruvbox-dark / light复古风格
inspired-githubGitHub 灵感
1337 (leet)黑客风格
monokai-extended 系列Monokai 扩展
nord北欧极简
one-half-dark / light简约双色

资料来源:codex-rs/tui/src/render/highlight.rs:1-60

目标与预算系统

Codex 内置目标追踪系统,支持长时间运行任务的规划与监控:

graph TD
    A[创建目标] --> B{预算检查}
    B -->|预算充足| C[执行任务]
    B -->|预算耗尽| D[触发预算限制提示]
    C --> E[目标更新]
    E --> F{任务完成?}
    F -->|否| C
    F -->|是| G[目标达成]
    D --> H[暂停或终止]

目标系统包含以下组件:

  • 目标模板:使用 Markdown 模板定义目标展示格式
  • 预算限制:监控任务消耗,必要时触发提醒
  • 目标更新:实时反馈目标进展状态

资料来源:codex-rs/core/src/goals.rs:1-60

环境上下文

Codex 能够感知并注入当前工作环境信息:

<environment_context>
  <environments>
    <environment id="local">
      <cwd>/path/to/project</cwd>
      <shell>bash</shell>
    </environment>
  </environments>
  <current_date>2024-01-15</current_date>
  <timezone>Asia/Shanghai</timezone>
</environment_context>
环境组件说明
cwd当前工作目录
shell终端类型(bash/zsh/powershell)
network网络状态信息
subagents子代理信息(多代理模式下)

资料来源:codex-rs/core/src/context/environment_context.rs:1-50

应用与插件系统

Codex 支持外部应用集成和 MCP(Model Context Protocol)工具:

graph LR
    A[Codex CLI] --> B[应用系统]
    A --> C[MCP 工具]
    B --> D{应用配置}
    D -->|已启用| E[集成到界面]
    D -->|已禁用| F[隐藏]
    C --> G[工具列表]
    G --> H[详细工具说明]

应用元数据结构

字段说明
id应用唯一标识
name显示名称
description应用描述
logo_url图标 URL
is_enabled是否启用
install_url安装链接

资料来源:codex-rs/app-server-protocol/src/protocol/v2/apps.rs:1-50

架构总览

graph TB
    subgraph 前端层
        A[命令行入口] --> B[文本用户界面 TUI]
        B --> C[底部面板]
        B --> D[状态栏]
        B --> E[快捷键系统]
    end
    
    subgraph 配置层
        F[配置文件] --> G[配置解析器]
        G --> H[Profile 管理]
        H --> I[TUI 设置]
        H --> J[功能开关]
    end
    
    subgraph 核心层
        K[会话管理] --> L[目标系统]
        K --> M[上下文管理]
        M --> N[环境感知]
        L --> O[预算控制]
    end
    
    subgraph 集成层
        P[IDE 插件接口] --> Q[应用系统]
        P --> R[MCP 工具]
        Q --> S[应用市场]
    end
    
    A --> K
    G --> K

技术栈概述

组件技术选型说明
CLI 核心Rust高性能本地执行
前端界面自研 TUI终端文本用户界面
配置格式TOML人类可读的配置文件
主题系统TextMate 主题格式兼容主流编辑器语法高亮
序列化JSON SchemaAPI 数据结构定义
类型导出TypeScript前端类型安全

快速入门

  1. 安装 Codexnpm i -g @openai/codexbrew install --cask codex
  2. 启动应用:运行 codex 命令
  3. 查看帮助:输入 /help 或查看底部快捷键提示
  4. 自定义配置:编辑 ~/.codex/config.toml
  5. 切换主题:使用 /theme 命令选择语法高亮主题

相关资源

资料来源:[codex-rs/tui/src/slash_command.rs:1-50]()

系统架构

Codex CLI 是 OpenAI 开发的一个本地代码智能助手,采用 Rust 语言重写实现。该项目遵循模块化架构设计,将功能拆分为多个独立但协作的子系统。

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 2.1 配置层级结构

继续阅读本节完整说明和来源证据。

章节 2.2 配置来源枚举

继续阅读本节完整说明和来源证据。

章节 2.3 配置文件加载流程

继续阅读本节完整说明和来源证据。

1. 概述

Codex CLI 是 OpenAI 开发的一个本地代码智能助手,采用 Rust 语言重写实现。该项目遵循模块化架构设计,将功能拆分为多个独立但协作的子系统。

核心架构包含以下几个主要层次:

层次模块职责
配置层codex-rs/config/管理配置加载、层级合并、需求约束
核心层codex-rs/core/处理环境上下文、目标管理、推理逻辑
交互层codex-rs/tui/终端用户界面、聊天组件、状态显示
文件搜索codex-rs/file-search/模糊文件搜索、模式匹配
沙箱层codex-rs/windows-sandbox-rs/Windows 平台沙箱环境

资料来源:codex-rs/README.md

2. 配置系统架构

2.1 配置层级结构

Codex 采用多层配置架构,不同来源的配置按优先级合并。配置层级从低到高依次为:

graph TD
    A[系统配置<br/>System] --> B[用户配置<br/>User]
    B --> C[项目配置<br/>Project]
    C --> D[MDM 托管配置<br/>MDM Managed]
    D --> E[会话标志配置<br/>Session Flags]
    
    style A fill:#e1f5fe
    style E fill:#fff3e0

ConfigLayerStack 结构维护配置层级列表,其中 layers 向量按从低优先级(基础)到高优先级(覆盖)的顺序排列。资料来源:codex-rs/config/src/state.rs:1-50

2.2 配置来源枚举

pub enum ConfigLayerSource {
    System { file: PathBuf },
    User { file: PathBuf },
    Project { dot_codex_folder: AbsolutePathBuf },
    Mdm { domain: String, key: String },
    SessionFlags,
    LegacyManagedConfigTomlFromFile { file: PathBuf },
    LegacyManagedConfigTomlFromMdm,
}

每种配置来源对应不同的配置文件位置:

来源类型文件位置说明
System系统指定路径系统级配置
User用户目录 ~/.codex/用户个性化配置
Project项目 .codex/ 目录项目特定配置
MDM移动设备管理企业托管配置
SessionFlags命令行参数会话级别覆盖

资料来源:codex-rs/config/src/state.rs:1-30

2.3 配置文件加载流程

配置加载器 (ConfigLoader) 负责协调多层级配置的读取和合并:

sequenceDiagram
    participant User as 用户/CLI
    participant Loader as ConfigLoader
    participant FileSystem as 文件系统
    participant Merger as 配置合并器
    
    User->>Loader: 启动 Codex
    Loader->>FileSystem: 读取系统配置
    FileSystem-->>Loader: system.toml
    Loader->>FileSystem: 读取用户配置
    FileSystem-->>Loader: config.toml
    Loader->>FileSystem: 读取项目配置
    FileSystem-->>Loader: .codex/config.toml
    Loader->>Merger: 合并配置层级
    Merger-->>User: 最终配置

配置加载过程中的关键步骤包括:

  1. 解析 TOML 格式的配置文件
  2. 清理无效的项目配置键
  3. 解析相对路径为绝对路径
  4. 合并 Git worktree 的钩子配置

资料来源:codex-rs/config/src/loader/mod.rs:1-80

2.4 Profile 配置结构

Profile 机制允许用户定义命名配置集,每个 Profile 可包含独立的 TUI 设置、窗口配置和功能开关:

pub struct ProfileTui {
    /// Resume/Fork 会话选择器的首选布局
    pub session_picker_view: Option<SessionPickerViewMode>,
}

pub struct FeaturesToml {
    // 注入已知功能键到 schema
}

Profile 作用域的配置包括:

  • TUI 布局偏好设置
  • 窗口配置
  • 功能特性开关

资料来源:codex-rs/config/src/profile_toml.rs:1-50

2.5 配置诊断系统

当配置解析失败时,诊断系统提供详细的错误报告:

pub fn format_config_error(error: &ConfigError, contents: &str) -> String {
    // 输出格式: path:line:column: message
    // 包含错误位置的高亮行
}

错误报告包含文件路径、行号、列号和错误消息,并从 TOML 解析的 span 信息中提取错误位置。资料来源:codex-rs/config/src/diagnostics.rs:1-40

3. 环境上下文系统

3.1 上下文数据模型

环境上下文 (EnvironmentContext) 聚合了 Codex 运行所需的全部环境信息:

graph TD
    EC[EnvironmentContext] --> Env[Environments]
    EC --> Date[CurrentDate]
    EC --> TZ[Timezone]
    EC --> Net[Network]
    EC --> Subs[Subagents]
    
    Env --> Single[Single Environment]
    Env --> Multiple[Multiple Environments]
    Env --> None[None]

关键字段:

  • environments: 工作目录和 shell 信息
  • current_date: 当前日期
  • timezone: 时区设置
  • network: 网络连接状态
  • subagents: 子代理信息

资料来源:codex-rs/core/src/context/environment_context.rs:1-60

3.2 上下文 XML 渲染

环境上下文以 XML 格式渲染,供模型理解当前执行环境:

<environment_context>
  <environment id="main">
    <cwd>/path/to/project</cwd>
    <shell>bash</shell>
  </environment>
  <current_date>2024-01-15</current_date>
  <timezone>Asia/Shanghai</timezone>
</environment_context>

资料来源:codex-rs/core/src/context/environment_context.rs:60-100

4. 目标管理系统

4.1 目标生命周期

Codex 的目标 (Goal) 系统管理长时间运行的任务:

stateDiagram-v2
    [*] --> NewGoal: 设置目标
    NewGoal --> Active: 开始执行
    Active --> Paused: 中断
    Active --> Completed: 完成
    Active --> Failed: 失败
    Paused --> Active: 恢复
    Failed --> [*]
    Completed --> [*]

ExternalGoalPreviousStatus 枚举表示外部目标变更前的状态:

  • NewGoal: 新创建的逻辑目标
  • Existing: 更新的现有目标

资料来源:codex-rs/core/src/goals.rs:1-80

4.2 预算限制与节流

目标系统内置预算限制提示模板:

资料来源:codex-rs/core/src/goals.rs:80-120

5. TUI 终端用户界面

5.1 组件架构

TUI 模块采用组件化设计:

tui/src/
├── chatwidget.rs          # 聊天消息组件
├── markdown_render_tests.rs # Markdown 渲染测试
└── bottom_pane/
    ├── footer.rs          # 底部状态栏
    ├── status_surface_preview.rs # 状态预览
    └── approval_overlay.rs # 审批覆盖层

5.2 风险等级映射

聊天组件 (chatwidget) 处理来自应用服务器协议的风险等级映射:

graph LR
    A[GuardianRiskLevel] --> B[AppServer]
    B --> C[chatwidget]
    C --> D[Protocol]
    
    D --> Low
    D --> Medium
    D --> High
    D --> Critical
应用服务器等级协议等级
LowLow
MediumMedium
HighHigh
CriticalCritical

资料来源:codex-rs/tui/src/chatwidget.rs:1-50

5.3 状态栏配置

底部面板显示快捷命令和状态信息:

类别快捷键
常规命令/
Shell 命令!
队列消息Tab
退出Ctrl+C
推理导航Ctrl+↑/↓

自定义快捷键可通过 /keymap 命令配置。资料来源:codex-rs/tui/src/bottom_pane/footer.rs:1-50

5.4 状态预览项

状态表面预览显示会话的各类状态信息:

预览项示例值
AppNameCodex
GitBranchfeat/awesome-feature
PullRequestNumberPR #123
BranchChanges+12 -3
ContextRemainingContext 0% left
UsedTokens0 used
Modelgpt-5.2-codex
FastModeFast on

资料来源:codex-rs/tui/src/bottom_pane/status_surface_preview.rs:1-50

5.5 审批覆盖层

文件变更审批系统提供多种决策选项:

选项快捷键效果
Yes, proceedapprove接受变更
Yes, don't ask againapprove_for_session本次会话接受
No, tell Codexreject拒绝并说明

资料来源:codex-rs/tui/src/bottom_pane/approval_overlay.rs:1-60

6. 文件搜索模块

6.1 搜索架构

codex_file_search 模块提供快速的模糊文件搜索能力:

graph TD
    Input[搜索模式] --> Traverse[目录遍历]
    Traverse --> Ignore[应用 .gitignore]
    Ignore --> Files[文件列表]
    Files --> Fuzzy[模糊匹配]
    Fuzzy --> Results[结果排序]

核心依赖:

  • ignore: 目录遍历(ripgrep 使用的 crate)
  • nucleo-matcher: 快速模糊匹配

资料来源:codex-rs/file-search/README.md

7. Slash 命令系统

7.1 命令分类

Slash 命令通过 / 触发,提供丰富的交互功能:

类别命令功能
会话管理/resume, /fork, /clear恢复、分叉、清空会话
文件操作/diff, /mentionGit 差异、提及文件
模型控制/model, /personality选择模型、交流风格
权限管理/permissions, /elevate-sandbox权限设置
实验功能/experimental, /realtime开关实验特性

支持内联参数的命令:

  • /review, /rename, /plan, /goal
  • /ide, /keymap, /mcp, /pets, /side
  • /resume, /sandbox-read-root

资料来源:codex-rs/tui/src/slash_command.rs:1-100

8. 安装与部署

8.1 安装方式

方式命令
npmnpm i -g @openai/codex
Homebrewbrew install --cask codex
GitHub Releases下载平台特定二进制

8.2 目录结构

$CODEX_HOME/
├── config.toml          # 用户配置
├── sessions/            # 会话数据
├── log/                 # 日志文件
└── hooks/               # 生命周期钩子
  • sqlite_home: SQLite 数据库路径,默认 $CODEX_HOME
  • log_dir: 日志目录,默认 $CODEX_HOME/log

资料来源:codex-rs/config/src/config_toml.rs:1-50

9. 模块依赖关系

graph TD
    App[codex-rs 主程序]
    Config[config 模块]
    Core[core 模块]
    TUI[TUI 模块]
    FileSearch[file-search 模块]
    Sandbox[windows-sandbox-rs]
    
    App --> Config
    App --> Core
    App --> TUI
    Core --> FileSearch
    Core --> Sandbox
    TUI --> Config
    TUI --> Core

各模块职责清晰分离,通过公共接口交互,便于维护和测试。

资料来源:[codex-rs/README.md](https://github.com/openai/codex/blob/main/codex-rs/README.md)

协议层详解

Codex 项目的协议层是连接前端界面(TUI)、后端服务(App Server)和核心引擎(Core)之间的通信桥梁。该层定义了数据类型转换、API 协议版本管理、以及跨模块通信的数据结构规范。

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 2.1 模块组织结构

继续阅读本节完整说明和来源证据。

章节 2.2 协议层次关系图

继续阅读本节完整说明和来源证据。

章节 3.1 风险等级定义

继续阅读本节完整说明和来源证据。

1. 概述

Codex 项目的协议层是连接前端界面(TUI)、后端服务(App Server)和核心引擎(Core)之间的通信桥梁。该层定义了数据类型转换、API 协议版本管理、以及跨模块通信的数据结构规范。

协议层主要包含两个核心命名空间:

  • codex_app_server_protocol:应用服务器协议定义
  • codex_protocol:Codex 核心协议定义

2. 协议架构

2.1 模块组织结构

codex-rs/
├── app-server-protocol/src/protocol/
│   ├── mod.rs           # 协议主入口
│   ├── v1.rs           # 版本 1 协议定义
│   └── v2/             # 版本 2 协议定义
│       ├── mod.rs
│       ├── apps.rs     # 应用相关协议
│       └── ...

2.2 协议层次关系图

graph TD
    subgraph "前端层 TUI"
        A[ChatWidget]
        B[ApprovalOverlay]
        C[StatusSurface]
    end
    
    subgraph "协议转换层"
        D[codex_app_server_protocol]
        E[codex_protocol]
    end
    
    subgraph "核心层 Core"
        F[Guardian]
        G[Approvals]
    end
    
    A --> D
    B --> D
    C --> D
    
    D --> E
    E --> F
    E --> G
    
    style D fill:#f9f,color:#000
    style E fill:#9f9,color:#000

3. 风险等级协议

3.1 风险等级定义

Codex 使用统一的四层风险等级体系,用于评估操作的安全性和敏感度。

风险等级说明适用场景
Low低风险操作读取文件、查看状态
Medium中等风险修改配置、创建文件
High高风险执行命令、修改系统
Critical极高风险删除文件、权限变更

资料来源codex-rs/tui/src/chatwidget.rs:1-20

3.2 协议间转换

风险等级在 codex_app_server_protocolcodex_protocol 之间存在一一映射关系:

(|risk_level| match risk_level {
    codex_app_server_protocol::GuardianRiskLevel::Low => {
        codex_protocol::approvals::GuardianRiskLevel::Low
    }
    codex_app_server_protocol::GuardianRiskLevel::Medium => {
        codex_protocol::approvals::GuardianRiskLevel::Medium
    }
    codex_app_server_protocol::GuardianRiskLevel::High => {
        codex_protocol::approvals::GuardianRiskLevel::High
    }
    codex_app_server_protocol::GuardianRiskLevel::Critical => {
        codex_protocol::approvals::GuardianRiskLevel::Critical
    }
})

资料来源codex-rs/tui/src/chatwidget.rs:1-20

4. 用户授权协议

4.1 授权等级定义

授权等级说明权限范围
Unknown未知状态未确定授权级别
Low低授权基础操作权限
Medium中等授权常规开发操作
High高授权敏感操作权限

4.2 授权协议转换

用户授权信息在协议间进行转换:

user_authorization: review.user_authorization.map(|user_authorization| {
    match user_authorization {
        codex_app_server_protocol::GuardianUserAuthorization::Unknown => {
            codex_protocol::approvals::GuardianUserAuthorization::Unknown
        }
        codex_app_server_protocol::GuardianUserAuthorization::Low => {
            codex_protocol::approvals::GuardianUserAuthorization::Low
        }
        codex_app_server_protocol::GuardianUserAuthorization::Medium => {
            codex_protocol::approvals::GuardianUserAuthorization::Medium
        }
        codex_app_server_protocol::GuardianUserAuthorization::High => {
            codex_protocol::approvals::GuardianUserAuthorization::High
        }
    }
})

资料来源codex-rs/tui/src/chatwidget.rs:1-30

5. 应用协议(V2)

5.1 应用信息结构

应用元数据结构定义如下:

pub struct AppInfo {
    pub id: String,
    pub name: String,
    pub description: Option<String>,
    pub logo_url: Option<String>,
    pub logo_url_dark: Option<String>,
    pub distribution_channel: Option<String>,
    pub branding: Option<AppBranding>,
    pub app_metadata: Option<AppMetadata>,
    pub labels: Option<HashMap<String, String>>,
    pub install_url: Option<String>,
    #[serde(default)]
    pub is_accessible: bool,
    #[serde(default = "default_enabled")]
    pub is_enabled: bool,
    #[serde(default)]
    pub plugin_display_names: Vec<String>,
}

资料来源codex-rs/app-server-protocol/src/protocol/v2/apps.rs:50-70

5.2 应用元数据

应用元数据支持以下字段:

字段类型说明
screenshotsVec<AppScreenshot>应用截图列表
developerString开发者信息
versionString版本号
version_idString版本标识
version_notesString版本说明
first_party_typeString第一方类型
first_party_requires_installbool是否需要安装
show_in_composer_when_unlinkedbool未链接时显示

资料来源codex-rs/app-server-protocol/src/protocol/v2/apps.rs:30-50

6. 配置层协议

6.1 配置层级来源

配置层定义在 ConfigLayerSource 枚举中,支持多种配置来源:

来源类型说明优先级
MdmMDM 托管偏好最高
System系统级配置
User用户级配置
Project项目级 .codex/config.toml
SessionFlags会话命令行参数特殊
pub enum ConfigLayerSource {
    Mdm { domain: String, key: String },
    System { file: PathBuf },
    User { file: PathBuf },
    Project { dot_codex_folder: AbsolutePathBuf },
    SessionFlags,
    LegacyManagedConfigTomlFromFile { file: PathBuf },
    LegacyManagedConfigTomlFromMdm,
}

资料来源codex-rs/config/src/state.rs:50-80

6.2 配置需求协议

配置需求通过 RequirementSource 定义来源:

pub enum RequirementSource {
    Unknown,
    MdmManagedPreferences { domain: String, key: String },
    CloudRequirements,
    SystemRequirementsToml { file: PathBuf },
    LegacyManagedConfigTomlFromFile { file: PathBuf },
    LegacyManagedConfigTomlFromMdm,
}

资料来源codex-rs/config/src/config_requirements.rs:1-30

6.3 配置层堆栈

graph LR
    A[System Config] --> B[User Config]
    B --> C[Project Config]
    C --> D[Session Flags]
    D --> E[MDM Config]
    
    style A fill:#eee,color:#000
    style E fill:#f96,color:#000

配置层堆栈顺序定义:

pub enum ConfigLayerStackOrdering {
    LowestPrecedenceFirst,
    HighestPrecedenceFirst,
}

pub struct ConfigLayerStack {
    /// 从最低优先级(基础)到最高优先级(顶层)
    layers: Vec<ConfigLayerEntry>,
    /// 用户配置层索引
    user_layer_index: Option<usize>,
}

资料来源codex-rs/config/src/state.rs:80-100

7. 审批协议

7.1 审批决策来源

自动审查决策来源定义:

enum AutoReviewDecisionSource {
    Agent,
}

7.2 审批选项配置

审批覆盖层支持的选项:

选项标签决策类型说明
Yes, proceedAccept接受变更
Yes, and don't ask again for these filesAcceptForSession本会话内接受
No, and tell Codex what to do differentlyReject拒绝并反馈

资料来源codex-rs/tui/src/bottom_pane/approval_overlay.rs:50-80

7.3 文件系统路径协议

特殊路径说明
:root项目根目录
:minimal最小访问范围
:project_roots所有项目根目录
:tmpdir系统临时目录
/tmp传统临时目录路径

资料来源codex-rs/tui/src/bottom_pane/approval_overlay.rs:20-50

8. 状态显示协议

8.1 状态行项目

状态行支持显示以下信息项目:

项目示例值说明
AppNameCodex应用名称
ProjectNamemy-project项目名称
GitBranchfeat/awesome-featureGit 分支
PullRequestNumberPR #123PR 编号
BranchChanges+12 -3分支变更统计
ContextRemainingContext 0% left上下文剩余
ContextUsedContext 0% used上下文使用量
Modelgpt-5.2-codex当前模型
ModelWithReasoninggpt-5.2-codex medium模型及推理级别

资料来源codex-rs/tui/src/bottom_pane/status_surface_preview.rs:20-50

8.2 状态项目分类

状态项目按语义分类:

分类对应项目语法高亮作用域
Model模型名称entity.name.type
Path路径信息string
Branch分支信息entity.name.function
State运行状态keyword.control
Usage使用量统计constant.numeric
Limit限制信息constant.language
Mode模式切换storage.modifier
Thread线程标题markup.heading
Progress任务进度markup.inserted

资料来源codex-rs/tui/src/bottom_pane/status_line_style.rs:30-60

9. 序列化与类型安全

9.1 JSON Schema 生成

协议类型通过 schemars 库自动生成 JSON Schema:

#[derive(JsonSchema)]
#[schemars(schema_with = "crate::schema::features_schema")]
pub features: Option<FeaturesToml>,

9.2 TypeScript 类型导出

使用 serdets 属性导出 TypeScript 类型:

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema, TS)]
#[serde(rename_all = "camelCase")]
#[ts(export_to = "v2/")]
pub struct AppInfo { ... }

10. 总结

Codex 的协议层设计遵循以下原则:

  1. 类型安全:使用 Rust 强类型系统确保协议转换的正确性
  2. 版本管理:支持 V1 和 V2 协议版本共存
  3. 分层设计:清晰的协议层次结构,便于维护和扩展
  4. 双向转换:支持 codex_app_server_protocolcodex_protocol 之间的无缝转换
  5. 可扩展性:通过可选字段和枚举变体支持功能扩展

来源:https://github.com/openai/codex / 项目说明书

核心Agent模块

Codex CLI 的核心Agent模块是整个系统的中枢组件,负责协调用户交互、工具调用、上下文管理和会话生命周期。该模块采用 Rust 实现,运行于本地计算机,提供零依赖的安装体验。

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 核心组件关系

继续阅读本节完整说明和来源证据。

章节 核心模块职责

继续阅读本节完整说明和来源证据。

章节 主控制流程

继续阅读本节完整说明和来源证据。

概述

Codex CLI 的核心Agent模块是整个系统的中枢组件,负责协调用户交互、工具调用、上下文管理和会话生命周期。该模块采用 Rust 实现,运行于本地计算机,提供零依赖的安装体验。

资料来源:codex-rs/README.md:1-15

模块架构

核心组件关系

graph TD
    subgraph "核心层"
        A[Agent] --> B[Client]
        A --> C[Session]
        A --> D[Tools]
    end
    
    subgraph "上下文层"
        C --> E[EnvironmentContext]
        C --> F[Goals]
    end
    
    subgraph "配置层"
        G[Config] --> C
        G --> A
    end
    
    subgraph "UI层"
        H[TUI] --> A
        H --> C
    end

核心模块职责

模块职责主要文件
Agent主控制逻辑、任务调度、决策core/src/agent/mod.rs
Client与后端API通信、协议处理core/src/client.rs
Session会话状态管理、历史记录core/src/session/mod.rs
Tools工具注册、调用、结果处理core/src/tools/mod.rs
Goals目标跟踪、预算管理core/src/goals.rs

资料来源:codex-rs/core/src/lib.rs

Agent主模块

主控制流程

Agent模块作为协调者,处理用户输入并生成响应:

graph LR
    A[用户输入] --> B[解析命令]
    B --> C{命令类型}
    C -->|工具调用| D[工具选择]
    C -->|聊天| E[模型推理]
    D --> F[执行工具]
    E --> G[生成响应]
    F --> H[结果处理]
    H --> G
    G --> I[渲染输出]

任务执行状态

Agent维护任务执行的状态机:

stateDiagram-v2
    [*] --> Idle: 初始化
    Idle --> Running: 接收任务
    Running --> WaitingApproval: 需要确认
    WaitingApproval --> Running: 批准
    WaitingApproval --> Cancelled: 拒绝
    Running --> Paused: 暂停/恢复
    Paused --> Running: 恢复
    Running --> Completed: 任务完成
    Completed --> Idle: [*]
    Cancelled --> Idle: [*]

资料来源:codex-rs/core/src/agent/mod.rs

Client客户端模块

API通信机制

Client模块负责与OpenAI后端服务通信,采用Protocol Buffers定义的协议:

// 风险级别映射
GuardianRiskLevel::Low
GuardianRiskLevel::Medium  
GuardianRiskLevel::High
GuardianRiskLevel::Critical

资料来源:codex-rs/tui/src/chatwidget.rs:1-30

请求/响应处理

Client支持多种API交互模式:

模式描述用途
标准对话同步请求-响应日常交互
流式响应Server-Sent Events实时输出
工具调用Tool Use协议代码执行

Session会话管理

会话生命周期

会话模块管理Codex的完整交互周期:

graph TD
    A[创建会话] --> B[加载配置]
    B --> C[初始化环境]
    C --> D[处理消息]
    D --> E{任务状态}
    E -->|完成| F[保存会话]
    E -->|暂停| G[保存草稿]
    E -->|失败| H[记录错误]
    F --> I[会话结束]
    G --> J[可恢复]
    H --> I

配置层级

会话使用分层配置系统,按优先级从低到高:

层级来源覆盖方式
系统配置/etc/codex/config.toml不可覆盖
用户配置~/.config/codex/config.toml可覆盖
项目配置.codex/config.toml可覆盖
会话标志命令行参数最高优先级

资料来源:codex-rs/config/src/state.rs:1-50

配置配置文件结构

[profile.default]
model = "gpt-4o"
include_apply_patch_tool = true
include_permissions_instructions = true
include_environment_context = true

[profile.default.tui]
session_picker_view = "grid"

[profile.default.features]
experimental_unified_exec = true

资料来源:codex-rs/config/src/profile_toml.rs:1-80

Tools工具系统

工具注册与调用

Tools模块提供Codex的扩展能力:

工具类别功能配置项
文件操作读取、写入、编辑文件include_apply_patch_tool
权限管理访问控制、审批流程include_permissions_instructions
应用集成Apps指令include_apps_instructions
协作模式多人协作include_collaboration_mode_instructions

资料来源:codex-rs/config/src/profile_toml.rs:50-70

工具执行流程

sequenceDiagram
    participant U as 用户
    participant A as Agent
    participant T as Tools
    participant S as 沙箱
    
    U->>A: 发送请求
    A->>T: 选择工具
    T->>S: 执行命令
    S-->>T: 返回结果
    T-->>A: 工具响应
    A-->>U: 生成回复

Goals目标系统

目标跟踪机制

Goals模块管理长时间运行任务的进度和预算:

// 预算限制提示模板
static BUDGET_LIMIT_PROMPT_TEMPLATE: LazyLock<Template> = 
    LazyLock::new(|| {
        Template::parse(include_str!("../templates/goals/budget_limit.md"))
    });

资料来源:codex-rs/core/src/goals.rs:1-50

外部目标变更

目标系统支持外部修改:

graph TD
    A[外部目标更新] --> B{目标状态}
    B -->|新目标| C[创建Goal]
    B -->|已有目标| D[更新Goal]
    C --> E[ExternalGoalPreviousStatus::NewGoal]
    D --> F[ExternalGoalPreviousStatus::Existing]

资料来源:codex-rs/core/src/goals.rs:80-120

预算限制级别

级别描述触发条件
BudgetLimitSteering::Allowed允许超出任务重要
BudgetLimitSteering::Suppressed抑制超出接近限制

环境上下文

上下文组件

EnvironmentContext提供Agent运行时的环境信息:

<environment>
  <cwd>/path/to/project</cwd>
  <shell>bash</shell>
</environment>
<subagents>
  <!-- 子代理信息 -->
</subagents>
<network enabled="true" />

资料来源:codex-rs/core/src/context/environment_context.rs:1-60

上下文渲染

上下文信息以结构化XML格式注入到模型提示中:

组件内容用途
cwd当前工作目录路径解析
shell使用的shell命令生成
environments多环境配置复杂项目
current_date当前日期时间时间相关任务
subagents子代理状态多任务协调

交互命令

Slash Commands

Codex支持丰富的斜杠命令系统:

命令功能状态
/resume恢复保存的会话活跃
/fork派生当前会话活跃
/model选择模型和推理级别活跃
/ide包含IDE上下文活跃
/plan切换到计划模式活跃
/goal设置长时间任务目标活跃
/mcp列出配置的MCP工具活跃
/memory内存管理废弃
/agent切换活动代理线程活跃

资料来源:codex-rs/tui/src/slash_command.rs:1-100

状态显示

状态栏项目

TUI显示关键状态信息:

项目格式说明
GitBranchfeat/awesome-feature当前分支
BranchChanges+12 -3分支变更统计
ContextUsedContext 0% used上下文使用率
UsedTokens0 used已使用Token数
ModelWithReasoninggpt-5.2-codex medium模型+推理级别

资料来源:codex-rs/tui/src/bottom_pane/status_surface_preview.rs:1-50

状态线样式

状态栏采用语义化颜色方案:

类别颜色样式作用域
Model/State青色模型名称、运行状态
Path/Usage绿色文件路径、Token使用
Branch/Limit洋红分支名、限制信息
Mode/Thread蓝绿模式、线程信息

资料来源:codex-rs/tui/src/bottom_pane/status_line_style.rs:1-40

审批系统

风险级别

Codex实现四级风险评估:

级别GuardianRiskLevel用户授权
低风险Low无需确认
中风险Medium需要确认
高风险High明确批准
严重风险Critical拒绝执行

审批决策

决策选项快捷键效果
Yes, proceed批准立即执行
Yes, and don't ask againSession级别当前会话记住
No, and tell Codex拒绝说明原因

资料来源:codex-rs/tui/src/bottom_pane/approval_overlay.rs:1-80

MCP支持

MCP客户端

Codex作为MCP客户端连接外部工具服务器:

graph LR
    A[Codex CLI] -->|MCP协议| B[MCP Server 1]
    A -->|MCP协议| C[MCP Server 2]
    B -->|工具| A
    C -->|工具| A

MCP服务器模式

Codex可作为MCP服务器运行,允许其他MCP客户端调用:

codex mcp-server

配置系统

配置文件位置

位置说明优先级
~/.config/codex/config.toml用户级配置
.codex/config.toml项目级配置
/etc/codex/config.toml系统级配置

Hooks配置

Hooks声明文件位置由配置系统决定:

pub fn hooks_config_folder(&self) -> Option<AbsolutePathBuf> {
    self.hooks_config_folder_override
        .clone()
        .or_else(|| self.config_folder())
}

资料来源:codex-rs/config/src/state.rs:80-100

总结

核心Agent模块是Codex CLI的架构中枢,通过以下设计实现高效代码辅助:

  1. 模块化架构 - Agent、Client、Session、Tools解耦设计
  2. 分层配置 - 支持系统、用户、项目多级配置覆盖
  3. 协议驱动 - 使用Protocol Buffers进行类型安全通信
  4. 工具生态 - 通过MCP扩展工具能力
  5. 安全保障 - 四级风险评估和审批机制
  6. 状态可视化 - 丰富的TUI状态显示

资料来源:[codex-rs/README.md:1-15]()

执行系统

执行系统(Execution System)是 Codex CLI 的核心子系统,负责在沙箱环境中安全地执行用户请求的操作,包括文件读写、终端命令运行、Git 操作等。该系统通过多层配置体系管理权限范围,并提供用户审批机制以确保操作的安全性与可控性。

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 配置层级体系

继续阅读本节完整说明和来源证据。

章节 权限配置模型

继续阅读本节完整说明和来源证据。

章节 工具配置

继续阅读本节完整说明和来源证据。

概述

执行系统(Execution System)是 Codex CLI 的核心子系统,负责在沙箱环境中安全地执行用户请求的操作,包括文件读写、终端命令运行、Git 操作等。该系统通过多层配置体系管理权限范围,并提供用户审批机制以确保操作的安全性与可控性。

核心架构

配置层级体系

Codex CLI 的执行系统采用分层配置架构,不同层级的配置具有不同的优先级:

层级名称优先级配置来源
系统级System最低/etc/codex/config.toml
用户级User~/.config/codex/config.toml
项目级Project.codex/config.toml
会话级SessionFlags最高命令行参数

资料来源:codex-rs/config/src/state.rs:1-50

graph TD
    A[System Layer<br/>/etc/codex/config.toml] --> B[User Layer<br/>~/.config/codex/config.toml]
    B --> C[Project Layer<br/>.codex/config.toml]
    C --> D[Session Flags<br/>Command Line Args]
    D --> E[Effective Config<br/>最终生效配置]

配置层级的加载顺序决定了最终生效的配置:后加载的层级会覆盖先前的同名配置项。

权限配置模型

执行系统通过 include_permissions_instructions 配置项控制是否向模型注入权限指令:

# 配置示例
include_permissions_instructions = true

资料来源:codex-rs/config/src/config_toml.rs:1-30

工具配置

执行系统支持的工具通过 [tools] 配置块进行管理:

配置项说明
tools_view_image是否启用图像查看工具
include_apply_patch_tool是否启用 patch 应用工具
experimental_use_unified_exec_tool启用统一执行工具(实验性)
experimental_use_freeform_apply_patch启用自由格式 patch(实验性)

审批系统

审批决策类型

Codex CLI 的执行系统提供细粒度的审批决策机制:

决策类型说明
Accept接受并执行当前操作
AcceptForSession接受并在本会话内跳过后续同类审批
Reject拒绝并要求用户重新说明意图

资料来源:codex-rs/tui/src/bottom_pane/approval_overlay.rs:1-40

文件系统路径约束

执行系统支持对文件系统访问范围进行约束:

路径类型说明示例
:root项目根目录/home/user/project
:minimal最小访问范围-
:project_roots项目根目录列表-
:tmpdir系统临时目录/tmp
/tmp明确指定的临时路径/tmp/codex

审批界面快捷键

快捷键操作功能
批准执行当前操作
批准并记住在当前会话内自动批准同类操作
拒绝拒绝并要求重新说明

命令行界面集成

Slash 命令

执行系统与 TUI 的 slash 命令系统深度集成,以下命令与执行直接相关:

命令说明
/resume恢复已保存的对话会话
/clear清除终端并开始新对话
/fork分叉当前对话
/diff显示 Git 差异(包括未跟踪文件)
/permissions配置 Codex 的操作权限范围
/elevate-sandbox设置提升权限的沙箱环境
/sandbox-read-root允许沙箱读取指定目录

资料来源:codex-rs/tui/src/slash_command.rs:1-60

支持内联参数的命令

以下命令支持在命令后直接附加参数:

  • /review - 代码审查
  • /rename - 重命名
  • /plan - 计划模式
  • /goal - 设置目标
  • /ide - IDE 上下文
  • /keymap - 快捷键映射
  • /mcp - MCP 工具管理
  • /pets - 终端宠物

配置要求系统

配置约束来源

Codex CLI 的配置可能受到多种来源的约束:

约束来源说明
Unknown未指定来源
MdmManagedPreferencesMDM 托管偏好设置
CloudRequirements云端配置要求
SystemRequirementsToml系统级 requirements.toml
LegacyManagedConfigTomlFromFile旧版托管配置文件
LegacyManagedConfigTomlFromMdmMDM 旧版托管配置

约束数据结构

pub struct ConstrainedWithSource<T> {
    pub value: Constrained<T>,
    pub source: Option<RequirementSource>,
}

该结构确保每个受限配置都能追溯其来源,便于调试和审计。

环境上下文

执行系统在构建提示时会注入环境上下文信息:

<environment>
  <shell>bash</shell>
  <cwd>/path/to/project</cwd>
</environment>
<current_date>2024-01-15</current_date>
<timezone>UTC+8</timezone>

资料来源:codex-rs/core/src/context/environment_context.rs:1-50

实验性功能

统一执行工具

[features]
experimental_use_unified_exec_tool = true

协作模式

include_collaboration_mode_instructions = true

状态显示

执行系统运行状态通过状态行(Status Line)向用户展示:

状态项说明
UsedTokens已使用的 token 数量
ContextRemaining剩余上下文百分比
Status当前运行状态
Permissions当前权限级别
ApprovalMode审批模式状态

资料来源:codex-rs/tui/src/chatwidget/status_surfaces.rs:1-30

快捷键绑定

执行系统与编辑器的快捷键配置通过 [keymap] 块进行自定义:

[keymap]
motion_up = "k"
motion_down = "j"
motion_left = "h"
motion_right = "l"

支持的按键绑定类型包括动作模式下的标准 Vim 风格快捷键。

安全模型

执行系统的安全模型基于以下原则:

  1. 最小权限原则:默认情况下仅授予必要权限
  2. 用户可控:通过 /permissions 命令动态调整权限范围
  3. 审批机制:敏感操作需用户显式批准
  4. 会话隔离:权限审批结果可限定在当前会话内生效

资料来源:[codex-rs/config/src/state.rs:1-50]()

终端用户界面

终端用户界面(Terminal User Interface,简称 TUI)是 Codex CLI 的核心组件之一,基于 Rust 语言和 ratatui 库构建,为用户提供了一个功能丰富的交互式终端界面。TUI 负责渲染聊天消息、处理用户输入、管理状态显示以及支持各种快捷操作。

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 组件层次结构

继续阅读本节完整说明和来源证据。

章节 消息渲染流程

继续阅读本节完整说明和来源证据。

章节 状态项类型

继续阅读本节完整说明和来源证据。

概述

终端用户界面(Terminal User Interface,简称 TUI)是 Codex CLI 的核心组件之一,基于 Rust 语言和 ratatui 库构建,为用户提供了一个功能丰富的交互式终端界面。TUI 负责渲染聊天消息、处理用户输入、管理状态显示以及支持各种快捷操作。

Codex 的 TUI 采用模块化设计,主要由以下几个核心部分组成:

模块文件路径功能描述
应用主模块tui/src/app.rs应用生命周期管理和全局状态
聊天窗口tui/src/chatwidget.rs消息展示和对话管理
底部面板tui/src/bottom_pane/底部状态栏、页脚快捷键提示
Markdown 渲染tui/src/markdown.rsMarkdown 内容解析与渲染
快捷键管理tui/src/keymap_setup/按键绑定配置

资料来源:codex-rs/tui/src/lib.rs

架构设计

组件层次结构

graph TD
    subgraph TUI层
        A[App 主应用] --> B[ChatWidget 聊天窗口]
        A --> C[BottomPane 底部面板]
    end
    
    subgraph 底部面板子组件
        C --> D[StatusLine 状态行]
        C --> E[Footer 页脚]
        C --> F[StatusSurface 状态表面]
    end
    
    subgraph 渲染引擎
        G[Markdown Renderer] --> H[Ratatui Lines]
        G --> I[Span 样式化文本]
    end
    
    B --> G

消息渲染流程

Codex TUI 的 Markdown 渲染模块负责将 AI 生成的 Markdown 内容转换为 ratatui 可渲染的格式。该模块支持两种主要的渲染入口:

  • append_markdown:通用渲染,用于已预处理的 Markdown 内容(如 plan blocks 和历史消息)
  • append_markdown_agent:专为 Agent 响应设计,渲染前会先执行 unwrap_markdown_fences 操作

资料来源:codex-rs/tui/src/markdown.rs:1-30

状态行系统

状态行(Status Line)是 TUI 中用于显示当前会话信息和运行时状态的重要组件。

状态项类型

状态行支持多种类型的项目显示:

状态项说明示例
Model当前使用的模型gpt-5.2-codex
ModelWithReasoning模型及推理强度gpt-5.2-codex medium
GitBranch当前 Git 分支feat/awesome-feature
PullRequestNumber关联的 PR 编号PR #123
BranchChanges分支变更统计+12 -3
CurrentDir当前工作目录/home/user/project
ContextRemaining上下文剩余百分比Context 0% left
UsedTokens已使用的 Token 数0 used
TotalInputTokens输入 Token 总数0 in
TotalOutputTokens输出 Token 总数0 out

资料来源:codex-rs/tui/src/bottom_pane/status_surface_preview.rs:1-50

状态行样式

状态行使用不同的颜色样式来区分不同类型的信息:

fn fallback_style(self) -> Style {
    match self {
        Self::Model | Self::State | Self::Metadata | Self::Mode => Style::default().cyan(),
        Self::Path | Self::Usage | Self::Progress => Style::default().green(),
        Self::Branch | Self::Limit | Self::Thread => Style::default().magenta(),
    }
}

资料来源:codex-rs/tui/src/bottom_pane/status_line_style.rs:1-30

底部面板

底部面板是 TUI 的重要组成部分,包含页脚快捷键提示和其他辅助信息。

页脚快捷键显示

页脚区域显示用户可用的快捷键列表,按功能分组排列:

类别快捷键项
命令commands
Shell 命令shell_commands
消息操作queue_message_tab
文件操作file_paths, paste_image
编辑操作external_editor, edit_previous
导航操作history_search, reasoning_down, reasoning_up
系统操作quit, change_mode

页脚布局采用多列设计,使用 build_columns 函数将快捷键条目分配到两列显示:

const COLUMNS: usize = 2;
const COLUMN_PADDING: [usize; COLUMNS] = [4, 4];
const COLUMN_GAP: usize = 4;

资料来源:codex-rs/tui/src/bottom_pane/footer.rs:1-60

状态表面预览

状态表面(Status Surface)用于预览各种状态配置选项的显示效果。每个状态项都有对应的示例值,用于在设置界面中展示预览效果。

资料来源:codex-rs/tui/src/bottom_pane/status_surface_preview.rs:50-80

斜杠命令系统

Codex TUI 支持通过斜杠命令(Slash Commands)触发各种功能。命令通过 / 前缀识别,并提供相应的描述信息。

核心命令列表

命令描述
/resume恢复保存的对话
/clear清除终端并开始新对话
/fork分叉当前对话
/quit / /exit退出 Codex
/copy复制上次响应为 Markdown
/diff显示 Git 差异(包括未跟踪文件)
/model选择模型和推理强度
/ide包含 IDE 当前选择、打开文件等上下文
/theme选择语法高亮主题
/pets选择或隐藏终端宠物
/keymap重新映射 TUI 快捷键
/settings配置实时语音麦克风/扬声器
/plan切换到 Plan 模式
/mcp列出配置的 MCP 工具

资料来源:codex-rs/tui/src/slash_command.rs:1-80

快捷键系统

快捷键系统通过 RuntimeKeymap 结构管理,允许用户自定义按键绑定。

按键映射结构

快捷键按功能模块组织:

graph TD
    subgraph 按键映射分类
        A[RuntimeKeymap] --> B[chat 聊天]
        A --> C[composer 编辑器]
        A --> D[editor 编辑器]
        A --> E[pager 分页器]
        A --> F[list 列表]
        A --> G[approval 审批]
    end
    
    subgraph Chat 快捷键
        B --> B1[increase_reasoning_effort]
        B --> B2[edit_queued_message]
    end
    
    subgraph Composer 快捷键
        C --> C1[submit]
        C --> C2[queue]
        C --> C3[toggle_shortcuts]
    end
    
    subgraph Editor 快捷键
        D --> D1[move_left/right]
        D --> D2[delete_backward/forward]
        D --> D3[move_word_left/right]
    end

主要快捷键分类

模块功能说明
pagerjump_top, jump_bottom, close分页导航和关闭
listmove_up, move_down, accept列表导航和选择
approvalapprove, deny, approve_for_session审批操作
chatincrease_reasoning_effort调整推理强度
composersubmit, queue, toggle_shortcuts消息提交
editorinsert_newline, move_*, delete_*文本编辑

资料来源:codex-rs/tui/src/keymap_setup/actions.rs:1-80

Markdown 渲染

渲染特性

Markdown 渲染模块支持完整的 CommonMark 语法,并通过以下特性增强用户体验:

  • 代码块渲染:支持带语言标识的围栏代码块
  • 表格处理:特殊处理 LLMs 常用的 markdown 围栏代码块中的表格
  • 样式化文本:支持加粗、斜体、删除线等内联样式
  • 链接处理:识别并可点击的链接
  • 列表渲染:有序列表和无序列表

围栏代码块展开

LLM Agent 经常将表格放在 markdown 围栏代码块中。渲染器会执行保守的展开策略:

  1. 缓冲整个围栏内容
  2. 仅对语言标识为 mdmarkdown 的围栏进行展开
  3. 只有当内容包含表头和分隔符时才执行展开
  4. 对未闭合的围栏优雅降级

资料来源:codex-rs/tui/src/markdown.rs:1-45

支持的 Markdown 标签

渲染器支持的标签类型:

开始标签结束标签说明
Tag::HeadingTagEnd::Heading标题
Tag::BlockQuoteTagEnd::BlockQuote引用块
Tag::CodeBlockTagEnd::CodeBlock代码块
Tag::ListTagEnd::List列表
Tag::ItemTagEnd::Item列表项
Tag::EmphasisTagEnd::Emphasis斜体
Tag::StrongTagEnd::Strong加粗
Tag::Link-链接
Tag::TableTagEnd::Table表格

资料来源:codex-rs/tui/src/markdown_render.rs:1-80

配置选项

TUI 配置文件

TUI 相关配置通过 config.toml 中的 tui 部分进行设置:

[tui]
# 状态行显示项配置
# ...

# 会话选择器视图模式
session_picker_view = "grid"  # 或 "list"

Profile 级别的 TUI 设置

每个命名 profile 可以包含独立的 TUI 配置:

配置项类型说明
session_picker_viewSessionPickerViewMode恢复/分叉会话选择器的首选布局

资料来源:codex-rs/config/src/profile_toml.rs:1-50

测试覆盖

Markdown 渲染模块包含完整的测试覆盖,测试用例涵盖:

  • 基本 Markdown 语法
  • 嵌套代码块
  • 带语言标识的围栏代码块
  • 波浪号和反引号围栏
  • 缩进代码块
  • 定义列表
  • 字符实体
  • URL 和链接
#[test]
fn ordered_item_with_code_block_and_nested_bullet() {
    let md = "1. **item 1**\n\n2. **item 2**\n   ```\n   code\n   ```\n   - `PROCESS_START` (a `OnceLock<Instant>`)...";
    // 测试验证
}

资料来源:codex-rs/tui/src/markdown_render_tests.rs:1-50

总结

Codex CLI 的终端用户界面是一个精心设计的模块化系统,通过 Rust 语言的高性能和 ratatui 库的灵活性,为开发者提供了一个功能丰富、响应迅速的命令行交互体验。核心设计要点包括:

  1. 模块化架构:清晰的组件划分,便于维护和扩展
  2. 丰富的状态显示:实时反映系统状态和会话信息
  3. 灵活的快捷键系统:支持用户自定义按键绑定
  4. 完整的 Markdown 支持:优雅处理各种 Markdown 语法和边缘情况
  5. 可配置的 UI 选项:通过 TOML 配置文件支持细粒度定制

资料来源:[codex-rs/tui/src/lib.rs]()

技能系统

技能系统(Skills System)是 Codex CLI 中的一个可扩展机制,允许用户通过自定义技能配置来增强 Codex 执行特定任务的能力。技能系统为 Codex 提供了额外的上下文信息和行为指导,使其能够更精准地理解和处理特定的开发任务场景。

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 模块结构

继续阅读本节完整说明和来源证据。

章节 架构图

继续阅读本节完整说明和来源证据。

章节 SKILL.md 文件结构

继续阅读本节完整说明和来源证据。

概述

技能系统(Skills System)是 Codex CLI 中的一个可扩展机制,允许用户通过自定义技能配置来增强 Codex 执行特定任务的能力。技能系统为 Codex 提供了额外的上下文信息和行为指导,使其能够更精准地理解和处理特定的开发任务场景。

根据源码注释,技能系统的主要用途是:"use skills to improve how Codex performs specific tasks"(使用技能来改进 Codex 执行特定任务的方式)。

核心架构

模块结构

技能系统的核心实现位于 codex-rs/core-skills/ 目录下,采用模块化设计:

模块文件路径职责
核心接口codex-rs/core-skills/src/lib.rs定义技能系统的公共 API 和数据结构
技能管理器codex-rs/core-skills/src/manager.rs负责技能的生命周期管理和调用逻辑
技能加载器codex-rs/core-skills/src/loader.rs处理技能配置的加载和解析

架构图

graph TD
    A[用户通过 /skills 命令触发] --> B[技能管理器 manager.rs]
    B --> C[技能加载器 loader.rs]
    C --> D[读取 .codex/skills/ 目录]
    D --> E[解析 SKILL.md 配置文件]
    E --> F[加载技能定义]
    F --> G[向主上下文注入技能指令]
    G --> H[增强 Codex 任务执行能力]
    
    style A fill:#e1f5fe
    style H fill:#c8e6c9

技能定义格式

SKILL.md 文件结构

技能通过 .codex/skills/ 目录下的 SKILL.md 文件定义。每个技能目录代表一个独立的技能模块。

技能配置采用 Markdown 格式,包含以下关键部分:

组成部分说明
技能名称技能的标识名称
触发条件定义何时激活该技能
行为指令告诉 Codex 如何处理特定任务的指令集
示例用法提供技能使用的示例场景

现有技能示例

仓库中预置了两个技能:

技能名称路径用途
code-review.codex/skills/code-review/SKILL.md代码审查技能
codex-bug.codex/skills/codex-bug/SKILL.mdBug 定位与修复技能

技能管理器

技能管理器(manager.rs)是技能系统的核心组件,负责以下职责:

主要功能

功能描述
技能注册将可用的技能注册到系统中
技能选择根据上下文选择合适的技能
技能激活在适当时机触发技能生效
技能卸载清理不再需要的技能资源

管理器状态

stateDiagram-v2
    [*] --> 未初始化: 系统启动
    未初始化 --> 已加载: loader 解析成功
    已加载 --> 就绪: 技能注册完成
    就绪 --> 激活: 满足触发条件
    激活 --> 就绪: 任务完成
    激活 --> 已加载: 技能禁用
    已加载 --> [*]: 系统关闭

技能加载器

技能加载器(loader.rs)负责从文件系统读取和解析技能配置:

加载流程

graph LR
    A[扫描 skills 目录] --> B[读取 SKILL.md]
    B --> C[解析 Markdown]
    C --> D[验证技能格式]
    D --> E[构建技能对象]
    E --> F[返回技能实例]
    
    D -->|格式错误| G[记录诊断信息]

配置路径

路径类型位置说明
用户级技能~/.codex/skills/用户自定义技能
项目级技能.codex/skills/特定项目的技能配置
系统级技能内置Codex 预置的默认技能

使用方式

命令行交互

用户可以通过斜杠命令(Slash Command)来访问技能功能:

/codex skills

此命令将显示可用的技能列表并允许用户选择激活特定技能。

技能触发机制

技能可以通过以下方式激活:

触发方式描述
手动激活用户通过 /skills 命令显式选择
自动检测系统根据任务上下文自动推荐相关技能
规则匹配根据文件路径或任务类型自动匹配技能

配置与扩展

添加自定义技能

创建自定义技能的步骤:

  1. .codex/skills/ 目录下创建新的技能文件夹
  2. 在文件夹中创建 SKILL.md 文件
  3. 按照技能定义格式编写技能配置
  4. 重启 Codex 或使用 /skills reload 重新加载技能

技能优先级

当多个技能同时匹配时,系统按照以下优先级处理:

优先级来源说明
1 (最高)命令行参数通过 --skill 参数指定的技能
2项目级技能.codex/skills/ 中的配置
3用户级技能~/.codex/skills/ 中的配置
4 (最低)系统内置Codex 默认技能

与其他系统集成

与上下文系统集成

技能系统的输出会作为环境上下文的一部分传递给 Codex:

<environment>
  <skills>
    <!-- 激活的技能配置 -->
  </skills>
</environment>

与权限系统集成

技能执行受到权限系统(Permissions System)的约束,确保技能操作在用户授权范围内进行。

与配置系统集成

技能配置通过主配置系统(codex-rs/config/)进行管理,支持按配置文件 profiles 进行作用域限定。

诊断与调试

技能状态检查

使用 /debug-config 命令可以查看技能相关的配置层和来源信息。

常见问题排查

问题可能原因解决方案
技能未显示配置文件格式错误检查 SKILL.md 语法
技能不生效触发条件未满足确认任务上下文匹配
加载失败文件权限问题检查文件读取权限

相关命令

命令功能
/skills列出和管理可用技能
/debug-config显示配置层和技能来源
/permissions管理技能执行权限

最佳实践

  1. 技能粒度:保持技能职责单一,每个技能专注于一个特定任务类型
  2. 命名规范:使用清晰描述性的技能名称,便于识别和选择
  3. 文档完善:在 SKILL.md 中提供详细的使用说明和示例
  4. 版本兼容:定期更新技能配置以适配 Codex 版本变化
  5. 权限考虑:明确技能所需权限,避免过度授权

参考资料

来源:https://github.com/openai/codex / 项目说明书

插件系统

Codex CLI 的插件系统(Plugins)是扩展主程序功能的核心模块,允许用户通过插件机制定制和增强 Codex 的行为。该系统与应用程序管理(Apps)和 MCP(Model Context Protocol)协议共同构成了 Codex 的可扩展性架构。

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 核心组件

继续阅读本节完整说明和来源证据。

章节 配置文件支持

继续阅读本节完整说明和来源证据。

章节 斜杠命令

继续阅读本节完整说明和来源证据。

概述

Codex CLI 的插件系统(Plugins)是扩展主程序功能的核心模块,允许用户通过插件机制定制和增强 Codex 的行为。该系统与应用程序管理(Apps)和 MCP(Model Context Protocol)协议共同构成了 Codex 的可扩展性架构。

插件系统的主要入口是通过命令行斜杠命令 /plugins 访问,用户可以浏览已安装的插件。 资料来源:codex-rs/tui/src/slash_command.rs:行53

架构组成

核心组件

组件功能描述
Apps 管理管理和启动独立的应用程序实例
MCP 客户端连接外部 MCP 服务器以使用第三方工具
MCP 服务器将 Codex 作为 MCP 服务器暴露给其他客户端
插件框架允许第三方代码扩展 Codex 的核心功能

配置文件支持

Codex 在配置层面支持插件相关功能,通过 config.tomlprofile.toml 中的字段控制插件行为:

# 包含应用指令
include_apps_instructions = true  # 控制是否注入应用相关指令

资料来源:codex-rs/config/src/config_toml.rs:行1-100

[features]
# 可在 profile 中配置特性开关

资料来源:codex-rs/config/src/profile_toml.rs:行1-50

命令行接口

斜杠命令

命令功能
/plugins浏览可用插件
/apps管理系统应用
/mcp列出已配置的 MCP 工具

资料来源:codex-rs/tui/src/slash_command.rs:行48-55

SlashCommand::Plugins => "browse plugins",
SlashCommand::Apps => "manage apps",
SlashCommand::Mcp => "list configured MCP tools; use /mcp verbose for details",

MCP 协议集成

MCP 客户端模式

Codex CLI 作为 MCP 客户端,可在启动时连接到外部 MCP 服务器。这种模式允许 Codex 访问由第三方提供的工具和服务。

注意:详细配置方法请参阅配置文档

资料来源:codex-rs/README.md:行1-100

MCP 服务器模式(实验性)

Codex 可以作为 MCP 服务器运行,允许其他 MCP 客户端连接到 Codex 并使用其功能:

codex mcp-server

资料来源:codex-rs/README.md:行1-100

工作流程图

graph TD
    A[用户启动 Codex] --> B{插件配置检查}
    B -->|有 MCP 配置| C[连接 MCP 服务器]
    B -->|有 Apps 配置| D[加载应用模块]
    B -->|有 Plugins 配置| E[初始化插件]
    C --> F[Codex 运行中]
    D --> F
    E --> F
    F --> G[用户可通过 /plugins 浏览插件]
    F --> H[用户可通过 /apps 管理应用]
    F --> I[用户可通过 /mcp 查看 MCP 工具]

配置层级

插件系统的配置遵循 Codex 的配置层级架构:

graph TD
    A[配置层级架构]
    A --> B[System 配置]
    A --> C[User 配置]
    A --> D[Project 配置]
    A --> E[Session Flags]
    B --> F[最终生效配置]
    C --> F
    D --> F
    E --> F
配置层级说明
System系统级配置文件
User用户主目录配置
Project项目 .codex 目录配置
Session Flags会话级别命令行参数

资料来源:codex-rs/config/src/state.rs:行1-50

应用与插件的集成

Apps(应用程序)和 Plugins(插件)在功能上有重叠和互补关系:

  • Apps 通常指完整的应用程序模块,可以通过 /apps 命令管理
  • Plugins 指可插拔的功能扩展,通过 /plugins 浏览

两者都可以在配置中启用或禁用,通过 include_apps_instructions 配置项控制是否向模型注入应用相关的指令提示。

资料来源:codex-rs/config/src/profile_toml.rs:行1-50

使用场景

场景一:连接外部工具

用户可以配置 MCP 服务器以连接外部开发工具:

[mcp]
servers = ["my-mcp-server"]

场景二:安装应用

通过 Apps 系统,用户可以安装和管理预配置的应用程序:

/apps install <app-name>

场景三:浏览插件

/plugins browse

相关命令速查

命令描述
/plugins浏览已安装插件
/apps管理应用程序
/mcp查看 MCP 工具列表
/mcp verbose查看 MCP 详细配置
codex mcp-server启动 MCP 服务器模式

下一步

资料来源:[codex-rs/config/src/config_toml.rs:行1-100]()

Hook系统

Hook系统是Codex CLI中用于在关键生命周期节点注入自定义逻辑的核心扩展机制。通过Hook,管理员、用户和项目开发者可以在Codex执行过程中的特定时刻介入,控制行为、注入上下文、验证权限或收集反馈。 资料来源:[codex-rs/tui/src/slashcommand.rs:15]()

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 Hook的本质

继续阅读本节完整说明和来源证据。

章节 配置层级

继续阅读本节完整说明和来源证据。

章节 Hook配置文件位置

继续阅读本节完整说明和来源证据。

概述

Hook系统是Codex CLI中用于在关键生命周期节点注入自定义逻辑的核心扩展机制。通过Hook,管理员、用户和项目开发者可以在Codex执行过程中的特定时刻介入,控制行为、注入上下文、验证权限或收集反馈。 资料来源:codex-rs/tui/src/slash_command.rs:15

核心概念

Hook的本质

Hook是一种声明式的回调机制,允许外部代码在Codex运行时截获特定事件并返回响应。每个Hook由以下要素组成:

要素说明
事件类型Hook被触发的时机
源配置Hook定义来自哪个配置层级
执行逻辑Hook被触发时运行的代码
返回结果Hook对后续行为的指导

配置层级

Hook的配置遵循Codex的分层配置体系,从低优先级到高优先级依次为:

  1. 系统级(System) - 管理员全局配置
  2. MDM级(Mdm) - 移动设备管理配置
  3. 云端要求(CloudRequirements) - 云端下发的强制要求
  4. 项目级(Project) - .codex/目录中的项目配置
  5. 用户级(User) - 用户个人配置
  6. 会话标志(SessionFlags) - 命令行会话参数
  7. 插件(Plugin) - 第三方插件提供

资料来源:codex-rs/tui/src/hooks_browser_view.rs:45-58

事件类型

Codex Hook系统在以下事件节点触发Hook:

事件名称触发时机典型用途
SessionStart会话启动时初始化上下文、设置会话级别变量
UserPromptSubmit用户提交提示词时验证输入、注入额外上下文
PreToolUse工具执行前权限检查、参数修改、拒绝执行
PostToolUse工具执行后记录日志、处理结果、添加反馈
PreCompact历史压缩前选择性保留关键对话
PostCompact历史压缩后验证压缩结果
PermissionRequest权限请求时自定义权限审批流程
StopCodex结束回合前最终清理、状态保存

资料来源:codex-rs/tui/src/history_cell/hook_cell.rs:30-42

Hook输出类型

Hook可以向用户或系统返回多种类型的输出:

输出类型前缀标识含义
Warningwarning:警告信息,Hook继续执行
Stopstop:停止当前操作
Feedbackfeedback:向用户提供反馈文本
Contexthook context:注入额外上下文信息
Errorerror:错误信息,终止操作

资料来源:codex-rs/tui/src/history_cell/hook_cell.rs:12-17

系统架构

graph TD
    A[Codex运行时] --> B[Hook引擎]
    B --> C{事件类型判断}
    C -->|PreToolUse| D[执行PreToolUse Hooks]
    C -->|PostToolUse| E[执行PostToolUse Hooks]
    C -->|SessionStart| F[执行SessionStart Hooks]
    C -->|UserPromptSubmit| G[执行UserPromptSubmit Hooks]
    C -->|其他事件| H[执行对应Hooks]
    
    D --> I[收集输出结果]
    E --> I
    F --> I
    G --> I
    H --> I
    
    I --> J{Hook决定}
    J -->|继续| K[执行下一阶段]
    J -->|停止| L[终止操作]
    J -->|上下文| M[注入上下文后继续]
    J -->|反馈| N[显示反馈信息]
    
    K --> O[返回结果给调用方]
    L --> P[返回错误/停止原因]
    N --> O
    
    style B fill:#e1f5fe
    style D fill:#fff3e0
    style I fill:#f3e5f5

配置管理

Hook配置文件位置

Hook的配置文件位置遵循以下优先级规则:

pub fn hooks_config_folder(&self) -> Option<AbsolutePathBuf> {
    self.hooks_config_folder_override
        .clone()
        .or_else(|| self.config_folder())
}

对于不同配置源,Hook配置文件夹的确定方式为:

配置源配置文件夹位置
Systemfile.parent()
Userfile.parent()
Projectdot_codex_folder.codex/目录)
MDM/SessionFlags无专用文件夹

资料来源:codex-rs/config/src/state.rs:140-152

命名规则

Hook配置文件通常命名为 hooks.toml,位于各层级的配置目录中。

TUI集成

Hook浏览器视图

在TUI中,用户可以通过 /hooks 命令访问Hook浏览器,查看当前会话可用的所有Hook:

graph LR
    A[/hooks命令] --> B[Hook浏览器视图]
    B --> C[按源分组显示]
    C --> D[显示Hook元数据]
    D --> E[显示Hook详情]

Hook元数据显示

Hook浏览器中显示的关键信息包括:

显示项来源说明
源标签HookSourceSystem/User/Project等
插件IDplugin_id插件提供的Hook专属
源路径source_path配置文件路径
事件类型HookEventName触发的事件

资料来源:codex-rs/tui/src/hooks_browser_view.rs:35-60

使用方式

命令行接口

命令功能
/hooks查看和管理局域网Hook

资料来源:codex-rs/tui/src/slash_command.rs:15

快捷键配置

Hook相关的快捷键可通过 /keymap 命令自定义配置:

操作默认快捷键
Hook浏览器导航方向键

权限与安全

权限级别

Hook的执行受Codex权限系统约束:

  • 管理员Hook - 可执行高权限操作
  • 用户Hook - 受用户权限限制
  • 项目Hook - 受项目配置限制
  • 插件Hook - 受插件声明的权限限制

风险级别

Hook执行结果会映射到Guardian风险级别:

Hook决定风险级别
允许继续Low
添加条件Medium
要求确认High
拒绝执行Critical

高级特性

实验性Hook

部分Hook功能标记为实验性:

  • experimental_compact_prompt_file - 自定义压缩提示词文件
  • experimental_use_unified_exec_tool - 统一执行工具
  • experimental_use_freeform_apply_patch - 自由格式补丁

资料来源:codex-rs/config/src/profile_toml.rs:25-35

状态行显示

Hook执行状态可显示在TUI状态行:

状态项显示内容
Hook输出Warning/Stop/Error等标记

资料来源:codex-rs/tui/src/bottom_pane/status_line_style.rs:20-30

与其他系统集成

配置系统

Hook声明是配置层级的组成部分,支持完整的配置诊断:

fn config_toml_path_for_layer(
    layer: &ConfigLayerEntry, 
    config_toml_file: &str
) -> Option<PathBuf> {
    match &layer.name {
        ConfigLayerSource::System { file } => Some(file.to_path_buf()),
        ConfigLayerSource::User { file } => Some(file.to_path_buf()),
        ConfigLayerSource::Project { dot_codex_folder } => {
            Some(dot_codex_folder.as_path().join(config_toml_file))
        }
        _ => None,
    }
}

资料来源:codex-rs/config/src/diagnostics.rs:15-27

工具系统

PreToolUse和PostToolUse Hook与工具系统紧密集成:

sequenceDiagram
    participant U as 用户
    participant C as Codex
    participant H as PreToolUse Hook
    participant T as 工具
    participant P as PostToolUse Hook
    
    U->>C: 执行工具请求
    C->>H: 触发PreToolUse
    H-->>C: 决定:允许/拒绝/修改
    alt 允许执行
        C->>T: 调用工具
        T-->>C: 返回结果
        C->>P: 触发PostToolUse
        P-->>C: 反馈/上下文
        C-->>U: 显示结果
    else 拒绝执行
        C-->>U: 显示拒绝原因
    end

故障排查

常见问题

问题可能原因解决方案
Hook未触发事件类型不匹配检查Hook声明的事件类型
Hook无效配置解析错误运行 /debug-config 检查
权限不足Hook源权限受限提升配置层级权限

调试命令

命令用途
/debug-config显示配置层级和来源
/status查看当前会话配置

最佳实践

  1. 分层管理 - 按优先级合理分配Hook到不同配置层级
  2. 最小权限 - 仅授予Hook必要的权限
  3. 清晰命名 - 使用描述性的Hook名称便于维护
  4. 错误处理 - 在Hook中实现健壮的错误处理
  5. 测试验证 - 在非生产环境测试Hook行为

相关文档

资料来源:[codex-rs/tui/src/hooks_browser_view.rs:45-58]()

沙箱与安全

Codex CLI 的沙箱与安全系统是保护用户系统免受恶意操作或意外文件修改的核心机制。该系统通过多层次的权限控制、审批流程和文件系统路径限制来确保代码执行的安全性。

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 配置层源

继续阅读本节完整说明和来源证据。

章节 权限决策类型

继续阅读本节完整说明和来源证据。

章节 特殊文件系统路径

继续阅读本节完整说明和来源证据。

系统架构概述

Codex 的安全架构采用分层设计,将配置源、权限决策和文件系统隔离有机结合。系统支持多种配置层,包括系统级、用户级和项目级配置,每一层都有独立的权限优先级和作用范围。

graph TD
    A[用户操作] --> B{权限检查}
    B --> C{文件路径类型}
    C --> D[:root - 根目录]
    C --> E[:minimal - 最小路径]
    C --> F[:project_roots - 项目根目录]
    C --> G[/tmp - 临时目录]
    D --> H{审批决策}
    E --> H
    F --> H
    G --> H
    H --> I[Approval - 执行]
    H --> J[AcceptForSession - 本次会话接受]
    H --> K[Reject - 拒绝执行]

权限配置系统

配置层源

Codex 使用 ConfigLayerSource 枚举来管理不同来源的配置层级,每个层级对应不同的安全边界和应用范围。

配置层类型说明优先级
System系统级配置文件最低
User用户主目录配置中低
Project.codex/ 项目配置中高
Mdm移动设备管理配置
SessionFlags会话级命令行标志最高

资料来源:codex-rs/config/src/state.rs:1-20

权限决策类型

权限审批系统通过 ApprovalDecisionFileChangeApprovalDecision 枚举处理用户对文件操作的授权决策。

pub enum ApprovalDecision {
    FileChange(FileChangeApprovalDecision),
    // ... 其他变体
}

pub enum FileChangeApprovalDecision {
    Accept,              // 立即执行
    AcceptForSession,    // 本次会话接受,后续不再询问
    // 拒绝决策由用户交互产生
}

资料来源:codex-rs/tui/src/bottom_pane/approval_overlay.rs:1-50

特殊文件系统路径

系统定义了特殊的文件系统路径标识符,用于限制 Codex 的操作范围:

路径标识说明示例
:root文件系统根目录/
:minimal最小限制路径用户定义的最小访问范围
:project_roots项目根目录包含 .codex/ 的目录
:tmpdir系统临时目录/tmp
:unknown未识别的特殊路径自定义路径

资料来源:codex-rs/tui/src/bottom_pane/approval_overlay.rs:80-95

文件审批流程

审批选项

当 Codex 需要修改文件或执行敏感操作时,会向用户展示审批选项界面:

选项标签决策类型快捷键
"Yes, proceed"Accept可自定义
"Yes, and don't ask again for these files"AcceptForSession可自定义
"No, and tell Codex what to do differently"Reject可自定义

资料来源:codex-rs/tui/src/bottom_pane/approval_overlay.rs:150-170

路径显示格式化

系统通过 path_label 函数将文件系统路径转换为用户可读的格式:

fn path_label(base: &str, subpath: &Option<PathBuf>) -> String {
    match subpath {
        Some(subpath) => format!("{base}/{}", subpath.display()),
        None => base.to_string(),
    }
}

该函数处理带有子路径的特殊路径标识符,例如 :project_roots/subdir 会被格式化为用户友好的显示形式。

资料来源:codex-rs/tui/src/bottom_pane/approval_overlay.rs:75-82

配置验证与诊断

配置错误处理

Codex 提供配置诊断功能,能够检测并报告配置文件中的错误,包括权限相关的配置问题。

pub fn format_config_error(error: &ConfigError, contents: &str) -> String {
    let mut output = String::new();
    let start = error.range.start;
    write!(
        output,
        "{}:{}:{}: {}",
        error.path.display(),
        start.line,
        start.column,
        error.message
    );
    // ...
}

诊断系统会显示错误的具体位置(文件路径、行号、列号)和错误消息,帮助用户修正配置问题。

资料来源:codex-rs/config/src/diagnostics.rs:40-55

配置文件定位

系统根据配置层类型自动定位对应的配置文件路径:

配置层源返回路径
System系统配置文件路径
User用户配置文件路径
Project.codex/config.toml
MdmMDM 配置文件路径
SessionFlags无对应文件(None)

资料来源:codex-rs/config/src/diagnostics.rs:1-20

项目级配置隔离

钩子配置文件夹

项目层级配置使用独立的 .codex/ 文件夹存储钩子声明。系统支持 Git 工作树链接场景,主仓库和工作树可以共享钩子配置。

pub fn hooks_config_folder(&self) -> Option<AbsolutePathBuf> {
    self.hooks_config_folder_override
        .clone()
        .or_else(|| self.config_folder())
}

该方法优先返回覆盖值,否则回退到常规配置文件夹位置。

资料来源:codex-rs/config/src/state.rs:80-90

项目配置合并

加载项目配置时会执行多项安全检查:

  1. 验证配置文件格式有效性
  2. 忽略不受支持的配置键并记录警告
  3. 解析相对路径为绝对路径
  4. 合并主仓库与工作树的钩子配置
let ignored_project_config_keys = sanitize_project_config(&mut config);
let config = resolve_relative_paths_in_config_toml(config, dot_codex_abs.as_path())?;
let config = merge_root_checkout_project_hooks(
    fs,
    config,
    hooks_config_folder_override.as_ref(),
    decision.is_trusted(),
)
.await?;

资料来源:codex-rs/config/src/loader/mod.rs:1-50

安全边界控制

信任决策

配置加载器根据 decision.is_trusted() 判断当前操作是否来自可信来源。可信来源享有更严格的错误报告机制,而不可信来源则采用容错处理。

相对路径解析

为防止路径遍历攻击,所有相对路径在加载时都会被解析为绝对路径:

pub fn resolve_relative_paths_in_config_toml(
    config: TomlValue,
    base_path: &Path,
) -> Result<TomlValue, ConfigError> {
    // 将所有相对路径转换为基于 base_path 的绝对路径
}

资料来源:codex-rs/config/src/loader/mod.rs:30-40

权限相关配置项

文件系统操作权限

配置项类型说明
include_permissions_instructionsbool是否注入权限指令
include_environment_contextbool是否注入环境上下文
include_apply_patch_toolbool是否包含补丁应用工具
experimental_use_freeform_apply_patchbool自由形式补丁应用(实验性)

资料来源:codex-rs/config/src/config_toml.rs:1-30

审批模式显示

系统根据配置显示当前权限状态和审批模式:

StatusLineItem::Permissions => Some(permissions_display(&self.config)),
StatusLineItem::ApprovalMode => Some(approval_mode_display(&self.config)),

用户可以在状态栏直接查看当前工作区的权限级别和审批模式设置。

资料来源:codex-rs/tui/src/chatwidget/status_surfaces.rs:1-30

快捷键自定义

用户可以通过 /keymap 命令自定义安全相关的快捷键,包括审批决策的快捷键映射:

快捷键 ID说明
Approval审批确认
ApprovalForSession本次会话接受
ExternalEditor外部编辑器
FilePaths文件路径显示

资料来源:codex-rs/tui/src/bottom_pane/footer.rs:1-50

总结

Codex 的沙箱与安全系统通过以下核心机制保护用户系统:

  • 多层级配置管理:系统、用户、项目级配置各有独立的安全边界
  • 文件审批流程:敏感操作需用户明确授权
  • 路径隔离:使用特殊路径标识符限制操作范围
  • 配置验证:实时检测并报告配置错误
  • 路径规范化:防止路径遍历和相对路径攻击

该系统设计确保了 Codex 在执行代码操作时既有足够的灵活性,又不会在未经授权的情况下损害用户系统的完整性。

资料来源:[codex-rs/config/src/state.rs:1-20]()

失败模式与踩坑日记

保留 Doramagic 在发现、验证和编译中沉淀的项目专属风险,不把社区讨论只当作装饰信息。

high 来源证据:Selected model is at capacity. Please try a different model. The same error everyday

可能阻塞安装或首次运行。

high 来源证据:Extensive UI flickering when codex is working

可能增加新用户试用和生产接入成本。

high 来源证据:Codex Desktop voice transcription blocked by Cloudflare challenge on /backend-api/transcribe after resolved incident

可能阻塞安装或首次运行。

high 来源证据:Codex IDE extension fails GitHub MCP startup with "connection closed: initialize response" in PyCharm AI Chat

可能影响授权、密钥配置或安全边界。

Pitfall Log / 踩坑日志

项目:openai/codex

摘要:发现 21 个潜在踩坑项,其中 5 个为 high/blocking;最高优先级:安装坑 - 来源证据:Selected model is at capacity. Please try a different model. The same error everyday。

1. 安装坑 · 来源证据:Selected model is at capacity. Please try a different model. The same error everyday

  • 严重度:high
  • 证据强度:source_linked
  • 发现:GitHub 社区证据显示该项目存在一个安装相关的待验证问题:Selected model is at capacity. Please try a different model. The same error everyday
  • 对用户的影响:可能阻塞安装或首次运行。
  • 建议检查:来源问题仍为 open,Pack Agent 需要复核是否仍影响当前版本。
  • 防护动作:不得脱离来源链接放大为确定性结论;需要标注适用版本和复核状态。
  • 证据:community_evidence:github | cevd_2839c851344f4b669bd1c21b29e7bd08 | https://github.com/openai/codex/issues/22456 | 来源讨论提到 windows 相关条件,需在安装/试用前复核。

2. 维护坑 · 来源证据:Extensive UI flickering when codex is working

  • 严重度:high
  • 证据强度:source_linked
  • 发现:GitHub 社区证据显示该项目存在一个维护/版本相关的待验证问题:Extensive UI flickering when codex is working
  • 对用户的影响:可能增加新用户试用和生产接入成本。
  • 建议检查:来源问题仍为 open,Pack Agent 需要复核是否仍影响当前版本。
  • 防护动作:不得脱离来源链接放大为确定性结论;需要标注适用版本和复核状态。
  • 证据:community_evidence:github | cevd_47a11c3a9f3943168527e0a086872c1f | https://github.com/openai/codex/issues/11901 | 来源类型 github_issue 暴露的待验证使用条件。

3. 安全/权限坑 · 来源证据:Codex Desktop voice transcription blocked by Cloudflare challenge on /backend-api/transcribe after resolved incident

  • 严重度:high
  • 证据强度:source_linked
  • 发现:GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题:Codex Desktop voice transcription blocked by Cloudflare challenge on /backend-api/transcribe after resolved incident
  • 对用户的影响:可能阻塞安装或首次运行。
  • 建议检查:来源问题仍为 open,Pack Agent 需要复核是否仍影响当前版本。
  • 防护动作:不得脱离来源链接放大为确定性结论;需要标注适用版本和复核状态。
  • 证据:community_evidence:github | cevd_dcdaacada441496491e68dd4db3d802b | https://github.com/openai/codex/issues/21985 | 来源讨论提到 macos 相关条件,需在安装/试用前复核。

4. 安全/权限坑 · 来源证据:Codex IDE extension fails GitHub MCP startup with "connection closed: initialize response" in PyCharm AI Chat

  • 严重度:high
  • 证据强度:source_linked
  • 发现:GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题:Codex IDE extension fails GitHub MCP startup with "connection closed: initialize response" in PyCharm AI Chat
  • 对用户的影响:可能影响授权、密钥配置或安全边界。
  • 建议检查:来源问题仍为 open,Pack Agent 需要复核是否仍影响当前版本。
  • 防护动作:不得脱离来源链接放大为确定性结论;需要标注适用版本和复核状态。
  • 证据:community_evidence:github | cevd_45286dbe57a44800be79bc6a5819956f | https://github.com/openai/codex/issues/22461 | 来源类型 github_issue 暴露的待验证使用条件。

5. 安全/权限坑 · 来源证据:Iranian phone numbers are not supported for Codex login

  • 严重度:high
  • 证据强度:source_linked
  • 发现:GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题:Iranian phone numbers are not supported for Codex login
  • 对用户的影响:可能影响授权、密钥配置或安全边界。
  • 建议检查:来源问题仍为 open,Pack Agent 需要复核是否仍影响当前版本。
  • 防护动作:不得脱离来源链接放大为确定性结论;需要标注适用版本和复核状态。
  • 证据:community_evidence:github | cevd_d651d7b5cf594cafa27dfffa45890baa | https://github.com/openai/codex/issues/21918 | 来源类型 github_issue 暴露的待验证使用条件。

6. 安装坑 · 来源证据:Codex Desktop falsely reports @chrome plugin unavailable when bundled Chrome plugin is installed

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:GitHub 社区证据显示该项目存在一个安装相关的待验证问题:Codex Desktop falsely reports @chrome plugin unavailable when bundled Chrome plugin is installed
  • 对用户的影响:可能增加新用户试用和生产接入成本。
  • 建议检查:来源显示可能已有修复、规避或版本变化,说明书中必须标注适用版本。
  • 防护动作:不得脱离来源链接放大为确定性结论;需要标注适用版本和复核状态。
  • 证据:community_evidence:github | cevd_a0eee5b5c5fb447ebe2c2d3bdf74aa33 | https://github.com/openai/codex/issues/22463 | 来源讨论提到 windows 相关条件,需在安装/试用前复核。

7. 安装坑 · 来源证据:Windows Chrome plugin hangs in setupAtlasRuntime despite extension/native host checks passing

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:GitHub 社区证据显示该项目存在一个安装相关的待验证问题:Windows Chrome plugin hangs in setupAtlasRuntime despite extension/native host checks passing
  • 对用户的影响:可能增加新用户试用和生产接入成本。
  • 建议检查:来源问题仍为 open,Pack Agent 需要复核是否仍影响当前版本。
  • 防护动作:不得脱离来源链接放大为确定性结论;需要标注适用版本和复核状态。
  • 证据:community_evidence:github | cevd_4d667016a4ab4f9aa5416a3b08e71d55 | https://github.com/openai/codex/issues/22462 | 来源讨论提到 windows 相关条件,需在安装/试用前复核。

8. 能力坑 · 能力判断依赖假设

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:README/documentation is current enough for a first validation pass.
  • 对用户的影响:假设不成立时,用户拿不到承诺的能力。
  • 建议检查:将假设转成下游验证清单。
  • 防护动作:假设必须转成验证项;没有验证结果前不能写成事实。
  • 证据:capability.assumptions | github_repo:965415649 | https://github.com/openai/codex | README/documentation is current enough for a first validation pass.

9. 运行坑 · 来源证据:/goal-first sessions are missing from resume lists

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:GitHub 社区证据显示该项目存在一个运行相关的待验证问题:/goal-first sessions are missing from resume lists
  • 对用户的影响:可能增加新用户试用和生产接入成本。
  • 建议检查:来源显示可能已有修复、规避或版本变化,说明书中必须标注适用版本。
  • 防护动作:不得脱离来源链接放大为确定性结论;需要标注适用版本和复核状态。
  • 证据:community_evidence:github | cevd_e65f6682c39b409a8c96267f4bdc1d3e | https://github.com/openai/codex/issues/20792 | 来源类型 github_issue 暴露的待验证使用条件。

10. 维护坑 · 来源证据:I have to set up the workspace every time I start a new session. My Codex usage quota is decreasing automatically even…

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:GitHub 社区证据显示该项目存在一个维护/版本相关的待验证问题:I have to set up the workspace every time I start a new session. My Codex usage quota is decreasing automatically even though I haven’t used it at all.
  • 对用户的影响:可能增加新用户试用和生产接入成本。
  • 建议检查:来源问题仍为 open,Pack Agent 需要复核是否仍影响当前版本。
  • 防护动作:不得脱离来源链接放大为确定性结论;需要标注适用版本和复核状态。
  • 证据:community_evidence:github | cevd_f8afe7124b3e44cfacbc62a9e001179c | https://github.com/openai/codex/issues/22457 | 来源讨论提到 windows 相关条件,需在安装/试用前复核。

11. 维护坑 · 来源证据:Renaming session with enter triggers the session window

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:GitHub 社区证据显示该项目存在一个维护/版本相关的待验证问题:Renaming session with enter triggers the session window
  • 对用户的影响:可能增加新用户试用和生产接入成本。
  • 建议检查:来源问题仍为 open,Pack Agent 需要复核是否仍影响当前版本。
  • 防护动作:不得脱离来源链接放大为确定性结论;需要标注适用版本和复核状态。
  • 证据:community_evidence:github | cevd_a49c134e628047c1b558f3286721d0e7 | https://github.com/openai/codex/issues/22460 | 来源类型 github_issue 暴露的待验证使用条件。

12. 维护坑 · 维护活跃度未知

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:未记录 last_activity_observed。
  • 对用户的影响:新项目、停更项目和活跃项目会被混在一起,推荐信任度下降。
  • 建议检查:补 GitHub 最近 commit、release、issue/PR 响应信号。
  • 防护动作:维护活跃度未知时,推荐强度不能标为高信任。
  • 证据:evidence.maintainer_signals | github_repo:965415649 | https://github.com/openai/codex | last_activity_observed missing

13. 安全/权限坑 · 下游验证发现风险项

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:no_demo
  • 对用户的影响:下游已经要求复核,不能在页面中弱化。
  • 建议检查:进入安全/权限治理复核队列。
  • 防护动作:下游风险存在时必须保持 review/recommendation 降级。
  • 证据:downstream_validation.risk_items | github_repo:965415649 | https://github.com/openai/codex | no_demo; severity=medium

14. 安全/权限坑 · 存在安全注意事项

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:No sandbox install has been executed yet; downstream must verify before user use.
  • 对用户的影响:用户安装前需要知道权限边界和敏感操作。
  • 建议检查:转成明确权限清单和安全审查提示。
  • 防护动作:安全注意事项必须面向用户前置展示。
  • 证据:risks.safety_notes | github_repo:965415649 | https://github.com/openai/codex | No sandbox install has been executed yet; downstream must verify before user use.

15. 安全/权限坑 · 存在评分风险

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:no_demo
  • 对用户的影响:风险会影响是否适合普通用户安装。
  • 建议检查:把风险写入边界卡,并确认是否需要人工复核。
  • 防护动作:评分风险必须进入边界卡,不能只作为内部分数。
  • 证据:risks.scoring_risks | github_repo:965415649 | https://github.com/openai/codex | no_demo; severity=medium

16. 安全/权限坑 · 来源证据:0.130.0

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题:0.130.0
  • 对用户的影响:可能影响授权、密钥配置或安全边界。
  • 建议检查:来源显示可能已有修复、规避或版本变化,说明书中必须标注适用版本。
  • 防护动作:不得脱离来源链接放大为确定性结论;需要标注适用版本和复核状态。
  • 证据:community_evidence:github | cevd_0c9ba2dc6c7444688a9de6a144fee613 | https://github.com/openai/codex/releases/tag/rust-v0.130.0 | 来源讨论提到 windows 相关条件,需在安装/试用前复核。

17. 安全/权限坑 · 来源证据:Phone number verification doesn't work

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题:Phone number verification doesn't work
  • 对用户的影响:可能影响授权、密钥配置或安全边界。
  • 建议检查:来源显示可能已有修复、规避或版本变化,说明书中必须标注适用版本。
  • 防护动作:不得脱离来源链接放大为确定性结论;需要标注适用版本和复核状态。
  • 证据:community_evidence:github | cevd_0ebeea7c4b5c455f9d14f2518dc6d37a | https://github.com/openai/codex/issues/20161 | 来源类型 github_issue 暴露的待验证使用条件。

18. 安全/权限坑 · 来源证据:Significant increase in quota consumption after upgrading to v0.130.0

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题:Significant increase in quota consumption after upgrading to v0.130.0
  • 对用户的影响:可能影响授权、密钥配置或安全边界。
  • 建议检查:来源问题仍为 open,Pack Agent 需要复核是否仍影响当前版本。
  • 防护动作:不得脱离来源链接放大为确定性结论;需要标注适用版本和复核状态。
  • 证据:community_evidence:github | cevd_b4d50b3a9b2045c4bd31cd218d7d8d05 | https://github.com/openai/codex/issues/22459 | 来源讨论提到 windows 相关条件,需在安装/试用前复核。

19. 安全/权限坑 · 来源证据:missing context % usage in new version

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题:missing context % usage in new version
  • 对用户的影响:可能影响授权、密钥配置或安全边界。
  • 建议检查:来源显示可能已有修复、规避或版本变化,说明书中必须标注适用版本。
  • 防护动作:不得脱离来源链接放大为确定性结论;需要标注适用版本和复核状态。
  • 证据:community_evidence:github | cevd_a8cf9679679847ddb595ef1ca2bf0757 | https://github.com/openai/codex/issues/18101 | 来源讨论提到 api key 相关条件,需在安装/试用前复核。

20. 维护坑 · issue/PR 响应质量未知

  • 严重度:low
  • 证据强度:source_linked
  • 发现:issue_or_pr_quality=unknown。
  • 对用户的影响:用户无法判断遇到问题后是否有人维护。
  • 建议检查:抽样最近 issue/PR,判断是否长期无人处理。
  • 防护动作:issue/PR 响应未知时,必须提示维护风险。
  • 证据:evidence.maintainer_signals | github_repo:965415649 | https://github.com/openai/codex | issue_or_pr_quality=unknown

21. 维护坑 · 发布节奏不明确

  • 严重度:low
  • 证据强度:source_linked
  • 发现:release_recency=unknown。
  • 对用户的影响:安装命令和文档可能落后于代码,用户踩坑概率升高。
  • 建议检查:确认最近 release/tag 和 README 安装命令是否一致。
  • 防护动作:发布节奏未知或过期时,安装说明必须标注可能漂移。
  • 证据:evidence.maintainer_signals | github_repo:965415649 | https://github.com/openai/codex | release_recency=unknown

来源:Doramagic 发现、验证与编译记录