Nodes
Węzeł to urządzenie towarzyszące (macOS/iOS/Android/headless), które łączy się z WebSocket Gateway (ten sam port co operatorzy) z użyciemrole: "node" i udostępnia powierzchnię poleceń (np. canvas.*, camera.*, system.*) przez node.invoke. Szczegóły protokołu: Gateway protocol.
Transport starszy: Bridge protocol (TCP JSONL; przestarzały/usunięty dla bieżących węzłów).
macOS może również działać w trybie węzła: aplikacja w pasku menu łączy się z serwerem WS Gateway i udostępnia lokalne polecenia canvas/kamery jako węzeł (dzięki czemu openclaw nodes … działa na tym Macu).
Uwagi:
- Węzły są peryferiami, a nie gatewayami. Nie uruchamiają usługi gateway.
- Wiadomości z Telegram/WhatsApp/etc. trafiają do gatewaya, a nie do węzłów.
- Procedura rozwiązywania problemów: /nodes/troubleshooting
Parowanie + status
Węzły WS używają parowania urządzeń. Węzły przedstawiają tożsamość urządzenia podczasconnect; Gateway
tworzy żądanie parowania urządzenia dla role: node. Zatwierdź przez CLI urządzenia (lub UI).
Szybkie CLI:
nodes statusoznacza węzeł jako sparowany, gdy jego rola parowania urządzenia obejmujenode.node.pair.*(CLI:openclaw nodes pending/approve/reject) to oddzielny, należący do gatewaya magazyn parowań węzłów; nie blokuje on handshake WSconnect.
Zdalny host węzła (system.run)
Użyj hosta węzła, gdy Gateway działa na jednej maszynie, a chcesz, aby polecenia wykonywały się na innej. Model nadal komunikuje się z gatewayem; gateway przekazuje wywołaniaexec do hosta węzła, gdy wybrano host=node.
Co działa gdzie
- Host Gateway: odbiera wiadomości, uruchamia model, routuje wywołania narzędzi.
- Host węzła: wykonuje
system.run/system.whichna maszynie węzła. - Zatwierdzenia: egzekwowane na hoście węzła przez
~/.openclaw/exec-approvals.json.
Uruchom host węzła (pierwszy plan)
Na maszynie węzła:Zdalny gateway przez tunel SSH (wiązanie loopback)
Jeśli Gateway wiąże się z loopback (gateway.bind=loopback, domyślnie w trybie lokalnym),
zdalne hosty węzłów nie mogą połączyć się bezpośrednio. Utwórz tunel SSH i wskaż
hostowi węzła lokalny koniec tunelu.
Przykład (host węzła -> host gateway):
- Token to
gateway.auth.tokenz konfiguracji gatewaya (~/.openclaw/openclaw.jsonna hoście gatewaya). openclaw node runodczytujeOPENCLAW_GATEWAY_TOKENdo uwierzytelniania.
Uruchom host węzła (usługa)
Parowanie + nazwa
Na hoście gatewaya:--display-namenaopenclaw node run/openclaw node install(utrwala się w~/.openclaw/node.jsonna węźle).openclaw nodes rename --node <id|name|ip> --name "Build Node"(nadpisanie po stronie gatewaya).
Lista dozwolonych poleceń
Zatwierdzenia exec są per host węzła. Dodaj wpisy listy dozwolonych z gatewaya:~/.openclaw/exec-approvals.json.
Skieruj exec do węzła
Skonfiguruj domyślne (konfiguracja gatewaya):exec z host=node uruchamia się na hoście węzła (z zastrzeżeniem
listy dozwolonych/zatwierdzeń węzła).
Powiązane:
Wywoływanie poleceń
Niskopoziomowo (surowe RPC):Zrzuty ekranu (migawki canvas)
Jeśli węzeł wyświetla Canvas (WebView),canvas.snapshot zwraca { format, base64 }.
Pomocnik CLI (zapisuje do pliku tymczasowego i wypisuje MEDIA:<path>):
Sterowanie canvas
canvas presentakceptuje URL-e lub lokalne ścieżki plików (--target), plus opcjonalne--x/--y/--width/--heightdo pozycjonowania.canvas evalakceptuje wbudowany JS (--js) lub argument pozycyjny.
A2UI (Canvas)
- Obsługiwany jest wyłącznie A2UI v0.8 JSONL (v0.9/createSurface jest odrzucany).
Zdjęcia + wideo (kamera węzła)
Zdjęcia (jpg):
mp4):
- Węzeł musi być na pierwszym planie dla
canvas.*icamera.*(wywołania w tle zwracająNODE_BACKGROUND_UNAVAILABLE). - Czas trwania klipu jest ograniczany (obecnie
<= 60s), aby uniknąć zbyt dużych ładunków base64. - Android poprosi o uprawnienia
CAMERA/RECORD_AUDIO, gdy to możliwe; odmowa uprawnień kończy się*_PERMISSION_REQUIRED.
Nagrania ekranu (węzły)
Węzły udostępniająscreen.record (mp4). Przykład:
screen.recordwymaga, aby aplikacja węzła była na pierwszym planie.- Android wyświetli systemowy monit o przechwytywanie ekranu przed nagrywaniem.
- Nagrania ekranu są ograniczane do
<= 60s. --no-audiowyłącza przechwytywanie mikrofonu (obsługiwane na iOS/Android; macOS używa dźwięku z przechwytywania systemowego).- Użyj
--screen <index>, aby wybrać ekran, gdy dostępnych jest wiele wyświetlaczy.
Lokalizacja (węzły)
Węzły udostępniająlocation.get, gdy Lokalizacja jest włączona w ustawieniach.
Pomocnik CLI:
- Lokalizacja jest domyślnie wyłączona.
- Tryb „Zawsze” wymaga uprawnień systemowych; pobieranie w tle jest best-effort.
- Odpowiedź zawiera lat/lon, dokładność (metry) oraz znacznik czasu.
SMS (węzły Android)
Węzły Android mogą udostępniaćsms.send, gdy użytkownik przyzna uprawnienie SMS, a urządzenie obsługuje telefonię.
Wywołanie niskopoziomowe:
- Monit o uprawnienia musi zostać zaakceptowany na urządzeniu Android, zanim możliwości zostaną ogłoszone.
- Urządzenia tylko z Wi‑Fi, bez telefonii, nie będą ogłaszać
sms.send.
Polecenia systemowe (host węzła / węzeł mac)
Węzeł macOS udostępniasystem.run, system.notify oraz system.execApprovals.get/set.
Headless host węzła udostępnia system.run, system.which oraz system.execApprovals.get/set.
Przykłady:
system.runzwraca stdout/stderr/kod wyjścia w ładunku.system.notifyrespektuje stan uprawnień powiadomień w aplikacji macOS.system.runobsługuje--cwd,--env KEY=VAL,--command-timeoutoraz--needs-screen-recording.system.notifyobsługuje--priority <passive|active|timeSensitive>i--delivery <system|overlay|auto>.- Hosty Node ignorują nadpisania
PATH. Jeśli potrzebujesz dodatkowych wpisów w PATH, skonfiguruj środowisko usługi hosta node (lub zainstaluj narzędzia w standardowych lokalizacjach) zamiast przekazywaćPATHprzez--env. - W trybie węzła macOS,
system.runjest objęte zatwierdzeniami exec w aplikacji macOS (Ustawienia → Zatwierdzenia exec). Tryby ask/allowlist/full zachowują się tak samo jak w headless hoście węzła; odrzucone monity zwracająSYSTEM_RUN_DENIED. - W headless hoście węzła,
system.runjest objęte zatwierdzeniami exec (~/.openclaw/exec-approvals.json).
Wiązanie exec z węzłem
Gdy dostępnych jest wiele węzłów, możesz powiązać exec z konkretnym węzłem. Ustawia to domyślny węzeł dlaexec host=node (i może być nadpisane per agent).
Domyślne globalne:
Mapa uprawnień
Węzły mogą zawierać mapępermissions w node.list / node.describe, indeksowaną nazwą uprawnienia (np. screenRecording, accessibility) z wartościami logicznymi (true = przyznane).
Headless host węzła (wieloplatformowy)
OpenClaw może uruchomić headless host węzła (bez UI), który łączy się z WebSocketem Gateway i udostępniasystem.run / system.which. Jest to przydatne na Linux/Windows
lub do uruchamiania minimalnego węzła obok serwera.
Uruchomienie:
- Parowanie jest nadal wymagane (Gateway wyświetli monit o zatwierdzenie węzła).
- Host węzła przechowuje swój identyfikator węzła, token, nazwę wyświetlaną oraz informacje o połączeniu z gatewayem w
~/.openclaw/node.json. - Zatwierdzenia exec są egzekwowane lokalnie przez
~/.openclaw/exec-approvals.json(zob. Exec approvals). - Na macOS headless host węzła preferuje host exec aplikacji towarzyszącej, gdy jest osiągalny, i
przechodzi na wykonanie lokalne, jeśli aplikacja jest niedostępna. Ustaw
OPENCLAW_NODE_EXEC_HOST=app, aby wymagać aplikacji, lubOPENCLAW_NODE_EXEC_FALLBACK=0, aby wyłączyć fallback. - Dodaj
--tls/--tls-fingerprint, gdy Gateway WS używa TLS.
Tryb węzła mac
- Aplikacja macOS w pasku menu łączy się z serwerem WS Gateway jako węzeł (dzięki czemu
openclaw nodes …działa na tym Macu). - W trybie zdalnym aplikacja otwiera tunel SSH dla portu Gateway i łączy się z
localhost.