2026年6月12日 2 分钟阅读

SpadeBox 实战教程:用 Rust 沙箱给你的 AI Agent 一套安全的工具箱

tinyash 0 条评论

问题:你的 AI Agent 还裸奔着跑 bash 吗?

当你让 AI Agent 执行「读取文件」「抓取网页」「运行代码」这些日常操作时,最直接的方式是什么?大概率是把一个 bash 工具塞给 LLM,让它自由发挥。

但这意味着:AI Agent 可以在你的机器上执行任何命令——读取 /etc/shadow、删除家目录、下载恶意脚本。哪怕你给 Agent 限制了工作目录,一个 cd ../ && rm -rf 就能轻松绕过去。

这不是危言耸听。在 AI Agent 生产环境中,工具调用的安全沙箱已经成为和 API 密钥管理同等重要的基础设施需求。今天要介绍的 SpadeBox,就是一个专门解决这个问题的开源方案。

SpadeBox 是什么

SpadeBox 是一套用 Rust 编写的沙箱化工具集和 JS 运行时,专为 AI Agent 设计。它提供了三类基础能力:

类别工具
文件操作read_filewrite_fileedit_filemovegrepglob
网络请求fetch(域名白名单)
代码执行js_repljs_exec(沙箱化 JS 引擎)

每个工具都在轻量级沙箱中运行——文件系统通过 cap-std crate 限制路径逃逸,HTTP 请求仅允许白名单域名,JS 执行使用 Boa 引擎且受同一沙箱策略约束。

最关键的设计决策是:SpadeBox 没有 bash 工具。它的作者刻意避免给 Agent 一个可以「为所欲为」的 shell,而是用细粒度的原子工具覆盖 Agent 的所有基本需求。

安装

SpadeBox 支持三大生态:

npm install @spadebox/spadebox

pip install spadebox

cargo add spadebox-core

核心特性

1. 轻量级沙箱

SpadeBox 使用 cap-std 做文件系统沙箱,Boa 引擎做 JS 运行时沙箱。这不是 Docker 容器或虚拟机——没有额外的内存开销和启动延迟。Agent 调用 read_file 时,SpadeBox 检查路径是否在允许的 workspace 内,必要时拒绝访问。

2. 按需配置

你可以只开 Agent 需要的工具:只需文件操作就只开文件工具,想加网络能力就加 HTTP 白名单,需要代码执行再加 JS 运行时。每个能力独立开关。

3. 无需 bash

这是一个被低估的设计选择。大多数 AI Agent 框架(如 LangChain 的 bash 工具)把 bash 作为默认选项,但 SpadeBox 提供了不用 bash 也能完成所有操作的工具集——grep 代替 grepread_file 代替 catglob 代替 find

4. JS 运行时的原生函数暴露

这是 SpadeBox 最独特的特性:你可以把自己的原生函数注册到 SpadeBox 内置的 JS 运行时中,让 Agent 通过 JS 代码直接调用你的应用逻辑。Agent 不再需要「你说我调用 API,我写 curl 命令」的间接路径。

from spadebox import SpadeBox

sb = SpadeBox().enable_files("/workspace").enable_http().enable_js()
tools = sb.tools()

5. HTTP 密钥管理

为特定 HTTP 域名注册凭据,SpadeBox 返回一个安全令牌给 Agent。当 Agent 发送请求时,令牌自动替换为真实的密钥——Agent 永远不会直接接触你的 API 密钥。

6. 默认输出限制

SpadeBox 的工具对输出大小和 HTML-to-Markdown 转换有默认限制,防止 Agent 上下文被大量输出撑爆。

上手示例

JavaScript 集成

import { SpadeBox } from "@spadebox/spadebox";

const sb = new SpadeBox()
  .enableFiles("/workspace")
  .enableHttp()
  .allow("api.example.com", ["GET", "POST"])
  .enableJs();

const tools = sb.tools(); // 传递给 LLM 作为可用工具

// 调度来自模型的工具调用
const result = await sb.callTool("read_file", JSON.stringify({ path: "src/main.rs" }));

Python 集成

from spadebox import SpadeBox

sb = (SpadeBox()
    .enable_files("/workspace")
    .enable_http()
    .allow("api.example.com", ["GET", "POST"])
    .enable_js())

tools = sb.tools()  # 传递给 LLM

result = sb.call_tool("read_file", '{"path": "src/main.rs"}')

MCP Server 模式

SpadeBox 还提供了 MCP 服务器,让你家支持 MCP 的 AI 编码工具(Claude Code、Codex 等)直接使用 SpadeBox 工具:

spadebox-mcp --files /workspace

spadebox-mcp --allow "api.example.com:GET,POST" --allow "*.cdn.example.com:GET"

spadebox-mcp --js

spadebox-mcp --files /workspace --allow "api.example.com:GET" --js

横向对比

维度SpadeBox裸 bash 工具e2bDocker 沙箱
启动延迟零(进程内)~100ms~1-5s
资源开销<10MB~100MB+~200MB+
路径逃逸防护✅ cap-std❌ 默认无✅ 容器隔离
细粒度权限✅ 按工具控制❌ 全有或全无✅ API 级❌ 容器级
密钥管理✅ 内置❌ 无❌ 需自行处理❌ 无
JS 执行沙箱✅ Boa 引擎✅ 但依赖容器
跨语言 SDK✅ JS/Python/Rust

适用场景

  • 本地 AI Agent:你在本机运行 Claude Code / Codex,希望给 Agent 沙箱化文件/网络权限
  • AI 工具链集成:你在开发一个使用 LLM 的自动化脚本,需要安全地执行 Agent 的工具调用
  • MCP 服务:你希望为 MCP 兼容的编码 Agent 提供安全的文件/HTTP 工具
  • 轻量级评测沙箱:你需要在本地安全地运行 Agent 行为测试,而不想启动 Docker 容器

总结

SpadeBox 的价值不在于「又一个 Agent 工具框架」,而在于它精准地瞄准了一个被忽视的痛点:AI Agent 的工具执行需要沙箱,但 Docker/VM 太重,裸 bash 又太危险。用 Rust 实现的轻量级沙箱加上多语言绑定,让它在性能、安全和开发体验之间找到了一个不错的平衡点。

如果你正在构建或使用 AI Agent,并且对「Agent 能不能跑 rm -rf /」这个问题心里没底,SpadeBox 值得一试。

🔗 SpadeBox GitHub | 文档 | npm: @spadebox/spadebox | PyPI: spadebox | crates.io: spadebox-core

发表评论

你的邮箱地址不会被公开,带 * 的为必填项。