Codex 从入门到进阶

Codex 从入门到进阶:安装、工作空间、权限、Git、AGENTS.md、Skills 与 MCP 完整教程

本文主要记录 OpenAI Codex 的学习和实际使用过程,从 Windows 环境搭建开始,逐步介绍 Codex 的工作空间、权限管理、上下文、计划模式、Git、AGENTS.md、Skills 和 MCP。

如果你之前只是把 AI 当成"聊天机器人"来写代码,那么使用 Codex 后最大的变化是:AI 不只是告诉你代码怎么写,而是能够真正进入项目、读取文件、修改代码、执行命令、运行测试,并完成一整个开发任务。


一、Codex 前置准备:安装开发环境

在正式使用 Codex 之前,建议先准备几个基本开发工具:

软件 作用 是否必须
Git 版本控制、查看代码修改、回滚代码 强烈建议
Node.js JavaScript / TypeScript 项目以及部分 MCP 工具 按项目需要
VS Code 手动查看和编辑代码 推荐
Codex / ChatGPT Desktop AI Agent 主程序 必需
Python Python 项目和部分自动化工具 按项目需要
GitHub CLI GitHub PR、仓库操作 可选

需要特别说明的是:

Node.js 并不是运行 Codex 桌面应用的绝对前提。

如果你主要写 Python、Java 或 C++,完全可以不用 Node.js。

但很多前端项目、npm 工具以及 MCP Server 都依赖 Node.js,所以对于刚开始使用 Codex 的人,我还是建议安装。


1.1 安装 Git

Git 下载地址:

text 复制代码
https://git-scm.com/?hl=zh-cn

Git 是整个 AI Coding 工作流里非常重要的工具。

因为 Codex 会直接修改我们的项目代码,如果没有 Git,一旦 AI 改错了几十个文件,就很难知道:

text 复制代码
AI 到底改了什么?

哪些文件被改了?

某一段代码原来是什么?

怎么恢复到修改之前?

而 Git 正好解决这个问题。

因此可以把它简单理解为:

text 复制代码
Codex = 帮你改代码的人

Git = 帮你记录每一次代码变化的人

下载安装程序后:

点击:

text 复制代码
Click here to download

即可下载安装包。

对于新手来说,Git 安装过程中的绝大多数选项保持默认即可。

安装完成后按:

text 复制代码
Win + R

输入:

text 复制代码
cmd

然后运行:

bash 复制代码
git --version

如果出现类似:

text 复制代码
git version 2.xx.x.windows.x

就说明 Git 安装成功。

第一次使用 Git,还可以设置用户名和邮箱:

bash 复制代码
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"

查看当前配置:

bash 复制代码
git config --global --list

1.2 安装 Node.js

Node.js 下载地址:

text 复制代码
https://nodejs.org/zh-cn

建议新手直接选择 LTS 长期支持版本

安装完成以后,同样打开 CMD:

bash 复制代码
node -v

如果出现:

text 复制代码
v22.x.x

或者其他版本号,就说明 Node.js 已经安装成功。

注意:

text 复制代码
node -v

其中 node-v 之间有一个空格。

同时建议检查 npm:

bash 复制代码
npm -v

npm 是 Node.js 的包管理工具。

以后我们安装一些开发工具时,经常会看到:

bash 复制代码
npm install

或者:

bash 复制代码
npm install -g xxx

它们本质上都是在通过 npm 安装软件包。


1.3 安装 VS Code

VS Code 下载地址:

text 复制代码
https://code.visualstudio.com/

Codex 可以直接帮我们修改代码,但在开发过程中,我们仍然经常需要:

text 复制代码
自己查看代码

搜索变量

查看项目目录

下断点

手动修改少量代码

安装扩展

因此还是建议安装 VS Code。

VS Code 中文化

打开 VS Code 左侧的 Extensions。

搜索:

text 复制代码
Chinese

安装:

text 复制代码
Chinese (Simplified) Language Pack for Visual Studio Code

安装完成后重新启动 VS Code 即可。


1.4 安装 Codex

Codex 官方入口:

text 复制代码
https://openai.com/zh-Hans-CN/codex/

目前 Windows 用户可以通过 Microsoft Store 等方式安装桌面客户端。

如果电脑无法正常使用 Microsoft Store,也可以考虑使用 Codex CLI。

首先确保 Node.js 已经安装,然后执行:

bash 复制代码
npm install -g @openai/codex

安装完成后运行:

bash 复制代码
codex

即可启动 Codex CLI。

Codex CLI 同样可以:

  • 读取代码
  • 修改文件
  • 执行命令
  • 查看 Git Diff
  • 运行测试
  • 完成代码 Review

因此即使不能正常使用桌面版,也仍然可以通过 CLI 使用 Codex。


二、Codex 的核心功能模块

在正式操作之前,先理解 Codex 和普通聊天 AI 最大的区别。

普通 ChatGPT 的典型过程是:

text 复制代码
你提出问题
    ↓
AI 回答
    ↓
你复制代码
    ↓
自己修改项目

Codex 则更像:
#mermaid-svg-dwI5iMTyUxTOwPT4{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-dwI5iMTyUxTOwPT4 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-dwI5iMTyUxTOwPT4 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-dwI5iMTyUxTOwPT4 .error-icon{fill:#552222;}#mermaid-svg-dwI5iMTyUxTOwPT4 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-dwI5iMTyUxTOwPT4 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-dwI5iMTyUxTOwPT4 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-dwI5iMTyUxTOwPT4 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-dwI5iMTyUxTOwPT4 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-dwI5iMTyUxTOwPT4 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-dwI5iMTyUxTOwPT4 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-dwI5iMTyUxTOwPT4 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-dwI5iMTyUxTOwPT4 .marker.cross{stroke:#333333;}#mermaid-svg-dwI5iMTyUxTOwPT4 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-dwI5iMTyUxTOwPT4 p{margin:0;}#mermaid-svg-dwI5iMTyUxTOwPT4 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-dwI5iMTyUxTOwPT4 .cluster-label text{fill:#333;}#mermaid-svg-dwI5iMTyUxTOwPT4 .cluster-label span{color:#333;}#mermaid-svg-dwI5iMTyUxTOwPT4 .cluster-label span p{background-color:transparent;}#mermaid-svg-dwI5iMTyUxTOwPT4 .label text,#mermaid-svg-dwI5iMTyUxTOwPT4 span{fill:#333;color:#333;}#mermaid-svg-dwI5iMTyUxTOwPT4 .node rect,#mermaid-svg-dwI5iMTyUxTOwPT4 .node circle,#mermaid-svg-dwI5iMTyUxTOwPT4 .node ellipse,#mermaid-svg-dwI5iMTyUxTOwPT4 .node polygon,#mermaid-svg-dwI5iMTyUxTOwPT4 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-dwI5iMTyUxTOwPT4 .rough-node .label text,#mermaid-svg-dwI5iMTyUxTOwPT4 .node .label text,#mermaid-svg-dwI5iMTyUxTOwPT4 .image-shape .label,#mermaid-svg-dwI5iMTyUxTOwPT4 .icon-shape .label{text-anchor:middle;}#mermaid-svg-dwI5iMTyUxTOwPT4 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-dwI5iMTyUxTOwPT4 .rough-node .label,#mermaid-svg-dwI5iMTyUxTOwPT4 .node .label,#mermaid-svg-dwI5iMTyUxTOwPT4 .image-shape .label,#mermaid-svg-dwI5iMTyUxTOwPT4 .icon-shape .label{text-align:center;}#mermaid-svg-dwI5iMTyUxTOwPT4 .node.clickable{cursor:pointer;}#mermaid-svg-dwI5iMTyUxTOwPT4 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-dwI5iMTyUxTOwPT4 .arrowheadPath{fill:#333333;}#mermaid-svg-dwI5iMTyUxTOwPT4 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-dwI5iMTyUxTOwPT4 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-dwI5iMTyUxTOwPT4 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-dwI5iMTyUxTOwPT4 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-dwI5iMTyUxTOwPT4 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-dwI5iMTyUxTOwPT4 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-dwI5iMTyUxTOwPT4 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-dwI5iMTyUxTOwPT4 .cluster text{fill:#333;}#mermaid-svg-dwI5iMTyUxTOwPT4 .cluster span{color:#333;}#mermaid-svg-dwI5iMTyUxTOwPT4 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-dwI5iMTyUxTOwPT4 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-dwI5iMTyUxTOwPT4 rect.text{fill:none;stroke-width:0;}#mermaid-svg-dwI5iMTyUxTOwPT4 .icon-shape,#mermaid-svg-dwI5iMTyUxTOwPT4 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-dwI5iMTyUxTOwPT4 .icon-shape p,#mermaid-svg-dwI5iMTyUxTOwPT4 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-dwI5iMTyUxTOwPT4 .icon-shape .label rect,#mermaid-svg-dwI5iMTyUxTOwPT4 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-dwI5iMTyUxTOwPT4 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-dwI5iMTyUxTOwPT4 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-dwI5iMTyUxTOwPT4 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 提出任务
Codex 读取项目
分析代码
修改文件
执行命令
运行测试
检查结果
向用户汇报

