CODING TOOLS · CODEX · OpenAI 的编码 Agent

Codex:OpenAI 的终端与云端编码 Agent

开源、Rust 写的官方 CLI,配 ChatGPT 账号就能用。这一页讲清楚它的招牌设计——沙箱与审批:命令先在沙箱里跑,需要越界才问你。安装、AGENTS.md、速查表、云端任务,一路走完。

zsh — ~/my-project
$ npm install -g @openai/codex
added 1 package in 4s
$ codex
Sign in with ChatGPT — 浏览器授权后进入 TUI
> /init
AGENTS.md created — 项目约定已写入仓库根目录
> 给 utils/date.ts 补上边界情况的测试并跑通
本页目录

01

它是什么:本地沙箱优先,云端随时补位

Codex CLI 是 OpenAI 官方的编码 Agent,源码在 github.com/openai/codex、Apache-2.0 协议,核心用 Rust 写成单个本地二进制。它和本站其他终端 Agent 最大的差异在设计哲学上:先沙箱,后审批——命令默认关进操作系统级的沙箱里跑(macOS 用 Seatbelt,Linux 用 bubblewrap + seccomp),沙箱内的读操作不打扰你;一旦要写文件、要联网这种越界动作,才弹出来问你。

Codex 不只是 CLI。同一套能力铺开成一个家族:终端里的 codex(TUI 与脚本两用)、IDE 扩展、桌面 App(codex app),以及 chatgpt.com/codex 上的 Codex Web——在网页或 GitHub 上派任务,云端环境跑完把 diff 拉回本地。CLI 里的 codex cloud 和 codex apply 就是这条云端通道的本地入口。

开源这件事对使用者也很实际:changelog 公开可查、issue 区能看到真实反馈、CI 里可以钉死某个版本避免「昨晚升级后行为变了」。用官方工具的同时保留了对它的可见性。

计费走 ChatGPT 订阅:Plus、Pro、Business、Edu、Enterprise 都含 Codex 额度,首次启动用 ChatGPT 账号登录即可;也可以改用 API key 按量付费(需要额外配置)。

  • 适合:信任沙箱模型、想让 Agent 少打扰你的日常开发;脚本与 CI 里的非交互任务;把独立任务派给云端并行跑;跨工具共享 AGENTS.md 约定。
  • 不适合:网络完全隔离的受限环境(沙箱联网要显式配置);对审批弹窗有强依赖的流程(它的哲学是沙箱兜底而非步步确认)。

还有一个容易忽略的点:Codex 提供 /import 命令,可以直接迁移 Claude Code 的配置、项目文件和近期会话。从别家迁移过来的成本,比想象中低得多。

开发商
OpenAI(官方 CLI)
开源协议
Apache-2.0(github.com/openai/codex)
实现语言
Rust,发布为单一二进制
版本节奏
0.16x(2026-10 底),发布极快,以 npm 页为准
平台
macOS 12+ · Linux
原生 Windows
实验支持,建议 WSL2
登录
ChatGPT 账号或 API key
项目约定
AGENTS.md(开放标准,工具间通用)
和 Claude Code 怎么选:两家都强。Codex 的沙箱让你敢于把审批阈值调低——它跑不了出格的事;Claude Code 的权限弹窗更细。AGENTS.md 是跨工具的开放标准,Claude Code 近年版本也能读它,约定文件写一份两边受益。

02

安装:npm 一条命令,或官方脚本拿二进制

推荐 npm 方式——npm 包里带的是预编译好的 Rust 二进制,装完就能跑。不碰 Node 的机器走官方安装脚本,macOS 也可以 Homebrew。

系统要求不高:macOS 12+、Ubuntu 20.04+ / Debian 10+,Windows 11 建议 WSL2;内存 4GB 起步(8GB 更稳);Git 2.23+ 可选但强烈建议装——内置的 PR 助手和 diff 能力都依赖它。

Terminal
# 需要 npm/Node 在 PATH 里(二进制本身是 Rust,不依赖 Node 运行)
npm install -g @openai/codex

# 验证 + 以后升级
codex --version
npm install -g @openai/codex@latest
用 nvm 的机器先切到新版本 Node 再装(npm 只是分发渠道,codex 本体是 Rust 二进制)。全局 bin 目录不在 PATH 会 command not found。
装完先体检:跑一次 codex doctor,它会检查安装、配置、登录态和沙箱运行环境。Linux 上沙箱依赖 user namespaces,受限容器里跑不动时 doctor 会告诉你原因。

