Sandbox vs Tool Policy vs Elevated

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

  1. Sandboxagents.defaults.sandbox.* / agents.list[].sandbox.*)はツールが実行される場所を決定します(Docker vs ホスト)。
  2. Tool policytools.*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 non-main)
  • 有効なサンドボックスツール許可/拒否(およびエージェント/グローバル/デフォルトのどれから来たか)
  • elevated ゲートと修正キーパス

Sandbox:ツールが実行される場所

サンドボックス化は agents.defaults.sandbox.mode で制御されます:

  • "off":すべてがホストで実行されます。
  • "non-main":non-main セッションのみがサンドボックス化されます(グループ/チャンネルで一般的な「サプライズ」)。
  • "all":すべてがサンドボックス化されます。

完全なマトリックス(スコープ、ワークスペースマウント、イメージ)については Sandboxing を参照してください。

バインドマウント(セキュリティクイックチェック)

  • docker.binds はサンドボックスファイルシステムを貫通します:マウントしたものは、設定したモード(:ro または :rw)でコンテナ内に表示されます。
  • モードを省略した場合、デフォルトは read-write です。ソース/シークレットには :ro を優先してください。
  • scope: "shared" はエージェントごとのバインドを無視します(グローバルバインドのみ適用)。
  • /var/run/docker.sock のバインドは、事実上ホスト制御をサンドボックスに渡します。意図的にのみ行ってください。
  • ワークスペースアクセス(workspaceAccess: "ro"/"rw")は、バインドモードとは独立しています。

Tool policy:どのツールが存在/呼び出し可能か

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: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 Mode を参照してください。

一般的な「sandbox jail」の修正

「サンドボックスツールポリシーによってツール X がブロックされました」

修正キー(いずれか1つを選択):

  • サンドボックスを無効化: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" に切り替えてください。