ExecPolicy
Codex CLI 的命令审批引擎,位于 Codex沙箱系统 之前。将"哪些命令允许、哪些需要审批、哪些禁止"从硬编码逻辑中解放出来,变成可版本化、可测试、可共享的策略声明文件——即 Policy as Code。
核心思想
传统做法是硬编码黑名单(脆弱、无法共享)。ExecPolicy 改为结构化规则文件(TOML),支持:
- 版本控制(提交到 Git 与团队共享)
- 内置单元测试(load time 自动验证)
- 三态决策:allow / prompt / forbidden
规则语法
每条规则包含以下字段(TOML 数组表格式):name(规则名)、prefix(命令前缀匹配)、decision(allow/prompt/forbidden)、justification(原因说明)、match/not_match(load-time 单元测试用例)。
前缀匹配语法:prefix 数组内嵌套数组表示"或"——例如 ["git", "log/status/diff"] 匹配三个 git 只读命令;["npm/yarn", "install"] 同时匹配 npm 和 yarn 的 install 命令。
三态决策
| 决策 | 行为 | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
allow |
直接放行,不触发审批弹窗 | ||||||||||||||
prompt |
暂停,在 Codex TUI 显示 Approval Gate UI</td>
</tr>
<tr>
<td><code>forbidden</code></td>
<td>直接拒绝,并将 <code>justification</code>(含替代方案)返回给 LLM</td>
</tr>
</tbody>
</table>
<p><strong><code>forbidden</code> 的工程价值</strong>:LLM 收到 justification 后可自动纠错(如用 <code>--force-with-lease</code> 替代 <code>--force</code>),形成<strong>自动纠错循环</strong>。</p>
<h2 id="_4">规则评估机制</h2>
<ul>
<li><strong>[[前缀树(Trie)匹配:O(k) 时间(k = 命令 token 数),load 时构建
approval_policy 全局设置--resolve-host-executables 绑定绝对路径,防止 PATH 欺骗攻击规则文件层次
高优先级覆盖低优先级。项目级规则提交仓库,新成员 clone 后自动获得一致的安全策略。 与 approval_policy 的关系
具体规则 > 全局 policy。 调试
规则文件加载时 降低不确定性的机制
工程哲学
来源
|