Saltar al contenido principal
OpenShell es un backend de sandbox administrado: en lugar de ejecutar contenedores Docker localmente, OpenClaw delega el ciclo de vida del sandbox a la CLI openshell, que aprovisiona entornos remotos y ejecuta comandos por SSH. El Plugin reutiliza el mismo transporte SSH y puente de sistema de archivos remoto que el backend SSH genérico, y agrega el ciclo de vida de OpenShell (sandbox create/get/delete/ssh-config) más un modo opcional de sincronización de espacio de trabajo mirror.

Requisitos previos

  • Plugin de OpenShell instalado (openclaw plugins install @openclaw/openshell-sandbox)
  • CLI openshell en PATH (o una ruta personalizada mediante plugins.entries.openshell.config.command)
  • Una cuenta de OpenShell con acceso a sandbox
  • Gateway de OpenClaw ejecutándose en el host

Inicio rápido

openclaw plugins install @openclaw/openshell-sandbox
{
  agents: {
    defaults: {
      sandbox: {
        mode: "all",
        backend: "openshell",
        scope: "session",
        workspaceAccess: "rw",
      },
    },
  },
  plugins: {
    entries: {
      openshell: {
        enabled: true,
        config: {
          from: "openclaw",
          mode: "remote",
        },
      },
    },
  },
}
Reinicia el Gateway. En el siguiente turno del agente, OpenClaw crea un sandbox de OpenShell y enruta la ejecución de herramientas a través de él. Verifícalo con:
openclaw sandbox list
openclaw sandbox explain

Modos de espacio de trabajo

Esta es la decisión más importante de OpenShell.

mirror (predeterminado)

plugins.entries.openshell.config.mode: "mirror" mantiene el espacio de trabajo local como canónico:
  • Antes de exec, OpenClaw sincroniza el espacio de trabajo local con el sandbox.
  • Después de exec, OpenClaw sincroniza el espacio de trabajo remoto de vuelta al local.
  • Las herramientas de archivos pasan por el puente del sandbox, pero lo local sigue siendo la fuente de verdad entre turnos.
Ideal para flujos de trabajo de desarrollo: las ediciones locales fuera de OpenClaw aparecen en el siguiente exec, y el sandbox se comporta de forma similar al backend de Docker. Compensación: costo de carga y descarga en cada turno de exec.

remote

mode: "remote" hace que el espacio de trabajo de OpenShell sea canónico:
  • En la primera creación del sandbox, OpenClaw inicializa una vez el espacio de trabajo remoto desde el local.
  • Después de eso, exec, read, write, edit y apply_patch operan directamente sobre el espacio de trabajo remoto. OpenClaw no sincroniza los cambios remotos de vuelta al local.
  • Las lecturas de medios durante el prompt siguen funcionando (las herramientas de archivo/medios leen a través del puente del sandbox).
Ideal para agentes de larga duración y CI: menor sobrecarga por turno, y las ediciones locales del host no pueden sobrescribir silenciosamente el estado remoto.
Editar archivos en el host fuera de OpenClaw después de la inicialización inicial es invisible para el sandbox remoto. Ejecuta openclaw sandbox recreate para volver a inicializar.

Elegir un modo

mirrorremote
Espacio de trabajo canónicoHost localOpenShell remoto
Dirección de sincronizaciónBidireccional (cada exec)Inicialización única
Sobrecarga por turnoMayor (carga + descarga)Menor (operaciones remotas directas)
¿Ediciones locales visibles?Sí, en el siguiente execNo, hasta recrear
Ideal paraFlujos de trabajo de desarrolloAgentes de larga duración, CI

Referencia de configuración

Toda la configuración de OpenShell vive bajo plugins.entries.openshell.config:
ClaveTipoPredeterminadoDescripción
mode"mirror" o "remote""mirror"Modo de sincronización del espacio de trabajo
commandstring"openshell"Ruta o nombre de la CLI openshell
fromstring"openclaw"Origen del sandbox para la primera creación
gatewaystringsin definirNombre del Gateway de OpenShell (nivel superior --gateway)
gatewayEndpointstringsin definirEndpoint del Gateway de OpenShell (nivel superior --gateway-endpoint)
policystringsin definirID de política de OpenShell para la creación del sandbox
providersstring[][]Nombres de proveedores adjuntos en la creación del sandbox (sin duplicados, una marca --provider por entrada)
gpubooleanfalseSolicitar recursos de GPU (--gpu)
autoProvidersbooleantruePasar --auto-providers (o --no-auto-providers cuando sea false) durante la creación
remoteWorkspaceDirstring"/sandbox"Espacio de trabajo escribible principal dentro del sandbox
remoteAgentWorkspaceDirstring"/agent"Ruta de montaje del espacio de trabajo del agente (solo lectura cuando el acceso al espacio de trabajo no es rw)
timeoutSecondsnumber120Tiempo de espera para operaciones de la CLI openshell
remoteWorkspaceDir y remoteAgentWorkspaceDir deben ser rutas absolutas y permanecer bajo las raíces administradas /sandbox o /agent; se rechazan otras rutas absolutas. La configuración de nivel de sandbox (mode, scope, workspaceAccess) vive bajo agents.defaults.sandbox como en cualquier backend. Consulta Sandboxing para ver la matriz completa.

