Codex 规则技巧:用 .rules 文件决定哪些命令放行、询问或禁止

发布于 2026-11-05 · 5 分钟读完 · Codex / 规则 / 使用技巧

不想 Codex 每次运行常用命令都弹窗,又想把危险命令彻底拦住,可以写一个 .rules 文件。本文按官方文档讲清 prefix_rule 各字段的含义、多条规则的优先级、连写命令的拆分方式,以及用 codex execpolicy check 测试规则的方法。

用 Codex 时,每次它要在沙箱外运行 gh pr view 这类命令都弹窗确认,时间长了很打断节奏;反过来,有些危险命令你希望它永远不要碰。Codex 的 规则(rules) 就是用来解决这件事的:用一个 .rules 文件,按命令前缀决定「直接放行」「每次问我」还是「一律禁止」。本文按 OpenAI 官方文档讲清规则文件怎么写、怎么测、有哪些容易踩的坑。官方文档目前把规则标为实验功能。

规则文件放在哪里

在某个生效的配置层旁边建一个 rules/ 文件夹,里面放 .rules 文件。最常用的是用户层:

~/.codex/rules/default.rules

几点要知道:

  • Codex 启动时会扫描每个生效配置层下的 rules/,包括团队配置的位置和用户层 ~/.codex/rules/;
  • 项目里的 <仓库>/.codex/rules/ 只有在项目的 .codex/ 层被信任后才会加载;
  • 在终端界面里把某个命令加入允许列表时,Codex 会自动写进 ~/.codex/rules/default.rules,以后运行就不再询问;
  • 改完规则文件要重启 Codex 才生效。

写第一条规则

规则用 prefix_rule() 来写。下面这条的意思是:在沙箱外运行以 gh pr view 开头的命令前,先问我。

prefix_rule(
    pattern = ["gh", "pr", "view"],
    decision = "prompt",
    justification = "查看 PR 需要确认",
    match = [
        "gh pr view 7888",
        "gh pr view 7888 --json title,body,comments",
    ],
    not_match = [
        "gh pr --repo openai/codex view 7888",
    ],
)

各字段的含义:

  • pattern(必填):要匹配的命令前缀,是一个非空列表。每一项可以是一个固定字符串,比如 "pr";也可以是几个候选词组成的列表,比如 ["view", "list"],表示这个位置上任意一个都算匹配。
  • decision:匹配后怎么处理,不写时默认是 allow。
  • allow:在沙箱外直接运行,不询问;
  • prompt:每次运行前都询问;
  • forbidden:直接拦下,不询问。
  • justification(可选):写给人看的理由,Codex 会在审批提示或拒绝信息里显示它。用 forbidden 时,官方建议在这里写上推荐的替代做法,例如「用 rg 代替 grep」。
  • match / not_match(可选):相当于规则自带的小测试。Codex 加载规则时会用这些例子检查,规则写错了能马上发现。上面 not_match 里的例子不匹配,是因为 pattern 必须是严格的前缀,参数顺序变了就不算。

多条规则同时命中时

如果一条命令同时匹配好几条规则,Codex 取最严格的结果:forbidden 高于 prompt,prompt 高于 allow。所以可以放心地先写宽一点的 allow,再对其中危险的子命令单独写 forbidden。

连在一起的命令怎么判断

有些工具会把几条命令塞进一个 bash -lc "..." 里执行,比如:

bash -lc "git add . && rm -rf /"

Codex 对 bash -lc、bash -c 以及 zsh、sh 的同类写法做了特殊处理:

  • 能安全拆开时就拆开:如果脚本只是普通的词,用 &&、||、;、| 连起来,没有变量、通配符这些,Codex 会把它拆成单独的命令逐条套用规则,再取最严格的结果。上面的例子会被拆成 git add . 和 rm -rf / 两条,就算你允许了 git add,整条命令也不会被自动放行。
  • 复杂脚本整体判断:如果用到了重定向(>、<)、命令替换 $(...)、环境变量赋值、通配符 *、if/for 之类的控制结构,Codex 不去解析,而是把整条 bash -lc "<完整脚本>" 当作一条命令来套规则。

这样既能逐条检查简单的命令串,又不会因为猜错复杂脚本而放过危险操作。

上线前先测一测

用 codex execpolicy check 看某条命令会得到什么结果:

codex execpolicy check --pretty \
  --rules ~/.codex/rules/default.rules \
  -- gh pr view 7888 --json title,body,comments

输出是 JSON,包含最严格的决定、命中了哪些规则以及它们的 justification。可以写多个 --rules 把几个文件合起来测,--pretty 让输出更好读。

智能审批会帮你起草规则

智能审批(Smart approvals)默认是打开的。Codex 请求提升权限时,会顺带建议一条 prefix_rule。接受之前一定要看清前缀:前缀太短,放行的范围就会比你想的大。团队管理员还可以在 requirements.toml 里强制加上限制性的规则。

规则文件的语言

.rules 文件用的是 Starlark 语言,写法和 Python 很像,但设计上是安全的:规则引擎执行它时不会产生副作用,比如不会去读写文件。

上手建议

  1. 先从最常被打断的命令开始,给 git status、gh pr view 这类只读命令写 allow;
  2. 给不想让它碰的命令写 forbidden,并在 justification 里写上替代做法;
  3. 每条规则都带上 match 和 not_match 例子,改完用 codex execpolicy check 测一遍再重启。

还没有会员的,可以在 BuyBuy代充(buybuytopup.cn) 开通 ChatGPT Plus,登录 Codex 后就能按上面的方法配好自己的规则。

参考资料

  1. Rules(OpenAI 官方文档)

需要 AI 会员?

BuyBuy代充提供 ChatGPT(含 Codex)等会员套餐,支付宝、微信付款,付款后自动发货。

查看全部套餐
AI 会员 自动发货

ChatGPT Plus

适合当前为免费版的账号。付款后自动发卡密,按说明自助兑换。

¥148.00 11月3日更新 · 以下单时价格为准 平台支付手续费另计
AI 会员 自动发货

ChatGPT Pro 100

适合当前为免费版的账号。付款后自动发卡密,按说明自助兑换。

¥838.50 11月3日更新 · 以下单时价格为准 平台支付手续费另计

更多文章

全部文章