> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bricks.tools/llms.txt
> Use this file to discover all available pages before exploring further.

# サンドボックス

> システムを保護するためにエージェントのシェルアクセスを制限する

サンドボックス化されたbashモードは、AIエージェントがシェルコマンドで実行できる内容を制限します。有効にすると、コマンドはプロジェクトディレクトリと承認済みのネットワークドメインのみにアクセスできます。すべてのプロジェクトはデフォルトでサンドボックスモードです。

## モード

入力バーのサンドボックスモードセレクターで、プロジェクトごとに2つのモードを切り替えられます：

| モード         | 説明                                                   |
| ----------- | ---------------------------------------------------- |
| **サンドボックス** | コマンドはプロジェクトディレクトリへのアクセスに制限されます。ネットワークリクエストには承認が必要です。 |
| **フルアクセス**  | サンドボックス制限なしの無制限のシェルアクセス。                             |

選択したモードはプロジェクトごとに保持されます。`explore` サブエージェントはプロジェクト設定に関わらず、常にサンドボックスモードで実行されます。

<Info>
  サンドボックスモードはmacOSとLinuxでサポートされています。Windowsでは、フルアクセスモードのみ利用できます。
</Info>

<Note>
  Linuxでは、サンドボックスモードには [Bubblewrap](https://github.com/containers/bubblewrap)（`bwrap`）と [socat](http://www.dest-unreach.org/socat/) のインストールが必要です（`sudo apt install bubblewrap socat`）。Bubblewrapはサンドボックスコンテナを提供し、socatはネットワークプロキシブリッジを処理します。
</Note>

## ファイルシステムの制限

サンドボックスモードでは、コマンドのファイルシステムアクセスが制限されます：

**読み取り可能なパス：**

* プロジェクトディレクトリ（完全な読み取り/書き込み）
* 一時ディレクトリ（`/tmp`、`/private/tmp`）
* ホームディレクトリ下の `PATH` 内のツールバイナリ
* グローバルスキルディレクトリ（`~/.bricks-project-desktop/skills/`）
* `sandbox.json` の `filesystem.allowRead` に記載されたパス

**書き込み可能なパス：**

* プロジェクトディレクトリ
* 一時ディレクトリ
* グローバルスキルディレクトリ（`~/.bricks-project-desktop/skills/`）
* `sandbox.json` の `filesystem.allowWrite` に記載されたパス

ホームディレクトリのルートはデフォルトで拒否されます。許可リスト外のパスへのアクセスを試みるコマンドは権限エラーを受け取ります。

サンドボックス化時、チャット入力での `@~/`（ホームディレクトリブラウジング）を使用したファイル参照もブロックされます。プロジェクト相対パスを使用してください。

## ネットワークの制限

サンドボックスモードでは、アウトバウンドのネットワークアクセスはデフォルトでブロックされます。サンドボックス化されたコマンドがネットワークアクセスを要求すると、3つのオプションを含む承認ダイアログが表示されます：

* **1回だけ許可** — このセッションに限りリクエストを許可します
* **許可して保存** — リクエストを許可し、将来のセッションのためにドメインを `sandbox.json` に追加します
* **拒否** — リクエストをブロックします

## サンドボックス設定

**設定 > エージェント > サンドボックス設定 > 開く**を開いて `sandbox.json` を編集します。このファイルでサンドボックスの権限をグローバルにカスタマイズできます。

```json theme={null}
{
  "network": {
    "allowedDomains": [],
    "deniedDomains": [],
    "allowUnixSockets": [],
    "allowAllUnixSockets": false,
    "allowLocalBinding": false
  },
  "filesystem": {
    "allowRead": [],
    "allowWrite": [],
    "denyRead": [],
    "denyWrite": [],
    "allowGitConfig": false
  }
}
```

### ネットワークオプション

| フィールド                 | 型          | 説明                       |
| --------------------- | ---------- | ------------------------ |
| `allowedDomains`      | `string[]` | 承認なしにサンドボックスがアクセスできるドメイン |
| `deniedDomains`       | `string[]` | 明示的にブロックされたドメイン          |
| `allowUnixSockets`    | `string[]` | 許可されたUnixソケットパス          |
| `allowAllUnixSockets` | `boolean`  | すべてのUnixソケット接続を許可        |
| `allowLocalBinding`   | `boolean`  | ローカルポートへのバインドを許可         |

### ファイルシステムオプション

| フィールド            | 型          | 説明                        |
| ---------------- | ---------- | ------------------------- |
| `allowRead`      | `string[]` | 追加の読み取り可能なパス（`~` 展開をサポート） |
| `allowWrite`     | `string[]` | 追加の書き込み可能なパス（`~` 展開をサポート） |
| `denyRead`       | `string[]` | 明示的にブロックされた読み取りパス         |
| `denyWrite`      | `string[]` | 明示的にブロックされた書き込みパス         |
| `allowGitConfig` | `boolean`  | git設定ファイルへのアクセスを許可        |

## bashコマンドの自動承認

**設定 > エージェント**の**bashコマンドを自動承認する**トグルは、フルアクセスのbashコマンドと信頼された `bricks devtools` コマンドが確認プロンプトなしで実行されるかどうかを制御します。この設定はサンドボックスモードとは独立しています — 自動承認が有効かどうかに関わらず、サンドボックス化されたコマンドは常に[サンドボックス](/ja/ctor/reference/sandbox)内で実行されます。

自動承認がオンの場合、単純な `bricks devtools` 呼び出しはサイレントに実行されます。サンドボックスが付与できない直接LANアクセスが必要なためです。`bricks devtools` を他のコマンドと組み合わせたシェルチェーン（例：`cd /path && bricks devtools scan` または `bricks devtools scan | jq .`）もサンドボックスを回避しますが、自動承認が有効な場合でも常に承認プロンプトが表示され、毎回全体の組み合わせを確認できます。

## 危険なコマンドの検出

CTORはすべての `bash` 呼び出しを高影響パターンに対してスキャンします。検出されると、承認カードは赤い枠線、⚠ アイコン、**危険なコマンド**ラベルで強調表示され、プロンプトが必ず表示されます。自動承認はバイパスされ、サンドボックスモードでも確認ゲートにフォールバックします。プロジェクトツリーは設計上書き込み可能なため（`rm -rf <project>/...` はサンドボックス内でも成功する）、サンドボックス自体ではこれらのパターンをブロックできません。

検出器は以下のカテゴリのコマンドをフラグします：

* 権限昇格：`sudo`、`doas`、`su`
* システム電源状態：`shutdown`、`reboot`、`halt`、`poweroff`、`init`
* ディスクのフォーマットまたはパーティショニング：`mkfs.*`、`fdisk`、`sfdisk`、`parted`、`diskutil`
* ロウディスク書き込み：`of=` ターゲット付きの `dd`
* セキュア削除：`shred`、`srm`、`wipe`
* 再帰削除：`rm -r`、`rm -R`、`rm --recursive`
* 再帰的な権限または所有者の変更：`chmod -R`、`chown -R`
* PID 1 のキル：`kill 1`、`pkill 1`、`killall 1`
* 履歴を書き換える git：`git push --force` / `-f`、`git reset --hard`、`git clean -f`、`git branch -D`、`git checkout .`、`git restore .`
* リモート実行パイプ：`curl ... | sh`、`wget ... | bash`（`| sudo sh` を含む）
* 任意のシェル文字列：`bash -c`、`sh -c`、`zsh -c`、その他 `-c` 付きのシェルインタプリター

検出はシェルチェーンの各セグメントを走査するため、危険なセグメントが先頭コマンドでなくても `cd /tmp && rm -rf x` や `curl ... | sudo bash` は捕捉されます。より安全なバリアントはフラグされません：`git push --force-with-lease`、`git branch -d`（マージ済みブランチのみ削除）、init 以外の PID への `kill` は通常通り実行されます。

## データストレージ

| データ          | 場所                                               |
| ------------ | ------------------------------------------------ |
| プロジェクトごとのモード | `~/.bricks-project-desktop/project-sandbox.json` |
| サンドボックス設定    | `~/.bricks-project-desktop/sandbox.json`         |
