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 호환에 더해 배열, [[ ]], 프로세스 치환, 글로브, here-doc과 같은 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은 도구 정의를 구성하는 데 도움이 됩니다.

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트