升级与卸载

Terminal · 升级与卸载
# 内置自更新(各安装渠道都认)
codex update

# npm 安装的:重装最新版 / 卸载
npm install -g @openai/codex@latest
npm uninstall -g @openai/codex

# brew 安装的:
brew upgrade --cask codex
brew uninstall --cask codex
Codex 发布节奏很快,隔一阵就升级一次;配置和会话都在 ~/.codex/,重装不丢。

装好了却 command not found:先查 PATH

三种渠道的可执行文件落在不同位置,新装的路径往往要重开终端才进 PATH。逐一定位:

Terminal · 定位与临时验证
# 找到它装在哪
which codex
npm config get prefix          # npm 装的:全局 bin 在 $(prefix)/bin

# PATH 里有没有这些目录
echo $PATH | tr ':' '\n' | grep -E 'npm|homebrew'

# 不改配置,直接用绝对路径验证能跑
/opt/homebrew/bin/codex --version
确认能跑后,把缺的目录补进 shell 配置文件的 PATH,或重开终端让它自动生效。

03

登录与首次运行:ChatGPT 授权,然后信任这个目录

第一次敲 codex 会让你选登录方式:Sign in with ChatGPT(推荐,订阅额度)或 API key。浏览器里授权一次,凭证存在本地。之后每个新仓库第一次启动还会问你是否信任该目录——这是沙箱体系的门口岗哨。

Terminal · 首次运行的完整动线
$ cd ~/your-project && codex
选择登录方式 → Sign in with ChatGPT → 浏览器完成授权
该目录首次运行 → 确认信任,进入 TUI
> /status
model / approval policy / writable roots / token 用量 一屏可见

信任确认只针对目录,做过一次就记住。换了新仓库会再问一次——这不是烦人,是它在替你守门。

Terminal · 登录管理
# 浏览器授权登录(订阅用户)
codex login

# 命令行方式(设备码 / API key)也有
codex logout      # 共用机器上记得清凭证
codex login status
  • 01

    进仓库启动

    cd ~/your-project && codex。工作目录就是它的工作区边界,跟 Claude Code、Kimi Code 同一戒律。

  • 02

    跑一次 /init

    生成 AGENTS.md 脚手架,把构建命令、目录结构、代码风格写进去并提交到 git,全队共享。

  • 03

    观察沙箱如何工作

    让它「读一遍 src 并总结」——只读操作全程无弹窗;再让它「建个文件」——写操作会被沙箱拦下或请求审批。这两步看完,你就理解 Codex 了。

  • 04

    用 /status 核对状态

    当前模型、审批策略、可写目录、token 余量一屏看全,不确定就先看它。

Terminal · 三种常用启动姿势
# 交互 TUI(默认)
codex

# 非交互:一条任务跑完拿结果就走
codex exec "解释 build 脚本做了什么,输出到 stdout"

# 恢复上次会话(--last 直接接最近一次)
codex resume --last
退出 TUI 用 /quit 或 /exit。会话默认落盘,codex resume 随时能翻旧会话接着干,codex fork 还能把旧会话复制一份分头探索。

从 Claude Code 迁移过来:/import

已经在用 Claude Code?不用从零开始。会话里跑 /import,它会把 Claude Code 的配置、项目文件和近期会话列出来,你勾选哪些要迁移,它负责搬进 Codex 的配置目录和本地文件。AGENTS.md 和 CLAUDE.md 的写法高度相通,约定文件基本可以照搬。

TUI
> /import
# 选择要迁移的配置 / 项目文件 / 历史会话
# 注意:任务运行中不可用,需在本地 TUI 会话里执行

会话管理:分叉、归档与压缩

TUI · 会话操作
> /fork            # 复制当前对话为新线程,试另一条思路
> /side 顺便确认这个方案有没有明显的安全问题
                   # 临时支线提问,不打断主任务
> /compact         # 长对话先压缩,留住关键结论
> /archive        # 归档并退出;codex unarchive 可恢复

注意区分:/new 开新对话但不清屏,/clear 清屏并开新对话,Ctrl-L 只清屏不动对话。归档用 /archive,删除用 /delete——后者不可恢复,还连带删掉派生的子会话。

