Gateway
Strumento per l'esecuzione in background e la gestione dei processi
OpenClaw esegue comandi shell tramite lo strumento exec e mantiene in memoria le attività di lunga durata. Lo strumento process gestisce queste sessioni in background.
Strumento exec
Parametri chiave:
command(obbligatorio)yieldMs(predefinito 10000): passa automaticamente in background dopo questo ritardobackground(bool): passa immediatamente in backgroundtimeout(secondi, predefinitotools.exec.timeoutSec): termina il processo dopo questo timeout; impostatimeout: 0solo per disabilitare il timeout del processo exec per quella chiamataelevated(bool): esegui fuori dalla sandbox se la modalità elevata è abilitata/consentita (gatewayper impostazione predefinita, oppurenodequando la destinazione exec ènode)- Serve una vera TTY? Imposta
pty: true. workdir,env
Comportamento:
- Le esecuzioni in primo piano restituiscono direttamente l'output.
- Quando passa in background (esplicitamente o per timeout), lo strumento restituisce
status: "running"+sessionIde una breve coda. - Le esecuzioni in background e con
yieldMsereditanotools.exec.timeoutSeca meno che la chiamata non fornisca untimeoutesplicito. - L'output viene mantenuto in memoria finché la sessione non viene interrogata o cancellata.
- Se lo strumento
processnon è consentito,execviene eseguito in modo sincrono e ignorayieldMs/background. - I comandi exec avviati ricevono
OPENCLAW_SHELL=execper regole shell/profilo sensibili al contesto. - Per lavori di lunga durata che iniziano ora, avviali una sola volta e affidati al risveglio automatico al completamento quando è abilitato e il comando emette output o fallisce.
- Se il risveglio automatico al completamento non è disponibile, oppure ti serve una conferma
di riuscita silenziosa per un comando terminato correttamente senza output, usa
processper confermare il completamento. - Non emulare promemoria o follow-up ritardati con cicli
sleepo polling ripetuto; usa cron per il lavoro futuro.
Bridge dei processi figlio
Quando avvii processi figlio di lunga durata al di fuori degli strumenti exec/process (ad esempio riavvii della CLI o helper del gateway), collega l'helper di bridge dei processi figlio in modo che i segnali di terminazione vengano inoltrati e i listener vengano scollegati in caso di uscita/errore. Questo evita processi orfani su systemd e mantiene coerente il comportamento di arresto tra le piattaforme.
Override di ambiente:
PI_BASH_YIELD_MS: yield predefinito (ms)PI_BASH_MAX_OUTPUT_CHARS: limite dell'output in memoria (caratteri)OPENCLAW_BASH_PENDING_MAX_OUTPUT_CHARS: limite stdout/stderr in sospeso per stream (caratteri)PI_BASH_JOB_TTL_MS: TTL per le sessioni completate (ms, limitato a 1m–3h)
Configurazione (preferita):
tools.exec.backgroundMs(predefinito 10000)tools.exec.timeoutSec(predefinito 1800)tools.exec.cleanupMs(predefinito 1800000)tools.exec.notifyOnExit(predefinito true): accoda un evento di sistema + richiede heartbeat quando un exec in background termina.tools.exec.notifyOnExitEmptySuccess(predefinito false): quando true, accoda anche eventi di completamento per esecuzioni in background riuscite che non hanno prodotto output.
Strumento process
Azioni:
list: sessioni in esecuzione + completatepoll: scarica il nuovo output di una sessione (segnala anche lo stato di uscita)log: legge l'output aggregato (supportaoffset+limit)write: invia stdin (data,eofopzionale)send-keys: invia token di tasti espliciti o byte a una sessione supportata da PTYsubmit: invia Invio / ritorno a capo a una sessione supportata da PTYpaste: invia testo letterale, opzionalmente racchiuso in modalità incolla tra parentesikill: termina una sessione in backgroundclear: rimuove dalla memoria una sessione completataremove: termina se in esecuzione, altrimenti cancella se completata
Note:
- Solo le sessioni in background vengono elencate/persistite in memoria.
- Le sessioni vengono perse al riavvio del processo (nessuna persistenza su disco).
- I log delle sessioni vengono salvati nella cronologia chat solo se esegui
process poll/loge il risultato dello strumento viene registrato. processha ambito per agente; vede solo le sessioni avviate da quell'agente.- Usa
poll/logper stato, log, conferma di riuscita silenziosa oppure conferma del completamento quando il risveglio automatico al completamento non è disponibile. - Usa
write/send-keys/submit/paste/killquando ti serve input o intervento. process listinclude unnamederivato (verbo del comando + destinazione) per scansioni rapide.process logusaoffset/limitbasati sulle righe.- Quando sia
offsetsialimitsono omessi, restituisce le ultime 200 righe e include un suggerimento di paginazione. - Quando
offsetviene fornito elimitè omesso, restituisce daoffsetfino alla fine (senza limite a 200). - Il polling serve per lo stato su richiesta, non per pianificare cicli di attesa. Se il lavoro deve avvenire più tardi, usa invece cron.
Esempi
Esegui un'attività lunga e interrogala in seguito:
{ "tool": "exec", "command": "sleep 5 && echo done", "yieldMs": 1000 }
{ "tool": "process", "action": "poll", "sessionId": "<id>" }
Avvia immediatamente in background:
{ "tool": "exec", "command": "npm run build", "background": true }
Invia stdin:
{ "tool": "process", "action": "write", "sessionId": "<id>", "data": "y\n" }
Invia tasti PTY:
{ "tool": "process", "action": "send-keys", "sessionId": "<id>", "keys": ["C-c"] }
Invia la riga corrente:
{ "tool": "process", "action": "submit", "sessionId": "<id>" }
Incolla testo letterale:
{ "tool": "process", "action": "paste", "sessionId": "<id>", "text": "line1\nline2\n" }