Multi-Agent Sandbox & Tools
Configuration du Multi-Agent Sandbox & Tools
Section intitulée « Configuration du Multi-Agent Sandbox & Tools »Chaque agent dans une configuration multi-agent peut remplacer la stratégie globale de Sandbox et d’outils. Cette page couvre la configuration par agent, les règles de priorité et les exemples.
- Backends et modes de Sandbox : voir Sandboxing.
- Débogage des outils bloqués : voir Sandbox vs Tool Policy vs Elevated et
openclaw sandbox explain. - Exécution élevée : voir Elevated Mode.
L’authentification est par agent : chaque agent lit depuis son propre magasin d’auth agentDir à
~/.openclaw/agents/<agentId>/agent/auth-profiles.json.
Les identifiants ne sont pas partagés entre les agents. Ne réutilisez jamais agentDir entre les agents.
Si vous souhaitez partager des identifiants, copiez auth-profiles.json dans le agentDir de l’autre agent.
Exemples de configuration
Section intitulée « Exemples de configuration »Exemple 1 : Agent personnel + Agent familial restreint
Section intitulée « Exemple 1 : Agent personnel + Agent familial restreint »{ "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", } } } ]}Résultat :
- agent
main: S’exécute sur l’hôte, accès complet aux outils - agent
family: S’exécute dans Docker (un conteneur par agent), seul l’outilread
Exemple 2 : Agent de travail avec Sandbox partagé
Section intitulée « Exemple 2 : Agent de travail avec Sandbox partagé »{ "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"] } } ] }}Exemple 2b : Profil de codage global + agent de messagerie uniquement
Section intitulée « Exemple 2b : Profil de codage global + agent de messagerie uniquement »{ "tools": { "profile": "coding" }, "agents": { "list": [ { "id": "support", "tools": { "profile": "messaging", "allow": ["slack"] } } ] }}Résultat :
- les agents par défaut obtiennent les outils de codage
- l’agent
supportest de messagerie uniquement (+ outil Slack)
Exemple 3 : Différents modes de Sandbox par agent
Section intitulée « Exemple 3 : Différents modes de Sandbox par 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"] } } ] }}Priorité de la configuration
Section intitulée « Priorité de la configuration »Lorsque les configurations globales (agents.defaults.*) et spécifiques à l’agent (agents.list[].*) existent toutes les deux :
Configuration du Sandbox
Section intitulée « Configuration du Sandbox »Les paramètres spécifiques à l’agent remplacent les paramètres globaux :
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.*Notes :
agents.list[].sandbox.{docker,browser,prune}.*remplaceagents.defaults.sandbox.{docker,browser,prune}.*pour cet agent (ignoré lorsque la portée du Sandbox est résolue à"shared").
Restrictions d’outils
Section intitulée « Restrictions d’outils »L’ordre de filtrage est :
- Profil d’outils (
tools.profileouagents.list[].tools.profile) - Profil d’outils du fournisseur (
tools.byProvider[provider].profileouagents.list[].tools.byProvider[provider].profile) - Stratégie globale d’outils (
tools.allow/tools.deny) - Stratégie d’outil du fournisseur (
tools.byProvider[provider].allow/deny) - Stratégie d’outil spécifique à l’agent (
agents.list[].tools.allow/deny) - Stratégie de fournisseur de l’agent (
agents.list[].tools.byProvider[provider].allow/deny) - Stratégie d’outil du Sandbox (
tools.sandbox.toolsouagents.list[].tools.sandbox.tools) - Stratégie d’outil du sous-agent (
tools.subagents.tools, si applicable)
Chaque niveau peut restreindre davantage les outils, mais ne peut pas rétablir les outils refusés des niveaux précédents.
Si agents.list[].tools.sandbox.tools est défini, il remplace tools.sandbox.tools pour cet agent.
Si agents.list[].tools.profile est défini, il remplace tools.profile pour cet agent.
Les clés d’outil du fournisseur acceptent soit provider (p. ex. google-antigravity) soit provider/model (p. ex. openai/gpt-5.2).
Les stratégies d’outil prennent en charge les raccourcis group:* qui s’étendent à plusieurs outils. Consultez Groupes d’outils pour la liste complète.
Les remplacements élevés par agent (agents.list[].tools.elevated) peuvent restreindre davantage l’exécution élevée pour des agents spécifiques. Consultez Mode élevé pour plus de détails.
Migration depuis un agent unique
Section intitulée « Migration depuis un agent unique »Avant (agent unique) :
{ "agents": { "defaults": { "workspace": "~/.openclaw/workspace", "sandbox": { "mode": "non-main" } } }, "tools": { "sandbox": { "tools": { "allow": ["read", "write", "apply_patch", "exec"], "deny": [] } } }}Après (multi-agent avec différents profils) :
{ "agents": { "list": [ { "id": "main", "default": true, "workspace": "~/.openclaw/workspace", "sandbox": { "mode": "off" } } ] }}Les configurations héritées agent.* sont migrées par openclaw doctor ; préférez agents.defaults + agents.list à l’avenir.
Exemples de restrictions d’outils
Section intitulée « Exemples de restrictions d’outils »Agent en lecture seule
Section intitulée « Agent en lecture seule »{ "tools": { "allow": ["read"], "deny": ["exec", "write", "edit", "apply_patch", "process"] }}Agent d’exécution sécurisée (sans modification de fichiers)
Section intitulée « Agent d’exécution sécurisée (sans modification de fichiers) »{ "tools": { "allow": ["read", "exec", "process"], "deny": ["write", "edit", "apply_patch", "browser", "gateway"] }}Agent de communication uniquement
Section intitulée « Agent de communication uniquement »{ "tools": { "sessions": { "visibility": "tree" }, "allow": ["sessions_list", "sessions_send", "sessions_history", "session_status"], "deny": ["exec", "write", "edit", "apply_patch", "read", "browser"] }}Piège courant : “non-main”
Section intitulée « Piège courant : “non-main” »agents.defaults.sandbox.mode: "non-main" est basé sur session.mainKey (défaut "main"),
non sur l’ID de l’agent. Les sessions de groupe/canal obtiennent toujours leurs propres clés, elles sont donc traitées comme non-main et seront sandboxed. Si vous souhaitez qu’un agent ne soit jamais mis en sandbox, définissez agents.list[].sandbox.mode: "off".
Après avoir configuré le sandbox et les outils multi-agent :
-
Vérifier la résolution de l’agent :
openclaw agents list --bindings -
Vérifier les conteneurs de sandbox :
docker ps --filter "name=openclaw-sbx-" -
Tester les restrictions d’outils :
- Envoyer un message nécessitant des outils restreints
- Vérifier que l’agent ne peut pas utiliser les outils refusés
-
Surveiller les journaux :
tail -f "${OPENCLAW_STATE_DIR:-$HOME/.openclaw}/logs/gateway.log" | grep -E "routing|sandbox|tools"
Dépannage
Section intitulée « Dépannage »Agent non sandboxed malgré mode: "all"
Section intitulée « Agent non sandboxed malgré mode: "all" »- Vérifiez s’il existe une
agents.defaults.sandbox.modeglobale qui la remplace - La configuration spécifique à l’agent prévaut, définissez donc
agents.list[].sandbox.mode: "all"
Outils toujours disponibles malgré la liste de refus
Section intitulée « Outils toujours disponibles malgré la liste de refus »- Vérifiez l’ordre de filtrage des outils : global → agent → sandbox → sous-agent
- Chaque niveau peut uniquement restreindre davantage, pas rétablir
- Vérifiez avec les journaux :
[tools] filtering tools for agent:${agentId}
Conteneur non isolé par agent
Section intitulée « Conteneur non isolé par agent »- Définissez
scope: "agent"dans la configuration sandbox spécifique à l’agent - La valeur par défaut est
"session"qui crée un conteneur par session
Voir aussi
Section intitulée « Voir aussi »- Sandboxing — référence complète du sandbox (modes, portées, backends, images)
- Sandbox vs Tool Policy vs Elevated — débogage “pourquoi cela est-il bloqué ?”
- Elevated Mode
- Multi-Agent Routing
- Configuration du Sandbox
- Session Management