インストールして、中を見て、エージェントを動かす
ai-jailは1つのプログラムで、デーモンもrootも要りません。インストールして、いつも打っているコマンドの前にその名前を置けば、エージェントはサンドボックスの中で起動します。
インストール
コマンドラインツールを普段入れている方法を選んでください。どの方法でも、同じ単一のai-jailプログラムが入ります。
brew tap akitaonrails/tap && brew install ai-jailmacOSとLinuxで使えます。
yay -S ai-jail-binyay -S ai-jail1つ目のパッケージはLinux x86_64向けのビルド済みバイナリです。2つ目はソースからビルドします。
cargo install --locked ai-jailRustのツールチェーンが必要です。--lockedを付けると、リリースのテストに使われたバージョンの依存でビルドします。
nix run github:akitaonrails/ai-jail -- claudenix profile install github:akitaonrails/ai-jail1行目は、何もインストールせずにエージェントを実行します。2行目は、あなたのユーザー向けにインストールします。このflakeは、ai-jailが同梱のbubblewrapを使うよう設定します。
ai-jail-linux-x86_64.tar.gzai-jail-macos-aarch64.tar.gzアーカイブには署名があり、チェックサムも並べて置いてあります。展開して、ai-jailをPATHの通った場所に置いてください。署名の確認方法はセキュリティのページにあります。
cargo build --release --lockedinstall -Dm755 target/release/ai-jail ~/.local/bin/ai-jailRust 1.97.1が必要です。
システムに必要なもの
Linux
bubblewrapをインストールしてください。ai-jailがサンドボックスの構築に使う小さなプログラムです。ほとんどのディストリビューションではbubblewrapという名前でパッケージになっています。
pacman -S bubblewrapapt install bubblewrapdnf install bubblewrapmacOS
インストールするものはありません。ai-jailはmacOSに付属のsandbox-execを使います。Appleはこのインターフェースを非推奨としています。
Windows
対応していません。WSL2を使い、その中でLinuxの手順に従ってください。
最初の実行
3つのコマンドで、計画の確認、中の見学、実際に動くエージェントまで進みます。ai-jailは、指定するまで何も開けません。

何も実行せずに計画を見る
プロジェクトに移動して、ドライランを実行します。ai-jailは、使うはずのサンドボックスコマンドを表示して終了します。ドライランがファイルを書き込むことはありません。
cd ~/Projects/my-appai-jail --dry-run claude中を見て回る
ジェイルの中で普通のシェルを起動します。プロジェクトは実際のパスにあり、編集もできます。ホームディレクトリは新しい空のもので、シェルのトークンは消えています。出るには
exitと打ちます。ai-jail bash必要な2つを付けてエージェントを動かす
クラウドのモデルと通信するエージェントには、モデルに接続するためのネットワークと、あなたが誰かを証明するための保存済みログイン情報が必要です。どちらもデフォルトでは無効なので、
--networkと--agent-stateで有効にします。バージョン1.22以降、既知のエージェントをどちらかなしで起動すると、ai-jailは足りないフラグの名前を警告に表示します。ai-jail --network --agent-state claudeそのエージェントのデフォルトにする
この2つの設定を、あなた自身の設定ファイル
~/.ai-jailに、エージェントの名前の下に書きます。以降は短いコマンドだけで足ります。プロジェクト内にできることがある.ai-jailファイルは、ジェイルを厳しくすることしかできません。ネットワークやログインを有効にすることはできないので、cloneしたリポジトリが自分でジェイルを開けることはありません。[commands.claude]network = trueagent_state = true # from now on, in any project:# ai-jail claude
中で見えるもの
プロンプトは(jail)に変わり、プロジェクトはいつもの場所にあります。盗む価値のあるものは見当たりません。
$ ai-jail bash# プロジェクトは実際のパスにある(jail) ~/Projects/my-app $ pwd/home/you/Projects/my-app# シェルでexportしたトークンは付いてこない(jail) ~/Projects/my-app $ echo $GITHUB_TOKEN # このホームにあなたの鍵はない(jail) ~/Projects/my-app $ cat ~/.ssh/id_ed25519cat: /home/you/.ssh/id_ed25519: No such file or directory# ジェイルには専用のホスト名がある(jail) ~/Projects/my-app $ hostnameai-sandboxこれはLinuxでのセッションです。macOSには別のファイルツリーを組み立てる手段がないので、同じパスは存在しますが、読み取りが拒否されます。