所以 Codex 更准确的定位是:

能够操作真实开发环境的 Coding Agent。


2.1 创建工作空间

Codex 的一个重要概念就是:

text 复制代码
Project / Workspace

也就是让 Codex 知道:

你现在到底在操作哪个项目?

你可以创建一个本地文件夹作为项目,也可以直接将已有项目拖入 Codex。

例如:

text 复制代码
D:\Projects\my-blog

项目目录结构可能是:

text 复制代码
my-blog/
├── src/
├── public/
├── package.json
├── README.md
└── AGENTS.md

当这个目录成为 Codex 的工作空间以后,Codex 就可以读取这些文件,并在允许的权限范围内进行修改。

目前 Codex 的任务环境可以简单理解为:

text 复制代码
Local

Worktree

Cloud

其中:

text 复制代码
Local
直接修改当前项目。

Worktree
建立一个隔离的 Git 工作树,在不直接影响当前代码的情况下完成任务。

Cloud
在远程环境执行任务。

2.2 不使用项目

如果任务比较简单,例如:

text 复制代码
解释一段代码

生成一个正则表达式

写一个 Python 小脚本

其实没有必要绑定整个项目。

此时可以直接创建普通对话。

一个简单的使用原则是:

text 复制代码
一次性问题
→ 新建普通对话

需要持续修改代码
→ 创建项目

复杂项目并行开发
→ Project + Worktree

2.3 多任务并行

Codex 比较有意思的一点是:

可以同时开启多个任务。

例如一个网站项目,可以同时运行:

text 复制代码
任务 1:修改首页

任务 2:修复登录 Bug

任务 3:补单元测试

任务 4:检查代码质量

而不是:

text 复制代码
等任务 1 完成
→ 再执行任务 2
→ 再执行任务 3

对于复杂项目,这种并行工作方式非常有用。

尤其是配合 Git Worktree,可以让不同任务在相互隔离的代码环境中执行,从而减少代码冲突。


2.4 对话归档

随着使用时间增加,对话会越来越多。

对于已经完成、不需要经常查看的任务,可以进行归档。

归档以后:

text 复制代码
当前对话列表
        ↓
对话消失
        ↓
Archived Chats

但归档并不等于删除。

之后仍然可以进入:

text 复制代码
Archived Chats

恢复对应的对话。


三、Codex 最重要的功能之一:权限管理

很多第一次使用 Coding Agent 的人容易忽略一个问题:

AI 到底能操作我电脑上的哪些东西?

Codex 不只是生成文本。

它还可能执行:

bash 复制代码
npm install
git add .
python main.py

甚至可能涉及:

text 复制代码
读取文件

修改文件

删除文件

联网下载依赖

执行脚本

修改项目配置

因此权限系统非常重要。

Codex 的权限控制核心建立在:

text 复制代码
Sandbox

也就是 沙箱

可以简单理解成:
#mermaid-svg-k0LhupYSlncnI260{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-k0LhupYSlncnI260 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-k0LhupYSlncnI260 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-k0LhupYSlncnI260 .error-icon{fill:#552222;}#mermaid-svg-k0LhupYSlncnI260 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-k0LhupYSlncnI260 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-k0LhupYSlncnI260 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-k0LhupYSlncnI260 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-k0LhupYSlncnI260 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-k0LhupYSlncnI260 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-k0LhupYSlncnI260 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-k0LhupYSlncnI260 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-k0LhupYSlncnI260 .marker.cross{stroke:#333333;}#mermaid-svg-k0LhupYSlncnI260 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-k0LhupYSlncnI260 p{margin:0;}#mermaid-svg-k0LhupYSlncnI260 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-k0LhupYSlncnI260 .cluster-label text{fill:#333;}#mermaid-svg-k0LhupYSlncnI260 .cluster-label span{color:#333;}#mermaid-svg-k0LhupYSlncnI260 .cluster-label span p{background-color:transparent;}#mermaid-svg-k0LhupYSlncnI260 .label text,#mermaid-svg-k0LhupYSlncnI260 span{fill:#333;color:#333;}#mermaid-svg-k0LhupYSlncnI260 .node rect,#mermaid-svg-k0LhupYSlncnI260 .node circle,#mermaid-svg-k0LhupYSlncnI260 .node ellipse,#mermaid-svg-k0LhupYSlncnI260 .node polygon,#mermaid-svg-k0LhupYSlncnI260 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-k0LhupYSlncnI260 .rough-node .label text,#mermaid-svg-k0LhupYSlncnI260 .node .label text,#mermaid-svg-k0LhupYSlncnI260 .image-shape .label,#mermaid-svg-k0LhupYSlncnI260 .icon-shape .label{text-anchor:middle;}#mermaid-svg-k0LhupYSlncnI260 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-k0LhupYSlncnI260 .rough-node .label,#mermaid-svg-k0LhupYSlncnI260 .node .label,#mermaid-svg-k0LhupYSlncnI260 .image-shape .label,#mermaid-svg-k0LhupYSlncnI260 .icon-shape .label{text-align:center;}#mermaid-svg-k0LhupYSlncnI260 .node.clickable{cursor:pointer;}#mermaid-svg-k0LhupYSlncnI260 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-k0LhupYSlncnI260 .arrowheadPath{fill:#333333;}#mermaid-svg-k0LhupYSlncnI260 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-k0LhupYSlncnI260 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-k0LhupYSlncnI260 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-k0LhupYSlncnI260 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-k0LhupYSlncnI260 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-k0LhupYSlncnI260 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-k0LhupYSlncnI260 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-k0LhupYSlncnI260 .cluster text{fill:#333;}#mermaid-svg-k0LhupYSlncnI260 .cluster span{color:#333;}#mermaid-svg-k0LhupYSlncnI260 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-k0LhupYSlncnI260 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-k0LhupYSlncnI260 rect.text{fill:none;stroke-width:0;}#mermaid-svg-k0LhupYSlncnI260 .icon-shape,#mermaid-svg-k0LhupYSlncnI260 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-k0LhupYSlncnI260 .icon-shape p,#mermaid-svg-k0LhupYSlncnI260 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-k0LhupYSlncnI260 .icon-shape .label rect,#mermaid-svg-k0LhupYSlncnI260 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-k0LhupYSlncnI260 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-k0LhupYSlncnI260 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-k0LhupYSlncnI260 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 需要批准
需要批准
默认受限制
你的电脑
Codex Sandbox
项目文件夹
允许执行的命令
项目外文件
网络访问
系统其他区域


