Nodes
Node to urządzenie towarzyszące (macOS/iOS/Android/headless), które łączy się z Gateway WebSocket (tym samym portem co operatorzy) zrole: "node" i udostępnia powierzchnię poleceń (np. canvas.*, camera.*, device.*, notifications.*, system.*) przez node.invoke. Szczegóły protokołu: Gateway protocol.
Starszy transport: Bridge protocol (TCP JSONL;
wyłącznie historyczny dla obecnych węzłów).
macOS może również działać w trybie node: aplikacja w pasku menu łączy się z serwerem WS Gateway i udostępnia swoje lokalne polecenia canvas/camera jako węzeł (więc openclaw nodes … działa względem tego Maca).
Uwagi:
- Nodes to urządzenia peryferyjne, a nie gateway. Nie uruchamiają usługi gateway.
- Wiadomości Telegram/WhatsApp/etc. trafiają do gateway, a nie do nodes.
- 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ź je przez CLI devices (lub UI).
Szybkie CLI:
requestId. Uruchom ponownie
openclaw devices list przed zatwierdzeniem.
Uwagi:
nodes statusoznacza węzeł jako paired, gdy jego rola w parowaniu urządzenia obejmujenode.- Rekord parowania urządzenia jest trwałą umową zatwierdzonej roli. Rotacja tokena pozostaje w granicach tej umowy; nie może podnieść sparowanego węzła do innej roli, której zatwierdzenie parowania nigdy nie przyznało.
node.pair.*(CLI:openclaw nodes pending/approve/reject/rename) to osobny magazyn parowania węzłów należący do gateway; nie kontroluje on handshakeconnectdla WS.- Zakres zatwierdzenia podąża za zadeklarowanymi poleceniami oczekującego żądania:
- żądanie bez poleceń:
operator.pairing - polecenia węzła inne niż exec:
operator.pairing+operator.write system.run/system.run.prepare/system.which:operator.pairing+operator.admin
- żądanie bez poleceń:
Zdalny host node (system.run)
Użyj hosta node, gdy Gateway działa na jednym komputerze, a polecenia
mają być wykonywane na innym. Model nadal komunikuje się z gateway; gateway
przekazuje wywołania exec do hosta node, gdy wybrane jest host=node.
Co działa gdzie
- Host gateway: odbiera wiadomości, uruchamia model, kieruje wywołania narzędzi.
- Host node: wykonuje
system.run/system.whichna komputerze węzła. - Approvals: egzekwowane na hoście node przez
~/.openclaw/exec-approvals.json.
- Uruchomienia node oparte na zatwierdzeniach wiążą dokładny kontekst żądania.
- Dla bezpośrednich wykonań plików powłoki/runtime OpenClaw dodatkowo w trybie best-effort wiąże jeden konkretny lokalny operand pliku i odrzuca uruchomienie, jeśli ten plik zmieni się przed wykonaniem.
- Jeśli OpenClaw nie może zidentyfikować dokładnie jednego konkretnego lokalnego pliku dla polecenia interpreter/runtime, wykonanie oparte na zatwierdzeniu jest odrzucane zamiast udawać pełne pokrycie runtime. Użyj sandboxingu, osobnych hostów albo jawnej zaufanej listy dozwolonych/pełnego workflow dla szerszej semantyki interpreterów.
Uruchom hosta node (na pierwszym planie)
Na komputerze węzła:Zdalny gateway przez tunel SSH (bind loopback)
Jeśli Gateway jest związany z loopback (gateway.bind=loopback, domyślnie w trybie local),
zdalne hosty node nie mogą połączyć się bezpośrednio. Utwórz tunel SSH i skieruj
hosta node na lokalny koniec tunelu.
Przykład (host node -> host gateway):
openclaw node runobsługuje uwierzytelnianie tokenem lub hasłem.- Preferowane są zmienne env:
OPENCLAW_GATEWAY_TOKEN/OPENCLAW_GATEWAY_PASSWORD. - Zapasowa konfiguracja to
gateway.auth.token/gateway.auth.password. - W trybie local host node celowo ignoruje
gateway.remote.token/gateway.remote.password. - W trybie remote
gateway.remote.token/gateway.remote.passwordkwalifikują się zgodnie z regułami pierwszeństwa dla remote. - Jeśli aktywne lokalne SecretRef
gateway.auth.*są skonfigurowane, ale nierozwiązane, uwierzytelnianie hosta node kończy się fail-closed. - Rozwiązywanie uwierzytelniania hosta node uwzględnia tylko zmienne env
OPENCLAW_GATEWAY_*.
Uruchom hosta node (jako usługę)
Sparuj + nazwij
Na hoście gateway:openclaw devices list
i zatwierdź bieżący requestId.
Opcje nazewnictwa:
--display-namewopenclaw node run/openclaw node install(utrwalane w~/.openclaw/node.jsonna węźle).openclaw nodes rename --node <id|name|ip> --name "Build Node"(nadpisanie po stronie gateway).
Dodaj polecenia do listy dozwolonych
Exec approvals są per host node. Dodaj wpisy listy dozwolonych z gateway:~/.openclaw/exec-approvals.json.
Skieruj exec do node
Skonfiguruj wartości domyślne (konfiguracja gateway):exec z host=node działa na hoście node (z zastrzeżeniem
listy dozwolonych/approvals hosta node).
host=auto sam z siebie nie wybierze niejawnie node, ale jawne żądanie host=node per wywołanie jest dozwolone z auto. Jeśli chcesz, aby exec na node był wartością domyślną dla sesji, ustaw jawnie tools.exec.host=node lub /exec host=node ....
Powiązane:
Wywoływanie poleceń
Niskopoziomowo (surowe RPC):Zrzuty ekranu (snapshoty 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/--heightdla pozycjonowania.canvas evalakceptuje JS inline (--js) lub argument pozycyjny.
A2UI (Canvas)
- Obsługiwany jest tylko A2UI v0.8 JSONL (v0.9/createSurface jest odrzucane).
Zdjęcia + wideo (kamera node)
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 wyświetli prośbę o uprawnienia
CAMERA/RECORD_AUDIO, gdy to możliwe; odrzucone uprawnienia kończą się błędem*_PERMISSION_REQUIRED.
Nagrania ekranu (nodes)
Obsługiwane nodes udostępniająscreen.record (mp4). Przykład:
- Dostępność
screen.recordzależy od platformy node. - Nagrania ekranu są ograniczane do
<= 60s. --no-audiowyłącza przechwytywanie mikrofonu na obsługiwanych platformach.- Użyj
--screen <index>, aby wybrać ekran, gdy dostępnych jest wiele ekranów.
Lokalizacja (nodes)
Nodes udostępniająlocation.get, gdy lokalizacja jest włączona w ustawieniach.
Pomocnik CLI:
- Lokalizacja jest domyślnie wyłączona.
- „Always” wymaga uprawnienia systemowego; pobieranie w tle działa w trybie best-effort.
- Odpowiedź zawiera szer./dł. geograficzną, dokładność (metry) i timestamp.
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ę.
Niskopoziomowe invoke:
- Prompt uprawnień musi zostać zaakceptowany na urządzeniu Android, zanim capability zostanie ogłoszone.
- Urządzenia tylko z Wi‑Fi bez telefonii nie będą ogłaszać
sms.send.
Polecenia urządzenia Android + danych osobowych
Węzły Android mogą ogłaszać dodatkowe rodziny poleceń, gdy odpowiednie capabilities są włączone. Dostępne rodziny:device.status,device.info,device.permissions,device.healthnotifications.list,notifications.actionsphotos.latestcontacts.search,contacts.addcalendar.events,calendar.addcallLog.searchsms.searchmotion.activity,motion.pedometer
- Polecenia motion są ograniczane przez capability dostępnych sensorów.
Polecenia systemowe (host node / mac node)
macOS node udostępniasystem.run, system.notify i system.execApprovals.get/set.
Headless node host udostępnia system.run, system.which i system.execApprovals.get/set.
Przykłady:
system.runzwraca stdout/stderr/kod wyjścia w ładunku.- Wykonanie powłoki przechodzi teraz przez narzędzie
execzhost=node;nodespozostaje bezpośrednią powierzchnią RPC dla jawnych poleceń node. nodes invokenie udostępniasystem.runanisystem.run.prepare; pozostają one wyłącznie na ścieżce exec.- Ścieżka exec przygotowuje kanoniczny
systemRunPlanprzed zatwierdzeniem. Gdy zatwierdzenie zostanie przyznane, gateway przekazuje ten zapisany plan, a nie później edytowane przez wywołującego pola command/cwd/session. system.notifyrespektuje stan uprawnienia do powiadomień w aplikacji macOS.- Nierozpoznane metadane
platform/deviceFamilynode używają zachowawczej domyślnej listy dozwolonych poleceń, która wykluczasystem.runisystem.which. Jeśli celowo potrzebujesz tych poleceń dla nieznanej platformy, dodaj je jawnie przezgateway.nodes.allowCommands. system.runobsługuje--cwd,--env KEY=VAL,--command-timeouti--needs-screen-recording.- Dla wrapperów powłoki (
bash|sh|zsh ... -c/-lc) wartości--envo zakresie żądania są redukowane do jawnej listy dozwolonych (TERM,LANG,LC_*,COLORTERM,NO_COLOR,FORCE_COLOR). - Dla decyzji allow-always w trybie allowlist znane wrappery dispatch (
env,nice,nohup,stdbuf,timeout) utrwalają wewnętrzne ścieżki plików wykonywalnych zamiast ścieżek wrapperów. Jeśli bezpieczne rozpakowanie nie jest możliwe, żaden wpis listy dozwolonych nie jest utrwalany automatycznie. - Na hostach node Windows w trybie allowlist uruchomienia wrapperów powłoki przez
cmd.exe /cwymagają zatwierdzenia (sam wpis allowlist nie powoduje automatycznego zezwolenia na formę wrappera). system.notifyobsługuje--priority <passive|active|timeSensitive>i--delivery <system|overlay|auto>.- Hosty node ignorują nadpisania
PATHi usuwają niebezpieczne klucze uruchomieniowe/powłoki (DYLD_*,LD_*,NODE_OPTIONS,PYTHON*,PERL*,RUBYOPT,SHELLOPTS,PS4). Jeśli potrzebujesz dodatkowych wpisów PATH, skonfiguruj środowisko usługi hosta node (lub zainstaluj narzędzia w standardowych lokalizacjach) zamiast przekazywaćPATHprzez--env. - W trybie macOS node
system.runjest ograniczane przez exec approvals w aplikacji macOS (Settings → Exec approvals). Ask/allowlist/full działają tak samo jak w headless node host; odrzucone prompty zwracająSYSTEM_RUN_DENIED. - W headless node host
system.runjest ograniczane przez exec approvals (~/.openclaw/exec-approvals.json).
Powiązanie exec z node
Gdy dostępnych jest wiele nodes, możesz powiązać exec z konkretnym node. Ustawia to domyślny node dlaexec host=node (i może zostać nadpisane per agent).
Globalna wartość domyślna:
Mapa uprawnień
Nodes mogą zawierać mapępermissions w node.list / node.describe, kluczowaną nazwą uprawnienia (np. screenRecording, accessibility) z wartościami logicznymi (true = przyznane).
Headless node host (wieloplatformowy)
OpenClaw może uruchamiać headless node host (bez UI), który łączy się z Gateway WebSocket i udostępniasystem.run / system.which. Jest to przydatne na Linux/Windows
lub do uruchomienia minimalnego node obok serwera.
Uruchom go:
- Parowanie nadal jest wymagane (Gateway pokaże prompt parowania urządzenia).
- Host node przechowuje swój identyfikator node, token, nazwę wyświetlaną i informacje o połączeniu z gateway w
~/.openclaw/node.json. - Exec approvals są egzekwowane lokalnie przez
~/.openclaw/exec-approvals.json(zobacz Exec approvals). - Na macOS headless node host domyślnie wykonuje
system.runlokalnie. UstawOPENCLAW_NODE_EXEC_HOST=app, aby kierowaćsystem.runprzez exec host aplikacji towarzyszącej; dodajOPENCLAW_NODE_EXEC_FALLBACK=0, aby wymagać hosta aplikacji i stosować fail-closed, jeśli jest niedostępny. - Dodaj
--tls/--tls-fingerprint, gdy Gateway WS używa TLS.
Tryb mac node
- Aplikacja macOS w pasku menu łączy się z serwerem Gateway WS jako node (więc
openclaw nodes …działa względem tego Maca). - W trybie remote aplikacja otwiera tunel SSH dla portu Gateway i łączy się z
localhost.