Gateway
Herramienta de ejecución en segundo plano y de procesos
OpenClaw ejecuta comandos de shell mediante la herramienta exec y mantiene en memoria las tareas de larga duración. La herramienta process gestiona esas sesiones en segundo plano.
herramienta exec
Parámetros clave:
command(obligatorio)yieldMs(predeterminado 10000): pasa automáticamente a segundo plano después de este retrasobackground(bool): pasa a segundo plano de inmediatotimeout(segundos, predeterminadotools.exec.timeoutSec): finaliza el proceso después de este tiempo de espera; establecetimeout: 0solo para desactivar el tiempo de espera del proceso exec para esa llamadaelevated(bool): ejecuta fuera del sandbox si el modo elevado está habilitado/permitido (gatewayde forma predeterminada, onodecuando el destino de exec esnode)- ¿Necesitas una TTY real? Establece
pty: true. workdir,env
Comportamiento:
- Las ejecuciones en primer plano devuelven la salida directamente.
- Cuando pasa a segundo plano (de forma explícita o por tiempo de espera), la herramienta devuelve
status: "running"+sessionIdy una cola breve. - Las ejecuciones en segundo plano y con
yieldMsheredantools.exec.timeoutSecsalvo que la llamada proporcione untimeoutexplícito. - La salida se conserva en memoria hasta que la sesión se consulta o se borra.
- Si la herramienta
processno está permitida,execse ejecuta de forma síncrona e ignorayieldMs/background. - Los comandos exec generados reciben
OPENCLAW_SHELL=execpara reglas de shell/perfil conscientes del contexto. - Para trabajo de larga duración que empieza ahora, inícialo una vez y depende de la activación automática por finalización cuando esté habilitada y el comando emita salida o falle.
- Si la activación automática por finalización no está disponible, o necesitas confirmación de éxito silencioso para un comando que terminó limpiamente sin salida, usa
processpara confirmar la finalización. - No emules recordatorios ni seguimientos diferidos con bucles
sleepo sondeos repetidos; usa cron para trabajo futuro.
Puente de procesos secundarios
Al generar procesos secundarios de larga duración fuera de las herramientas exec/process (por ejemplo, reinicios de CLI o auxiliares del gateway), adjunta el auxiliar de puente de procesos secundarios para que se reenvíen las señales de terminación y los listeners se desconecten al salir o al producirse un error. Esto evita procesos huérfanos en systemd y mantiene un comportamiento de apagado coherente entre plataformas.
Sobrescrituras de entorno:
PI_BASH_YIELD_MS: yield predeterminado (ms)PI_BASH_MAX_OUTPUT_CHARS: límite de salida en memoria (caracteres)OPENCLAW_BASH_PENDING_MAX_OUTPUT_CHARS: límite de stdout/stderr pendiente por stream (caracteres)PI_BASH_JOB_TTL_MS: TTL para sesiones finalizadas (ms, acotado a 1m–3h)
Configuración (preferida):
tools.exec.backgroundMs(predeterminado 10000)tools.exec.timeoutSec(predeterminado 1800)tools.exec.cleanupMs(predeterminado 1800000)tools.exec.notifyOnExit(predeterminado true): encola un evento del sistema + solicita Heartbeat cuando sale un exec en segundo plano.tools.exec.notifyOnExitEmptySuccess(predeterminado false): cuando es true, también encola eventos de finalización para ejecuciones correctas en segundo plano que no produjeron salida.
herramienta process
Acciones:
list: sesiones en ejecución + finalizadaspoll: drena la nueva salida de una sesión (también informa el estado de salida)log: lee la salida agregada (admiteoffset+limit)write: envía stdin (data,eofopcional)send-keys: envía tokens de tecla explícitos o bytes a una sesión respaldada por PTYsubmit: envía Enter / retorno de carro a una sesión respaldada por PTYpaste: envía texto literal, opcionalmente envuelto en modo de pegado con corcheteskill: termina una sesión en segundo planoclear: elimina de la memoria una sesión finalizadaremove: finaliza si está en ejecución; de lo contrario, borra si está finalizada
Notas:
- Solo las sesiones en segundo plano se listan/persisten en memoria.
- Las sesiones se pierden al reiniciar el proceso (sin persistencia en disco).
- Los logs de sesión solo se guardan en el historial de chat si ejecutas
process poll/logy se registra el resultado de la herramienta. processtiene alcance por agente; solo ve sesiones iniciadas por ese agente.- Usa
poll/logpara estado, logs, confirmación de éxito silencioso o confirmación de finalización cuando la activación automática por finalización no esté disponible. - Usa
write/send-keys/submit/paste/killcuando necesites entrada o intervención. process listincluye unnamederivado (verbo de comando + destino) para revisiones rápidas.process logusaoffset/limitbasados en líneas.- Cuando se omiten tanto
offsetcomolimit, devuelve las últimas 200 líneas e incluye una pista de paginación. - Cuando se proporciona
offsety se omitelimit, devuelve desdeoffsethasta el final (sin limitar a 200). - El sondeo es para estado bajo demanda, no para programar bucles de espera. Si el trabajo debe ocurrir más tarde, usa cron en su lugar.
Ejemplos
Ejecuta una tarea larga y consúltala más tarde:
{ "tool": "exec", "command": "sleep 5 && echo done", "yieldMs": 1000 }
{ "tool": "process", "action": "poll", "sessionId": "<id>" }
Inicia de inmediato en segundo plano:
{ "tool": "exec", "command": "npm run build", "background": true }
Envía stdin:
{ "tool": "process", "action": "write", "sessionId": "<id>", "data": "y\n" }
Envía teclas PTY:
{ "tool": "process", "action": "send-keys", "sessionId": "<id>", "keys": ["C-c"] }
Envía la línea actual:
{ "tool": "process", "action": "submit", "sessionId": "<id>" }
Pega texto literal:
{ "tool": "process", "action": "paste", "sessionId": "<id>", "text": "line1\nline2\n" }