3.1 默认权限

默认模式可以简单理解为:

text 复制代码
Codex 可以在当前项目范围内完成大部分开发工作。

如果需要突破当前权限边界,则向用户请求授权。

例如:

text 复制代码
修改 src/app.js
→ 通常允许

运行 npm test
→ 通常允许

修改项目之外的重要文件
→ 请求授权

进行部分网络操作
→ 可能请求授权

默认模式比较适合日常开发。

因为它在:

text 复制代码
开发效率

和:

text 复制代码
安全性

之间进行了平衡。


3.2 自动审查

如果 Agent 经常需要额外权限,每一次都弹出:

text 复制代码
是否允许?

是否允许?

是否允许?

使用体验会比较差。

因此 Codex 提供了类似自动审查的权限机制。

它并不是:

直接把所有权限都给 AI。

更接近于:
#mermaid-svg-4Qcm86YKPOIUE7YE{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-4Qcm86YKPOIUE7YE .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-4Qcm86YKPOIUE7YE .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-4Qcm86YKPOIUE7YE .error-icon{fill:#552222;}#mermaid-svg-4Qcm86YKPOIUE7YE .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-4Qcm86YKPOIUE7YE .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-4Qcm86YKPOIUE7YE .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-4Qcm86YKPOIUE7YE .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-4Qcm86YKPOIUE7YE .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-4Qcm86YKPOIUE7YE .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-4Qcm86YKPOIUE7YE .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-4Qcm86YKPOIUE7YE .marker{fill:#333333;stroke:#333333;}#mermaid-svg-4Qcm86YKPOIUE7YE .marker.cross{stroke:#333333;}#mermaid-svg-4Qcm86YKPOIUE7YE svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-4Qcm86YKPOIUE7YE p{margin:0;}#mermaid-svg-4Qcm86YKPOIUE7YE .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-4Qcm86YKPOIUE7YE .cluster-label text{fill:#333;}#mermaid-svg-4Qcm86YKPOIUE7YE .cluster-label span{color:#333;}#mermaid-svg-4Qcm86YKPOIUE7YE .cluster-label span p{background-color:transparent;}#mermaid-svg-4Qcm86YKPOIUE7YE .label text,#mermaid-svg-4Qcm86YKPOIUE7YE span{fill:#333;color:#333;}#mermaid-svg-4Qcm86YKPOIUE7YE .node rect,#mermaid-svg-4Qcm86YKPOIUE7YE .node circle,#mermaid-svg-4Qcm86YKPOIUE7YE .node ellipse,#mermaid-svg-4Qcm86YKPOIUE7YE .node polygon,#mermaid-svg-4Qcm86YKPOIUE7YE .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-4Qcm86YKPOIUE7YE .rough-node .label text,#mermaid-svg-4Qcm86YKPOIUE7YE .node .label text,#mermaid-svg-4Qcm86YKPOIUE7YE .image-shape .label,#mermaid-svg-4Qcm86YKPOIUE7YE .icon-shape .label{text-anchor:middle;}#mermaid-svg-4Qcm86YKPOIUE7YE .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-4Qcm86YKPOIUE7YE .rough-node .label,#mermaid-svg-4Qcm86YKPOIUE7YE .node .label,#mermaid-svg-4Qcm86YKPOIUE7YE .image-shape .label,#mermaid-svg-4Qcm86YKPOIUE7YE .icon-shape .label{text-align:center;}#mermaid-svg-4Qcm86YKPOIUE7YE .node.clickable{cursor:pointer;}#mermaid-svg-4Qcm86YKPOIUE7YE .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-4Qcm86YKPOIUE7YE .arrowheadPath{fill:#333333;}#mermaid-svg-4Qcm86YKPOIUE7YE .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-4Qcm86YKPOIUE7YE .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-4Qcm86YKPOIUE7YE .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-4Qcm86YKPOIUE7YE .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-4Qcm86YKPOIUE7YE .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-4Qcm86YKPOIUE7YE .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-4Qcm86YKPOIUE7YE .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-4Qcm86YKPOIUE7YE .cluster text{fill:#333;}#mermaid-svg-4Qcm86YKPOIUE7YE .cluster span{color:#333;}#mermaid-svg-4Qcm86YKPOIUE7YE div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-4Qcm86YKPOIUE7YE .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-4Qcm86YKPOIUE7YE rect.text{fill:none;stroke-width:0;}#mermaid-svg-4Qcm86YKPOIUE7YE .icon-shape,#mermaid-svg-4Qcm86YKPOIUE7YE .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-4Qcm86YKPOIUE7YE .icon-shape p,#mermaid-svg-4Qcm86YKPOIUE7YE .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-4Qcm86YKPOIUE7YE .icon-shape .label rect,#mermaid-svg-4Qcm86YKPOIUE7YE .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-4Qcm86YKPOIUE7YE .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-4Qcm86YKPOIUE7YE .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-4Qcm86YKPOIUE7YE :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 低风险
风险较高
Codex 需要额外权限
发起权限申请
自动安全审查
允许执行
要求人工确认

这里要注意:

自动审查并不等于完全访问。

它只是减少部分低风险操作的人工审批步骤。


3.3 完全访问权限

还有一种权限等级:

text 复制代码
Full Access

也就是完全访问。

这种模式需要谨慎使用。

因为 Agent 一旦拥有比较高的系统权限,理论上可能执行:

text 复制代码
删除文件

修改系统配置

安装软件

覆盖目录

执行脚本

访问更多系统资源

所以个人建议:

日常开发优先使用默认权限,需要特定能力时再单独授权,不建议长期保持 Full Access。


四、上下文压缩:为什么聊久了 AI 会"忘事"?

4.1 什么是上下文?

AI 模型并不是拥有无限记忆。

一次会话中的:

text 复制代码
你的问题

AI 的回答

项目代码

Terminal 输出

文件内容

工具执行结果

历史操作

都会消耗模型的 Context Window,也就是上下文窗口。

可以简单理解成:

text 复制代码
┌───────────────────────────┐
│       模型上下文窗口        │
├───────────────────────────┤
│ 项目说明                    │
│ 用户问题                    │
│ AI 回复                     │
│ 源代码                      │
│ Terminal 输出               │
│ 历史操作                    │
│ ......                         │
└───────────────────────────┘

随着对话越来越长,上下文空间会逐渐被占满。


4.2 自动压缩

Codex 可以自动进行 Context Compaction,也就是上下文压缩。

其基本逻辑可以理解为:

text 复制代码
大量历史信息
        ↓
提取重要内容
        ↓
生成压缩后的上下文
        ↓
继续执行任务

压缩并不是简单地:

text 复制代码
删除全部历史

而是尽量保留:

text 复制代码
项目目标

关键决策

当前进度

重要限制

后续任务

4.3 手动压缩

也可以主动执行:

text 复制代码
/compact

但这里需要注意:

并不能简单认为:

清空一定优于压缩。

