在 Codex 里「接得上模型」只是第一步;敢交给它改仓库,取决于 沙盒能碰哪里 与 什么时候必须问你。官方拆成 sandbox_mode 与 approval_policy;会话里用 /permissions 查看或切换。
站内自动化权限文见 codex exec + Playwright。本文补 0.164.0 本机实测:枚举合法审批值、用坏配置复现 untrusted 退役报错、以及 codex sandbox 默认只读拒绝写文件。
先说结论:
codex -a合法值只有on-request/never——CLI 已不接受untrusted。- config 里若仍写
approval_policy = "untrusted",0.164.0 直接退出:approval_policy = "untrusted" is no longer supported; remove this setting。 codex sandbox -- pwd可在工作区跑通;默认沙盒写/tmp或仓库内文件会报Read-only file system。codex -s read-only -a never exec可跑无害 echo(本次约 10.4 秒含模型回合)。
本机实测环境
codex --version # codex-cli 0.164.0
# sandbox 可选值(--help):read-only | workspace-write | danger-full-access
# approval 可选值(--help):on-request | never
两分钟看懂:沙盒 vs 审批
| 旋钮 | 管什么 | 日常怎么碰 |
|---|---|---|
| sandbox_mode | 命令实际能读写/联网的范围 | --sandbox / -s,或 /permissions |
| approval_policy | 越界时是否打断问你 | --ask-for-approval / -a |
| network_access | workspace-write 下命令是否出网 | [sandbox_workspace_write] |
| approvals_reviewer | 审批给人还是 Guardian | user 或 auto_review |
# Auto:工作区可写,越界/联网再问
codex --sandbox workspace-write --ask-for-approval on-request
# 只聊方案
codex --sandbox read-only --ask-for-approval on-request
实测:untrusted 已退役(两条证据)
1) 命令行枚举直接拒绝
codex -a untrusted -s read-only --version
# exit 2;耗时约 0.123 秒
# stderr:
# error: invalid value 'untrusted' for '--ask-for-approval <APPROVAL_POLICY>'
# [possible values: on-request, never]
2) config.toml 残留会让 review 起不来
用隔离的 CODEX_HOME(只复制 auth,写入坏配置,不改你的日常家目录):
# CODEX_HOME=/tmp/codex-bad-home 内:
# approval_policy = "untrusted"
# sandbox_mode = "read-only"
CODEX_HOME=/tmp/codex-bad-home codex review --uncommitted
# exit 1;耗时约 0.122 秒
# Error: approval_policy = "untrusted" is no longer supported; remove this setting
迁移做法:删掉退役键,改成 approval_policy = "on-request" + 合适的 sandbox_mode。若只想某个项目更严,用 trust_level = "untrusted"(项目信任级),不要写回审批枚举。
sandbox_mode = "read-only"
approval_policy = "on-request"
# 可选:项目信任(不是 approval_policy)
# [projects."/path/to/project"]
# trust_level = "untrusted"
实测:codex sandbox 默认只读
cd /workspace/codex-live-demo
codex sandbox -- pwd
# exit 0;约 0.134 秒
# stdout: /workspace/codex-live-demo
codex sandbox -- bash -lc 'echo ok > ./sandbox-touch.txt'
# exit 1;约 0.144 秒
# bash: line 1: ./sandbox-touch.txt: Read-only file system
codex sandbox -- bash -lc 'echo ok > /tmp/codex-sandbox-write-test.txt'
# exit 1;约 0.133 秒
# bash: line 1: /tmp/...: Read-only file system
说明:子命令 codex sandbox 在本环境默认按只读落地;要让 Agent 改仓库,应在交互会话用 /permissions 或启动参数 -s workspace-write -a on-request,而不是假设 sandbox -- 等于可写 Auto。
实测:read-only + never 跑一条无害命令
codex -s read-only -a never exec --skip-git-repo-check "echo sandbox-readonly-ok"
# 墙钟约 10.362 秒;exit 0
# stdout: sandbox-readonly-ok
# 会话头:sandbox: read-only / approval: never / model: gpt-5.6-sol
会话里怎么切换
/status:看模型、沙盒、可写根;/permissions:切 read-only 或 Auto;- 默认 workspace-write 不开网;要出网再开
network_access。
其他常见坑(文档 + 公开 Issue)
- Linux 容器里
bwrap: Failed to make / slave→ 反复问 retry without sandbox:先修容器能力或把隔离放到外层 Dev Container。 - WSL:文档写明走 WSL2;0.115 后 WSL1 不再支持。
network_proxy不会单独打开网络,只约束已允许出网的命令。
和 /review、自动化权限怎么分工
- 改代码前的边界 → 本文 sandbox / permissions;
- 改完读 diff → Codex /review 实测;
- 无头浏览器自动化 → 自动化权限文。
--dangerously-bypass-approvals-and-sandbox(--yolo)只应出现在你完全理解外层隔离的环境。



