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 directorio de trabajo actual predeterminado. |
env |
Variables de entorno adicionales para el comando. |
yieldMs |
Milisegundos que se esperará antes de pasar a segundo plano (valor predeterminado: 10000). |
background |
Ejecuta inmediatamente en segundo plano. |
timeout |
Tiempo de espera en segundos (valor predeterminado: tools.exec.timeoutSec); finaliza el proceso cuando vence. Establezca timeout: 0 para desactivar el tiempo de espera del proceso exec en esa llamada. |
pty |
Ejecuta en un pseudoterminal cuando esté disponible (CLI que requieren TTY, agentes de programación). |
elevated |
Ejecuta fuera del entorno aislado si el modo con privilegios elevados está habilitado o permitido (gateway de forma predeterminada, o node cuando el destino de exec es node). |
host |
Destino de exec: auto, sandbox, gateway o node. |
node |
Identificador o nombre del Node, usado con host: "node". |
Comportamiento:
- Las ejecuciones en primer plano devuelven la salida directamente.
- Al pasar a segundo plano (de forma explícita o por agotarse el tiempo de
yieldMs), la herramienta devuelvestatus: "running"+sessionIdy un breve fragmento final de la salida. - Las ejecuciones en segundo plano y con
yieldMsheredantools.exec.timeoutSec, a menos que la llamada proporcione untimeoutexplícito. - La salida permanece en memoria hasta que se consulta o elimina 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 las reglas de shell o perfil que tienen en cuenta el contexto. - Para trabajos de larga duración que comienzan ahora: inícielos una sola vez y confíe en la reactivación automática al completarse (cuando esté habilitada) cuando el comando produzca salida o falle.
- Si la reactivación automática al completarse no está disponible, o necesita confirmar que un comando finalizó correctamente sin producir salida, consulte su estado con
process. - No simule recordatorios ni seguimientos diferidos con bucles de
sleepo consultas repetidas: use Cron para el trabajo futuro.
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 1 min-3 h. |
OPENCLAW_PROCESS_INPUT_WAIT_IDLE_MS |
Umbral de inactividad de la salida antes de marcar las sesiones en segundo plano con escritura habilitada 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.timeoutSec |
1800 | Tiempo de espera predeterminado por llamada. |
tools.exec.cleanupMs |
1800000 | Igual que OPENCLAW_BASH_JOB_TTL_MS. |
tools.exec.notifyOnExit |
true | Encola un evento del sistema y solicita un Heartbeat cuando finaliza una ejecución en segundo plano. |
tools.exec.notifyOnExitEmptySuccess |
false | También encola eventos de finalización para las ejecuciones en segundo plano correctas sin salida. |
Puente de procesos secundarios
Al iniciar procesos secundarios de larga duración fuera de las herramientas exec/process (reinicios de CLI, auxiliares del Gateway), adjunte el auxiliar de puente de procesos secundarios para que las señales de terminación se reenvíen y los escuchadores se desvinculen al salir o producirse un error. Esto evita procesos huérfanos en systemd y mantiene un apagado uniforme 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 para recuperar la 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 |
La finaliza si está en ejecución; de lo contrario, la elimina si ya ha finalizado. |
Notas:
- Solo las sesiones en segundo plano se muestran y conservan; ú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 confirme su salida efectiva.
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 salida.- Los registros de sesión solo se guardan en el historial del chat si 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 y los registros, o para confirmar la finalización cuando la reactivació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 sean visibles juntos. - Use
write/send-keys/submit/paste/killcuando necesite proporcionar entrada o intervenir. process listincluye unnamederivado (verbo del comando + destino) para realizar consultas rápidas.process list,pollyloginforman dewaitingForInputsolo cuando la sesión aún tiene stdin con escritura habilitada y ha permanecido inactiva durante más tiempo que el umbral de espera de entrada (valor predeterminado: 15000 ms,OPENCLAW_PROCESS_INPUT_WAIT_IDLE_MS).process logusaoffset/limitbasados en líneas. Si se omiten ambos, devuelve las últimas 200 líneas con una indicación de paginación. Si se estableceoffsetpero nolimit, 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 larga y consultar su estado 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 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" }