更合理的策略是:

text 复制代码
任务目标没变,只是聊天太长
→ /compact

已经换成一个完全不同的任务
→ New Chat

AI 已经明显被错误历史带偏
→ New Chat

需要保留项目长期规则
→ 写入 AGENTS.md

因此可以总结成一句话:

短期信息放 Context,长期规则放 AGENTS.md


五、Steer:在 Agent 工作时纠正它

Codex 有一个非常实用的能力:

text 复制代码
Steer

可以理解为:

AI 还没有完成任务时,你可以继续对它进行控制和引导。

例如你让 Codex:

text 复制代码
重新设计这个登录页面。

它正在工作时,你发现:

text 复制代码
它准备把整个 UI 组件库都换掉。

这显然不是我们的本意。

这时就应该及时进行 Steer:

text 复制代码
停止替换 UI 组件库。

只修改当前 Login 页面。

保持现有技术栈和组件不变。

而不是让它:

text 复制代码
继续运行
→ 修改几十个文件
→ 最后才发现方向错了

所以 AI Agent 的正确工作方式不是:

text 复制代码
Prompt
↓
等待
↓
接受结果

而应该是:
#mermaid-svg-x3IpQzRs7DMe9br8{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-x3IpQzRs7DMe9br8 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-x3IpQzRs7DMe9br8 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-x3IpQzRs7DMe9br8 .error-icon{fill:#552222;}#mermaid-svg-x3IpQzRs7DMe9br8 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-x3IpQzRs7DMe9br8 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-x3IpQzRs7DMe9br8 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-x3IpQzRs7DMe9br8 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-x3IpQzRs7DMe9br8 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-x3IpQzRs7DMe9br8 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-x3IpQzRs7DMe9br8 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-x3IpQzRs7DMe9br8 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-x3IpQzRs7DMe9br8 .marker.cross{stroke:#333333;}#mermaid-svg-x3IpQzRs7DMe9br8 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-x3IpQzRs7DMe9br8 p{margin:0;}#mermaid-svg-x3IpQzRs7DMe9br8 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-x3IpQzRs7DMe9br8 .cluster-label text{fill:#333;}#mermaid-svg-x3IpQzRs7DMe9br8 .cluster-label span{color:#333;}#mermaid-svg-x3IpQzRs7DMe9br8 .cluster-label span p{background-color:transparent;}#mermaid-svg-x3IpQzRs7DMe9br8 .label text,#mermaid-svg-x3IpQzRs7DMe9br8 span{fill:#333;color:#333;}#mermaid-svg-x3IpQzRs7DMe9br8 .node rect,#mermaid-svg-x3IpQzRs7DMe9br8 .node circle,#mermaid-svg-x3IpQzRs7DMe9br8 .node ellipse,#mermaid-svg-x3IpQzRs7DMe9br8 .node polygon,#mermaid-svg-x3IpQzRs7DMe9br8 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-x3IpQzRs7DMe9br8 .rough-node .label text,#mermaid-svg-x3IpQzRs7DMe9br8 .node .label text,#mermaid-svg-x3IpQzRs7DMe9br8 .image-shape .label,#mermaid-svg-x3IpQzRs7DMe9br8 .icon-shape .label{text-anchor:middle;}#mermaid-svg-x3IpQzRs7DMe9br8 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-x3IpQzRs7DMe9br8 .rough-node .label,#mermaid-svg-x3IpQzRs7DMe9br8 .node .label,#mermaid-svg-x3IpQzRs7DMe9br8 .image-shape .label,#mermaid-svg-x3IpQzRs7DMe9br8 .icon-shape .label{text-align:center;}#mermaid-svg-x3IpQzRs7DMe9br8 .node.clickable{cursor:pointer;}#mermaid-svg-x3IpQzRs7DMe9br8 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-x3IpQzRs7DMe9br8 .arrowheadPath{fill:#333333;}#mermaid-svg-x3IpQzRs7DMe9br8 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-x3IpQzRs7DMe9br8 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-x3IpQzRs7DMe9br8 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-x3IpQzRs7DMe9br8 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-x3IpQzRs7DMe9br8 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-x3IpQzRs7DMe9br8 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-x3IpQzRs7DMe9br8 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-x3IpQzRs7DMe9br8 .cluster text{fill:#333;}#mermaid-svg-x3IpQzRs7DMe9br8 .cluster span{color:#333;}#mermaid-svg-x3IpQzRs7DMe9br8 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-x3IpQzRs7DMe9br8 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-x3IpQzRs7DMe9br8 rect.text{fill:none;stroke-width:0;}#mermaid-svg-x3IpQzRs7DMe9br8 .icon-shape,#mermaid-svg-x3IpQzRs7DMe9br8 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-x3IpQzRs7DMe9br8 .icon-shape p,#mermaid-svg-x3IpQzRs7DMe9br8 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-x3IpQzRs7DMe9br8 .icon-shape .label rect,#mermaid-svg-x3IpQzRs7DMe9br8 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-x3IpQzRs7DMe9br8 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-x3IpQzRs7DMe9br8 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-x3IpQzRs7DMe9br8 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 是

提出任务
Agent 执行
观察执行过程
方向正确?
Steer
完成

这也是 Agent 和传统"一问一答式 AI"的一个重要区别。


六、Codex 计划模式

普通模式通常是:

text 复制代码
用户:
帮我实现登录功能。

AI:
好的,我开始修改......

问题在于:

AI 可能还没有完全理解需求,就开始直接修改代码。

对于大型任务来说,这是比较危险的。


6.1 Plan Mode

计划模式的工作方式更接近:

text 复制代码
你的需求
   ↓
分析代码
   ↓
确认需求
   ↓
生成实现计划
   ↓
你检查计划
   ↓
执行代码修改

可以通过 + 中的 Plan Mode 开启。

在这个阶段:

AI 主要是在理解和规划,并不会立即进行大规模代码修改。


6.2 哪些任务适合计划模式?

例如:

text 复制代码
重构整个权限系统

数据库从 MySQL 迁移到 PostgreSQL

Vue 项目迁移 React

增加完整支付模块

修改大型项目架构

这些复杂任务不推荐直接输入:

text 复制代码
帮我改一下。

更推荐:

text 复制代码
先进入 Plan Mode。

请分析当前认证系统的实现方式,
先不要修改代码。

请给我:

1. 当前架构
2. 涉及的文件
3. 修改方案
4. 可能产生的影响
5. 测试方案

等计划确认以后再实施。

对于复杂任务来说:

计划的价值,往往比单纯把 Prompt 写得特别长更重要。


七、批注模式:告诉 AI"具体哪里有问题"

前端开发经常会出现一种情况。

你告诉 AI:

text 复制代码
这个页面不好看。

AI 很难知道:

text 复制代码
哪里不好看?

标题?

边距?

颜色?

按钮?

卡片?

Codex 的 Browser Annotation,也就是浏览器批注功能,可以很好地解决这个问题。

开启注释模式后,可以:

text 复制代码
点击元素

或者

框选某一个区域

然后直接留下修改要求。

例如选中一个按钮后输入:

text 复制代码
按钮高度缩小一点。

圆角改成 8px。

不要改变按钮颜色。

这种方式比:

text 复制代码
右边那个蓝色按钮再小一点。

准确得多。


八、Codex 与 VS Code 是什么关系?

不能简单把 Codex 理解成:

Codex 不具备任何开发能力,所以必须安装 VS Code。

更准确的理解是:

Codex 更偏向 AI Agent 式开发,而 VS Code 更适合人类工程师进行精细代码编辑。

