Agent coordination
Sandbox y herramientas multiagente
Cada agente de una configuración multiagente puede anular las políticas globales de sandbox y herramientas. Esta página abarca la configuración por agente, las reglas de precedencia y ejemplos.
Backends y modos: referencia completa del sandbox.
Diagnostique «¿por qué está bloqueado esto?».
Ejecución elevada para remitentes de confianza.
Ejemplos de configuración
Ejemplo 1: Agente personal + agente familiar restringido
{ "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" } } } ]}Resultado:
- Agente
main: se ejecuta en el host y tiene acceso completo a las herramientas. - Agente
family: se ejecuta en Docker (un contenedor por agente) y solo puede usarready enviar mensajes en la conversación actual.
Ejemplo 2: Agente de trabajo con sandbox compartido
{ "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"] } } ] }}Ejemplo 2b: Perfil global de programación + agente solo de mensajería
{ "tools": { "profile": "coding" }, "agents": { "list": [ { "id": "support", "tools": { "profile": "messaging", "allow": ["slack"] } } ] }}Resultado:
- Los agentes predeterminados obtienen herramientas de programación.
- El agente
supportsolo dispone de mensajería (+ herramienta de Slack).
Ejemplo 3: Distintos modos de sandbox por agente
{ "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"] } } ] }}Precedencia de la configuración
Cuando existen tanto configuraciones globales (agents.defaults.*) como específicas del agente (agents.list[].*):
Configuración del sandbox
La configuración específica del agente prevalece sobre la global:
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.*Restricciones de herramientas
El orden de filtrado es:
Perfil de herramientas
tools.profile o agents.list[].tools.profile.
Perfil de herramientas del proveedor
tools.byProvider[provider].profile o agents.list[].tools.byProvider[provider].profile.
Política global de herramientas
tools.allow / tools.deny.
Política de herramientas del proveedor
tools.byProvider[provider].allow/deny.
Política de herramientas específica del agente
agents.list[].tools.allow/deny.
Política de proveedor del agente
agents.list[].tools.byProvider[provider].allow/deny.
Política de herramientas del sandbox
tools.sandbox.tools o agents.list[].tools.sandbox.tools.
Política de herramientas de subagentes
tools.subagents.tools, si corresponde.
Reglas de precedencia
- Cada nivel puede restringir aún más las herramientas, pero no puede volver a conceder herramientas denegadas en niveles anteriores.
- Si se establece
agents.list[].tools.sandbox.tools, sustituye atools.sandbox.toolspara ese agente. - Si se establece
agents.list[].tools.profile, prevalece sobretools.profilepara ese agente. - Las claves de herramientas del proveedor aceptan
provider(por ejemplo,google-antigravity) oprovider/model(por ejemplo,openai/gpt-5.4).
Comportamiento de una lista de permitidos vacía
Si alguna lista de permitidos explícita de esa cadena deja la ejecución sin herramientas invocables, OpenClaw se detiene antes de enviar el prompt al modelo. Esto es intencionado: un agente configurado con una herramienta inexistente, como agents.list[].tools.allow: ["query_db"], debe fallar de forma visible hasta que se habilite el Plugin que registra query_db, en lugar de continuar como un agente exclusivamente de texto.
Las políticas de herramientas admiten abreviaturas group:* que se expanden a varias herramientas. Consulte Grupos de herramientas para ver la lista completa.
Las anulaciones del modo elevado por agente (agents.list[].tools.elevated) pueden restringir aún más la ejecución elevada para agentes específicos. Consulte Modo elevado para obtener más información.
Migración desde un único agente
Antes (un solo agente)
{ "agents": { "defaults": { "workspace": "~/.openclaw/workspace", "sandbox": { "mode": "non-main" } } }, "tools": { "sandbox": { "tools": { "allow": ["read", "write", "apply_patch", "exec"], "deny": [] } } }}Después (multiagente)
{ "agents": { "list": [ { "id": "main", "default": true, "workspace": "~/.openclaw/workspace", "sandbox": { "mode": "off" } } ] }}Ejemplos de restricciones de herramientas
Agente de solo lectura
{ "tools": { "allow": ["read"], "deny": ["exec", "write", "edit", "apply_patch", "process"] }}Ejecución de shell con las herramientas del sistema de archivos deshabilitadas
{ "tools": { "allow": ["read", "exec", "process"], "deny": ["write", "edit", "apply_patch", "browser", "gateway"] }}Solo comunicación
{ "tools": { "sessions": { "visibility": "tree" }, "allow": ["sessions_list", "sessions_send", "sessions_history", "session_status"], "deny": ["exec", "write", "edit", "apply_patch", "read", "browser"] }}En este perfil, sessions_history sigue devolviendo una vista de recuperación limitada y depurada, en lugar de un volcado de la transcripción sin procesar. La recuperación del asistente elimina las etiquetas de razonamiento, la estructura auxiliar <relevant-memories>, las cargas útiles XML de llamadas a herramientas en texto sin formato (incluidos <tool_call>...</tool_call>, <function_call>...</function_call>, <tool_calls>...</tool_calls>, <function_calls>...</function_calls> y los bloques truncados de llamadas a herramientas), la estructura auxiliar degradada de llamadas a herramientas, los tokens de control del modelo filtrados en ASCII o ancho completo y el XML de llamadas a herramientas de MiniMax con formato incorrecto antes de la ocultación y el truncamiento.
Error común: "non-main"
Pruebas
Después de configurar el sandbox y las herramientas para varios agentes:
Comprobar la resolución de agentes
openclaw agents list --bindingsVerificar los contenedores del sandbox
docker ps --filter "name=openclaw-sbx-"Probar las restricciones de herramientas
- Envíe un mensaje que requiera herramientas restringidas.
- Verifique que el agente no pueda utilizar las herramientas denegadas.
Supervisar los registros
openclaw logs --follow | grep -E "routing|sandbox|tools"Solución de problemas
El agente no se ejecuta en un sandbox a pesar de `mode: 'all'`
- Compruebe si existe un
agents.defaults.sandbox.modeglobal que lo anule. - La configuración específica del agente tiene precedencia, así que establezca
agents.list[].sandbox.mode: "all".
Herramientas aún disponibles pese a la lista de denegación
- Consulta el orden completo de filtrado: perfil → perfil del proveedor → política global → política del proveedor → política del agente → política del proveedor del agente → entorno aislado → subagente.
- Cada nivel solo puede aplicar más restricciones, no volver a conceder permisos.
- Consulta Entorno aislado frente a política de herramientas frente a modo elevado para depurar el problema paso a paso.
El contenedor no está aislado por agente
- El
scopepredeterminado es"agent"(un contenedor por id. de agente). - Establece
scope: "session"para usar un contenedor por sesión, oscope: "shared"para reutilizar un contenedor entre agentes.
Contenido relacionado
- Modo elevado
- Enrutamiento multiagente
- Configuración del entorno aislado
- Entorno aislado frente a política de herramientas frente a modo elevado — depuración de «¿por qué está bloqueado?»
- Aislamiento — referencia completa del entorno aislado (modos, ámbitos, backends e imágenes)
- Gestión de sesiones