Skip to main content

マルチエージェントのサンドボックス & ツール設定

概要

マルチエージェント構成では、各エージェントが次を個別に持てます。
  • サンドボックス設定agents.list[].sandboxagents.defaults.sandbox を上書き)
  • ツール制限tools.allow / tools.deny、および agents.list[].tools
これにより、異なるセキュリティ プロファイルで複数のエージェントを実行できます。
  • フル アクセスの個人アシスタント
  • ツールを制限した家族 / 仕事用エージェント
  • サンドボックス内の公開向けエージェント
setupCommandsandbox.docker(グローバルまたはエージェントごと)の配下に属し、コンテナ作成時に一度だけ実行されます。 認証はエージェント単位です。各エージェントは次の場所にある自身の agentDir 認証ストアを読み取ります。
認証情報はエージェント間で共有されません**。 エージェント間で agentDir を再利用しないでください。 認証情報はエージェント間で共有されません**。 エージェント間で agentDir を再利用しないでください。 資格情報はエージェント間で共有されませんagentDir をエージェント間で再利用しないでください。資格情報を共有したい場合は、auth-profiles.json を別のエージェントの agentDir にコピーしてください。 実行時の Sandbox の動作については、 Sandboxing を参照してください。 実行時の Sandbox の動作については、 Sandboxing を参照してください。 実行時のサンドボックスの挙動については、Sandboxing を参照してください。 「なぜブロックされるのか?」のデバッグについては、Sandbox vs Tool Policy vs Elevatedopenclaw sandbox explain を参照してください。

設定例

例 1: 個人用 + 制限付き家族用エージェント

結果:
  • main エージェント: ホスト上で実行、ツールはフル アクセス
  • family エージェント: Docker 内で実行(エージェントごとに 1 コンテナ)、read ツールのみ

例 2: 共有サンドボックスの仕事用エージェント


例 2b: グローバルなコーディング プロファイル + メッセージング専用エージェント

結果:
  • デフォルトのエージェントはコーディング ツールを使用可能
  • support エージェントはメッセージング専用(+ Slack ツール)

例 3: エージェントごとに異なるサンドボックス モード


設定の優先順位

グローバル(agents.defaults.*)とエージェント固有(agents.list[].*)の設定が両方存在する場合:

サンドボックス設定

エージェント固有の設定がグローバルを上書きします。
注記:
  • そのエージェントでは agents.list[].sandbox.{docker,browser,prune}.*agents.defaults.sandbox.{docker,browser,prune}.* を上書きします(サンドボックス スコープが "shared" に解決される場合は無視されます)。

ツール制限

フィルタリング順は次のとおりです。
  1. ツール プロファイルtools.profile または agents.list[].tools.profile
  2. プロバイダー ツール プロファイルtools.byProvider[provider].profile または agents.list[].tools.byProvider[provider].profile
  3. グローバル ツール ポリシーtools.allow / tools.deny
  4. プロバイダー ツール ポリシーtools.byProvider[provider].allow/deny
  5. エージェント固有のツール ポリシーagents.list[].tools.allow/deny
  6. エージェント プロバイダー ポリシーagents.list[].tools.byProvider[provider].allow/deny
  7. サンドボックス ツール ポリシーtools.sandbox.tools または agents.list[].tools.sandbox.tools
  8. サブエージェント ツール ポリシーtools.subagents.tools、該当する場合)
各レベルはさらにツールを制限できますが、以前のレベルから拒否されたツールを許可することはできません。 agents.list[].tools.sandbox.tools が設定されている場合、tools.sandbox.tools に置き換えられます。 agents.list[].tools.profile が設定されている場合、そのエージェントの tools.profile が上書きされます。 プロバイダのツールキーは、provider(例:google-antigubity)またはprovider/model(例:openai/gpt-5.2)のいずれかを受け付けます。

ツール グループ(ショートハンド)

