マルチエージェントのサンドボックスとツール設定
マルチエージェント構成では、各エージェントがグローバルのサンドボックスおよびツール ポリシーを上書きできます。このページでは、エージェントごとの設定、優先順位のルール、 および例を説明します。- サンドボックスのバックエンドとモード: Sandboxing を参照してください。
- ブロックされたツールのデバッグ: Sandbox vs Tool Policy vs Elevated と
openclaw sandbox explainを参照してください。 - 昇格 exec: Elevated Mode を参照してください。
agentDir 認証ストア
~/.openclaw/agents/<agentId>/agent/auth-profiles.json を読み取ります。
認証情報はエージェント間で共有されません。エージェント間で agentDir を再利用しないでください。
認証情報を共有したい場合は、auth-profiles.json をもう一方のエージェントの agentDir にコピーしてください。
設定例
例 1: 個人用 + 制限付き家族エージェント
mainエージェント: ホスト上で実行、フルツールアクセスfamilyエージェント: Docker 内で実行(エージェントごとに 1 コンテナー)、readtool のみ
例 2: 共有サンドボックス付きの仕事用エージェント
例 2b: グローバルな coding プロファイル + messaging 専用エージェント
- デフォルトエージェントは coding ツールを取得
supportエージェントは messaging 専用(+ Slack tool)
例 3: エージェントごとに異なるサンドボックスモード
設定の優先順位
グローバル(agents.defaults.*)とエージェント固有(agents.list[].*)の設定が両方ある場合:
サンドボックス設定
エージェント固有の設定がグローバルを上書きします:agents.list[].sandbox.{docker,browser,prune}.*は、そのエージェントについてagents.defaults.sandbox.{docker,browser,prune}.*を上書きします(サンドボックススコープが"shared"に解決される場合は無視されます)。
ツール制限
フィルタリング順序は次のとおりです:- ツールプロファイル(
tools.profileまたはagents.list[].tools.profile) - プロバイダーツールプロファイル(
tools.byProvider[provider].profileまたはagents.list[].tools.byProvider[provider].profile) - グローバルツールポリシー(
tools.allow/tools.deny) - プロバイダーツールポリシー(
tools.byProvider[provider].allow/deny) - エージェント固有のツールポリシー(
agents.list[].tools.allow/deny) - エージェントのプロバイダーポリシー(
agents.list[].tools.byProvider[provider].allow/deny) - サンドボックスツールポリシー(
tools.sandbox.toolsまたはagents.list[].tools.sandbox.tools) - サブエージェントツールポリシー(該当する場合の
tools.subagents.tools)
agents.list[].tools.sandbox.tools が設定されている場合、そのエージェントでは tools.sandbox.tools を置き換えます。
agents.list[].tools.profile が設定されている場合、そのエージェントでは tools.profile を上書きします。
プロバイダーツールキーには、provider(例: google-antigravity)または provider/model(例: openai/gpt-5.4)を指定できます。
ツールポリシーは、複数のツールへ展開される group:* の短縮記法をサポートします。完全な一覧は Tool groups を参照してください。
エージェントごとの昇格上書き(agents.list[].tools.elevated)により、特定のエージェントの昇格 exec をさらに制限できます。詳細は Elevated Mode を参照してください。
単一エージェントからの移行
移行前(単一エージェント):agent.* 設定は openclaw doctor によって移行されます。今後は agents.defaults + agents.list を使ってください。
ツール制限の例
読み取り専用エージェント
安全実行エージェント(ファイル変更なし)
通信専用エージェント
sessions_history も、生の transcript ダンプではなく、
境界付きでサニタイズされたリコールビューを返します。アシスタントのリコールでは、thinking tags、
<relevant-memories> の足場、プレーンテキストの tool-call XML ペイロード
(<tool_call>...</tool_call>、
<function_call>...</function_call>、<tool_calls>...</tool_calls>、
<function_calls>...</function_calls>、および切り詰められた tool-call ブロックを含む)、
格下げされた tool-call の足場、漏えいした ASCII/全角のモデル制御
トークン、そして不正な MiniMax tool-call XML が、redaction/truncation の前に除去されます。
よくある落とし穴: 「non-main」
agents.defaults.sandbox.mode: "non-main" は、agent id ではなく session.mainKey(デフォルト "main")に基づきます。
グループ/チャンネルセッションは常にそれぞれ固有のキーを持つため、
non-main として扱われ、サンドボックス化されます。あるエージェントを決して
サンドボックス化したくない場合は、agents.list[].sandbox.mode: "off" を設定してください。
テスト
マルチエージェントのサンドボックスとツールを設定した後:-
エージェント解決を確認する:
-
サンドボックスコンテナーを確認する:
-
ツール制限をテストする:
- 制限されたツールを必要とするメッセージを送る
- エージェントが拒否されたツールを使えないことを確認する
-
ログを監視する:
トラブルシューティング
mode: "all" にしているのにエージェントがサンドボックス化されない
- それを上書きしているグローバルな
agents.defaults.sandbox.modeがないか確認してください - エージェント固有の設定が優先されるので、
agents.list[].sandbox.mode: "all"を設定してください
deny リストがあるのにツールがまだ利用可能
- ツールのフィルタリング順序を確認してください: global → agent → sandbox → subagent
- 各レベルはさらに制限することしかできず、再付与はできません
- ログで確認してください:
[tools] filtering tools for agent:${agentId}
コンテナーがエージェントごとに分離されない
- エージェント固有の sandbox config で
scope: "agent"を設定してください - デフォルトは
"session"で、セッションごとに 1 コンテナーを作成します
関連項目
- Sandboxing — 完全なサンドボックスリファレンス(モード、スコープ、バックエンド、イメージ)
- Sandbox vs Tool Policy vs Elevated — 「なぜこれがブロックされるのか?」のデバッグ
- Elevated Mode
- Multi-Agent Routing
- Sandbox Configuration
- Session Management