akitaonrails/ai-jail
Multi-OS sandbox to run AI agents with better constraints (it is not 100% secure, but enough)
ai-jail は、AI コーディングエージェント(Claude、Codex、Codex スタイルのハーネスなど)を OS レベルのサンドボックス内で起動するコマンドラインツールです。その目的は狭く、正直です。悪意のある攻撃者が脱出しようとするのを防ぐものではありません。能力はあるが失敗しうる AI エージェントが、プロジェクト外のファイルを消去するような打ち間違えたコマンドを実行するなど、誠実なミスをするのを防ぐだけです。
どのように保護するか
エージェントには、実際の $HOME ではなく、新しい使い捨てのホームディレクトリ(tmpfs)が与えられます。作業中のプロジェクトディレクトリは読み書き可能なままです。ホスト上の他のすべては、明示的に公開しない限り非表示になります。Linux では bubblewrap に加えて Landlock(ファイルシステムアクセス制御)と seccomp(システムコールフィルタリング)を使用し、macOS では Apple の sandbox-exec を使用します。
デフォルトでオン(開発者向け、ロックダウンではない)
- エージェント自身の認証情報ディレクトリ(
~/.claude、~/.codexなど)は読み書き可能でマウントされるため、毎回ログインを求められることなく、事前認証済みで起動します。--no-agent-stateでオプトアウトできます。 - 永続的な、jail 所有の依存関係キャッシュ(cargo、npm、go など)と読み取り専用の Rust ツールチェーンにより、実際のツールチェーンを公開せずに
npm install/cargo buildがそのまま動作します。 - パッケージレジストリへのみ許可するフィルタリングされたネットワーク出力により、依存関係のダウンロードが成功します。
デフォルトでオフ
ネットワーク、GPU、KVM、ディスプレイ、オーディオ、Docker ソケット、SSH キー、Tailscale、クラウド認証情報(GitHub/AWS/kube/gcloud/docker)— それぞれが明示的なオプトインフラグで、リスクが文書化されています。サンドボックス内で実行されるものは、マウントしたものを何でも使用できるからです。
注目すべき機能
--lockdown: 最も厳格なモード — 読み取り専用プロジェクト、認証情報なし、ネットワークなし、厳格な seccomp。それでも VM ではありません。--allow-host HOST: サンドボックス内のプロキシを介したフィルタリングされた出力で、リストされたホストにのみ接続します。--secret KEY=hostと組み合わせると、実際の API キーはサンドボックスに入りません。プレースホルダーが、そのホストへのリクエストに対してのみ実際の値に置き換えられます。--dry-run: 何も書き込まずに起動をシミュレートします。- 書き込み可能性のスコープ: プロジェクトディレクトリが爆発半径であるため、ユーザーはエージェントハーネスで「自動承認」(YOLO)モードを安全に有効にできます。
インストール/使用法: Homebrew、Arch(AUR)、cargo install、Nix flakes、または GitHub releases。使用法は簡単で、プロジェクトディレクトリ内で ai-jail claude(または codex など)を実行するだけです。Linux では bubblewrap が必要です。macOS では非推奨の sandbox-exec を使用します。Windows は WSL2 経由のみです。
結論: LLM ベースのコーディングエージェントをローカルで実行するための実用的な事故防止レイヤーであり、セキュリティ境界ではありません。範囲が明確で、よく設計され、脅威モデルについて異常なほど率直です。
関連
- プロジェクト
- プロジェクト
- Dispatch
- プロジェクト
- プロジェクト