サンドボックス vs ツールポリシー vs Elevated

OpenClaw には3つの関連するが異なる制御があります:

  1. サンドボックスagents.defaults.sandbox.* / agents.list[].sandbox.*)はツールの実行場所を決定します(Docker vsホスト)。
  2. ツールポリシーtools.*tools.sandbox.tools.*agents.list[].tools.*)はどのツールが利用可能/許可されるかを決定します。
  3. Elevatedtools.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.profileagents.list[].tools.profile(ベース許可リスト)
  • プロバイダーツールプロファイルtools.byProvider[provider].profileagents.list[].tools.byProvider[provider].profile
  • グローバル/エージェントごとのツールポリシーtools.allow/tools.denyagents.list[].tools.allow/agents.list[].tools.deny
  • プロバイダーツールポリシーtools.byProvider[provider].allow/denyagents.list[].tools.byProvider[provider].allow/deny
  • サンドボックスツールポリシー(サンドボックス時のみ適用):tools.sandbox.tools.allow/tools.sandbox.tools.denyagents.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:runtimeexecbashprocess
  • group:fsreadwriteeditapply_patch
  • group:sessionssessions_listsessions_historysessions_sendsessions_spawnsession_status
  • group:memorymemory_searchmemory_get
  • group:uibrowsercanvas
  • group:automationcrongateway
  • group:messagingmessage
  • group:nodesnodes
  • group: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" に切り替えてください。