Herramienta Exec
Ejecuta comandos de shell en el espacio de trabajo. Admite ejecución en primer plano y en segundo plano medianteprocess.
Si process no está permitido, exec se ejecuta de forma síncrona e ignora yieldMs/background.
Las sesiones en segundo plano tienen alcance por agente; process solo ve sesiones del mismo agente.
Parámetros
command(obligatorio)workdir(por defecto es cwd)env(anulaciones clave/valor)yieldMs(predeterminado 10000): pasa automáticamente a segundo plano después del retrasobackground(bool): pasa inmediatamente a segundo planotimeout(segundos, predeterminado 1800): se mata al expirarpty(bool): ejecutar en un pseudo-terminal cuando esté disponible (CLI solo TTY, agentes de codificación, interfaces de terminal)host(auto | sandbox | gateway | node): dónde ejecutarsecurity(deny | allowlist | full): modo de aplicación paragateway/nodeask(off | on-miss | always): solicitudes de aprobación paragateway/nodenode(string): ID/nombre del nodo parahost=nodeelevated(bool): solicitar modo elevado (salir del sandbox hacia la ruta de host configurada);security=fullsolo se fuerza cuando elevated se resuelve comofull
hostusa por defectoauto: sandbox cuando el runtime de sandbox está activo para la sesión; en caso contrario, gateway.autoes la estrategia de enrutamiento predeterminada, no un comodín. Se permitehost=nodepor llamada desdeauto;host=gatewaypor llamada solo se permite cuando no hay un runtime de sandbox activo.- Sin configuración adicional,
host=autosigue “simplemente funcionando”: sin sandbox se resuelve agateway; con un sandbox activo se mantiene en el sandbox. elevatedsale del sandbox hacia la ruta de host configurada:gatewaypor defecto, onodecuandotools.exec.host=node(o cuando el valor predeterminado de la sesión eshost=node). Solo está disponible cuando el acceso elevado está habilitado para la sesión/proveedor actual.- Las aprobaciones de
gateway/nodeestán controladas por~/.openclaw/exec-approvals.json. noderequiere un nodo vinculado (app complementaria o host de nodo sin interfaz).- Si hay varios nodos disponibles, establece
exec.nodeotools.exec.nodepara seleccionar uno. exec host=nodees la única ruta de ejecución de shell para nodos; el wrapper heredadonodes.runse ha eliminado.- En hosts que no son Windows, exec usa
SHELLcuando está establecido; siSHELLesfish, prefierebash(osh) desdePATHpara evitar scripts incompatibles con fish, y luego vuelve aSHELLsi ninguno existe. - En hosts Windows, exec prefiere descubrir PowerShell 7 (
pwsh) (Program Files, ProgramW6432 y luego PATH), y después vuelve a Windows PowerShell 5.1. - La ejecución en host (
gateway/node) rechazaenv.PATHy las anulaciones del cargador (LD_*/DYLD_*) para evitar secuestro de binarios o inyección de código. - OpenClaw establece
OPENCLAW_SHELL=execen el entorno del comando generado (incluida la ejecución PTY y sandbox) para que las reglas de shell/perfil puedan detectar el contexto de la herramienta exec. - Importante: el sandboxing está desactivado por defecto. Si el sandboxing está desactivado,
host=autoimplícito se resuelve agateway.host=sandboxexplícito sigue fallando en modo cerrado en lugar de ejecutarse silenciosamente en el host gateway. Habilita el sandboxing o usahost=gatewaycon aprobaciones. - Las comprobaciones previas de scripts (para errores comunes de sintaxis de shell en Python/Node) solo inspeccionan archivos dentro del
límite efectivo de
workdir. Si una ruta de script se resuelve fuera deworkdir, la comprobación previa se omite para ese archivo. - Para trabajos de larga duración que empiezan ahora, inícialos una vez y confía en el
despertar automático por finalización cuando esté habilitado y el comando emita salida o falle.
Usa
processpara registros, estado, entrada o intervención; no emules la programación con bucles de sleep, bucles de timeout o sondeo repetido. - Para trabajo que deba ocurrir más tarde o según una programación, usa cron en lugar de
patrones de sleep/retraso con
exec.
Configuración
tools.exec.notifyOnExit(predeterminado: true): cuando es true, las sesiones exec enviadas a segundo plano encolan un evento del sistema y solicitan un heartbeat al finalizar.tools.exec.approvalRunningNoticeMs(predeterminado: 10000): emite un único aviso “running” cuando un exec con aprobación tarda más que esto (0 lo desactiva).tools.exec.host(predeterminado:auto; se resuelve asandboxcuando el runtime de sandbox está activo,gatewayen caso contrario)tools.exec.security(predeterminado:denypara sandbox,fullpara gateway + node cuando no está configurado)tools.exec.ask(predeterminado:off)- El exec en host sin aprobación es el valor predeterminado para gateway + node. Si quieres comportamiento de aprobaciones/allowlist, endurece tanto
tools.exec.*como la política del host~/.openclaw/exec-approvals.json; consulta Aprobaciones de exec. - YOLO proviene de los valores predeterminados de la política del host (
security=full,ask=off), no dehost=auto. Si quieres forzar el enrutamiento a gateway o node, establecetools.exec.hosto usa/exec host=.... - En modo
security=fullmásask=off, el exec en host sigue directamente la política configurada; no hay ningún prefiltro heurístico adicional de ofuscación de comandos. tools.exec.node(predeterminado: no establecido)tools.exec.strictInlineEval(predeterminado: false): cuando es true, las formas de evaluación inline del intérprete comopython -c,node -e,ruby -e,perl -e,php -r,lua -eyosascript -esiempre requieren aprobación explícita.allow-alwaysaún puede persistir invocaciones benignas de intérprete/script, pero las formas inline-eval siguen solicitando aprobación en cada ocasión.tools.exec.pathPrepend: lista de directorios para anteponer aPATHen ejecuciones exec (solo gateway + sandbox).tools.exec.safeBins: binarios seguros de solo stdin que pueden ejecutarse sin entradas explícitas en allowlist. Para detalles del comportamiento, consulta Safe bins.tools.exec.safeBinTrustedDirs: directorios adicionales explícitos de confianza para las comprobaciones de ruta de ejecutables ensafeBins. Las entradas dePATHnunca reciben confianza automática. Los valores predeterminados integrados son/biny/usr/bin.tools.exec.safeBinProfiles: política opcional personalizada de argv por safe bin (minPositional,maxPositional,allowedValueFlags,deniedFlags).
Manejo de PATH
host=gateway: fusiona tuPATHde shell de inicio de sesión en el entorno de exec. Las anulaciones deenv.PATHse rechazan para la ejecución en host. El propio daemon sigue ejecutándose con unPATHmínimo:- macOS:
/opt/homebrew/bin,/usr/local/bin,/usr/bin,/bin - Linux:
/usr/local/bin,/usr/bin,/bin
- macOS:
host=sandbox: ejecutash -lc(shell de inicio de sesión) dentro del contenedor, por lo que/etc/profilepuede restablecerPATH. OpenClaw anteponeenv.PATHdespués de cargar el perfil mediante una variable de entorno interna (sin interpolación de shell);tools.exec.pathPrependtambién se aplica aquí.host=node: solo se envían al nodo las anulaciones de entorno no bloqueadas que proporciones. Las anulaciones deenv.PATHse rechazan para la ejecución en host y los hosts node las ignoran. Si necesitas entradas adicionales en PATH en un nodo, configura el entorno del servicio del host node (systemd/launchd) o instala herramientas en ubicaciones estándar.
Anulaciones de sesión (/exec)
Usa /exec para establecer valores predeterminados por sesión para host, security, ask y node.
Envía /exec sin argumentos para mostrar los valores actuales.
Ejemplo:
Modelo de autorización
/exec solo se respeta para remitentes autorizados (listas de permitidos/vinculación del canal más commands.useAccessGroups).
Actualiza solo el estado de la sesión y no escribe configuración. Para desactivar exec completamente, deniégalo mediante la
política de herramientas (tools.deny: ["exec"] o por agente). Las aprobaciones del host siguen aplicándose a menos que establezcas explícitamente
security=full y ask=off.
Aprobaciones de exec (app complementaria / host de nodo)
Los agentes en sandbox pueden requerir aprobación por solicitud antes de queexec se ejecute en el host gateway o node.
Consulta Aprobaciones de exec para ver la política, la allowlist y el flujo de UI.
Cuando se requieren aprobaciones, la herramienta exec devuelve inmediatamente
status: "approval-pending" y un ID de aprobación. Una vez aprobada (o denegada / expirada),
el Gateway emite eventos del sistema (Exec finished / Exec denied). Si el comando sigue
ejecutándose después de tools.exec.approvalRunningNoticeMs, se emite un único aviso Exec running.
En los canales con tarjetas/botones nativos de aprobación, el agente debe confiar primero en esa
UI nativa y solo incluir un comando manual /approve cuando el resultado de la
herramienta indique explícitamente que las aprobaciones por chat no están disponibles o que la aprobación manual es la
única vía.
Allowlist + safe bins
La aplicación manual de allowlist coincide solo con rutas resueltas de binarios (sin coincidencias por nombre base). Cuandosecurity=allowlist, los comandos de shell solo se permiten automáticamente si cada segmento de pipeline está
en allowlist o es un safe bin. El encadenamiento (;, &&, ||) y las redirecciones se rechazan en
modo allowlist a menos que cada segmento de nivel superior satisfaga la allowlist (incluidos los safe bins).
Las redirecciones siguen sin estar admitidas.
La confianza duradera allow-always no evita esa regla: un comando encadenado sigue requiriendo que cada
segmento de nivel superior coincida.
autoAllowSkills es una ruta de conveniencia independiente en las aprobaciones de exec. No es lo mismo que
las entradas manuales de allowlist por ruta. Para una confianza estricta y explícita, mantén autoAllowSkills desactivado.
Usa los dos controles para trabajos distintos:
tools.exec.safeBins: pequeños filtros de flujo de solo stdin.tools.exec.safeBinTrustedDirs: directorios adicionales explícitos de confianza para rutas ejecutables de safe-bin.tools.exec.safeBinProfiles: política explícita de argv para safe bins personalizados.- allowlist: confianza explícita para rutas de ejecutables.
safeBins como una allowlist genérica y no añadas binarios de intérprete/runtime (por ejemplo python3, node, ruby, bash). Si los necesitas, usa entradas explícitas de allowlist y mantén habilitadas las solicitudes de aprobación.
openclaw security audit avisa cuando faltan entradas explícitas de perfil para intérpretes/runtime en safeBins, y openclaw doctor --fix puede generar entradas faltantes de safeBinProfiles personalizados.
openclaw security audit y openclaw doctor también avisan cuando vuelves a añadir explícitamente bins de comportamiento amplio como jq a safeBins.
Si incluyes explícitamente intérpretes en allowlist, habilita tools.exec.strictInlineEval para que las formas de evaluación de código inline sigan requiriendo una aprobación nueva.
Para ver la política completa y ejemplos, consulta Aprobaciones de exec y Safe bins versus allowlist.
Ejemplos
Primer plano:apply_patch
apply_patch es una subherramienta de exec para ediciones estructuradas en varios archivos.
Está habilitada por defecto para modelos OpenAI y OpenAI Codex. Usa configuración solo
cuando quieras desactivarla o restringirla a modelos específicos:
- Solo está disponible para modelos OpenAI/OpenAI Codex.
- La política de herramientas sigue aplicándose;
allow: ["write"]permite implícitamenteapply_patch. - La configuración vive en
tools.exec.applyPatch. tools.exec.applyPatch.enabledusa por defectotrue; establécelo enfalsepara desactivar la herramienta para modelos OpenAI.tools.exec.applyPatch.workspaceOnlyusa por defectotrue(contenido dentro del espacio de trabajo). Establécelo enfalsesolo si intencionalmente quieres queapply_patchescriba/elimine fuera del directorio del espacio de trabajo.
Relacionado
- Aprobaciones de exec — controles de aprobación para comandos de shell
- Sandboxing — ejecutar comandos en entornos con sandbox
- Proceso en segundo plano — ejecución prolongada y herramienta process
- Seguridad — política de herramientas y acceso elevado