Saltar al contenido principal
OpenClaw ejecuta comandos de shell mediante la herramienta exec y conserva las tareas de larga duración en memoria. La herramienta process administra esas sesiones en segundo plano.

herramienta exec

Parámetros:
ParámetroDescripción
commandObligatorio. Comando de shell que se va a ejecutar.
workdirDirectorio de trabajo; omítelo para usar el cwd predeterminado.
envVariables de entorno adicionales para el comando.
yieldMsMilisegundos que se esperarán antes de enviar al segundo plano (valor predeterminado: 10000).
backgroundEjecutar en segundo plano inmediatamente.
timeoutTiempo de espera en segundos (valor predeterminado: tools.exec.timeoutSec); mata el proceso al vencer. Define timeout: 0 para desactivar el tiempo de espera del proceso exec para esa llamada.
ptyEjecutar en una pseudoterminal cuando esté disponible (CLI que requieren TTY, agentes de programación).
elevatedEjecutar fuera del sandbox si el modo elevado está habilitado/permitido (gateway de forma predeterminada, o node cuando el destino de exec es node).
hostDestino de exec: auto, sandbox, gateway o node.
nodeId/nombre de Node, usado con host: "node".
Comportamiento:
  • Las ejecuciones en primer plano devuelven la salida directamente.
  • Cuando se envía al segundo plano (explícitamente o mediante el tiempo de espera de yieldMs), la herramienta devuelve status: "running" + sessionId y una cola breve de salida.
  • Las ejecuciones en segundo plano y con yieldMs heredan tools.exec.timeoutSec salvo que la llamada pase un timeout explícito.
  • La salida permanece en memoria hasta que se sondea o se borra la sesión.
  • Si la herramienta process no está permitida, exec se ejecuta de forma síncrona e ignora yieldMs/background.
  • Los comandos exec generados reciben OPENCLAW_SHELL=exec para reglas de shell/perfil conscientes del contexto.
  • Para trabajo de larga duración que empieza ahora: inícialo una vez y confía en la activación automática al completarse (cuando esté habilitada) una vez que el comando emita salida o falle.
  • Si la activación automática al completarse no está disponible, o necesitas confirmar éxito silencioso para un comando que sale correctamente sin salida, sondea con process.
  • No emules recordatorios ni seguimientos diferidos con bucles sleep o sondeos repetidos; usa cron para trabajo futuro.

Sobrescrituras de entorno

VariableEfecto
OPENCLAW_BASH_YIELD_MSEspera predeterminada antes de enviar al segundo plano (ms). Valor predeterminado: 10000, limitado a 10-120000.
OPENCLAW_BASH_MAX_OUTPUT_CHARSLímite de salida en memoria (caracteres).
OPENCLAW_BASH_PENDING_MAX_OUTPUT_CHARSLímite de stdout/stderr pendiente por flujo (caracteres).
OPENCLAW_BASH_JOB_TTL_MSTTL para sesiones finalizadas (ms), limitado a 1m-3h.
OPENCLAW_PROCESS_INPUT_WAIT_IDLE_MSUmbral de salida inactiva antes de que las sesiones en segundo plano escribibles se marquen como probablemente esperando entrada. Valor predeterminado: 15000.

Configuración (preferida sobre las sobrescrituras de entorno)

ClavePredeterminadoEfecto
tools.exec.backgroundMs10000Igual que OPENCLAW_BASH_YIELD_MS.
tools.exec.timeoutSec1800Tiempo de espera predeterminado por llamada.
tools.exec.cleanupMs1800000Igual que OPENCLAW_BASH_JOB_TTL_MS.
tools.exec.notifyOnExittrueEncola un evento del sistema + solicita Heartbeat cuando sale un exec en segundo plano.
tools.exec.notifyOnExitEmptySuccessfalseTambién encola eventos de finalización para ejecuciones en segundo plano correctas sin salida.

Puente de procesos hijos

Al generar procesos hijos de larga duración fuera de las herramientas exec/process (reinicios de CLI, helpers de gateway), adjunta el helper de puente de procesos hijos para que las señales de terminación se reenvíen y los listeners se desprendan al salir/error. Esto evita procesos huérfanos en systemd y mantiene un apagado coherente entre plataformas.

herramienta process

Acciones:
AcciónEfecto
listSesiones en ejecución + finalizadas.
pollDrenar salida nueva de una sesión (también informa el estado de salida).
logLeer salida agregada y pistas de recuperación de entrada. Admite offset + limit.
writeEnviar stdin (data, eof opcional).
send-keysEnviar tokens de tecla explícitos o bytes a una sesión respaldada por PTY.
submitEnviar Enter/retorno de carro a una sesión respaldada por PTY.
pasteEnviar texto literal, opcionalmente envuelto en modo de pegado entre corchetes.
killTerminar una sesión en segundo plano.
clearEliminar una sesión finalizada de la memoria.
removeMatar si está en ejecución; de lo contrario, borrar si finalizó.
Notas:
  • Solo se listan/persisten las sesiones en segundo plano: únicamente en memoria, no en disco. Las sesiones se pierden al reiniciar el proceso.
  • Los registros de sesión solo se guardan en el historial de chat si ejecutas process poll/log y se registra el resultado de la herramienta.
  • process tiene alcance por agente; solo ve las sesiones iniciadas por ese agente.
  • Usa poll/log para estado, registros o confirmación de finalización cuando la activación automática al completarse no esté disponible.
  • Usa log antes de recuperar una CLI interactiva, para que la transcripción actual, el estado de stdin y la pista de espera de entrada sean visibles juntos.
  • Usa write/send-keys/submit/paste/kill cuando necesites entrada o intervención.
  • process list incluye un name derivado (verbo del comando + destino) para revisiones rápidas.
  • process list, poll y log informan waitingForInput solo cuando la sesión todavía tiene stdin escribible y ha estado inactiva más tiempo que el umbral de espera de entrada (valor predeterminado: 15000 ms, OPENCLAW_PROCESS_INPUT_WAIT_IDLE_MS).
  • process log usa offset/limit basados en líneas. Cuando ambos se omiten, devuelve las últimas 200 líneas con una pista de paginación. Cuando se establece offset y limit no, devuelve desde offset hasta el final (sin limitar a 200).
  • El timeout de poll espera hasta esa cantidad de milisegundos antes de devolver; los valores superiores a 30000 se limitan a 30000.
  • El sondeo es para estado bajo demanda, no para programar bucles de espera. Si el trabajo debe ocurrir más tarde, usa cron.

Ejemplos

Ejecutar una tarea larga y sondear más tarde:
{ "tool": "exec", "command": "sleep 5 && echo done", "yieldMs": 1000 }
{ "tool": "process", "action": "poll", "sessionId": "<id>" }
Inspeccionar una sesión interactiva antes de enviar entrada:
{ "tool": "process", "action": "log", "sessionId": "<id>" }
Iniciar inmediatamente en segundo plano:
{ "tool": "exec", "command": "npm run build", "background": true }
Enviar stdin:
{ "tool": "process", "action": "write", "sessionId": "<id>", "data": "y\n" }
Enviar teclas PTY:
{ "tool": "process", "action": "send-keys", "sessionId": "<id>", "keys": ["C-c"] }
Enviar la línea actual:
{ "tool": "process", "action": "submit", "sessionId": "<id>" }
Pegar texto literal:
{ "tool": "process", "action": "paste", "sessionId": "<id>", "text": "line1\nline2\n" }

Relacionado