现在 Codex 本身已经可以完成:

text 复制代码
查看 Diff

运行 Terminal

执行 Git 操作

代码 Review

修改文件

运行项目

等很多开发任务。

但是如果你需要:

text 复制代码
精确定位代码

断点调试

大量手动编辑

使用 IDE 插件

代码自动补全

复杂搜索

VS Code 依然更合适。

所以可以简单理解为:

text 复制代码
Codex
≈ AI 工程师

VS Code
≈ 人类工程师使用的开发工作台

Codex 中也可以设置默认代码编辑器。


九、初始化 Git 仓库

这是非常建议每一个 Codex 新手掌握的操作。

假设项目目录是:

text 复制代码
my-project/

首先进入项目目录:

bash 复制代码
cd my-project

执行:

bash 复制代码
git init

此时就创建了一个 Git Repository。

查看当前状态:

bash 复制代码
git status

第一次提交:

bash 复制代码
git add .
git commit -m "chore: initial commit"

然后再让 Codex 开始修改。

这样整个开发流程就变成:

text 复制代码
初始版本
    ↓
Codex 修改
    ↓
Git Diff
    ↓
确认修改
    ↓
Commit

如果 AI 修改代码以后,你想知道它到底改了什么,可以运行:

bash 复制代码
git diff

如果修改出现问题,也可以通过 Git 进行回滚。

因此非常建议养成一个习惯:

大型 Codex 任务开始之前,先 Commit 一次。


十、Codex 的"记忆":AGENTS.md

随着项目越来越复杂,你会发现一个很明显的问题。

新建一个 Chat:

text 复制代码
AI 不知道项目规范。

于是你不得不重新告诉它:

text 复制代码
我们使用 React。

不要使用 Tailwind。

API 全部写在 services。

组件必须使用 TypeScript。

修改以后必须运行 test。

下一次创建新 Chat,又要重新说一遍。

显然非常低效。


10.1 AGENTS.md 是什么?

解决这个问题的方法就是:

text 复制代码
AGENTS.md

严格来说,它并不是传统意义上的"AI 长期记忆"。

更准确地说:

AGENTS.md 是 Codex 的项目级持久化指令文件。

Codex 在处理项目任务时,可以读取 AGENTS.md,了解:

text 复制代码
项目是什么

使用什么技术栈

代码应该怎么写

目录结构是什么

有哪些禁止事项

测试命令是什么

完成任务前应该做什么

10.2 一个比较完整的 AGENTS.md 示例

在项目根目录创建:

text 复制代码
AGENTS.md

内容例如:

markdown 复制代码
# Project Overview

这是一个个人博客管理系统。

## Tech Stack

- React
- TypeScript
- Vite
- Ant Design
- Node.js

## Directory Structure

- `src/components/`:通用组件
- `src/pages/`:页面
- `src/services/`:API 请求
- `src/utils/`:工具函数

## Development Rules

1. 所有新增代码使用 TypeScript。
2. 不要引入新的 UI 框架。
3. 优先复用已有组件。
4. 不要随意修改 API 接口格式。
5. 单个组件尽量不要超过 300 行。

## Commands

安装依赖:

npm install

启动项目:

npm run dev

运行测试:

npm test

项目构建:

npm run build

## Before Completing a Task

完成任务前必须:

1. 检查 TypeScript 错误。
2. 运行测试。
3. 运行构建。
4. 总结修改了哪些文件。
5. 如果存在未解决问题,需要明确说明。

有了 AGENTS.md 以后,即使新建一个 Codex Chat,也不需要每一次都重新介绍项目规则。


10.3 全局指令

除了项目内部的 AGENTS.md,还可以建立全局规则。

例如:

text 复制代码
~/.codex/AGENTS.md

作为全局指令。

例如:

markdown 复制代码
# Global Coding Rules

- 默认使用中文解释。
- 修改代码前先阅读相关文件。
- 不要随意增加依赖。
- 不确定需求时先询问。
- 完成代码修改后必须运行测试。
- 删除文件前必须确认。

可以把整个优先级简单理解为:

text 复制代码
全局 AGENTS.md
       ↓
项目 AGENTS.md
       ↓
当前 Prompt
       ↓
Codex 执行

十一、Codex Skills:把经验变成可复用能力

当我们经常让 AI 做同一种任务时,会出现另一个问题。

例如每次都要告诉 AI:

text 复制代码
检查页面。

检查响应式。

检查 TypeScript。

运行 lint。

运行测试。

最后输出问题列表。

每次重新写 Prompt 会比较麻烦。

于是就有了:

text 复制代码
Skill

11.1 Skill 是什么?

Skill 可以理解成:

一套可以反复调用的标准工作流程。

它不只是一个简单 Prompt。

一个 Skill 可以包含:

text 复制代码
说明文件

脚本

参考资料

模板

资源文件

例如:

text 复制代码
frontend-review/
├── SKILL.md
├── scripts/
├── references/
└── assets/

11.2 创建自己的 Skill

例如我们创建一个:

text 复制代码
frontend-review

目录:

text 复制代码
.agents/
└── skills/
    └── frontend-review/
        └── SKILL.md

SKILL.md 内容:

markdown 复制代码
---
name: frontend-review
description: 检查前端页面代码质量、响应式布局和潜在 UI 问题。
---

# Frontend Review

执行以下检查:

1. 检查页面布局。
2. 检查移动端响应式。
3. 检查重复 CSS。
4. 检查 TypeScript 错误。
5. 检查无障碍问题。
6. 运行 lint。
7. 运行测试。

完成后输出:

## Problems

列出发现的问题。

## Changes

列出已经修改的内容。

## Remaining Issues

列出仍然存在的问题。

以后执行前端代码审查时,就不需要每次都重新输入完整流程。

因此可以把 Skill 理解成:

给 Codex 制作一套可以重复使用的 SOP。


十二、Codex MCP:让 AI 拥有外部工具

接下来是 Agent 生态里非常重要的一个概念:

text 复制代码
MCP

完整名称:

text 复制代码
Model Context Protocol

12.1 MCP 到底解决什么问题?

普通 Codex 主要可以访问:

text 复制代码
本地代码

本地命令

本地项目

但是,如果希望 AI:

text 复制代码
读取数据库

查询最新技术文档

访问内部系统

读取设计工具

调用企业 API

访问其他第三方服务

怎么办?

这时就可以使用 MCP。

