macOS companion app
Zdalne sterowanie
Ten przepływ pozwala aplikacji macOS działać jako pełny zdalny pilot dla Gateway OpenClaw działającego na innym hoście (komputerze stacjonarnym/serwerze). To funkcja Zdalnie przez SSH (uruchamianie zdalne) aplikacji. Wszystkie funkcje: kontrole kondycji, przekazywanie Voice Wake oraz Web Chat, ponownie używają tej samej zdalnej konfiguracji SSH z Ustawienia → Ogólne.
Tryby
- Lokalnie (ten Mac): Wszystko działa na laptopie. SSH nie jest używane.
- 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 Tailscale Serve albo publiczny odwrotny proxy HTTPS).
Zdalne transporty
Tryb zdalny obsługuje dwa transporty:
- Tunel SSH (domyślnie): Używa
ssh -N -L ..., aby przekierować port Gateway do localhost. Gateway zobaczy adres IP węzła jako127.0.0.1, ponieważ tunel jest loopback. - Bezpośrednio (ws/wss): Łączy się wprost z adresem URL Gateway. Gateway widzi rzeczywisty adres IP klienta.
W trybie tunelu SSH wykryte nazwy hostów LAN/tailnet są zapisywane jako
gateway.remote.sshTarget. Aplikacja zachowuje gateway.remote.url na lokalnym
punkcie końcowym tunelu, na przykład ws://127.0.0.1:18789, dzięki czemu CLI, Web Chat i
lokalna usługa hosta węzła używają tego samego bezpiecznego transportu loopback.
Automatyzacja przeglądarki w trybie zdalnym należy do hosta węzła CLI, a nie do
natywnego węzła aplikacji macOS. Aplikacja uruchamia zainstalowaną usługę hosta węzła, gdy
jest to możliwe; jeśli potrzebujesz sterowania przeglądarką z tego Maca, zainstaluj/uruchom ją za pomocą
openclaw node install ... i openclaw node start (albo uruchom
openclaw node run ... na pierwszym planie), a następnie wybierz jako cel ten węzeł
obsługujący przeglądarkę.
Wymagania wstępne na zdalnym hoście
- Zainstaluj Node + pnpm i zbuduj/zainstaluj CLI OpenClaw (
pnpm install && pnpm build && pnpm link --global). - Upewnij się, że
openclawjest na PATH dla powłok nieinteraktywnych (w razie potrzeby utwórz dowiązanie symboliczne w/usr/local/binalbo/opt/homebrew/bin). - Otwórz SSH z uwierzytelnianiem kluczem. Zalecamy adresy IP Tailscale dla stabilnej osiągalności poza LAN.
Konfiguracja aplikacji macOS
- Otwórz Ustawienia → Ogólne.
- W sekcji OpenClaw działa wybierz Zdalnie przez SSH 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 ogłasza się przez Bonjour, wybierz go z wykrytej listy, aby automatycznie wypełnić to pole.
- URL Gateway (tylko bezpośrednio):
wss://gateway.example.ts.net(albows://...dla lokalnie/LAN). - Plik tożsamości (zaawansowane): ścieżka do klucza.
- Katalog główny projektu (zaawansowane): ścieżka zdalnego checkoutu używana dla poleceń.
- Ścieżka CLI (zaawansowane): opcjonalna ścieżka do uruchamialnego punktu wejścia/pliku binarnego
openclaw(wypełniana automatycznie, gdy jest ogłaszana).
- Naciśnij Testuj zdalnie. Sukces oznacza, że zdalne
openclaw status --jsondziała poprawnie. Niepowodzenia zwykle oznaczają problemy z PATH/CLI; kod wyjścia 127 oznacza, że CLI nie znaleziono zdalnie. - Kontrole kondycji i Web Chat będą teraz automatycznie działać przez ten tunel SSH.
Web Chat
- Tunel SSH: Web Chat łączy się z Gateway przez przekierowany port sterowania WebSocket (domyślnie 18789).
- Bezpośrednio (ws/wss): Web Chat łączy się wprost ze skonfigurowanym adresem URL Gateway.
- Nie ma już osobnego serwera HTTP WebChat.
Uprawnienia
- Zdalny host potrzebuje tych samych zatwierdzeń TCC co lokalny (Automation, Accessibility, Screen Recording, Microphone, Speech Recognition, Notifications). Uruchom wdrożenie na tej maszynie, aby nadać je raz.
- Węzły ogłaszają swój stan uprawnień przez
node.list/node.describe, aby agenci wiedzieli, co jest dostępne.
Uwagi dotyczące bezpieczeństwa
- Preferuj wiązania loopback na zdalnym hoście i łącz się przez SSH lub Tailscale.
- Tunelowanie SSH używa ścisłego sprawdzania klucza hosta; najpierw zaufaj kluczowi hosta, aby istniał w
~/.ssh/known_hosts. - Jeśli powiążesz Gateway z interfejsem innym niż loopback, wymagaj prawidłowego uwierzytelniania Gateway: tokenu, hasła albo odwrotnego proxy świadomego tożsamości z
gateway.auth.mode: "trusted-proxy". - Zobacz Bezpieczeństwo i Tailscale.
Przepływ logowania WhatsApp (zdalnie)
- Uruchom
openclaw channels login --verbosena zdalnym hoście. Zeskanuj kod QR za pomocą 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 na PATH dla powłok innych niż 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 czy Baileys jest zalogowany (
openclaw status --json). - Web Chat zablokowany: potwierdź, że Gateway działa na zdalnym hoście i że przekierowany port odpowiada portowi WS Gateway; UI wymaga zdrowego połączenia WS.
- Adres IP węzła 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.
- Panel działa, ale możliwości Maca są offline: oznacza to, że połączenie operatora/sterowania aplikacji jest zdrowe, ale połączenie węzła towarzyszącego nie jest połączone albo brakuje mu powierzchni poleceń. Otwórz sekcję urządzenia na pasku menu i sprawdź, czy Mac jest
paired · disconnected. Dla punktów końcowych Tailscale Servewss://*.ts.netaplikacja wykrywa nieaktualne starsze przypięcia liści TLS po rotacji certyfikatu, czyści nieaktualne przypięcie, gdy macOS ufa nowemu certyfikatowi, i ponawia próbę automatycznie. Jeśli certyfikat nie jest zaufany przez system albo host nie jest nazwą Tailscale Serve, sprawdź certyfikat albo przełącz na Zdalnie przez SSH. - Voice Wake: frazy wyzwalające są automatycznie przekazywane w trybie zdalnym; osobny mechanizm przekazywania 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 Glass
W 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.