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 は、ツール定義の作成に役立ちます。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト