Codex CLI 新手教程
OpenAI 出品的终端编码 Agent:你用一句话描述任务,它在沙箱里读代码、跑命令、改文件,最后把 diff 交给你确认。
1 这是什么
Codex CLI 是 openai/codex 开源的一个终端编码 Agent,官方一句话定义是 "Lightweight coding agent that runs in your terminal"。它不是补全插件,也不是聊天框——它会在你的项目目录里真正地执行命令、改文件、跑测试,然后把改动以 diff 的形式摊给你看。
三个容易混淆的入口,先分清:
| 形态 | 在哪跑 | 适合 |
|---|---|---|
| Codex CLI(本教程) | 你的本机终端 | 本地调试、快速迭代、接 CI |
| Codex IDE 扩展 | VS Code / Cursor / Windsurf | 想在编辑器里用 |
| Codex Web | chatgpt.com/codex 云端 | 长任务、并行跑、自动开 PR |
- 不做行内补全——它不接管你的光标,Copilot 干的那活它不干。
- 不在云端代跑——CLI 全程在你本机的沙箱里执行,代码不出机器(除非你自己接 MCP 或 Cloud)。
- 不擅自扩大权限——能写哪些目录、要不要问你,是两个必须显式指定的开关,见第 11 节。
- 不是聊天机器人——没有"帮我写首诗"这类场景,它是围绕代码仓库工作的。
2 为什么需要它
在它之前,"让 AI 帮我改代码"基本靠三种凑合办法,每种都卡在同一个地方:
| 老办法 | 能走到哪一步 | 卡在哪 |
|---|---|---|
| IDE 里逐行补全 | 把函数体写出来 | 写完了没人跑测试,也改不动跨文件的调用链 |
| 把报错粘进网页聊天框 | 拿到一段建议代码 | 上下文靠手搬,命令还是你自己敲,改完还得自己验证 |
| 写一次性脚本批量替换 | 处理死规则的机械修改 | 遇到意外情况直接崩,且脚本复用一次就废 |
第二个洞察是把约定固化下来:AGENTS.md 让"这个项目怎么构建、怎么测试、哪些目录别碰"变成随仓库走的文件,Agent 每次开工前先读,而不是每一轮对话都重新猜一遍你的习惯。
3 核心流程
一次典型的 Codex 任务只有三步,中间那步是它替你干的:
4 安装
四条路,挑一条就行。独立安装脚本最省事,它会从 releases.openai.com 拉预编译二进制,装不上再自动回退到 GitHub Releases。
| 方式 | 命令 | 适合 |
|---|---|---|
| 独立脚本(推荐) | curl -fsSL https://chatgpt.com/codex/install.sh | sh | macOS / Linux,不装 Node 也能用 |
| npm | npm install -g @openai/codex | 已有 Node 环境 |
| Homebrew | brew install --cask codex | 习惯 brew 管理 |
| 手动下载二进制 | GitHub Releases 页面选对应平台 | 离线环境 / 想锁死版本 |
Windows 只有一条路:Windows 11 + WSL2,在 WSL 里按 Linux 装。原生 Windows 不在支持列表里(有独立的 Windows 沙箱文档页,但 CLI 主路径是 WSL2)。PowerShell 安装脚本为 Windows 场景提供:
powershell -ExecutionPolicy ByPass -c "irm https://chatgpt.com/codex/install.ps1 | iex"
@openai/codex。如果你敲了 npm i -g codex,命令会"成功",但装到的是另一个同名无关项目,接下来十分钟你会在一个错误的工具里找 bug。装错了先 npm uninstall -g codex 再装正确的。想强制走 GitHub Releases(比如公司网络拦了 releases.openai.com):
curl -fsSL https://chatgpt.com/codex/install.sh | CODEX_INSTALLER_USE_RELEASES_OPENAI_COM=false sh
从 GitHub Release 手动下载时,挑你平台那一个,解压后重命名成 codex:
| 平台 | 文件名 |
|---|---|
| macOS(Apple Silicon) | codex-aarch64-apple-darwin.tar.gz |
| macOS(Intel) | codex-x86_64-apple-darwin.tar.gz |
| Linux x86_64 | codex-x86_64-unknown-linux-musl.tar.gz |
| Linux arm64 | codex-aarch64-unknown-linux-musl.tar.gz |
更新和装是同一条命令:再跑一次安装脚本,或 codex update。
5 环境自检
装完先跑这三条,全绿再往下走:
codex --version # 我本地实测输出:codex-cli 0.153.0
codex login status # 看当前登录状态
codex doctor # 一次性诊断安装、配置、鉴权、运行时健康度
| 依赖 | 要求 | 说明 |
|---|---|---|
| 操作系统 | macOS 12+ / Ubuntu 20.04+ / Debian 10+ / Windows 11 via WSL2 | 官方明确要求,Windows 原生不支持 |
| Git | 2.23+(可选但推荐) | 内置 PR 相关能力依赖它;不装也能跑,加 --skip-git-repo-check |
| 内存 | 4GB 最低,8GB 推荐 | Agent 会把仓库结构和命令输出塞进上下文 |
- ChatGPT 账号(推荐):跑
codex后选 Sign in with ChatGPT,Plus / Pro / Business / Edu / Enterprise 套餐都包含额度。 - API key:走
printenv OPENAI_API_KEY | codex login --with-api-key;已有访问令牌则用printenv CODEX_ACCESS_TOKEN | codex login --with-access-token。API key 方式需要额外配置,按量计费。
6 第一次实战
别拿真实项目开刀。先建一个能删的沙盒仓库,五分钟跑通全流程。
# 1 建一个临时项目并进 git(Codex 默认要求在 git 仓库里跑)
mkdir -p ~/demo/hello-codex && cd ~/demo/hello-codex
git init
# 2 放一个有问题的文件
printf 'def add(a, b):\n return a - b\n' > calc.py
# 3 启动交互式会话(首次会让你登录)
codex
进到 TUI 之后按顺序做:
/init # 让它扫一遍仓库,生成 AGENTS.md
"calc.py 里的 add 函数算错了,改对并补一个 pytest 测试,然后跑测试给我看"
/permissions # 想改权限边界时开这个面板
/status # 看当前会话的模型、目录、配置
? # 忘了快捷键就按问号
AGENTS.md,再决定怎么跑测试。所以先把构建/测试命令写进 AGENTS.md,比在对话里反复强调有用得多——下一次会话它照样记得。想让它改别处的文件(比如 monorepo 里的兄弟目录),启动时加 --add-dir;想在非 git 目录里跑,加 --skip-git-repo-check。
codex --add-dir ../shared-types
codex -C ~/other/project "看看这里的构建为什么挂了" # -C 指定工作根目录
7 产物结构
Codex 会在你机器上留下这几类文件。搞清楚它们在哪,出问题时才知道该删哪个、该改哪个。
| 路径 | 用途 |
|---|---|
~/.codex/config.toml | 主配置文件。命令行用 -c key=value 可临时覆盖任意一项 |
~/.codex/AGENTS.md | 全局指令:跨项目生效,适合写个人偏好(回答风格、详细程度) |
~/.codex/<name>.config.toml | profile 配置,用 codex -p <name> 叠在主配置之上 |
~/.agents/skills/<skill>/SKILL.md | 全局技能,所有仓库都能用 |
<repo>/AGENTS.md | 仓库指令,签进版本控制给团队用;子目录里还能再放,离工作目录越近优先级越高 |
<repo>/.agents/skills/ | 团队共享技能,随仓库分发 |
| 本地会话记录 | 由 resume / fork / archive / delete 管理,加 --ephemeral 可不落盘 |
-c > profile 文件 > ~/.codex/config.toml;而 AGENTS.md 反过来——离当前工作目录越近的越优先(子目录 > 仓库根 > 全局)。前者是"这次怎么跑",后者是"这个项目什么规矩"。SKILL.md 的样子(front matter 里的 description 决定它什么时候被自动挑中,写清楚很重要):
---
name: commit
description: Stage and commit changes in semantic groups. Use when the user wants
to commit, organize commits, or clean up a branch before pushing.
---
1. Do not run `git add .`. Stage files in logical groups by purpose.
2. Group into separate commits: feat → test → docs → refactor → chore.
3. Write concise commit messages that match the change scope.
4. Keep each commit focused and reviewable.
8 日常怎么用
TUI 里的斜杠命令是最常用的五个:
| 命令 | 作用 |
|---|---|
/init | 扫一遍仓库,生成 AGENTS.md 骨架 |
/status | 看当前会话的配置、模型、工作目录 |
/permissions | 调整这次运行的边界:什么时候能直接改文件/跑命令 |
/model | 换模型和推理强度(reasoning effort) |
/review | 审查改动并找问题(对比基线分支 / 未提交改动 / 某个 commit) |
终端外更常用的是这些子命令:
| 命令 | 干嘛的 |
|---|---|
codex | 进交互式 TUI;后面直接跟提示词也能开跑 |
codex exec(别名 e) | 非交互跑一次就退出,脚本 / CI 用 |
codex review | 非交互代码审查,支持 --base / --uncommitted / --commit |
codex resume --last | 接着上次会话继续;codex fork 则从某轮分叉重开 |
codex apply(别名 a) | 把最近一次产出的 diff git apply 到工作区 |
codex mcp | 管理 MCP 外部服务器:list / get / add / remove / login |
codex plugin | 插件市场:add / list / marketplace / remove |
codex doctor / codex update | 自检 / 升级 |
codex features list | 看当前版本所有 feature 开关(stable / under development / removed) |
- ✅ 它会先读
AGENTS.md,再动手。 - ✅ 它执行的每条命令、每处改动都会显示在 transcript 里,可回看。
- ✅ 越界的动作(比如访问沙箱外的网络)会停下来问你。
- ❌ 它不会自己 push 到远端、不会自己合并分支——除非你明确让它做并批准。
- ❌ 它不会"记住"上一次会话,除非你用
resume或把结论写进AGENTS.md。
9 进阶玩法
9.1 非交互执行:codex exec
交互式 TUI 适合探索,流水线里要用 exec:一次调用、跑完就退、输出可被程序消费。
# 只读沙箱里审一段 diff,输出 JSONL 给后续脚本处理
codex exec --sandbox read-only --json "总结这个 diff 的风险点"
# 把最后一条消息写到文件,方便贴到 PR 评论里
codex exec -o /tmp/review.md "审查未提交的改动"
# 从 stdin 喂提示词;配合 --cd 指定仓库
git diff | codex exec --cd ~/code/my-app - "解释这次改动会影响哪些调用方"
# 结构化输出:给它一个 JSON Schema,让它按格式答
codex exec --output-schema ./schema.json "列出所有公开函数及其参数"
CI 里常用的几个附加参数:--json(JSONL 事件流)、-o(最后消息落盘)、--ephemeral(不落会话文件)、--skip-git-repo-check(非 git 目录也能跑)、--strict-config(config.toml 有它不认识的字段就报错,防拼写错误)。
exec 默认日志级别是 RUST_LOG=error 且直接打在终端里;TUI 想看明文日志要显式开:
codex -c log_dir=./.codex-log
tail -F ./.codex-log/codex-tui.log
9.2 代码审查:codex review
codex review --uncommitted # 审 staged / unstaged / untracked 改动
codex review --base main # 对比基线分支(PR 风格)
codex review --commit abc1234 # 审某个 commit 引入的改动
9.3 会话管理:resume / fork / archive
codex resume --last # 接着最近一次会话
codex resume --all # 列出所有会话(不限当前目录)
codex fork --last # 从最近一次分叉出一条新分支重来
codex resume --include-non-interactive # 把 exec 跑过的也算进来
codex archive <会话名或 id> # 归档;delete 是彻底删除
9.4 接外部系统:MCP
MCP(Model Context Protocol)是 Codex 连外部工具的标准方式:Codex 是 host,内部连接是 client,外部系统(Figma、Linear、GitHub、内部知识库)是 server。server 可以暴露 tools(动作)、resources(数据)、prompts(模板)。
codex mcp list # 看已配置的服务器
codex mcp add --url https://example.com/mcp
codex mcp get <name>
codex mcp remove <name>
~/.codex/config.toml,CLI、IDE 扩展、桌面端共用一份。第三方 MCP 不是可信执行环境——接之前先确认来源、权限范围和认证方式。9.5 把重复流程变成技能:Skills
一个技能 = 一个 SKILL.md,可带 scripts/、references/、assets/。Codex 用渐进披露加载:先只拿 name + description 做发现,选中了才读 SKILL.md,真正需要时才读 references 或跑 scripts——所以技能再多也不会一上来撑爆上下文。
放全局(~/.agents/skills)还是仓库(.agents/skills),取决于这个流程是"你个人的习惯"还是"团队的规矩"。技能是编写格式,plugin 是分发单元:要跨团队发就把技能打包成 plugin。
9.6 其余好用的开关
| 参数 | 作用 |
|---|---|
-m, --model | 指定模型 |
-p, --profile <name> | 叠一层 $CODEX_HOME/<name>.config.toml,按场景切配置 |
-i, --image <file> | 把报错截图、架构图、设计稿塞进首条提示 |
--search | 开实时联网搜索(搜索行为会记进 transcript) |
--oss / --local-provider | 接本地开源模型(lmstudio 或 ollama) |
--enable / --disable | 开关 feature flag,等价于 -c features.<name>=true |
-c <key=value> | 临时覆盖任意配置项,值按 TOML 解析 |
codex -c model="o3" -c 'sandbox_permissions=["disk-full-read-access"]'
codex -c shell_environment_policy.inherit=all
codex --enable hooks
10 不止于此
名字叫 CLI,但它能待的地方不止终端:
CI 里的自动审查
codex review --base main --json 挂到流水线,失败项直接贴回 PR,人只管看结论。
批量机械改动
配合 exec 循环多个目录:改类名、迁 API、补 JSDoc,一次一目录,逐个看 diff。
交给云端跑
codex cloud 浏览云端任务、提交工作、把结果拉回本地仓库,长任务不用守着终端。
桌面端 / IDE
codex app 启动桌面端;VS Code、Cursor、Windsurf 有 IDE 扩展,共享同一份 MCP 配置。
反过来当工具
codex mcp-server 把 Codex 自己变成 stdio MCP server,让别的 Agent 来调它。
子 Agent 分工
subagents 把嘈杂或专业化的活(跑测试、捞生产日志)分给专职子 Agent,主会话只收结论。
11 沙箱与审批:先把边界定好
这是用 Codex 之前最该花两分钟搞懂的一节。两个维度各自独立:
能碰什么(-s, --sandbox)
| 取值 | 能干什么 | 什么时候用 |
|---|---|---|
read-only | 只读,写不了任何东西 | 审查、分析、还不信任这条提示词时 |
workspace-write | 能在项目目录内改文件、跑命令 | 日常主力档位 |
danger-full-access | 不设限 | 只用于本身已被隔离的环境(容器、CI runner),别在自己笔记本上开 |
什么时候问你(-a, --ask-for-approval)
| 取值 | 行为 |
|---|---|
on-request | 由模型判断什么时候该请示你 |
never | 从不问;被拒的操作直接作为执行失败回传给模型,而不是弹窗打断 |
还有两个明确标着危险的开关,看名字就该知道用途:
--approve-for-me:把审批请求转交给自动审查,配合workspace-write沙箱使用。--dangerously-bypass-approvals-and-sandbox:跳过一切确认且不沙箱化。文档原话是 EXTREMELY DANGEROUS,只该用在已经外部沙箱化的环境里。
# 日常推荐组合:项目内放开写,越界才问我
codex -s workspace-write -a on-request
# CI 里的审查任务:只读 + 不打断
codex exec --sandbox read-only -a never "审查这个 diff"
read-only 把提示词跑顺,再放到 workspace-write;danger-full-access 和 bypass 类开关永远只出现在容器里。单机开发机上最稳的默认就是「项目内自由、越界请示」。12 FAQ / 踩坑
装完 codex 跑起来像个陌生工具,命令对不上
npm uninstall -g codex,再 npm install -g @openai/codex。验证:codex --version 应该输出 codex-cli x.y.z。
提示"不在 git 仓库里",拒绝启动
git init(顺带获得 git 提供的回滚能力);确实不想用 git → 加 --skip-git-repo-check。但请想清楚:没有 git,你就少了一层"一键撤销 Agent 改动"的保险。
安装脚本卡住 / 下载极慢
releases.openai.com 拉,超时会自动回退 GitHub Releases。想直接走 GitHub,设环境变量 CODEX_INSTALLER_USE_RELEASES_OPENAI_COM=false(0 和 no 也认)。还可以直接从 GitHub Releases 页面手动下二进制。
它改乱了我的文件,怎么回退
git diff 看改动,git checkout -- . 全量撤销。更稳妥的做法是动手前先建分支;不想留下会话痕迹时用 codex exec --ephemeral。
关掉终端后,上次的上下文还能接着用吗
codex resume --last 接着最近一次;codex resume 进选择器,--all 看全部;想从某一轮重开用 codex fork --last。但要注意:会话记忆不等于长期记忆,希望它每次都遵守的规矩应该写进 AGENTS.md。
怎么知道它到底执行了什么
codex -c log_dir=./.codex-log,然后 tail -F ./.codex-log/codex-tui.log。非交互场景加 --json 拿到 JSONL 事件流,便于存档和排查。
改了 config.toml 没生效,或者怀疑写错了字段名
--strict-config(exec 子命令支持):遇到当前版本不认识的字段直接报错,专治拼写错误。排查顺序:codex doctor → codex --version → codex -c <key>=<value> 临时覆盖验证。不同版本配置项会变,别照搬旧教程的示例。
Windows 原生终端能用吗
install.ps1) 面向 Windows 场景,但主支持路径仍是 WSL2。
它老是弹审批,很烦
workspace-write 下不该反复问。如果只是想让它自己判断,用 -a on-request;要走自动审查用 --approve-for-me。--dangerously-bypass-approvals-and-sandbox 能彻底静音,但那个开关挂在你自己机器的全部文件上——除非你在容器里,否则别碰。
想让它遵守团队规范,每次都要重复说一遍吗
AGENTS.md:构建和测试命令、评审要求、仓库约定、哪些目录别碰。放仓库根给团队,子目录里可以放更具体的(离工作目录越近优先级越高)。维护心法:它反复犯同一个错就加一条规则;同一个 PR 反馈出现第二次就固化下来;在 GitHub PR 评论里 @codex 可以委派它自己去更新 AGENTS.md。
13 开源与贡献政策
许可证是 Apache-2.0,商用没问题。但有一条和其他开源项目很不一样,值得提前知道:
想自己改代码自己用,可以从源码构建(Rust 工具链):
git clone https://github.com/openai/codex.git
cd codex/codex-rs
cargo build
cargo run --bin codex -- "explain this codebase to me"
完整构建流程(rustfmt、clippy、just、dotslash、nextest 等)见仓库 docs/install.md。仓库还提供 DotSlash 文件,可以在源码控制里锁定所有人用同一个版本的二进制。
14 参考链接
| 资源 | 地址 |
|---|---|
| GitHub 仓库 | github.com/openai/codex |
| 官方 Codex 文档 | developers.openai.com/codex |
| CLI 概览 | developers.openai.com/codex/cli |
| 安装与源码构建 | docs/install.md |
| 定制层(AGENTS.md / Skills / MCP) | Codex customization |
| IDE 扩展 | developers.openai.com/codex/ide |
| Codex Web(云端) | chatgpt.com/codex |
| 套餐包含哪些额度 | Codex in ChatGPT 说明 |
npx @openai/codex@latest --version 实测)、仓库 README 与 docs/install.md、以及官方 Codex 文档整理。Codex 迭代很快,命令与配置项请以 codex --help 和官方 Config Reference 为准。