Capsule 沙箱运行时
在隔离的 WebAssembly 沙箱中运行不可信 Python 与 TypeScript/JavaScript 代码。
- Star 数
- ★ 301
- 最近更新
- 24 天前
- License
- Apache-2.0
- 主语言
- Rust
- FA 评分
- 52/100 · 缺口较多
30 秒速览
- 运行形态
- 可在哪里用
- 通用 · 跨平台
- 费用
- 免费,无需付费服务
- 上手难度
- 低 · 几分钟可跑通
- 开始前需要
- 典型场景
- 需要在 WebAssembly 隔离环境中执行用户提交代码的平台团队,可用任务级资源限额控制执行。
- 不适合
- 必须在沙箱中使用尚无 wasm32-wasi 编译轮子的 Python 原生扩展的团队
这个 Agent 能做什么,适合哪些场景?
Capsule 是一个用于执行不可信代码的运行时,提供 Rust CLI、Python SDK 和 TypeScript/JavaScript SDK。开发者可用 Python 的 @task 装饰器或 TypeScript/JavaScript 的 task() 包装器定义任务,并通过 capsule run 或 SDK 的 run() 启动工作流。运行时将代码编译为 WebAssembly 模块,让每个任务在独立沙箱中运行,并可配置 CPU 燃料、内存、超时、重试、文件、网络域名和环境变量访问。每次执行返回包含结果、错误和执行指标的 JSON 结构。它面向本地项目和宿主程序集成;README 未描述托管服务或云端部署。
使用 capsule run main.py 或 capsule run main.ts 读取入口文件,将其编译为 WebAssembly,并在隔离沙箱中执行名为 main 的任务。任务可接收参数、访问显式允许的目录和环境变量,并向 allowed_hosts 中的域名发起 HTTP 请求;默认不允许出站请求。可通过 compute、ram、timeout 和 max_retries 设置执行资源与失败重试策略。capsule build 可预编译任务,capsule exec 可执行导出的 .wasm 文件;CLI 的 --mount 或 SDK 的 mounts 可将项目目录挂载到沙箱路径。执行结果包含任务返回值、错误状态、耗时、重试次数、燃料消耗、内存用量和宿主请求记录。
- 需要在 WebAssembly 隔离环境中执行用户提交代码的平台团队,可用任务级资源限额控制执行。
- 用 Python 编写数据处理任务的开发者,可通过
@task定义任务并用 CLI 运行。 - 使用 TypeScript/JavaScript 的工程团队,可通过 npm SDK 将沙箱任务接入现有 Node.js 程序。
- 需要让任务读取输入目录并写入输出目录的工作流,可分别设置只读和读写权限。
- 需限制任务外联的应用,可通过
allowed_hosts配置域名白名单并查看宿主请求记录。
如何安装或部署这个 Agent?
Python 快速开始需要 Python 包和 Capsule CLI。TypeScript/JavaScript 快速开始安装全局 CLI 和 SDK。README 未说明需要 API 密钥或付费服务。
如何使用这个 Agent?
Python 安装与首次运行:
pip install capsule-runfrom capsule import task
@task(name="main", compute="LOW", ram="64MB")
def main() -> str:
return "Hello from Capsule!"capsule run hello.pyTypeScript/JavaScript 安装与首次运行:
npm install -g @capsule-run/cli
npm install @capsule-run/sdkimport { task } from "@capsule-run/sdk";
export const main = task({
name: "main",
compute: "LOW",
ram: "64MB"
}, (): string => {
return "Hello from Capsule!";
});capsule run hello.ts如需从宿主代码启动任务,可在 Python 中导入 run,或在 TypeScript/JavaScript 中从 @capsule-run/sdk/runner 导入 run;TypeScript/JavaScript runner 还要求项目依赖中包含 @capsule-run/cli。
这个 Agent 有哪些优点和局限?
- 每个任务运行在独立 WebAssembly 沙箱中,并可单独配置 CPU 燃料、内存和超时。
- 同时提供 Python 装饰器、TypeScript/JavaScript 包装器、CLI 和 SDK 的程序化
run()接口。 - 可分别控制目录访问模式、允许访问的网络域名和任务可见的环境变量。
- 任务结果包含执行时间、重试次数、燃料、内存和宿主请求等指标。
- Python 使用 C 扩展的包需要
wasm32-wasi编译轮子;README 指出 numpy 和 pandas 等许多常用包尚未提供。 - Python 与 TypeScript/JavaScript 的依赖安装路径不同;TypeScript/JavaScript 的 runner 还需要 CLI 作为依赖。
- Python 任务须能构建为 WebAssembly;对原生扩展依赖较重的项目可能需要改用宿主端代码或寻找兼容包。
- README 未提供托管服务、定价或企业支持信息。
这个 Agent 与同类方案有什么区别?
与相关度最高的同类 agent 并排比较关键指标。
| Agent | 源码审查 | 形态 / 费用 | Star | 最近更新 | 主语言 | 完整支持的平台 |
|---|---|---|---|---|---|---|
| Capsule 沙箱运行时 当前 | 52 · 缺口较多 | 命令行工具免费 | ★ 301 | 24 天前 | Rust | — |
| Daytona 安全弹性 AI 代码运行基础设施 | 44 · 缺口较多 | 代码库 / SDK免费版 + 付费版 | ★ 71k | 3 个月前 | — | — |
| E2B Cookbook:AI代理代码解释器示例集 | 36 · 缺口较多 | 命令行工具免费 + 模型费 | ★ 1.4k | 12 天前 | TypeScript | OpenAI API · Claude API |
| CaveAgent | 62 · 存在缺口 | 代码库 / SDK免费 + 模型费 | ★ 205 | 1 个月前 | Python | OpenAI API · Claude API |
FollowAgents 如何评估这个 Agent?
查看各维度的扣分理由
文档说明了 CPU、内存和超时限制,默认禁止网络,并允许按目录、域名和环境变量配置访问范围;执行结果还包含 host_requests 元数据,因此最小权限和数据流有一定依据。扣分原因:文件目录默认可写且内存、超时默认无限,未见执行前确认或回滚机制;API_KEY 可被传入任务,但没有专门的秘密保护说明;依赖只列出项目名称,未展示安全审计或固定版本。许可证和 credits 提供来源线索,但发布者身份未验证,维护责任也未明确。
README 描述了任务入口、资源配置、重试和结构化结果,CI 文件列出格式检查、clippy 和 Rust 测试工作流。扣分原因:README 的仓库链接和工作流徽标使用 capsule,而对象仓库为 capsulerun/runtime,文档还同时呈现多种运行方式但没有更多实现文件交叉核对;依赖获取依赖 PyPI、npm、Rust 工具链等外部服务且未说明备用路径;错误字段只描述为错误类型和消息,没有展示具体失败场景或恢复指引。
文档面向 Python 和 TypeScript/JavaScript 用户,涵盖 CLI、SDK、网络、文件、环境变量和生产构建场景,并说明了 Python 原生扩展和 WASI wheel 的兼容限制。扣分原因:使用场景和边界主要由 README 陈述,缺少更多实现材料验证;触发方式说明了 capsule run、run() 和入口 main,但没有涵盖更复杂的集成环境。
README 按入门、配置、网络、文件、生产和兼容性组织,提供多语言安装步骤及丰富示例;LICENSE 文件给出 Apache-2.0 全文。扣分原因:README 中 capsule、capsule-run 与 @capsule-run 命名并存,且仓库链接与对象名称不一致;没有提供变更日志;贡献说明和 CI 只表明存在贡献流程及自动检查,没有清晰的长期维护责任人或更新承诺。
资源隔离、任务生命周期跟踪、自动重试和结构化执行元数据针对不可信代码运行提供了明确用途;文档给出可复制的入门和访问控制示例。扣分原因:这些价值和性能描述主要是文档声称,未由本次提供的实现材料证实;未量化运行、编译及维护成本,也未说明默认无限资源可能带来的成本影响。
README 对配置项、响应字段、访问规则和兼容性作了具体陈述,LICENSE 与 CI 文件能分别支持许可和工作流相关内容。扣分原因:只有文档、许可证和工作流材料,缺少实现代码、依赖清单、变更记录等独立来源来交叉验证核心安全与运行时主张;文档没有系统区分已验证行为和产品描述,因此仅能作低置信度静态判断。
- 源码中未见:执行前用户确认开启或自行加上执行前确认;先在沙箱或测试环境跑通,确认行为后再接入真实数据。
- 源码中未见:回滚或恢复路径运行前先备份,或在 git 分支、快照上操作,确保改动可以撤销。
- 文档示例会把 API_KEY 等环境变量传入任务;仅按需开放变量,并检查任务及其网络访问范围。
- 文件访问默认为读写,资源限制默认无限;运行不可信任务前应显式设置必要的目录权限、内存和超时限制。
- 本次材料未提供实现代码或依赖清单,且仓库命名与 README 链接存在不一致;核心隔离与依赖安全主张尚未交叉验证。
最近版本
来自该项目 GitHub Releases 的最新发布记录,说明为上游原文摘录,未经本站改写或测试。
-
发布说明摘录
Improvements TypeScript SDK Polyfills - Add more built-in methods to fs - Add a real Wasi‑based stats system for files and folders - Add support for symlinks inside sandboxes在 GitHub 查看 ↗ -
发布说明摘录
Improvements Rust Core - Fix cache issues for multi-language projects - Improve task reporter to have better logs Typescript SDK - Fix worker process issue for run() command - Fix absolute path issue for fs polyfills Python SDK - Fix worker process issue for run() command在 GitHub 查看 ↗ -
发布说明摘录
Smaller Python bundle, worker mode, and path fixes Improvements Core - Worker mode: Added a capsule worker to reduce child process overhead when using the run() function. - Trace rebuild fix: Fixed trace rebuild for projects using both Python and TypeScript sandboxes. SDKs - Smaller Python bundle: Only import the necessary built-ins, reducing the overall size. - TypeScript path fixes: Resolved absolute path issues with fs polyfills.在 GitHub 查看 ↗
常见问题
任务默认可以访问互联网吗?
allowed_hosts 为空,出站请求被禁止;需要访问网络时,应列出允许的域名。沙箱能访问宿主机上的哪些文件?
allowed_files 声明的目录,或通过 --mount/mounts 挂载的路径;目录可设为只读或读写。失败的任务会自动重试吗?
max_retries(TypeScript/JavaScript 中为 maxRetries);默认值为 0,即不重试。Python 包都能在沙箱里使用吗?
wasm32-wasi 编译的 wheel;README 提到许多常见包尚无此类构建。