設定の出どころは3つ
設定は、プロジェクト内のファイル、ホームディレクトリのファイル、あなたが打つフラグから来ます。権限の弱いものから順に並べています。

プロジェクトの.ai-jail
ai-jailはこれを信頼できないものとして扱います。ジェイルを厳しくはできても、開けることはできません。ai-jailがシンボリックリンク越しにこのファイルを読むことはなく、エージェントにはその場所に空のファイルが見えます。
グローバルの~/.ai-jail
あなたのものなので、ai-jailは信頼します。すべての実行に適用される基本テーブルと、コマンドの最初の単語で選ばれる[commands.<name>]テーブルを持てます。
コマンドラインのフラグ
フラグの権限が最も強くなります。ほとんどのスイッチは--networkと--no-networkのように対になっているので、ファイルが開けたものをフラグで閉じることもできます。
コマンドテーブルでは、単一の値は基本テーブルの値を置き換え、マップやマスクなどのリストは基本テーブルに追加されます。
# 基本:すべてのコマンドに適用hide_dotdirs = [".my_secrets"]mask = [".env", ".env.*"] # コマンドが"claude"で始まるときだけ[commands.claude]network = trueagent_state = trueenv_pass = ["ANTHROPIC_BASE_URL"]mask = ["*.pem"]スイッチ一覧
どの行も、指定するまでは無効です。機能を開けるフラグにはそれぞれ、閉じ直すための--no-付きの対があります。赤いバッジは、ジェイルを弱めるスイッチの印です。全一覧と理由はセキュリティのページにあります。
ネットワークとサービス
| フラグ | 設定キー | 動作 | リスク |
|---|---|---|---|
--network | network = true | 制限なしのネットワークアクセス。エージェントは読めるものを何でも外へ送れます。 | ジェイルを弱める |
--ssh | ssh = true | 読み取り専用の~/.sshとSSHエージェントのソケット。git pushが動くようになります。 | 1つだけ開ける |
--docker | no_docker = false | Dockerソケット。デーモンはホストをマウントしたコンテナを起動できるので、事実上そのマシンのroot権限です。 | ジェイルを弱める |
--tailscale | tailscale = true | Tailscaleのソケット。 | 1つだけ開ける |
--systemd-user | systemd_user = true | systemdのユーザーバス。エージェントはユーザーマネージャーに、ホスト上でサービスを動かすよう依頼できます。Linuxのみ。 | ジェイルを弱める |
エージェントと環境
| フラグ | 設定キー | 動作 | リスク |
|---|---|---|---|
--agent-state | agent_state = true | ~/.claudeや~/.codexなど、エージェント自身のログイン情報と設定。以後、ジェイルの中のものは何でもその認証情報を使えます。 | 1つだけ開ける |
--claude-dir <PATH> | claude_dir = "..." | 指定したディレクトリをClaudeの状態保存先として使い、CLAUDE_CONFIG_DIRを設定します。 | 1つだけ開ける |
--env <NAME[=VALUE]> | なし | シェルの変数を1つ渡すか、NAME=VALUEの形で1つ設定します。繰り返し指定でき、ディスクには保存されません。 | 1つだけ開ける |
--inherit-env | inherit_env = true | シェルの環境全体を、中にある秘密情報ごと渡します。使わないでください。 | ジェイルを弱める |
| なし | env_pass = ["NAME"] | --envと同じですが、グローバルファイルでのみ有効です。プロジェクトファイルで設定しても無視されます。 | 1つだけ開ける |
デスクトップとハードウェア
| フラグ | 設定キー | 動作 | リスク |
|---|---|---|---|
--gpu | no_gpu = false | GPUデバイス。同時に、ドライバの攻撃対象領域も開きます。Linuxのみ。 | 1つだけ開ける |
--display | no_display = false | Waylandのソケット。セッションのそれ以外のものは渡しません。Linuxのみ。 | 1つだけ開ける |
--x11 | x11 = true | X11のソケット。X11では、プログラムがキー入力を記録したりスクリーンショットを撮ったりできます。 | ジェイルを弱める |
--audio | audio = true | PipeWireとPulseAudioのソケットと/dev/snd。ジェイルの中のものは何でも録音と再生ができます。Linuxのみ。 | 1つだけ開ける |
--host-shm | host_shm = true | ホストの/dev/shm。ジェイルの外のプロセスとの共有メモリが開きます。 | 1つだけ開ける |
--pictures | pictures = true | 読み取り専用の~/Pictures。 | 1つだけ開ける |
--browser[=hard|soft] | browser_profile = "hard" | 独立したブラウザプロファイル。hard(デフォルト)は実行をまたいで何も残さず、softは~/.local/share/ai-jail/browsersの下にプロファイルを残します。 | 1つだけ開ける |
ファイル
| フラグ | 設定キー | 動作 | リスク |
|---|---|---|---|
--map <PATH|SOURCE:DEST> | ro_maps = [...] | パスを1つ、読み取り専用で追加マウントします。別の場所にマウントするにはSOURCE:DESTと書きます。繰り返し指定できます。 | 1つだけ開ける |
--rw-map <PATH|SOURCE:DEST> | rw_maps = [...] | パスを1つ、読み書き可能で追加マウントします。繰り返し指定できます。 | 1つだけ開ける |
--overlay-map <PATH> | overlay_maps = [...] | パスをコピーオンライトでマウントします。エージェントの書き込みは別のレイヤーに入り、元のファイルは変わりません。Linuxのみ。macOSでは読み取り専用のマウントになります。 | 1つだけ開ける |
--hide-dotdir <NAME> | hide_dotdirs = [...] | 指定したドットディレクトリ(例:.my_secrets)を決してマウントしません。繰り返し指定できます。 |
無効にできるが、すべきでない層
| フラグ | 設定キー | 動作 | リスク |
|---|---|---|---|
--no-landlock | no_landlock = true | カーネル側でファイルのルールを二重に適用するLandlockを無効にします。--lockdownでは拒否されます。 | ジェイルを弱める |
--no-seccomp | no_seccomp = true | 危険なシステムコールを止めるフィルターを無効にします。 | ジェイルを弱める |
--no-rlimits | no_rlimits = true | 暴走したプロセスを抑える制限を無効にします。 | ジェイルを弱める |
--no-private-home | private_home = false | 新しいホームディレクトリを使うのをやめます。本物のホームへの広いアクセスを与えることになります。必要なパス1つだけを--mapで渡すほうが安全です。 | ジェイルを弱める |
各層の役割は仕組みのページで説明しています。
ユーティリティ
| フラグ | 動作 |
|---|---|
--dry-run | サンドボックスコマンドを表示するだけで、何も実行しません。設定ファイルを書くこともありません。 |
--init | プロジェクトの.ai-jailを作成または更新して終了します。 |
--clean | 今回の実行では、プロジェクトの.ai-jailを無視します。 |
--bootstrap | AIツール自体の権限設定ファイルを生成します。 |
status | 現在の.ai-jailの設定を表示します。 |
-v, --verbose | ジェイルの構築中に、すべてのマウントを表示します。 |
残りのオプションはai-jail --helpで確認できます。ステータスバー、worktree、mise、ターミナル関連です。
プロジェクト内の秘密情報を隠す
.envファイルはプロジェクトの中にあり、プロジェクトは読み書き可能です。ネットワークが有効なら、エージェントはそこで読めるものを何でも外へ送れます。マスクすれば、そうしたファイルを取り除けます。

