Sandbox vs Política de herramientas vs Elevado
OpenClaw tiene tres controles relacionados (pero diferentes):
- Sandbox (
agents.defaults.sandbox.*/agents.list[].sandbox.*) decide dónde se ejecutan las herramientas (Docker vs host). - Política de herramientas (
tools.*,tools.sandbox.tools.*,agents.list[].tools.*) decide qué herramientas están disponibles/permitidas. - Elevado (
tools.elevated.*,agents.list[].tools.elevated.*) es una válvula de escape solo para exec que ejecuta en el host cuando estás en sandbox.
Depuración rápida
Usa el inspector para ver lo que OpenClaw realmente está haciendo:
openclaw sandbox explain
openclaw sandbox explain --session agent:main:main
openclaw sandbox explain --agent work
openclaw sandbox explain --json
Muestra:
- modo/alcance/acceso al workspace efectivo del sandbox
- si la sesión está actualmente en sandbox (main vs no-main)
- política de herramientas efectiva del sandbox (allow/deny) (y si proviene de agent/global/default)
- compuertas elevadas y claves de configuración para solucionar
Sandbox: dónde se ejecutan las herramientas
El sandboxing se controla con agents.defaults.sandbox.mode:
"off": todo se ejecuta en el host."non-main": solo las sesiones no-main se ejecutan en sandbox (causa frecuente de “sorpresas” en grupos/canales)."all": todo se ejecuta en sandbox.
Consulta Sandboxing para la matriz completa (alcance, montajes de workspace, imágenes).
Montajes bind (verificación rápida de seguridad)
docker.bindsatraviesa el sistema de archivos del sandbox: lo que montes es visible dentro del contenedor con el modo que configures (:roo:rw).- Por defecto es lectura-escritura si omites el modo; prefiere
:ropara código fuente/secretos. scope: "shared"ignora los binds por agente (solo aplican los binds globales).- Montar
/var/run/docker.sockefectivamente entrega el control del host al sandbox; hazlo solo intencionalmente. - El acceso al workspace (
workspaceAccess: "ro"/"rw") es independiente de los modos de bind.
Política de herramientas: qué herramientas existen/son invocables
Dos capas importan:
- Perfil de herramientas:
tools.profileyagents.list[].tools.profile(lista base de permitidos) - Perfil de herramientas por proveedor:
tools.byProvider[provider].profileyagents.list[].tools.byProvider[provider].profile - Política de herramientas global/por agente:
tools.allow/tools.denyyagents.list[].tools.allow/agents.list[].tools.deny - Política de herramientas por proveedor:
tools.byProvider[provider].allow/denyyagents.list[].tools.byProvider[provider].allow/deny - Política de herramientas del sandbox (solo aplica en sandbox):
tools.sandbox.tools.allow/tools.sandbox.tools.denyyagents.list[].tools.sandbox.tools.*
Reglas generales:
denysiempre gana.- Si
allowno está vacío, todo lo demás se trata como bloqueado. - La política de herramientas es el freno definitivo:
/execno puede sobrescribir una herramientaexecdenegada. /execsolo cambia los valores por defecto de sesión para remitentes autorizados; no otorga acceso a herramientas. Las claves de herramientas por proveedor aceptan tantoprovider(ej.google-antigravity) comoprovider/model(ej.openai/gpt-5.2).
Grupos de herramientas (atajos)
Las políticas de herramientas (global, agente, sandbox) soportan entradas group:* que se expanden a múltiples herramientas:
{
tools: {
sandbox: {
tools: {
allow: ["group:runtime", "group:fs", "group:sessions", "group:memory"],
},
},
},
}
Grupos disponibles:
group:runtime:exec,bash,processgroup:fs:read,write,edit,apply_patchgroup:sessions:sessions_list,sessions_history,sessions_send,sessions_spawn,session_statusgroup:memory:memory_search,memory_getgroup:ui:browser,canvasgroup:automation:cron,gatewaygroup:messaging:messagegroup:nodes:nodesgroup:openclaw: todas las herramientas integradas de OpenClaw (excluye plugins de proveedor)
Elevado: “ejecutar en el host” solo para exec
Elevado no otorga herramientas adicionales; solo afecta a exec.
- Si estás en sandbox,
/elevated on(oexecconelevated: true) ejecuta en el host (las aprobaciones pueden seguir aplicando). - Usa
/elevated fullpara omitir las aprobaciones de exec para la sesión. - Si ya estás ejecutando directamente, elevado es efectivamente un no-op (sigue siendo controlado).
- Elevado no tiene alcance de skill y no sobrescribe las políticas allow/deny de herramientas.
/execes separado de elevado. Solo ajusta los valores por defecto de exec por sesión para remitentes autorizados.
Compuertas:
- Habilitación:
tools.elevated.enabled(y opcionalmenteagents.list[].tools.elevated.enabled) - Listas de remitentes permitidos:
tools.elevated.allowFrom.<provider>(y opcionalmenteagents.list[].tools.elevated.allowFrom.<provider>)
Consulta Modo elevado.
Soluciones comunes para “cárcel del sandbox"
"Herramienta X bloqueada por política de herramientas del sandbox”
Claves de solución (elige una):
- Deshabilitar sandbox:
agents.defaults.sandbox.mode=off(o por agenteagents.list[].sandbox.mode=off) - Permitir la herramienta dentro del sandbox:
- elimínala de
tools.sandbox.tools.deny(o por agenteagents.list[].tools.sandbox.tools.deny) - o agrégala a
tools.sandbox.tools.allow(o por agente allow)
- elimínala de
“Pensé que esto era main, ¿por qué está en sandbox?”
En modo "non-main", las claves de grupo/canal no son main. Usa la clave de sesión main (mostrada por sandbox explain) o cambia el modo a "off".