装完不算装好,能跑出 --version 才算;登进去不算登好,能读到一个仓库才算。
装之前先体检依赖——这一步跟具体哪个工具无关,是通用动作。
第一条命令一定要只读——「能不能干活」还没验证,先让它干最没有破坏性的事。
从这一节开始,正式进入「怎么用」。前面两章讲的是「它是什么、边界在哪」, 这一章讲「第一次怎么跑通」。 跑通这件事比看起来重要——因为大部分人的卡点不在「不会用」,在「装不上、登不进」。 沙箱里没有装 Codex(Demo 里真跑了一遍,报「没有这个命令」), 所以这一节的命令一律只贴不跑,但「体检」那个动作是真跑的。 装的三条路径、凭据落点、配置文件的形状都照官方文档写。 这一节值得认真读的理由: 装错的成本很高——版本不对、权限不够、装完跑不起来, 而这些问题的排查方法,换任何工具都用得上。
一、三条安装路径
官方一般给三条路,按平台和习惯选一条。 不要三条都试——装重了之后「到底在用哪个」会变成新的问题。
| 路径 | 适合谁 | 代价 |
|---|---|---|
| npm 全局装 | 本机已有 Node,习惯命令行 | 升级要再跑一次命令 |
| 包管理器(brew 等) | macOS,想要统一升级 | 版本可能落后一点 |
| 官网下载安装包 | 不想碰命令行 | 升级要手动 |
怎么选?看你怎么管工具。
如果你用 brew upgrade 统一升级所有命令行工具,就走 brew;如果你项目里就是用 npm,就走 npm。
别为了装一个工具引入一套新的包管理。
装完必须验证。
--version 能跑出东西,才算装好——这一步不能靠「看到提示说 installed」来判断,
因为 PATH 没配好时,装了也是「找不到命令」。
二、登录与凭据落在哪
登录会往用户目录写一个凭据文件。
这个文件有几个特性要记住:
它在用户目录里(不在项目里)、它是明文或可解的(不是加密的)、
它能代表你操作(所以等于密码)。
三条推论,每条都对应一个真实事故:
① 它不该进版本库——项目里的 .gitignore 要覆盖它,而且不要在项目目录里跑登录;
② 它不该贴给别人——包括贴给 AI;③ 换机器要重新登——它不是可移植的配置。
还有一条容易被忽略:登出要真的删掉那个文件。
很多工具的「登出」只是清了内存里的状态,文件还在。
换电脑、卖旧机器之前,手动确认那个文件不在了。
配置文件是另一回事,它不含凭据。
模型、审批策略、沙箱模式、MCP 服务器都写在配置里——
这些是可以共享的,也是团队统一的关键(第 13 章讲)。
三、第一条验证命令
装好、登进去之后,第一条命令该干什么? 不是「帮我改个 bug」,是「列一下目录结构,不要修改任何文件」。 为什么?因为它一次验证三件事: ① 能启动(命令不报错)、② 能读到仓库(能列出真实文件)、③ 能听懂「不要修改」(只读指令被遵守)。 三件事都过了,才谈得上「让它动手」。 这一步的另一个作用是「建立基线」。 你看到了它眼里的仓库长什么样—— 如果它列出来的东西不对(少了目录、多了临时文件),说明它的视野有问题, 后面所有的判断都会带偏。 顺带说一句:第一条命令别用中文标点混着写。 「列出目录结构,不要修改文件」这句话里,「,」是全角还是半角,对它没影响, 但对你排查「它为什么没听懂」有影响——先排除掉变量,再怀疑它。
四、动手 Demo:装之前先把环境查一遍
这个 Demo 做两件事:真跑一遍环境体检,然后把官方的安装与配置原码贴出来。
体检部分是真的——node、git、python 三个都在,codex 不在,
它老老实实报「本机没有这个命令」,退出码 127。
后面贴原码的部分标了「本沙箱不执行」,那些命令你在自己机器上跑,路径与字段以官方文档为准。
def sh(cmd):
for name in (cmd[0], cmd[0] + ".cmd", cmd[0] + ".exe"):
try:
r = subprocess.run([name] + cmd[1:], capture_output=True)
return r.returncode, r.stdout.decode().strip()
except FileNotFoundError:
continue
return 127, "(本机没有这个命令)"
for name, cmd in (("node", ["node", "--version"]),
("git", ["git", "--version"]),
("codex", ["codex", "--version"])):
rc, out = sh(cmd)
print(pad(name, 8) + pad(out, 38) + ("✓" if rc == 0 else "✗"))
实跑输出:
--------------------------------------------------------------------
装之前先把环境查一遍
--------------------------------------------------------------------
① 五条依赖,逐个体检
--------------------------------------------------------------------
node v22.22.2 ✓
npm 10.9.7 ✓
git git version 2.55.0.windows.3 ✓
python Python 3.13.14 ✓
codex 没有这个命令 ✗
五项里 4 项就位。
② 缺的那一项,报什么错
--------------------------------------------------------------------
退出码 127
输出:(本机没有这个命令)
这个沙箱里没装 Codex,所以从这一节开始,凡是 codex 命令一律只贴不跑。
! 但「装之前先体检」这个动作本身是真的——它跟具体哪个工具无关。
③ 官方原码:三条安装路径
--------------------------------------------------------------------
[官方原码 · 本沙箱不执行]
| # 路径一:npm 全局装(最通用)
| npm install -g @openai/codex
|
| # 路径二:Homebrew(macOS)
| brew install codex
|
| # 路径三:下载安装包(官网)
| # 装完验证
| codex --version
教材 3.1 的三条路径,按平台选一条;装完必须能跑出 --version 才算装好。
④ 登录:凭据落在哪
--------------------------------------------------------------------
登录之后凭据落在本地,不在仓库里。位置大致是用户目录下的配置目录。
[官方原码 · 本沙箱不执行]
| ~/.codex/auth.json # 登录凭据(不要提交进仓库)
| ~/.codex/config.toml # 配置(模型、审批策略、MCP 服务器等)
这两个文件的路径是本课约定,实际以官方文档为准。
⑤ 配置文件的形状
--------------------------------------------------------------------
| # ~/.codex/config.toml
| model = "gpt-5-codex"
| approval_policy = "on-request" # untrusted / on-failure / on-request / never
| sandbox_mode = "workspace-write" # read-only / workspace-write / danger-full-access
|
| [mcp_servers.docs]
| command = "npx"
| args = ["-y", "@some/docs-mcp"]
三个键值得记:模型、审批策略、沙箱模式。
审批策略决定「什么时候停下来问你」,沙箱模式决定「它能写到哪儿」——这两个是安全的主开关。
⑥ 装完的第一条验证命令
--------------------------------------------------------------------
不要一上来就让它改代码。第一条命令应该是「只读」的:
[官方原码 · 本沙箱不执行]
| codex "列出这个仓库的目录结构,不要修改任何文件"
这条命令验证三件事:能启动、能读到仓库、能听懂「不要修改」。
! 第一条命令只读,是因为「它到底能不能干活」还没验证,先让它干最没有破坏性的事。
体检表里五项,四项就位,缺的那一项是 Codex 本身。
注意 codex 那一行的输出是「没有这个命令」,退出码 127——
这个 127 就是「命令找不到」的标准退出码,脚本里可以直接判它。
为什么要写这个体检脚本,而不是一条条手敲?
因为装完之后你会换机器、会重装系统、会给同事装。
脚本一次写好,后面每次都是零成本——这也是「把动作写成文件」的第一个例子,第 3.6 节会讲透。
第五节贴的配置文件里,三个键值得单独记:
模型(用哪个)、审批策略(什么时候停下来问你)、沙箱模式(它能写到哪儿)。
后两个是安全的主开关——
「审批策略」管的是「动不动手前问你」,「沙箱模式」管的是「最多能碰到哪里」。
最后一段那个「第一条命令只读」,是从事故里学来的。
很多人的第一条命令是「帮我修一下这个 bug」——
而那时候它能不能读文件、会不会乱写,都还没验证。
先只读,再动手,顺序不能反。
30 秒实验
- 给你的机器写一个五行的体检脚本(node、git、python、目标工具、包管理器)。
存成
doctor.py放项目里,下次换机器直接跑。 - 打开你的
~/.gitignore_global或者项目.gitignore,确认凭据目录被忽略了。 没忽略的话,现在加——一次忘了提交,就等于把钥匙公开了。 - 检查你的配置文件在哪、里面写了什么。 如果里面有密钥,把它挪到环境变量里——配置文件是要进版本库的。
常见误区
- 「提示说装好了就是装好了。」
PATH 没配的时候,装了也是「找不到命令」。
只有
--version跑出东西才算装好。 - 「登进去就行了,凭据文件不用管。」 那个文件等于你的身份。 它进了版本库、贴进了聊天窗口,就等于把身份交出去了。 登出要确认文件真的没了,不是点了按钮就算。
- 「第一条命令当然是让它干活。」 第一条命令是验证环境,不是验证能力。 先只读地跑一条,确认它能看见仓库、能听懂限制—— 这一步省下的不是时间,是「它在没验证过的状态下乱改」的风险。
自测三问(点开对答案)
1. 为什么「--version 能跑」才算装好? —— **因为「装了」和「能用」是两件事。** PATH 没配好时,文件在硬盘上但命令找不到。 **退出码 127 就是「命令不存在」。** 2. 凭据文件和配置文件,哪个能进版本库? —— **配置文件能,凭据文件不能。**配置里是模型、审批策略、沙箱模式这些可共享的设置; **凭据等于密码,进版本库就等于公开。** 3. 第一条命令为什么选「只读」的? —— **因为它一次验证三件事:能启动、能读到仓库、能听懂「不要修改」。** **三件事过了才谈得上让它动手。** 顺序反了,你就在没验证的状态下给了它写权限。下一篇 3.2 讲第一个选择: 同一件事,是在你本机跑,还是扔到云端跑——判据只有三条,但判错会出真事故。
- ☐ (本篇完,下一篇 3.2 任务入口选择:本地执行,还是交给云端做)