日本語

サンドボックス

サンドボックス

ChatGPT と Codex の各クライアントにおけるサンドボックスの仕組み

ChatGPT デスクトップアプリ

サンドボックスは、マシンへの無制限のアクセスを与えずに、エージェントが自律的に動作できるようにする 境界です。ローカルチャットが ChatGPT デスクトップアプリCodex CLI、または IDE 拡張機能 でコマンドを実行するとき、そのコマンドは デフォルトでフルアクセスを持つのではなく、制限された環境内で実行されます。

この環境は、変更できるファイルやコマンドによるネットワークの利用可否など、エージェントが 自力でできることを定めます。タスクがこの境界内に収まる場合、 エージェントは確認のために停止せず、作業を続けられます。 境界を越える必要がある場合は、承認フローに移ります。

サンドボックスの役割

サンドボックスは、組み込みのファイル操作だけでなく、起動されるコマンドにも 適用されます。エージェントが git、パッケージマネージャー、テストランナーなどのツールを実行すると、 それらのコマンドにも同じサンドボックスの境界が適用されます。

Codex は、各 OS に備わった仕組みを使って制限を適用します。実装は macOS、Linux、WSL2、ネイティブ Windows で異なりますが、どの利用環境でも考え方は同じです。 エージェントに範囲の定まった作業場所を与え、日常的なタスクを 明確な制限の中で自律的に実行できるようにします。

サンドボックスが重要な理由

サンドボックスは、繰り返し承認を求められる負担を減らします。低リスクのコマンドを実行するたびに 確認を求める代わりに、エージェントは、すでに承認された境界内でファイルの読み取りや編集、 日常的なプロジェクトコマンドの実行を行えます。

また、エージェントによる作業を信頼するための考え方も明確になります。 エージェントの意図だけを信頼するのではなく、エージェントが強制的に適用される制限の中で 動作していることを信頼できます。そのため、エージェントがいつ停止して助けを求めるかを把握しながら、 安心して自律的に作業を進めてもらえます。

はじめに

デフォルトの権限モードでは、サンドボックスが自動的に適用されます。

前提条件

macOS では、組み込みの Seatbelt フレームワークを使用するため、サンドボックスは追加設定なしで 動作します。

Windows では、PowerShell で実行する場合、Codex はネイティブの Windows サンドボックスを使用し、 WSL2 で実行する場合は Linux のサンドボックス実装を使用します。

Linux と WSL2 では、まずパッケージマネージャーで bubblewrap をインストールしてください。

sudo apt install bubblewrap

Codex は、PATH 上で最初に見つかった bwrap 実行ファイルを使用します。bwrap の 実行ファイルが利用できない場合、Codex は同梱のヘルパーにフォールバックしますが、そのヘルパーには 非特権ユーザー名前空間を作成できる環境が必要です。 bwrap を提供するディストリビューションのパッケージをインストールすると、この構成を安定して利用できます。

bwrap が見つからない場合や、ヘルパーが必要なユーザー名前空間を 作成できない場合、Codex は起動時に警告を表示します。この AppArmor 設定で制限を課しているディストリビューションでは、bwrap AppArmor プロファイルを読み込む方法を推奨します。これにより、bwrap は システム全体の制限を無効にせずに動作し続けられます。

権限の仕組み

利用環境の権限コントロールを使って、Codex がローカル操作を扱う方法を 変更できます。

承認は、Codex が操作の前にいつ一時停止するかを決めます。一方、サンドボックスは、 コマンドがアクセスできるファイルとネットワークリソースを決めます。 承認時に「今回のみ」や「セッション全体」などの範囲を選べる場合は、 タスクを続行できる最小限の範囲を選んでください。デフォルトではプロジェクトの 境界を維持し、無関係なリポジトリにまでアクセスを広げるのではなく、 別のプロジェクトや worktree を使ってください。

ChatGPT デスクトップアプリでは、入力欄の下にある権限コントロールを使用します。 構成に応じて、メニューには承認を求める、 対象となる承認リクエスト向けの代わりに承認フルアクセス、名前付きの 権限プロファイルやカスタム権限プロファイルが表示されます。

Codex に何でも聞いてください。

承認を求める

Codex は、現在のワークスペース内のファイルを読み取り、編集し、日常的なローカルコマンドを実行できます。インターネットを利用する前や、ワークスペースの境界を越える前に確認を求めます。

サンドボックスworkspace-write承認ポリシーon-requestレビュー担当user

デフォルトの設定

毎回同じ動作で開始するには、config.toml でデフォルトを設定します。 設定の基本ではその仕組みを説明し、 設定リファレンスでは、 sandbox_modeapproval_policyapprovals_reviewer、および sandbox_workspace_write.writable_roots の正確なキーを説明しています。これらの設定で、エージェントにデフォルトで どの程度の自律性を与えるか、どのディレクトリに書き込めるか、いつ 承認のために一時停止するか、対象となる承認リクエストを誰がレビューするかを決めます。

代表的なサンドボックスモードの概要は次のとおりです。

  • read-only: エージェントはファイルを調べられますが、承認なしにファイルを編集したり、 コマンドを実行したりすることはできません。
  • workspace-write: エージェントはファイルを読み取り、ワークスペース内で編集し、 その境界内で日常的なローカルコマンドを実行できます。ローカル作業を円滑に進めるための デフォルトのモードです。
  • danger-full-access: エージェントはサンドボックスの制限なしで動作します。ファイルシステムと ネットワークの境界が取り除かれるため、エージェントに フルアクセスを与えて動作させたい場合にのみ使用してください。

代表的な承認ポリシーは次のとおりです。

  • on-request: エージェントはデフォルトでサンドボックス内で作業し、 その境界を越える必要があるときに確認を求めます。
  • never: エージェントは承認プロンプトのために停止しません。

Codex と ChatGPT Work では、選択可能な承認ポリシーとして untrusted をサポートしなく なりました。既存の構成でこの値を使用している場合は、廃止された untrusted 承認ポリシーからの 移行を参照してください。

承認が対話形式の場合は、レビュー担当も 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 の選択肢の一つです。 サンドボックス内ですでに許可されている操作は、追加のレビューなしで 実行されます。レビュー担当のライフサイクル、トリガーの種類、拒否時の 扱い、構成の詳細については、 自動レビューを参照してください。

プラットフォームの詳細は、それぞれのプラットフォームのドキュメントに記載されています。ネイティブ Windows のセットアップ、 動作、トラブルシューティングについては、Windowsを参照してください。サンドボックスと承認に関する管理者向けの 要件や組織レベルの制約については、 エージェントの承認とセキュリティを参照してください。