OpenClaw macOS-Begleiter (Menüleiste + Gateway-Broker)
Die macOS-App ist der Menüleisten-Begleiter für OpenClaw. Sie verwaltet Berechtigungen, verwaltet/stellt lokal eine Verbindung zum Gateway her (launchd oder manuell) und stellt macOS- Funktionen dem Agenten als Node zur Verfügung.Was sie macht
- Zeigt native Benachrichtigungen und Status in der Menüleiste an.
- Verwaltet TCC-Aufforderungen (Benachrichtigungen, Bedienungshilfen, Bildschirmaufnahme, Mikrofon, Speech Recognition, Automation/AppleScript).
- Führt das Gateway aus oder verbindet sich damit (lokal oder remote).
- Stellt nur unter macOS verfügbare Tools bereit (Canvas, Kamera, Bildschirmaufnahme,
system.run). - Startet den lokalen Node-Host-Service im Remote-Modus (launchd) und stoppt ihn im Local-Modus.
- Hostet optional PeekabooBridge für UI-Automatisierung.
- Installiert auf Anfrage die globale CLI (
openclaw) über npm, pnpm oder bun (die App bevorzugt npm, dann pnpm, dann bun; Node bleibt die empfohlene Gateway-Laufzeitumgebung).
Local- vs. Remote-Modus
- Local (Standard): Die App stellt eine Verbindung zu einem laufenden lokalen Gateway her, falls vorhanden;
andernfalls aktiviert sie den launchd-Service über
openclaw gateway install. - Remote: Die App verbindet sich über SSH/Tailscale mit einem Gateway und startet niemals einen lokalen Prozess. Die App startet den lokalen Node-Host-Service, damit das Remote-Gateway diesen Mac erreichen kann. Die App startet das Gateway nicht als Child-Prozess. Bei der Gateway-Erkennung werden jetzt Tailscale MagicDNS-Namen gegenüber rohen Tailnet-IP-Adressen bevorzugt, sodass sich die Mac-App zuverlässiger erholt, wenn sich Tailnet-IP-Adressen ändern.
Launchd-Steuerung
Die App verwaltet einen LaunchAgent pro Benutzer mit der Bezeichnungai.openclaw.gateway
(oder ai.openclaw.<profile> bei Verwendung von --profile/OPENCLAW_PROFILE; das alte com.openclaw.* wird weiterhin entladen).
ai.openclaw.<profile>, wenn Sie ein benanntes Profil ausführen.
Wenn der LaunchAgent nicht installiert ist, aktivieren Sie ihn in der App oder führen Sie
openclaw gateway install aus.
Node-Funktionen (mac)
Die macOS-App stellt sich selbst als Node dar. Häufige Befehle:- Canvas:
canvas.present,canvas.navigate,canvas.eval,canvas.snapshot,canvas.a2ui.* - Kamera:
camera.snap,camera.clip - Bildschirm:
screen.record - System:
system.run,system.notify
permissions-Zuordnung, damit Agenten entscheiden können, was erlaubt ist.
Node-Service + App-IPC:
- Wenn der Headless-Node-Host-Service läuft (Remote-Modus), verbindet er sich über Gateway-WS als Node.
system.runwird in der macOS-App (UI-/TCC-Kontext) über einen lokalen Unix-Socket ausgeführt; Aufforderungen und Ausgabe bleiben in der App.
Exec approvals (system.run)
system.run wird in der macOS-App durch Exec approvals gesteuert (Einstellungen → Exec approvals).
Sicherheit + Nachfrage + Allowlist werden lokal auf dem Mac gespeichert in:
allowlist-Einträge sind Glob-Muster für aufgelöste Binärpfade.- Roher Shell-Befehlstext, der Shell-Steuer- oder Erweiterungssyntax enthält (
&&,||,;,|,`,$,<,>,(,)), wird als Nichttreffer in der Allowlist behandelt und erfordert eine ausdrückliche Genehmigung (oder die Aufnahme der Shell-Binärdatei in die Allowlist). - Die Auswahl von „Always Allow“ in der Aufforderung fügt diesen Befehl der Allowlist hinzu.
- Umgebungsüberschreibungen für
system.runwerden gefiltert (PATH,DYLD_*,LD_*,NODE_OPTIONS,PYTHON*,PERL*,RUBYOPT,SHELLOPTS,PS4werden entfernt) und dann mit der Umgebung der App zusammengeführt. - Für Shell-Wrapper (
bash|sh|zsh ... -c/-lc) werden anfragebezogene Umgebungsüberschreibungen auf eine kleine explizite Allowlist reduziert (TERM,LANG,LC_*,COLORTERM,NO_COLOR,FORCE_COLOR). - Bei Immer-erlauben-Entscheidungen im Allowlist-Modus speichern bekannte Dispatch-Wrapper (
env,nice,nohup,stdbuf,timeout) innere ausführbare Pfade statt Wrapper-Pfade. Wenn das Entpacken nicht sicher ist, wird kein Allowlist-Eintrag automatisch gespeichert.
Deep Links
Die App registriert das URL-Schemaopenclaw:// für lokale Aktionen.
openclaw://agent
Löst eine Gateway-agent-Anfrage aus.
OC_I18N_900004
Abfrageparameter:
message(erforderlich)sessionKey(optional)thinking(optional)deliver/to/channel(optional)timeoutSeconds(optional)key(optional unbeaufsichtigter Modus-Schlüssel)
- Ohne
keyfordert die App eine Bestätigung an. - Ohne
keyerzwingt die App ein kurzes Nachrichtenlimit für die Bestätigungsaufforderung und ignoriertdeliver/to/channel. - Mit einem gültigen
keyläuft die Ausführung unbeaufsichtigt (gedacht für persönliche Automatisierungen).
Onboarding-Ablauf (typisch)
- Installieren und starten Sie OpenClaw.app.
- Schließen Sie die Berechtigungs-Checkliste ab (TCC-Aufforderungen).
- Stellen Sie sicher, dass der Local-Modus aktiv ist und das Gateway läuft.
- Installieren Sie die CLI, wenn Sie Terminalzugriff möchten.
Platzierung des Statusverzeichnisses (macOS)
Vermeiden Sie es, Ihr OpenClaw-Statusverzeichnis in iCloud oder anderen cloud-synchronisierten Ordnern abzulegen. Synchronisierte Pfade können Latenz hinzufügen und gelegentlich Dateisperr-/Synchronisierungs-Rennen für Sitzungen und Anmeldedaten verursachen. Bevorzugen Sie einen lokalen, nicht synchronisierten Statuspfad wie: OC_I18N_900005 Wennopenclaw doctor einen Statuspfad unter folgenden Verzeichnissen erkennt:
~/Library/Mobile Documents/com~apple~CloudDocs/...~/Library/CloudStorage/...
Build- und Entwicklungsablauf (nativ)
cd apps/macos && swift buildswift run OpenClaw(oder Xcode)- App paketieren:
scripts/package-mac-app.sh
Gateway-Konnektivität debuggen (macOS-CLI)
Verwenden Sie die Debug-CLI, um denselben Gateway-WebSocket-Handshake und dieselbe Erkennungslogik zu testen, die auch die macOS-App verwendet, ohne die App zu starten. OC_I18N_900006 Verbindungsoptionen:--url <ws://host:port>: Konfiguration überschreiben--mode <local|remote>: aus der Konfiguration auflösen (Standard: Konfiguration oder local)--probe: einen neuen Health-Check erzwingen--timeout <ms>: Anfrage-Timeout (Standard:15000)--json: strukturierte Ausgabe zum Vergleichen
--include-local: Gateways einschließen, die als „lokal“ herausgefiltert würden--timeout <ms>: Gesamtzeitfenster für die Erkennung (Standard:2000)--json: strukturierte Ausgabe zum Vergleichen
openclaw gateway discover --json, um festzustellen, ob sich die
Erkennungspipeline der macOS-App (local. plus die konfigurierte Wide-Area-Domain, mit
Wide-Area- und Tailscale-Serve-Fallbacks) von
der dns-sd-basierten Erkennung der Node-CLI unterscheidet.
Remote-Verbindungsverkabelung (SSH-Tunnel)
Wenn die macOS-App im Remote-Modus läuft, öffnet sie einen SSH-Tunnel, damit lokale UI- Komponenten mit einem Remote-Gateway kommunizieren können, als wäre es auf localhost.Kontrolltunnel (Gateway-WebSocket-Port)
- Zweck: Health-Checks, Status, Web Chat, Konfiguration und andere Control-Plane-Aufrufe.
- Lokaler Port: der Gateway-Port (Standard
18789), immer stabil. - Remote-Port: derselbe Gateway-Port auf dem Remote-Host.
- Verhalten: kein zufälliger lokaler Port; die App verwendet einen vorhandenen gesunden Tunnel wieder oder startet ihn bei Bedarf neu.
- SSH-Form:
ssh -N -L <local>:127.0.0.1:<remote>mit BatchMode + ExitOnForwardFailure + Keepalive-Optionen. - IP-Berichterstattung: Der SSH-Tunnel verwendet Loopback, daher sieht das Gateway die Node-
IP als
127.0.0.1. Verwenden Sie den Transport Direct (ws/wss), wenn die echte Client- IP angezeigt werden soll (siehe macOS-Remotezugriff).