04

核心概念:沙箱、AGENTS.md、分层配置、云端

沙箱与审批:两层独立旋钮

Codex 的安全模型是两个独立设置的组合。沙箱模式管「命令能碰什么」:read-only(默认,只能读)、workspace-write(可写工作区 + 临时目录)、danger-full-access(无沙箱)。审批策略管「什么时候问你」:默认 on-request(模型自己判断何时请求审批),也可设 never(从不问,失败直接返回给模型)。会话里用 /permissions 随时切预设(如 Read Only、Auto),配置层面写进 config.toml 持久化。

两档怎么搭:日常在别人仓库里围观,read-only 就够;自己的项目开 workspace-write,写文件不打扰你,只有联网、写工作区之外这类越界动作才会请求审批。审批弹出来时看清命令再放行——沙箱挡住了 90%,剩下 10% 的判断权在你。

特别注意:workspace-write 下网络默认是关的——npm install 装不上依赖多半是这个原因,解锁方式见第 07 节。

config.toml · 最常用的一段
model = "gpt-5.3-codex"          # 模型名以 /model 列表为准
approval_policy = "on-request"
sandbox_mode = "workspace-write"

# workspace-write 的细则(可选)
[sandbox_workspace_write]
network_access = true            # 放行沙箱内联网,默认 false
# writable_roots = ["~/logs"]

AGENTS.md:一份写、处处用的项目约定

/init 在当前目录生成 AGENTS.md 脚手架。它是开放标准(agents.md),不止 Codex 读。层级从上往下合并:全局的 ~/.codex/AGENTS.md、仓库根的 AGENTS.md、再到子目录里的 AGENTS.md——越靠近你工作文件的约定优先级越高。内容写法与 CLAUDE.md 同理:命令化、条目化,别写散文。

AGENTS.md 的层级
~/.codex/AGENTS.md                # 全局个人约定,所有项目生效
~/your-project/AGENTS.md          # 仓库根,随 git 提交,全队共享
~/your-project/src/AGENTS.md      # 模块级,处理该目录时优先生效

config.toml 分层与排查

配置在 ~/.codex/config.toml,支持 profiles([profiles.xxx] 配 --profile 切换)。企业托管场景还有更高优先级的 requirements.toml 层。搞不清「为什么这个设置没生效」时,/debug-config 会把每一层的优先级和来源打印出来。

MCP 与云端任务

MCP 服务器配在 config.toml 的 [mcp_servers.*] 段,/mcp 查看会话里可用的外部工具。云端侧:chatgpt.com/codex 派发的任务跑在云端环境里,本地用 codex cloud 浏览、用 codex apply 把云端 agent 产出的 diff 以 git apply 方式落到工作区;GitHub 上的 PR 也能让 Codex 自动做 code review。

config.toml · 接一个 MCP 服务器
[mcp_servers.docs]
command = "npx"
args = ["-y", "@modelcontextprotocol/server-filesystem", "/tmp/docs"]

# 会话里用 /mcp 查看是否连上、有哪些工具
服务器包名与参数以你要接的 MCP 服务器自己的文档为准。
审批预设怎么选:陌生仓库用默认(read-only + on-request);自己的常维护仓库给 workspace-write + Auto 预设,写操作顺畅但越界仍拦;danger-full-access 和 --dangerously-bypass-approvals-and-sandbox 只留给容器与一次性虚拟机。

05

速查表:子命令、斜杠命令、沙箱、配置

下面这块表格能搜。忘了某个命令叫什么,直接搜 沙箱、审批、恢复 之类的关键词。

