OpenAI 终端编码 Agent 深度解析 -- 从架构到实战逐层拆解
OpenAI 出品的终端编码 Agent,Apache-2.0 开源,本地运行,支持 ChatGPT 订阅额度和 API Key 两种认证方式。
Codex CLI 是 OpenAI 的官方 CLI 编码 Agent,定位为本地运行的轻量级终端助手。它能读取仓库代码、执行 shell 命令、编辑文件,并在沙箱内安全运行。与 ChatGPT 桌面端的 Codex 功能互补,CLI 侧重开发者工作流和CI/CD 集成。
| 版本 | 语言 | 目录 | 状态 | 说明 |
|---|---|---|---|---|
| 旧版 | TypeScript | codex-cli/ | 维护模式 | 初始实现,npm 安装 |
| 新版 | Rust | codex-rs/ | 主力开发 | 30+ crate 的 monorepo,Bazel 构建,原生二进制 |
| 形态 | 入口 | 说明 |
|---|---|---|
| CLI (TUI) | codex | 全屏终端 UI,Ratatui 构建,主力交互方式 |
| Headless / Exec | codex exec | 无头模式,适用于脚本和 CI/CD |
| IDE 扩展 | VS Code / Cursor / Windsurf | 编辑器内集成 |
| Desktop App | codex app | macOS 桌面应用 |
| Cloud (Web) | chatgpt.com/codex | 云端 Agent,异步执行任务 |
| 方式 | 命令 | 说明 |
|---|---|---|
| ChatGPT 登录 | codex login | Plus / Pro / Team / Edu / Enterprise 订阅额度,推荐方式 |
| API Key | codex login --with-api-key | 使用 OpenAI API Key,CI 场景用 CODEX_API_KEY 环境变量 |
| Device Auth | codex login --device-auth | 设备授权流 |
三足鼎立格局:Codex CLI 的差异化在于 Rust 原生性能 + ChatGPT 生态 + 严格沙箱。与 Claude Code 的 TypeScript + Hooks 体系不同,Codex 走的是"原生二进制 + 系统级沙箱"路线。三者的 AGENTS.md / CLAUDE.md / GEMINI.md 分别代表了各自的"项目记忆"设计哲学。
Rust monorepo 结构,30+ crate 分工明确,core 库 + TUI/Exec/CLI 三层入口。
Codex-rs 采用 Cargo workspace 组织,每个 crate 职责单一。以下按功能域分类:
| Crate | 职责 | 关键特性 |
|---|---|---|
core | Agent Loop 核心业务逻辑 | 可复用库 crate,驱动 TUI 和 Exec 两种模式 |
tui | 全屏终端 UI | 基于 Ratatui 框架,语法高亮,Diff 预览,主题系统 |
exec | 无头 CLI | CI/CD 场景,JSONL 输出,Schema 验证 |
cli | 多工具入口 | 聚合所有子命令(tui/exec/app/mcp/login/cloud...) |
config | TOML 配置管理 | Profile 支持,JSON Schema 校验 |
execpolicy | 执行策略引擎 | .rules 文件,execve(2) 拦截 |
mcp-server | MCP Server 模式 | Codex 自身作为 MCP Server 暴露给其他 Agent |
rmcp-client | MCP Client | 连接外部 MCP Server(STDIO / HTTP) |
apply-patch | 文件补丁引擎 | 模型输出的 Diff 应用到文件系统 |
linux-sandbox | Linux 沙箱 | Landlock + seccomp / Bubblewrap 可选 |
process-hardening | 进程加固 | 限制子进程能力 |
ollama | Ollama 集成 | 本地开源模型运行 |
lmstudio | LM Studio 集成 | 本地模型 GUI 接入 |
otel | OpenTelemetry | OTLP 遥测导出,企业可观测性 |
app-server | 应用服务器 | WebSocket / stdio 协议,供桌面/IDE 使用 |
network-proxy | 网络代理 | 代理配置与流量路由 |
login | 认证 | ChatGPT OAuth / API Key / Device Auth |
keyring-store | 凭证存储 | 系统密钥链集成 |
架构哲学:Codex 的 core crate 被设计为可复用的库,TUI 和 Exec 只是 core 的两种"前端"。这与 Claude Code 的 TypeScript 单体架构不同 -- Codex 通过 Rust 的 crate 边界天然实现了模块解耦。core 封装了 Agent Loop、工具调用、审批逻辑,任何上层都可以直接复用。
从 Shell 执行到多 Agent 协作,Codex CLI 的十大核心能力拆解。
所有 shell 命令在沙箱内执行,根据 --sandbox 策略限制文件系统和网络访问。
| 沙箱模式 | 文件访问 | 网络 | 命令执行 |
|---|---|---|---|
read-only | 只读 | 阻断 | 需审批 |
workspace-write | 工作区内读写 | 默认阻断 | 工作区内自动执行 |
danger-full-access | 全系统 | 开启 | 全部自动执行 |
沙箱通过 shell-command crate 执行命令,execpolicy crate 进行 execve(2) 拦截和规则匹配。
文件编辑通过 apply-patch crate 实现,模型生成 Diff 格式的补丁,引擎负责将其精确应用到文件系统。
.git/、.agents/、.codex/ 目录为只读/diff 命令查看当前 Git diff(包含未跟踪文件)Web 搜索是 Codex 的一等公民工具,与 shell/file 并列为核心 tool,不依赖外部 MCP。
| 模式 | 配置 | 说明 |
|---|---|---|
| cached(默认) | web_search = "cached" | 使用 OpenAI 维护的索引,降低 Prompt Injection 风险 |
| live | web_search = "live" 或 --search | 实时获取当前页面内容 |
| disabled | web_search = "disabled" | 完全关闭 |
安全提醒:live 模式下,Agent 可能被引导访问包含恶意指令的页面(Prompt Injection),建议在敏感环境使用 cached 模式。
专用审查模式,只读分析不修改工作树。支持多种审查目标:
通过 -i / --image 标志附加截图或设计稿:
支持 PNG、JPEG 格式,多个文件用逗号分隔。也支持从剪贴板粘贴图片。
| 操作 | 命令 | 说明 |
|---|---|---|
| 恢复最近 | codex resume --last | 跳转到最近一次会话 |
| 选择恢复 | codex resume | 打开会话选择器 |
| 恢复指定 | codex resume <SESSION_ID> | 通过 ID 恢复 |
| 分叉 | codex fork / /fork | 分叉当前会话到新线程,保留原始记录 |
| 清屏 | /clear | 清除终端并开始新对话 |
| 新建 | /new | 在同一终端会话内开始新对话 |
| 压缩 | /compact | 摘要当前对话以释放 token |
会话数据存储在本地 SQLite 中,路径可通过 sqlite_home 配置或 CODEX_SQLITE_HOME 环境变量指定。
通过 config.toml 的 [agents] 部分配置多个角色 Agent,实现任务并行化。
/agent 命令切换活动 Agent 线程/ps 命令查看后台终端进度多 Agent 功能仍处于实验阶段,需通过 Feature Flag 开启。适用于大型重构或跨模块任务拆分。
通过 /apps 命令浏览和安装 ChatGPT Apps(连接器)。在 Composer 中用 $app-slug 引用已安装的 App。
codex app:打开 macOS 桌面应用/theme 命令预览并保存主题。TUI 支持 fenced markdown 代码块和 diff 的语法高亮。
.tmTheme 文件,放置于 $CODEX_HOME/themes//personality 命令选择回复风格:friendly / pragmatic / noneAgent 完成一轮后触发通知 hook,支持桌面通知。通知配置在 config.toml 中设置,Hooks crate 管理生命周期事件。
工具一等公民化:Codex 将 Web 搜索和代码审查提升为内置一等公民工具,而非依赖外部 MCP 扩展。这与 Claude Code 依赖 WebFetch/WebSearch 工具的策略不同。内置意味着更紧密的集成和更低的延迟,但也牺牲了灵活性。
$trigger 机制打通 ChatGPT 生态三层审批 + 三层沙箱 + 平台级隔离,Codex 的安全体系是其最大差异化优势之一。
通过 --ask-for-approval 标志或 /permissions 命令控制:
| 模式 | CLI 标志 | 行为 | 适用场景 |
|---|---|---|---|
| untrusted | --ask-for-approval untrusted | 自动执行已知安全的只读操作;破坏性 Git 操作、状态变更、外部执行需审批 | 默认安全浏览 |
| on-request | --ask-for-approval on-request | 仅在沙箱升级、网络访问、受信集合外的命令时请求审批 | 日常开发(Auto 模式默认) |
| never | --ask-for-approval never | 不弹出审批提示,完全在沙箱约束内运行 | CI/CD 自动化 |
快捷预设:--full-auto = workspace-write + on-request,一键进入高效开发模式。
| 策略 | 文件访问 | 网络 | 受保护路径 |
|---|---|---|---|
read-only | 全局只读 | 阻断 | N/A |
workspace-write(默认) | 工作区内读写 | 默认阻断(可配置开启) | .git/ .agents/ .codex/ 只读 |
danger-full-access | 全系统读写 | 开启 | 无保护 |
使用 sandbox-exec -p [profile] 通过 Apple Seatbelt 策略进行进程隔离。
--sandbox 模式自动选择/System 等必要访问默认使用 Landlock + seccomp 内核安全模块:
features.use_linux_sandbox_bwrap = trueDocker 注意:容器内需要宿主/容器都支持 Landlock 和 seccomp。不支持时需回退到 --dangerously-bypass-approvals-and-sandbox。
WSL 模式(推荐):继承 Linux 沙箱语义(Landlock + seccomp)。
Native Windows:配置驱动的沙箱。
/sandbox-add-read-dir 命令:在 Windows 上授予额外目录读权限execpolicy crate 实现了 execve(2) 拦截和 .rules 文件规则匹配。Shell Tool 的每次命令执行都经过策略引擎评估。
| 组件 | 功能 |
|---|---|
execpolicy | 当前版本的执行策略引擎 |
execpolicy-legacy | 旧版策略支持(兼容性) |
shell-escalation | 权限提升处理 |
process-hardening | 进程安全加固 |
管理员通过 Managed Configuration 设置工作区级别的安全策略,强制执行组织合规要求。配合 OpenTelemetry 实现审计追踪:
遥测覆盖:对话记录、API 请求、审批决策、工具执行结果。支持 service.name、CLI 版本、环境标签等元数据。
安全哲学差异:Codex 的安全模型是"系统级沙箱 + 审批模式"双保险。沙箱通过 OS 内核机制强制执行(Seatbelt / Landlock),即使审批设为 never 也有硬性边界。这与 Claude Code 的"Hooks 拦截 + Permission 配置"软性安全模型形成鲜明对比 -- Codex 更偏"不可绕过的内核级隔离"。
requirements.toml 强制执行安全策略config.toml 完整参数、AGENTS.md 三层加载、MCP 双向支持、10+ 模型提供商。
配置文件位于 ~/.codex/config.toml,支持 JSON Schema 校验。
CLI 管理命令:
使用 Profile:codex --profile ci "run tests"
| 变量 | 说明 |
|---|---|
CODEX_API_KEY | API Key(仅 codex exec 支持) |
CODEX_HOME | 配置主目录(默认 ~/.codex) |
CODEX_SQLITE_HOME | SQLite 存储目录 |
VISUAL / EDITOR | 外部编辑器(Ctrl+G 打开) |
RUST_LOG | Rust 日志级别调试 |
优先检查 AGENTS.override.md,然后 AGENTS.md。只使用第一个非空文件。
提供跨仓库的持久默认规则,如编码风格、安全约束、团队规范。
从项目根目录向下遍历到当前工作目录,每个目录检查 AGENTS.override.md 然后 AGENTS.md。
每个目录最多包含一个文件。支持通过 project_doc_fallback_filenames 配置回退文件名。
project_doc_max_bytes = 32768(32 KiB)调试技巧:运行 codex --ask-for-approval never "总结当前指令" 确认加载了哪些 AGENTS.md 文件。
Codex 在 ~/.codex/memories/ 中存储持久记忆,跨会话积累项目知识。与 AGENTS.md 的"显式指令"不同,记忆是 Agent 在使用过程中自动学习的上下文。
| 角色 | 说明 | 命令 |
|---|---|---|
| MCP Client | 连接外部 MCP Server 扩展工具集 | codex mcp add ... |
| MCP Server | Codex 自身作为 MCP Server 暴露给其他 Agent | codex mcp-server |
| 提供商 | 说明 | 配置方式 |
|---|---|---|
| OpenAI | 默认,支持数据驻留选项 | ChatGPT 登录或 API Key |
| OpenRouter | 多模型路由聚合 | API Key + base_url |
| Azure OpenAI | 企业级 Azure 部署 | 自定义 endpoint |
| Ollama | 本地开源模型 | --oss 标志 |
| LM Studio | 本地模型 GUI | base_url 配置 |
| Gemini | Google Gemini API | API Key + base_url |
| Mistral | Mistral AI | API Key + base_url |
| DeepSeek | DeepSeek API | API Key + base_url |
| xAI (Grok) | xAI Grok 模型 | API Key + base_url |
| Groq | 高速推理 | API Key + base_url |
| Arcee AI | 企业 AI 平台 | API Key + base_url |
开放生态:Codex 支持 10+ 模型提供商 + MCP 双向集成,这是目前三大 CLI Agent 中模型兼容性最广的。--oss 标志可一键切换到本地 Ollama 模型,实现完全离线运行。MCP Server 模式让 Codex 本身也能被其他 Agent 调用,形成多 Agent 编排的基础设施。
--oss 一键切本地模型安装方式、CLI 命令、Slash 命令、快捷键、CI/CD 集成 -- 从入门到生产环境实战。
| 方式 | 命令 | 说明 |
|---|---|---|
| npm | npm install -g @openai/codex | 最常用 |
| Homebrew | brew install --cask codex | macOS Cask |
| yarn | yarn global add @openai/codex | Yarn 全局安装 |
| pnpm | pnpm add -g @openai/codex | pnpm 全局安装 |
| bun | bun add -g @openai/codex | Bun 全局安装 |
| GitHub Release | 下载平台二进制 | macOS arm64/x86_64, Linux x86_64/arm64 |
| DotSlash | Release 中的 codex 文件 | 跨平台单文件分发 |
| 源码编译 | git clone + cargo build | Rust 工具链 |
| Nix | default.nix | Nix 包定义 |
| 命令 | 状态 | 说明 |
|---|---|---|
codex [PROMPT] | Stable | 启动 TUI,可选初始提示 |
codex exec [PROMPT] | Stable | 非交互执行,流式输出到 stdout |
codex app [PATH] | Stable | 打开 macOS 桌面应用 |
codex resume [ID] | Stable | 恢复之前的会话 |
codex fork [ID] | Stable | 分叉会话到新线程 |
codex login | Stable | 认证(ChatGPT / API Key / Device Auth) |
codex logout | Stable | 登出 |
codex features | Stable | 管理 Feature Flags(list/enable/disable) |
codex completion SHELL | Stable | 生成补全脚本(bash/zsh/fish/powershell/elvish) |
codex apply TASK_ID | Stable | 应用 Cloud 任务的 diff 到本地 |
codex mcp | Experimental | 管理 MCP Server(list/add/get/remove) |
codex mcp-server | Experimental | 以 MCP Server 模式运行 |
codex cloud | Experimental | 管理 Cloud 任务(exec/list) |
codex sandbox | Experimental | 沙箱测试(Seatbelt / Landlock) |
codex app-server | Experimental | 启动应用服务器(stdio / WebSocket) |
codex execpolicy check | Experimental | 检查执行策略规则 |
| 标志 | 类型 | 说明 |
|---|---|---|
--model, -m | string | 指定模型(如 gpt-5.4) |
--sandbox, -s | enum | read-only | workspace-write | danger-full-access |
--ask-for-approval, -a | enum | untrusted | on-request | never |
--full-auto | bool | 快捷预设:workspace-write + on-request |
--image, -i | paths | 附加图片(逗号分隔多个) |
--search | bool | 启用 live Web 搜索 |
--cd, -C | path | 设置工作目录 |
--add-dir | path | 授予额外目录写权限 |
--profile, -p | string | 加载配置 Profile |
--oss | bool | 使用本地开源模型(Ollama) |
--json | bool | JSONL 输出格式 |
--ephemeral | bool | 不持久化 rollout 文件 |
--color | enum | always | never | auto |
--output-last-message, -o | path | 将最终消息写入文件 |
--output-schema | path | JSON Schema 验证输出 |
--config, -c | key=value | 覆盖配置值 |
--enable / --disable | feature | 开启/关闭 Feature Flag |
--yolo | bool | 跳过所有安全检查(仅隔离环境) |
--no-alt-screen | bool | 禁用备用屏幕模式 |
--skip-git-repo-check | bool | 允许非 Git 目录 |
| 命令 | 说明 |
|---|---|
/review | 代码审查(只读分析) |
/model | 切换模型和推理强度 |
/permissions | 设置审批模式 |
/theme | 预览并保存主题 |
/personality | 选择回复风格(friendly/pragmatic/none) |
/fork | 分叉当前对话 |
/resume | 恢复已保存的会话 |
/new | 在同一终端内新建对话 |
/clear | 清屏并开始新对话 |
/compact | 摘要对话以释放 token |
/copy | 复制最新完成的输出 |
/diff | 显示 Git diff(含未跟踪文件) |
/mention | 附加文件到对话 |
/plan | 切换到计划模式 |
/agent | 切换活动 Agent 线程 |
/apps | 浏览/安装 ChatGPT Apps |
/mcp | 列出已配置的 MCP 工具 |
/init | 生成 AGENTS.md 脚手架 |
/ps | 查看后台终端 |
/feedback | 向维护者发送日志 |
/status | 显示会话配置和 token 用量 |
/statusline | 交互式配置状态栏字段 |
/debug-config | 打印配置层和 requirements 诊断 |
/experimental | 切换实验性功能 |
/logout | 登出 |
/exit / /quit | 退出 CLI |
/sandbox-add-read-dir | 授予目录读权限(Windows) |
| 快捷键 | 说明 |
|---|---|
Ctrl+G | 打开外部编辑器($VISUAL / $EDITOR)编辑长提示 |
Ctrl+L | 清屏但不开始新对话 |
Ctrl+C x2 | 双击退出 |
Esc x2 | 编辑前一条用户消息;继续按可回溯历史 |
Tab | 排队后续提示,等当前 turn 完成后自动发送 |
Enter(执行中) | 注入中途指令 |
Up/Down | 浏览草稿历史 |
@ | 模糊文件搜索(Tab/Enter 插入路径) |
! | 前缀运行本地 shell 命令 |
$ | 引用已安装的 ChatGPT App |
codex exec 是 CI/CD 场景的核心命令,进度输出到 stderr,最终结果输出到 stdout。
CI 认证最佳实践:在 CI 中使用 CODEX_API_KEY 环境变量(仅 codex exec 支持),设置为 GitHub Secrets。配合 --sandbox read-only --ask-for-approval never 实现最安全的自动化。
CI 就绪度:Codex 的 exec 模式 + JSONL 输出 + Schema 验证 + Cloud 任务 构成了完整的 CI/CD 工具链。对比 Claude Code 的 --print 模式,Codex 的 --output-schema JSON Schema 验证是一个独特优势 -- 可以确保 Agent 输出符合下游系统期望的结构。Cloud 任务的 best-of-N 机制(最多 4 次尝试取最优)也是非常实用的可靠性保障。
codex exec + --output-schema + Cloud 任务Codex CLI Deep Dive
M0 项目概览 -> M1 核心架构 -> M2 功能模块 -> M3 安全与沙箱 -> M4 配置与扩展 -> M5 使用指南
6 模块 / 30+ Crate / 3 层沙箱 / 10+ 提供商 / 2026-03(官方文档同步)
Information Sources:
github.com/openai/codex developers.openai.com/codex CLI Features CLI Reference Slash Commands Approvals & Security AGENTS.md Guide Non-interactive Mode