Codex 沙盒与审批(上):什么时候放行,什么时候必须拦

Codex 能读代码,能改文件,也能执行命令,这些动作都要有边界。沙盒决定哪些目录可写,哪些命令能跑。审批策略决定什么情况下必须停下来问你。把这两件事分开看,配置里那几个字段就不难懂了。多数人把自动审核打开就够用。

三件事各管一段

沙盒是一道围栏,规定 Codex 能碰哪些设备,能不能连外网,能不能写项目之外的文件夹。围栏内的操作它自己做,墙外的事先拿许可。

审批策略是围栏的触发规则,是每次越界都问,还是只在跨出边界时问,还是干脆不问。审批人是回答门禁的角色,你自己放行,或者让专门审风险的助手先判断。

默认推荐:进项目它自己挑一档

Codex 启动时会看目录状态,自己推荐一套权限。带 .git 的目录用工作区写入加按请求审批,普通目录先给只读,直到你明确表示信任当前目录。

日常开发最常用的就是这套组合。它能在项目里读文件、改文件,跑 git 和测试这类常规命令。要联网或者写到项目外面才会停下来请求确认,不用每一步都点一次。

三种沙盒模式

模式 范围 什么情况下触发审批
只读 主要用来读文件和回答问题,命令执行也受只读边界限制 修改文件、执行要写入的命令或者联网时
工作区写入 可以在项目里读、写、跑常规命令 联网或者写到项目外面时
完全访问 没有沙盒限制,任何位置都能访问 取决于审批策略

日常默认用工作区。即使在写入模式下,.git、.codex 和 .agents 这三个路径仍然受只读保护。Codex 能读它们,不能直接往里写。完全访问相当于拆掉所有限制,能写系统文件,也能访问任意网络。删除数据、部署生产或者批量改文件这类操作配上它,风险会被放大。

审批策略四档

策略 触发条件 说明
untrusted 命令不属于已知安全的读取操作 只自动执行已知安全的读操作,其余都要确认
on-failure 命令执行失败时 先在当前权限下试,失败后再请求确认。不是官方默认推荐
on-request 操作越过沙盒边界 官方默认推荐,沙盒内自动执行,越界时请求确认
never 不触发 Codex 在既有权限内自行处理,不弹审批

按请求这一档对新手最友好,沙盒内的动作它自己做,越界时才停下来问你。never 不等于自动变安全,它只是不请求确认,安全取决于沙盒边界够不够窄。只读配 never 是安全的,完全访问配 never 则是官方标注的高风险组合,既没有限制,也没人确认。

Auto-review 是换个人审,不是放宽边界

命令需要越过沙盒时,Codex 会发起请求。这个请求除了给你,也可以交给 reviewer agent 自动批准。常见的越界请求有几类。写到项目外的目录,发起联网请求,这些算一类。请求更多权限,执行带副作用的 app 或 MCP 工具调用,也算一类。

它也不扩大沙盒边界,既不扩展工作区,也不会自动给网络权限,危险命令同样绕不过沙盒。助手判断有风险时会拒绝,Codex 得换一条更安全的方案,或者等你确认。

配置上它对应两行。approval_policy 决定什么时候产生审批请求,on-request 表示沙盒内继续跑,越界才问。approvals_reviewer 决定请求交给谁,默认是 user,改成 auto_review 后符合条件的请求先给助手看。只改审批人不会让 Codex 主动产生更多请求,前提仍然是审批策略处在会产生交互审批的模式。

配置怎么写

旧版是把三个字段并列,沙盒模式、审批策略和审批人各写一行。配置通常放在用户目录下的 .codex/config.toml。新版是 permission profiles,沙盒换成一个 profile 名字,另外两个字段照旧。两套不要混用,已加载的配置里只要出现 sandbox_mode,或者命令行传了对应的沙盒参数,Codex 就走旧版设置。

经常因为边界太窄而频繁触发审批,开自动审核最省事。需求再特殊一点可以扩展工作区,比如把第二个项目目录加进可写范围,这是把边界往外挪一格,不是拆掉边界。旧版写进 sandbox_workspace_write 的 writable_roots,新版写进 permission profiles 的 workspace_roots,二选一。

想做更细的控制可以自定义 profile,比如能写代码但只能访问 GitHub 和 npm,就把文件系统规则和网络域名规则写进去。需要按类型分别控制审批则用 granular 策略,它不在界面下拉里,得手写。

收尾

沙盒和审批的常用组合其实不多。工作区写入加按请求审批,再打开自动审核减少打断,绝大多数任务就够用了。