Agent coordination

Sandbox en tools voor meerdere agents

Status: active

Elke agent in een multi-agentconfiguratie kan het algemene sandbox- en toolbeleid overschrijven. Deze pagina behandelt configuratie per agent, voorrangsregels en voorbeelden.


Configuratievoorbeelden

Voorbeeld 1: Persoonlijke agent + beperkte gezinsagent
json
{  "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": "120363424282127706@g.us"        }      }    }  ]}

Resultaat:

  • main-agent: draait op de host, volledige toegang tot tools.
  • family-agent: draait in Docker (één container per agent), alleen read en berichten verzenden binnen het huidige gesprek.
Voorbeeld 2: Werkagent met gedeelde sandbox
json
{  "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"]        }      }    ]  }}
Voorbeeld 2b: Algemeen programmeerprofiel + agent die alleen berichten verwerkt
json
{  "tools": { "profile": "coding" },  "agents": {    "list": [      {        "id": "support",        "tools": { "profile": "messaging", "allow": ["slack"] }      }    ]  }}

Resultaat:

  • standaardagents krijgen programmeertools.
  • support-agent kan alleen berichten verwerken (+ Slack-tool).
Voorbeeld 3: Verschillende sandboxmodi per agent
json
{  "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"]        }      }    ]  }}

Configuratievoorrang

Wanneer zowel algemene (agents.defaults.*) als agentspecifieke (agents.entries.*.*) configuraties bestaan:

Sandboxconfiguratie

Agentspecifieke instellingen overschrijven de algemene instellingen:

text
agents.entries.*.sandbox.mode > agents.defaults.sandbox.modeagents.entries.*.sandbox.scope > agents.defaults.sandbox.scopeagents.entries.*.sandbox.workspaceRoot > agents.defaults.sandbox.workspaceRootagents.entries.*.sandbox.workspaceAccess > agents.defaults.sandbox.workspaceAccessagents.entries.*.sandbox.docker.* > agents.defaults.sandbox.docker.*agents.entries.*.sandbox.browser.* > agents.defaults.sandbox.browser.*agents.entries.*.sandbox.prune.* > agents.defaults.sandbox.prune.*

Toolbeperkingen

