你给 AI 智能体布置一个编码任务,它要读代码、改文件、跑命令、装依赖,这些动作在什么范围里发生,由沙箱说了算。Codex 的沙箱是给智能体划出的受限工作区:圈定它能读哪些文件、写哪些目录、能不能联网,一旦出错,损失也被框在这个圈里。沙箱一共三档权限,从只读到全权,档位选得太紧会频繁被拦,选得太松风险敞口又太大。这篇讲清三档各自的边界、三大操作系统上的实现差异,以及从保守到放开逐步调档的原则;已经被拦了怎么办,见PermissionError 排查一篇。
沙箱在防什么:自主执行要圈住
聊天型 AI 出错,代价是一段重写的文字;编码智能体出错,代价可能是被覆盖的文件、改坏的配置、来路不明的依赖。差别在于执行方式:聊天模型输出建议,人复制粘贴,每一步都过手;智能体自己拆步骤、自己跑命令,中间不需要每步过人。这种自主性是效率来源,也是风险来源——一次误删、一个改错的环境变量、一次意外的网络请求,都可能造成真实损失。沙箱的思路是先圈后放:默认隔开文件系统与网络,智能体在圈里干活,越界动作要么被拦、要么先来问你。把执行动作圈进受限环境的通用做法与原理,沙箱机制一篇有更底层的展开,这里不重复,只讲 Codex 三档的边界。
三档权限:只读、工作区可写与全权
第一档 read-only,只读:智能体可以看代码、做分析、给出方案,但任何写文件与跑有副作用的命令都会被拦,适合让它先审代码、梳理结构、出计划。第二档 workspace-write,工作区可写:当前项目目录内的读写放开,跑构建、跑测试都顺了;工作区之外的家目录默认仍不可写,网络默认也是断的。第三档 danger-full-access,全权:文件系统与网络全部放开,风险自担,只在明确知道任务要碰系统级资源、且损失可以承受时才用。日常写代码,workspace-write 是默认的工作档:既能干活,圈也还在。要注意「能写」的范围与 Git 的跟踪状态有关,没入库的新文件可能不在视野里,机制见沙箱与 Git 盲区一篇。
| 档位 | 文件边界 | 网络 | 适合的任务 | 升级时机 |
|---|---|---|---|---|
| read-only 只读 | 只能看代码做分析,写文件与有副作用的命令都被拦 | 不涉及 | 审代码、梳理结构、出计划 | 方案认可后再升 |
| workspace-write 工作区可写 | 项目目录内读写放开,工作区外的家目录默认不可写 | 默认断,需显式打开 | 日常写代码、跑构建、跑测试 | 网络需求出现时再开开关 |
| danger-full-access 全权 | 文件系统与网络全部放开 | 全部放开 | 任务要碰系统级资源且损失可承受 | 不一步跳到这一档 |
平台实现差异:一套档位,三套底层
三档是同一套抽象,底层实现随操作系统不同。Linux 上走 Landlock 这套内核级访问控制,把进程能碰的路径与网络圈起来,实现较完整;macOS 上走 Seatbelt,苹果自带的沙箱配置系统,效果相近、细节不同;Windows 上的沙箱支持相对弱、带有实验性质,不少用户选择在 WSL 里跑,以获得与 Linux 一致的体验。这三条只到「知道有差异」即可,不必深入各自的系统调用细节——实际使用里差异表现为:同一个任务在不同平台被拦的位置与频率不一样。遇到平台相关的拦截,先确认所用版本的沙箱在当前系统上的支持程度,截至发稿版本,以官方更新日志为准。
怎么选:从保守到放开的原则
调档的原则是渐进,不一步到位。新项目或陌生代码库,先从只读档起步:让它看、让它说,观察它的方案与路径判断靠不靠谱;方案认可后升到 workspace-write 让它动手,跑测试、看 diff;网络需求出现时(装依赖、查文档)再显式打开网络开关,不一步跳到全权。审批模式同样配合着渐进:从每步都确认的档位开始,顺手了再放宽,两个模式的升级判断见审批模式详解一篇。插件与命令行两种形态的权限圈法也有差别,工具形态的对照见编码插件与命令行一篇。想让调档策略落地,可以让 DeepSeek 按项目类型整理一份三档切换清单,再用豆包核对团队里 Windows 与 macOS 同事被拦位置的差异。一句话总结:沙箱档位是给风险定价的旋钮,先紧后松,每一档都待到有把握再往上调。
沙箱模式速查
- 三档:read-only 只读、workspace-write 工作区可写、danger-full-access 全权
- workspace-write 是日常默认档:项目内可写,网络默认关
- 平台实现:Linux 走 Landlock,macOS 走 Seatbelt,Windows 偏实验性
- 渐进原则:只读看方案、可写跑任务、网络与全权按需开
- 能写范围与 Git 跟踪状态有关,未入库文件可能看不到
关于沙箱模式的三问三答
- workspace-write 档下智能体还能联网吗?:默认不能。这一档放开的是项目目录内的文件读写,网络是独立开关,需要装依赖或访问外部接口时在配置里显式打开 network_access,打开方式见 PermissionError 一篇的排查步骤。
- 全权档是不是用了就回不去?:档位是每次会话可改的配置,全权跑完一个任务,下一个任务随时切回工作区可写;只是全权期间产生的改动不会自动收回,用前先确认损失可承受。
- Windows 上被拦的位置和同事的 Linux 不一样,正常吗?:正常。三平台的沙箱底层实现不同,拦截点与频率会有差异,Windows 支持还带实验性质,追求一致体验可以在 WSL 里跑,版本行为以官方更新日志为准。


