Configuración de Sandbox y Herramientas Multi-Agente
Descripción general
Cada agente en una configuración multi-agente ahora puede tener su propio:- Configuración de sandbox (
agents.list[].sandboxanulaagents.defaults.sandbox) - Restricciones de herramientas (
tools.allow/tools.deny, además deagents.list[].tools)
- Asistente personal con acceso completo
- Agentes familiares/de trabajo con herramientas restringidas
- Agentes de cara al público en sandboxes
setupCommand pertenece bajo sandbox.docker (global o por agente) y se ejecuta una vez
cuando se crea el contenedor.
La autenticación es por agente: cada agente lee desde su propio almacén de autenticación agentDir en:
agentDir entre agentes.
Si desea compartir credenciales, copie auth-profiles.json en el agentDir del otro agente.
Para conocer cómo se comporta el sandbox en tiempo de ejecución, consulte Sandboxing.
Para depurar “¿por qué está bloqueado?”, consulte Sandbox vs Tool Policy vs Elevated y openclaw sandbox explain.
Ejemplos de configuración
Ejemplo 1: Agente personal + agente familiar restringido
- Agente
main: Se ejecuta en el host, acceso completo a herramientas - Agente
family: Se ejecuta en Docker (un contenedor por agente), solo la herramientaread
Ejemplo 2: Agente de trabajo con sandbox compartido
Ejemplo 2b: Perfil global de programación + agente solo de mensajería
- Los agentes predeterminados obtienen herramientas de programación
- El agente
supportes solo de mensajería (+ herramienta de Slack)
Ejemplo 3: Diferentes modos de sandbox por agente
Precedencia de configuración
Cuando existen configuraciones tanto globales (agents.defaults.*) como específicas del agente (agents.list[].*):
Configuración de Sandbox
La configuración específica del agente anula la global:agents.list[].sandbox.{docker,browser,prune}.*anulaagents.defaults.sandbox.{docker,browser,prune}.*para ese agente (se ignora cuando el alcance del sandbox se resuelve en"shared").
Restricciones de herramientas
El orden de filtrado es:- Perfil de herramientas (
tools.profileoagents.list[].tools.profile) - Perfil de herramientas del proveedor (
tools.byProvider[provider].profileoagents.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 del proveedor del agente (
agents.list[].tools.byProvider[provider].allow/deny) - Política de herramientas del sandbox (
tools.sandbox.toolsoagents.list[].tools.sandbox.tools) - Política de herramientas del subagente (
tools.subagents.tools, si aplica)
agents.list[].tools.sandbox.tools, reemplaza tools.sandbox.tools para ese agente.
Si se establece agents.list[].tools.profile, anula tools.profile para ese agente.
Las claves de herramientas del proveedor aceptan provider (p. ej., google-antigravity) o provider/model (p. ej., openai/gpt-5.2).
Grupos de herramientas (atajos)
Las políticas de herramientas (global, agente, sandbox) admiten entradasgroup:* que se expanden a múltiples herramientas concretas:
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: todas las herramientas integradas de OpenClaw (excluye plugins de proveedores)
Modo Elevated
tools.elevated es la línea base global (lista de permitidos basada en remitentes). agents.list[].tools.elevated puede restringir aún más Elevated para agentes específicos (ambos deben permitir).
Patrones de mitigación:
- Deniegue
execpara agentes no confiables (agents.list[].tools.deny: ["exec"]) - Evite permitir remitentes que enruten a agentes restringidos
- Desactive Elevated globalmente (
tools.elevated.enabled: false) si solo desea ejecución en sandbox - Desactive Elevated por agente (
agents.list[].tools.elevated.enabled: false) para perfiles sensibles
Migración desde un agente único
Antes (agente único):agent.* se migran mediante openclaw doctor; en adelante, prefiera agents.defaults + agents.list.
Ejemplos de restricción de herramientas
Agente de solo lectura
Agente de ejecución segura (sin modificaciones de archivos)
Agente solo de comunicación
Error común: “non-main”
agents.defaults.sandbox.mode: "non-main" se basa en session.mainKey (predeterminado "main"),
no en el id del agente. Las sesiones de grupo/canal siempre obtienen sus propias claves, por lo que
se tratan como non-main y se ejecutarán en sandbox. Si desea que un agente nunca use sandbox, configure agents.list[].sandbox.mode: "off".
Pruebas
Después de configurar sandbox y herramientas multi-agente:-
Verifique la resolución del agente:
-
Verifique los contenedores de sandbox:
-
Pruebe las restricciones de herramientas:
- Envíe un mensaje que requiera herramientas restringidas
- Verifique que el agente no pueda usar herramientas denegadas
-
Supervise los registros:
Solución de problemas
El agente no está en sandbox a pesar de mode: "all"
- Verifique si existe un
agents.defaults.sandbox.modeglobal que lo anule - La configuración específica del agente tiene precedencia, así que configure
agents.list[].sandbox.mode: "all"
Las herramientas siguen disponibles a pesar de la lista de denegación
- Verifique el orden de filtrado de herramientas: global → agente → sandbox → subagente
- Cada nivel solo puede restringir más, no volver a conceder
- Verifique con los registros:
[tools] filtering tools for agent:${agentId}
El contenedor no está aislado por agente
- Configure
scope: "agent"en la configuración de sandbox específica del agente - El valor predeterminado es
"session", que crea un contenedor por sesión