De filtervolgorde is:

  • Toolprofiel

    tools.profile of agents.entries.*.tools.profile.

  • Toolprofiel van provider

    tools.byProvider[provider].profile of agents.entries.*.tools.byProvider[provider].profile.

  • Algemeen toolbeleid

    tools.allow / tools.deny.

  • Toolbeleid van provider

    tools.byProvider[provider].allow/deny.

  • Agentspecifiek toolbeleid

    agents.entries.*.tools.allow/deny.

  • Providerbeleid van agent

    agents.entries.*.tools.byProvider[provider].allow/deny.

  • Toolbeleid van sandbox

    tools.sandbox.tools of agents.entries.*.tools.sandbox.tools.

  • Toolbeleid van subagent

    tools.subagents.tools, indien van toepassing.

  • Voorrangsregels
    • Elk niveau kan tools verder beperken, maar kan op eerdere niveaus geweigerde tools niet opnieuw toestaan.
    • Als agents.entries.*.tools.sandbox.tools is ingesteld, vervangt dit tools.sandbox.tools voor die agent.
    • Als agents.entries.*.tools.profile is ingesteld, overschrijft dit tools.profile voor die agent.
    • Providertoolsleutels accepteren zowel provider (bijvoorbeeld google-antigravity) als provider/model (bijvoorbeeld openai/gpt-5.4).
    Gedrag bij een lege toelatingslijst

    Als een expliciete toelatingslijst in die keten ervoor zorgt dat er geen aanroepbare tools overblijven, stopt OpenClaw voordat de prompt naar het model wordt verzonden. Dit is opzettelijk: een agent die is geconfigureerd met een ontbrekende tool zoals agents.entries.*.tools.allow: ["query_db"], moet duidelijk mislukken totdat de Plugin die query_db registreert is ingeschakeld, en niet doorgaan als een agent die alleen tekst verwerkt.

    Toolbeleid ondersteunt group:*-verkortingen die naar meerdere tools worden uitgebreid. Zie Toolgroepen voor de volledige lijst.

    Verhoogde overschrijvingen per agent (agents.entries.*.tools.elevated) kunnen verhoogde uitvoering voor specifieke agents verder beperken. Zie Verhoogde modus voor details.


    Migratie vanuit één agent

    Voorheen (één agent)

    json
    {  "agents": {    "defaults": {      "workspace": "~/.openclaw/workspace",      "sandbox": {        "mode": "non-main"      }    }  },  "tools": {    "sandbox": {      "tools": {        "allow": ["read", "write", "apply_patch", "exec"],        "deny": []      }    }  }}

    Nadien (meerdere agents)

    json
    {  "agents": {    "list": [      {        "id": "main",        "default": true,        "workspace": "~/.openclaw/workspace",        "sandbox": { "mode": "off" }      }    ]  }}

    Voorbeelden van toolbeperkingen

    Alleen-lezenagent

    json
    {  "tools": {    "allow": ["read"],    "deny": ["exec", "write", "edit", "apply_patch", "process"]  }}

    Shelluitvoering met uitgeschakelde bestandssysteemtools

    json
    {  "tools": {    "allow": ["read", "exec", "process"],    "deny": ["write", "edit", "apply_patch", "browser", "gateway"]  }}

    Alleen communicatie

    json
    {  "tools": {    "sessions": { "visibility": "tree" },    "allow": ["sessions_list", "sessions_send", "sessions_history", "session_status"],    "deny": ["exec", "write", "edit", "apply_patch", "read", "browser"]  }}

    sessions_history in dit profiel retourneert nog steeds een begrensde, opgeschoonde herinneringsweergave in plaats van een onbewerkte transcriptdump. Bij het ophalen van assistentgegevens worden denktags, <relevant-memories>-scaffolding, XML-payloads voor toolaanroepen in platte tekst (waaronder <tool_call>...</tool_call>, <function_call>...</function_call>, <tool_calls>...</tool_calls>, <function_calls>...</function_calls> en afgekorte toolaanroepblokken), afgewaardeerde scaffolding voor toolaanroepen, gelekte ASCII-/volledige-breedte-modelbesturingstokens en ongeldige MiniMax-XML voor toolaanroepen verwijderd vóór redactie/afkapping.


    Veelvoorkomende valkuil: "non-main"


    Testen

    Na het configureren van de sandbox en tools voor meerdere agents:

  • Agentselectie controleren

    bash
    openclaw agents list --bindings
  • Sandboxcontainers verifiëren

    bash
    docker ps --filter "name=openclaw-sbx-"
  • Toolbeperkingen testen

    • Stuur een bericht waarvoor beperkte tools nodig zijn.
    • Controleer of de agent geweigerde tools niet kan gebruiken.
  • Logboeken bewaken

    bash
    openclaw logs --follow | grep -E "routing|sandbox|tools"

  • Problemen oplossen

    Agent wordt ondanks `mode: 'all'` niet in een sandbox uitgevoerd
    • Controleer of er een algemene agents.defaults.sandbox.mode bestaat die dit overschrijft.
    • Agentspecifieke configuratie heeft voorrang, dus stel agents.entries.*.sandbox.mode: "all" in.
    Tools die ondanks de weigerlijst nog steeds beschikbaar zijn
    Container niet per agent geïsoleerd
    • De standaardwaarde van scope is "agent" (één container per agent-id).
    • Stel scope: "session" in voor één container per sessie, of scope: "shared" om één container opnieuw te gebruiken voor meerdere agents.

    Gerelateerd

    Was this useful?
    On this page

    On this page