Agent coordination

Sandbox en tools voor meerdere agents

Status: active

Elke agent in een opstelling met meerdere agents kan het globale 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:

  • Agent main: draait op de host en heeft volledige toegang tot tools.
  • Agent family: draait in Docker (één container per agent) en kan alleen read gebruiken en berichten binnen het huidige gesprek verzenden.
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: Globaal codeerprofiel + agent die alleen berichten verwerkt
json
{  "tools": { "profile": "coding" },  "agents": {    "list": [      {        "id": "support",        "tools": { "profile": "messaging", "allow": ["slack"] }      }    ]  }}

Resultaat:

  • Standaardagents krijgen codeertools.
  • Agent support 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 globale (agents.defaults.*) als agentspecifieke (agents.list[].*) configuraties bestaan:

Sandboxconfiguratie

Agentspecifieke instellingen overschrijven globale instellingen:

text
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.*

Toolbeperkingen

De filtervolgorde is:

  • Toolprofiel

    tools.profile of agents.list[].tools.profile.

  • Toolprofiel van provider

    tools.byProvider[provider].profile of agents.list[].tools.byProvider[provider].profile.

  • Globaal toolbeleid

    tools.allow / tools.deny.

  • Toolbeleid van provider

    tools.byProvider[provider].allow/deny.

  • Agentspecifiek toolbeleid

    agents.list[].tools.allow/deny.

  • Providerbeleid van agent

    agents.list[].tools.byProvider[provider].allow/deny.

  • Toolbeleid van sandbox

    tools.sandbox.tools of agents.list[].tools.sandbox.tools.

  • Toolbeleid van subagent

    tools.subagents.tools, indien van toepassing.

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

    Als een expliciete toelatingslijst in deze 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.list[].tools.allow: ["query_db"], moet duidelijk mislukken totdat de Plugin die query_db registreert is ingeschakeld, en mag niet doorgaan als een agent die alleen tekst verwerkt.

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

    Verhoogde overschrijvingen per agent (agents.list[].tools.elevated) kunnen verhoogde uitvoering voor specifieke agents verder beperken. Zie Verhoogde modus voor meer informatie.


    Migratie vanaf éé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": []      }    }  }}

    Daarna (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"]  }}

    Shell-uitvoering 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 retourneert in dit profiel nog steeds een begrensde, opgeschoonde terugblik in plaats van een onbewerkte transcriptdump. De terugblik van de assistent verwijdert denktags, <relevant-memories>-structuren, XML-payloads in platte tekst voor toolaanroepen (waaronder <tool_call>...</tool_call>, <function_call>...</function_call>, <tool_calls>...</tool_calls>, <function_calls>...</function_calls> en afgekorte toolaanroepblokken), gedegradeerde toolaanroepstructuren, gelekte ASCII-/volledige-breedtebesturingstokens van het model en ongeldige XML voor MiniMax-toolaanroepen voordat redactie en afkapping plaatsvinden.


    Veelvoorkomende valkuil: "non-main"


    Testen

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

  • Agentbepaling controleren

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

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

    • Verzend 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 globale agents.defaults.sandbox.mode bestaat die deze instelling overschrijft.
    • Agentspecifieke configuratie heeft voorrang; stel daarom agents.list[].sandbox.mode: "all" in.
    Tools nog steeds beschikbaar ondanks de weigeringslijst
    Container niet per agent geïsoleerd
    • De standaardwaarde voor scope is "agent" (één container per agent-ID).
    • Stel scope: "session" in voor één container per sessie, of scope: "shared" om één container voor meerdere agents te hergebruiken.

    Gerelateerd

    Was this useful?
    On this page

    On this page