Herramienta Exec
Ejecute comandos de shell en el workspace. Admite ejecución en primer plano y en segundo plano medianteprocess.
Si process no está permitido, exec se ejecuta de forma sincrónica 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(valor predeterminado: cwd)env(sobrescrituras clave/valor)yieldMs(predeterminado 10000): pasar automáticamente a segundo plano tras el retrasobackground(bool): ejecutar inmediatamente en segundo planotimeout(segundos, predeterminado 1800): finalizar al expirarpty(bool): ejecutar en un pseudo-terminal cuando esté disponible (CLIs solo TTY, agentes de codificación, UIs de terminal)host(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 (host del Gateway);security=fullsolo se fuerza cuando lo elevado se resuelve afull
hosttiene como valor predeterminadosandbox.elevatedse ignora cuando sandboxing está desactivado (exec ya se ejecuta en el host).- Las aprobaciones de
gateway/nodeestán controladas por~/.openclaw/exec-approvals.json. noderequiere un nodo emparejado (aplicación complementaria o host de nodo headless).- Si hay varios nodos disponibles, configure
exec.nodeotools.exec.nodepara seleccionar uno. - En hosts que no son Windows, exec usa
SHELLcuando está configurado; siSHELLesfish, prefierebash(osh) dePATHpara evitar scripts incompatibles con fish, y luego recurre aSHELLsi ninguno existe. - La ejecución en el host (
gateway/node) rechazaenv.PATHy las sobrescrituras del cargador (LD_*/DYLD_*) para evitar el secuestro de binarios o la inyección de código. - Importante: sandboxing está desactivado de forma predeterminada. Si sandboxing está desactivado,
host=sandboxse ejecuta directamente en el host del Gateway (sin contenedor) y no requiere aprobaciones. Para exigir aprobaciones, ejecute conhost=gatewayy configure las aprobaciones de exec (o habilite sandboxing).
Configuración
tools.exec.notifyOnExit(predeterminado: true): cuando es true, las sesiones de exec en segundo plano encolan un evento del sistema y solicitan un latido al salir.tools.exec.approvalRunningNoticeMs(predeterminado: 10000): emite un único aviso de “en ejecución” cuando un exec con aprobación tarda más que esto (0 lo desactiva).tools.exec.host(predeterminado:sandbox)tools.exec.security(predeterminado:denypara sandbox,allowlistpara gateway + nodo cuando no está configurado)tools.exec.ask(predeterminado:on-miss)tools.exec.node(predeterminado: sin configurar)tools.exec.pathPrepend: lista de directorios para anteponer aPATHen ejecuciones de exec.tools.exec.safeBins: binarios seguros solo de stdin que pueden ejecutarse sin entradas explícitas en la lista de permitidos.
Manejo de PATH
host=gateway: fusiona suPATHdel shell de inicio de sesión en el entorno de exec. Las sobrescrituras deenv.PATHson rechazadas para la ejecución en el host. El daemon en sí 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 del shell);tools.exec.pathPrependtambién aplica aquí.host=node: solo se envían al nodo las sobrescrituras de entorno no bloqueadas que usted pase. Las sobrescrituras deenv.PATHson rechazadas para la ejecución en el host. Si necesitas entradas adicionales en el PATH en un nodo, configura el entorno del servicio host del nodo (systemd/launchd) o instala las herramientas en ubicaciones estándar.
Sobrescrituras de sesión (/exec)
Use /exec para establecer valores predeterminados por sesión para host, security, ask y node.
Envíe /exec sin argumentos para mostrar los valores actuales.
Ejemplo:
Modelo de autorización
/exec solo se respeta para remitentes autorizados (listas de permitidos por canal/emparejamiento más commands.useAccessGroups).
Actualiza solo el estado de la sesión y no escribe configuración. Para deshabilitar exec de forma permanente, deniéguelo mediante la política
de herramientas (tools.deny: ["exec"] o por agente). Las aprobaciones del host siguen aplicando a menos que usted establezca explícitamente
security=full y ask=off.
Aprobaciones de Exec (aplicación complementaria / host de nodo)
Los agentes en sandbox pueden requerir aprobación por solicitud antes de queexec se ejecute en el host del Gateway o del nodo.
Consulte Exec approvals para la política, la lista de permitidos y el flujo de la UI.
Cuando se requieren aprobaciones, la herramienta exec devuelve inmediatamente
status: "approval-pending" y un id de aprobación. Una vez aprobado (o denegado / con tiempo de espera agotado),
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 de Exec running.
Lista de permitidos + binarios seguros
La aplicación de la lista de permitidos coincide solo con rutas de binarios resueltas (sin coincidencias por nombre base). Cuandosecurity=allowlist, los comandos de shell se permiten automáticamente solo si cada segmento del pipeline está
en la lista de permitidos o es un binario seguro. El encadenamiento (;, &&, ||) y las redirecciones se rechazan en
modo allowlist a menos que cada segmento de nivel superior cumpla la allowlist (incluidos los bins seguros).
Las redirecciones siguen sin ser compatibles.
Ejemplos
Primer plano:apply_patch (experimental)
apply_patch es una subherramienta de exec para ediciones estructuradas de varios archivos.
Habilítela explícitamente:
- Solo disponible para modelos OpenAI/OpenAI Codex.
- La política de herramientas sigue aplicando;
allow: ["exec"]permite implícitamenteapply_patch. - La configuración vive bajo
tools.exec.applyPatch. tools.exec.applyPatch.workspaceOnlytiene como valor predeterminadotrue(limitado al workspace). Establécelo enfalsesolo si realmente quieres queapply_patchescriba o elimine fuera del directorio de workspace.