让 Claude Code、Codex 这类编程助手自己改代码、装依赖、跑测试,效率来自「不必每步都问人」,风险也来自同一处:一条误执行的危险命令足以清空主目录,而一次提示词注入就能让它读完含恶意指令的文件后去取 SSH 私钥、发往外部服务器。Agent Sandbox 要解决的就是这件事——不让 Agent 拥有用户的全部权限。
传统办法是每条命令弹一次审批,但一个任务动辄几十条命令,用户很快就不再细看、直接点允许,这就是审批疲劳。沙箱换了思路:事前划定活动范围,范围内自动执行,越界才拦截或审批。核心是两项能力的组合——文件系统隔离与网络隔离,前者回答「能读哪些、能改哪些」,后者回答「能连哪里」。读写权限要分开看,Agent 常常需要读系统依赖库但不应有修改权;网络侧通常用代理加域名白名单,让 registry.npmjs.org 这类正常依赖可通,让恶意依赖的回连被拦,前提是沙箱自己能限制程序直接联网、无法绕过代理。
谁来真正执行这些限制,决定了沙箱是否可靠。靠 prompt 告诉模型「不要动某些文件」不构成隔离,必须落到操作系统机制:macOS 用 Seatbelt 限制进程对文件系统的访问,Linux 用 bubblewrap 借 namespace 造出只看得见必要目录的环境。更重的方案各有取舍:Docker 共享宿主机内核,bubblewrap 是轻量进程隔离,gVisor 在用户态处理大量系统调用、减少内核暴露面,Firecracker MicroVM 用轻量虚拟机给每个负载独立内核。本地个人 Agent 用轻量级就够,云端执行大量陌生用户代码的场景才需要往强隔离走。
有了沙箱也不等于安全。允许修改当前项目,Agent 照样能误删项目代码;白名单开得太宽,被允许的服务仍可被用来外传数据;开放 Docker Socket 等于把宿主机控制权递出去;最隐蔽的是沙箱启动失败后自动降级为无限制执行,隔离形同虚设。工程上要守三条:最小权限、默认拒绝、纵深防御——沙箱之外再叠权限审批、日志审计与备份。沙箱的目标不是让 Agent 什么都做不了,而是让它在受控边界内把事做完。