サンドボックス vs ツールポリシー vs Elevated
OpenClaw には3つの関連するが異なる制御があります:
- サンドボックス(
agents.defaults.sandbox.*/agents.list[].sandbox.*)はツールの実行場所を決定します(Docker vsホスト)。 - ツールポリシー(
tools.*、tools.sandbox.tools.*、agents.list[].tools.*)はどのツールが利用可能/許可されるかを決定します。 - Elevated(
tools.elevated.*、agents.list[].tools.elevated.*)は、サンドボックス内からホスト上で実行するための exec 限定のエスケープハッチです。
クイックデバッグ
インスペクタを使って OpenClaw が_実際に_何をしているか確認できます:
openclaw sandbox explain
openclaw sandbox explain --session agent:main:main
openclaw sandbox explain --agent work
openclaw sandbox explain --json
表示内容:
- 有効なサンドボックスモード/スコープ/ワークスペースアクセス
- セッションが現在サンドボックス化されているか(main vs 非 main)
- 有効なサンドボックスツール許可/拒否(エージェント/グローバル/デフォルトのどれから来たか)
- elevated ゲートと修正キーパス
サンドボックス:ツールの実行場所
サンドボックスは agents.defaults.sandbox.mode で制御されます:
"off":すべてホスト上で実行。"non-main":非 main セッションのみサンドボックス化(グループ/チャネルで「意図せず」サンドボックスされることがある)。"all":すべてサンドボックス化。
マトリクスの全体像(スコープ、ワークスペースマウント、イメージ)については サンドボックス を参照してください。
バインドマウント(セキュリティ確認)
docker.bindsはサンドボックスのファイルシステムを_貫通_します。マウントした内容は設定したモード(:roまたは:rw)でコンテナ内から見えます。- モードを省略するとデフォルトで読み書き可能になります。ソース/シークレットには
:roを推奨。 scope: "shared"ではエージェントごとのバインドは無視されます(グローバルバインドのみ適用)。/var/run/docker.sockをバインドすると、事実上ホストの制御権をサンドボックスに渡すことになります。意図的にのみ実行してください。- ワークスペースアクセス(
workspaceAccess: "ro"/"rw")はバインドモードとは独立しています。
ツールポリシー:どのツールが存在し呼び出せるか
2つのレイヤーが重要です:
- ツールプロファイル:
tools.profileとagents.list[].tools.profile(ベース許可リスト) - プロバイダーツールプロファイル:
tools.byProvider[provider].profileとagents.list[].tools.byProvider[provider].profile - グローバル/エージェントごとのツールポリシー:
tools.allow/tools.denyとagents.list[].tools.allow/agents.list[].tools.deny - プロバイダーツールポリシー:
tools.byProvider[provider].allow/denyとagents.list[].tools.byProvider[provider].allow/deny - サンドボックスツールポリシー(サンドボックス時のみ適用):
tools.sandbox.tools.allow/tools.sandbox.tools.denyとagents.list[].tools.sandbox.tools.*
基本ルール:
denyが常に優先。allowが空でない場合、それ以外はすべてブロック扱い。- ツールポリシーは絶対的な制限です。
/execコマンドで拒否されたexecツールを上書きすることはできません。 /execは権限のある送信者のセッションデフォルトを変更するだけで、ツールアクセスを付与するものではありません。 プロバイダーツールキーはprovider(例:google-antigravity)またはprovider/model(例:openai/gpt-5.2)のいずれかを受け付けます。
ツールグループ(ショートハンド)
ツールポリシー(グローバル、エージェント、サンドボックス)は複数のツールに展開される group:* エントリをサポートします:
{
tools: {
sandbox: {
tools: {
allow: ["group:runtime", "group:fs", "group:sessions", "group:memory"],
},
},
},
}
利用可能なグループ:
group:runtime:exec、bash、processgroup:fs:read、write、edit、apply_patchgroup:sessions:sessions_list、sessions_history、sessions_send、sessions_spawn、session_statusgroup:memory:memory_search、memory_getgroup:ui:browser、canvasgroup:automation:cron、gatewaygroup:messaging:messagegroup:nodes:nodesgroup:openclaw:すべての組み込み OpenClaw ツール(プロバイダープラグインを除く)
Elevated:exec 限定の「ホスト上で実行」
Elevated はツールを追加するものではありません。exec にのみ影響します。
- サンドボックス内にいる場合、
/elevated on(またはelevated: true付きのexec)でホスト上で実行します(承認が必要な場合あり)。 /elevated fullでセッション中の exec 承認をスキップします。- ダイレクト実行モードの場合、elevated は実質ノーオペレーション(ゲートは維持)。
- Elevated はスキルスコープではなく、ツール許可/拒否を上書きしません。
/execは elevated とは別です。権限のある送信者のセッションごとの exec デフォルトを調整するだけです。
ゲート:
- 有効化:
tools.elevated.enabled(およびオプションでagents.list[].tools.elevated.enabled) - 送信者許可リスト:
tools.elevated.allowFrom.<provider>(およびオプションでagents.list[].tools.elevated.allowFrom.<provider>)
詳細は Elevated モード を参照してください。
よくある「サンドボックス制約」の解決方法
「ツール X がサンドボックスツールポリシーでブロックされた」
修正キー(いずれか):
- サンドボックスを無効化:
agents.defaults.sandbox.mode=off(またはエージェントごとにagents.list[].sandbox.mode=off) - サンドボックス内でツールを許可:
tools.sandbox.tools.denyから削除(またはエージェントごとのagents.list[].tools.sandbox.tools.deny)- または
tools.sandbox.tools.allowに追加(またはエージェントごとの allow)
「main セッションだと思っていたのにサンドボックス化されている」
"non-main" モードでは、グループ/チャネルキーは main とは見なされません。main セッションキー(sandbox explain で表示)を使用するか、モードを "off" に切り替えてください。