
封面:Anthropic 工程博客《Claude Code Sandboxing》官方头图
先认识一下Anthropic:做 Claude 系列大模型的那家美国 AI 公司,自家还有编程助手 Claude Code。智能体一旦能跑命令、读写文件、上网,安全问题就从「别胡说」变成了「别乱碰」。
标题里的 Srt,就是他们刚拆出来开源的 sandbox-runtime(全称 Anthropic Sandbox Runtime / ASRT,命令行 srt):把 Claude Code 里那套隔离能力做成独立包,不靠 Docker 容器,直接用操作系统自带的沙箱原语,给任意进程套上文件和网络边界。仓库标签是 Beta Research Preview;我们拉到的当前版本是 0.0.81,协议 Apache-2.0,GitHub 上约 5700 star。

Anthropic 官网品牌图(anthropic.com)
• 项目地址(GitHub)
https://github.com/anthropics/sandbox-runtime
• npm 包 @anthropic-ai/sandbox-runtime
https://www.npmjs.com/package/@anthropic-ai/sandbox-runtime

仓库卡片(数据来自 GitHub API:stars / forks / issues / 版本)

源码 package.json:包名、版本、CLI 入口 srt
它到底解决什么问题
智能体、本地 MCP Server、随便一条 bash,权限往往过大:能读 ~/.ssh,也能往外网随便连。srt 的默认哲学很硬:先几乎什么都不给,再只开你点名的洞。
• 网络:默认全禁。要上网就写进 allowedDomains;空名单 = 完全断网。
• 写文件:默认几乎不能写。必须显式 allowWrite(比如当前目录、/tmp)。
• 读文件:默认较宽,但可用 denyRead 挡敏感路径;还能在被挡的大目录里再 allowRead 挖小口。
官方强调「双隔离」:只有文件限制、没有网络限制,进程可能把密钥偷出去;只有网络限制、没有文件限制,照样能读到 SSH 私钥。两边一起上,才像沙箱。

官方架构图:进程树套 OS 沙箱,网络统一走宿主机代理。图源:Anthropic 工程博客 / README
源码里看到的三端做法
仓库主体是 TypeScript。入口 src/cli.ts 提供命令行,src/sandbox/sandbox-manager.ts(三千多行)是调度中枢:起 HTTP / SOCKS 代理、装配置、按平台把命令包进沙箱。真正「关笼子」的逻辑在三个文件里。
• Linux:linux-sandbox-utils.ts 调 bubblewrap(bwrap)。要限网时先 --unshare-net,等于把网卡拔掉;再把宿主机上的代理 Unix 套接字 bind 进沙箱,进程只能通过代理「借网」。另有 seccomp 辅助挡 Unix 套接字旁路。

源码:Linux 网络隔离——先 --unshare-net,再绑定代理套接字
• macOS:动态拼 Seatbelt 配置文件,交给 /usr/bin/sandbox-exec。开头就是 (deny default),再按需放行进程、Mach 服务,网络只允许连本机代理端口。

源码:macOS Seatbelt 配置开头——默认拒绝
• Windows:单独用户账号 srt-sandbox + Windows Filtering Platform(WFP) 出站围栏,再配合受限令牌和目录 ACL。需要先跑一次 srt windows-install(会弹 UAC)。

官方示意:文件系统规则 + 网络代理两条线。图源:Anthropic
网络不是「防火墙规则」,是「本机代理审单」
三端共同点:沙箱里的进程自己不直连公网,流量被赶到宿主机上的 HTTP / SOCKS 代理。代理按域名白名单 / 黑名单放行,还能挂 ask 回调——名单没写到的域名,问你一句再决定。
源码里还有个细节:代理会生成一次性的 proxyAuthToken,只写进沙箱子进程的环境变量。意思是:就算有人在宿主机上乱连 127.0.0.1:代理端口,没有这个 token 也过不了滤网。

源码注释:proxyAuthToken 防止宿主机进程偷用代理
另外还有独立模式 srt proxy(可编译成 srt-proxy):只跑代理,工作负载可以在别的 VM / 容器里;每次转发前问外部「裁决进程」(decider)。适合把策略和执行拆到两个进程。
怎么用:命令行、配置、当库
全局安装后,前面加个 srt 就行:

README 示例:域名白名单与 ~/.ssh 只读限制的实际表现
默认读 ~/.srt-settings.json。文件不存在时用内置默认(断网、写路径很严);文件存在但坏了 / 校验失败,srt 直接报错退出,不会偷偷退回默认——因为退回等于丢掉你写的 denyRead、凭证规则,比「宽松一点」更糟。

README 完整配置示例(节选):域名、读写、Unix 套接字
嵌进自己的 Node 程序时,调 SandboxManager.initialize 再 wrapWithSandbox;跑完记得 reset。

README:库用法——initialize → wrapWithSandbox → spawn
跑命令期间还能用 --control-fd 喂 JSON 行热更新配置:网络名单可以立即生效;文件系统规则已经写进 Seatbelt / bwrap / ACL,运行中改不了。控制通道的 fd 在沙箱里会被换成 /dev/null,防止里面的进程改自己的笼子。
一个很实用的场景:给 MCP 套笼子
README 把 MCP 当重点用例:本来 npx @modelcontextprotocol/server-filesystem 权限很大,改成用 srt 当 command,后面参数照旧,再在 settings 里限制写路径。智能体就算喊「写入敏感目录」,也会被 OS 挡回来。

README:.mcp.json 里把 MCP Server 包进 srt
凭证怎么藏
配置里有 credentials 一节:可以 deny 读某些文件、清空环境变量,或在 Linux 上把真实文件 bind-mount 成「哨兵假文件」。代理侧还能在 TLS 终结后,按策略把真实密钥注入到出站请求(含 AWS SigV4 重签),让沙箱内进程自己碰不到明文密钥,但合法 API 仍能过。这条链路偏高级,接之前建议先读源码里的 credential-mask-*.ts 和 http-proxy.ts。
别当银弹
• 官方自己标了 Beta Research Preview,API 和配置格式还可能变。
• 允许 docker.sock 这类 Unix 套接字,等于把宿主机后门打开——文档写得很直白。
• 域名白名单不等于「只能访问某个 API」:放行 github.com 就能推任意仓库;要细到 HTTP 路径,得自己上 MITM / 过滤回调。
• Windows 路径依赖 WFP + 专用账号,文档也列了已知局限(换 token、系统服务代发流量等)。
一句话:srt 把「智能体别乱动」从应用层提示词,下沉到了操作系统。对做 Agent / MCP / 本地自动化的人,这是一块能直接拧上的底层螺丝;对只聊天的用户,知道 Claude Code 背后有这层笼子就够了。
说明:版本与 star 数取自 2026-10-23 拉到的仓库与 GitHub API;架构图来自 Anthropic 工程博客 / README 官方素材;代码截图为仓库源码高亮渲染,非 AI 生图。本文只做草稿预览,未群发。
相关链接
• GitHub:anthropics/sandbox-runtime
https://github.com/anthropics/sandbox-runtime
• npm:@anthropic-ai/sandbox-runtime
https://www.npmjs.com/package/@anthropic-ai/sandbox-runtime
• Anthropic 工程博客:Claude Code Sandboxing
https://www.anthropic.com/engineering/claude-code-sandboxing
• Claude Code 沙箱文档
https://docs.claude.com/en/docs/claude-code/sandboxing
• 仓库文档:srt-proxy
https://github.com/anthropics/sandbox-runtime/blob/main/docs/srt-proxy.md