Konfiguration af Multi-Agent Sandbox & Tools¶
Overblik¶
Hver agent i en multi-agent-opsætning kan nu have sin egen:
- Sandbox-konfiguration (
agents.list[].sandboxtilsidesætteragents.defaults.sandbox) - Værktøjsbegrænsninger (
tools.allow/tools.deny, plusagents.list[].tools)
Dette gør det muligt at køre flere agenter med forskellige sikkerhedsprofiler:
- Personlig assistent med fuld adgang
- Familie-/arbejdsagenter med begrænsede værktøjer
- Offentligt tilgængelige agenter i sandboxes
setupCommand hører under sandbox.docker (globalt eller pr. agent) og kører én gang,
når containeren oprettes.
Autentificering er pr. agent: hver agent læser fra sin egen agentDir auth-store på:
~/.openclaw/agents/<agentId>/agent/auth-profiles.json
Legitimationsoplysninger deles ikke mellem agenter. Genbrug aldrig 'agentDir' på tværs af midler.
Hvis du ønsker at dele creds, kopiere auth-profiles.json til den anden agent's agentDir.
For hvordan sandboxing opfører sig på runtime, se Sandboxing.
For fejlfinding “hvorfor er denne blokeret?”, se Sandbox vs Tool Politik vs forhøjet og openclaw sandbox explain.
Konfigurationseksempler¶
Eksempel 1: Personlig + Begrænset familieagent¶
{
"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"],
"deny": ["exec", "write", "edit", "apply_patch", "process", "browser"]
}
}
]
},
"bindings": [
{
"agentId": "family",
"match": {
"provider": "whatsapp",
"accountId": "*",
"peer": {
"kind": "group",
"id": "120363424282127706@g.us"
}
}
}
]
}
Resultat:
mainagent: Kører på værten, fuld værktøjsadgangfamilyagent: Kører i Docker (én container pr. agent), kunread-værktøj
Eksempel 2: Arbejdsagent med delt 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"]
}
}
]
}
}
Eksempel 2b: Global kodningsprofil + agent kun til beskeder¶
{
"tools": { "profile": "coding" },
"agents": {
"list": [
{
"id": "support",
"tools": { "profile": "messaging", "allow": ["slack"] }
}
]
}
}
Resultat:
- standardagenter får kodningsværktøjer
supportagent er kun til beskeder (+ Slack-værktøj)
Eksempel 3: Forskellige sandbox-tilstande pr. agent¶
{
"agents": {
"defaults": {
"sandbox": {
"mode": "non-main", // Global default
"scope": "session"
}
},
"list": [
{
"id": "main",
"workspace": "~/.openclaw/workspace",
"sandbox": {
"mode": "off" // Override: main never sandboxed
}
},
{
"id": "public",
"workspace": "~/.openclaw/workspace-public",
"sandbox": {
"mode": "all", // Override: public always sandboxed
"scope": "agent"
},
"tools": {
"allow": ["read"],
"deny": ["exec", "write", "edit", "apply_patch"]
}
}
]
}
}
Konfigurationspræcedens¶
Når både globale (agents.defaults.*) og agent-specifikke (agents.list[].*) konfigurationer findes:
Sandbox-konfiguration¶
Agent-specifikke indstillinger tilsidesætter globale:
agents.list[].sandbox.mode > agents.defaults.sandbox.mode
agents.list[].sandbox.scope > agents.defaults.sandbox.scope
agents.list[].sandbox.workspaceRoot > agents.defaults.sandbox.workspaceRoot
agents.list[].sandbox.workspaceAccess > agents.defaults.sandbox.workspaceAccess
agents.list[].sandbox.docker.* > agents.defaults.sandbox.docker.*
agents.list[].sandbox.browser.* > agents.defaults.sandbox.browser.*
agents.list[].sandbox.prune.* > agents.defaults.sandbox.prune.*
Noter:
agents.list[].sandbox.{docker,browser,prune}.*tilsidesætteragents.defaults.sandbox.{docker,browser,prune}.*for den pågældende agent (ignoreres når sandbox-scope opløses til"shared").
Værktøjsbegrænsninger¶
Filtreringsrækkefølgen er:
- Værktøjsprofil (
tools.profileelleragents.list[].tools.profile) - Udbyder-værktøjsprofil (
tools.byProvider[provider].profileelleragents.list[].tools.byProvider[provider].profile) - Global værktøjspolitik (
tools.allow/tools.deny) - Udbyder-værktøjspolitik (
tools.byProvider[provider].allow/deny) - Agent-specifik værktøjspolitik (
agents.list[].tools.allow/deny) - Agent-udbyderpolitik (
agents.list[].tools.byProvider[provider].allow/deny) - Sandbox-værktøjspolitik (
tools.sandbox.toolselleragents.list[].tools.sandbox.tools) - Subagent-værktøjspolitik (
tools.subagents.tools, hvis relevant)
Hvert niveau kan yderligere begrænse værktøjer, men kan ikke give tilbage nægtede værktøjer fra tidligere niveauer.
Hvis agents.list[].tools.sandbox.tools er indstillet, erstatter den tools.sandbox.tools for det agent.
Hvis agents.list[].tools.profile er sat, tilsidesætter den tools.profile for den agent.
Udbyderværktøjstaster accepterer enten provider (f.eks. google-antigravity) eller provider/model (f.eks. openai/gpt-5.2).
Værktøjsgrupper (genveje)¶
Værktøjspolitikker (globale, agent, sandbox) understøtter group:*-poster, der udvides til flere konkrete værktøjer:
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: alle indbyggede OpenClaw-værktøjer (udelukker udbyder-plugins)
Elevated-tilstand¶
tools.elevated er den globale baseline (afsenderbaseret tilladelsesliste). agents.list[].tools.elevated kan yderligere begrænse forhøjet for specifikke agenser (begge skal tillade).
Afhjælpningsmønstre:
- Afvis
execfor ikke-betroede agenter (agents.list[].tools.deny: ["exec"]) - Undgå at tillade afsendere, der rout’er til begrænsede agenter
- Deaktivér elevated globalt (
tools.elevated.enabled: false), hvis du kun vil have sandboxet eksekvering - Deaktivér elevated pr. agent (
agents.list[].tools.elevated.enabled: false) for følsomme profiler
Migration fra enkelt agent¶
Før (enkelt agent):
{
"agents": {
"defaults": {
"workspace": "~/.openclaw/workspace",
"sandbox": {
"mode": "non-main"
}
}
},
"tools": {
"sandbox": {
"tools": {
"allow": ["read", "write", "apply_patch", "exec"],
"deny": []
}
}
}
}
Efter (multi-agent med forskellige profiler):
{
"agents": {
"list": [
{
"id": "main",
"default": true,
"workspace": "~/.openclaw/workspace",
"sandbox": { "mode": "off" }
}
]
}
}
Ældre agent.*-konfigurationer migreres af openclaw doctor; foretræk agents.defaults + agents.list fremover.
Eksempler på værktøjsbegrænsninger¶
Skrivebeskyttet agent¶
{
"tools": {
"allow": ["read"],
"deny": ["exec", "write", "edit", "apply_patch", "process"]
}
}
Sikker eksekveringsagent (ingen filændringer)¶
{
"tools": {
"allow": ["read", "exec", "process"],
"deny": ["write", "edit", "apply_patch", "browser", "gateway"]
}
}
Agent kun til kommunikation¶
{
"tools": {
"allow": ["sessions_list", "sessions_send", "sessions_history", "session_status"],
"deny": ["exec", "write", "edit", "apply_patch", "read", "browser"]
}
}
Almindelig faldgrube: "non-main"¶
agents.defaults.sandbox.mode: "non-main" er baseret på session.mainKey (standard "main"),
ikke agenten id. Gruppe/kanal sessioner altid få deres egne nøgler, så de
behandles som ikke-main og vil blive sandboxed. Hvis du vil have en agent til aldrig
sandkasse, sæt agents.list[].sandbox.mode: "off".
Test¶
Efter konfiguration af multi-agent sandbox og værktøjer:
- Tjek agent-resolving:
exec
openclaw agents list --bindings
- Verificér sandbox-containere:
exec
docker ps --filter "name=openclaw-sbx-"
-
Test værktøjsbegrænsninger: - Send en besked, der kræver begrænsede værktøjer - Verificér, at agenten ikke kan bruge nægtede værktøjer
-
Overvåg logs:
exec
tail -f "${OPENCLAW_STATE_DIR:-$HOME/.openclaw}/logs/gateway.log" | grep -E "routing|sandbox|tools"
Fejlfinding¶
Agent ikke sandboxet trods mode: "all"¶
- Tjek om der er en global
agents.defaults.sandbox.mode, der tilsidesætter den - Agent-specifik konfiguration har forrang, så sæt
agents.list[].sandbox.mode: "all"
Værktøjer stadig tilgængelige trods deny-liste¶
- Tjek værktøjsfiltreringsrækkefølgen: global → agent → sandbox → subagent
- Hvert niveau kan kun yderligere begrænse, ikke give tilbage
- Verificér med logs:
[tools] filtering tools for agent:${agentId}
Container ikke isoleret pr. agent¶
- Sæt
scope: "agent"i agent-specifik sandbox-konfiguration - Standard er
"session", som opretter én container pr. session