最近の Agent workflow では、かなり古典的な問題がまた前面に出ています。モデルに「command を実行する力」は与えたい。でも本物の machine をそのまま渡したくはない。

よくあるやり方は大きく 2 つです。

  • 本物の shell を渡して、権限・container・監査で周辺を固める;
  • 自前で制限付き tool を少数だけ用意する。

前者は柔軟ですが、隔離と安全性のコストが重い。後者は安全寄りですが、grepfindsedtarjq、redirect、pipe、flow control が欲しくなった瞬間に、結局中途半端な shell を自作し始めることになります。

今日書いておきたい everruns/bashkit は、まさにその間を狙った project です。これは「shell の外側に permission check を足す」発想ではなく、Rust process の中に制御可能な Bash runtime を作る方向を取っています。command、filesystem、resource limits、network access、snapshot / restore、language bindings まで含めて、すべてが embeddable・isolated・multi-tenant・Agent-friendly という軸で整理されています。

GitHub repository page、README、release page を 2026-06-23 時点で見ると、この repository は 179 stars19 forks、主要言語は Rust。作成日は 2026-01-31、公開上の最新更新日は 2026-06-23 です。license は MIT。最新 release は v0.11.0 で、公開日は 2026-06-16。project site は bashkit.sh です。

Project overview

項目内容
Repositoryeverruns/bashkit
位置づけmulti-tenant / Agent 向けの virtual Bash interpreter
Stars179
Forks19
主要言語Rust
作成日2026-01-31
最終更新日2026-06-23
LicenseMIT
Latest releasev0.11.0
Release date2026-06-16
Project sitebashkit.sh

解いているのは「command を実行できるか」ではなく「shell を埋め込み capability にできるか」

bashkit でまず面白いのは、terminal UX ではなく runtime capability として shell を見ていることです。

README 冒頭で自分をこう説明しています。

  • virtual Bash interpreter;
  • virtual file system;
  • multi-tenant environments;
  • written in Rust。

つまり、これは別の terminal app でもなければ、単なる SSH relay でもありません。host application が Bash という能力そのものを library として取り込むための project です。

これは今の Agent system にかなり合っています。実際に多くの場面で必要なのは「shell window」そのものではなく、

  • 1 回の task 内で script 的な操作を組み合わせること;
  • tenant ごとに実行環境を分離すること;
  • 外部 process の fork/exec に依存しないこと;
  • state を制限・保存・復元・再現できること。

この前提に立つと、本物の shell は唯一の正解ではなく、むしろ product に埋め込むには重すぎることがあります。

面白いのは、よく使う command 群をかなり本気で Rust に持ち込んでいること

README の公開情報によると、bashkit は現在 156 built-in commands を持ち、その中心思想はかなり明快です。

  • process を spawn しない;
  • real filesystem を直接触らない;
  • network は default deny;
  • 実行は process 内で完結させる。

command surface もかなり広いです。echocatls のような基本だけではなく、

  • greprgsedawkheadtailsortuniq;
  • mkdirrmcpmvchmodreadlinktarzip;
  • csvjsonyamltemplateenvsubst;
  • assertretryverifyparallelpatch のような automation 寄り command;
  • feature を有効化すると gitpythonnodedenosqlite まで試せる。

この意味は大きいです。bashkit は「安全な数個の command」だけを見せる toy ではなく、実際に shell workflow を成立させるだけの幅を持たせようとしています。

Agent に必要なのは、たいてい高度な system programming ではありません。むしろ、

  • pipe;
  • redirect;
  • text processing;
  • file tree operation;
  • 小さな script control flow。

こうした地味な primitives が揃っているかどうかで、使い勝手は大きく変わります。

security model が「呼び出し側が気を付ける」ではなく、最初から閉じている

README でかなり強く打ち出されているのが secure by default です。そこで明示されている default は次の通りです。

  • 新しい process を作らない;
  • real filesystem に触れない;
  • 明示的に許可しない限り network に出ない;
  • command 数、loop、function depth、output size、filesystem size などに limit を掛ける。

これは「本物の shell を渡して注意深く運用する」モデルより、はるかに product-oriented です。

特に multi-tenant や Agent 実行では、難しいのは command を動かすことそのものより、

  • 無限 loop をどう止めるか;
  • output 爆発をどう防ぐか;
  • tenant 越しの file access をどう遮断するか;
  • 自動化 script の勝手な network request をどう止めるか;
  • 実行結果をどう監査・再現するか。

README では、別途 threat model を持ち、280+ threats を分析・緩和したとも書かれています。この数字だけで security を証明できるわけではありませんが、少なくとも「安全」と言いながら実質ノーガード、というタイプの project ではなさそうです。

