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 (oder ai.openclaw.<profile> bei Verwendung von --profile/OPENCLAW_PROFILE; Legacy com.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.