OpenClawSkills
GitHub
Conceptos Core • 5 min de lectura

Sandbox y Herramientas Multi-Agente

Sandbox por agente + restricciones de herramientas, precedencia y ejemplos

Cada agente en una configuración multi-agente ahora puede tener su propio:

- ''Configuración de sandbox'' (''agents.list[].sandbox'' anula ''agents.defaults.sandbox'')

- ''Restricciones de herramientas'' (''tools.allow'' / ''tools.deny'', más ''agents.list[].tools'')

Esto te permite ejecutar múltiples agentes con diferentes perfiles de seguridad:

- Asistente personal con acceso completo

- Agentes familiares/laborales con herramientas restringidas

- Agentes públicos en sandboxes

Terminal
~/.openclaw/agents/<agentId>/agent/auth-profiles.json

''setupCommand'' pertenece bajo ''sandbox.docker'' (global o por agente) y se ejecuta una vez cuando se crea el contenedor.

Auth es por agente: cada agente lee de su propio almacén de auth ''agentDir'' en:

Las credenciales ''no'' se comparten entre agentes. Nunca reutilices ''agentDir'' entre agentes. Si quieres compartir credenciales, copia ''auth-profiles.json'' en el ''agentDir'' del otro agente.

Tutorial.step

Ejemplos de Configuración

Ejemplo 1: Agente Personal + Familiar Restringido

Json
{
  "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": "[email protected]"
        }
      }
    }
  ]
}

Resultado:

- Agente ''main'': Ejecuta en host, acceso completo a herramientas

- Agente ''family'': Ejecuta en Docker (un contenedor por agente), solo herramienta ''read''

Ejemplo 2: Agente de Trabajo con Sandbox Compartido

Json
{
  "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 de coding global + agente solo-mensajería

Json
{
  "tools": { "profile": "coding" },
  "agents": {
    "list": [
      {
        "id": "support",
        "tools": { "profile": "messaging", "allow": ["slack"] }
      }
    ]
  }
}

Resultado:

- agentes predeterminados obtienen herramientas de coding

- agente ''support'' es solo mensajería (+ herramienta Slack)

Json
{
  "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"]
        }
      }
    ]
  }
}
Tutorial.step

Precedencia de Configuración

Cuando existen configs tanto globales (''agents.defaults.*'') como específicas de agente (''agents.list[].*''):

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p2

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p3

Terminal
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.*

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p4

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p5

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p6

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p7

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p8

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p9

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p10

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p11

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p12

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p13

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p14

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p15

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p16

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p17

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p18

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p19

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p20

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p21

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p22

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p23

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p24

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p25

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p26

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p27

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p28

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p29

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p30

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p31

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p32

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p33

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p34

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p35

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p36

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p37

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p38

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p39

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p40

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p41

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p42

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p43

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p44

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p45

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p46

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p47

ReferenceConceptsMultiAgentSandboxToolsPage.step02.p48

Tutorial.step

Ejemplos de Restricción de Herramientas

Agente Solo-Lectura

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

Agente de Ejecución Segura (sin modificaciones de archivo)

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

Agente Solo-Comunicación

Json
{
  "tools": {
    "allow": ["sessions_list", "sessions_send", "sessions_history", "session_status"],
    "deny": ["exec", "write", "edit", "apply_patch", "read", "browser"]
  }
}
Tutorial.step

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, así que son tratadas como non-main y serán sandboxeadas. Si quieres que un agente nunca sea sandboxeado, establece ''agents.list[].sandbox.mode: "off"''.

Tutorial.step

Pruebas

Después de configurar sandbox y herramientas multi-agente:

Bash
openclaw agents list --bindings

1. Verificar resolución de agente:

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

2. Verificar contenedores sandbox:

3. Probar restricciones de herramientas:

- Envía un mensaje que requiera herramientas restringidas

- Verifica que el agente no pueda usar herramientas denegadas

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

Temas relacionados