Gateway
Ejecución en segundo plano y herramienta 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:
| Parámetro | Descripción |
|---|---|
command |
Obligatorio. Comando de shell que se ejecutará. |
workdir |
Directorio de trabajo; omítalo para usar el cwd predeterminado. |
env |
Variables de entorno adicionales para el comando. |
yieldMs |
Milisegundos que se esperará antes de pasar a segundo plano (valor predeterminado: 10000). |
background |
Ejecutar inmediatamente en segundo plano. |
timeout |
Tiempo de espera en segundos (valor predeterminado: tools.exec.timeoutSeconds); finaliza el proceso al vencer. Establezca timeout: 0 para desactivar el tiempo de espera del proceso exec en esa llamada. |
pty |
Ejecutar en un seudoterminal cuando esté disponible (CLI que requieren TTY, agentes de programación). |
elevated |
Ejecutar fuera del entorno aislado si el modo elevado está habilitado o permitido (gateway de forma predeterminada, o node cuando el destino de exec sea node). |
host |
Destino de exec: auto, sandbox, gateway o node. |
node |
Id. o nombre del Node, utilizado con host: "node". |
Comportamiento:
- Las ejecuciones en primer plano devuelven la salida directamente.
- Al pasar a segundo plano (de forma explícita o mediante el tiempo de espera de
yieldMs), la herramienta devuelvestatus: "running"+sessionIdy un breve fragmento final de la salida. - Las ejecuciones en segundo plano y de
yieldMsheredantools.exec.timeoutSeconds, salvo que la llamada proporcione untimeoutexplícito. - La salida permanece en memoria hasta que se consulta o se borra la sesión.
- Si la herramienta
processno está permitida,execse ejecuta de forma síncrona e ignorayieldMs/background. - Los comandos exec iniciados reciben
OPENCLAW_SHELL=execpara aplicar reglas de shell o perfil que tienen en cuenta el contexto. - Para un trabajo de larga duración que comienza ahora: inícielo una sola vez y confíe en la activación automática al completarse (cuando esté habilitada) una vez que el comando produzca salida o falle.
- Si la activación automática al completarse no está disponible, o se necesita confirmar la finalización correcta de un comando que termina sin producir salida, consulte con
process. - No emule recordatorios ni seguimientos diferidos con bucles de
sleepo consultas repetidas: use Cron para trabajos futuros.
Sustituciones mediante variables de entorno
| Variable | Efecto |
|---|---|
OPENCLAW_BASH_YIELD_MS |
Espera predeterminada antes de pasar a segundo plano (ms). Valor predeterminado: 10000; limitado a 10-120000. |
OPENCLAW_BASH_MAX_OUTPUT_CHARS |
Límite de la salida en memoria (caracteres). |
OPENCLAW_BASH_PENDING_MAX_OUTPUT_CHARS |
Límite de stdout/stderr pendiente por flujo (caracteres). |
OPENCLAW_BASH_JOB_TTL_MS |
TTL de las sesiones finalizadas (ms), limitado a 1m-3h. |
OPENCLAW_PROCESS_INPUT_WAIT_IDLE_MS |
Umbral de inactividad de salida antes de marcar las sesiones en segundo plano con escritura como probablemente en espera de entrada. Valor predeterminado: 15000. |
Configuración (preferible a las sustituciones mediante variables de entorno)
| Clave | Valor predeterminado | Efecto |
|---|---|---|
tools.exec.backgroundMs |
10000 | Igual que OPENCLAW_BASH_YIELD_MS. |
tools.exec.timeoutSeconds |
1800 | Tiempo de espera predeterminado por llamada. |
tools.exec.cleanupMs |
1800000 | Igual que OPENCLAW_BASH_JOB_TTL_MS. |
tools.exec.notifyOnExit |
true | Pone en cola un evento del sistema y solicita un Heartbeat cuando finaliza una ejecución en segundo plano. |
tools.exec.notifyOnExitEmptySuccess |
false | También pone en cola eventos de finalización para ejecuciones correctas en segundo plano sin salida. |
Puente de procesos secundarios
Al iniciar procesos secundarios de larga duración fuera de las herramientas exec/process (reinicios de la CLI, auxiliares del Gateway), conecte el auxiliar de puente de procesos secundarios para que las señales de terminación se reenvíen y los escuchadores se desconecten al salir o producirse un error. Esto evita procesos huérfanos en systemd y mantiene un apagado coherente entre plataformas.
Herramienta process
Acciones:
| Acción | Efecto |
|---|---|
list |
Sesiones en ejecución y finalizadas. |
poll |
Obtiene la nueva salida de una sesión (también informa del estado de salida). |
log |
Lee la salida agregada y las indicaciones de recuperación de entrada. Admite offset + limit. |
write |
Envía datos a stdin (data, eof opcional). |
send-keys |
Envía tokens de teclas o bytes explícitos a una sesión respaldada por PTY. |
submit |
Envía Intro/retorno de carro a una sesión respaldada por PTY. |
paste |
Envía texto literal, opcionalmente envuelto en el modo de pegado entre corchetes. |
kill |
Finaliza una sesión en segundo plano. |
clear |
Elimina de la memoria una sesión finalizada. |
remove |
Finaliza la sesión si está en ejecución; de lo contrario, la borra si ha finalizado. |
Notas:
- Solo se enumeran y conservan las sesiones en segundo plano, únicamente en memoria, no en disco. Las sesiones se pierden al reiniciar el proceso.
- Una sesión activa en segundo plano bloquea la suspensión cooperativa del host y el reinicio seguro del Gateway hasta que el propietario del proceso confirma su finalización real.
process removepuede ocultar una sesión en ejecución inmediatamente después de solicitar su finalización; la suspensión y el reinicio permanecen bloqueados hasta que se confirme la finalización.- Los registros de sesión solo se guardan en el historial del chat si se ejecuta
process poll/logy se registra el resultado de la herramienta. processtiene un ámbito por agente; solo ve las sesiones iniciadas por ese agente.- Use
poll/logpara consultar el estado, los registros o la confirmación de finalización cuando la activación automática al completarse no esté disponible. - Use
logantes de recuperar una CLI interactiva, para que la transcripción actual, el estado de stdin y la indicación de espera de entrada estén visibles conjuntamente. - Use
write/send-keys/submit/paste/killcuando se necesite una entrada o intervención. process listincluye unnamederivado (verbo del comando + destino) para revisiones rápidas.process list,pollyloginforman dewaitingForInputsolo cuando la sesión todavía tiene stdin con escritura y ha estado inactiva durante más tiempo que el umbral de espera de entrada (valor predeterminado: 15000 ms,OPENCLAW_PROCESS_INPUT_WAIT_IDLE_MS).process logutilizaoffset/limitbasados en líneas. Cuando se omiten ambos, devuelve las últimas 200 líneas con una indicación de paginación. Cuando se estableceoffsety no se establecelimit, devuelve desdeoffsethasta el final (sin limitarse a 200).- El
timeoutdepollespera hasta esa cantidad de milisegundos antes de devolver el resultado; los valores superiores a 30000 se limitan a 30000. - Las consultas sirven para obtener el estado bajo demanda, no para programar bucles de espera. Si el trabajo debe realizarse más adelante, use Cron.
Ejemplos
Ejecutar una tarea de larga duración y consultarla 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 una entrada:
{ "tool": "process", "action": "log", "sessionId": "<id>" }Iniciar inmediatamente en segundo plano:
{ "tool": "exec", "command": "npm run build", "background": true }Enviar datos a stdin:
{ "tool": "process", "action": "write", "sessionId": "<id>", "data": "y\n" }Enviar teclas de 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" }