其结构可以简单理解为:
#mermaid-svg-nLLANY770OHWY7zf{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-nLLANY770OHWY7zf .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-nLLANY770OHWY7zf .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-nLLANY770OHWY7zf .error-icon{fill:#552222;}#mermaid-svg-nLLANY770OHWY7zf .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-nLLANY770OHWY7zf .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-nLLANY770OHWY7zf .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-nLLANY770OHWY7zf .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-nLLANY770OHWY7zf .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-nLLANY770OHWY7zf .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-nLLANY770OHWY7zf .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-nLLANY770OHWY7zf .marker{fill:#333333;stroke:#333333;}#mermaid-svg-nLLANY770OHWY7zf .marker.cross{stroke:#333333;}#mermaid-svg-nLLANY770OHWY7zf svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-nLLANY770OHWY7zf p{margin:0;}#mermaid-svg-nLLANY770OHWY7zf .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-nLLANY770OHWY7zf .cluster-label text{fill:#333;}#mermaid-svg-nLLANY770OHWY7zf .cluster-label span{color:#333;}#mermaid-svg-nLLANY770OHWY7zf .cluster-label span p{background-color:transparent;}#mermaid-svg-nLLANY770OHWY7zf .label text,#mermaid-svg-nLLANY770OHWY7zf span{fill:#333;color:#333;}#mermaid-svg-nLLANY770OHWY7zf .node rect,#mermaid-svg-nLLANY770OHWY7zf .node circle,#mermaid-svg-nLLANY770OHWY7zf .node ellipse,#mermaid-svg-nLLANY770OHWY7zf .node polygon,#mermaid-svg-nLLANY770OHWY7zf .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-nLLANY770OHWY7zf .rough-node .label text,#mermaid-svg-nLLANY770OHWY7zf .node .label text,#mermaid-svg-nLLANY770OHWY7zf .image-shape .label,#mermaid-svg-nLLANY770OHWY7zf .icon-shape .label{text-anchor:middle;}#mermaid-svg-nLLANY770OHWY7zf .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-nLLANY770OHWY7zf .rough-node .label,#mermaid-svg-nLLANY770OHWY7zf .node .label,#mermaid-svg-nLLANY770OHWY7zf .image-shape .label,#mermaid-svg-nLLANY770OHWY7zf .icon-shape .label{text-align:center;}#mermaid-svg-nLLANY770OHWY7zf .node.clickable{cursor:pointer;}#mermaid-svg-nLLANY770OHWY7zf .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-nLLANY770OHWY7zf .arrowheadPath{fill:#333333;}#mermaid-svg-nLLANY770OHWY7zf .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-nLLANY770OHWY7zf .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-nLLANY770OHWY7zf .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-nLLANY770OHWY7zf .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-nLLANY770OHWY7zf .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-nLLANY770OHWY7zf .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-nLLANY770OHWY7zf .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-nLLANY770OHWY7zf .cluster text{fill:#333;}#mermaid-svg-nLLANY770OHWY7zf .cluster span{color:#333;}#mermaid-svg-nLLANY770OHWY7zf div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-nLLANY770OHWY7zf .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-nLLANY770OHWY7zf rect.text{fill:none;stroke-width:0;}#mermaid-svg-nLLANY770OHWY7zf .icon-shape,#mermaid-svg-nLLANY770OHWY7zf .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-nLLANY770OHWY7zf .icon-shape p,#mermaid-svg-nLLANY770OHWY7zf .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-nLLANY770OHWY7zf .icon-shape .label rect,#mermaid-svg-nLLANY770OHWY7zf .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-nLLANY770OHWY7zf .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-nLLANY770OHWY7zf .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-nLLANY770OHWY7zf :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Codex
MCP Protocol
MCP Server A
MCP Server B
MCP Server C
技术文档
数据库
第三方服务

也就是说:

MCP 解决的是 Agent 如何以标准化方式连接外部工具和数据。


12.2 添加 MCP Server

例如添加一个 MCP Server:

bash 复制代码
codex mcp add context7 -- npx -y @upstash/context7-mcp

查看已经添加的 MCP:

bash 复制代码
codex mcp list

查看 MCP 相关命令:

bash 复制代码
codex mcp --help

不同 MCP Server 能提供不同能力。

例如:

text 复制代码
GitHub MCP
→ 操作仓库、Issue、PR

数据库 MCP
→ 查询数据库

文档 MCP
→ 查询技术文档

浏览器 MCP
→ 操作网页

企业内部 MCP
→ 调用内部系统

十三、AGENTS.md、Skill 和 MCP 到底有什么区别?

这是很多 Codex 初学者最容易混淆的地方。

可以用一个表格快速区分:

功能 解决的问题 可以理解成
AGENTS.md AI 应该遵守什么规则 员工手册
Skill AI 应该怎么完成某类任务 标准操作流程 SOP
MCP AI 能调用哪些外部能力 工具箱
Prompt 这一次具体做什么 当前任务单

例如:

text 复制代码
AGENTS.md

"前端统一使用 TypeScript。"
text 复制代码
Skill

"每次前端 Review 按照这 7 步执行。"
text 复制代码
MCP

"你可以访问技术文档数据库。"
text 复制代码
Prompt

"检查一下登录页面。"

组合起来就是:
#mermaid-svg-AwXcDzTrq55TJ0wS{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-AwXcDzTrq55TJ0wS .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-AwXcDzTrq55TJ0wS .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-AwXcDzTrq55TJ0wS .error-icon{fill:#552222;}#mermaid-svg-AwXcDzTrq55TJ0wS .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-AwXcDzTrq55TJ0wS .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-AwXcDzTrq55TJ0wS .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-AwXcDzTrq55TJ0wS .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-AwXcDzTrq55TJ0wS .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-AwXcDzTrq55TJ0wS .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-AwXcDzTrq55TJ0wS .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-AwXcDzTrq55TJ0wS .marker{fill:#333333;stroke:#333333;}#mermaid-svg-AwXcDzTrq55TJ0wS .marker.cross{stroke:#333333;}#mermaid-svg-AwXcDzTrq55TJ0wS svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-AwXcDzTrq55TJ0wS p{margin:0;}#mermaid-svg-AwXcDzTrq55TJ0wS .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-AwXcDzTrq55TJ0wS .cluster-label text{fill:#333;}#mermaid-svg-AwXcDzTrq55TJ0wS .cluster-label span{color:#333;}#mermaid-svg-AwXcDzTrq55TJ0wS .cluster-label span p{background-color:transparent;}#mermaid-svg-AwXcDzTrq55TJ0wS .label text,#mermaid-svg-AwXcDzTrq55TJ0wS span{fill:#333;color:#333;}#mermaid-svg-AwXcDzTrq55TJ0wS .node rect,#mermaid-svg-AwXcDzTrq55TJ0wS .node circle,#mermaid-svg-AwXcDzTrq55TJ0wS .node ellipse,#mermaid-svg-AwXcDzTrq55TJ0wS .node polygon,#mermaid-svg-AwXcDzTrq55TJ0wS .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-AwXcDzTrq55TJ0wS .rough-node .label text,#mermaid-svg-AwXcDzTrq55TJ0wS .node .label text,#mermaid-svg-AwXcDzTrq55TJ0wS .image-shape .label,#mermaid-svg-AwXcDzTrq55TJ0wS .icon-shape .label{text-anchor:middle;}#mermaid-svg-AwXcDzTrq55TJ0wS .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-AwXcDzTrq55TJ0wS .rough-node .label,#mermaid-svg-AwXcDzTrq55TJ0wS .node .label,#mermaid-svg-AwXcDzTrq55TJ0wS .image-shape .label,#mermaid-svg-AwXcDzTrq55TJ0wS .icon-shape .label{text-align:center;}#mermaid-svg-AwXcDzTrq55TJ0wS .node.clickable{cursor:pointer;}#mermaid-svg-AwXcDzTrq55TJ0wS .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-AwXcDzTrq55TJ0wS .arrowheadPath{fill:#333333;}#mermaid-svg-AwXcDzTrq55TJ0wS .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-AwXcDzTrq55TJ0wS .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-AwXcDzTrq55TJ0wS .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-AwXcDzTrq55TJ0wS .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-AwXcDzTrq55TJ0wS .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-AwXcDzTrq55TJ0wS .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-AwXcDzTrq55TJ0wS .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-AwXcDzTrq55TJ0wS .cluster text{fill:#333;}#mermaid-svg-AwXcDzTrq55TJ0wS .cluster span{color:#333;}#mermaid-svg-AwXcDzTrq55TJ0wS div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-AwXcDzTrq55TJ0wS .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-AwXcDzTrq55TJ0wS rect.text{fill:none;stroke-width:0;}#mermaid-svg-AwXcDzTrq55TJ0wS .icon-shape,#mermaid-svg-AwXcDzTrq55TJ0wS .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-AwXcDzTrq55TJ0wS .icon-shape p,#mermaid-svg-AwXcDzTrq55TJ0wS .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-AwXcDzTrq55TJ0wS .icon-shape .label rect,#mermaid-svg-AwXcDzTrq55TJ0wS .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-AwXcDzTrq55TJ0wS .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-AwXcDzTrq55TJ0wS .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-AwXcDzTrq55TJ0wS :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 用户 Prompt
Codex Agent
AGENTS.md

