macOS companion app
Zdalne sterowanie
Ten przepływ pozwala aplikacji macOS działać jako pełny pilot zdalnego sterowania dla OpenClaw gateway uruchomionego na innym hoście (komputerze stacjonarnym/serwerze). Aplikacja może łączyć się bezpośrednio z zaufanymi adresami URL Gateway w sieci LAN/Tailnet albo zarządzać tunelem SSH, gdy zdalny Gateway jest dostępny tylko przez loopback. Kontrole kondycji, przekazywanie wybudzania głosem i czat WWW używają tej samej zdalnej konfiguracji z Ustawienia → Ogólne.
Tryby
- Lokalnie (ten Mac): Wszystko działa na laptopie. Bez udziału SSH.
- Zdalnie przez SSH (domyślnie): Polecenia OpenClaw są wykonywane na zdalnym hoście. Aplikacja na Maca otwiera połączenie SSH z
-o BatchMode, wybraną tożsamością/kluczem oraz lokalnym przekierowaniem portu. - Zdalnie bezpośrednio (ws/wss): Bez tunelu SSH. Aplikacja na Maca łączy się bezpośrednio z adresem URL Gateway (na przykład przez LAN, Tailscale, Tailscale Serve albo publiczny odwrotny serwer proxy HTTPS).
Transporty zdalne
Tryb zdalny obsługuje dwa transporty:
- Tunel SSH (domyślnie): Używa
ssh -N -L ..., aby przekierować port Gateway na localhost. Gateway zobaczy IP Node jako127.0.0.1, ponieważ tunel używa loopback. - Bezpośrednio (ws/wss): Łączy się prosto z adresem URL Gateway. Gateway widzi rzeczywisty adres IP klienta.
Aplikacja wyłącza multipleksowanie połączeń SSH i przechodzenie w tło po uwierzytelnieniu dla należących do aplikacji procesów SSH, aby mogła monitorować i restartować dokładnie ten proces, nawet gdy wybrany alias włącza ControlMaster lub ForkAfterAuthentication.
Weryfikacja klucza hosta SSH jest domyślnie rygorystyczna, ponieważ poświadczenia Gateway przechodzą przez ten tunel. Dla zarządzanego aliasu SSH, którego zachowania zaufania chcesz jawnie używać, włącz to przez openclaw-mac configure-remote --ssh-target <alias> --ssh-host-key-policy openssh albo ustaw gateway.remote.sshHostKeyPolicy na "openssh". To jawne włączenie używa efektywnej polityki kluczy hosta OpenSSH; najpierw sprawdź alias oraz każdą pasującą konfigurację Host * lub systemową. Zmiana celu SSH w aplikacji albo przez configure-remote resetuje politykę do strict, chyba że jawnie włączysz ją ponownie.
W trybie tunelu SSH wykryte nazwy hostów LAN/tailnet są zapisywane jako
gateway.remote.sshTarget. Aplikacja utrzymuje gateway.remote.url na lokalnym
punkcie końcowym tunelu, na przykład ws://127.0.0.1:18789, dzięki czemu CLI, czat WWW i
lokalna usługa hosta Node używają tego samego bezpiecznego transportu loopback.
Gdy wykrywanie zwraca zarówno surowe adresy IP Tailnet, jak i stabilne nazwy hostów, aplikacja
preferuje nazwy Tailscale MagicDNS lub LAN, aby zdalne połączenia lepiej przetrwały
zmiany adresów.
Jeśli lokalny port tunelu różni się od zdalnego portu Gateway, ustaw
gateway.remote.remotePort na port na zdalnym hoście.
Automatyzacja przeglądarki w trybie zdalnym należy do hosta Node CLI, a nie do
natywnego Node aplikacji macOS. Aplikacja uruchamia zainstalowaną usługę hosta Node, gdy
to możliwe; jeśli potrzebujesz sterowania przeglądarką z tego Maca, zainstaluj/uruchom ją przez
openclaw node install ... i openclaw node start (albo uruchom
openclaw node run ... na pierwszym planie), a następnie wybierz ten Node obsługujący
przeglądarkę jako cel.
Wymagania wstępne na zdalnym hoście
- Zainstaluj Node + pnpm i zbuduj/zainstaluj OpenClaw CLI (
pnpm install && pnpm build && pnpm link --global). - Upewnij się, że
openclawjest w PATH dla powłok nieinteraktywnych (w razie potrzeby utwórz dowiązanie symboliczne w/usr/local/binlub/opt/homebrew/bin). - Tylko dla transportu SSH: otwórz SSH z uwierzytelnianiem kluczem. Zalecamy adresy IP Tailscale dla stabilnej osiągalności poza LAN.
Konfiguracja aplikacji macOS
Aby wstępnie skonfigurować aplikację bez przepływu powitalnego:
openclaw-mac configure-remote \ --ssh-target user@gateway.local \ --local-port 18789 \ --remote-port 18789 \ --token "$OPENCLAW_GATEWAY_TOKEN"Dla Gateway już osiągalnego w zaufanej sieci LAN lub Tailnet całkowicie pomiń SSH:
openclaw-mac configure-remote \ --direct-url ws://192.168.0.202:18789 \ --token "$OPENCLAW_GATEWAY_TOKEN"To zapisuje zdalną konfigurację, oznacza wdrażanie jako ukończone i pozwala aplikacji zarządzać wybranym transportem po uruchomieniu.
- Otwórz Ustawienia → Ogólne.
- W sekcji OpenClaw działa wybierz Zdalnie i ustaw:
- Transport: Tunel SSH albo Bezpośrednio (ws/wss).
- Cel SSH:
user@host(opcjonalnie:port).- Jeśli Gateway jest w tej samej sieci LAN i rozgłasza się przez Bonjour, wybierz go z wykrytej listy, aby automatycznie uzupełnić to pole.
- Adres URL Gateway (tylko Bezpośrednio):
wss://gateway.example.ts.net(albows://...dla lokalnego/LAN). - Plik tożsamości (zaawansowane): ścieżka do klucza.
- Katalog główny projektu (zaawansowane): ścieżka do zdalnego checkoutu używana dla poleceń.
- Ścieżka CLI (zaawansowane): opcjonalna ścieżka do uruchamialnego punktu wejścia/pliku binarnego
openclaw(uzupełniana automatycznie, gdy jest rozgłaszana).
- Naciśnij Testuj zdalne. Sukces oznacza, że zdalne
openclaw status --jsondziała poprawnie. Awarie zwykle oznaczają problemy z PATH/CLI; kod wyjścia 127 oznacza, że CLI nie znaleziono zdalnie. - Kontrole kondycji i czat WWW będą teraz automatycznie działać przez wybrany transport.
Czat WWW
- Tunel SSH: Czat WWW łączy się z Gateway przez przekierowany port sterowania WebSocket (domyślnie 18789).
- Bezpośrednio (ws/wss): Czat WWW łączy się prosto ze skonfigurowanym adresem URL Gateway.
- Nie ma już osobnego serwera HTTP WebChat.
Uprawnienia
- Zdalny host potrzebuje tych samych zgód TCC co lokalny (Automatyzacja, Dostępność, Nagrywanie ekranu, Mikrofon, Rozpoznawanie mowy, Powiadomienia). Uruchom wdrażanie na tej maszynie, aby przyznać je raz.
- Node rozgłaszają swój stan uprawnień przez
node.list/node.describe, dzięki czemu agenci wiedzą, co jest dostępne.
Uwagi dotyczące bezpieczeństwa
- Preferuj wiązania loopback na zdalnym hoście i łącz się przez SSH, Tailscale Serve albo zaufany bezpośredni adres URL Tailnet/LAN.
- Tunelowanie SSH domyślnie wymaga już zaufanego klucza hosta. Najpierw zaufaj kluczowi hosta, aby istniał w skonfigurowanym pliku known-hosts, albo jawnie wybierz
gateway.remote.sshHostKeyPolicy: "openssh"dla zarządzanego aliasu, którego politykę zaufania OpenSSH akceptujesz. - Jeśli wiążesz Gateway z interfejsem innym niż loopback, wymagaj poprawnego uwierzytelniania Gateway: tokenu, hasła albo odwrotnego serwera proxy świadomego tożsamości z
gateway.auth.mode: "trusted-proxy". - Zobacz Bezpieczeństwo i Tailscale.
Przepływ logowania WhatsApp (zdalny)
- Uruchom
openclaw channels login --verbosena zdalnym hoście. Zeskanuj kod QR przez WhatsApp na telefonie. - Uruchom logowanie ponownie na tym hoście, jeśli uwierzytelnienie wygaśnie. Kontrola kondycji pokaże problemy z połączeniem.
Rozwiązywanie problemów
- kod wyjścia 127 / nie znaleziono:
openclawnie jest w PATH dla powłok bez logowania. Dodaj go do/etc/paths, pliku rc powłoki albo utwórz dowiązanie symboliczne w/usr/local/bin//opt/homebrew/bin. - Sonda kondycji nie powiodła się: sprawdź osiągalność SSH, PATH oraz to, czy Baileys jest zalogowany (
openclaw status --json). - Czat WWW zablokowany: potwierdź, że Gateway działa na zdalnym hoście i że przekierowany port pasuje do portu WS Gateway; interfejs wymaga zdrowego połączenia WS.
- IP Node pokazuje 127.0.0.1: oczekiwane przy tunelu SSH. Przełącz Transport na Bezpośrednio (ws/wss), jeśli chcesz, aby Gateway widział rzeczywisty adres IP klienta.
- Dashboard działa, ale możliwości Maca są offline: oznacza to, że połączenie operatora/sterowania aplikacji jest zdrowe, ale połączenie towarzyszącego Node nie jest połączone albo brakuje mu powierzchni poleceń. Otwórz sekcję urządzenia na pasku menu i sprawdź, czy Mac ma stan
paired · disconnected. Dla punktów końcowych Tailscale Servewss://*.ts.netaplikacja wykrywa nieaktualne starsze przypięcia liścia TLS po rotacji certyfikatu, czyści nieaktualne przypięcie, gdy macOS ufa nowemu certyfikatowi, i automatycznie ponawia próbę. Jeśli certyfikat nie jest zaufany przez system albo host nie jest nazwą Tailscale Serve, ustawgateway.remote.tlsFingerprintna oczekiwany odcisk certyfikatu, sprawdź certyfikat albo przełącz na Zdalnie przez SSH. - Wybudzanie głosem: frazy wyzwalające są automatycznie przekazywane w trybie zdalnym; osobny mechanizm przekazujący nie jest potrzebny.
Dźwięki powiadomień
Wybieraj dźwięki dla poszczególnych powiadomień ze skryptów za pomocą openclaw i node.invoke, np.:
openclaw nodes notify --node <id> --title "Ping" --body "Remote gateway ready" --sound GlassW aplikacji nie ma już globalnego przełącznika „domyślny dźwięk”; wywołujący wybierają dźwięk (albo jego brak) dla każdego żądania.