Codex CLI 完全指南:第四章·命令执行体系

Codex CLI 不仅能生成代码,更能执行代码。命令执行体系由 exec 命令、执行策略和自定义命令三部分组成,是 Codex 区别于传统代码补全工具的核心能力。

exec 命令

codex exec 是非交互模式的入口。它会读取你的指令,生成并执行命令,然后退出——完美适配脚本和 CI/CD 流水线。

基本用法

codex exec "创建一个 React 组件,包含用户名输入框和提交按钮"

Codex 会:

分析当前项目结构

确定使用 React + TypeScript

创建组件文件

写入代码

返回成功信息并退出

管道输入

可以将文件内容或命令输出传给 Codex:

cat error.log | codex exec "分析这个错误日志,给出修复方案"

git diff HEAD~1 | codex exec "review 这些改动,列出潜在问题"

codex exec "列出 src/ 下所有超过 300 行的文件" | less

exec 的关键参数

# 指定模型
codex exec --model gpt-4o --provider openai "优化这个算法的时间复杂度"

# 自动确认所有操作(CI/CD 中使用)
codex exec --yes "将所有 console.log 替换为 logger.debug"

# 设置超时时间(秒)
codex exec --timeout 300 "运行完整的测试套件并修复失败的测试"

# 指定工作目录
codex exec --workdir /path/to/project "初始化 TypeScript 配置"

# 详细输出
codex exec --verbose "分析项目的依赖关系"

实战:自动化代码审查

#!/bin/bash
# codex-review.sh
BRANCH=$(git rev-parse --abbrev-ref HEAD)
DIFF=$(git diff origin/main...$BRANCH)

echo "$DIFF" | codex exec --yes \
  "审查以上代码变更,输出:
   1. 潜在 bug
   2. 安全漏洞
   3. 性能问题
   4. 代码风格违规
   5. 总体评分 (1-10)"

实战:自动化测试修复

npm test 2>&1 | codex exec --yes \
  "这些是测试失败信息。分析失败原因并修复源代码,不要修改测试文件。"

执行策略

Codex 的执行策略决定了它是否能运行 shell 命令、读写文件。策略配置方式:

三种策略

| 策略 | 行为 | 适用场景 |
|------|------|----------|
| always | AI 可直接执行所有操作 | 完全隔离的沙箱环境 |
| ask | 每次执行前询问用户 | 日常开发(默认推荐) |
| never | 仅展示代码不执行 | 代码审查、学习研究 |

配置文件设置

execution:
  policy: ask

命令行覆盖

codex --exec-policy always "安装缺失的 npm 依赖"
codex exec --yes "..."           # --yes 等同于 --exec-policy always

命令类型控制

更细粒度的控制可以限制特定类型的命令:

execution:
  policy: ask
  allow_network: true      # 是否允许网络请求(npm install, curl 等)
  allow_file_write: true   # 是否允许写入文件
  allow_file_delete: false # 是否允许删除文件
  allow_git: true          # 是否允许 git 操作
  blocked_commands:        # 永远禁止的命令列表
    - "rm -rf /"
    - "sudo"
    - "chmod 777"
    - "DROP TABLE"
    - "shutdown"

交互模式中的确认提示

policy: ask 时,每次执行前会看到类似提示:

─────────────────────────────────────────
Command: npm install zod
─────────────────────────────────────────
[Y] Yes  [N] No  [A] Always for this project  [S] Skip  [D] Details

自定义命令系统

自定义命令是把经常重复的 Codex 指令封装为快捷命令。定义在 codex.yaml 中:

基础定义

commands:
  review:
    description: "代码审查当前改动"
    prompt: |
      审查当前的 git diff,按以下格式输出:
      - 🔴 严重问题
      - 🟡 改进建议
      - 🟢 做得好的地方

  refactor:
    description: "重构指定文件"
    prompt: "分析 {{.args}} 的设计问题并重构,保持功能不变"

  explain:
    description: "解释代码逻辑"
    prompt: "详细解释 {{.args}} 中的代码逻辑,包括设计模式和权衡"

  test:
    description: "为指定文件编写测试"
    prompt: "为 {{.args}} 编写完整的单元测试,使用项目现有的测试框架"

使用自定义命令

codex run review
codex run refactor src/services/user.ts
codex run explain src/utils/crypto.ts
codex run test src/services/auth.ts

带模板变量

commands:
  pr:
    description: "创建 PR"
    prompt: |
      基于当前的 git 改动:
      1. 生成 Conventional Commits 格式的提交信息
      2. 生成 PR 标题和描述
      3. 分支名为 {{.branch}}
      4. 目标分支为 {{.base}}

      {{.diff}}

调用时传参:

codex run pr --var branch=feature/user-auth --var base=main

链式命令

commands:
  ship:
    description: "一键发布:测试 + 格式化 + 提交 + 推送"
    steps:
      - run: test
      - command: "npx prettier --write ."
      - run: review
      - command: "git add ."
      - prompt: "生成适合本次改动的 Conventional Commit 信息"
      - command: "git commit -m '{{.last_output}}'"
      - command: "git push"

一个 codex run ship 完成整套发布流程。

交互模式中的命令执行

在交互模式(默认 codex 命令进入)中,Codex 会自动决定何时需要执行命令。你可以用自然语言指示:

> 初始化一个 Next.js 项目,使用 TypeScript,启用 App Router

Codex 会:npx create-next-app@latest . --typescript --app ✓

你也可以显式要求不执行:

> 告诉我如何设置 PostgreSQL 连接池,但不要执行任何命令

安全最佳实践

永远不要用 policy: always 在生产环境,除非你完全理解后果

配置 blocked_commands 黑名单,防止危险操作

使用沙箱模式(见第五章),将 AI 命令隔离在容器中

代码审查:对 exec 的输出保持审视,尤其在 CI/CD 中开启了 --yes

限制写权限范围:通过 .gitignore 追加 Codex 的 ignore 规则

小结

Codex 的命令执行体系打通了"想"和"做"之间的鸿沟。exec 让你在脚本中使用 AI,执行策略让你掌控权限级别,自定义命令让重复工作一键完成。下一章将深入沙箱安全模式,学习如何在隔离环境中安全运行 AI 生成的代码。