単なる shell library ではなく、明確に Agent runtime を見ている

bashkit でもう 1 つ今っぽいのが、単に Bash interpreter を出すだけでなく、BashTool という層を前面に出していることです。

README が説明しているのは、

  • discovery metadata を持つ;
  • system prompt を持つ;
  • execution object を持つ;
  • streaming output に対応する。

つまりこれは伝統的な shell embedding library の書き方ではなく、かなり直接的に LLM / Agent tool の形へ寄せています。README には coding agent 向け skill の導入例まであります。

ここはかなり重要です。多くの project は結果的に Agent から使えるだけで、Agent を第一利用者として設計しているわけではありません。bashkit はそこが違って見えます。

  • host が tool として公開しやすい;
  • tool description を model に見せやすい;
  • output を stream しやすい;
  • runtime 自体が virtual で controllable で reproducible。

オンライン Agent platform、automation backend、coding assistant、workflow engine を作る側には、この切り口はかなり魅力的です。

virtual filesystem と snapshotting によって、shell wrapper ではなく orchestratable runtime になっている

私が特に面白いと思ったのは、bashkit が filesystem state も runtime design の一部として扱っていることです。

README に出てくる VFS は、

  • InMemoryFs;
  • OverlayFs;
  • MountableFs;
  • optional な RealFs backend。

つまり host application は、単なる string evaluator としてではなく、

  • どの directory tree を見せるか;
  • どこまでが pure memory か;
  • どこまでを overlay にするか;
  • 現実の filesystem をどれだけ露出するか。

といった条件ごとに shell 環境を組み立てられます。

さらに snapshotting があるので、この model は checkpoint / resume できる shell runtime に近づきます。README では shell state と VFS contents を serialize できる例が示されていて、長い task、replay、failure recovery、audit に向いています。

単発の opaque subprocess ではなく、保存・再開・再現できる execution environment として見られるのが bashkit の大きな特徴です。

multi-language binding があるので、Rust 以外の stack にも入れやすい

bashkit 本体は Rust ですが、README には次の binding 方向が明記されています。

  • Python via PyO3;
  • JavaScript / TypeScript via NAPI-RS;
  • Node.js、Bun、Deno 向け integration。

これはかなり現実的です。Agent runtime を product にする team が、必ずしも Rust で backend を書いているとは限りません。Node service に入れたい場合もあるし、Python orchestration layer に差し込みたい場合もあります。

最初から binding 層を意識している project は、特定言語コミュニティ向け小物というより、基盤 component に育ちやすいです。

境界も比較的はっきりしている

公開情報を見る限り、bashkit は「万能 sandbox」だと装っていないのも良いところです。

設計として近いのは、

  • 高カバレッジの virtual shell runtime;
  • script、text processing、workflow orchestration に向く tool layer;
  • default deny な Agent execution environment。

逆に言えば、

  • 任意の third-party binary をそのまま動かしたい;
  • 本物の Linux userland を完全再現したい;
  • host process model にそのまま乗りたい;
  • 制限なしの network や disk access が必要。

こうした要件では、container、microVM、または本物の shell の方が適しています。

つまり bashkit はそれらを置き換えるというより、その手前にある より軽く、より埋め込みやすく、より Agent-friendly な中間層 を作ろうとしているわけです。

なぜ追っておきたいのか

この project の価値は、「Bash を Rust で書き直した」こと自体ではありません。むしろ大事なのは、次の需要を正面から見ていることです。

多くの product は Agent に少し shell 能力を与えたい。でもその代償として host boundary 全体を壊したくはない。

bashkit の方針はかなり明快です。

  • Rust で shell と多数の command を process 内実装する;
  • VFS、resource limit、network allowlist で default boundary を守る;
  • snapshotting、多言語 binding、BashTool で product workflow に入れる;
  • multi-tenant と Agent を主目的として扱う。

この方向が育てば、bashkit は container や本物の shell の代替というより、Agent platform と controlled execution の間に置かれる新しい抽象 になっていきそうです。

まとめ

everruns/bashkit の面白さは、「Rust で Bash が動く」ことよりも、Bash を embeddable・isolated・rate-limited・snapshot-aware・Agent-consumable な runtime capability にしようとしている点にあります。

virtual filesystem、default deny の security model、156 built-in commands、多言語 binding、Agent tool contract を 1 つの設計にまとめていて、狙いはかなり一貫しています。local shell user のための便利ツールというより、次世代の automation と multi-tenant execution に向けた基礎部品です。

Agent に shell を与えたいが、host environment はそのまま渡したくない。そんな課題を考えているなら、bashkit はかなり見ておく価値があります。