--mask <PATH|GLOB>
一致したものをすべて空のプレースホルダーに置き換えます。エージェントにはファイルがあることは見えますが、中身は得られません。存在を確認するだけのツールはそのまま動きます。
--deny-path <PATH|GLOB>
一致したものすべてを、アクセスすると権限エラーになるようにします。
--mask-exceptと--deny-path-except
ルールからパスを1つ除外します。保護を弱めるので、プロジェクトファイルでは設定できません。
# globは引用符で囲む。シェルに展開させず、パターンのままai-jailに渡すためai-jail --mask .env --mask '.env.*' --mask '*.pem' --deny-path secrets/ claude ai-jail --mask '.env.*' --mask-except .env.example claude# プロジェクトファイルは厳しくする方向なら設定できるので、リポジトリ内でも使えるmask = [".env", ".env.*", "*.pem"]deny_paths = ["secrets/"]ロックダウン:変更させたくないコードを読ませる
--lockdownはレビューや監査のためのモードです。エージェントはプロジェクトを読んで質問に答えられますが、ファイルは1つも変更できません。

変わる点
- プロジェクトは読み取り専用でマウントされる
- Linuxで書き込めるのは
/tmpだけ。macOSではどこにも書き込めない - ホームのドットディレクトリ、追加のマップ、オーバーレイはすべてなし
- 環境は空になり、
PATHはシステムディレクトリに固定される - Landlockが必須になり、適用できなければ起動に失敗する
- プロセス数、開けるファイル数、ファイルサイズの制限が厳しくなる
- ほかに何を渡していても、ディスプレイ、オーディオ、GPU、Docker、SSHエージェント、miseは使えない
ai-jail --lockdown claudeレシピ
コピーして使ってください。何が組み立てられるかを確かめるには、先に--dry-runを付けて実行します。
クラウド型エージェントを日常的に使う
ホスト型のモデルには、APIに接続するためのネットワークと、認証のための自身のログイン情報が必要です。両方をグローバルファイルに書いておけば、コマンドは短いままです。
# 最初に一度だけ、~/.ai-jailに[commands.claude]network = trueagent_state = true # 以降は、どのプロジェクトでもai-jail claudeSSH経由でgit pushする
--sshは~/.sshを読み取り専用でマウントし、SSHエージェントのソケットを転送します。pushにはネットワークも必要です。
ai-jail --network --ssh --agent-state claudemiseのツールチェーン
新しいホームディレクトリにはmiseでインストールしたものがないので、ai-jailはmiseをスキップします。miseの2つのディレクトリを読み取り専用でマップしてください。
[commands.claude]ro_maps = ["~/.config/mise", "~/.local/share/mise"]エージェント用のブラウザ
--browserだけでは、ページの読み込みもウィンドウの表示もできないブラウザになります。Linuxでは--networkと--displayも必要です。X11のブラウザなら、--displayの代わりに--x11を使います。
# Waylandai-jail --browser=soft --network --display chromium# X11ai-jail --browser=soft --network --x11 chromiumClaudeのプロファイルを分ける
実行ごとに別のClaudeディレクトリを指定すれば、仕事用と個人用のログインを分けておけます。
ai-jail --network --claude-dir ~/.claude-work claudeリスクのあるリファクタリングをコピーで試す
オーバーレイを使うと、エージェントの書き込みはプロジェクト内の.ai-jail-overlaysの下にある別レイヤーに入ります。後で元のファイルと比べて、気に入った変更だけを取り込めます。Linuxのみ。
ai-jail --network --agent-state --overlay-map ~/Projects/my-app/src claude古い設定はそのまま動く
後方互換性はプロジェクトのルールで、フラグや設定キーが削除されることはありません。未知のキーは無視され、足りないキーにはデフォルト値が入るので、古いバージョン向けに書いたファイルもそのまま読み込めます。
古いスイッチは、trueで機能が無効になる反転した名前のままです。no_gpu、no_docker、no_display、no_mise、no_landlock、no_seccomp、no_rlimitsが該当します。--gpuがno_gpu = falseとして保存されるのはそのためです。新しいスイッチはnetwork = trueのような素直な名前を使います。
エージェントを檻の中に
ai-jailは単一のバイナリで、デーモンもroot権限も要りません。いつものコマンドの前に1語足すだけです。
brew tap akitaonrails/tap && brew install ai-jailai-jail claude