Codex 沙盒和 /permissions 怎么配?untrusted 已退役、workspace-write 与常见报错

Codex 0.164.0 实测:-a untrusted 被 CLI 拒绝;config 残留报 no longer supported;codex sandbox 默认 Read-only file system;read-only exec 约 10.4s 跑通 echo。附 /permissions 日常切法。

3 分钟阅读
Codex 沙盒和 /permissions 怎么配?untrusted 已退役、workspace-write 与常见报错

在 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 秒含模型回合)。

创建 API Key →

本机实测环境

bash
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_accessworkspace-write 下命令是否出网[sandbox_workspace_write]
approvals_reviewer审批给人还是 Guardianuser 或 auto_review
bash
# Auto:工作区可写,越界/联网再问
codex --sandbox workspace-write --ask-for-approval on-request

# 只聊方案
codex --sandbox read-only --ask-for-approval on-request

实测:untrusted 已退役(两条证据)

1) 命令行枚举直接拒绝

bash
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,写入坏配置,不改你的日常家目录):

bash
# 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"(项目信任级),不要写回审批枚举。

toml
sandbox_mode = "read-only"
approval_policy = "on-request"

# 可选:项目信任(不是 approval_policy)
# [projects."/path/to/project"]
# trust_level = "untrusted"

实测:codex sandbox 默认只读

bash
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 跑一条无害命令

bash
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、自动化权限怎么分工

--dangerously-bypass-approvals-and-sandbox(--yolo)只应出现在你完全理解外层隔离的环境。

创建 API Key →