Codex CLI 沙箱模式详解:sandbox_mode 与 approval_policy 怎么配
Codex CLI 的沙箱不是开关而是四个档位:read-only、workspace-write、danger-full-access、external-sandbox,配上独立的 approval_policy 轴。本文按 Codex 源码里的枚举定义逐项讲清每个取值、子选项和组合建议。
操作步骤
打开配置文件
编辑 ~/.codex/config.toml(项目级用仓库根的 .codex/config.toml)。
选 sandbox_mode 档位
写入 sandbox_mode = "workspace-write";只读审查用 "read-only",容器里跑用 "external-sandbox",danger-full-access 只在完全可信环境用。
配 approval_policy
无人值守场景加 approval_policy = "never";交互使用保持默认 on-request,需要细粒度控制时选 granular。
按需加 workspace-write 子选项
在 [sandbox_workspace_write] 风格段或内联表里配 writable_roots、network_access = true 等,扩展可写范围或放开网络。
Codex CLI 的沙箱(sandbox)是一层 OS 级边界:它决定编码 Agent 能往哪儿写文件、能不能出网,与"什么时候停下来等你批准"的 approval_policy 是两条互相独立的轴。很多人把它当成一个开关,结果要么放得太松、要么卡得太死。本文按 Codex 官方源码(codex-rs)里的枚举定义逐项核对,把 sandbox_mode 四档、workspace-write 子选项和 approval_policy 取值讲清楚。
1. sandbox_mode 的四个档位
config.toml 里的 sandbox_mode 对应源码中的 SandboxPolicy 枚举,serde 取值共四个:
| 取值 | 磁盘写入 | 网络 | 适用场景 |
|---|---|---|---|
read-only | 全部只读 | network_access 可开(默认关) | 纯审查、让 Codex 只读代码找问题 |
workspace-write | 可写当前工作区 | network_access 默认关 | 日常编码主力档 |
external-sandbox | 全部可写 | network_access 控制 | 进程已在容器/CI 沙箱里 |
danger-full-access | 无限制 | 放开 | 完全可信环境,慎用 |
# ~/.codex/config.toml
sandbox_mode = "workspace-write"
read-only 不是"什么都不能干"——Codex 仍然读代码、跑只读命令,只是不能落盘;给它 network_access = true 就变成一个能联网查资料的只读审查器。external-sandbox 的语义比较特殊:它声明"磁盘边界由外部环境(容器)保证",所以磁盘全开,只留下网络这一个声明式开关。
2. workspace-write 的子选项
日常最常用的一档,源码里有四个可配字段:
writable_roots:除 cwd 与 TMPDIR 之外追加的可写目录列表network_access:默认false,置true放开出网exclude_tmpdir_env_var:置true时不再把用户级 TMPDIR 纳入默认可写根exclude_slash_tmp:置true时 UNIX 上的/tmp不再默认可写
值得单独说的一点:可写根目录(WritableRoot)带一个只读子路径清单——.codex、.git、.git/hooks 这类目录在可写根内部依然只读。源码注释写明了动机:这些目录里的文件可能被用来提升 Agent 权限(比如往 git hooks 里塞命令),所以即便在 workspace-write 里也不放行。
3. approval_policy 是另一条轴
沙箱管"能碰什么",审批策略管"要不要问你"。approval_policy 当前取值:
on-request:默认值,模型自己判断何时需要你批准on-failure:on-request的 serde 别名,写到配置里等价granular:按命令类别精细控制——某类命令放行、另一类直接拒绝而不是弹批准框never:从不询问,失败直接返回给模型自己处理
一个容易踩的坑:老教程里的 untrusted 取值已不再受支持——源码里对该值直接返回 "no longer supported; remove this setting" 错误,升级后配置里有这行要删掉。
4. 组合建议与常见错误
几个常用组合:
# 交互式日常编码(默认形态)
sandbox_mode = "workspace-write"
approval_policy = "on-request"
# CI / 无人值守
sandbox_mode = "workspace-write"
approval_policy = "never"
# 容器里跑(磁盘边界交给外部环境)
sandbox_mode = "external-sandbox"
常见错误有两个:一是把 approval_policy = "never" 当成"更安全"——恰恰相反,它去掉了所有确认环节,要配合收紧的 sandbox 用;二是在 CI 里用 danger-full-access 图省事——CI 正确姿势是 workspace-write(或 external-sandbox)+ never,再加一个独立 git worktree 接 diff。
另外 Windows 平台有独立的 windows_sandbox_mode 选项控制 Windows 沙箱形态,与 sandbox_mode 并存。
5. 下一步
- OpenAI Codex CLI 入门:从零配置到日常编码流 — 还没装好 Codex 的先从这里开始
- Codex CI 集成实战:把 Codex CLI 跑进 GitHub Actions — 无人值守场景的完整落地
- Codex CLI vs IDE 扩展 vs Codex Cloud:三种形态怎么选 — 如果你还在选形态
关键要点
- sandbox_mode 四档:read-only、workspace-write、danger-full-access、external-sandbox
- workspace-write 默认放开 cwd 与 TMPDIR 写入,writable_roots 可追加目录,network_access 默认关闭
- 可写根目录下的 .codex、.git、.git/hooks 等子路径仍保持只读——防止 Agent 改 hook 提权
- approval_policy 取值 on-request(默认)/ on-failure(别名)/ granular / never;untrusted 已报错
- Windows 有独立的 windows_sandbox_mode 选项
常见问题
官方参考
相关文章
Codex Cloud 设置指南:环境配置、云端任务与 codex cloud 命令
Codex Cloud(官方称 Codex Web)是跑在云端的 Codex 形态:任务在按 GitHub 仓库组织的云端环境里执行,本地 CLI 可以用 codex cloud 子命令提交、查看并把 diff 拉回本地。本文按 openai/codex 仓库 rust-v0.156.1 源码把设置路径与命令面讲清。
阅读全文Codex CLI config.toml 完全指南:模型、审批、MCP 与分层配置
Codex CLI 的行为中心是 ~/.codex/config.toml:model 选模型、approval_policy 管审批、sandbox_mode 管边界、mcp_servers 接工具、profiles 做场景切换。本文按 codex 源码的 ConfigToml 结构把核心键位与分层机制讲清楚。
阅读全文Codex CLI 0.155 发布解读:/voice 实验性语音、Touch ID 验证 MCP 请求与 0.155.1 回退
Codex CLI 0.155.0/0.155.1 连发:实验性 /voice 语音对话(/experimental 开启)、TUI 流式 reasoning summaries、Touch ID 验证 MCP 请求、daemon 更新计划、Bedrock 凭据命令;0.155.1 把 reasoning summary 默认值恢复为 none。逐项对照 release notes 拆解。
阅读全文订阅 GPTMap Weekly
每周一封邮件,精选 OpenAI 重要更新、深度解读与最佳实践。无广告,可随时退订。
提交后将在新标签页打开 Buttondown 完成订阅确认。