Codex:最像 Claude Code 的 Agent

6,812 字 · 预计阅读 19 分钟

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,再运行:

bash
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:

bash
curl -fsSL https://chatgpt.com/codex/install.sh | sh

Windows(新开一个 PowerShell 窗口):

powershell
powershell -ExecutionPolicy ByPass -c "irm https://chatgpt.com/codex/install.ps1 | iex"

Homebrew:

bash
brew install --cask codex

装完新开一个终端,看一下版本号:

bash
codex --version

codex --version 输出 codex-cli 0.163.0

升级的方式:npm 装的重新跑一遍上面那条 npm 命令,Homebrew 装的用 brew upgrade --cask codex,脚本装的重新跑一遍安装命令。


2. 第一次启动:选登录方式

进入你的项目目录,输入 codex:

bash
cd your-project
codex

第一次启动会让你选登录方式:

Codex 首次启动的登录页:用 ChatGPT 登录、设备码登录、或者提供自己的 API Key

登录有两条路:

  • 有 ChatGPT 付费账号(Plus、Pro、Business、Enterprise):选第 1 项,浏览器里登录,用量包含在订阅里,最省事
  • 没有 ChatGPT 账号,或者想用国产模型:先别选,按下一步接 DeepSeek,配置好以后再启动就不会出现这个页面

3. 接入 DeepSeek(推荐国内读者)

和第一本书一样,我们用 DeepSeek。DeepSeek 官方专门出了一份 Codex 接入文档。

先在 DeepSeek 开放平台 准备好 API Key(第一本第二章第1节已经申请过的话,直接用那一个)。

方式一:官方一键脚本(最简单)

前提:Codex 已经装好,并且至少启动过一次,这样 ~/.codex 目录才存在。

macOS、Linux:

bash
bash <(curl -fsSL https://cdn.deepseek.com/api-docs/codex-deepseek-setup.sh)

Windows PowerShell:

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 放进环境变量:

bash
# 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 询问是否信任当前文件夹

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

信任之后,就进入主界面了:

Codex 主界面,底部显示当前模型 DeepSeek-Flash 和推理强度 high

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

/model 的模型列表:DeepSeek-Flash 和 DeepSeek-V4-Pro

按 ? 可以看快捷键:

Codex 快捷键一览:/ 命令、@ 引用文件、! 执行命令、shift+tab 切换模式等


三、概念对照表

概念 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 里输入 /,能看到所有斜杠指令:

Codex 的斜杠指令菜单:/model、/permissions、/memories 等


四、入门:15 分钟跑通一个工作流

拿练手项目 order-admin(一个很小的 Node.js 订单后台)走一遍:写项目说明 → 选权限 → 先计划 → 写一个 Skill → 接 MCP → 让它干活。

1. 写 AGENTS.md

在项目里输入 /init,Codex 会读一遍代码,生成一份 AGENTS.md 草稿。生成完一定要自己改:和第一本第二章第4节讲的一样,只留每次都要知道的事。

我改完的版本是这样,结构和第一本的 CLAUDE.md 四块一模一样:

markdown
# order-admin

## 技术栈
- Node.js 22,原生 ESM,不引入框架
- 测试:node:test(`npm test`)

## 常用命令
- 启动:`npm run dev`
- 测试:`npm test`,提交前必须跑通

## 代码规范
- 只用具名导出,禁止 `export default`
- 订单相关的数据访问都放在 `src/orders.js`

## 禁止
- 不要修改 `test/` 下已有的用例来让测试通过
- 新增依赖前先问我

想确认它被读到了,输入 /status。

/status 显示模型、权限和 Agents.md: AGENTS.md

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:

/permissions 的四个档位:Ask for approval、Approve for me、Full Access、Read Only

本文是会员内容

全文 6,812 字,已试读约 29%。开通专业版可阅读全文,并解锁全部官方课程与后续更新。

开通专业版

支持 7 天无理由退款 · 早鸟价 99 元/年(售完恢复365/年)

课程中涉及的第三方项目,其著作权与商标归各自权利人所有;引用处的署名与许可见《开源与来源说明》。