everruns/bashkit

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

Bashkit は、仮想サンドボックス内で bash シェルをゼロから再実装する Rust ライブラリであり、実際のプロセスをフォークすることなく、プロセス内でシェルコマンドを安全に実行できます。これは特に LLM エージェントのためのツールとして構築されています。エージェントは bash コマンドを実行し、ストリーミング出力を取得し、その状態(ファイル、変数、git リポジトリ、さらには Python/TypeScript/SQLite)を分離してリセットできます。

主な機能

  • デフォルトでは実際の OS にアクセスしない — すべての 167 の組み込みコマンド(echo、grep、tar、jq など)は Rust で実装され、仮想ファイルシステムに対して実行されます。fork/exec はなく、許可リストにない限りネットワークもありません。
  • 完全なシェルセマンティクス — POSIX 準拠に加え、配列、[[ ]]、プロセス置換、グロブ、ヒアドキュメントなどの bash 拡張をサポート。
  • リソース制限 — コマンド数、ループ反復回数、出力サイズなどを制限できます。
  • LLM ツール契約 — BashTool は、発見メタデータ、システムプロンプト、ストリーミング出力を公開します。analyze() は、スクリプトを実行する前に静的に検査し、ホストがユーザーに承認を求めるかどうかを決定できるようにします。
  • 仮想ファイルシステム — インメモリ、オーバーレイ、マウント可能なレイヤー。オプションの実ファイルシステムバックエンド。
  • 拡張性 — Rust、JS、または Python でカスタム組み込みコマンドを登録できます。
  • 組み込み言語ランタイム(実験的) — Python(Monty または WASM 内の実際の CPython)、TypeScript(ZapCode)、SQLite(Turso)、仮想 git。
  • スナップショット — シェル状態 + VFS をバイトにシリアライズして、チェックポイント/再開に使用できます。
  • バインディング — Python(PyO3)と JS/TS(NAPI-RS)、および CLI。

仕組み すべてのコマンドは、独自の仮想ファイルシステムと環境を持つプロセス内インタープリターに対して実行されます。ホストプロセスは生成されません。バックグラウンドジョブやパイプラインもエミュレートされます。VFS により、エージェントに使い捨てのワークスペースを簡単に提供できます。

ユースケース

  • LLM エージェントに、ハードな分離と権限チェックを備えた bash ツールを提供する。
  • ユーザー提供のシェルコードのマルチテナント実行。
  • トレーニング/評価 — モデルが 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)。別のクレート bashkit-scripted-tool は、ツール定義の作成に役立ちます。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト