本文整理于 2026 年 9 月。Codex 更新较快,命令、界面和功能可用性应以当前客户端的
/菜单、codex --help和 OpenAI 官方文档为准。
Codex 是能够在真实开发环境中工作的编程智能体。它可以理解代码仓库、修改文件、执行命令、运行测试、审查差异,并在获得授权后使用浏览器、MCP 服务和其他外部工具。使用 Codex 的关键不是寻找一条“万能提示词”,而是给它清晰的任务、合适的权限、可靠的项目规则和可验证的完成标准。
一、Codex 安装与基本使用
1.1 选择使用方式
| 使用方式 | 适合场景 | 主要特点 |
|---|---|---|
| Codex CLI | 终端开发、服务器环境、脚本调用 | 离代码、Git 和构建命令最近 |
| IDE 扩展 | 日常编码、局部修改、查看差异 | 能结合当前文件、选区和编辑器上下文 |
| ChatGPT 桌面应用中的 Codex | 多项目管理、并行任务、计划任务、可视化审查 | 支持 Local、Worktree 和 Cloud 等环境 |
| Codex Cloud | 后台执行、耗时测试、远程仓库任务 | 在配置好的云端环境中独立运行 |
简单任务可以直接从 IDE 或 CLI 开始;需要并行任务、Worktree 或计划任务时,桌面应用更方便;需要无人值守执行时,再考虑 Cloud 或 codex exec。
1.2 安装 CLI
先确认本机已经安装 Node.js 和 npm:
node --version
npm --version
使用 npm 全局安装或更新 Codex CLI:
npm install -g @openai/codex@latest
codex --version
codex --help
如果终端提示找不到 codex,先执行 npm config get prefix 查看全局安装目录,并确认该目录已加入 PATH。修改 PATH 后要重新打开终端。公司设备如果限制全局安装,应遵循组织提供的安装方式,不要通过未知安装包绕过限制。
1.3 登录与首次启动
进入项目目录后启动 Codex:
cd <项目目录>
codex
# 从任意位置指定工作目录
codex -C path/to/project
首次启动时按界面提示登录。通常可以使用 ChatGPT 账号;模型、额度和部分功能取决于账号套餐、客户端版本与组织策略。API Key 属于另一种认证方式,不要把 Key 写进代码、提示词或提交到 Git。
启动后建议先运行 /status,确认当前工作目录、模型、权限模式、Git 分支和可用工具是否符合预期。
1.4 交互式使用
# 打开空白会话
codex
# 带着第一条任务进入
codex "阅读项目并说明启动方式、测试入口和主要模块"
一次完整的开发对话可以这样推进:
先只读分析登录失败的原因,不要修改文件。给出调用链和证据。
现在实施最小修复,保持现有 API 兼容,并添加回归测试。
运行相关测试和类型检查,再审查最终 diff,列出剩余风险。
连续补充要求比一次写出超长提示词更容易控制。方向明显变化时,应创建新会话或派生会话,避免旧任务约束干扰新任务。
1.5 非交互式使用
codex exec(简写为 codex e)适合一次性任务、脚本和 CI:
codex exec "运行测试,解释失败原因,不修改代码"
codex e "审查当前工作区改动,按严重程度列出问题"
echo "总结这个仓库的模块边界" | codex exec -
自动化调用应明确输入范围、是否允许修改、验证命令、输出格式、退出条件,以及网络和外部写入权限。需要机器解析结果时,先用 codex exec --help 查看当前版本支持的结构化输出选项。
1.6 恢复、派生与压缩会话
codex resume
codex resume --last
codex exec resume --last "继续完成剩余测试"
codex fork
会话很长时可以使用 /compact 压缩上下文。压缩后最好重申当前目标、已完成内容、剩余任务和验收标准,避免重要约束只存在于早期对话中。
1.7 常用斜杠命令
在输入框中键入 / 可以查看当前版本的完整命令列表。
| 命令 | 用途 |
|---|---|
/status |
查看目录、模型、权限和上下文状态 |
/model |
查看或切换可用模型与推理强度 |
/permissions |
调整当前会话的权限方式 |
/plan |
进入或退出计划模式 |
/review |
审查工作区或指定范围的代码变更 |
/skills |
查看和选择可用 Skills |
/mcp |
查看 MCP 服务和工具状态 |
/memories |
控制当前会话如何使用或生成记忆 |
/compact |
压缩长会话上下文 |
/init |
为代码仓库生成项目指导文件初稿 |
/help |
查看帮助 |
不同客户端和版本的命令可能不同,以实际 / 菜单为准。
二、Codex 功能模块详解
2.1 仓库理解与代码搜索
Codex 可以读取目录结构、配置文件、依赖、测试和调用关系,再根据任务缩小范围。第一次接触仓库时,推荐先让它说明:应用从哪里启动、主要目录负责什么、数据如何流动、验证命令有哪些,以及哪些文件禁止修改。
只读分析当前仓库。说明启动入口、核心模块、主要数据流、测试方式,
并指出最容易引发回归的三个区域。引用具体文件和符号,不要修改代码。
2.2 文件编辑与命令执行
获得相应权限后,Codex 可以编辑文件、运行格式化工具、启动测试、读取日志并根据结果继续修正。为了让修改可控,任务中应明确:
- 允许修改的目录和接口;
- 必须保持不变的行为;
- 是否允许增加依赖或修改锁文件;
- 必须执行哪些检查;
- 什么结果才算完成。
2.3 测试、调试与验证
Codex 可以运行项目已有的单元测试、集成测试、类型检查、Lint 和构建,也可以根据错误信息追踪调用链。可靠的修复流程通常是:
复现问题 → 收集证据 → 定位根因 → 添加失败测试 → 实施最小修复
→ 运行相关检查 → 审查 diff → 报告剩余风险
不要只要求“确保正确”。应该给出可执行命令,或要求 Codex 先从项目配置和 CI 文件中找出真实使用的命令。
2.4 代码审查
Codex 可以审查未提交改动、分支差异或 Pull Request。审查任务最好给出比较基线和关注点:
审查当前分支相对 main 的改动。优先寻找数据丢失、权限绕过、
并发问题、兼容性回退和缺失测试。按严重程度输出,并标明文件位置。
审查结果是额外检查,不替代测试、静态分析和人工审批。安全、支付、权限、数据迁移等高风险变更仍应由具备相应职责的人复核。
2.5 浏览器、网络与外部信息
在客户端和权限允许时,Codex 可以使用网页搜索、浏览器或连接器获取最新资料,也可以检查页面状态、控制台错误和网络请求。需要外部资料时应优先使用官方来源,并区分仓库事实、实际运行结果、外部资料和模型推断。
网络访问和本地文件写入通常是两个独立权限。能够修改工作区不代表能够联网,能够联网也不代表可以向外部系统写数据。
2.6 子智能体与并行工作
对于可以独立处理的任务,Codex 可以把搜索、实现、测试或审查交给子智能体并行完成。例如分别检查前端、后端和测试影响,或在互不重叠的模块中实现独立功能。
强依赖、会修改同一文件或需要连续决策的步骤不适合强行并行。子智能体通常继承主会话的权限边界,因此应在开始前确认权限模式和任务范围。
2.7 扩展能力总览
| 扩展方式 | 解决的问题 | 典型用途 |
|---|---|---|
AGENTS.md |
当前仓库必须遵守什么 | 构建命令、架构规范、完成标准 |
config.toml |
设置运行方式和默认参数 | 模型、权限、MCP、功能开关 |
| Memory | 恢复有用的历史背景 | 个人偏好、反复出现的上下文 |
| Skill | 复用一套完成任务的方法 | 发布检查、迁移流程、文档更新 |
| MCP | 连接外部工具与实时数据 | GitHub、设计工具、内部文档、数据库 |
| Plugin | 分发 Skills、连接器和配置 | 团队级可安装能力包 |
| Hook | 在生命周期节点机械执行检查 | 密钥检查、日志记录、结束时验证 |
| Automation | 按时间或事件重复执行流程 | 定期扫描、发布说明、CI 汇总 |
三、Codex 控制与引导
3.1 控制层次
| 内容 | 放置位置 | 作用范围 |
|---|---|---|
| 本次任务的目标和限制 | 当前提示词 | 当前任务或会话 |
| 仓库长期规范 | AGENTS.md |
当前目录及适用子目录 |
| 个人或项目运行参数 | config.toml |
用户或受信任项目 |
| 跨项目重复流程 | Skill | 被调用的任务 |
| 可恢复的历史背景 | Memory | 后续符合条件的会话 |
| 强制组织策略 | 管理员配置、requirements.toml |
受管理设备或组织 |
显式任务要求通常比记忆更可靠;强制规则应写进版本控制中的 AGENTS.md 或组织策略,不能只依赖记忆。
3.2 写好任务描述
高质量任务至少包含目标、范围、约束、步骤和验收方式:
目标:修复用户退出后刷新页面仍显示已登录的问题。
范围:只修改 auth 和 session 模块,不改变公开 API。
要求:
1. 先复现并说明根因;
2. 添加一个修复前会失败的回归测试;
3. 实施最小修改,不顺手重构;
4. 运行相关测试、类型检查和 Lint;
5. 审查最终 diff,列出修改文件和剩余风险。
如果任务仍然模糊,可以先要求 Codex 提问、列出假设或进入计划模式。不要在提示词中粘贴密码、Token、私钥或真实生产数据。
3.3 使用 AGENTS.md 固化项目规则
AGENTS.md 适合记录团队希望每次任务都遵守的规则。根目录文件适用于整个仓库,更深目录中的文件可以为子树增加更具体的要求。
# AGENTS.md
## 项目结构
- `src/`:业务代码
- `tests/`:自动化测试
- `docs/`:用户文档
## 开发规则
- 使用 TypeScript strict 模式。
- 优先修改现有模块,不增加不必要的依赖。
- 未经任务要求,不修改生成文件和锁文件。
## 验证命令
- 单元测试:`npm test`
- 类型检查:`npm run typecheck`
- 格式检查:`npm run lint`
## 完成标准
- 新行为必须有测试。
- 不得通过跳过或删除失败测试使检查通过。
- 最终说明改动、验证结果和未解决风险。
适合写入的内容包括目录职责、命名规范、构建测试命令、禁止修改区域和完成标准。不适合写入秘密、某次任务的临时要求或无法执行的口号。
3.4 配置 config.toml
用户级配置通常位于 ~/.codex/config.toml;受信任项目可以使用 .codex/config.toml 添加项目级覆盖。
model = "<可用模型名称>"
model_reasoning_effort = "medium"
approval_policy = "on-request"
sandbox_mode = "workspace-write"
[sandbox_workspace_write]
network_access = false
一般优先级是:一次性 CLI 参数高于项目配置,项目配置高于所选配置方案,配置方案高于用户配置。受管理设备还可能受到管理员策略限制。项目级配置只有在项目被信任时才会加载。
3.5 配置方案与临时覆盖
配置方案是放在 Codex Home 中的独立文件。例如创建 ~/.codex/review.config.toml:
approval_policy = "never"
sandbox_mode = "read-only"
再创建 ~/.codex/develop.config.toml:
approval_policy = "on-request"
sandbox_mode = "workspace-write"
codex --profile review
codex --profile develop
codex -c model_reasoning_effort='"high"'
codex exec -c sandbox_mode='"read-only"' "审查当前改动"
配置键会随版本演进,修改前应对照当前配置参考,并使用 codex --help 检查 CLI 参数。
3.6 权限、沙箱与审批
| 模式 | 行为 | 适合场景 |
|---|---|---|
| 只读 | 允许分析和部分只读检查,不修改文件 | 理解仓库、诊断、审查 |
| 工作区写入 | 可以修改当前工作区,越界操作受限 | 日常实现与修复 |
| 请求审批 | 越过边界、联网或高风险操作前暂停 | 推荐的通用方式 |
| 完全访问 | 接近完整系统权限 | 仅用于明确需要且隔离良好的环境 |
删除、覆盖、推送、创建 PR、部署、发送消息和修改外部数据都需要特别复核。允许编辑代码,不等于自动授权发布代码或影响其他人。
3.7 验收和反馈
至少检查 git diff --stat、完整 diff、验证命令结果、失败检查的解释,以及外部写入是否经过授权。反馈时指出具体偏差,例如:
保留当前 API,不要新增 endpoint。测试缺少未登录场景,请补充后只运行 auth 相关测试。
四、Codex 计划模式
4.1 什么是计划模式
计划模式让 Codex 在实施前先收集上下文、提出必要问题、识别约束并整理可执行方案,适合复杂、含糊、跨模块或高风险任务。
在支持的界面中使用 /plan 进入。部分客户端支持 Shift + Tab 切换,具体以当前界面提示为准。计划模式的重点是形成决策和步骤,不是立刻修改代码;如果只希望分析,应明确写出“不要修改文件”。
4.2 适合与不适合的场景
适合先计划:
- 新功能横跨多个模块或服务;
- 需要数据库迁移、接口兼容或分阶段发布;
- 重构范围大,需要保持外部行为不变;
- 需求只有粗略想法,需要澄清边界;
- 风险高,必须先确定回滚和验证方案。
明确的小范围文案修改、简单样式调整、单一命令或已有完整方案的任务,通常不需要单独计划。
4.3 可执行计划的组成
好的计划应明确:当前状态、目标和非目标、关键假设、涉及模块、实施顺序、依赖关系、测试与兼容方案、回滚方式、待用户决定的问题,以及各阶段验收标准。
进入计划模式,先阅读现有支付和订单模块,不修改文件。
为“订单部分退款”制定实施计划,重点说明:
- 状态机和数据库字段变化;
- 旧 API 的兼容方式;
- 幂等与并发风险;
- 数据迁移、灰度和回滚步骤;
- 单元测试与集成测试范围。
不确定的业务规则请列为待确认问题,不要自行假设。
4.4 从计划进入实施
计划确认后,给出清晰边界:
按已确认计划实施第 1 和第 2 阶段。不要执行生产迁移,
不要推送远程分支。每阶段完成后运行对应测试并更新进度。
实施中如果发现关键假设错误,应暂停并更新计划,而不是为了保持原计划继续扩大修改。
4.5 PLAN.md 与 ExecPlans
短任务的计划保留在会话中即可。跨多天、多个会话或多人协作的任务,可以保存为 PLAN.md,或按照仓库约定使用 ExecPlan 文档。
长期计划应记录任务背景、最终状态、里程碑、关键决策、当前阻塞、验证结果和下一步。计划文档要持续更新,避免会话已经改变方向而仓库计划仍是旧版本。
五、Codex 代码管理
5.1 修改前确认状态
git status --short
git branch --show-current
git log -5 --oneline
工作区已有未提交改动时,应把它们视为用户工作,不要擅自清理、覆盖、暂存或回退。任务范围与现有改动重叠时,应先说明风险。
5.2 分支策略
git switch -c fix/session-refresh
推荐为独立任务建立独立分支,并保持提交主题单一。Codex 可以协助拟定分支名和提交信息,但创建提交、推送远程和发起 PR 是不同授权层次。
5.3 Local、Worktree 与 Cloud
| 环境 | 文件位置 | 适合场景 |
|---|---|---|
| Local | 直接使用当前本地项目 | 单任务、需要频繁在 IDE 中参与 |
| Worktree | 隔离的 Git 工作树 | 并行任务、后台任务、不干扰本地修改 |
| Cloud | 远程环境中的独立副本 | 耗时任务、远程执行、云端 PR 流程 |
Worktree 共享 Git 元数据,但有独立工作目录。同一个分支不能同时在两个 Worktree 中检出。被 Git 忽略的本地文件默认不会自动出现;确需复制时可按客户端支持方式使用 .worktreeinclude,但不要随意复制生产密钥。
5.4 查看和审查改动
git diff --stat
git diff
git diff --staged
git diff main...HEAD
在 Codex 中可运行 /review,也可以附带重点:
/review Focus on authentication boundaries, error handling, and missing tests.
发现问题后先修复,再重新运行相关测试和 /review,不要只修改描述或忽略结论。
5.5 提交与 Pull Request
提交前应确保改动范围正确、验证已运行、没有秘密和临时文件,并让提交信息说明修改原因。
git add <明确的文件路径>
git diff --staged
git commit -m "fix: clear stale session after logout"
避免在混有用户改动时无脑使用 git add .。PR 描述建议包括背景、实现摘要、验证结果、截图或迁移说明,以及剩余风险。
5.6 回退与恢复
优先使用可恢复的方法:先看 diff,只恢复明确文件或补丁块;已共享提交优先通过新提交修复或 git revert 回退。不要用 git reset --hard、强制推送或批量删除处理不清楚的状态。
5.7 推荐工作流
确认仓库状态 → 建立分支或 Worktree → 只读分析 → 明确验收标准
→ 实施最小改动 → 运行验证 → 审查 diff → 人工确认
→ 提交 → 推送 → 创建 PR → 根据审查继续修改
风险越高,越不应把实现、提交、推送和部署合并成一次不可见的自动操作。
六、Codex 记忆系统
6.1 记忆解决什么问题
Codex 记忆用于把历史会话中的有用背景带到后续任务,例如稳定偏好、常用工作方式或反复出现的项目背景。它用于减少重复说明,不取代项目文档和强制规则。
- 必须执行的仓库规则:
AGENTS.md; - 可复用的任务方法:Skill;
- 当前任务要求:提示词;
- 有帮助但不是强制规则的历史背景:Memory。
6.2 启用本地记忆
本地记忆默认可能处于关闭状态,可在支持的桌面应用设置中开启,或在 config.toml 中配置:
[features]
memories = true
[memories]
generate_memories = true
use_memories = true
disable_on_external_context = true
| 配置 | 作用 |
|---|---|
generate_memories |
允许符合条件的会话成为记忆输入 |
use_memories |
允许未来会话使用已有记忆 |
disable_on_external_context |
使用 MCP、网页搜索等外部上下文时不生成记忆 |
记忆配置仍可能演进,实际键值应以当前配置参考为准。
6.3 按会话控制
在支持的 TUI 或桌面界面中使用 /memories,分别决定当前会话能否读取已有记忆,以及能否作为未来记忆的来源。会话级选择不会自动改变全局配置。
处理客户代码、敏感调查或不希望长期保留的内容时,应关闭相应能力。
6.4 存储位置与生成方式
本地记忆通常存放在:
~/.codex/memories/
其中可能包含摘要、持久条目、近期输入和支持证据。这些是自动生成的状态数据,可以排障时检查,但不应把手工编辑当作主要管理方式。
记忆往往在会话空闲后后台整理,并不保证结束对话后立刻出现。短会话、仍在活动或不符合配置条件的会话可能不会生成记忆。
6.5 适合与不适合记忆的内容
适合:稳定输出偏好、多次任务都会用到的非敏感背景、常见工具链和验证习惯。
不适合:密码和 Token、必须绝对执行的合规规则、高频变化的外部事实、仅对当前任务有效的临时决定,以及未经核实的推断。
显式提示和当前仓库事实应优先于旧记忆。发现冲突时,应重新读取项目并以当前证据为准。
6.6 隐私与分享
不要把秘密交给记忆系统。即使客户端会尝试移除生成字段中的秘密,在分享 ~/.codex、排障包或记忆文件前仍应人工检查。
ChatGPT 网页记忆与本地 Codex 记忆不是同一个存储层。IDE 扩展通常使用其连接的 Codex 主机上的本地记忆,因此更换电脑或远程主机后,可用记忆可能不同。
七、Codex 扩展能力概览
7.1 Plugin、MCP、Hook、Automation 与 Skill
| 能力 | 核心职责 | 是否连接外部系统 |
|---|---|---|
| Plugin | 可安装、可分发的能力包 | 可以包含连接器或 MCP |
| MCP | 把实时工具和数据暴露给 Codex | 通常是 |
| Hook | 在生命周期事件执行脚本或工具 | 可选 |
| Automation | 按时间或事件启动任务 | 取决于任务内容 |
| Skill | 定义任务应该如何完成 | 本身不一定连接外部系统 |
一个 Plugin 可以打包 Skills、连接器、MCP 配置、Hooks、资源和计划任务模板。Skill 负责“方法”,MCP 负责“能力与数据”,Automation 负责“何时运行”。
八、Codex 与 MCP:连接外部工具和上下文
MCP(Model Context Protocol,模型上下文协议)是一套让 AI 客户端连接外部工具和数据的标准协议。在 Codex 中,MCP 用来扩展可调用的工具与可访问的上下文:Codex 作为 Host 管理会话、模型、权限和审批,并通过 MCP Client 发现、调用 MCP Server 提供的能力。它解决的是“Codex 如何以统一、可描述、可授权的方式使用模型之外的能力”。
例如,连接 MCP Server 后,Codex 可以在授权范围内查询团队文档、读取设计稿、搜索代码托管平台、操作浏览器、查询数据库,或调用内部业务服务。如果数据已经在当前仓库中,直接读取文件通常更简单;如果只是查询一次公开信息,网页搜索可能更合适;需要稳定、结构化或带身份认证的外部能力时,才值得接入 MCP。
8.1 Codex 中的 MCP 架构
用户
↓ 提出任务
Codex(Host)
↓ 管理模型、权限和会话
MCP Client
↓ 通过协议连接
MCP Server
↓ 调用真实系统
文档、浏览器、GitHub、数据库、内部 API……
三个主要角色:
- Host:承载会话、模型、审批、沙箱和用户界面;
- MCP Client:负责连接、能力发现、请求与响应;
- MCP Server:描述并执行外部能力,返回结构化结果。
一个 Codex Host 可以同时连接多个 MCP Server,一个 Server 也可以提供多个工具。典型调用流程如下:
- Codex 根据配置启动本地 Server,或连接远程 Server;
- 双方初始化并交换支持能力;
- Codex 获取 Server 提供的工具和说明;
- 用户提出任务,模型判断是否需要工具;
- 客户端按照审批策略直接调用或请求确认;
- Server 执行操作并返回结果;
- 模型结合工具结果继续推理。
模型不能借助 MCP 任意执行操作,只能从客户端实际开放的工具中选择,并传入符合工具定义的参数。
8.2 Codex 可使用的 MCP 能力
从协议概念上看,MCP 可以围绕以下能力组织服务:
| 能力 | 含义 | 示例 |
|---|---|---|
| Tools | 可调用的操作 | 搜索文档、读取 Issue、创建记录 |
| Resources | 可读取的上下文资源 | 文件、文档、数据库条目 |
| Prompts | Server 提供的提示模板 | 固定格式的审查或分析流程 |
| Instructions | 整个 Server 的使用说明 | 工具顺序、限制、速率规则 |
客户端不一定支持协议中的全部能力。对 Codex 而言,应以 /mcp 实际显示的工具和当前官方说明为准。
工具描述会直接影响模型能否正确选用工具。描述应明确说明工具做什么、何时使用、所需参数、是否写入外部状态、失败情况和返回内容。例如,“按订单 ID 读取订单摘要,只读,不返回支付凭据”就比“处理订单”更安全、明确。
Codex 可以读取 Server 初始化时返回的 instructions。Server 维护者可在其中说明跨工具流程、操作限制和速率限制。最重要的规则应放在开头,并让前几百个字符可以独立表达核心约束。Instructions 不能替代客户端审批和服务端权限校验。
8.3 Codex 连接 MCP Server 的方式
Codex 支持两种常见连接方式:
| 连接方式 | 工作原理 | 适合场景 |
|---|---|---|
| STDIO | Codex 启动本地进程,通过标准输入输出通信 | 本地开发工具、npm/Python 包、个人工作流 |
| Streamable HTTP | Codex 通过 URL 访问远程服务 | 团队服务、SaaS、OAuth、多用户共享 |
STDIO 无需开放端口,配置简单,但安装它相当于在本机执行该 Server 的程序,必须审查来源和依赖。Streamable HTTP 适合集中升级、监控和权限管理,生产环境应使用 HTTPS;本机回环地址调试除外。
8.4 Codex MCP 的配置位置
Codex 将 MCP 配置放在 config.toml 中:
用户级:~/.codex/config.toml
项目级:<repo>/.codex/config.toml
用户级配置适合个人跨项目使用的服务;项目级配置适合当前仓库共享的服务。出于安全考虑,只有项目被信任时,Codex 才加载项目级 .codex 配置。
连接到同一 Codex Host 的桌面应用、CLI 和 IDE 扩展可以共享 MCP 配置。ChatGPT Web 不会直接读取本机 ~/.codex/config.toml。
8.5 使用 Codex CLI 添加和检查 Server
# 添加本地 STDIO Server
codex mcp add <server-name> -- <server-command>
# 携带环境变量
codex mcp add <server-name> --env TOKEN=<value> -- <server-command>
# 查看配置和帮助
codex mcp list
codex mcp --help
# 登录支持 OAuth 的远程 Server
codex mcp login <server-name>
PowerShell 多行命令使用反引号,而不是 Bash 的反斜杠:
codex mcp add docs-server `
--env DOCS_TOKEN=$env:DOCS_TOKEN `
-- npx -y <mcp-package>
直接在命令行传入秘密可能进入终端历史。更稳妥的方式是先设置环境变量,再在配置中只引用变量名。
进入 Codex 后使用 /mcp,检查 Server 是否启用、是否初始化成功、是否需要 OAuth,以及实际提供了哪些工具。
8.6 为 Codex 配置 STDIO Server
[mcp_servers.local_docs]
command = "npx"
args = ["-y", "<mcp-package>"]
cwd = "C:/path/to/project"
env_vars = ["DOCS_TOKEN"]
startup_timeout_sec = 20
tool_timeout_sec = 60
enabled = true
required = false
[mcp_servers.local_docs.env]
LOG_LEVEL = "info"
LANGUAGE = "zh-CN"
| 字段 | 作用 |
|---|---|
command |
启动 Server 的程序,STDIO 必需 |
args |
传给程序的参数数组 |
cwd |
Server 启动时的工作目录 |
env |
直接为 Server 设置环境变量 |
env_vars |
从当前环境转发指定变量 |
startup_timeout_sec |
Server 初始化超时 |
tool_timeout_sec |
单次工具调用超时 |
enabled |
是否启用 Server |
required |
初始化失败时是否让 Codex 启动失败 |
env 适合非敏感固定配置;真实 Token 应通过 env_vars 引用,不能写进可提交文件。可选辅助工具通常不应设置 required = true,否则临时故障可能阻止整个 Codex 会话启动。
8.7 为 Codex 配置 Streamable HTTP 与 OAuth
[mcp_servers.team_tools]
url = "https://mcp.example.com/mcp"
bearer_token_env_var = "TEAM_MCP_TOKEN"
http_headers = { "X-Region" = "cn-east" }
env_http_headers = { "X-Workspace-Token" = "WORKSPACE_TOKEN" }
startup_timeout_sec = 20
tool_timeout_sec = 60
enabled = true
| 字段 | 作用 |
|---|---|
url |
远程 MCP 地址,HTTP 模式必需 |
auth |
认证方式 |
bearer_token_env_var |
从环境变量读取 Bearer Token |
http_headers |
固定 HTTP Header,仅放非敏感值 |
env_http_headers |
从环境变量读取 Header 值 |
远程 Server 支持 OAuth 时运行:
codex mcp login <server-name>
普通使用者通常只需在浏览器中确认正确的服务域名、账号和授权范围。授权前要检查 Scope,避免把只读查询授权成写入、删除或管理员权限。
认证只回答“当前用户是谁”,授权才决定“这个用户可以做什么”。即使 Token 有效,MCP Server 仍必须在服务端校验每次操作,不能只相信模型或客户端参数。
8.8 Codex 的工具白名单与审批
工具很多时应只开放任务需要的能力:
[mcp_servers.browser_tools]
url = "http://127.0.0.1:3000/mcp"
enabled_tools = ["open_page", "read_console", "screenshot"]
disabled_tools = ["screenshot"]
default_tools_approval_mode = "writes"
enabled = true
[mcp_servers.browser_tools.tools.open_page]
approval_mode = "approve"
[mcp_servers.browser_tools.tools.create_record]
approval_mode = "prompt"
enabled_tools 是允许列表;disabled_tools 是拒绝列表,并在允许列表之后应用。上例中的 screenshot 最终仍然被禁用。
审批模式的常见取值:
| 值 | 含义 |
|---|---|
auto |
由 Codex 和当前策略决定 |
prompt |
调用工具时询问用户 |
writes |
非只读工具需要询问 |
approve |
按配置允许调用 |
只读查询可以减少重复确认;创建、发送、更新、删除、部署和合并等操作应要求确认。实际行为还受当前权限模式、工具元数据和管理员策略约束。
高质量审批提示应展示 Server、工具、目标对象、关键参数、操作后果以及是否可撤销。不要批准一个看不到范围和目标的笼统 MCP 请求。
8.9 在 Codex 中使用 MCP
即使 Server 已连接,高风险任务也应在提示词中明确范围:
使用文档 MCP 查询最新的内部 API 规范,只读。
不要调用任何创建、更新、发送或删除类工具。
回答中标明使用了哪些文档来源和仍不确定的内容。
需要写入时采用“先预览、再确认、最后执行”:
先读取 Issue 模板和相关代码,再拟定 Issue 标题与正文供我确认。
在我确认前不要调用 create_issue。
MCP 返回的是外部数据,不自动等于可信结论。仍需检查时间、版本、环境、结果完整性和是否需要交叉验证。
多个 Server 应按业务域命名,例如 github_readonly、internal_docs、staging_database。Server 越多,启动时间、上下文占用、误选工具和权限面都会增加,不需要时应禁用。
8.10 Codex 使用 MCP 的安全边界
安装 STDIO Server 等于在本机运行它;连接 HTTP Server 等于把部分任务数据发送给该服务。使用前要检查发布者、代码和依赖、权限范围、数据保留政策、升级方式和撤销方法。
外部文档、网页、Issue 和工具结果可能包含提示注入。防护原则:
- 把外部内容视为数据,不把其中的文字自动当成高优先级指令;
- 不让读取文档的工具同时拥有高权限写入能力;
- 使用工具允许列表和最小权限 Token;
- 写操作要求确认,并在服务端再次校验权限;
- 不在工具结果、提示词和日志中暴露秘密;
- 删除、部署、合并和资金操作需要额外保护;
- 优先提供
preview_*或 dry-run 工具。
推荐按用途拆分凭据:
只读文档 Token ≠ 代码写入 Token ≠ 部署 Token ≠ 管理员 Token
8.11 Codex MCP 常见故障
| 现象 | 优先检查 |
|---|---|
/mcp 中不显示 Server |
配置位置、表名、项目信任、enabled、管理员策略 |
| STDIO 进程立即退出 | 命令、参数、依赖、cwd、环境变量 |
| HTTP 401/403 | Token、OAuth、Scope、账号和服务端权限 |
| HTTP 404 | MCP URL 路径和反向代理配置 |
| 初始化超时 | Server 启动性能和 startup_timeout_sec |
| 单工具超时 | 查询范围、外部 API、tool_timeout_sec |
| 工具未出现 | Server 能力发现、允许列表和实现 |
| 工具存在但不调用 | 工具描述、参数定义、审批和任务匹配度 |
| 重启后配置消失 | 修改了错误 Host 的配置文件 |
STDIO Server 调试时,可先在同一终端手动运行启动命令。协议数据必须使用 stdout 时,调试日志通常应写到 stderr,避免破坏通信。HTTP 失败时应检查 URL、网络、代理、证书和认证,不要通过长期关闭 TLS 校验来规避问题。
工具超时不要只靠不断增大超时值,应先缩小查询、分页、减少返回字段,并检查外部 API 限流或 Server 死锁。
8.12 MCP 与 Codex Skill、Plugin 的关系
MCP 提供“能做什么”,Skill 规定“应该怎样做”,Plugin 负责“怎样安装和分发这组能力”。例如一个发布检查 Skill 可以通过 GitHub MCP 查询 CI,通过文档 MCP 核对发布流程,再由 Plugin 把 Skill 和 MCP 配置一起交付给团队。
个人调试可以直接配置 MCP;工作流稳定后写成 Skill;需要跨团队安装、统一升级或同时分发 Hooks、连接器和资源时,再打包成 Plugin。
九、Codex 插件、Hooks 与自动化
9.1 Plugins
Plugin 是可安装的分发单元,可以把相关能力一次交付给个人或团队。
my-plugin/
├── .codex-plugin/
│ └── plugin.json # 必需:插件清单
├── skills/ # 可选:Skills
├── .app.json # 可选:应用或连接器映射
├── .mcp.json # 可选:MCP 配置
├── hooks/ # 可选:生命周期 Hooks
└── assets/ # 可选:图标、截图等资源
可从支持界面的插件目录安装现有 Plugin。创建自定义 Plugin 时,可以使用内置 plugin creator;CLI 中通常通过 $plugin-creator 调用,支持 @ 选择器的界面可从对应列表中选择。
安装前要审查清单、权限、连接器、MCP、Hooks 和依赖。功能没有出现时,依次检查插件是否启用、连接器授权、MCP 初始化、工作空间策略,以及是否需要重启或新建会话。
9.2 Hooks
Hooks 在 Codex 生命周期的特定节点运行脚本或 MCP 工具,适合机械执行:
- 提交提示词前检查 API Key;
- 工具调用前阻止危险命令;
- 工具执行后记录审计信息;
- 会话结束前运行验证;
- 压缩上下文前后保存必要状态。
常见位置:
~/.codex/hooks.json
~/.codex/config.toml
<repo>/.codex/hooks.json
<repo>/.codex/config.toml
项目 Hooks 通常只在项目被信任时加载。多个来源的匹配 Hook 可能都会执行,而不是由高优先级简单覆盖。启用第三方 Hook 前必须阅读脚本。
9.3 计划任务与线程自动化
在支持的桌面应用中,可以为稳定流程设置计划任务,选择项目、提示词、运行频率和执行环境。Git 仓库中的后台任务适合在专用 Worktree 中运行。
适合自动化的任务包括:汇总提交、扫描回归、草拟发布说明、汇总 CI 失败、检查文档更新和生成团队摘要。部分客户端和账号还支持由已连接应用事件触发任务;事件来源、过滤条件和授权范围必须明确。
先人工运行并稳定流程 → 把方法整理成 Skill → 再设置计划或事件触发
如果每次运行仍需大量临时解释,说明流程还不适合自动化。
9.4 CLI 与 CI 自动化
codex exec `
-c sandbox_mode='"read-only"' `
"审查当前改动,输出潜在回归和缺少的测试"
if ($LASTEXITCODE -ne 0) {
throw "Codex 检查失败"
}
CI 中应使用最小权限凭据,固定输入、输出、超时和失败策略;默认只读,需要写入时使用隔离分支;对日志脱敏。AI 审查不替代测试和人工审批,自动合并或部署需要额外保护条件。
9.5 自动化安全检查表
- 任务已人工成功运行过多次;
- 输入、输出和结束条件明确;
- 使用独立分支、Worktree 或隔离环境;
- 网络、MCP、文件和外部写入权限最小化;
- 凭据来自安全存储,不在提示词和日志中出现;
- 失败会停止并通知,而不是静默继续;
- 创建 PR、合并和部署是分开的授权步骤;
- 有人工审查、审计记录和恢复方案。
十、Codex Skills
10.1 Skill 是什么
Skill 是一套可复用的任务说明和配套资源,用来告诉 Codex 某类工作应该怎样完成,适合步骤稳定、需要统一格式或专门参考资料的工作流。
Skill 使用渐进式加载:Codex 启动时主要看到名称、描述和位置;当任务与描述匹配或用户显式调用时,才读取完整 SKILL.md。因此,description 决定能否被发现,正文决定被选中后如何执行。
10.2 目录结构
my-skill/
├── SKILL.md # 必需:元数据和完整说明
├── scripts/ # 可选:可执行脚本
├── references/ # 可选:按需读取的参考资料
├── assets/ # 可选:模板、示例文件、图像等
└── agents/
└── openai.yaml # 可选:界面、调用策略和工具依赖
只需说明步骤时,保持单个 SKILL.md 即可。只有确定性操作需要时才增加脚本;大段资料放入 references/,不要让主说明无限膨胀。
10.3 创建 Skill
$skill-creator
也可以手动创建:
---
name: release-check
description: 在准备发布版本时检查版本号、变更日志、测试和构建产物;不用于日常代码审查,也不自动发布。
---
# 发布检查
1. 阅读发布说明、版本配置和当前 diff。
2. 确认版本号、标签和变更日志一致。
3. 运行项目规定的测试与构建命令。
4. 检查生成产物和未提交文件。
5. 输出通过项、阻塞项和建议操作。
6. 未经明确授权,不创建标签、不推送、不发布。
name 应简短稳定;description 要在开头写明核心用途、触发词和边界。只写“帮助处理发布”过于模糊。
10.4 显式与隐式调用
- 显式调用:使用
/skills选择,或在提示词中写$skill-name; - 隐式调用:任务与
description匹配时,由 Codex 自动选择。
显式调用适合必须使用固定流程的任务;隐式调用适合边界清晰、误触发风险低的工作流。高风险 Skill 可通过可选元数据关闭隐式调用。
10.5 Skill 的加载位置
| 范围 | 位置 | 适合用途 |
|---|---|---|
| 当前目录 | $CWD/.agents/skills |
某个模块或子项目 |
| 仓库上级目录 | $CWD/../.agents/skills |
嵌套仓库共享区域 |
| 仓库根目录 | $REPO_ROOT/.agents/skills |
团队共享并纳入版本控制 |
| 当前用户 | $HOME/.agents/skills |
个人跨项目复用 |
| 管理员 | /etc/codex/skills |
机器或容器统一提供 |
| 系统 | Codex 内置 | 通用系统 Skills |
Codex 会从当前目录向仓库根目录扫描。两个 Skill 使用相同 name 时不会自动合并,因此应避免名称冲突。
10.6 怎样写好 SKILL.md
一份好 Skill 应包含适用与排除场景、输入要求、执行步骤、参考资料加载条件、允许与禁止操作、验证和失败处理,以及最终输出格式。
- 用命令式、可验证的步骤,不写空泛愿景;
- 不复制项目已有的
AGENTS.md内容; - 不写秘密、账号或环境专属绝对路径;
- 脚本保持小、确定、可审查,并校验参数;
- 参考资料按需加载,避免挤占上下文;
- 危险操作默认停在预览或报告阶段。
10.7 如何选择
| 需求 | 最合适的方式 |
|---|---|
| 只在这一次任务中有效 | 提示词 |
| 当前仓库长期遵守的规则 | AGENTS.md |
| 可跨项目复用的工作步骤 | Skill |
| 访问外部实时数据或执行外部操作 | MCP 或连接器 |
| 向团队分发多个 Skills 和工具 | Plugin |
| 到固定时间重复运行 | Automation |
| 在生命周期节点机械执行 | Hook |
这些方式可以组合:AGENTS.md 规定测试命令,Skill 规定发布检查步骤,MCP 读取发布状态,Automation 定期触发,Plugin 再统一分发。
10.8 测试和维护 Skill
创建后至少测试三类请求:应该触发的标准任务、不应该触发的相似任务、输入缺失或工具失败的异常任务。检查是否遗漏步骤、误用工具、范围过大或输出不稳定。
[[skills.config]]
path = "/path/to/skill/SKILL.md"
enabled = false
更新后如果未被发现,可以重启客户端或新建会话。本地编写和调试直接维护 Skill 目录即可;跨团队安装、统一升级,或与 MCP、Hooks 一起交付时,应打包成 Plugin。
10.9 官方参考
推荐核对顺序:当前客户端的命令菜单与设置 → 本机
codex --help→ OpenAI 官方文档。命令、配置项和功能可用范围都可能随版本更新。