项目规则
Skills

标准工作流
MCP

外部工具与数据
读取代码
修改代码
运行命令
调用外部工具
完成任务

这也是理解现代 AI Agent 的一个非常重要的框架。


十四、一套更合理的 Codex 开发工作流

如果只是:

text 复制代码
打开 Codex
→ 输入"帮我写个网站"
→ 等 AI 写完

其实并没有真正发挥 Codex 的能力。

我更加推荐下面这套工作流程:
#mermaid-svg-vf2PEmHDMGtX8tOp{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-vf2PEmHDMGtX8tOp .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-vf2PEmHDMGtX8tOp .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-vf2PEmHDMGtX8tOp .error-icon{fill:#552222;}#mermaid-svg-vf2PEmHDMGtX8tOp .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-vf2PEmHDMGtX8tOp .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-vf2PEmHDMGtX8tOp .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-vf2PEmHDMGtX8tOp .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-vf2PEmHDMGtX8tOp .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-vf2PEmHDMGtX8tOp .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-vf2PEmHDMGtX8tOp .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-vf2PEmHDMGtX8tOp .marker{fill:#333333;stroke:#333333;}#mermaid-svg-vf2PEmHDMGtX8tOp .marker.cross{stroke:#333333;}#mermaid-svg-vf2PEmHDMGtX8tOp svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-vf2PEmHDMGtX8tOp p{margin:0;}#mermaid-svg-vf2PEmHDMGtX8tOp .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-vf2PEmHDMGtX8tOp .cluster-label text{fill:#333;}#mermaid-svg-vf2PEmHDMGtX8tOp .cluster-label span{color:#333;}#mermaid-svg-vf2PEmHDMGtX8tOp .cluster-label span p{background-color:transparent;}#mermaid-svg-vf2PEmHDMGtX8tOp .label text,#mermaid-svg-vf2PEmHDMGtX8tOp span{fill:#333;color:#333;}#mermaid-svg-vf2PEmHDMGtX8tOp .node rect,#mermaid-svg-vf2PEmHDMGtX8tOp .node circle,#mermaid-svg-vf2PEmHDMGtX8tOp .node ellipse,#mermaid-svg-vf2PEmHDMGtX8tOp .node polygon,#mermaid-svg-vf2PEmHDMGtX8tOp .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-vf2PEmHDMGtX8tOp .rough-node .label text,#mermaid-svg-vf2PEmHDMGtX8tOp .node .label text,#mermaid-svg-vf2PEmHDMGtX8tOp .image-shape .label,#mermaid-svg-vf2PEmHDMGtX8tOp .icon-shape .label{text-anchor:middle;}#mermaid-svg-vf2PEmHDMGtX8tOp .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-vf2PEmHDMGtX8tOp .rough-node .label,#mermaid-svg-vf2PEmHDMGtX8tOp .node .label,#mermaid-svg-vf2PEmHDMGtX8tOp .image-shape .label,#mermaid-svg-vf2PEmHDMGtX8tOp .icon-shape .label{text-align:center;}#mermaid-svg-vf2PEmHDMGtX8tOp .node.clickable{cursor:pointer;}#mermaid-svg-vf2PEmHDMGtX8tOp .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-vf2PEmHDMGtX8tOp .arrowheadPath{fill:#333333;}#mermaid-svg-vf2PEmHDMGtX8tOp .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-vf2PEmHDMGtX8tOp .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-vf2PEmHDMGtX8tOp .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-vf2PEmHDMGtX8tOp .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-vf2PEmHDMGtX8tOp .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-vf2PEmHDMGtX8tOp .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-vf2PEmHDMGtX8tOp .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-vf2PEmHDMGtX8tOp .cluster text{fill:#333;}#mermaid-svg-vf2PEmHDMGtX8tOp .cluster span{color:#333;}#mermaid-svg-vf2PEmHDMGtX8tOp div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-vf2PEmHDMGtX8tOp .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-vf2PEmHDMGtX8tOp rect.text{fill:none;stroke-width:0;}#mermaid-svg-vf2PEmHDMGtX8tOp .icon-shape,#mermaid-svg-vf2PEmHDMGtX8tOp .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-vf2PEmHDMGtX8tOp .icon-shape p,#mermaid-svg-vf2PEmHDMGtX8tOp .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-vf2PEmHDMGtX8tOp .icon-shape .label rect,#mermaid-svg-vf2PEmHDMGtX8tOp .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-vf2PEmHDMGtX8tOp .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-vf2PEmHDMGtX8tOp .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-vf2PEmHDMGtX8tOp :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 是



创建项目
初始化 Git
编写 AGENTS.md
提出需求
复杂任务?
Plan Mode
直接执行
确认方案
Codex 修改代码
运行项目 / 测试
结果正确?
Steer / Annotation
Review Git Diff
Commit

可以把整个流程概括成八个字:

先规划、再执行、边观察、可回滚。


十五、几个非常重要的 Codex 使用经验

15.1 不要把 Codex 当成"代码生成器"

真正有价值的不是:

text 复制代码
生成 100 行代码

而是:

text 复制代码
理解项目
→ 找到问题
→ 修改代码
→ 执行测试
→ 检查结果

这也是 Agent Coding 和传统代码补全工具最大的区别之一。


15.2 一个 Chat 尽量对应一个明确目标

不推荐:

text 复制代码
先改登录。

然后分析数据库。

顺便优化首页。

然后再研究 Docker。

更推荐:

text 复制代码
Chat 1:登录系统

Chat 2:首页优化

Chat 3:数据库重构

这样做可以减少上下文污染,也方便后续查找历史记录。


15.3 长期规则不要只写在 Prompt 中

长期项目应该优先考虑:

text 复制代码
AGENTS.md

否则每一次开新会话,都需要重新告诉 AI:

text 复制代码
项目结构是什么。

技术栈是什么。

代码规范是什么。

哪些事情不能做。

15.4 大任务开始之前一定先 Git Commit

最理想的状态是:

text 复制代码
AI 改得好
→ Commit

AI 改坏了
→ Revert

而不是:

text 复制代码
AI 改坏了
→ 我也不知道原来的代码是什么

Git 是使用 Coding Agent 时非常重要的安全保障。


15.5 复杂任务优先使用 Plan

任务越复杂:

text 复制代码
规划的重要性
>
Prompt 的长度

如果一个需求需要:

text 复制代码
修改很多文件

调整架构

改数据库

新增多个模块

涉及多人协作

最好先让 Codex 给出详细计划,再开始执行。


15.6 AI 跑偏时及时 Steer

Agent 工作时间越长,错误方向带来的成本越高。

发现方向不对时:

text 复制代码
立即纠正

而不是等它全部修改完成。


15.7 经常查看 Git Diff

不要只看 AI 最后告诉你:

text 复制代码
任务完成了。

还应该检查:

bash 复制代码
git diff

