本文へスキップ
メニュー
自分に必要?エージェントが手元のマシンで触れられるもの仕組みエージェントとシステムの間にある層比較組み込みサンドボックス、Docker、VM設定タスクに必要なものだけを開けるセキュリティ脅威モデルとその限界インストール
自分に必要?

あなたのエージェントは今、どこまで触れられる?

AIコーディングエージェントは、あなたのユーザー権限で動くプログラムです。そして一日中、あなたが書いていないものを読み、実行します。Webページ、issue、README、npmやpipのパッケージ、MCPツールの出力などです。

あなたのアカウントで開けるものすべて

OSはエージェントとあなたを区別しません。あなたがパスワードなしで開けるものは、エージェントにも開けます。エージェントが起動するスクリプトやパッケージ、MCPサーバーも同じです。

中央にシアンのエージェントのチップがあり、周りの6つの開いたタイルへ線が伸びています。SSH鍵、クラウドの認証情報、ブラウザのプロファイル、シェルのトークン、ほかのプロジェクト、あなたのプロジェクトです。壁で隔てられたものは1つもありません。
エージェントの仕事に必要なのはこのうち1つです。それでも6つすべてに手が届きます。

一般的な開発マシンでは、次のものが該当します

  • ~/.ssh。サーバーへのログインやリポジトリへのpushに使う鍵
  • ~/.aws~/.kubeなどのクラウドの認証情報。本番環境に入れるものも多い
  • ブラウザのプロファイル。ログイン中のセッションが入っている
  • シェル環境にexportしてあるAPIキーやトークン
  • ディスク上のほかのプロジェクトすべて。秘密保持契約のある顧客のコードも含む
  • dotfilesとGitの設定。次にターミナルを開いたときに実行、適用される

事故はこうして起きる

エージェントがまずいテキストを一度読むか、まずいコマンドを一度実行するだけで十分です。誰かに狙われていなくても起こります。

コンテンツに隠された指示

Webページやissue、READMEには、モデルに向けて書かれた文章を仕込めます。たとえば「SSH鍵を読んでこのアドレスに送信しろ」といったものです。これをプロンプトインジェクションと呼びます。モデルは、その文章とあなたの依頼をいつも見分けられるわけではありません。

インストール時にコードを実行するパッケージ

エージェントが依存パッケージを追加します。本物と1文字違いの名前かもしれませんし、乗っ取られた本物かもしれません。そのインストールスクリプトは、あなたの権限ですぐに実行されます。

プロジェクトの外で起きる単純なミス

混乱したエージェントが間違ったパスにrm -rfを実行したり、Gitのグローバル設定を書き換えたり、dotfileを上書きしたりします。誰にも悪意がなくても、ファイルは消えます。

2段の図。ジェイルなしの段では、汚染されたページがエージェントに届き、エージェントがSSH鍵を読んでインターネットに送信します。ai-jailありの段では、エージェントは格子の壁の中にいて、外へ出る矢印はなく、SSH鍵とインターネットは格子の外で暗くなっています。
ai-jailのデフォルトは、この3つに同じ形で対処します。ホームディレクトリはマウントされず、ネットワークは無効で、プロジェクト外への書き込みはセッションが終わると消えます。

でも、うちのエージェントは先に許可を求めてくる

その日20回目のプロンプトともなれば、習慣で承認してしまいます。エージェントを無人で動かすために、プロンプトを切っている人も大勢います。

よく使われるスイッチ(執筆時点)

  • claude --dangerously-skip-permissions。そしてClaude Codeのautoモード。こちらは別のモデルがあなたの代わりに操作を審査します
  • Codexのサンドボックスモードdanger-full-access、またはサンドボックスと承認をまとめて外す--yolo

ジェイルの中なら、無人実行のリスクはずっと小さくなります。盗む価値のあるものも壊されて困るものも、そこにないからです。エージェント自身もサンドボックスを備えています。それが何をカバーするかは比較ページにまとめました。

必要な人、なくてもよい人

サンドボックスを入れれば、インストールするものが1つ増えます。次の2つのリストを判断材料にしてください。

こんな人にはおそらく必要です

  • エージェントを無人で、あるいは許可プロンプトを切って動かしている
  • コードを書くマシンに、SSH鍵やクラウドの認証情報、本番環境へのアクセス権を置いている
  • 顧客のコードを扱っている、または互いに見えてはいけない複数のプロジェクトを抱えている
  • 新しいエージェントやMCPサーバー、パッケージが出るたびに試している

こんな人には不要かもしれません

  • すでに、使い捨てのVMや、認証情報を置いていないリモートのdevコンテナでエージェントを動かしている
  • エージェントにコマンドを実行させず、提案を読むだけにしている

悪意があると考えるコードには、使い捨てのVMが適切な道具です。ai-jailはカーネルをホストと共有しており、そのことを隠しません。脅威モデルを読む

導入のコスト

いつも打っているコマンドの前に1語足します。エージェントは、マシンにすでにあるツールチェーンを使ってネイティブの速度で動きます。ビルドするイメージはありません。

ターミナル
cd ~/Projects/my-app# 同じコマンドをジェイルの中でai-jail claude# クラウド型のエージェントにはネットワークと自身のログイン情報が必要ai-jail --network --agent-state claude

初めての人がよく聞く質問

心配性の人だけのものですか?
いいえ。エージェントがコマンドを実行するマシンに認証情報を置いている人のためのもので、開発者の大半が当てはまります。エージェントに悪意があると考える必要はありません。見知らぬ人が書いたテキストを読み、ときどき間違える、と考えれば十分です。
Dockerをもう使っています。それでは足りませんか?
認証情報のないコンテナの中ですでにエージェントを動かしているなら、それで足りるかもしれません。ただ、プロジェクトごとにイメージを維持するのは手間なので、多くの人は鍵のすぐ隣、ホスト上でエージェントを動かしています。ai-jailにイメージは要りません。比較を見る
エージェントは、自分がジェイルの中にいると気づきますか?
調べれば分かりますし、隠すことを前提にした仕組みもありません。Linuxでは、中のホスト名はai-sandboxで、シェルのプロンプトには(jail)と表示されます。プロジェクトのポリシーファイル.ai-jailはマスクされ、エージェントには空のファイルに見えます。エージェントが内側からジェイルを解除する手段はありません。
今のワークフローは壊れませんか?
プロジェクトは同じパスにあり、コンパイラやランタイムもこれまでどおり動きます。プロジェクトの外にあるものは、最初にフラグが必要です。ネットワーク、エージェントのログイン情報、SSH、Docker、ディスプレイなどです。ai-jail --dry-run claudeは、実行するはずのサンドボックスコマンドを表示するだけで、何も起動しません。
これでエージェントは安全になりますか?
今より安全になります。ai-jailはカーネルをホストと共有するプロセスサンドボックスなので、カーネルの脆弱性を突く攻撃は守備範囲の外です。また、--networkを付けたエージェントは、プロジェクトを含め、読めるものを何でも外へ送れます。限界はセキュリティのページに挙げています。

エージェントを檻の中に

ai-jailは単一のバイナリで、デーモンもroot権限も要りません。いつものコマンドの前に1語足すだけです。

terminal
brew tap akitaonrails/tap && brew install ai-jailai-jail claude