命令作用
codex交互 TUI 会话(默认入口)
codex "<任务>"进入 TUI 并附带一句开场任务
codex exec "<任务>"非交互执行,输出完退出;提示词可用 stdin 传入
codex exec --json事件流以 JSONL 输出,供脚本消费
codex exec --output-last-message <file>把最终回复写入指定文件,CI 里好用
codex resume [--last]恢复历史会话;--last 直接接最近一次
codex fork复制旧会话为新线程,分头探索不破坏原记录
codex review非交互跑一次代码评审
codex apply把 Codex agent(云端)产出的 diff 以 git apply 落地
codex cloud浏览 Codex Cloud 任务并取回本地(实验特性)
codex login / logout登录(浏览器/设备码/API key)与登出
codex mcp管理外部 MCP 服务器
codex doctor体检:安装、配置、登录态、沙箱运行环境
codex sandbox在 Codex 提供的沙箱里直接跑一条命令调试
codex agents打开 Agent 中心,浏览与切换各会话线程
codex app启动桌面 App(未装会引导安装)
codex update / completion自更新 / 生成 shell 补全脚本
codex --sandbox <模式>启动时指定沙箱模式(read-only 等,exec 也认)
codex -C <目录>指定工作目录再启动
codex --worktree在托管的新 git worktree 里开工,改动隔离
codex --add-dir <目录>额外可写目录(跨仓库任务)
codex -i <图片>附带截图/设计稿作为输入(可逗号分隔多张)
codex --profile <名>套用 config.toml 里定义的整组配置
codex exec --skip-git-repo-check允许在非 git 目录里跑非交互任务

06

实战:本地修 bug + 云端派任务,两条路各走一遍

先走本地 TUI 闭环,再把一个独立任务扔给云端,最后把结果拉回来。

Terminal · 本地:计划 → 执行 → 审查
cd ~/your-project
codex

> /init                # 首次:生成 AGENTS.md 并按团队习惯改好
> /plan 把订单导出从同步改成异步任务,评估影响面
# 它产出方案与文件清单,你确认后退出 plan 模式开干

> 按方案实施,改完跑测试
> /diff               # 亲眼过一遍每个改动
> /review             # 让另一个视角再查一遍

并行:--worktree 隔离开工

大改动不想弄脏工作区,让 Codex 在托管的新 git worktree 里干活——改动隔离在独立目录,主工作区保持干净,完成后自己决定合不合:

Terminal
codex --worktree
> 重构 orders 模块的状态机,保持测试全绿

评审先行:/review 与 codex review

提交前让它换一个视角看一遍改动。TUI 里 /review 审当前工作区;脚本化场景用非交互的 codex review,把评审意见直接产出成文本。它默认用会话模型评审,也可以在 config.toml 里用 review_model 单独指定。

Terminal · 两种评审入口
# TUI 里:审完 /diff 逐条核对
> /review

# 脚本里:非交互评审,结论直接打到 stdout
codex review

非交互:塞进脚本与 CI

Terminal · codex exec
# 一条任务:改完自动跑测试,最终结论写进文件
codex exec "修复 issue #42 描述的空指针,跑 npm test 验证" \
  --output-last-message /tmp/result.md

# 事件流接程序,或从 stdin 喂长任务
codex exec --json "统计 TODO 数量并按模块分组输出"
cat task.md | codex exec -

云端:派出去,拉回来

云端任务的完整循环:在 chatgpt.com/codex 上选好环境(绑定你的 GitHub 仓库)派任务,云端 Agent 在隔离环境里自己跑构建和测试,完成后你会得到一个可审阅的 diff。本地两条命令接住它:

Terminal · 云端任务回本地
# 1) 在 chatgpt.com/codex 或 GitHub 上派发任务(选好环境)
# 2) 云端跑完后,本地浏览并取回
codex cloud
codex apply          # 把云端 diff 以 git apply 落到工作区

GitHub 侧的协作也值得一用:仓库连上 Codex 后,PR 可以交给它自动做 code review,评审意见直接留在 PR 里。人负责决策,它负责把每个 PR 先过一遍眼。

把常用设定固化成 profile

config.toml · 双档位
[profiles.safe]
sandbox_mode = "read-only"
approval_policy = "on-request"

[profiles.fast]
sandbox_mode = "workspace-write"
approval_policy = "on-request"

# 用法:codex --profile fast

配套文件长什么样:一份能直接抄的 AGENTS.md

AGENTS.md · 起步模板
# 项目:订单服务(Node 20 + pnpm)

## 常用命令
- 安装依赖:pnpm install
- 跑测试:pnpm test(改 src/ 后必须跑)
- 本地启动:pnpm dev

## 约定
- 包管理只用 pnpm,禁止 npm install
- 提交信息用中文,格式:模块: 动作
- src/orders/ 是核心域逻辑,改动前先读 src/orders/README.md

按你仓库的真实命令改,别照抄。提交进 git 让全队共享——这是 AGENTS.md 和个人笔记最大的区别。

