OpenClaw puede ejecutar herramientas dentro de backends de sandbox para reducir el radio de impacto. Esto es opcional y se controla mediante configuración (Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
agents.defaults.sandbox o agents.list[].sandbox). Si el sandboxing está desactivado, las herramientas se ejecutan en el host. El Gateway permanece en el host; la ejecución de herramientas se ejecuta en un sandbox aislado cuando está habilitado.
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 poco inteligente.
Qué se ejecuta en sandbox
- Ejecución de herramientas (
exec,read,write,edit,apply_patch,process, etc.). - Navegador opcional en sandbox (
agents.defaults.sandbox.browser).
Detalles del navegador en sandbox
Detalles del navegador en sandbox
- El propio proceso del Gateway.
- Cualquier herramienta autorizada explícitamente para ejecutarse fuera del sandbox (por ejemplo,
tools.elevated).- La ejecución elevada omite el sandboxing y usa la ruta de escape configurada (
gatewayde forma predeterminada, onodecuando el destino de exec esnode). - Si el sandboxing está desactivado,
tools.elevatedno cambia la ejecución (ya está en el host). Consulta Modo elevado.
- La ejecución elevada omite el sandboxing y usa la ruta de escape configurada (
Modos
agents.defaults.sandbox.mode controla cuándo se usa el sandboxing:
- off
- non-main
- all
Sin sandboxing.
Alcance
agents.defaults.sandbox.scope controla cuántos contenedores se crean:
"agent"(valor predeterminado): un contenedor por agente."session": un contenedor por sesión."shared": un contenedor compartido por todas las sesiones en sandbox.
Backend
agents.defaults.sandbox.backend controla qué runtime proporciona el sandbox:
"docker"(valor predeterminado cuando el sandboxing está habilitado): runtime de sandbox local respaldado por Docker."ssh": runtime de sandbox remoto genérico respaldado por SSH."openshell": runtime de sandbox respaldado por OpenShell.
agents.defaults.sandbox.ssh. La configuración específica de OpenShell vive bajo plugins.entries.openshell.config.
Elegir un backend
| 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 | Bind-mount 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 |
| Bind mounts | docker.binds | N/A | N/A |
| Ideal para | Desarrollo local, aislamiento completo | Descargar trabajo en una máquina remota | Sandboxes remotos gestionados con sincronización bidireccional opcional |
Backend Docker
El sandboxing está desactivado de forma predeterminada. Si habilitas el sandboxing y no eliges un backend, OpenClaw usa el backend Docker. Ejecuta herramientas y navegadores en sandbox localmente mediante el socket del daemon de Docker (/var/run/docker.sock). El aislamiento de los contenedores de sandbox está determinado por los namespaces de Docker.
Para exponer GPU del host a sandboxes Docker, configura agents.defaults.sandbox.docker.gpus o la anulación por agente agents.list[].sandbox.docker.gpus. El valor se pasa a la marca --gpus de Docker como un argumento separado, por ejemplo "all" o "device=GPU-uuid", y requiere un runtime de host compatible, como NVIDIA Container Toolkit.
Backend SSH
Usabackend: "ssh" cuando quieras que OpenClaw ejecute en sandbox exec, herramientas de archivos y lecturas de medios en una máquina arbitraria accesible por SSH.
Cómo funciona
Cómo funciona
- OpenClaw crea una raíz remota por alcance bajo
sandbox.ssh.workspaceRoot. - En el primer uso después de crear o recrear, OpenClaw siembra ese workspace remoto desde el workspace local una vez.
- Después de eso,
exec,read,write,edit,apply_patch, las lecturas de medios del 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
Material de autenticación
identityFile,certificateFile,knownHostsFile: usan archivos locales existentes y los pasan por la configuración de OpenSSH.identityData,certificateData,knownHostsData: usan cadenas en línea o SecretRefs. OpenClaw los resuelve mediante la instantánea normal del runtime de secretos, los escribe en archivos temporales con0600y los elimina cuando termina la sesión SSH.- Si tanto
*Filecomo*Dataestán configurados para el mismo elemento,*Datagana para esa sesión SSH.
Consecuencias del modelo canónico remoto
Consecuencias del modelo canónico remoto
Este es un modelo canónico remoto. El workspace SSH remoto se convierte en el estado real del sandbox después de la siembra inicial.
- Las ediciones locales del host hechas fuera de OpenClaw después del paso de siembra no son visibles remotamente hasta que recreas el sandbox.
openclaw sandbox recreateelimina la raíz remota por alcance y vuelve a sembrar desde local en el siguiente uso.- El sandboxing de navegador no es compatible con el backend SSH.
- Los ajustes
sandbox.docker.*no se aplican al backend SSH.
Backend OpenShell
Usabackend: "openshell" cuando quieras que OpenClaw ejecute herramientas en sandbox en un entorno remoto gestionado por OpenShell. Para la guía de configuración completa, la referencia de configuración y la comparación de modos de workspace, consulta la página de OpenShell dedicada.
OpenShell reutiliza el mismo transporte SSH central y el mismo puente de sistema de archivos remoto que el backend SSH genérico, y agrega el ciclo de vida específico de OpenShell (sandbox create/get/delete, sandbox ssh-config) más el modo de workspace opcional mirror.
mirror(valor predeterminado): el workspace local permanece canónico. OpenClaw sincroniza los archivos locales hacia OpenShell antes de exec y sincroniza el workspace remoto de vuelta después de exec.remote: el workspace de OpenShell es canónico después de que se crea el sandbox. OpenClaw siembra el workspace remoto una vez desde el workspace local; luego, las herramientas de archivos y exec se ejecutan directamente contra el sandbox remoto sin sincronizar cambios de vuelta.
Detalles del transporte remoto
Detalles del transporte remoto
- OpenClaw pide a OpenShell una configuración SSH específica del sandbox mediante
openshell sandbox ssh-config <name>. - Core escribe esa configuración SSH en un archivo temporal, abre la sesión SSH y reutiliza el mismo puente de sistema de archivos remoto usado por
backend: "ssh". - En modo
mirror, solo difiere el ciclo de vida: sincroniza local a remoto antes de exec y luego sincroniza de vuelta después de exec.
Limitaciones actuales de OpenShell
Limitaciones actuales de OpenShell
- el navegador en sandbox aún no es compatible
sandbox.docker.bindsno es compatible con el backend OpenShell- los controles de runtime específicos de Docker bajo
sandbox.docker.*siguen aplicándose solo al backend Docker
Modos de workspace
OpenShell tiene dos modelos de workspace. Esta es la parte que más importa en la práctica.- mirror (local canónico)
- remote (OpenShell canonical)
Usa
plugins.entries.openshell.config.mode: "mirror" cuando quieras que el workspace local permanezca canónico.Comportamiento:- Antes de
exec, OpenClaw sincroniza el espacio de trabajo local con el sandbox de OpenShell. - Después de
exec, OpenClaw sincroniza el espacio de trabajo remoto de vuelta al espacio de trabajo local. - Las herramientas de archivos siguen operando mediante el puente del sandbox, pero el espacio de trabajo local sigue siendo la fuente de verdad entre turnos.
- edites archivos localmente fuera de OpenClaw y quieras que esos cambios aparezcan automáticamente en el sandbox
- quieras que el sandbox de OpenShell se comporte lo más parecido posible al backend de Docker
- quieras que el espacio de trabajo del host refleje las escrituras del sandbox después de cada turno de exec
mirror si piensas en el sandbox como un entorno de ejecución temporal. Elige remote si piensas en el sandbox como el espacio de trabajo real.
Ciclo de vida de OpenShell
Los sandboxes de OpenShell siguen gestionándose mediante el ciclo de vida normal del sandbox:openclaw sandbox listmuestra runtimes de OpenShell además de runtimes de Dockeropenclaw sandbox recreateelimina el runtime actual y permite que OpenClaw lo recree en el siguiente uso- la lógica de limpieza también es consciente del backend
remote, recrear es especialmente importante:
- recrear elimina el espacio de trabajo remoto canónico para ese ámbito
- el siguiente uso inicializa un espacio de trabajo remoto nuevo desde el espacio de trabajo local
mirror, recrear principalmente restablece el entorno de ejecución remoto, porque el espacio de trabajo local sigue siendo canónico de todos modos.
Acceso al espacio de trabajo
agents.defaults.sandbox.workspaceAccess controla qué puede ver el sandbox:
- none (default)
- ro
- rw
Las herramientas ven un espacio de trabajo del sandbox bajo
~/.openclaw/sandboxes.- el modo
mirrorsigue usando el espacio de trabajo local como fuente canónica entre turnos de exec - el modo
remoteusa el espacio de trabajo remoto de OpenShell como fuente canónica después de la inicialización inicial workspaceAccess: "ro"y"none"siguen restringiendo el comportamiento de escritura de la misma forma
media/inbound/*).
Nota sobre Skills: la herramienta
read está anclada a la raíz del sandbox. Con workspaceAccess: "none", OpenClaw refleja las Skills aptas en el espacio de trabajo del sandbox (.../skills) para que se puedan leer. Con "rw", las Skills del espacio de trabajo se pueden leer desde /workspace/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", los binds por agente se ignoran.
agents.defaults.sandbox.browser.binds monta directorios adicionales del host solo en el contenedor del navegador del sandbox.
- Cuando se establece (incluido
[]), reemplazaagents.defaults.sandbox.docker.bindspara el contenedor del navegador. - Cuando se omite, el contenedor del navegador recurre a
agents.defaults.sandbox.docker.binds(compatible hacia atrás).
Imágenes y configuración
Imagen Docker predeterminada:openclaw-sandbox:bookworm-slim
Checkout de código 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 ejecuta desde un checkout de código fuente. No se incluyen 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 a continuación.Build the default image
Desde un checkout de código fuente:Desde una instalación npm (no se necesita checkout de código 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 modificar cuando falta openclaw-sandbox:bookworm-slim. Las ejecuciones de sandbox dirigidas a la imagen predeterminada fallan rápido con una instrucción de compilación hasta que la compiles, porque la imagen incluida aporta python3 para los ayudantes de escritura/edición del sandbox.Optional: build the common image
Para una imagen de sandbox más funcional con herramientas comunes (por ejemplo Desde una instalación npm, compila primero la imagen predeterminada (ver arriba) y luego compila la imagen común encima usando el
curl, jq, nodejs, python3, git):Desde un checkout de código fuente:scripts/docker/sandbox/Dockerfile.common del repositorio.Luego establece agents.defaults.sandbox.docker.image en openclaw-sandbox-common:bookworm-slim.Optional: build the sandbox browser image
Desde un checkout de código fuente:Desde una instalación npm, compila usando el
scripts/docker/sandbox/Dockerfile.browser del repositorio.agents.defaults.sandbox.docker.network.
Sandbox browser Chromium defaults
Sandbox browser Chromium defaults
La imagen incluida del navegador del sandbox también aplica valores de inicio conservadores de Chromium para cargas de trabajo en contenedores. Los valores predeterminados actuales del contenedor incluyen:
--remote-debugging-address=127.0.0.1--remote-debugging-port=<derived from OPENCLAW_BROWSER_CDP_PORT>--user-data-dir=${HOME}/.chrome--no-first-run--no-default-browser-check--disable-3d-apis--disable-gpu--disable-dev-shm-usage--disable-background-networking--disable-extensions--disable-features=TranslateUI--disable-breakpad--disable-crash-reporter--disable-software-rasterizer--no-zygote--metrics-recording-only--renderer-process-limit=2--no-sandboxcuandonoSandboxestá habilitado.- Las tres marcas de endurecimiento gráfico (
--disable-3d-apis,--disable-software-rasterizer,--disable-gpu) son opcionales y son útiles cuando los contenedores carecen de soporte de GPU. EstableceOPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0si tu carga de trabajo requiere WebGL u otras funciones 3D/del navegador. --disable-extensionsestá habilitado de forma predeterminada y se puede deshabilitar conOPENCLAW_BROWSER_DISABLE_EXTENSIONS=0para flujos que dependen de extensiones.--renderer-process-limit=2se controla medianteOPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=<N>, donde0conserva el valor predeterminado de Chromium.
browser.extraArgs para anexar marcas de inicio adicionales.Network security defaults
Network security defaults
network: "host"está bloqueado.network: "container:<id>"está bloqueado de forma predeterminada (riesgo de omisión por unión de namespace).- Anulación de emergencia:
agents.defaults.sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true.
scripts/docker/setup.sh puede inicializar la configuración del sandbox. Establece OPENCLAW_SANDBOX=1 (o true/yes/on) para habilitar esa ruta. Puedes sobrescribir la ubicación del socket con OPENCLAW_DOCKER_SOCKET. Configuración completa y referencia de entorno: Docker.
setupCommand (configuración de contenedor de una sola vez)
setupCommand se ejecuta una vez después de crear el contenedor del 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
Problemas comunes
Problemas comunes
- El valor predeterminado de
docker.networkes"none"(sin egreso), por lo que las instalaciones de paquetes fallarán. docker.network: "container:<id>"requieredangerouslyAllowContainerNamespaceJoin: truey es solo para casos de emergencia.readOnlyRoot: trueimpide las escrituras; definereadOnlyRoot: falseo crea una imagen personalizada.userdebe ser root para las instalaciones de paquetes (omiteusero defineuser: "0:0").- La ejecución del entorno aislado no hereda
process.envdel host. Usaagents.defaults.sandbox.docker.env(o una imagen personalizada) para las claves de API de skill.
Política de herramientas y vías de escape
Las políticas de permitir/denegar herramientas siguen aplicándose antes que las reglas de aislamiento. Si una herramienta se deniega de forma global o por agente, el aislamiento no la recupera.tools.elevated es una vía de escape explícita que ejecuta exec fuera del entorno aislado (gateway de forma predeterminada, o node cuando el destino de ejecución es node). Las directivas /exec solo se aplican a remitentes autorizados y persisten por sesión; para deshabilitar exec de forma estricta, usa la denegación de la política de herramientas (consulta Aislamiento vs. política de herramientas vs. elevación).
Depuración:
- Usa
openclaw sandbox explainpara inspeccionar el modo de aislamiento efectivo, la política de herramientas y las claves de configuración de corrección. - Consulta Aislamiento vs. política de herramientas vs. elevación para el modelo mental de “¿por qué está bloqueado esto?”.
Sobrescrituras multiagente
Cada agente puede sobrescribir aislamiento + herramientas:agents.list[].sandbox y agents.list[].tools (más agents.list[].tools.sandbox.tools para la política de herramientas del entorno aislado). Consulta Aislamiento y herramientas multiagente para la precedencia.
Ejemplo mínimo de habilitación
Relacionado
- Aislamiento y herramientas multiagente — sobrescrituras por agente y precedencia
- OpenShell — configuración del backend de aislamiento gestionado, modos de espacio de trabajo y referencia de configuración
- Configuración de aislamiento
- Aislamiento vs. política de herramientas vs. elevación — depuración de “¿por qué está bloqueado esto?”
- Seguridad