Gateway
Hintergrundausführung und Prozess-Tool
OpenClaw führt Shell-Befehle über das exec-Tool aus und hält lang laufende Aufgaben im Arbeitsspeicher. Das process-Tool verwaltet diese Hintergrundsitzungen.
exec-Tool
Wichtige Parameter:
command(erforderlich)yieldMs(Standard 10000): nach dieser Verzögerung automatisch in den Hintergrundbackground(bool): sofort im Hintergrund ausführentimeout(Sekunden, Standardtools.exec.timeoutSec): beendet den Prozess nach diesem Timeout; setzen Sietimeout: 0nur, um den Timeout desexec-Prozesses für diesen Aufruf zu deaktivierenelevated(bool): außerhalb der Sandbox ausführen, wenn der erhöhte Modus aktiviert/erlaubt ist (standardmäßiggatewayodernode, wenn dasexec-Zielnodeist)- Benötigen Sie ein echtes TTY? Setzen Sie
pty: true. workdir,env
Verhalten:
- Vordergrundausführungen geben die Ausgabe direkt zurück.
- Bei Ausführung im Hintergrund (explizit oder durch Timeout) gibt das Tool
status: "running"+sessionIdund ein kurzes Ende der Ausgabe zurück. - Hintergrund- und
yieldMs-Ausführungen übernehmentools.exec.timeoutSec, sofern der Aufruf kein explizitestimeoutangibt. - Ausgabe wird im Arbeitsspeicher gehalten, bis die Sitzung abgefragt oder gelöscht wird.
- Wenn das
process-Tool nicht erlaubt ist, läuftexecsynchron und ignoriertyieldMs/background. - Gestartete
exec-Befehle erhaltenOPENCLAW_SHELL=execfür kontextbewusste Shell-/Profilregeln. - Starten Sie lang laufende Arbeit, die jetzt beginnt, einmal und verlassen Sie sich auf das automatische Abschluss-Wecken, wenn es aktiviert ist und der Befehl Ausgabe erzeugt oder fehlschlägt.
- Wenn das automatische Abschluss-Wecken nicht verfügbar ist oder Sie eine Bestätigung für stillen Erfolg
für einen Befehl benötigen, der sauber ohne Ausgabe beendet wurde, verwenden Sie
process, um den Abschluss zu bestätigen. - Emulieren Sie keine Erinnerungen oder verzögerten Folgeaktionen mit
sleep-Schleifen oder wiederholtem Polling; verwenden Sie Cron für zukünftige Arbeit.
Child-Prozess-Überbrückung
Wenn lang laufende Child-Prozesse außerhalb der exec-/process-Tools gestartet werden (zum Beispiel CLI-Neustarts oder Gateway-Hilfsprozesse), hängen Sie den Bridge-Helfer für Child-Prozesse an, damit Beendigungssignale weitergeleitet und Listener bei Exit/Fehler entfernt werden. Dies vermeidet verwaiste Prozesse unter systemd und hält das Shutdown-Verhalten plattformübergreifend konsistent.
Umgebungsüberschreibungen:
PI_BASH_YIELD_MS: Standard-Yield (ms)PI_BASH_MAX_OUTPUT_CHARS: Ausgabeobergrenze im Arbeitsspeicher (Zeichen)OPENCLAW_BASH_PENDING_MAX_OUTPUT_CHARS: Obergrenze für ausstehende stdout/stderr je Stream (Zeichen)PI_BASH_JOB_TTL_MS: TTL für abgeschlossene Sitzungen (ms, begrenzt auf 1m–3h)
Konfiguration (bevorzugt):
tools.exec.backgroundMs(Standard 10000)tools.exec.timeoutSec(Standard 1800)tools.exec.cleanupMs(Standard 1800000)tools.exec.notifyOnExit(Standard true): reiht ein Systemereignis ein + fordert einen Heartbeat an, wenn ein im Hintergrund ausgeführtesexecendet.tools.exec.notifyOnExitEmptySuccess(Standard false): wenn true, werden auch Abschlussereignisse für erfolgreiche im Hintergrund ausgeführte Läufe eingereiht, die keine Ausgabe erzeugt haben.
process-Tool
Aktionen:
list: laufende + abgeschlossene Sitzungenpoll: neue Ausgabe für eine Sitzung abrufen (meldet auch den Exit-Status)log: aggregierte Ausgabe lesen (unterstütztoffset+limit)write: stdin senden (data, optionaleof)send-keys: explizite Tastentoken oder Bytes an eine PTY-gestützte Sitzung sendensubmit: Eingabetaste / Wagenrücklauf an eine PTY-gestützte Sitzung sendenpaste: literalen Text senden, optional in Bracketed-Paste-Modus eingeschlossenkill: eine Hintergrundsitzung beendenclear: eine abgeschlossene Sitzung aus dem Arbeitsspeicher entfernenremove: beenden, falls laufend, andernfalls löschen, falls abgeschlossen
Hinweise:
- Nur Hintergrundsitzungen werden aufgelistet/im Arbeitsspeicher persistiert.
- Sitzungen gehen bei einem Prozessneustart verloren (keine Persistenz auf Datenträger).
- Sitzungsprotokolle werden nur im Chatverlauf gespeichert, wenn Sie
process poll/logausführen und das Tool-Ergebnis aufgezeichnet wird. processist pro Agent abgegrenzt; es sieht nur Sitzungen, die von diesem Agent gestartet wurden.- Verwenden Sie
poll/logfür Status, Protokolle, Bestätigung für stillen Erfolg oder Abschlussbestätigung, wenn das automatische Abschluss-Wecken nicht verfügbar ist. - Verwenden Sie
write/send-keys/submit/paste/kill, wenn Sie Eingabe oder Eingreifen benötigen. process listenthält einen abgeleitetenname(Befehlsverb + Ziel) für schnelle Scans.process logverwendet zeilenbasiertesoffset/limit.- Wenn sowohl
offsetals auchlimitweggelassen werden, werden die letzten 200 Zeilen zurückgegeben und ein Paging-Hinweis eingeschlossen. - Wenn
offsetangegeben undlimitweggelassen wird, wird vonoffsetbis zum Ende zurückgegeben (nicht auf 200 begrenzt). - Polling dient dem Status auf Abruf, nicht der Planung von Warteschleifen. Wenn die Arbeit später stattfinden soll, verwenden Sie stattdessen Cron.
Beispiele
Eine lange Aufgabe ausführen und später abfragen:
{ "tool": "exec", "command": "sleep 5 && echo done", "yieldMs": 1000 }
{ "tool": "process", "action": "poll", "sessionId": "<id>" }
Sofort im Hintergrund starten:
{ "tool": "exec", "command": "npm run build", "background": true }
stdin senden:
{ "tool": "process", "action": "write", "sessionId": "<id>", "data": "y\n" }
PTY-Tasten senden:
{ "tool": "process", "action": "send-keys", "sessionId": "<id>", "keys": ["C-c"] }
Aktuelle Zeile absenden:
{ "tool": "process", "action": "submit", "sessionId": "<id>" }
Literalen Text einfügen:
{ "tool": "process", "action": "paste", "sessionId": "<id>", "text": "line1\nline2\n" }