Hintergrund-Exec + Prozess-Tool
OpenClaw führt Shell-Befehle über das exec-Tool aus und hält lang laufende Aufgaben im Speicher. Das process-Tool verwaltet diese Hintergrundsitzungen.
exec-Tool
Wichtige Parameter:
command(erforderlich)yieldMs(Standard 10000): automatisches Hintergrundversetzen nach dieser Verzögerungbackground(bool): sofort in den Hintergrund versetzentimeout(Sekunden, Standard 1800): Prozess nach diesem Timeout beendenelevated(bool): auf dem Host ausführen, wenn Elevated-Modus aktiviert/erlaubt ist- Echtes TTY erforderlich? Setze
pty: true. workdir,env
Verhalten:
- Vordergrund-Ausführungen geben die Ausgabe direkt zurück.
- Bei Hintergrundversetzung (explizit oder Timeout) gibt das Tool
status: "running"+sessionIdsowie einen kurzen Tail zurück. - Die Ausgabe wird im Speicher gehalten, bis die Sitzung abgefragt oder gelöscht wird.
- Falls das
process-Tool nicht erlaubt ist, läuftexecsynchron und ignoriertyieldMs/background. - Gestartete exec-Befehle erhalten
OPENCLAW_SHELL=execfür kontextsensitive Shell-/Profil-Regeln.
Child-Process-Bridging
Wenn lang laufende Kindprozesse außerhalb der exec/process-Tools gestartet werden (z. B. CLI-Neustarts oder Gateway-Helper), hänge den Child-Process-Bridge-Helper an, damit Beendigungssignale weitergeleitet und Listener bei Exit/Fehler getrennt werden. Das verhindert verwaiste Prozesse unter systemd und sorgt für ein konsistentes Shutdown-Verhalten über alle Plattformen hinweg.
Umgebungsvariablen-Overrides:
PI_BASH_YIELD_MS: Standard-Yield (ms)PI_BASH_MAX_OUTPUT_CHARS: Ausgabe-Cap im Speicher (Zeichen)OPENCLAW_BASH_PENDING_MAX_OUTPUT_CHARS: Cap für wartende stdout/stderr pro Stream (Zeichen)PI_BASH_JOB_TTL_MS: TTL für beendete 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): System-Event in die Warteschlange stellen + Heartbeat anfordern, wenn ein im Hintergrund laufender exec-Prozess beendet wird.tools.exec.notifyOnExitEmptySuccess(Standard false): wenn true, werden auch Abschluss-Events für erfolgreiche Hintergrund-Läufe ohne Ausgabe in die Warteschlange gestellt.
process-Tool
Aktionen:
list: laufende + beendete Sitzungenpoll: neue Ausgabe einer Sitzung abrufen (meldet auch den Exit-Status)log: aggregierte Ausgabe lesen (unterstütztoffset+limit)write: stdin senden (data, optionaleof)kill: Hintergrundsitzung beendenclear: beendete Sitzung aus dem Speicher entfernenremove: falls laufend beenden, ansonsten beendete Sitzung löschen
Hinweise:
- Nur Hintergrundsitzungen werden im Speicher aufgelistet/gehalten.
- Sitzungen gehen bei Prozessneustart verloren (keine Festplatten-Persistenz).
- Sitzungsprotokolle werden nur dann in den Chatverlauf geschrieben, wenn du
process poll/logausführst und das Tool-Ergebnis aufgezeichnet wird. processist pro Agent isoliert; es zeigt nur Sitzungen an, die von diesem Agenten gestartet wurden.process listenthält einen abgeleitetenname(Befehlsverb + Ziel) zum schnellen Überblick.process logverwendet zeilenbasiertesoffset/limit.- Wenn sowohl
offsetals auchlimitweggelassen werden, werden die letzten 200 Zeilen zurückgegeben, inklusive eines Paging-Hinweises. - Wenn
offsetangegeben undlimitweggelassen wird, wird aboffsetbis zum Ende zurückgegeben (nicht auf 200 begrenzt).
Beispiele
Einen lang laufenden Task starten 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" }