ツール ポリシー(グローバル、エージェント、サンドボックス)は、複数の具体的なツールに展開される group:* エントリをサポートします。
  • group:runtime: exec, bash, process
  • group:fs: read, write, edit, apply_patch
  • group:sessions: sessions_list, sessions_history, sessions_send, sessions_spawn, session_status
  • group:memory: memory_search, memory_get
  • group:ui: browser, canvas
  • group:automation: cron, gateway
  • group:messaging: message
  • group:nodes: nodes
  • group:openclaw: すべての組み込み OpenClaw ツール(プロバイダー プラグインは除外)

Elevated モード

tools.elevated はグローバルベースライン(送信者ベースの許可リスト)です。 tools.elevated はグローバルのベースライン(送信者ベースの許可リスト)です。agents.list[].tools.elevated は、特定のエージェントに対して Elevated をさらに制限できます(両方で許可される必要があります)。 tools.elevated はグローバルのベースライン(送信者ベースの許可リスト)です。agents.list[].tools.elevated は、特定のエージェントに対して Elevated をさらに制限できます(両方で許可される必要があります)。 緩和パターン:
  • 信頼できないエージェントでは exec を拒否(agents.list[].tools.deny: ["exec"]
  • 制限付きエージェントへルーティングされる送信者を許可リストに追加しない
  • サンドボックス化された実行のみを望む場合は、グローバルで Elevated を無効化(tools.elevated.enabled: false
  • 機微なプロファイルでは、エージェント単位で Elevated を無効化(agents.list[].tools.elevated.enabled: false

単一エージェントからの移行

Before(単一エージェント):
After(異なるプロファイルのマルチエージェント):
レガシーの agent.* 設定は openclaw doctor により移行されます。今後は agents.defaults + agents.list を推奨します。

ツール制限の例

読み取り専用エージェント

安全実行エージェント(ファイル変更なし)

通信専用エージェント


よくある落とし穴: 「non-main」

agents.defaults.sandbox.mode: "non-main" はエージェント ID ではなく、session.mainKey(デフォルトは "main")に基づきます。 グループ / チャンネル セッションは常に独自のキーを取得するため、non-main として扱われ、サンドボックス化されます。エージェントを常にサンドボックス化しない場合は、agents.list[].sandbox.mode: "off" を設定してください。 グループ/チャネルセッションは常に独自のキーを取得するため、 はメインではないものとして扱われ、サンドボックス化されます。 もしエージェントに サンドボックスを渡さないようにしたい場合は、 agents.list[].sandbox.mode: "off" を設定します。 グループ/チャネルセッションは常に独自のキーを取得するため、 はメインではないものとして扱われ、サンドボックス化されます。 もしエージェントに サンドボックスを渡さないようにしたい場合は、 agents.list[].sandbox.mode: "off" を設定します。

テスト

マルチエージェントのサンドボックスとツールを設定した後:
  1. エージェント解決の確認:
  2. サンドボックス コンテナの確認:
  3. ツール制限のテスト:
    • 制限されたツールを必要とするメッセージを送信
    • 拒否されたツールをエージェントが使用できないことを確認
  4. ログの監視:

トラブルシューティング

mode: "all" にもかかわらずエージェントがサンドボックス化されない

  • 上書きするグローバルの agents.defaults.sandbox.mode がないか確認
  • エージェント固有の設定が優先されるため、agents.list[].sandbox.mode: "all" を設定

拒否リストがあるのにツールが使用可能なまま

  • ツールのフィルタリング順を確認: グローバル → エージェント → サンドボックス → サブエージェント
  • 各レベルは制限のみ可能で、再付与は不可
  • ログで確認: [tools] filtering tools for agent:${agentId}

エージェントごとにコンテナが分離されない

  • エージェント固有のサンドボックス設定で scope: "agent" を設定
  • デフォルトは "session" で、セッションごとに 1 コンテナを作成

See Also