Strands Box:把操作系统隔离与“语义策略”合在一起的开源智能体沙箱,并按先前动作决定后续权限
strands-agents/box 是 Strands Agents 团队用 Rust 写的开源智能体沙箱引擎,采用 Apache-2.0 许可。它把操作系统级隔离和用 Dogwood 语言写的 permit/forbid 策略结合起来,策略引擎在智能体进程之外运行,默认拒绝。目前是预览版,只支持 Apple 芯片的 macOS;截至发稿约 393 个星标,安全性没有看到独立审计。
strands-agents/box 是 Strands Agents 团队发布的一个开源项目,自称“面向 AI 智能体的开源沙箱引擎”。仓库用 Rust 编写,采用 Apache-2.0 许可,创建于 2026 年 10 月 2 日,最近一次推送是 10 月 12 日,截至发稿约有 393 个星标和 19 个分叉。它要回答的问题很实际:当一个智能体可以执行命令、读写文件、访问网络、调用外部工具时,怎样把“它能做什么”从一句写在提示词里的嘱咐,变成一道真正由程序强制执行的边界。项目不绑定具体的智能体,你可以选择要运行的程序或二进制,在 box.toml 里配置它的访问范围,在 policy.dw 里写策略。 它的设计分成两层。第一层是操作系统隔离:box.toml 里的直接访问授权,比如哪些目录可读写、哪些程序可启动,由宿主操作系统强制执行。第二层是“语义策略”,用的是 Dogwood 这门策略语言,规则只有 permit 和 forbid 两种:被策略引擎检查的操作默认拒绝,必须有匹配的 permit 才放行,而匹配的 forbid 会覆盖放行。真正有意思的是引擎和执行点的布局。Strands Shell、用于 Python 的 Monty、出站网关和 MCP 代理,这四个组件会把各自处理的操作交给内嵌的 Dogwood 本地引擎判断,而引擎运行在 Box 自己的进程里,位于智能体的沙箱之外。智能体可以向 Box 的解释器发请求,但外部程序和本地 MCP 服务器不能;外部程序的网络流量默认也要经过 Box 的网关。
这套架构带来了几个具体的能力。其一,解释器和网关共享同一份事件历史,所以规则可以依据此前的动作和经过的时间。README 举的例子是,智能体通过 Shell 或 Python 读过某个文件,网关就可以拒绝它之后发出的一次外联 HTTP 请求,这比单纯“某个地址能不能访问”更接近真实的数据外泄场景。其二,出站网关能检查连接和 HTTP 请求,包括方法和路径;MCP 代理能检查已配置的工具调用及其参数。其三,网关可以用配置好的 API 凭证或 AWS SigV4 签名为放行的请求做认证,智能体自己拿不到底层密钥。其四,所有策略决策以 OTLP JSON 格式记录,默认写入 box 目录下的 private/telemetry/records.jsonl,便于事后审计。
使用之前,需要看清项目标出的边界。首先它是预览版,目前只支持 Apple 芯片的 macOS 本地执行;入门指南要求 macOS 15 或更新、通过 Homebrew 安装的 Node.js 22.21 或更新,并要用 Amazon Bedrock us-west-2 上的 Claude Opus 5。下载脚本会校验发布包的校验和,把二进制解压到当前目录的 box-core,不修改 PATH 或系统目录。其次,README 明确说,box.toml 里的直接文件系统授权由操作系统强制,不会产生单独的 Dogwood 决策;想让策略管到文件操作,需要通过 Box 的解释器访问文件,并把这些文件排除在智能体的直接授权之外。最后,这些介绍都来自项目自述,我们没有运行它,也没有看到独立的安全审计或渗透测试。
怎么评价它?对做智能体的团队来说,它给出了一个清晰的分工:让操作系统管“能不能碰”,让策略引擎管“在什么条件下可以做”,并且让两者都在智能体之外。这比在提示词里写“请不要泄露密码”要可靠得多,也比只做网络白名单的沙箱更细。代价是需要学习一门新的策略语言,并且要把文件、网络、工具调用都改成经过 Box 的路径;在 Linux 和 Windows 上目前也用不了。如果你的智能体会接触敏感数据,可以先用示例里的 Strands Python SDK 小智能体试一试,观察决策记录,再决定是否值得为它调整整个运行方式。 如果要把它放进真实的工作流,可以按下面的顺序评估。第一步,先列清楚智能体需要的最小权限:能读哪些目录、能启动哪些程序、能访问哪些域名、能调用哪些 MCP 工具,把这些写进 box.toml 和 policy.dw,宁可先紧后松。第二步,把最敏感的动作写成带历史条件的规则,比如读过含密钥的文件之后,禁止任何对外请求,再用决策记录检查规则有没有按预期触发。第三步,确认自己的凭证确实由网关注入,智能体的环境变量里没有残留的真实密钥。最后别忘了,目前它只在苹果芯片的 Mac 上预览,团队里用其他系统的同事暂时无法复现同样的环境。
Sources
FAQ
Strands Box 想解决什么问题,它是怎么做的?
它给运行智能体的进程套上两层限制。第一层是操作系统沙箱:在 box.toml 里配置智能体可直接访问的文件、程序和网络,由宿主系统强制执行。第二层是语义策略:在 policy.dw 里用 Dogwood 写 permit 和 forbid 规则,由进程外的 Dogwood 本地引擎判断。被引擎检查的操作默认拒绝,只有匹配的 permit 才放行,匹配的 forbid 会推翻放行。Box 本身不绑定具体的智能体,你可以自选要运行的程序或二进制。
“历史相关的策略”是什么意思?
Box 的解释器和网关共享同一份事件历史,所以规则可以引用此前的动作和经过的时间。README 的例子是:智能体通过 Shell 或 Python 读了一个文件,之后网关可以据此拒绝它发出的一次外联 HTTP 请求。网关还能检查连接和 HTTP 请求的方法与路径,MCP 代理检查已配置的工具调用及其参数,并可以在网关里注入 API 凭证或 AWS SigV4 签名,让智能体拿不到底层密钥。所有决策以 OTLP JSON 记录,默认写到 box 目录下的遥测文件。
现在可以用于生产吗,有哪些限制?
项目自己标明是预览版:目前只支持 Apple 芯片的 macOS,示例指南要求 macOS 15 或更新、Homebrew 安装的 Node.js 22.21 或更新,并使用 Amazon Bedrock 上的 Claude Opus 5。另一个限制是:box.toml 里的直接文件系统授权由操作系统执行,不会产生单独的 Dogwood 决策;想让策略管到文件操作,就要通过 Box 的解释器访问,并把这些文件排除在直接授权之外。我们没有看到独立的安全审计,所以不建议在没有自行评估的情况下依赖它保护高价值数据。