SpadeBox 实战教程:用 Rust 沙箱给你的 AI Agent 一套安全的工具箱
问题:你的 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_file、write_file、edit_file、move、grep、glob |
| 网络请求 | fetch(域名白名单) |
| 代码执行 | js_repl、js_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 代替 grep、read_file 代替 cat、glob 代替 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 工具 | e2b | Docker 沙箱 |
|---|---|---|---|---|
| 启动延迟 | 零(进程内) | 零 | ~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