Saltar al contenido principal
Cada agente en una configuración multiagente puede sobrescribir la política global de sandbox y herramientas. Esta página cubre la configuración por agente, las reglas de precedencia y ejemplos.

Sandboxing

Backends y modos: referencia completa de sandbox.

Sandbox frente a política de herramientas frente a elevado

Depurar “¿por qué está bloqueado esto?”

Modo elevado

Exec elevado para remitentes de confianza.
La autenticación tiene ámbito por agente: cada agente tiene su propio almacén de autenticación agentDir en ~/.openclaw/agents/<agentId>/agent/openclaw-agent.sqlite. Nunca reutilices agentDir entre agentes. Los agentes pueden leer los perfiles de autenticación del agente predeterminado/principal cuando no tienen un perfil local, pero los tokens de actualización de OAuth no se clonan en los almacenes de agentes secundarios. Si copias credenciales manualmente, copia solo perfiles estáticos portátiles api_key o token.

Ejemplos de configuración

{
  "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, con acceso completo a herramientas.
  • Agente family: se ejecuta en Docker (un contenedor por agente), solo read y envíos de mensajes de la conversación actual.
{
  "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"] }
      }
    ]
  }
}
Resultado:
  • Los agentes predeterminados obtienen herramientas de programación.
  • El agente support es solo de mensajería (+ herramienta de 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"]
        }
      }
    ]
  }
}

Precedencia de configuración

Cuando existen configuraciones globales (agents.defaults.*) y específicas de agente (agents.list[].*):

Configuración de sandbox

La configuración específica del agente sobrescribe la global:
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}.* sobrescribe agents.defaults.sandbox.{docker,browser,prune}.* para ese agente (se ignora cuando el ámbito de sandbox se resuelve como "shared").

Restricciones de herramientas

El orden de filtrado es:
1

Perfil de herramientas

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

Perfil de herramientas del proveedor

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

Política global de herramientas

tools.allow / tools.deny.
4

Política de herramientas del proveedor

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

Política de herramientas específica del agente

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

Política de proveedor del agente

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

Política de herramientas de sandbox

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

Política de herramientas de subagente

tools.subagents.tools, si corresponde.
  • Cada nivel puede restringir más las herramientas, pero no puede volver a conceder herramientas denegadas en niveles anteriores.
  • Si agents.list[].tools.sandbox.tools está definido, reemplaza tools.sandbox.tools para ese agente.
  • Si agents.list[].tools.profile está definido, sobrescribe tools.profile para ese agente.
  • Las claves de herramientas de proveedor aceptan provider (por ejemplo, google-antigravity) o provider/model (por ejemplo, openai/gpt-5.4).
Si cualquier lista de permitidos explícita en 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 faltante como agents.list[].tools.allow: ["query_db"] debe fallar de forma visible hasta que se habilite el plugin que registra query_db, no continuar como agente solo de texto.
Las políticas de herramientas admiten abreviaturas group:* que se expanden a varias herramientas. Consulta Grupos de herramientas para ver la lista completa. Las sobrescrituras elevadas por agente (agents.list[].tools.elevated) pueden restringir aún más el exec elevado para agentes concretos. Consulta Modo elevado para más detalles.

Migración desde agente único

{
  "agents": {
    "defaults": {
      "workspace": "~/.openclaw/workspace",
      "sandbox": {
        "mode": "non-main"
      }
    }
  },
  "tools": {
    "sandbox": {
      "tools": {
        "allow": ["read", "write", "apply_patch", "exec"],
        "deny": []
      }
    }
  }
}
Las claves de configuración heredadas agents.defaults.*/agents.list[].* (como sandbox.perSession, agentRuntime, embeddedPi) son migradas por openclaw doctor; prefiere agents.defaults + agents.list de ahora en adelante.

Ejemplos de restricción de herramientas

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

Error común: “non-main”

agents.defaults.sandbox.mode: "non-main" comprueba la clave de sesión frente a la clave de sesión principal (siempre "main"; session.mainKey no es configurable por el usuario, y OpenClaw advierte e ignora cualquier otro valor), no el id del agente. Las sesiones de grupo/canal siempre obtienen sus propias claves, por lo que se tratan como no principales y se ejecutarán en sandbox. Si quieres que un agente nunca use sandbox, establece agents.list[].sandbox.mode: "off".

Pruebas

Después de configurar el sandbox y las herramientas multiagente:
1

Comprobar resolución de agentes

openclaw agents list --bindings
2

Verificar contenedores de sandbox

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

Probar restricciones de herramientas

  • Envía un mensaje que requiera herramientas restringidas.
  • Verifica que el agente no pueda usar herramientas denegadas.
4

Monitorizar registros

openclaw logs --follow | grep -E "routing|sandbox|tools"

Solución de problemas

  • Comprueba si hay un agents.defaults.sandbox.mode global que lo sobrescriba.
  • La configuración específica del agente tiene precedencia, así que establece agents.list[].sandbox.mode: "all".
  • El scope predeterminado es "agent" (un contenedor por id de agente).
  • Define scope: "session" para un contenedor por sesión, o scope: "shared" para reutilizar un contenedor entre agentes.

Relacionado