中から見ると、あなたのもので存在するのはプロジェクトだけです。ネットワークも、--networkを渡すまでは外にあります。
起動しないとき
READMEのトラブルシューティングにあるケースと、つまずく人の多いセットアップ上のルール2つを取り上げます。
bwrap: setting up uid map: Permission denied
Ubuntu 24.04以降とDebian 13以降には、プログラムがrootなしでユーザー名前空間を作ることを禁じるAppArmorポリシーが入っています。bubblewrapはまさにその方法でジェイルを隔離しています。この種のrootなしのツールはどれも影響を受けます。システム全体で緩めるには次のようにします。
echo 'kernel.apparmor_restrict_unprivileged_userns=0' \ | sudo tee /etc/sysctl.d/60-userns.confsudo sysctl --systemポリシーは残して、bwrapだけを対象外にすることもできます。次の内容を/etc/apparmor.d/bwrapとして保存し、sudo apparmor_parser -r /etc/apparmor.d/bwrapを実行してください。
abi <abi/4.0>,include <tunables/global>profile bwrap /usr/bin/bwrap flags=(unconfined) { userns,}BWRAP_BINが拒否される
BWRAP_BINを使うと、特定のbubblewrapをai-jailに指定できます。ai-jailが受け入れるのは、解決先が、rootが所有しほかのユーザーが書き込めないプログラムである場合か、標準的なマルチユーザーの/nix/store内にある場合だけです。自分のホームに置いたコピーは拒否されます。そのファイルを差し替えられる人なら誰でも、ジェイルを支配できてしまうからです。
中でmiseのツールが見つからない
ai-jailはmiseを見つけると有効化します。しかし、新しいホームにはmiseの設定もインストール済みのツールもないため、有効化をスキップします。自分の設定ファイルで、両方を読み取り専用でマップしてください。
[commands.claude]ro_maps = ["~/.config/mise", "~/.local/share/mise"]起動時にFailed to create stream fdと出る
miseのセットアップ中に、Ubuntuデスクトップのログインスクリプトが出すメッセージです。害はなく、miseは問題なく動きます。--no-miseを渡せば、miseのセットアップごとこのメッセージも出なくなります。
ai-jail --no-mise claudeエージェント別
ai-jailは、各エージェントがログイン情報をどこに保存するかを知っています。--agent-stateは、起動するエージェントのフォルダだけを、存在する場合に限ってマウントします。
| 実行するコマンド | --agent-stateがマウントするもの | 知っておくとよいこと |
|---|---|---|
ai-jail claude | ~/.claude~/.claude.json | 2つ目のClaudeプロファイルを使うには、--claude-dirでそのディレクトリを指定します。 |
ai-jail codex | ~/.codex | ウィンドウをリサイズすると、画面が描き直されるよう、ai-jailがCodexに再描画のキーを送ります。 |
ai-jail opencode | ~/.config/opencode~/.local/share/opencode | |
ai-jail gemini | ~/.gemini | |
ai-jail ai-memory run claude | 起動されるエージェントのフォルダ | ai-jailは、ai-memoryが起動するエージェントを認識して、そのエージェントの設定を適用します。2つのプログラムは同じジェイルに入ります。 |
crush、grok、jcode、pi、aider、soulforge、omp、各種のkimiコマンドでも同じように動きます。それ以外のコマンドも実行できます。ジェイルは同じで、ログイン用のフォルダはマウントされません。
エージェントを檻の中に
ai-jailは単一のバイナリで、デーモンもroot権限も要りません。いつものコマンドの前に1語足すだけです。
brew tap akitaonrails/tap && brew install ai-jailai-jail claude