agents.defaults.sandbox (global) o agents.list[].sandbox (por agente). El proceso Gateway siempre permanece en el host; solo la ejecución de herramientas se mueve al sandbox cuando está habilitada.
Este no es un límite de seguridad perfecto, pero limita de forma material el acceso al sistema de archivos y a los procesos cuando el modelo hace algo incorrecto.
Qué se ejecuta en sandbox
- Ejecución de herramientas:
exec,read,write,edit,apply_patch,process, etc. - El navegador opcional en sandbox (
agents.defaults.sandbox.browser).
- El propio proceso Gateway.
- Cualquier herramienta a la que se le permita explícitamente ejecutarse fuera del sandbox mediante
tools.elevated. La ejecución elevada omite el sandbox y se ejecuta en la ruta de escape configurada (gatewayde forma predeterminada, onodecuando el destino de ejecución esnode). Si el sandbox está desactivado,tools.elevatedno cambia nada, ya queexecya se ejecuta en el host. Consulta Modo elevado.
Modos, alcance y backend
Tres configuraciones independientes controlan el comportamiento del sandbox:| Configuración | Clave | Valores | Predeterminado |
|---|---|---|---|
| Modo | agents.defaults.sandbox.mode | off, non-main, all | off |
| Alcance | agents.defaults.sandbox.scope | agent, session, shared | agent |
| Backend | agents.defaults.sandbox.backend | docker, ssh, openshell | docker |
off: sin sandbox.non-main: aplica sandbox a todas las sesiones excepto la sesión principal del agente. La clave de la sesión principal siempre esagent:<agentId>:main(oglobalcuandosession.scopees"global"); no es configurable. Las sesiones de grupo/canal usan sus propias claves, por lo que siempre cuentan como no principales y se ejecutan en sandbox.all: todas las sesiones se ejecutan en un sandbox.
agent: un contenedor por agente.session: un contenedor por sesión.shared: un contenedor compartido por todas las sesiones en sandbox (las anulaciones por agente dedocker/ssh/browserse ignoran con este alcance).
agents.defaults.sandbox.ssh; la configuración específica de OpenShell vive en plugins.entries.openshell.config.
| Docker | SSH | OpenShell | |
|---|---|---|---|
| Dónde se ejecuta | Contenedor local | Cualquier host accesible por SSH | Sandbox gestionado por OpenShell |
| Configuración | scripts/sandbox-setup.sh | Clave SSH + host de destino | Plugin OpenShell habilitado |
| Modelo de workspace | Montaje enlazado o copia | Canónico remoto (sembrar una vez) | mirror o remote |
| Control de red | docker.network (predeterminado: none) | Depende del host remoto | Depende de OpenShell |
| Sandbox de navegador | Compatible | No compatible | Aún no compatible |
| Montajes enlazados | docker.binds | N/D | N/D |
| Ideal para | Desarrollo local, aislamiento completo | Descargar trabajo a una máquina remota | Sandboxes remotos gestionados con sincronización bidireccional opcional |
Backend Docker
Docker es el backend predeterminado una vez que se habilita el sandbox. Ejecuta herramientas y navegadores en sandbox localmente a través del socket del daemon Docker (/var/run/docker.sock); el aislamiento proviene de los espacios de nombres de Docker.
Valores predeterminados: network: "none" (sin salida), readOnlyRoot: true, capDrop: ["ALL"], imagen openclaw-sandbox:bookworm-slim.
Para exponer las GPU del host, establece agents.defaults.sandbox.docker.gpus (o la anulación por agente) en un valor como "all" o "device=GPU-uuid". Esto se pasa a la marca --gpus de Docker y requiere un runtime de host compatible, como NVIDIA Container Toolkit.
Navegador en sandbox
- El navegador en sandbox se inicia automáticamente (garantiza que CDP sea accesible) cuando la herramienta de navegador lo necesita. Configúralo mediante
agents.defaults.sandbox.browser.autoStart(predeterminadotrue) yautoStartTimeoutMs(predeterminado 12s). - Los contenedores del navegador en sandbox usan una red Docker dedicada (
openclaw-sandbox-browser) en lugar de la red globalbridge. Configúrala conagents.defaults.sandbox.browser.network. agents.defaults.sandbox.browser.cdpSourceRangerestringe el ingreso CDP en el borde del contenedor con una lista de permitidos CIDR (por ejemplo,172.21.0.1/32).- El acceso de observador noVNC está protegido con contraseña de forma predeterminada; OpenClaw emite una URL de token de corta duración que sirve una página de arranque local y abre noVNC con la contraseña en el fragmento de la URL (no en la cadena de consulta ni en registros de cabeceras).
agents.defaults.sandbox.browser.allowHostControl(predeterminadofalse) permite que las sesiones en sandbox apunten explícitamente al navegador del host.- Las listas de permitidos opcionales controlan
target: "custom":allowedControlUrls,allowedControlHosts,allowedControlPorts.
Backend SSH
Usabackend: "ssh" para ejecutar en sandbox exec, herramientas de archivos y lecturas de medios en una máquina arbitraria accesible por SSH.
command: "ssh", workspaceRoot: "/tmp/openclaw-sandboxes", strictHostKeyChecking: true, updateHostKeys: true.
- Ciclo de vida: OpenClaw crea una raíz remota por alcance bajo
sandbox.ssh.workspaceRoot. En el primer uso después de crear o recrear, siembra ese workspace remoto desde el workspace local una vez. Después de eso,exec,read,write,edit,apply_patch, las lecturas de medios de prompt y la preparación de medios entrantes se ejecutan directamente contra el workspace remoto por SSH. OpenClaw no sincroniza automáticamente los cambios remotos de vuelta al workspace local. - Material de autenticación:
identityFile/certificateFile/knownHostsFilehacen referencia a archivos locales existentes.identityData/certificateData/knownHostsDataaceptan cadenas en línea o SecretRefs, resueltas mediante la instantánea normal del runtime de secretos, escritas en archivos temporales con modo0600y eliminadas cuando termina la sesión SSH. Si se establecen una variante*Filey una variante*Datapara el mismo elemento,*Datagana para esa sesión. - Consecuencias de canonicidad remota: el workspace SSH remoto se convierte en el estado real del sandbox después de la siembra inicial. Las ediciones locales del host realizadas fuera de OpenClaw después del paso de siembra no son visibles remotamente hasta que recrees el sandbox.
openclaw sandbox recreateelimina la raíz remota por alcance y vuelve a sembrar desde local en el siguiente uso. El sandbox de navegador no es compatible con este backend, y la configuraciónsandbox.docker.*no se aplica a él.
Backend OpenShell
Usabackend: "openshell" para ejecutar herramientas en sandbox en un entorno remoto gestionado por OpenShell. OpenShell reutiliza el mismo transporte SSH y el mismo puente de sistema de archivos remoto que el backend SSH genérico, y añade el ciclo de vida de OpenShell (sandbox create/get/delete/ssh-config) más un modo opcional de sincronización de workspace mirror.
mode: "mirror" (predeterminado) mantiene el workspace local como canónico: OpenClaw sincroniza lo local hacia el sandbox antes de exec y sincroniza de vuelta después. mode: "remote" siembra el workspace remoto una vez desde local y luego ejecuta exec/read/write/edit/apply_patch directamente contra el workspace remoto sin sincronizar de vuelta; las ediciones locales después de la siembra son invisibles hasta que ejecutes openclaw sandbox recreate. Con scope: "agent" o scope: "shared", ese workspace remoto se comparte con el mismo alcance. Limitaciones actuales: el navegador en sandbox aún no es compatible, y sandbox.docker.binds no se aplica a este backend.
openclaw sandbox list/recreate/prune all tratan los runtimes de OpenShell igual que los runtimes de Docker; la lógica de depuración tiene en cuenta el backend.
Para ver todos los requisitos previos, la referencia de configuración, la comparación de modos de workspace y los detalles del ciclo de vida, consulta OpenShell.
Acceso al workspace
agents.defaults.sandbox.workspaceAccess controla qué puede ver el sandbox:
| Valor | Comportamiento |
|---|---|
none (predeterminado) | Las herramientas ven un espacio de trabajo de sandbox aislado bajo ~/.openclaw/sandboxes. |
ro | Monta el espacio de trabajo del agente como solo lectura en /agent (deshabilita write/edit/apply_patch). |
rw | Monta el espacio de trabajo del agente con lectura/escritura en /workspace. |
mirror sigue usando el espacio de trabajo local como fuente canónica entre turnos de exec, el modo remote usa el espacio de trabajo remoto de OpenShell como canónico después de la semilla inicial, y workspaceAccess: "ro"/"none" sigue restringiendo el comportamiento de escritura de la misma manera.
Los medios entrantes se copian en el espacio de trabajo de sandbox activo (media/inbound/*).
Skills: la herramienta
read está arraigada en la raíz del sandbox. Con workspaceAccess: "none", OpenClaw refleja las Skills elegibles en el espacio de trabajo del sandbox (.../skills) para que puedan leerse. Con "rw", las Skills del espacio de trabajo se pueden leer desde /workspace/skills, y las Skills elegibles administradas, incluidas o de plugins se materializan en la ruta generada de solo lectura /workspace/.openclaw/sandbox-skills/skills.Montajes bind personalizados
agents.defaults.sandbox.docker.binds monta directorios adicionales del host en el contenedor. Formato: host:container:mode (por ejemplo, "/home/user/source:/source:rw").
Los binds globales y por agente se fusionan (no se reemplazan). Bajo scope: "shared", se ignoran los binds por agente.
agents.defaults.sandbox.browser.binds monta directorios adicionales del host solo en el contenedor del navegador de sandbox. Cuando se establece (incluido []), reemplaza docker.binds para el contenedor del navegador; cuando se omite, el contenedor del navegador recurre a docker.binds.
Imágenes y configuración
Imagen de Docker predeterminada:openclaw-sandbox:bookworm-slim
Checkout de fuente frente a instalación npmLos scripts auxiliares
scripts/sandbox-setup.sh, scripts/sandbox-common-setup.sh y scripts/sandbox-browser-setup.sh solo están disponibles cuando se ejecutan desde un checkout de fuente. No están incluidos en el paquete npm.Si instalaste OpenClaw mediante npm install -g openclaw, usa en su lugar los comandos docker build en línea que se muestran abajo.Construye la imagen predeterminada
Desde un checkout de fuente:Desde una instalación npm (no se necesita checkout de fuente):La imagen predeterminada no incluye Node. Si una Skill necesita Node (u otros runtimes), incorpora una imagen personalizada o instala mediante
sandbox.docker.setupCommand (requiere salida de red + raíz escribible + usuario root).OpenClaw no sustituye silenciosamente por debian:bookworm-slim sin formato cuando falta openclaw-sandbox:bookworm-slim. Las ejecuciones de sandbox que apuntan a la imagen predeterminada fallan rápido con una instrucción de compilación hasta que la construyas, porque la imagen incluida contiene python3 para los auxiliares de escritura/edición del sandbox.Opcional: construye la imagen común
Para una imagen de sandbox más funcional con herramientas comunes (por ejemplo, Desde una instalación npm, construye primero la imagen predeterminada (ver arriba) y luego construye la imagen común encima usando
curl, jq, Node 24, pnpm, python3 y git):Desde un checkout de fuente:scripts/docker/sandbox/Dockerfile.common del repositorio.Luego establece agents.defaults.sandbox.docker.image en openclaw-sandbox-common:bookworm-slim.Opcional: construye la imagen del navegador de sandbox
Desde un checkout de fuente:Desde una instalación npm, construye usando
scripts/docker/sandbox/Dockerfile.browser del repositorio.agents.defaults.sandbox.docker.network.
Valores predeterminados de seguridad de red
Valores predeterminados de seguridad de red
network: "host"está bloqueado.network: "container:<id>"está bloqueado de forma predeterminada (riesgo de omitir mediante unión de namespace).- Anulación de emergencia:
agents.defaults.sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true.
scripts/docker/setup.sh puede inicializar la configuración de sandbox. Establece OPENCLAW_SANDBOX=1 (o true/yes/on) para habilitar esa ruta. Anula la ubicación del socket con OPENCLAW_DOCKER_SOCKET. Referencia completa de configuración y entorno: Docker.
setupCommand (configuración única del contenedor)
setupCommand se ejecuta una vez después de crear el contenedor de sandbox (no en cada ejecución). Se ejecuta dentro del contenedor mediante sh -lc.
Rutas:
- Global:
agents.defaults.sandbox.docker.setupCommand - Por agente:
agents.list[].sandbox.docker.setupCommand
Errores comunes
Errores comunes
- El
docker.networkpredeterminado es"none"(sin salida), por lo que las instalaciones de paquetes fallarán. docker.network: "container:<id>"requieredangerouslyAllowContainerNamespaceJoin: truey es solo para emergencias.readOnlyRoot: trueimpide escrituras; establecereadOnlyRoot: falseo incorpora una imagen personalizada.userdebe ser root para instalaciones de paquetes (omiteusero estableceuser: "0:0").- Sandbox exec no hereda
process.envdel host. Usaagents.defaults.sandbox.docker.env(o una imagen personalizada) para claves de API de Skills. - Los valores en
agents.defaults.sandbox.docker.envse pasan como variables de entorno explícitas del contenedor Docker. Cualquiera con acceso al daemon de Docker puede inspeccionarlas con comandos de metadatos de Docker comodocker inspect. Usa una imagen personalizada, un archivo de secreto montado u otra ruta de entrega de secretos si esa exposición de metadatos no es aceptable.
Política de herramientas y vías de escape
Las políticas de permitir/denegar herramientas siguen aplicándose antes que las reglas de sandbox. Si una herramienta está denegada globalmente o por agente, el sandbox no la recupera.tools.elevated es una vía de escape explícita que ejecuta exec fuera del sandbox (gateway de forma predeterminada, o node cuando el destino de exec es node). Las directivas /exec solo se aplican para remitentes autorizados y persisten por sesión; para deshabilitar exec de forma estricta, usa la denegación en la política de herramientas (consulta Sandbox vs Tool Policy vs Elevated).
Depuración:
openclaw sandbox listmuestra contenedores de sandbox, estado, coincidencia de imagen, antigüedad, tiempo inactivo y sesión/agente asociado.openclaw sandbox explain [--session <key>] [--agent <id>]inspecciona el modo de sandbox efectivo, el espacio de trabajo del host, el workdir del runtime, montajes de Docker, política de herramientas y claves de configuración para corrección. Su campoworkspaceRootsigue siendo la raíz de sandbox configurada;effectiveHostWorkspaceRootmuestra dónde vive realmente el espacio de trabajo activo.openclaw sandbox recreate [--all | --session <key> | --agent <id>] [--browser] [--force]elimina contenedores/entornos para que se vuelvan a crear con la configuración actual en el siguiente uso.- Consulta Sandbox vs Tool Policy vs Elevated para el modelo mental de “¿por qué está bloqueado esto?”.
Anulaciones multiagente
Cada agente puede anular sandbox + herramientas:agents.list[].sandbox y agents.list[].tools (más agents.list[].tools.sandbox.tools para la política de herramientas de sandbox). Consulta Multi-Agent Sandbox & Tools para la precedencia.
Ejemplo mínimo de habilitación
Relacionado
- Sandbox y herramientas multiagente — anulaciones por agente y precedencia
- OpenShell — configuración del backend de sandbox gestionado, modos de espacio de trabajo y referencia de configuración
- Configuración de sandbox
- Sandbox frente a política de herramientas frente a elevado — depuración de “¿por qué está bloqueado esto?”
- Seguridad