コンテンツに隠された指示
Webページやissue、READMEには、モデルに向けて書かれた文章を仕込めます。たとえば「SSH鍵を読んでこのアドレスに送信しろ」といったものです(SSH鍵は、サーバーにログインするためのファイルです)。これをプロンプトインジェクションと呼びます。モデルは、その文章とあなたの依頼をいつも見分けられるわけではありません。
エージェントがまずいテキストを一度読むか、まずいコマンドを一度実行するだけで十分です。誰かに狙われていなくても起こります。
Webページやissue、READMEには、モデルに向けて書かれた文章を仕込めます。たとえば「SSH鍵を読んでこのアドレスに送信しろ」といったものです(SSH鍵は、サーバーにログインするためのファイルです)。これをプロンプトインジェクションと呼びます。モデルは、その文章とあなたの依頼をいつも見分けられるわけではありません。
エージェントが依存パッケージを追加します。本物と1文字違いの名前かもしれませんし、乗っ取られた本物かもしれません。そのインストールスクリプトは、あなたの権限ですぐに実行されます。
混乱したエージェントが間違ったパスにrm -rfを実行したり、Gitのグローバル設定を書き換えたり、dotfileを上書きしたりします。誰にも悪意がなくても、ファイルは消えます。
↔ 横にスワイプすると図全体を見られます
ai-jailは3つ目の種類、つまり信頼できるエージェントの誤りのために作られていて、影響範囲はプロジェクトディレクトリです。最初の2つでは、騙されたエージェントが届く範囲を狭めますが、逃げ出そうとするコードに耐えるようには作られていません。脅威モデルを読む。
OSはエージェントとあなたを区別しません。あなたがパスワードなしで開けるものは、エージェントにも開けます。エージェントが起動するスクリプトやパッケージ、MCPサーバーも同じです。
↔ 横にスワイプすると図全体を見られます
~/.ssh。サーバーにログインする鍵。エージェントも同じようにログインでき、あなたのリポジトリにpushできる~/.awsや~/.kubeなどのクラウドの認証情報。本番環境に入れるものも多い。エージェントはそこで動いているものを変更も削除もできるその日20回目のプロンプトともなれば、習慣で承認してしまいます。エージェントを無人で動かすために、プロンプトを切っている人も大勢います。
claude --dangerously-skip-permissions。そしてClaude Codeのautoモード。こちらは別のモデルがあなたの代わりに操作を審査しますdanger-full-access、またはサンドボックスと承認をまとめて外す--yoloジェイル(サンドボックス。OSがプログラム1つの周りに張る柵)の中なら、無人実行のリスクはずっと小さくなります。盗む価値のあるものも壊されて困るものも、そこにないからです。エージェント自身もサンドボックスを備えています。それが何をカバーするかは比較ページにまとめました。
サンドボックスを入れれば、インストールするものが1つ増えます。次の2つのリストを判断材料にしてください。
悪意があると考えるコードには、使い捨てのVMが適切な道具です。ai-jailはカーネル、つまりOSの中核をホストと共有しており、そのことを隠しません。脅威モデルを読む。
いつも打っているコマンドの前に1語足します。エージェントは、マシンにすでにあるツールチェーンを使ってネイティブの速度で動きます。ビルドするイメージはありません。
cd ~/Projects/my-app# 同じコマンドをジェイルの中でai-jail claude# ホストを1つ足すには、フラグが要るai-jail --allow-host api.example.com claudeほとんどの作業には何も要りません。最初の1週間で開けることになるものと、そのスイッチを挙げます。
git cloneも動きます。github.comの許可も要ります。# macOS:レジストリ1つ、またはネットワーク全体ai-jail --allow-host registry.npmjs.org claudeai-jail --network claude # ポート5432のローカルのデータベースやMCPサーバー(Linux)ai-jail --forward-port 5432 claude # GitHubのトークンでpush、またはSSH鍵でpushai-jail --github claudeai-jail --network --ssh claude # Docker、または画面ai-jail --docker claudeai-jail --display claudeai-sandboxで、シェルのプロンプトには(jail)と表示されます。プロジェクトのポリシーファイル.ai-jailはマスクされ、エージェントには空のファイルに見えます。エージェントが内側からジェイルを解除する手段はありません。ai-jail --dry-run claudeは、実行するはずのサンドボックスコマンドを表示するだけで、何も起動しません。--networkを付けたエージェントは、プロジェクトを含め、読めるものを何でも外へ送れます。限界はセキュリティのページに挙げています。ai-jailは単一のバイナリで、デーモンもroot権限も要りません。いつものコマンドの前に1語足すだけです。
brew tap akitaonrails/tap && brew install ai-jailai-jail claude