Gateway-Lebenszyklus auf macOS
Die macOS-App verwaltet das Gateway standardmäßig über launchd und startet
das Gateway nicht als Child-Prozess. Sie versucht zunächst, sich mit einem bereits
laufenden Gateway auf dem konfigurierten Port zu verbinden; wenn keines erreichbar ist,
aktiviert sie den launchd-Service über die externe openclaw-CLI (keine eingebettete Runtime).
Das gibt dir zuverlässigen Auto-Start beim Login und Neustart bei Abstürzen.
Der Child-Prozess-Modus (Gateway direkt von der App gestartet) wird heute nicht verwendet. Wenn du eine engere Kopplung an die UI brauchst, starte das Gateway manuell im Terminal.
Standardverhalten (launchd)
- Die App installiert einen benutzerspezifischen LaunchAgent mit dem Label
ai.openclaw.gateway(oderai.openclaw.<profile>bei Verwendung von--profile/OPENCLAW_PROFILE; Legacycom.openclaw.*wird unterstützt). - Wenn der lokale Modus aktiviert ist, stellt die App sicher, dass der LaunchAgent geladen ist und startet das Gateway bei Bedarf.
- Logs werden in den launchd-Gateway-Log-Pfad geschrieben (sichtbar in den Debug-Einstellungen).
Gängige Befehle:
launchctl kickstart -k gui/$UID/ai.openclaw.gateway
launchctl bootout gui/$UID/ai.openclaw.gateway
Ersetze das Label durch ai.openclaw.<profile> bei Verwendung eines benannten Profils.
Unsignierte Dev-Builds
scripts/restart-mac.sh --no-sign ist für schnelle lokale Builds gedacht, wenn du keine
Signierungsschlüssel hast. Um zu verhindern, dass launchd auf eine unsignierte Relay-Binary zeigt:
- Schreibt
~/.openclaw/disable-launchagent.
Signierte Läufe von scripts/restart-mac.sh entfernen diesen Override, wenn der Marker
vorhanden ist. Zum manuellen Zurücksetzen:
rm ~/.openclaw/disable-launchagent
Attach-Only-Modus
Um die macOS-App zu zwingen, niemals launchd zu installieren oder zu verwalten, starte sie mit
--attach-only (oder --no-launchd). Das setzt ~/.openclaw/disable-launchagent,
sodass die App sich nur mit einem bereits laufenden Gateway verbindet. Dasselbe
Verhalten kannst du in den Debug-Einstellungen umschalten.
Remote-Modus
Der Remote-Modus startet niemals ein lokales Gateway. Die App nutzt einen SSH-Tunnel zum Remote-Host und verbindet sich über diesen Tunnel.
Warum wir launchd bevorzugen
- Auto-Start beim Login.
- Eingebaute Restart/KeepAlive-Semantik.
- Vorhersagbare Logs und Überwachung.
Falls ein echter Child-Prozess-Modus jemals wieder benötigt wird, sollte er als separater, expliziter Dev-Only-Modus dokumentiert werden.