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

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

## 目录

- [项目概述](#page-overview)
- [系统架构](#page-architecture)
- [协议层详解](#page-protocol)
- [核心Agent模块](#page-core-agent)
- [执行系统](#page-execution)
- [终端用户界面](#page-tui)
- [技能系统](#page-skills)
- [插件系统](#page-plugins)
- [Hook系统](#page-hooks)
- [沙箱与安全](#page-sandboxing)

<a id='page-overview'></a>

## 项目概述

### 相关页面

相关主题：[系统架构](#page-architecture), [核心Agent模块](#page-core-agent)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [README.md](https://github.com/openai/codex/blob/main/README.md)
- [codex-rs/tui/src/slash_command.rs](https://github.com/openai/codex/blob/main/codex-rs/tui/src/slash_command.rs)
- [codex-rs/tui/src/bottom_pane/footer.rs](https://github.com/openai/codex/blob/main/codex-rs/tui/src/bottom_pane/footer.rs)
- [codex-rs/config/src/profile_toml.rs](https://github.com/openai/codex/blob/main/codex-rs/config/src/profile_toml.rs)
- [codex-rs/config/src/tui_keymap.rs](https://github.com/openai/codex/blob/main/codex-rs/config/src/tui_keymap.rs)
- [codex-rs/config/src/config_toml.rs](https://github.com/openai/codex/blob/main/codex-rs/config/src/config_toml.rs)
</details>

# 项目概述

## 什么是 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 支持两种主流安装方式：

```shell
# 使用 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_forward` | `w` | 移动到下一个单词开头 |
| `motion_word_backward` | `b` | 移动到上一个单词开头 |
| `motion_word_end` | `e` | 移动到单词结尾 |
| `motion_line_start` | `0` | 移动到行首 |
| `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 |
| `PullRequestNumber` | PR 编号 | PR #123 |
| `BranchChanges` | 分支变更统计 | +12 -3 |
| `Permissions` | 权限级别 | Workspace |
| `ContextRemaining` | 剩余上下文 | Context 0% left |
| `UsedTokens` | 已使用 Token | 0 used |
| `Model` | 当前模型 | gpt-5.2-codex |
| `SessionId` | 会话 ID | 550e8400-e29b-41d4 |

资料来源：[codex-rs/tui/src/status/card.rs:1-50](), [codex-rs/tui/src/status_surfaces.rs:1-40]()

## 配置系统

### 配置文件结构

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

```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 | 经典紫红 |
| github | GitHub 风格 |
| gruvbox-dark / light | 复古风格 |
| inspired-github | GitHub 灵感 |
| 1337 (leet) | 黑客风格 |
| monokai-extended 系列 | Monokai 扩展 |
| nord | 北欧极简 |
| one-half-dark / light | 简约双色 |

资料来源：[codex-rs/tui/src/render/highlight.rs:1-60]()

## 目标与预算系统

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

```mermaid
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 能够感知并注入当前工作环境信息：

```xml
<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）工具：

```mermaid
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]()

## 架构总览

```mermaid
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 Schema | API 数据结构定义 |
| 类型导出 | TypeScript | 前端类型安全 |

## 快速入门

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

## 相关资源

- 官方文档：[developers.openai.com/codex/ide](https://developers.openai.com/codex/ide)
- 桌面应用：运行 `codex app` 或访问 chatgpt.com/codex
- IDE 插件：支持 VS Code、Cursor、Windsurf

---

<a id='page-architecture'></a>

## 系统架构

### 相关页面

相关主题：[协议层详解](#page-protocol), [核心Agent模块](#page-core-agent), [终端用户界面](#page-tui)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [codex-rs/config/src/state.rs](https://github.com/openai/codex/blob/main/codex-rs/config/src/state.rs)
- [codex-rs/config/src/loader/mod.rs](https://github.com/openai/codex/blob/main/codex-rs/config/src/loader/mod.rs)
- [codex-rs/config/src/config_toml.rs](https://github.com/openai/codex/blob/main/codex-rs/config/src/config_toml.rs)
- [codex-rs/config/src/profile_toml.rs](https://github.com/openai/codex/blob/main/codex-rs/config/src/profile_toml.rs)
- [codex-rs/core/src/context/environment_context.rs](https://github.com/openai/codex/blob/main/codex-rs/core/src/context/environment_context.rs)
- [codex-rs/core/src/goals.rs](https://github.com/openai/codex/blob/main/codex-rs/core/src/goals.rs)
- [codex-rs/tui/src/chatwidget.rs](https://github.com/openai/codex/blob/main/codex-rs/tui/src/chatwidget.rs)
- [codex-rs/file-search/README.md](https://github.com/openai/codex/blob/main/codex-rs/file-search/README.md)
</details>

# 系统架构

## 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](https://github.com/openai/codex/blob/main/codex-rs/README.md)

## 2. 配置系统架构

### 2.1 配置层级结构

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

```mermaid
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](https://github.com/openai/codex/blob/main/codex-rs/config/src/state.rs)

### 2.2 配置来源枚举

```rust
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](https://github.com/openai/codex/blob/main/codex-rs/config/src/state.rs)

### 2.3 配置文件加载流程

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

```mermaid
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](https://github.com/openai/codex/blob/main/codex-rs/config/src/loader/mod.rs)

### 2.4 Profile 配置结构

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

```rust
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](https://github.com/openai/codex/blob/main/codex-rs/config/src/profile_toml.rs)

### 2.5 配置诊断系统

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

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

错误报告包含文件路径、行号、列号和错误消息，并从 TOML 解析的 span 信息中提取错误位置。资料来源：[codex-rs/config/src/diagnostics.rs:1-40](https://github.com/openai/codex/blob/main/codex-rs/config/src/diagnostics.rs)

## 3. 环境上下文系统

### 3.1 上下文数据模型

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

```mermaid
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](https://github.com/openai/codex/blob/main/codex-rs/core/src/context/environment_context.rs)

### 3.2 上下文 XML 渲染

环境上下文以 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](https://github.com/openai/codex/blob/main/codex-rs/core/src/context/environment_context.rs)

## 4. 目标管理系统

### 4.1 目标生命周期

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

```mermaid
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](https://github.com/openai/codex/blob/main/codex-rs/core/src/goals.rs)

### 4.2 预算限制与节流

目标系统内置预算限制提示模板：
- `continuation.md`: 继续执行提示
- `budget_limit.md`: 预算耗尽提示
- `objective_updated.md`: 目标更新通知

资料来源：[codex-rs/core/src/goals.rs:80-120](https://github.com/openai/codex/blob/main/codex-rs/core/src/goals.rs)

## 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`) 处理来自应用服务器协议的风险等级映射：

```mermaid
graph LR
    A[GuardianRiskLevel] --> B[AppServer]
    B --> C[chatwidget]
    C --> D[Protocol]
    
    D --> Low
    D --> Medium
    D --> High
    D --> Critical
```

| 应用服务器等级 | 协议等级 |
|--------------|---------|
| Low | Low |
| Medium | Medium |
| High | High |
| Critical | Critical |

资料来源：[codex-rs/tui/src/chatwidget.rs:1-50](https://github.com/openai/codex/blob/main/codex-rs/tui/src/chatwidget.rs)

### 5.3 状态栏配置

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

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

自定义快捷键可通过 `/keymap` 命令配置。资料来源：[codex-rs/tui/src/bottom_pane/footer.rs:1-50](https://github.com/openai/codex/blob/main/codex-rs/tui/src/bottom_pane/footer.rs)

### 5.4 状态预览项

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

| 预览项 | 示例值 |
|-------|--------|
| AppName | Codex |
| GitBranch | feat/awesome-feature |
| PullRequestNumber | PR #123 |
| BranchChanges | +12 -3 |
| ContextRemaining | Context 0% left |
| UsedTokens | 0 used |
| Model | gpt-5.2-codex |
| FastMode | Fast on |

资料来源：[codex-rs/tui/src/bottom_pane/status_surface_preview.rs:1-50](https://github.com/openai/codex/blob/main/codex-rs/tui/src/bottom_pane/status_surface_preview.rs)

### 5.5 审批覆盖层

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

| 选项 | 快捷键 | 效果 |
|------|--------|------|
| Yes, proceed | approve | 接受变更 |
| Yes, don't ask again | approve_for_session | 本次会话接受 |
| No, tell Codex | reject | 拒绝并说明 |

资料来源：[codex-rs/tui/src/bottom_pane/approval_overlay.rs:1-60](https://github.com/openai/codex/blob/main/codex-rs/tui/src/bottom_pane/approval_overlay.rs)

## 6. 文件搜索模块

### 6.1 搜索架构

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

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

核心依赖：
- **ignore**: 目录遍历（ripgrep 使用的 crate）
- **nucleo-matcher**: 快速模糊匹配

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

## 7. Slash 命令系统

### 7.1 命令分类

Slash 命令通过 `/` 触发，提供丰富的交互功能：

| 类别 | 命令 | 功能 |
|------|------|------|
| 会话管理 | `/resume`, `/fork`, `/clear` | 恢复、分叉、清空会话 |
| 文件操作 | `/diff`, `/mention` | Git 差异、提及文件 |
| 模型控制 | `/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](https://github.com/openai/codex/blob/main/codex-rs/tui/src/slash_command.rs)

## 8. 安装与部署

### 8.1 安装方式

| 方式 | 命令 |
|------|------|
| npm | `npm i -g @openai/codex` |
| Homebrew | `brew 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](https://github.com/openai/codex/blob/main/codex-rs/config/src/config_toml.rs)

## 9. 模块依赖关系

```mermaid
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
```

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

---

<a id='page-protocol'></a>

## 协议层详解

### 相关页面

相关主题：[系统架构](#page-architecture), [核心Agent模块](#page-core-agent)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [codex-rs/tui/src/chatwidget.rs](https://github.com/openai/codex/blob/main/codex-rs/tui/src/chatwidget.rs)
- [codex-rs/app-server-protocol/src/protocol/v2/apps.rs](https://github.com/openai/codex/blob/main/codex-rs/app-server-protocol/src/protocol/v2/apps.rs)
- [codex-rs/config/src/state.rs](https://github.com/openai/codex/blob/main/codex-rs/config/src/state.rs)
- [codex-rs/config/src/config_toml.rs](https://github.com/openai/codex/blob/main/codex-rs/config/src/config_toml.rs)
- [codex-rs/config/src/config_requirements.rs](https://github.com/openai/codex/blob/main/codex-rs/config/src/config_requirements.rs)
- [codex-rs/tui/src/bottom_pane/approval_overlay.rs](https://github.com/openai/codex/blob/main/codex-rs/tui/src/bottom_pane/approval_overlay.rs)
</details>

# 协议层详解

## 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 协议层次关系图

```mermaid
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](https://github.com/openai/codex/blob/main/codex-rs/tui/src/chatwidget.rs)

### 3.2 协议间转换

风险等级在 `codex_app_server_protocol` 和 `codex_protocol` 之间存在一一映射关系：

```rust
(|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](https://github.com/openai/codex/blob/main/codex-rs/tui/src/chatwidget.rs)

## 4. 用户授权协议

### 4.1 授权等级定义

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

### 4.2 授权协议转换

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

```rust
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](https://github.com/openai/codex/blob/main/codex-rs/tui/src/chatwidget.rs)

## 5. 应用协议（V2）

### 5.1 应用信息结构

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

```rust
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](https://github.com/openai/codex/blob/main/codex-rs/app-server-protocol/src/protocol/v2/apps.rs)

### 5.2 应用元数据

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

| 字段 | 类型 | 说明 |
|-----|------|-----|
| `screenshots` | `Vec<AppScreenshot>` | 应用截图列表 |
| `developer` | `String` | 开发者信息 |
| `version` | `String` | 版本号 |
| `version_id` | `String` | 版本标识 |
| `version_notes` | `String` | 版本说明 |
| `first_party_type` | `String` | 第一方类型 |
| `first_party_requires_install` | `bool` | 是否需要安装 |
| `show_in_composer_when_unlinked` | `bool` | 未链接时显示 |

**资料来源**：[codex-rs/app-server-protocol/src/protocol/v2/apps.rs:30-50](https://github.com/openai/codex/blob/main/codex-rs/app-server-protocol/src/protocol/v2/apps.rs)

## 6. 配置层协议

### 6.1 配置层级来源

配置层定义在 `ConfigLayerSource` 枚举中，支持多种配置来源：

| 来源类型 | 说明 | 优先级 |
|---------|------|-------|
| `Mdm` | MDM 托管偏好 | 最高 |
| `System` | 系统级配置 | 高 |
| `User` | 用户级配置 | 中 |
| `Project` | 项目级 `.codex/config.toml` | 低 |
| `SessionFlags` | 会话命令行参数 | 特殊 |

```rust
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](https://github.com/openai/codex/blob/main/codex-rs/config/src/state.rs)

### 6.2 配置需求协议

配置需求通过 `RequirementSource` 定义来源：

```rust
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](https://github.com/openai/codex/blob/main/codex-rs/config/src/config_requirements.rs)

### 6.3 配置层堆栈

```mermaid
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
```

配置层堆栈顺序定义：

```rust
pub enum ConfigLayerStackOrdering {
    LowestPrecedenceFirst,
    HighestPrecedenceFirst,
}

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

**资料来源**：[codex-rs/config/src/state.rs:80-100](https://github.com/openai/codex/blob/main/codex-rs/config/src/state.rs)

## 7. 审批协议

### 7.1 审批决策来源

自动审查决策来源定义：

```rust
enum AutoReviewDecisionSource {
    Agent,
}
```

### 7.2 审批选项配置

审批覆盖层支持的选项：

| 选项标签 | 决策类型 | 说明 |
|---------|---------|------|
| `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:50-80](https://github.com/openai/codex/blob/main/codex-rs/tui/src/bottom_pane/approval_overlay.rs)

### 7.3 文件系统路径协议

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

**资料来源**：[codex-rs/tui/src/bottom_pane/approval_overlay.rs:20-50](https://github.com/openai/codex/blob/main/codex-rs/tui/src/bottom_pane/approval_overlay.rs)

## 8. 状态显示协议

### 8.1 状态行项目

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

| 项目 | 示例值 | 说明 |
|-----|-------|------|
| `AppName` | Codex | 应用名称 |
| `ProjectName` | my-project | 项目名称 |
| `GitBranch` | feat/awesome-feature | Git 分支 |
| `PullRequestNumber` | PR #123 | PR 编号 |
| `BranchChanges` | +12 -3 | 分支变更统计 |
| `ContextRemaining` | Context 0% left | 上下文剩余 |
| `ContextUsed` | Context 0% used | 上下文使用量 |
| `Model` | gpt-5.2-codex | 当前模型 |
| `ModelWithReasoning` | gpt-5.2-codex medium | 模型及推理级别 |

**资料来源**：[codex-rs/tui/src/bottom_pane/status_surface_preview.rs:20-50](https://github.com/openai/codex/blob/main/codex-rs/tui/src/bottom_pane/status_surface_preview.rs)

### 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](https://github.com/openai/codex/blob/main/codex-rs/tui/src/bottom_pane/status_line_style.rs)

## 9. 序列化与类型安全

### 9.1 JSON Schema 生成

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

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

### 9.2 TypeScript 类型导出

使用 `serde` 和 `ts` 属性导出 TypeScript 类型：

```rust
#[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_protocol` 与 `codex_protocol` 之间的无缝转换
5. **可扩展性**：通过可选字段和枚举变体支持功能扩展

---

<a id='page-core-agent'></a>

## 核心Agent模块

### 相关页面

相关主题：[系统架构](#page-architecture), [执行系统](#page-execution), [技能系统](#page-skills)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [codex-rs/core/src/lib.rs](https://github.com/openai/codex/blob/main/codex-rs/core/src/lib.rs)
- [codex-rs/core/src/agent/mod.rs](https://github.com/openai/codex/blob/main/codex-rs/core/src/agent/mod.rs)
- [codex-rs/core/src/client.rs](https://github.com/openai/codex/blob/main/codex-rs/core/src/client.rs)
- [codex-rs/core/src/session/mod.rs](https://github.com/openai/codex/blob/main/codex-rs/core/src/session/mod.rs)
- [codex-rs/core/src/tools/mod.rs](https://github.com/openai/codex/blob/main/codex-rs/core/src/tools/mod.rs)
- [codex-rs/core/src/goals.rs](https://github.com/openai/codex/blob/main/codex-rs/core/src/goals.rs)
- [codex-rs/core/src/context/environment_context.rs](https://github.com/openai/codex/blob/main/codex-rs/core/src/context/environment_context.rs)
- [codex-rs/config/src/state.rs](https://github.com/openai/codex/blob/main/codex-rs/config/src/state.rs)
- [codex-rs/config/src/profile_toml.rs](https://github.com/openai/codex/blob/main/codex-rs/config/src/profile_toml.rs)
- [codex-rs/tui/src/slash_command.rs](https://github.com/openai/codex/blob/main/codex-rs/tui/src/slash_command.rs)
</details>

# 核心Agent模块

## 概述

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

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

## 模块架构

### 核心组件关系

```mermaid
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模块作为协调者，处理用户输入并生成响应：

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

### 任务执行状态

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

```mermaid
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定义的协议：

```rust
// 风险级别映射
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的完整交互周期：

```mermaid
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]()

### 配置配置文件结构

```toml
[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]()

### 工具执行流程

```mermaid
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模块管理长时间运行任务的进度和预算：

```rust
// 预算限制提示模板
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]()

### 外部目标变更

目标系统支持外部修改：

```mermaid
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运行时的环境信息：

```xml
<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显示关键状态信息：

| 项目 | 格式 | 说明 |
|------|------|------|
| `GitBranch` | `feat/awesome-feature` | 当前分支 |
| `BranchChanges` | `+12 -3` | 分支变更统计 |
| `ContextUsed` | `Context 0% used` | 上下文使用率 |
| `UsedTokens` | `0 used` | 已使用Token数 |
| `ModelWithReasoning` | `gpt-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 again | Session级别 | 当前会话记住 |
| No, and tell Codex | 拒绝 | 说明原因 |

资料来源：[codex-rs/tui/src/bottom_pane/approval_overlay.rs:1-80]()

## MCP支持

### MCP客户端

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

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

### MCP服务器模式

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

```bash
codex mcp-server
```

## 配置系统

### 配置文件位置

| 位置 | 说明 | 优先级 |
|------|------|--------|
| `~/.config/codex/config.toml` | 用户级配置 | 中 |
| `.codex/config.toml` | 项目级配置 | 高 |
| `/etc/codex/config.toml` | 系统级配置 | 低 |

### Hooks配置

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

```rust
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状态显示

---

<a id='page-execution'></a>

## 执行系统

### 相关页面

相关主题：[沙箱与安全](#page-sandboxing), [核心Agent模块](#page-core-agent)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [codex-rs/config/src/state.rs](https://github.com/openai/codex/blob/main/codex-rs/config/src/state.rs)
- [codex-rs/config/src/config_toml.rs](https://github.com/openai/codex/blob/main/codex-rs/config/src/config_toml.rs)
- [codex-rs/config/src/profile_toml.rs](https://github.com/openai/codex/config/src/profile_toml.rs)
- [codex-rs/tui/src/slash_command.rs](https://github.com/openai/codex/blob/main/codex-rs/tui/src/slash_command.rs)
- [codex-rs/tui/src/bottom_pane/approval_overlay.rs](https://github.com/openai/codex/blob/main/codex-rs/tui/src/bottom_pane/approval_overlay.rs)

> **注意**：当前检索上下文中未包含 `exec-server`、`unified_exec`、`exec`、`shell-command` 等执行系统核心模块的源码。以下内容基于配置层、权限审批和命令行界面相关代码进行整理，待获取完整执行系统源码后可进一步补充。

</details>

# 执行系统

## 概述

执行系统（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]()

```mermaid
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` 配置项控制是否向模型注入权限指令：

```toml
# 配置示例
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` | 未指定来源 |
| `MdmManagedPreferences` | MDM 托管偏好设置 |
| `CloudRequirements` | 云端配置要求 |
| `SystemRequirementsToml` | 系统级 requirements.toml |
| `LegacyManagedConfigTomlFromFile` | 旧版托管配置文件 |
| `LegacyManagedConfigTomlFromMdm` | MDM 旧版托管配置 |

### 约束数据结构

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

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

## 环境上下文

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

```xml
<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]()

## 实验性功能

### 统一执行工具

```toml
[features]
experimental_use_unified_exec_tool = true
```

### 协作模式

```toml
include_collaboration_mode_instructions = true
```

## 状态显示

执行系统运行状态通过状态行（Status Line）向用户展示：

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

资料来源：[codex-rs/tui/src/chatwidget/status_surfaces.rs:1-30]()

## 快捷键绑定

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

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

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

## 安全模型

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

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

---

> 本页基于当前检索到的源码生成。执行系统核心模块（`exec-server`、`unified_exec`、`exec`、`shell-command`）的详细技术说明待补充完整源码后更新。

---

<a id='page-tui'></a>

## 终端用户界面

### 相关页面

相关主题：[系统架构](#page-architecture), [核心Agent模块](#page-core-agent)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [codex-rs/tui/src/lib.rs](https://github.com/openai/codex/blob/main/codex-rs/tui/src/lib.rs)
- [codex-rs/tui/src/chatwidget.rs](https://github.com/openai/codex/blob/main/codex-rs/tui/src/chatwidget.rs)
- [codex-rs/tui/src/bottom_pane/mod.rs](https://github.com/openai/codex/blob/main/codex-rs/tui/src/bottom_pane/mod.rs)
- [codex-rs/tui/src/slash_command.rs](https://github.com/openai/codex/blob/main/codex-rs/tui/src/slash_command.rs)
- [codex-rs/tui/src/bottom_pane/footer.rs](https://github.com/openai/codex/blob/main/codex-rs/tui/src/bottom_pane/footer.rs)
- [codex-rs/tui/src/keymap_setup/actions.rs](https://github.com/openai/codex/blob/main/codex-rs/tui/src/keymap_setup/actions.rs)
- [codex-rs/tui/src/bottom_pane/status_line_style.rs](https://github.com/openai/codex/blob/main/codex-rs/tui/src/bottom_pane/status_line_style.rs)
- [codex-rs/tui/src/bottom_pane/status_surface_preview.rs](https://github.com/openai/codex/blob/main/codex-rs/tui/src/bottom_pane/status_surface_preview.rs)
- [codex-rs/tui/src/markdown.rs](https://github.com/openai/codex/blob/main/codex-rs/tui/src/markdown.rs)
- [codex-rs/tui/src/markdown_render.rs](https://github.com/openai/codex/blob/main/codex-rs/tui/src/markdown_render.rs)
</details>

# 终端用户界面

## 概述

终端用户界面（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.rs` | Markdown 内容解析与渲染 |
| 快捷键管理 | `tui/src/keymap_setup/` | 按键绑定配置 |

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

## 架构设计

### 组件层次结构

```mermaid
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]()

### 状态行样式

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

```rust
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` 函数将快捷键条目分配到两列显示：

```rust
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` 结构管理，允许用户自定义按键绑定。

### 按键映射结构

快捷键按功能模块组织：

```mermaid
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
```

### 主要快捷键分类

| 模块 | 功能 | 说明 |
|------|------|------|
| pager | `jump_top`, `jump_bottom`, `close` | 分页导航和关闭 |
| list | `move_up`, `move_down`, `accept` | 列表导航和选择 |
| approval | `approve`, `deny`, `approve_for_session` | 审批操作 |
| chat | `increase_reasoning_effort` | 调整推理强度 |
| composer | `submit`, `queue`, `toggle_shortcuts` | 消息提交 |
| editor | `insert_newline`, `move_*`, `delete_*` | 文本编辑 |

资料来源：[codex-rs/tui/src/keymap_setup/actions.rs:1-80]()

## Markdown 渲染

### 渲染特性

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

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

### 围栏代码块展开

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

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

资料来源：[codex-rs/tui/src/markdown.rs:1-45]()

### 支持的 Markdown 标签

渲染器支持的标签类型：

| 开始标签 | 结束标签 | 说明 |
|----------|----------|------|
| `Tag::Heading` | `TagEnd::Heading` | 标题 |
| `Tag::BlockQuote` | `TagEnd::BlockQuote` | 引用块 |
| `Tag::CodeBlock` | `TagEnd::CodeBlock` | 代码块 |
| `Tag::List` | `TagEnd::List` | 列表 |
| `Tag::Item` | `TagEnd::Item` | 列表项 |
| `Tag::Emphasis` | `TagEnd::Emphasis` | 斜体 |
| `Tag::Strong` | `TagEnd::Strong` | 加粗 |
| `Tag::Link` | - | 链接 |
| `Tag::Table` | `TagEnd::Table` | 表格 |

资料来源：[codex-rs/tui/src/markdown_render.rs:1-80]()

## 配置选项

### TUI 配置文件

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

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

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

### Profile 级别的 TUI 设置

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

| 配置项 | 类型 | 说明 |
|--------|------|------|
| `session_picker_view` | `SessionPickerViewMode` | 恢复/分叉会话选择器的首选布局 |

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

## 测试覆盖

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

- 基本 Markdown 语法
- 嵌套代码块
- 带语言标识的围栏代码块
- 波浪号和反引号围栏
- 缩进代码块
- 定义列表
- 字符实体
- URL 和链接

```rust
#[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 配置文件支持细粒度定制

---

<a id='page-skills'></a>

## 技能系统

### 相关页面

相关主题：[核心Agent模块](#page-core-agent), [Hook系统](#page-hooks)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [codex-rs/core-skills/src/lib.rs](https://github.com/openai/codex/blob/main/codex-rs/core-skills/src/lib.rs)
- [codex-rs/core-skills/src/manager.rs](https://github.com/openai/codex/blob/main/codex-rs/core-skills/src/manager.rs)
- [codex-rs/core-skills/src/loader.rs](https://github.com/openai/codex/blob/main/codex-rs/core-skills/src/loader.rs)
- [.codex/skills/code-review/SKILL.md](https://github.com/openai/codex/blob/main/.codex/skills/code-review/SKILL.md)
- [.codex/skills/codex-bug/SKILL.md](https://github.com/openai/codex/blob/main/.codex/skills/codex-bug/SKILL.md)
</details>

# 技能系统

## 概述

技能系统（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` | 处理技能配置的加载和解析 |

### 架构图

```mermaid
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.md` | Bug 定位与修复技能 |

## 技能管理器

技能管理器（`manager.rs`）是技能系统的核心组件，负责以下职责：

### 主要功能

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

### 管理器状态

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

## 技能加载器

技能加载器（`loader.rs`）负责从文件系统读取和解析技能配置：

### 加载流程

```mermaid
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）来访问技能功能：

```bash
/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：

```xml
<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. **权限考虑**：明确技能所需权限，避免过度授权

## 参考资料

- 技能核心实现：[codex-rs/core-skills/src/lib.rs](https://github.com/openai/codex/blob/main/codex-rs/core-skills/src/lib.rs)
- 技能管理器：[codex-rs/core-skills/src/manager.rs](https://github.com/openai/codex/blob/main/codex-rs/core-skills/src/manager.rs)
- 技能加载器：[codex-rs/core-skills/src/loader.rs](https://github.com/openai/codex/blob/main/codex-rs/core-skills/src/loader.rs)
- 代码审查技能示例：[.codex/skills/code-review/SKILL.md](https://github.com/openai/codex/blob/main/.codex/skills/code-review/SKILL.md)
- Bug 定位技能示例：[.codex/skills/codex-bug/SKILL.md](https://github.com/openai/codex/blob/main/.codex/skills/codex-bug/SKILL.md)
- 斜杠命令定义：[codex-rs/tui/src/slash_command.rs](https://github.com/openai/codex/blob/main/codex-rs/tui/src/slash_command.rs)
- 配置系统集成：[codex-rs/config/src/state.rs](https://github.com/openai/codex/blob/main/codex-rs/config/src/state.rs)

---

<a id='page-plugins'></a>

## 插件系统

### 相关页面

相关主题：[技能系统](#page-skills)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [codex-rs/tui/src/slash_command.rs](https://github.com/openai/codex/blob/main/codex-rs/tui/src/slash_command.rs)
- [codex-rs/README.md](https://github.com/openai/codex/blob/main/codex-rs/README.md)
- [codex-rs/config/src/config_toml.rs](https://github.com/openai/codex/blob/main/codex-rs/config/src/config_toml.rs)
- [codex-rs/config/src/profile_toml.rs](https://github.com/openai/codex/blob/main/codex-rs/config/src/profile_toml.rs)
- [codex-rs/README.md](https://github.com/openai/codex/blob/main/codex-rs/README.md)
</details>

# 插件系统

## 概述

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.toml` 和 `profile.toml` 中的字段控制插件行为：

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

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

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

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

## 命令行接口

### 斜杠命令

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

资料来源：[codex-rs/tui/src/slash_command.rs:行48-55]()

```rust
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 访问由第三方提供的工具和服务。

> 注意：详细配置方法请参阅[配置文档](../docs/config.md#connecting-to-mcp-servers)

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

### MCP 服务器模式（实验性）

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

```shell
codex mcp-server
```

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

## 工作流程图

```mermaid
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 的配置层级架构：

```mermaid
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 服务器以连接外部开发工具：

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

### 场景二：安装应用

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

```shell
/apps install <app-name>
```

### 场景三：浏览插件

```shell
/plugins browse
```

## 相关命令速查

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

## 下一步

- 详细配置方法：参见[配置文档](../docs/config.md)
- 快速入门：参见[入门指南](../docs/getting-started.md)
- MCP 服务器配置：参见 [Model Context Protocol 支持](../docs/config.md#connecting-to-mcp-servers)

---

<a id='page-hooks'></a>

## Hook系统

### 相关页面

相关主题：[技能系统](#page-skills), [核心Agent模块](#page-core-agent)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [codex-rs/hooks/src/lib.rs](https://github.com/openai/codex/blob/main/codex-rs/hooks/src/lib.rs)
- [codex-rs/hooks/src/engine/mod.rs](https://github.com/openai/codex/blob/main/codex-rs/hooks/src/engine/mod.rs)
- [codex-rs/hooks/src/declarations.rs](https://github.com/openai/codex/blob/main/codex-rs/hooks/src/declarations.rs)
- [codex-rs/hooks/schema/generated](https://github.com/openai/codex/blob/main/codex-rs/hooks/schema/generated)
</details>

# 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` | 权限请求时 | 自定义权限审批流程 |
| `Stop` | Codex结束回合前 | 最终清理、状态保存 |

资料来源：[codex-rs/tui/src/history_cell/hook_cell.rs:30-42]()

## Hook输出类型

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

| 输出类型 | 前缀标识 | 含义 |
|----------|----------|------|
| `Warning` | `warning:` | 警告信息，Hook继续执行 |
| `Stop` | `stop:` | 停止当前操作 |
| `Feedback` | `feedback:` | 向用户提供反馈文本 |
| `Context` | `hook context:` | 注入额外上下文信息 |
| `Error` | `error:` | 错误信息，终止操作 |

资料来源：[codex-rs/tui/src/history_cell/hook_cell.rs:12-17]()

## 系统架构

```mermaid
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的配置文件位置遵循以下优先级规则：

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

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

| 配置源 | 配置文件夹位置 |
|--------|----------------|
| System | `file.parent()` |
| User | `file.parent()` |
| Project | `dot_codex_folder`（`.codex/`目录） |
| MDM/SessionFlags | 无专用文件夹 |

资料来源：[codex-rs/config/src/state.rs:140-152]()

### 命名规则

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

## TUI集成

### Hook浏览器视图

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

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

### Hook元数据显示

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

| 显示项 | 来源 | 说明 |
|--------|------|------|
| 源标签 | `HookSource` | System/User/Project等 |
| 插件ID | `plugin_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声明是配置层级的组成部分，支持完整的配置诊断：

```rust
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与工具系统紧密集成：

```mermaid
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行为

## 相关文档

- [配置系统](../config.md) - 了解配置层级
- [权限系统](../permissions.md) - 权限管理详情
- [插件系统](../plugins.md) - 第三方扩展开发
- [TUI快捷键](../keymap.md) - 自定义快捷键配置

---

<a id='page-sandboxing'></a>

## 沙箱与安全

### 相关页面

相关主题：[执行系统](#page-execution)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [codex-rs/tui/src/bottom_pane/approval_overlay.rs](https://github.com/openai/codex/blob/main/codex-rs/tui/src/bottom_pane/approval_overlay.rs)
- [codex-rs/config/src/state.rs](https://github.com/openai/codex/blob/main/codex-rs/config/src/state.rs)
- [codex-rs/config/src/loader/mod.rs](https://github.com/openai/codex/blob/main/codex-rs/config/src/loader/mod.rs)
- [codex-rs/config/src/config_toml.rs](https://github.com/openai/codex/blob/main/codex-rs/config/src/config_toml.rs)
- [codex-rs/config/src/diagnostics.rs](https://github.com/openai/codex/blob/main/codex-rs/config/src/diagnostics.rs)
</details>

# 沙箱与安全

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

## 系统架构概述

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

```mermaid
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]()

### 权限决策类型

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

```rust
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` 函数将文件系统路径转换为用户可读的格式：

```rust
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 提供配置诊断功能，能够检测并报告配置文件中的错误，包括权限相关的配置问题。

```rust
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` |
| Mdm | MDM 配置文件路径 |
| SessionFlags | 无对应文件（None） |

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

## 项目级配置隔离

### 钩子配置文件夹

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

```rust
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. 合并主仓库与工作树的钩子配置

```rust
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()` 判断当前操作是否来自可信来源。可信来源享有更严格的错误报告机制，而不可信来源则采用容错处理。

### 相对路径解析

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

```rust
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_instructions` | bool | 是否注入权限指令 |
| `include_environment_context` | bool | 是否注入环境上下文 |
| `include_apply_patch_tool` | bool | 是否包含补丁应用工具 |
| `experimental_use_freeform_apply_patch` | bool | 自由形式补丁应用（实验性） |

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

### 审批模式显示

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

```rust
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 在执行代码操作时既有足够的灵活性，又不会在未经授权的情况下损害用户系统的完整性。

---

---

## Doramagic 踩坑日志

项目：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

<!-- canonical_name: openai/codex; human_manual_source: deepwiki_human_wiki -->
