everruns/bashkit

Virtual Bash interpreter with a virtual file system for multi-tenant environments.

Bashkit 是一个 Rust 库,它在虚拟沙箱内从头重新实现了 bash shell,因此您可以在进程内安全地运行 shell 命令,而无需派生真实进程。它专门为 LLM 代理构建:代理可以执行 bash 命令、获取流式输出,并将其状态(文件、变量、git 仓库,甚至 Python/TypeScript/SQLite)隔离和重置。

主要功能

  • 默认不访问真实操作系统 — 所有 167 个内置命令(echo、grep、tar、jq 等)都用 Rust 实现,并针对虚拟文件系统运行;没有 fork/exec,除非列入白名单,否则没有网络。
  • 完整的 shell 语义 — 符合 POSIX 标准,并支持 bash 特性,如数组、[[ ]]、进程替换、通配符、here-doc。
  • 资源限制 — 限制命令数量、循环迭代次数、输出大小等。
  • LLM 工具契约 — BashTool 公开发现元数据、系统提示和流式输出;analyze() 在运行之前静态检查脚本,以便主机决定是否请求用户批准。
  • 虚拟文件系统 — 内存、覆盖和可挂载层;可选的真实文件系统后端。
  • 可扩展性 — 在 Rust、JS 或 Python 中注册自定义内置命令。
  • 嵌入式语言运行时(实验性) — Python(Monty 或 WASM 中的真实 CPython)、TypeScript(ZapCode)、SQLite(Turso)、虚拟 git。
  • 快照 — 将 shell 状态 + VFS 序列化为字节,用于检查点/恢复。
  • 绑定 — Python(PyO3)和 JS/TS(NAPI-RS),以及 CLI。

工作原理 每个命令都针对具有自己的虚拟文件系统和环境的进程内解释器运行。不会生成主机进程;甚至后台作业和管道也被模拟。VFS 使得为代理提供一次性工作区变得容易。

用例

  • 为 LLM 代理提供具有硬隔离和权限检查的 bash 工具。
  • 多租户执行用户提供的 shell 代码。
  • 训练/评估 — 衡量模型使用 bash 的能力(该项目包含一个带有已发布结果的评估套件)。

快速开始

use bashkit::Bash;

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let mut bash = Bash::new();
    let result = bash.exec("echo hello world").await?;
    println!("{}", result.stdout); // "hello world\n"
    Ok(())
}

使用 cargo add bashkit 安装(可选功能:git、python、cpython、typescript、sqlite、realfs)。一个单独的 crate bashkit-scripted-tool 有助于组合工具定义。

相关

  • 项目
  • 项目
  • 项目
  • 项目