Codex CLI 不仅能生成代码,更能执行代码。命令执行体系由 exec 命令、执行策略和自定义命令三部分组成,是 Codex 区别于传统代码补全工具的核心能力。
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
# 指定模型 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 生成的代码。