サンドボックスポリシーを設定
エージェントの実行がサンドボックス化されるかどうかは、サーバー側で起動時に決まります
(--sandbox)。設定 → サーバー → 診断とプライバシー にある サンドボックスを有効にする
トグルと バックエンド ピッカーは、お使いのデバイスに保存される設定です。
サンドボックス化 カードのホスト検出は、サーバーホストが何をラップできるかを報告します。
実行に届く制御は 2 つあり、このガイドではその両方を扱います: エージェントが何をプッシュし、
作成し、アクセスできるかを決める 設定 → ワークスペース → エージェントの権限 のアクションの
ルールと、サーバー自身の --sandbox フラグです。
エージェントの実行を制約するもの
「エージェントの実行を制約するもの」というセクションエージェントを制約しているのは 6 つです。1 つ目は OS サンドボックスで、唯一条件付きの ものです — 残りの 5 つはどのホストでも保たれます。
| 境界 | 動作 |
|---|---|
| OS サンドボックス | macOS では Seatbelt、Linux と WSL2 では bubblewrap。Claude Code CLI、ACP アダプター、ハーネスの bash ツールをラップします。Windows、および bwrap と socat のない Linux では存在しません |
| エージェント自身のワークツリー | 会話ごとにコピーオンライトのチェックアウトを取得します。元のチェックアウトは書き込み拒否パスとして実行に折り込まれ、それを強制するのはサンドボックスです |
| ブローカー経由の資格情報 | 資格情報ブローカーは実行ごとの環境を発行し、終了時に取り消します。その GitHub トークンは読み取りはできてもプッシュはできません: プッシュは Control Center を通り、Control Center がまずプッシュのルールに問い合わせます |
| アクションガードレール | 変更を伴うすべてのツールがエフェクトクラスを宣言し、ガードが呼び出しの実行前にそれを解決します。承認者が接続されていない prompt は拒否されます |
| 環境のサニタイズ | ACP とハーネスの bash ツールはフィルタリングされた環境を受け取ります。NoSandboxAdapter 経由の Claude Code はホストの環境を継承します |
| モードのツールサーフェス | 読み取り専用モードはワークツリーを変更するツールを完全に取り除き、それでも成果を届けられるようモード自身の出力動詞を固定します |
見た目よりも弱いままの点が 3 つあります:
- ツールゲート、完了契約、構造的なモードルールを強制するのは 内蔵ハーネス だけです。
Claude Code アダプターは強制しません。特に Claude
Code は
--dangerously-skip-permissions付きで起動されます。非対話のclaude -pはそうしなければ自身のプロンプトで永久にブロックしてしまうからです — そのため Claude 自身の read、write、edit 呼び出しは Control Center からも見えず、ゲートもされません。bash コマンドはコマンドラインを読むフックでしか確認されません。サンドボックスがオンの場合、それらを取り囲む境界がサンドボックスです。 - ハーネスのインプロセスのファイルツール(read、write、edit、apply patch、search、
find、search_files)はサーバープロセス内で動作するため、サンドボックスプロファイルが
それらを制約することはありません。サンドボックス化されたコマンドランナーを通るのは
bashツールだけです。これらのツールは自身のパス閉じ込めとアクションガードレールによって制限されています。 - バックエンドのないホストでは、最初の行がまったく当てはまりません。ACP とハーネスの
bashツールは、環境のサニタイズとコマンドポリシーにフォールバックします。Claude Code はNoSandboxAdapter経由でホストの環境を継承します。サーバーはその旨を起動ログで通知します。 お使いの環境は後述の方法で確認してください。
エージェントがプッシュできるものを決める
「エージェントがプッシュできるものを決める」というセクションgit push、GitHub、チケット、ネットワークについて、エージェント単位のトグルはありません。 それぞれがアクションのルールです:
| ルール | 組み込みのデフォルト | 対象 |
|---|---|---|
| リモートへプッシュ | 先に確認 | アダプターを問わず、GitHub へのすべての git push |
| プルリクエストを作成 | 先に確認 | gh pr create とプルリクエストのツール |
| レビューの公開またはマージ | 先に確認 | gh pr merge、gh pr review、gh pr comment、gh pr close |
| 外部トラッカーへの書き込み | 先に確認 | Control Center のツールと gh issue によるチケットの書き込み |
| ネットワークにアクセス | 許可 | サンドボックスにネットワークがあるかどうかと、ハーネスの Web ツール |
- 設定 → ワークスペース → エージェントの権限 を開きます
- スコープ(ワークスペース、エージェント、スペース)を選び、ルールの行で 許可、先に確認、拒否 のいずれかを選びます
main へのプッシュを拒否するルールのような、ブランチに限定したプッシュのルールも
適用されます: ガードレールを参照してください。
チェックポイント: エージェントにブランチをプッシュさせます。先に確認 の場合はリポジトリと
ref を示す承認の依頼が届き、拒否 の場合は git が
! [remote rejected] <ref> (Control Center policy: …) と表示します。
各ルールが実行に届く仕組み:
- プッシュ は、実行が何を持っているかによって強制されます。その GitHub トークンは読み取り
専用の GitHub App インストールトークンで、コンテンツの読み取りとプルリクエストの操作が
できます。その git 設定は GitHub へのすべてのプッシュを
cc_server上のループバックの ゲートウェイに送り、ゲートウェイはルールに問い合わせてから、エージェントが決して目にしない 書き込みトークンでプッシュを転送します。ゲートウェイが転送するのは、ワークツリー自身の リポジトリか、ワークスペースにリンクされた GitHub リポジトリだけです。これはすべての アダプターに当てはまります。 - シェルからのプルリクエストと Issue は、ハーネスの
bashツールと、フック経由の Claude Code のBashツールでコマンドラインから認識されます。コマンドを隠すエージェント (スクリプト、eval、直接の API 呼び出し)はこの確認をすり抜けますが、プッシュの ゲートウェイはすり抜けられません。 - チケットのキー がサンドボックスに置かれることはありません。エージェントは Control Center の MCP ツールでチケットを書き込み、それらのツールがルールに問い合わせます。
- ネットワーク は実行の開始時に一度だけ解決されます。拒否 はサンドボックスの
ネットワークをオフにします。許可 と 先に確認 はオンのままにし、先に確認 では
ハーネスの
web_fetchとweb_searchツールが引き続き呼び出しごとに確認します。 ネットワークがオンの間、GitHub は常に外向き通信の許可リストに含まれます。
エージェントの実行がサンドボックス化されているか確認する
「エージェントの実行がサンドボックス化されているか確認する」というセクション決めるのは 2 つで、どちらもサーバー側にあります: ホストがバックエンドを提供するかどうかと、
--sandbox がオンかどうかです。この順に確認します。
- 設定 → サーバー → 診断とプライバシー に移動します
- サンドボックス化 カードを読みます。ホスト の項目は
cc_serverが動作しているマシンであり、今見ているマシンではありません。バックエンド フィールドには ネイティブサンドボックス(macOS では Seatbelt、Linux と WSL2 では bubblewrap)または 分離なし が表示されます。有効 の項目はこのデバイスの設定であり、 サーバーが実際に使うラップではありません。 - サーバーの起動ログを読みます。次の 3 行のうち正確に 1 行が出力されます:
agent sandbox ONとバックエンドの注記 — 実行はラップされますno OS-native agent sandbox on this hostと、あればインストールのヒント — 実行はラップされませんagent sandbox DISABLED by --sandbox off— 意図的なオプトアウト
GET /healthz はサンドボックスの状態を報告しないため、確認するのは起動ログです。
意図的にサンドボックスをオフにするには — プロファイルが誤動作するホストが、
このオプションの存在理由です — サーバーを --sandbox off で起動するか、
CC_SERVER_SANDBOX=off を設定します。デフォルトは on で、on は「ホストに
バックエンドがあれば使う」という意味であり、「バックエンドを必須にする」という意味では決してありません。
ネイティブサンドボックスのラップが得られない状況が 2 つあります。Windows では
ネイティブプローブが常に利用不可を報告し、インストールできるものもありません — エージェントの
ディスパッチは none を使います。microvm バックエンドは別系統(対話ターミナルとリグ)
であり、独自のランタイムを対象にプローブでゲートされます。Linux と WSL2 では bwrap と
socat の両方が PATH 上になければなりません。なければプローブは利用不可を報告し、
不足しているパッケージを名指しします。
bubblewrap がインストールされた Linux/WSL2 では、標準ポリシーのシークレットファイル
glob を、エージェントが後から作成するファイルに対して強制できません。そのようなネイティブ
実行は、ルールを黙って無視するのではなく、今では失敗します。したがって、起動プローブが
成功しても、Linux のディスパッチが開始できることを保証するものではありません。--sandbox off
は意図的な非閉じ込めのオプトアウトであり、セキュリティ境界の代替ではありません。
モードがすでに禁止していることを知る
「モードがすでに禁止していることを知る」というセクションモードはスペースごとに保存され、モードプリセット レイヤーとしてガードレール リゾルバーに渡されます。4 つのモードのうち 3 つは読み取り専用で、読み取り専用モード は 11 のエフェクトクラスを即座に拒否します:
| モード | ワークツリー | プリセットによる拒否 |
|---|---|---|
Agent(chat) |
書き込み可能 | なし — 組み込みのデフォルトが適用されます |
| Plan | 読み取り専用 | ファイルの削除、ワークツリー外への書き込み、コミット、プッシュ、PR の作成、公開またはマージ、外部トラッカーへの書き込み、パッケージのインストール、プロセスの実行、ワークスペース構造の変更、エンクロージャーの起動または操作 |
| Review | 読み取り専用 | 同じ 11 個です。ユーザーが選択することはできません — コンポーザーが提供するのは Agent、Plan、Orchestrate だけです |
| Orchestrate | 読み取り専用 | 同じ 11 個です |
ネットワークアクセスとシークレットへのアクセスは、読み取り専用モードでも意図的に 拒否_されません_。調査こそが読み取り専用モードの目的だからです。
アクションの実行前に承認を必須にする
「アクションの実行前に承認を必須にする」というセクション承認はガードレールの決定であり、サンドボックスの設定ではありません。
- 設定 → ワークスペース → エージェントの権限 に移動します
- ワークスペース、エージェント、スペースのいずれかのスコープで、アクションクラスを 先に確認 に設定します
先に確認 の決定は実行を中断してあなたに尋ねます。承認者が接続されていない場合は フェイルクローズし、アクションは拒否されます。解決順序の全体は ガードレールを設定 を参照してください。
トラブルシューティング
「トラブルシューティング」というセクションエージェントがプッシュできず、拒否した覚えもない
「エージェントがプッシュできず、拒否した覚えもない」というセクションgit が表示した内容を読んでください。Control Center policy: … は、ルールがプッシュを拒否
したか、先に確認 に応答がなかったことを意味します。
… is not linked to this workspace は、プッシュ先がワークツリー自身のリポジトリでも
ワークスペースにリンクされたリポジトリでもないことを意味します。
Control Center has no GitHub credential that can push … は、そのリポジトリに GitHub App
がインストールされておらず、プッシュできるフォールバックの資格情報もなかったことを意味します:
そのリポジトリにアプリをインストールするか、GitHub を接続してください。
サンドボックス化カードがネイティブサンドボックスなしと報告する
「サンドボックス化カードがネイティブサンドボックスなしと報告する」というセクションそのホストのエージェント実行は Seatbelt や bubblewrap でラップされておらず、
残りの境界があなたの持っているものです。Linux と WSL2 では、不足している両方の
ツール — sudo apt-get install bubblewrap socat — をインストールし、サーバーを
再起動します。そうすれば起動ログにサンドボックスがオンであると表示されるはずです。Windows には
インストールできるネイティブバックエンドがないため、代わりにガードレールを厳しくします:
ガードレールを設定 を参照してください。
エージェントがワークツリー外のファイルに到達した
「エージェントがワークツリー外のファイルに到達した」というセクションそれに到達したのがどのツールかで、これが想定どおりかどうかが決まります。
ハーネスのインプロセスのファイルツール(read、write、edit、apply patch、search、
find、search_files)はサーバープロセス内で動作するため、サンドボックスプロファイルは
適用されません — それらの境界は、自身のパス閉じ込めとガードレールです。bash コマンドや Claude Code
CLI は、バックエンドが存在する場合はラップ_され_、登録済みの
チェックアウトはそのラップ内でどのモードでも書き込み拒否になります。シンボリックリンクを
解決した綴りも含まれます(macOS では /tmp や /var/folders を通して到達したパスは
/private 配下に解決され、どちらの綴りも拒否されるようになりました)。バックエンドの
ないホストでは、そのいずれも当てはまりません。どちらの場合でも、ガードレールは
ワークツリー外への書き込み を即座に拒否できます。
関連ガイド
「関連ガイド」というセクション- ガードレールを設定
- エージェントの作成と設定
- エージェントの診断
- サンドボックスバックエンド
- cc_server CLI:
--sandboxフラグ