Ejemplos

Configuración remota mínima

{
  agents: {
    defaults: {
      sandbox: {
        mode: "all",
        backend: "openshell",
      },
    },
  },
  plugins: {
    entries: {
      openshell: {
        enabled: true,
        config: {
          from: "openclaw",
          mode: "remote",
        },
      },
    },
  },
}

Modo mirror con GPU

{
  agents: {
    defaults: {
      sandbox: {
        mode: "all",
        backend: "openshell",
        scope: "agent",
        workspaceAccess: "rw",
      },
    },
  },
  plugins: {
    entries: {
      openshell: {
        enabled: true,
        config: {
          from: "openclaw",
          mode: "mirror",
          gpu: true,
          providers: ["openai"],
          timeoutSeconds: 180,
        },
      },
    },
  },
}

OpenShell por agente con Gateway personalizado

{
  agents: {
    defaults: {
      sandbox: { mode: "off" },
    },
    list: [
      {
        id: "researcher",
        sandbox: {
          mode: "all",
          backend: "openshell",
          scope: "agent",
          workspaceAccess: "rw",
        },
      },
    ],
  },
  plugins: {
    entries: {
      openshell: {
        enabled: true,
        config: {
          from: "openclaw",
          mode: "remote",
          gateway: "lab",
          gatewayEndpoint: "https://lab.example",
          policy: "strict",
        },
      },
    },
  },
}

Gestión del ciclo de vida

# List all sandbox runtimes (Docker + OpenShell)
openclaw sandbox list

# Inspect effective policy
openclaw sandbox explain

# Recreate (deletes remote workspace, re-seeds on next use)
openclaw sandbox recreate --all
Para el modo remote, recrear es especialmente importante: elimina el espacio de trabajo remoto canónico para ese alcance, y el siguiente uso inicializa uno nuevo desde local. Para el modo mirror, recrear principalmente restablece el entorno de ejecución remoto, ya que lo local sigue siendo canónico. Recrea después de cambiar cualquiera de estos valores:
  • agents.defaults.sandbox.backend
  • plugins.entries.openshell.config.from
  • plugins.entries.openshell.config.mode
  • plugins.entries.openshell.config.policy

Refuerzo de seguridad

El puente de sistema de archivos en modo mirror fija la raíz del espacio de trabajo local y vuelve a comprobar las rutas canónicas (mediante realpath) antes de cada lectura, escritura, mkdir, eliminación y cambio de nombre, rechazando enlaces simbólicos en segmentos intermedios de la ruta. Un intercambio de enlace simbólico o un espacio de trabajo remontado no puede redirigir el acceso a archivos fuera del árbol reflejado.

Limitaciones actuales

  • El navegador de sandbox no es compatible con el backend de OpenShell.
  • sandbox.docker.binds no se aplica a OpenShell; la creación del sandbox falla si hay binds configurados.
  • Los controles de runtime específicos de Docker bajo sandbox.docker.* (excepto env) se aplican solo al backend de Docker.

Cómo funciona

  1. OpenClaw ejecuta sandbox get para el nombre del sandbox (con cualquier --gateway/--gateway-endpoint configurado); si eso falla, crea uno con sandbox create, pasando --name, --from, --policy cuando esté definido, --gpu cuando esté habilitado, --auto-providers/--no-auto-providers, y una marca --provider por cada proveedor configurado.
  2. OpenClaw ejecuta sandbox ssh-config para el nombre del sandbox a fin de obtener los detalles de conexión SSH.
  3. Core escribe la configuración SSH en un archivo temporal y abre una sesión SSH a través del mismo puente de sistema de archivos remoto que el backend SSH genérico.
  4. En modo mirror: sincroniza local a remoto antes de exec, ejecuta, y sincroniza de vuelta después.
  5. En modo remote: inicializa una vez al crear y luego opera directamente sobre el espacio de trabajo remoto.

Relacionado