Passer au contenu principal

Documentation Index

Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt

Use this file to discover all available pages before exploring further.

Chaque agent dans une configuration multi-agent peut remplacer la politique globale de sandbox et d’outils. Cette page couvre la configuration par agent, les règles de précédence et des exemples.

Isolation en sandbox

Backends et modes — référence complète du sandbox.

Sandbox vs politique d’outils vs mode élevé

Déboguer « pourquoi est-ce bloqué ? »

Mode élevé

Exécution élevée pour les expéditeurs approuvés.
L’authentification est limitée à l’agent : chaque agent possède son propre magasin d’authentification agentDir à ~/.openclaw/agents/<agentId>/agent/auth-profiles.json. Ne réutilisez jamais agentDir entre agents. Les agents peuvent consulter les profils d’authentification de l’agent par défaut/principal lorsqu’ils n’ont pas de profil local, mais les jetons d’actualisation OAuth ne sont pas clonés dans les magasins des agents secondaires. Si vous copiez des identifiants manuellement, copiez uniquement les profils statiques portables api_key ou token.

Exemples de configuration

{
  "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"
        }
      }
    }
  ]
}
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), uniquement read et les envois de messages dans la conversation actuelle.
{
  "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"]
        }
      }
    ]
  }
}
{
  "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 support est limité à la messagerie (+ outil Slack).
{
  "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"]
        }
      }
    ]
  }
}

Précédence de la configuration

Lorsque des configurations globales (agents.defaults.*) et propres à l’agent (agents.list[].*) existent toutes deux :

Configuration du sandbox

Les paramètres propres à l’agent remplacent les paramètres globaux :
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.*
agents.list[].sandbox.{docker,browser,prune}.* remplace agents.defaults.sandbox.{docker,browser,prune}.* pour cet agent (ignoré lorsque la portée du sandbox se résout en "shared").

Restrictions d’outils

L’ordre de filtrage est le suivant :
1

Profil d’outils

tools.profile ou agents.list[].tools.profile.
2

Profil d’outils du fournisseur

tools.byProvider[provider].profile ou agents.list[].tools.byProvider[provider].profile.
3

Politique globale d’outils

tools.allow / tools.deny.
4

Politique d’outils du fournisseur

tools.byProvider[provider].allow/deny.
5

Politique d’outils propre à l’agent

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

Politique de fournisseur de l’agent

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

Politique d’outils du sandbox

tools.sandbox.tools ou agents.list[].tools.sandbox.tools.
8

Politique d’outils des sous-agents

tools.subagents.tools, le cas échéant.
  • Chaque niveau peut restreindre davantage les outils, mais ne peut pas réautoriser des outils refusés par 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’outils de fournisseur acceptent soit provider (par exemple google-antigravity), soit provider/model (par exemple openai/gpt-5.4).
Si une liste d’autorisation explicite dans cette chaîne laisse l’exécution sans aucun outil appelable, OpenClaw s’arrête avant de soumettre l’invite au modèle. C’est intentionnel : un agent configuré avec un outil manquant comme agents.list[].tools.allow: ["query_db"] doit échouer clairement jusqu’à ce que le Plugin qui enregistre query_db soit activé, au lieu de continuer comme agent texte uniquement.
Les politiques d’outils 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

{
  "agents": {
    "defaults": {
      "workspace": "~/.openclaw/workspace",
      "sandbox": {
        "mode": "non-main"
      }
    }
  },
  "tools": {
    "sandbox": {
      "tools": {
        "allow": ["read", "write", "apply_patch", "exec"],
        "deny": []
      }
    }
  }
}
Les anciennes configurations agent.* sont migrées par openclaw doctor ; privilégiez désormais agents.defaults + agents.list.

Exemples de restriction des outils

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

Piège courant : “non-main”

agents.defaults.sandbox.mode: "non-main" est basé sur session.mainKey (par défaut "main"), pas sur l’identifiant de l’agent. Les sessions de groupe/canal reçoivent toujours leurs propres clés ; elles sont donc traitées comme non principales et placées dans un sandbox. Si vous voulez qu’un agent ne soit jamais placé dans un sandbox, définissez agents.list[].sandbox.mode: "off".

Tests

Après avoir configuré le sandbox et les outils multi-agents :
1

Check agent resolution

openclaw agents list --bindings
2

Verify sandbox containers

docker ps --filter "name=openclaw-sbx-"
3

Test tool restrictions

  • Envoyez un message nécessitant des outils restreints.
  • Vérifiez que l’agent ne peut pas utiliser les outils refusés.
4

Monitor logs

tail -f "${OPENCLAW_STATE_DIR:-$HOME/.openclaw}/logs/gateway.log" | grep -E "routing|sandbox|tools"

Dépannage

  • Vérifiez s’il existe un agents.defaults.sandbox.mode global qui le remplace.
  • La configuration propre à l’agent est prioritaire ; définissez donc agents.list[].sandbox.mode: "all".
  • Vérifiez l’ordre de filtrage des outils : global → agent → sandbox → sous-agent.
  • Chaque niveau ne peut que restreindre davantage, pas réaccorder.
  • Vérifiez avec les logs : [tools] filtering tools for agent:${agentId}.
  • Définissez scope: "agent" dans la configuration de sandbox propre à l’agent.
  • La valeur par défaut est "session", ce qui crée un conteneur par session.

Articles connexes