サンドボックス
サンドボックス
ChatGPT および Codex クライアントにおけるサンドボックスの仕組み
サンドボックスは、エージェントにマシンへの無制限のアクセスを与えることなく、 自律的に動作させるための境界です。ローカルチャットが ChatGPT デスクトップアプリ、Codex CLI、または IDE 拡張機能でコマンドを実行すると、 デフォルトではフルアクセスではなく、制限された環境内で実行されます。
この環境では、変更できるファイルや、コマンドがネットワークを使用できるかどうかなど、 エージェントが独自に実行できる操作が定義されます。タスクがその境界内に収まる場合、 エージェントは確認のために停止せず、そのまま作業を進められます。 境界を越える必要がある場合は、承認フローに切り替わります。
サンドボックスの役割
サンドボックスは、組み込みのファイル操作だけでなく、起動されたコマンドにも
適用されます。エージェントが git、パッケージマネージャー、テストランナーなどのツールを実行すると、
それらのコマンドにも同じサンドボックス境界が引き継がれます。
Codex は各 OS でプラットフォーム標準の強制機構を使用します。実装は macOS、Linux、WSL2、ネイティブ Windows で異なりますが、どの環境でも考え方は同じです。 明確な制限の内側で日常的なタスクを自律実行できるよう、 エージェントに境界の定められた作業場所を提供します。
重要である理由
サンドボックスは承認の負担を軽減します。リスクの低いコマンドを実行するたびに 確認を求めるのではなく、すでに承認した境界内で、エージェントがファイルを読み取り、 編集し、日常的なプロジェクトコマンドを実行できます。
また、エージェントによる作業に対して、より明確な信頼モデルを提供します。 信頼する対象はエージェントの意図だけではなく、エージェントが強制された制限内で 動作していることも含まれます。これにより、エージェントがどの時点で停止して助けを求めるかを 把握しながら、独立して作業を進めやすくなります。
はじめに
デフォルトの権限モードでは、サンドボックスが自動的に適用されます。
前提条件
macOS では、組み込みの Seatbelt フレームワークを使用するため、 サンドボックスは追加設定なしで機能します。
Windows では、PowerShell で実行する場合はネイティブの Windows サンドボックスを、WSL2 で実行する場合は Linux のサンドボックス実装を Codex が使用します。
Linux および WSL2 では、まずパッケージマネージャーで bubblewrap をインストールしてください。
sudo apt install bubblewrapsudo dnf install bubblewrapCodex は、PATH 上で最初に見つかった bwrap 実行可能ファイルを使用します。bwrap
実行可能ファイルがない場合、Codex は同梱のヘルパーにフォールバックしますが、このヘルパーを使用するには、
非特権ユーザー名前空間を作成できる必要があります。bwrap を提供する
ディストリビューションパッケージをインストールすると、この設定を安定して利用できます。
bwrap が見つからない場合や、ヘルパーが必要なユーザー名前空間を
作成できない場合、Codex は起動時に警告を表示します。この AppArmor 設定を制限するディストリビューションでは、
制限をシステム全体で無効にせずに bwrap を機能させ続けるため、
bwrap AppArmor プロファイルを読み込むことを推奨します。
権限の仕組み
使用している環境の権限制御を使用して、Codex によるローカル操作の処理方法を 変更します。
承認は、Codex が操作前に一時停止するタイミングを決定し、サンドボックスは コマンドがアクセスできるファイルとネットワークリソースを決定します。1 回のみ、またはセッション中など、 承認時に複数のスコープが提示された場合は、タスクを継続できる最も狭いスコープを 選択してください。プロジェクト境界をデフォルトとして維持し、無関係なリポジトリをまたいで アクセスを広げるのではなく、別のプロジェクトまたはワークツリーを使用してください。
ChatGPT Work は、管理された隔離環境でコードとシェルコマンドを実行します。 利用できる機能は、ワークスペースポリシーとツール固有の制御によって決まります。 この設定を利用できる場合は、Settings > Data controls > Work network access でコードとシェルコマンドのネットワークアクセスを管理します。それらのコマンドが公開 インターネットにアクセスできるようにするには、Allow public internet access をオンにします。 オフの場合、コマンドがアクセスできるのは、管理された許可リストにある必要なホスト名だけです。
Web 検索、プラグイン、リモートブラウザには、それぞれ個別の制御があります。 変更は、現在実行中のコードまたはシェル処理が完了し、Work が実行環境を 更新した後に反映されます。ChatGPT の Web 版には、ローカル Codex のサンドボックスや 承認モードの選択機能はありません。
ChatGPT デスクトップアプリでは、入力欄の下にある権限制御を使用します。 構成によっては、メニューに Ask for approval、対象となる承認リクエスト用の Approve for me、Full access、名前付きまたは カスタムの権限プロファイルが表示されます。
CLI では、
/permissions
と入力して権限ピッカーを開き、現在の権限プロファイルを変更します。
IDE 拡張機能では、入力欄の下にある権限制御を使用します。 構成によっては、メニューに Ask for approval、対象となる承認リクエスト用の Approve for me、Full access、名前付きまたは カスタムの権限プロファイルが表示されます。
デフォルトを構成する
毎回同じ動作で開始するには、config.toml でデフォルトを設定します。
構成の基本では仕組みを説明し、
構成リファレンスでは
sandbox_mode、approval_policy、approvals_reviewer、
sandbox_workspace_write.writable_roots の正確なキーを説明しています。これらの設定を使用して、
エージェントにデフォルトで与える自律性の範囲、書き込み可能なディレクトリ、承認のために
一時停止するタイミング、対象となる承認リクエストの確認者を決定します。
一般的なサンドボックスモードの概要は次のとおりです。
read-only:エージェントはファイルを確認できますが、承認なしではファイルを編集したり、 コマンドを実行したりできません。workspace-write:エージェントはファイルを読み取り、ワークスペース内を編集し、その境界内で 日常的なローカルコマンドを実行できます。これはローカル作業向けの、操作を妨げにくいデフォルトの モードです。danger-full-access:エージェントはサンドボックスの制限なしで動作します。これにより ファイルシステムとネットワークの境界が取り除かれるため、エージェントにフルアクセスで 動作させる場合にのみ使用してください。
一般的な承認ポリシーは次のとおりです。
untrusted:エージェントは、信頼済みのセットに含まれないコマンドを実行する前に 確認を求めます。on-request:エージェントはデフォルトでサンドボックス内で作業し、 その境界を越える必要がある場合に確認を求めます。never:エージェントは承認プロンプトのために停止しません。
承認が対話型の場合は、approvals_reviewer を使用して確認者を選択することもできます。
user:承認プロンプトがユーザーに表示されます。これがデフォルトです。auto_review:対象となる承認プロンプトがレビュー担当エージェントに送られます( 自動レビューを参照)。
フルアクセスとは、sandbox_mode = "danger-full-access" と
approval_policy = "never" を組み合わせて使用することです。一方、リスクを抑えたローカル自動化の
プリセットでは、sandbox_mode = "workspace-write" と
approval_policy = "on-request"、または対応する CLI フラグ
--sandbox workspace-write --ask-for-approval on-request を使用します。その上で、手動承認には
approvals_reviewer = "user" を維持し、自動承認レビューには
approvals_reviewer = "auto_review" を設定できます。
エージェントが複数のディレクトリをまたいで作業する必要がある場合、書き込み可能ルートを使用すると、 サンドボックス全体を解除せずに変更可能な場所を追加できます。より広い、または狭い信頼境界が 必要な場合は、一時的な例外に頼るのではなく、デフォルトのサンドボックスモードと 承認ポリシーを調整してください。
ワークフローに特定の例外が必要な場合は、ルールを使用します。ルールでは、 サンドボックス外のコマンドプレフィックスを許可、確認対象、または禁止にできます。これは多くの場合、 アクセスを広範に拡大するより適しています。IDE 固有の設定画面については、 Codex IDE 拡張機能の設定を参照してください。
自動レビューを利用できる場合でも、サンドボックス境界は変わりません。これは、サンドボックスの権限昇格、
ブロックされたネットワークアクセス、承認が引き続き必要な副作用を伴うツール呼び出しなど、
その境界で発生する承認リクエストに使用できる approvals_reviewer の 1 つです。
サンドボックス内ですでに許可されている操作は、追加レビューなしで実行されます。
レビュー担当のライフサイクル、トリガーの種類、拒否のセマンティクス、構成の詳細については、
自動レビューを参照してください。
プラットフォームの詳細は、各プラットフォーム専用のドキュメントに記載されています。ネイティブ Windows の設定、 動作、トラブルシューティングについては、Windowsを参照してください。サンドボックスと承認に関する 管理者要件および組織レベルの制約については、 エージェントの承認とセキュリティを参照してください。