看看它:

text 复制代码
到底修改了哪些文件

有没有修改不相关内容

有没有删除重要代码

有没有引入新的依赖

这样才能真正做到:

AI 写代码,人类负责控制。


十六、最后总结:真正理解 Codex,需要掌握什么?

如果刚开始接触 Codex,我建议按照下面的顺序进行学习。

第一阶段:基础使用

text 复制代码
Codex 基本操作
↓
Project
↓
权限
↓
Terminal

第二阶段:代码版本管理

text 复制代码
Git
↓
Diff
↓
Review
↓
Commit
↓
Worktree

第三阶段:Agent 工作流

text 复制代码
Context
↓
Plan
↓
Steer
↓
AGENTS.md

第四阶段:扩展能力

text 复制代码
Skills
↓
MCP
↓
Automation
↓
多 Agent 协作

如果只学习:

text 复制代码
怎么给 Codex 发 Prompt

实际上只使用了 Codex 很小的一部分能力。

真正进入 Agent Coding 以后,我们需要关注的已经不只是:

Prompt 应该怎么写?

而是:

如何给 Agent 提供正确的上下文、规则、工具、权限和反馈机制,让它能够稳定地完成任务?

这也是我认为 Codex 和传统 AI 编程助手最大的区别。


十七、Codex 核心概念关系图

最后可以用下面这张图快速理解整个 Codex 工作体系:
#mermaid-svg-p137TmaYYDaFqiKY{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-p137TmaYYDaFqiKY .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-p137TmaYYDaFqiKY .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-p137TmaYYDaFqiKY .error-icon{fill:#552222;}#mermaid-svg-p137TmaYYDaFqiKY .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-p137TmaYYDaFqiKY .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-p137TmaYYDaFqiKY .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-p137TmaYYDaFqiKY .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-p137TmaYYDaFqiKY .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-p137TmaYYDaFqiKY .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-p137TmaYYDaFqiKY .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-p137TmaYYDaFqiKY .marker{fill:#333333;stroke:#333333;}#mermaid-svg-p137TmaYYDaFqiKY .marker.cross{stroke:#333333;}#mermaid-svg-p137TmaYYDaFqiKY svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-p137TmaYYDaFqiKY p{margin:0;}#mermaid-svg-p137TmaYYDaFqiKY .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-p137TmaYYDaFqiKY .cluster-label text{fill:#333;}#mermaid-svg-p137TmaYYDaFqiKY .cluster-label span{color:#333;}#mermaid-svg-p137TmaYYDaFqiKY .cluster-label span p{background-color:transparent;}#mermaid-svg-p137TmaYYDaFqiKY .label text,#mermaid-svg-p137TmaYYDaFqiKY span{fill:#333;color:#333;}#mermaid-svg-p137TmaYYDaFqiKY .node rect,#mermaid-svg-p137TmaYYDaFqiKY .node circle,#mermaid-svg-p137TmaYYDaFqiKY .node ellipse,#mermaid-svg-p137TmaYYDaFqiKY .node polygon,#mermaid-svg-p137TmaYYDaFqiKY .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-p137TmaYYDaFqiKY .rough-node .label text,#mermaid-svg-p137TmaYYDaFqiKY .node .label text,#mermaid-svg-p137TmaYYDaFqiKY .image-shape .label,#mermaid-svg-p137TmaYYDaFqiKY .icon-shape .label{text-anchor:middle;}#mermaid-svg-p137TmaYYDaFqiKY .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-p137TmaYYDaFqiKY .rough-node .label,#mermaid-svg-p137TmaYYDaFqiKY .node .label,#mermaid-svg-p137TmaYYDaFqiKY .image-shape .label,#mermaid-svg-p137TmaYYDaFqiKY .icon-shape .label{text-align:center;}#mermaid-svg-p137TmaYYDaFqiKY .node.clickable{cursor:pointer;}#mermaid-svg-p137TmaYYDaFqiKY .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-p137TmaYYDaFqiKY .arrowheadPath{fill:#333333;}#mermaid-svg-p137TmaYYDaFqiKY .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-p137TmaYYDaFqiKY .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-p137TmaYYDaFqiKY .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-p137TmaYYDaFqiKY .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-p137TmaYYDaFqiKY .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-p137TmaYYDaFqiKY .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-p137TmaYYDaFqiKY .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-p137TmaYYDaFqiKY .cluster text{fill:#333;}#mermaid-svg-p137TmaYYDaFqiKY .cluster span{color:#333;}#mermaid-svg-p137TmaYYDaFqiKY div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-p137TmaYYDaFqiKY .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-p137TmaYYDaFqiKY rect.text{fill:none;stroke-width:0;}#mermaid-svg-p137TmaYYDaFqiKY .icon-shape,#mermaid-svg-p137TmaYYDaFqiKY .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-p137TmaYYDaFqiKY .icon-shape p,#mermaid-svg-p137TmaYYDaFqiKY .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-p137TmaYYDaFqiKY .icon-shape .label rect,#mermaid-svg-p137TmaYYDaFqiKY .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-p137TmaYYDaFqiKY .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-p137TmaYYDaFqiKY .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-p137TmaYYDaFqiKY :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 用户需求 Prompt
AGENTS.md

项目规则
Skills

标准工作流
MCP

外部工具
Context

当前上下文
Permission

权限系统
Codex Agent
读取项目
修改代码
执行命令
运行测试
调用外部工具
Review
Git Diff
Commit / Revert

简单来说:

text 复制代码
Prompt
决定这一次要做什么。

AGENTS.md
决定长期应该遵守什么规则。

Skill
决定某一类任务应该怎么做。

MCP
决定可以使用哪些外部工具。

Context
决定 AI 当前知道什么。

Permission
决定 AI 可以操作到什么程度。

Git
决定修改是否可以追踪和回滚。

把这些能力组合起来之后,Codex 才真正从:

text 复制代码
AI 写代码工具

升级成:

text 复制代码
AI Coding Agent

参考资料

Codex 产品更新速度比较快,界面、功能名称和权限机制未来可能继续变化,因此实际使用时建议优先查看 OpenAI 官方文档。

Codex 官方网站:

text 复制代码
https://openai.com/codex/

Codex CLI:

text 复制代码
https://developers.openai.com/codex/cli/

C

相关推荐
JAI科研1 小时前
YOLO 完全指南(七):YOLO识别工程化 (上)
人工智能·深度学习·神经网络·yolo·目标检测·计算机视觉·transformer
Forerror20261 小时前
深入理解大模型网关解决什么问题:MAIGateway(魔芋企业级AI网关)架构与核心价值解读
人工智能·ai网关·maigateway·大模型财务管控·企业级大模型治理网关
AI深栈1 小时前
第 10 章 · Embedding、VectorStore 与 RAG
java·人工智能
jsl_jsl_jsl1 小时前
《一个 Agent 平台怎么接入多家大模型:Provider 槽位制设计》
人工智能
ι:1 小时前
Codex 自主调用 Visio 绘图完整教程
人工智能·visio·codex
梦帮科技1 小时前
一次性会员支付系统的可靠性设计:幂等、金额校验、Webhook 与链上确认
人工智能·神经网络·mysql·区块链·建造者模式·合成复用原则·加密货币
AgentMaster1 小时前
智能客服系统技术选型实战:从架构设计到落地实施的完整指南
大数据·人工智能
全栈弄潮儿1 小时前
让 AI 先写方案,再写代码
aigc·openai·ai编程
lailai04101 小时前
图像处理的技术路径与实现方式考察
人工智能