Beta — OSレベルのサンドボックスはオプトインで、現在も活発に開発中です。挙動、
設定、プラットフォームサポートはリリースごとに変更される可能性があります。
デフォルトのアクセスポリシー(サンドボックス有効時)
| リソース | デフォルトポリシー | 設定項目 |
|---|---|---|
| ファイル読み取り | すべて許可。明示的な denyRead エントリのみブロックされます。 | sandbox.filesystem.denyRead |
| ファイル書き込み | CWD(現在の作業ディレクトリ)以外はすべて拒否。追加のパスは許可できます。denyWrite は allowWrite より優先されます。 | sandbox.filesystem.allowWrite, sandbox.filesystem.denyWrite |
| ネットワーク | *.factory.ai(デフォルトで常に許可)以外はすべて拒否。追加のドメインは明示的に許可する必要があります。 | sandbox.network.allowedDomains |
サンドボックスモード
sandbox.mode 設定で、分離の適用方法を選択します:
per-command(デフォルト) — Droid が開始するシェルコマンドとツール操作のみがサンドボックス化されます。whole-process(Linux のみ) — Droid プロセス全体が OS サンドボックス内で起動され、メインプロセス、MCP の stdio トランスポート、サブエージェントにまで分離が拡張されます。
含まれる機能
コマンド単位のサンドボックスモード(mode: "per-command"、有効時のデフォルト):
- ファイルツール(Read、Edit、Create、LS、Grep、Glob、ApplyPatch) — すべての操作の前に
checkFileAccess()を実行し、読み取りにはdenyRead、書き込みにはallowWrite/denyWriteを適用 - Execute ツール — シェルコマンドを OS サンドボックス(Seatbelt / bubblewrap)でラップし、ネットワークはドメインレベル制御のために SRT のフィルタリングプロキシ経由でルーティング
- FetchUrl —
allowedDomainsに対してcheckNetworkAccess()を実行 - MCP ツール — サンドボックス有効時は fail closed(拒否)になります。MCP ツールの挙動は不透明で(サーバーがファイルの読み書きやネットワークアクセスなどを行う可能性があります)、プロトコルはツールごとの効果メタデータを公開しないため、強制可能なサンドボックスポリシーにマッピングできず、後述のデフォルト拒否ツールポリシーによってブロックされます。
- 注記 — このモードではメインのDroidプロセスとサブエージェントは分離されません。これらを分離するには
whole-processモードを使用してください。
mode: "whole-process"、Linux のみ):
- 起動時に Droid プロセス全体が OS サンドボックス内で再実行されるため、メインプロセス、MCP の stdio トランスポート、サブエージェントのライフサイクルがすべて、設定されたファイルシステムおよびネットワーク境界の範囲内で実行されます
- Droid プロセスが直接行うネットワークリクエスト(Execute ツールからのものだけでなく)も
allowedDomainsに対してフィルタリングされ、TUI モードでは対話型のドメインプロンプトが表示されます - Fails closed — 起動時にセキュアなランタイムを確立できない場合(非対応プラットフォーム、サンドボックスサポートの欠如、または分離チェックの失敗)、Droid はサンドボックスなしで実行するのではなく起動を拒否します
- デフォルトのアクセスポリシー、ファイルシステムおよびネットワーク設定、「常に許可」の永続化は、コマンド単位モードと同じ挙動です
- 登録されたすべてのツールは、サンドボックスの副作用メタデータ(
filesystem-read、filesystem-write、network、process、external-service、persistent-settings)を宣言します - サンドボックス有効時、宣言されたすべての副作用がサンドボックスポリシーハンドラ(ファイルアクセス、ネットワーク、またはコマンド単位の Execute)にマッピングされる場合にのみ、ツールが許可されます。注釈のない副作用、不明な副作用、または未処理の副作用を持つツールは拒否されます
- ローカルで強制できない効果を持つツール(MCP ツールやコネクタ(
external-service)など)はハンドラを持たないため、fail closed になります - ツールポリシーによる拒否はプロンプト不可です。ユーザーの承認でポリシーカバレッジの欠如を回避することはできず、これらの拒否は
allowWrite/allowedDomainsでは設定できません
- サンドボックス違反があると、Auto(High)自律レベルでもエージェントループが中断され、TUIプロンプトが表示されます
- 3つの選択肢: 1回だけ許可、常に許可(設定に永続化)、拒否
denyWrite違反では、「常に許可」の代わりに「拒否リストから削除」オプションが表示されます(設定のdenyWriteから該当エントリを削除)denyRead違反でも、「常に許可」の代わりに「拒否リストから削除」オプションが表示されます- Execute のネットワーク違反では、SRT のプロキシコールバックを通じたリアルタイムのドメインプロンプトが表示され、60秒で自動拒否されます
droid exec):
- サンドボックス違反はプロンプトなしで自動拒否されます — ハングせず、ユーザー操作も不要です
- エージェントは拒否メッセージを受け取り、それを出力に報告します
- ファイル書き込み違反(CWD外): ユーザー設定の
sandbox.filesystem.allowWriteに親ディレクトリを追加 denyWrite違反:sandbox.filesystem.denyWriteから該当エントリを削除denyRead違反:sandbox.filesystem.denyReadから該当エントリを削除- ドメイン違反: ドメイン(3つ以上のパートを持つドメインではワイルドカード付き。例:
registry.npmjs.org->*.npmjs.org)をsandbox.network.allowedDomainsに追加 - 変更は現在のセッションにすぐ反映されます
- 組織レベルの
denyWrite/denyRead設定は、ユーザーの「常に許可」では上書きできません - 拒否が組織設定に由来する場合、違反プロンプトには「(組織ポリシー)」と表示されます
- サンドボックス有効時は、フッターに
SANDBOXステータスインジケーターを表示 - 違反の詳細(パス、ドメイン、理由)を含む「Sandbox Violation」プロンプトを表示
設定構成
denyWrite / denyRead は和集合マージを使用するため、組織による拒否は下位レイヤーで削除できません。
