Sandbox Runtime:给 AI Agent 和 MCP 服务划清文件与联网权限

让 AI Agent 或本地 MCP 服务跑命令时,权限往往跟着当前用户走。只想让它改项目文件,却也得把整台开发机的读写和联网能力一起交出去,这件事总有点别扭。

Anthropic 的 Sandbox Runtime(命令名 srt)就是给进程加限制的工具:哪些目录能写、哪些文件不能读、哪些域名能访问,由配置决定。它可以单独运行,也能作为库接进自己的 Agent,不必先搭一套 Docker 环境。

好用的思路:把限制放到进程外面

srt 用操作系统的隔离机制约束被启动的进程及其子进程。macOS 用 sandbox-exec,Linux 用 bubblewrap,网络访问通过代理按域名过滤。

这让它不只适用于 AI 编程工具。一个本地 MCP 服务、一段 Bash 命令,或者自己写的自动化程序,都能放进同一套限制里。对于正在做 Agent 工具执行层的人,它比再写一段“请不要碰敏感文件”的提示词更值得研究。

读写权限需要分开理解:读取默认放行,要用 denyRead 明确禁止;写入则需要通过 allowWrite 放行。网络使用白名单,allowedDomains 为空时不放行外部域名。不要把“开了沙箱”理解成“默认只能读当前项目”。

先从一条命令试起

当前包要求 Node.js 22.12.0 或更新版本。安装命令是:

npm install -g @anthropic-ai/sandbox-runtime

Linux 还需要 bubblewrap、socat 和 ripgrep。Debian / Ubuntu 可以安装:

sudo apt-get install bubblewrap socat ripgrep

例如,在自己的项目里准备一个 srt-settings.json:

{
  "network": {
    "allowedDomains": ["example.com"],
    "deniedDomains": []
  },
  "filesystem": {
    "denyRead": ["~/.ssh", "~/.aws", ".env"],
    "allowWrite": ["."],
    "denyWrite": [".env"]
  }
}

再用它运行命令:

srt --settings ./srt-settings.json curl https://example.com

这份配置只放行 example.com,允许在当前目录写入,并显式保护列出的敏感路径。它只是一个起点,其他凭据目录仍要自己补齐;命令会访问哪些域名,也要按实际需求配置。

如果目标是约束 MCP 服务,可以把原本直接启动 npx 的入口换成 srt,再将 npx 和服务参数交给它。这样不用先重写服务本身。

适合谁,哪些地方别想当然

最适合看这个项目的,是正在接本地 MCP、给 Agent 开放终端,或准备自己实现命令执行器的开发者。它同时提供 CLI 和库接口,既能单独使用,也能嵌入应用。

项目仍是研究预览,API 和配置格式可能变化。Linux 上,不遵循代理环境变量的程序可能无法联网;Ubuntu 24.04 及更新版本还可能遇到 AppArmor 对用户命名空间的限制,不能简单认为装完依赖就一定能跑。

当前主分支也有 Windows 支持,但标注为 alpha,需要单独的机器级安装步骤。它涉及专用本地账户与防火墙过滤规则,而且已列出匿名令牌、系统服务代发流量等网络限制缺口。Windows 上尤其不能把域名白名单当成完整的恶意代码防线。

这里真正值得借鉴的是:文件权限和网络权限一起管,并且明确写出隔离边界。是否适合放进自己的生产执行链,还得结合平台和威胁模型评估。

项目信息