Codex 和 Claude Code 是同一套概念、两套名字。最大的不同在权限:Codex 先用沙箱把 Agent 圈起来,再决定要不要问你。
如果你打算学第二个 Agent 工具,我推荐 Codex。Codex CLI 由 OpenAI 开源,使用 Apache-2.0 许可。
第一本书学过的 CLAUDE.md、Skills、MCP、权限、子代理、Hooks、计划模式,在 Codex 里几乎都有一一对应的东西。概念不用重学,只要知道它在这里叫什么、放在哪。
一、Codex 是什么
Codex 是 OpenAI 出品的编程 Agent。和 Claude Code 一样,它有好几种形态:终端里的 CLI、IDE 插件、ChatGPT 桌面应用,还有云端任务。这里只讲终端 CLI。
两边最常被拿来比的是这几项:
| Claude Code | Codex | |
|---|---|---|
| 出品方 | Anthropic | OpenAI |
| 项目说明 | CLAUDE.md |
AGENTS.md |
| 配置文件 | settings.json(JSON) |
config.toml(TOML) |
| 安全思路 | 主要靠问不问你 | 先用沙箱圈住,再决定问不问 |
| 默认模型 | Claude 系列 | GPT 系列,也能接 DeepSeek |
二、安装与接模型
1. 安装
四种方式,选一种就行。国内没开代理的,用第一种。
npm 加国内镜像(国内推荐):
先装好 Node.js,再运行:
npm install -g @openai/codex --registry=https://registry.npmmirror.com--registry 让 npm 从国内镜像下载,不用代理。安装包有一百多 MB,要等一会儿。
⚠️ Windows 在 PowerShell 里运行 npm,如果报「无法加载文件 ……npm.ps1,因为在此系统上禁止运行脚本」,换到 CMD 窗口里运行;或者先在 PowerShell 里执行一次
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned,以后npm、codex都能直接用。
下面三种要从 chatgpt.com 和 GitHub 下载,国内直连会报「无法连接到远程服务器」或者一直卡住,需要先开代理。
macOS、Linux:
curl -fsSL https://chatgpt.com/codex/install.sh | shWindows(新开一个 PowerShell 窗口):
powershell -ExecutionPolicy ByPass -c "irm https://chatgpt.com/codex/install.ps1 | iex"Homebrew:
brew install --cask codex装完新开一个终端,看一下版本号:
codex --version
升级的方式:npm 装的重新跑一遍上面那条 npm 命令,Homebrew 装的用 brew upgrade --cask codex,脚本装的重新跑一遍安装命令。
2. 第一次启动:选登录方式
进入你的项目目录,输入 codex:
cd your-project
codex第一次启动会让你选登录方式:

