Agent coordination
Multi-Agent-Sandbox und Werkzeuge
Jeder Agent in einer Multi-Agent-Konfiguration kann die globale Sandbox- und Tool-Richtlinie überschreiben. Diese Seite behandelt die Konfiguration pro Agent, Vorrangregeln und Beispiele.
Backends und Modi — vollständige Sandbox-Referenz.
Debugging von „warum ist das blockiert?“
Elevated exec für vertrauenswürdige Absender.
Konfigurationsbeispiele
Beispiel 1: Persönlicher Agent + eingeschränkter Familien-Agent
{ "agents": { "list": [ { "id": "main", "default": true, "name": "Personal Assistant", "workspace": "~/.openclaw/workspace", "sandbox": { "mode": "off" } }, { "id": "family", "name": "Family Bot", "workspace": "~/.openclaw/workspace-family", "sandbox": { "mode": "all", "scope": "agent" }, "tools": { "allow": ["read", "message"], "deny": ["exec", "write", "edit", "apply_patch", "process", "browser"], "message": { "crossContext": { "allowWithinProvider": false, "allowAcrossProviders": false } } } } ] }, "bindings": [ { "agentId": "family", "match": { "provider": "whatsapp", "accountId": "*", "peer": { "kind": "group", "id": "[email protected]" } } } ]}Ergebnis:
main-Agent: läuft auf dem Host, vollständiger Tool-Zugriff.family-Agent: läuft in Docker (ein Container pro Agent), nurreadund Nachrichtenversand in der aktuellen Unterhaltung.
Beispiel 2: Arbeits-Agent mit geteilter Sandbox
{ "agents": { "list": [ { "id": "personal", "workspace": "~/.openclaw/workspace-personal", "sandbox": { "mode": "off" } }, { "id": "work", "workspace": "~/.openclaw/workspace-work", "sandbox": { "mode": "all", "scope": "shared", "workspaceRoot": "/tmp/work-sandboxes" }, "tools": { "allow": ["read", "write", "apply_patch", "exec"], "deny": ["browser", "gateway", "discord"] } } ] }}Beispiel 2b: Globales Coding-Profil + Agent nur für Messaging
{ "tools": { "profile": "coding" }, "agents": { "list": [ { "id": "support", "tools": { "profile": "messaging", "allow": ["slack"] } } ] }}Ergebnis:
- Standard-Agents erhalten Coding-Tools.
- Der
support-Agent ist nur für Messaging vorgesehen (+ Slack-Tool).
Beispiel 3: Unterschiedliche Sandbox-Modi pro Agent
{ "agents": { "defaults": { "sandbox": { "mode": "non-main", "scope": "session" } }, "list": [ { "id": "main", "workspace": "~/.openclaw/workspace", "sandbox": { "mode": "off" } }, { "id": "public", "workspace": "~/.openclaw/workspace-public", "sandbox": { "mode": "all", "scope": "agent" }, "tools": { "allow": ["read"], "deny": ["exec", "write", "edit", "apply_patch"] } } ] }}Konfigurationsvorrang
Wenn sowohl globale (agents.defaults.*) als auch agentenspezifische (agents.list[].*) Konfigurationen vorhanden sind:
Sandbox-Konfiguration
Agentenspezifische Einstellungen überschreiben globale Einstellungen:
agents.list[].sandbox.mode > agents.defaults.sandbox.modeagents.list[].sandbox.scope > agents.defaults.sandbox.scopeagents.list[].sandbox.workspaceRoot > agents.defaults.sandbox.workspaceRootagents.list[].sandbox.workspaceAccess > agents.defaults.sandbox.workspaceAccessagents.list[].sandbox.docker.* > agents.defaults.sandbox.docker.*agents.list[].sandbox.browser.* > agents.defaults.sandbox.browser.*agents.list[].sandbox.prune.* > agents.defaults.sandbox.prune.*Tool-Einschränkungen
Die Filterreihenfolge lautet:
Tool-Profil
tools.profile oder agents.list[].tools.profile.
Provider-Tool-Profil
tools.byProvider[provider].profile oder agents.list[].tools.byProvider[provider].profile.
Globale Tool-Richtlinie
tools.allow / tools.deny.
Provider-Tool-Richtlinie
tools.byProvider[provider].allow/deny.
Agentenspezifische Tool-Richtlinie
agents.list[].tools.allow/deny.
Agent-Provider-Richtlinie
agents.list[].tools.byProvider[provider].allow/deny.
Sandbox-Tool-Richtlinie
tools.sandbox.tools oder agents.list[].tools.sandbox.tools.
Subagent-Tool-Richtlinie
tools.subagents.tools, falls zutreffend.
Vorrangregeln
- Jede Ebene kann Tools weiter einschränken, aber zuvor verweigerte Tools aus früheren Ebenen nicht wieder gewähren.
- Wenn
agents.list[].tools.sandbox.toolsgesetzt ist, ersetzt estools.sandbox.toolsfür diesen Agent. - Wenn
agents.list[].tools.profilegesetzt ist, überschreibt estools.profilefür diesen Agent. - Provider-Tool-Schlüssel akzeptieren entweder
provider(z. B.google-antigravity) oderprovider/model(z. B.openai/gpt-5.4).
Verhalten bei leerer Allowlist
Wenn eine explizite Allowlist in dieser Kette dazu führt, dass für den Lauf keine aufrufbaren Tools übrig bleiben, stoppt OpenClaw, bevor der Prompt an das Modell übermittelt wird. Das ist beabsichtigt: Ein Agent, der mit einem fehlenden Tool wie agents.list[].tools.allow: ["query_db"] konfiguriert ist, sollte deutlich fehlschlagen, bis das Plugin aktiviert ist, das query_db registriert, und nicht als reiner Text-Agent fortfahren.
Tool-Richtlinien unterstützen group:*-Kurzformen, die zu mehreren Tools erweitert werden. Die vollständige Liste finden Sie unter Tool-Gruppen.
Elevated-Überschreibungen pro Agent (agents.list[].tools.elevated) können Elevated exec für bestimmte Agents weiter einschränken. Details finden Sie unter Elevated-Modus.
Migration vom Einzelagenten
Vorher (Einzelagent)
{ "agents": { "defaults": { "workspace": "~/.openclaw/workspace", "sandbox": { "mode": "non-main" } } }, "tools": { "sandbox": { "tools": { "allow": ["read", "write", "apply_patch", "exec"], "deny": [] } } }}Nachher (Multi-Agent)
{ "agents": { "list": [ { "id": "main", "default": true, "workspace": "~/.openclaw/workspace", "sandbox": { "mode": "off" } } ] }}Beispiele für Tool-Einschränkungen
Schreibgeschützter Agent
{ "tools": { "allow": ["read"], "deny": ["exec", "write", "edit", "apply_patch", "process"] }}Shell-Ausführung mit deaktivierten Dateisystem-Tools
{ "tools": { "allow": ["read", "exec", "process"], "deny": ["write", "edit", "apply_patch", "browser", "gateway"] }}Nur Kommunikation
{ "tools": { "sessions": { "visibility": "tree" }, "allow": ["sessions_list", "sessions_send", "sessions_history", "session_status"], "deny": ["exec", "write", "edit", "apply_patch", "read", "browser"] }}sessions_history gibt in diesem Profil weiterhin eine begrenzte, bereinigte Abrufansicht zurück, statt einen rohen Transkript-Dump. Der Assistentenabruf entfernt Thinking-Tags, <relevant-memories>-Gerüste, Klartext-XML-Nutzlasten von Tool-Aufrufen (einschließlich <tool_call>...</tool_call>, <function_call>...</function_call>, <tool_calls>...</tool_calls>, <function_calls>...</function_calls> und abgeschnittener Tool-Aufrufblöcke), herabgestufte Tool-Aufruf-Gerüste, durchgesickerte ASCII-/Vollbreiten-Modellsteuerungstokens sowie fehlerhaftes MiniMax-Tool-Aufruf-XML vor Redaktion/Kürzung.
Häufige Fehlerquelle: "non-main"
Testen
Nach dem Konfigurieren von Multi-Agent-Sandbox und Tools:
Agent-Auflösung prüfen
openclaw agents list --bindingsSandbox-Container verifizieren
docker ps --filter "name=openclaw-sbx-"Tool-Einschränkungen testen
- Senden Sie eine Nachricht, die eingeschränkte Tools erfordert.
- Verifizieren Sie, dass der Agent verweigerte Tools nicht verwenden kann.
Logs überwachen
tail -f "${OPENCLAW_STATE_DIR:-$HOME/.openclaw}/logs/gateway.log" | grep -E "routing|sandbox|tools"Fehlerbehebung
Agent trotz `mode: 'all'` nicht in Sandbox
- Prüfen Sie, ob es ein globales
agents.defaults.sandbox.modegibt, das dies überschreibt. - Agent-spezifische Konfiguration hat Vorrang, setzen Sie daher
agents.list[].sandbox.mode: "all".
Tools trotz Deny-Liste weiterhin verfügbar
- Prüfen Sie die Reihenfolge der Tool-Filterung: global → Agent → Sandbox → Subagent.
- Jede Ebene kann nur weiter einschränken, nicht erneut gewähren.
- Verifizieren Sie dies mit Logs:
[tools] filtering tools for agent:${agentId}.
Container nicht pro Agent isoliert
- Setzen Sie
scope: "agent"in der Agent-spezifischen Sandbox-Konfiguration. - Standard ist
"session", wodurch ein Container pro Sitzung erstellt wird.
Verwandte Themen
- Erweiterter Modus
- Multi-Agent-Routing
- Sandbox-Konfiguration
- Sandbox vs. Tool-Richtlinie vs. erweiterte Berechtigungen — Debugging: „Warum wird das blockiert?“
- Sandboxing — vollständige Sandbox-Referenz (Modi, Bereiche, Backends, Images)
- Sitzungsverwaltung