概要
マルチエージェント設定内の各エージェントは、独自のものを持つことができるようになりました。- サンドボックス構成 (
agents.list[].sandboxはagents.defaults.sandboxをオーバーライドします) - ツールの制限 (
tools.allow/tools.deny、およびagents.list[].tools)
- フルアクセスが可能なパーソナルアシスタント
- 制限されたツールを使用する家族/職場エージェント
- サンドボックス内の一般向けエージェント
setupCommand は sandbox.docker (グローバルまたはエージェントごと) に属し、1 回実行されます
コンテナが作成されたとき。
認証はエージェントごとに行われます。各エージェントは、次の場所にある独自の agentDir 認証ストアから読み取ります。
agentDir を再利用しないでください。
認証情報を共有したい場合は、auth-profiles.json を他のエージェントの agentDir にコピーします。
実行時のサンドボックスの動作については、サンドボックス を参照してください。
「なぜこれがブロックされるのか?」のデバッグについては、サンドボックス vs ツール ポリシー vs 昇格 および openclaw sandbox explain を参照してください。
構成例
例 1: 個人 + 制限付き家族代理人
mainエージェント: ホスト上で実行、完全なツール アクセスfamilyエージェント: Docker で実行 (エージェントごとに 1 つのコンテナー)、readツールのみ
例 2: 共有サンドボックスを使用した作業エージェント
- デフォルトのエージェントはコーディングツールを入手します
supportエージェントはメッセージング専用です (+ Slack ツール)
例 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.2) のいずれかを受け入れます。
ツールグループ (略記)
ツール ポリシー (グローバル、エージェント、サンドボックス) は、複数の具体的なツールに拡張されるgroup:* エントリをサポートします。
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 ツール (プロバイダー プラグインを除く)
昇格モード
tools.elevated はグローバル ベースライン (送信者ベースの許可リスト) です。 agents.list[].tools.elevated は、特定のエージェントの昇格をさらに制限できます (両方が許可する必要があります)。
軽減パターン:- 信頼できないエージェントに対して exec を拒否する (agents.list[].tools.deny: ["exec"])
- 制限されたエージェントにルーティングする送信者を許可リストに登録しないようにします
- サンドボックス実行のみが必要な場合は、昇格をグローバルに無効にします (
tools.elevated.enabled: false)。 - 機密プロファイルのエージェントごとの昇格を無効にする (
agents.list[].tools.elevated.enabled: false)
単一エージェントからの移行
前 (単一エージェント):agent.* 構成は openclaw doctor によって移行されます。今後は agents.defaults + agents.list を優先します。
ツール制限の例
読み取り専用エージェント
安全な実行エージェント (ファイルの変更なし)
通信専用エージェント
よくある落とし穴: 「非メイン」
agents.defaults.sandbox.mode: "non-main" は session.mainKey (デフォルトは "main") に基づいています。
エージェントIDではありません。グループ/チャネル セッションは常に独自のキーを取得するため、
は非メインとして扱われ、サンドボックス化されます。エージェントに絶対にさせたくない場合
サンドボックス、agents.list[].sandbox.mode: "off" を設定します。
テスト
マルチエージェント サンドボックスとツールを構成した後:-
エージェントの解決策を確認します:
-
サンドボックス コンテナを確認します:
-
テストツールの制限:
- 制限されたツールを必要とするメッセージを送信する
- エージェントが拒否されたツールを使用できないことを確認する
-
ログの監視:
mode: "all" にもかかわらず、エージェントはサンドボックス化されていません
- それをオーバーライドするグローバル
agents.defaults.sandbox.modeがあるかどうかを確認します。 - エージェント固有の設定が優先されるため、
agents.list[].sandbox.mode: "all"を設定します。
拒否リストにもかかわらずツールは引き続き利用可能
- ツールのフィルタリング順序を確認します: グローバル → エージェント → サンドボックス → サブエージェント
- 各レベルはさらに制限することのみが可能であり、元に戻すことはできません
- ログで確認:
[tools] filtering tools for agent:${agentId}
コンテナがエージェントごとに分離されていない
- エージェント固有のサンドボックス構成で
scope: "agent"を設定します - デフォルトは
"session"で、セッションごとに 1 つのコンテナを作成します。