登录有两条路:
- 有 ChatGPT 付费账号(Plus、Pro、Business、Enterprise):选第 1 项,浏览器里登录,用量包含在订阅里,最省事
- 没有 ChatGPT 账号,或者想用国产模型:先别选,按下一步接 DeepSeek,配置好以后再启动就不会出现这个页面
3. 接入 DeepSeek(推荐国内读者)
和第一本书一样,我们用 DeepSeek。DeepSeek 官方专门出了一份 Codex 接入文档。
先在 DeepSeek 开放平台 准备好 API Key(第一本第二章第1节已经申请过的话,直接用那一个)。
方式一:官方一键脚本(最简单)
前提:Codex 已经装好,并且至少启动过一次,这样 ~/.codex 目录才存在。
macOS、Linux:
bash <(curl -fsSL https://cdn.deepseek.com/api-docs/codex-deepseek-setup.sh)Windows PowerShell:
irm https://cdn.deepseek.com/api-docs/codex-deepseek-setup.ps1 | iex脚本会先把你原来的 config.toml 备份到 ~/.codex/backup-deepseek/,然后问你要 API Key,再写好模型目录和配置。菜单第 1 项是 deepseek-flash(支持图片输入),第 2 项是 deepseek-v4-pro。想恢复原来的配置,重新跑脚本选第 9 项。
方式二:手动配置(想知道每一行在干什么)
手动配置要准备两个文件。
第一个是模型目录 ~/.codex/models.json,它告诉 Codex 这个模型的上下文窗口多大、支持哪些推理档位等信息。内容比较长,直接从 DeepSeek 文档 的方式二里整段复制。
第二个是 ~/.codex/config.toml。官方文档的示例是把 Key 直接写进这个文件;我更推荐下面这个写法,Key 放在环境变量里,文件里不出现密钥:
model = "deepseek-flash"
model_provider = "deepseek"
model_reasoning_effort = "high"
model_catalog_json = "~/.codex/models.json"
forced_login_method = "api"
web_search = "disabled"
[model_providers.deepseek]
name = "DeepSeek"
base_url = "https://api.deepseek.com/"
wire_api = "responses"
env_key = "DEEPSEEK_API_KEY"然后把 Key 放进环境变量:
# macOS / Linux:写进 ~/.zshrc 或 ~/.bashrc,然后重开终端
export DEEPSEEK_API_KEY="sk-你的key"
# Windows:重开终端后生效
setx DEEPSEEK_API_KEY "sk-你的key"这几个配置项的意思:
| 配置 | 意思 |
|---|---|
model |
默认用哪个模型 |
model_provider |
用哪个服务商,对应下面 [model_providers.deepseek] 这一段 |
model_reasoning_effort |
推理强度,可以在会话里用 /model 随时改 |
model_catalog_json |
模型目录文件,就是上面的 models.json |
forced_login_method = "api" |
只用 API Key,不走 ChatGPT 登录 |
web_search = "disabled" |
关掉联网搜索(只有 deepseek-v4-pro 支持) |
base_url |
DeepSeek 的接口地址 |
wire_api = "responses" |
用 OpenAI 的 Responses 协议通信 |
env_key |
从哪个环境变量读 Key |
Codex 按登录方式分开保存会话。从 ChatGPT 账号切到 DeepSeek 后,以前的会话会消失,其实没删,切回原来的配置就回来了。
4. 信任这个文件夹
配置好以后再运行 codex,第一次进某个项目,会问你信不信任这个文件夹:

项目里的 .codex/ 目录可以放 Hook、规则等配置,这些配置能在你没发任何消息的情况下执行代码,所以要问。陌生仓库别急着点信任。
信任之后,就进入主界面了:

底部那一行就是状态栏:DeepSeek-Flash high 说明模型接上了。输入 /model 可以切换模型和推理强度,models.json 里配的两个 DeepSeek 模型都在这里:

按 ? 可以看快捷键:

三、概念对照表
| 概念 | Claude Code(第一本) | Codex | 主要差别 |
|---|---|---|---|
| 项目说明 | CLAUDE.md |
AGENTS.md |
每层目录最多读一份,总共默认 32 KiB 上限 |
| 生成项目说明 | /init |
/init |
一样 |
| Skills | .claude/skills/ |
.agents/skills/ |
用 $名字 手动调用 |
| 斜杠指令 | Skill + disable-model-invocation |
Skill + allow_implicit_invocation: false |
Codex 的自定义 prompts 已废弃,统一用 Skill |
| MCP | claude mcp add |
codex mcp add |
配置写在 config.toml 里 |
| 权限模式 | Shift+Tab 切换 |
/permissions 选择 |
Codex 是沙箱 × 审批两个维度 |
| 权限规则 | allow / ask / deny |
.rules 文件:allow / prompt / forbidden |
Codex 的规则只管命令 |
| 计划模式 | Shift+Tab 循环里的一档 |
/plan 或 Shift+Tab |
Codex 的 Shift+Tab 只在默认和计划之间切 |
| 子代理 | .claude/agents/*.md |
.codex/agents/*.toml |
Codex 默认要你明确说才会派 |
| Hooks | settings.json 的 hooks |
hooks.json 或 config.toml |
Codex 的 Hook 要先信任才会运行 |
| 压缩上下文 | /compact |
/compact |
一样 |
| 新会话 / 接着聊 | /clear、/resume |
/new、/resume、codex resume |
基本一样 |
| 回退 | /rewind 检查点 |
没有代码检查点 | Codex 回退代码靠 Git |
| 长任务 | /goal |
/goal |
都有,细节不同 |
| 插件 | /plugin |
/plugins、codex plugin |
概念一样 |
| 从别的工具迁移 | — | /import |
一键导入 Claude Code 的配置 |
在 Codex 里输入 /,能看到所有斜杠指令:

四、入门:15 分钟跑通一个工作流
拿练手项目 order-admin(一个很小的 Node.js 订单后台)走一遍:写项目说明 → 选权限 → 先计划 → 写一个 Skill → 接 MCP → 让它干活。
1. 写 AGENTS.md
在项目里输入 /init,Codex 会读一遍代码,生成一份 AGENTS.md 草稿。生成完一定要自己改:和第一本第二章第4节讲的一样,只留每次都要知道的事。
我改完的版本是这样,结构和第一本的 CLAUDE.md 四块一模一样:
# order-admin
## 技术栈
- Node.js 22,原生 ESM,不引入框架
- 测试:node:test(`npm test`)
## 常用命令
- 启动:`npm run dev`
- 测试:`npm test`,提交前必须跑通
## 代码规范
- 只用具名导出,禁止 `export default`
- 订单相关的数据访问都放在 `src/orders.js`
## 禁止
- 不要修改 `test/` 下已有的用例来让测试通过
- 新增依赖前先问我想确认它被读到了,输入 /status。

Agents.md: AGENTS.md 这一行就是证明。同一个界面里还能看到当前模型、权限档位和 token 用量。
💡 已经有 CLAUDE.md 了? 不用重写。在
~/.codex/config.toml里加一行,让 Codex 在找不到AGENTS.md时去读CLAUDE.md:project_doc_fallback_filenames = ["CLAUDE.md"]我实测过,加了这一行后,只有
CLAUDE.md的项目里,/status会显示Agents.md: CLAUDE.md。
2. 选一个权限档位
输入 /permissions:
