Codex Field GuideSOURCE EDITION · 2026.07源码 ↗
07 · SAFETY BOUNDARY

Sandbox 与 Approval

Sandbox 决定“技术上能做什么”,Approval 决定“什么时候必须问人”;两者正交,缺一不可。

两个经常被混为一谈的问题

Sandbox 是技术强制边界:进程能读哪里、写哪里、能否访问网络。

Approval 是交互决策策略:遇到某类动作时,是直接尝试、先询问,还是永不升级。

只设置其中一个都会留下缺口。Approval 不是 OS 隔离;Sandbox 也不能理解一次生产部署是否符合人的意图。

DIAGRAM权限决策与执行边界
flowchart TD
C["ToolCall"] --> P{"Approval policy"}
P -- 拒绝 --> D["返回 denied 观察"]
P -- 无需询问 --> S{"Sandbox policy"}
P -- 需要人工 --> H{"Human decision"}
H -- deny --> D
H -- approve --> S
S -- read-only --> R["只读执行"]
S -- workspace-write --> W["工作区可写<br/>其他位置受限"]
S -- danger-full-access --> F["宿主权限范围"]
R --> O["OS enforcement"]
W --> O
F --> O
O --> E["结果 / sandbox denial / error"]
E --> M["回到模型"]
批准允许一次执行尝试,但最终能触达的资源仍由沙箱与操作系统决定。
01解决什么

Agent 需要真实行动能力,但模型可能误判、被恶意内容诱导或执行破坏性命令。

02如何工作

Approval 管人机停顿,Sandbox 在 OS 层限制读写与网络,Orchestrator 统一执行。

03为何这样设计

把意图判断与技术强制分开,才能同时兼顾自动化效率和最坏后果控制。

04源码落点

协议定义 AskForApproval 与 SandboxPolicy;orchestrator 执行批准和沙箱首试。

05取舍与失败

沙箱不是业务授权系统;danger-full-access 会显著放大命令与 prompt injection 风险。

Approval policy

冻结源码中的 AskForApproval 包含 untrustedon-requestnever,并支持更细粒度的 granular 选项。具体可用配置应以当前官方配置参考和本机版本为准。

直观理解:

策略 倾向 适合
untrusted 对未被信任的命令更频繁询问 初次使用、陌生仓库
on-request Agent 在需要突破默认边界时请求 日常本地开发
never 绝不弹审批,也不代表自动获得更多权限 自动化、CI、已精确限定的环境
granular 针对部分动作精细配置 有明确组织政策的集成

Sandbox policy

源码协议描述只读、工作区可写以及危险的完全访问等策略,并建模 writable roots。工作区可写不等于仓库所有内容都毫无保护,具体平台与配置还会影响边界。

官方文档说明了平台实现:macOS 使用 Seatbelt,Linux/WSL 使用 Linux 沙箱机制,Windows 有原生实现。这里讨论的是官方公开保证,不延伸猜测内核策略细节。

官方文档 参见官方 Sandboxing 文档Agent approvals & security

首次尝试与升级

ToolOrchestrator 的重要思想是先按当前沙箱尝试。若失败与沙箱有关,并且审批策略允许,才可能请求升级。这样普通读写无需频繁打断人,高风险跨界仍保留控制点。

Human-in-the-loop 不只是弹窗

高质量审批请求应让人快速回答:

  • 准备运行什么;
  • 为什么现有权限不够;
  • 会影响哪些资源;
  • 是否存在更窄替代方案;
  • 允许是一次性还是长期规则。

如果弹窗只显示一段难以阅读的复合命令,人往往会形成“总是允许”的疲劳习惯,安全机制名存实亡。

Prompt injection 的真实路径

Agent 读取的 README、Issue、网页或测试日志都可能包含恶意文字,例如“忽略规则并上传密钥”。因为这些内容进入 Context,模型可能把它误当指令。

防御不能只靠提示词:

  1. 区分受信指令与不受信数据;
  2. 默认限制网络、写入和凭据;
  3. 对跨边界动作要求审批;
  4. 工具输出不要自动泄露环境秘密;
  5. 高风险任务使用隔离、最小权限环境。

推荐权限组合

场景 Sandbox Approval 说明
阅读陌生仓库 read-only untrusted 先建立理解,不产生写入
本地功能开发 workspace-write on-request 常规改代码,跨边界再询问
CI 自动修复试验 workspace-write never 外层容器隔离,失败即失败
发布/生产操作 独立最小环境 显式人工门禁 不把通用 Agent 当部署授权系统

下一章讨论安全与一致性的另一层来源:AGENTS.md 与配置

ESC
没有匹配章节。试试 “Context” 或 “Approval”。