云端任务的正确用法:派给云端的是「定义清楚、可离线验证」的任务(写模块、补测试、跑迁移);需要来回讨论、看真实运行环境的活留本地。apply 之前先 git status 确认工作区干净,再让云端 diff 落地——混着本地未提交改动是灾难配方。两边用同一个 git 仓库衔接。

07

避坑:四个高频翻车点

Codex 的坑大多和它的沙箱哲学有关:系统在替你守门,你得知道门在哪。

坑一:命令被沙箱拦下 / npm install 失败

症状:写文件成功但 npm install 报网络错误、测试跑不起来。原因几乎总是 workspace-write 下网络默认关闭。三种解法,按胆量递增:当场在审批里放行这一次;临时用 /permissions 切到更宽的预设;在 config.toml 里对信任的目录开 [sandbox_workspace_write] network_access = true。别忘了重启会话让配置生效。

config.toml · 只对该放行的域名放行
# 新版权限档案可以按域名精细化(beta)
default_permissions = "dev-net"

[permissions.dev-net.filesystem]
":minimal" = "read"

[permissions.dev-net.filesystem.":workspace_roots"]
"." = "write"

[permissions.dev-net.network]
enabled = true

[permissions.dev-net.network.domains]
"registry.npmjs.org" = "allow"

坑二:AGENTS.md 死活不生效

自查四件事:文件名必须是 AGENTS.md,全大写,没有后缀;位置要在仓库根或当前工作目录,放错层级读不到;修改后要开新会话,旧会话不会热加载;/init 生成的只是脚手架,里面的注释没删、约定没填,等于没写。用 /status 和 /debug-config 核对它到底加载了哪几层。

  • 文件名拼成 agents.md / AGENT.md / AGENTS.MD——都不行,标准就是全大写 AGENTS.md。
  • 放在仓库根上一级或 home 下以为「全局生效」——全局层在 ~/.codex/AGENTS.md,不是随便哪个上级目录。
  • 写完忘了 git add——队友拉不到,CI 环境也读不到。
  • 在一个会话里改了 AGENTS.md 就指望立刻生效——重新 /new 或重启会话。
层级优先级:子目录的 AGENTS.md 覆盖仓库根的同类约定,仓库根覆盖全局 ~/.codex/AGENTS.md。想让某条规则绝对生效,写在离工作文件最近的层级。

坑三:非 git 目录跑不了 exec

codex exec 出于安全默认要求 git 仓库(改动可追溯)。临时在乱目录跑个只读任务,加 --skip-git-repo-check;但正经任务永远该在 git 仓库里跑——沙箱 + 可回滚的 diff 是它的安全底线。

Terminal
# 在非 git 目录跑一次性任务(仅限只读场景)
codex exec --skip-git-repo-check --sandbox read-only \
  "分析 ~/logs/app.log 里的报错分布,输出 TOP 5"

更简单的做法:临时 git init 一下。沙箱模式用 read-only 时它也不会写任何文件。

坑四:从 Claude Code 过来的心智错位

四点差异提前打好预防针:安全模型——Codex 先沙箱后审批,Claude Code 靠权限模式弹窗,所以别在 Codex 里找 --dangerously-skip-permissions 的等价焦虑,先看沙箱档位;记忆文件——AGENTS.md 是开放标准、按层级合并,CLAUDE.md 是 Claude 生态的名字(Codex 甚至提供 /import 迁移 Claude Code 的配置);会话操作——Codex 的 /new 不清屏、/clear 清屏且开新对话,跟直觉略反;审批词表——这里叫 /permissions 与审批预设,不叫 permission modes。记不住就 /status,一屏看清当前档位。

反过来从 Codex 回 Claude Code 也一样会错位:那边写 CLAUDE.md、弹权限审批、快捷键是 Shift+Tab 轮换模式。两个工具各守各的约定,别指望肌肉记忆无缝迁移——这正是本站把它们各写一页的原因。

08

进阶方向与官方资源

学完本页去哪:先在本节实战里把本地闭环走通,再挑一个独立任务试云端。然后去读 config.toml 完整参考,把 profile 用起来;最后用 Claude Code 教程 对照着补齐另一派的用法,再看 OpenCode——开源可接多模型的终端 Agent,思路又不一样。三家对比着用一周,你会形成自己的工具观。

09

收尾:照着勾一遍

0 / 5

已复制