Node to urządzenie towarzyszące (macOS/iOS/Android/headless), które łączy się z WebSocket Gateway (ten sam port co operatorzy) zDocumentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
role: "node" i udostępnia interfejs poleceń (np. canvas.*, camera.*, device.*, notifications.*, system.*) przez node.invoke. Szczegóły protokołu: Protokół Gateway.
Starszy transport: Protokół Bridge (TCP JSONL;
historyczny wyłącznie dla bieżących urządzeń Node).
macOS może też działać w trybie Node: aplikacja na pasku menu łączy się z
serwerem WS Gateway i udostępnia swoje lokalne polecenia canvas/camera jako Node (więc
openclaw nodes … działa wobec tego Maca). W trybie zdalnego Gateway
automatyzacją przeglądarki zajmuje się host Node CLI (openclaw node run lub
zainstalowana usługa Node), a nie Node aplikacji natywnej.
Uwagi:
- Urządzenia Node są urządzeniami peryferyjnymi, nie instancjami Gateway. Nie uruchamiają usługi Gateway.
- Wiadomości Telegram/WhatsApp/itp. trafiają do Gateway, nie do urządzeń Node.
- Procedura rozwiązywania problemów: /nodes/troubleshooting
Parowanie + status
Urządzenia Node WS używają parowania urządzeń. Urządzenia Node przedstawiają tożsamość urządzenia podczasconnect; Gateway
tworzy żądanie parowania urządzenia dla role: node. Zatwierdź przez CLI urządzeń (lub UI).
Szybkie użycie CLI:
requestId. Uruchom ponownie
openclaw devices list przed zatwierdzeniem.
Uwagi:
nodes statusoznacza Node jako paired, gdy jego rola parowania urządzenia obejmujenode.- Rekord parowania urządzenia jest trwałym kontraktem zatwierdzonych ról. Rotacja tokenów pozostaje w tym kontrakcie; nie może podnieść sparowanego Node do innej roli, której zatwierdzenie parowania nigdy nie przyznało.
node.pair.*(CLI:openclaw nodes pending/approve/reject/remove/rename) to osobny, należący do Gateway magazyn parowania Node; nie kontroluje uzgadniania WSconnect.openclaw nodes remove --node <id|name|ip>usuwa nieaktualne wpisy z tego osobnego, należącego do Gateway magazynu parowania Node.- Zakres zatwierdzenia wynika z poleceń zadeklarowanych przez oczekujące żądanie:
- żądanie bez poleceń:
operator.pairing - polecenia Node 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 jednej maszynie, a polecenia mają wykonywać się na innej. Model nadal komunikuje się z Gateway; Gateway przekazuje wywołaniaexec 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 maszynie Node. - Zatwierdzenia: 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 przez powłokę/środowisko uruchomieniowe OpenClaw w miarę możliwości wiąże też 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 interpretera/środowiska uruchomieniowego, wykonanie oparte na zatwierdzeniu jest odrzucane zamiast udawać pełne pokrycie środowiska uruchomieniowego. Użyj sandboxingu, osobnych hostów albo jawnej zaufanej listy dozwolonych/pełnego przepływu pracy dla szerszej semantyki interpreterów.
Uruchamianie hosta Node (pierwszy plan)
Na maszynie Node: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 Node nie mogą połączyć się bezpośrednio. Utwórz tunel SSH i skieruj
host Node na lokalny koniec tunelu.
Przykład (host Node -> host Gateway):
openclaw node runobsługuje uwierzytelnianie tokenem lub hasłem.- Preferowane są zmienne środowiskowe:
OPENCLAW_GATEWAY_TOKEN/OPENCLAW_GATEWAY_PASSWORD. - Zapasowa konfiguracja to
gateway.auth.token/gateway.auth.password. - W trybie lokalnym host Node celowo ignoruje
gateway.remote.token/gateway.remote.password. - W trybie zdalnym
gateway.remote.token/gateway.remote.passwordmogą być użyte zgodnie z regułami priorytetu zdalnego. - Jeśli skonfigurowane są aktywne lokalne SecretRefs
gateway.auth.*, ale nie da się ich rozwiązać, uwierzytelnianie hosta Node odmawia dostępu. - Rozwiązywanie uwierzytelniania hosta Node uwzględnia wyłącznie zmienne środowiskowe
OPENCLAW_GATEWAY_*.
Uruchamianie hosta Node (usługa)
Parowanie + nazwa
Na hoście Gateway:openclaw devices list
i zatwierdź bieżący requestId.
Opcje nazewnictwa:
--display-namewopenclaw node run/openclaw node install(utrwala się w~/.openclaw/node.jsonna Node).openclaw nodes rename --node <id|name|ip> --name "Build Node"(nadpisanie po stronie Gateway).
Dodaj polecenia do listy dozwolonych
Zatwierdzenia exec są dla każdego hosta Node. Dodaj wpisy listy dozwolonych z Gateway:~/.openclaw/exec-approvals.json.
Skieruj exec na Node
Skonfiguruj wartości domyślne (konfiguracja Gateway):exec z host=node działa na hoście Node (zgodnie z
listą dozwolonych/zatwierdzeniami Node).
host=auto nie wybierze niejawnie Node samodzielnie, ale jawne żądanie host=node dla pojedynczego wywołania jest dozwolone z auto. Jeśli chcesz, aby exec Node był domyślny dla sesji, ustaw jawnie tools.exec.host=node albo /exec host=node ....
Powiązane:
Wywoływanie poleceń
Niski poziom (surowe RPC):Zasady poleceń
Polecenia Node muszą przejść przez dwa etapy kontroli, zanim mogą zostać wywołane:- Node musi zadeklarować polecenie na swojej liście WebSocket
connect.commands. - Polityka platformy Gateway musi zezwalać na zadeklarowane polecenie.
canvas.*, camera.list, location.get i screen.snapshot.
Zaufane urządzenia Node, które ogłaszają możliwość talk albo deklarują polecenia talk.*,
domyślnie zezwalają też na zadeklarowane polecenia trybu „naciśnij, aby mówić” (talk.ptt.start, talk.ptt.stop,
talk.ptt.cancel, talk.ptt.once), niezależnie od etykiety platformy.
Niebezpieczne lub mocno ingerujące w prywatność polecenia, takie jak camera.snap, camera.clip i
screen.record, nadal wymagają jawnego włączenia przez
gateway.nodes.allowCommands. gateway.nodes.denyCommands zawsze ma pierwszeństwo przed
wartościami domyślnymi i dodatkowymi wpisami listy dozwolonych.
Polecenia Node należące do Plugin mogą dodać politykę Gateway dla wywołań Node. Ta polityka
działa po sprawdzeniu listy dozwolonych i przed przekazaniem do Node, więc surowe
node.invoke, funkcje pomocnicze CLI i dedykowane narzędzia agentów współdzielą tę samą granicę
uprawnień Plugin. Niebezpieczne polecenia Node Plugin nadal wymagają jawnego
włączenia przez gateway.nodes.allowCommands.
Po zmianie zadeklarowanej listy poleceń przez Node odrzuć stare parowanie urządzenia
i zatwierdź nowe żądanie, aby Gateway zapisał zaktualizowaną migawkę poleceń.
Zrzuty ekranu (migawki Canvas)
Jeśli Node pokazuje Canvas (WebView),canvas.snapshot zwraca { format, base64 }.
Funkcja pomocnicza CLI (zapisuje do pliku tymczasowego i wypisuje MEDIA:<path>):
Sterowanie Canvas
canvas presentprzyjmuje adresy URL lub lokalne ścieżki plików (--target) oraz opcjonalnie--x/--y/--width/--heightdo pozycjonowania.canvas evalprzyjmuje wbudowany JS (--js) lub argument pozycyjny.
A2UI (Canvas)
- Obsługiwane jest tylko A2UI v0.8 JSONL (v0.9/createSurface jest odrzucane).
Zdjęcia + filmy (kamera Node)
Zdjęcia (jpg):
mp4):
- Node 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ń powoduje błąd*_PERMISSION_REQUIRED.
Nagrania ekranu (urządzenia Node)
Obsługiwane urządzenia Node 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 (urządzenia Node)
Urządzenia Node udostępniająlocation.get, gdy Lokalizacja jest włączona w ustawieniach.
Funkcja pomocnicza CLI:
- Lokalizacja jest domyślnie wyłączona.
- „Zawsze” wymaga uprawnienia systemowego; pobieranie w tle jest wykonywane w miarę możliwości.
- Odpowiedź zawiera lat/lon, dokładność (metry) i znacznik czasu.
SMS (urządzenia Node Android)
Urządzenia Node Android mogą udostępniaćsms.send, gdy użytkownik przyzna uprawnienie SMS, a urządzenie obsługuje telefonię.
Wywołanie niskiego poziomu:
- Monit o uprawnienie musi zostać zaakceptowany na urządzeniu Android, zanim możliwość zostanie ogłoszona.
- Urządzenia tylko z Wi-Fi bez telefonii nie będą ogłaszać
sms.send.
Polecenia urządzenia Android + danych osobowych
Urządzenia Node Android mogą ogłaszać dodatkowe rodziny poleceń, gdy odpowiednie możliwości 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 ruchu są ograniczone możliwościami dostępnymi przez dostępne czujniki.
Polecenia systemowe (host węzła / węzeł Mac)
Węzeł macOS udostępniasystem.run, system.notify oraz system.execApprovals.get/set.
Bezgłowy 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.- Wykonywanie powłoki przechodzi teraz przez narzędzie
execzhost=node;nodespozostaje bezpośrednią powierzchnią RPC dla jawnych poleceń węzła. nodes invokenie udostępniasystem.runanisystem.run.prepare; pozostają one tylko na ścieżce exec.- Ścieżka exec przygotowuje kanoniczny
systemRunPlanprzed zatwierdzeniem. Po udzieleniu zatwierdzenia gateway przekazuje ten zapisany plan, a nie później zmodyfikowane przez wywołującego pola command/cwd/session. system.notifyrespektuje stan uprawnień do powiadomień w aplikacji macOS.- Nierozpoznane metadane węzła
platform/deviceFamilyużywają konserwatywnej 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-timeoutoraz--needs-screen-recording.- Dla opakowań 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). - W przypadku decyzji zawsze zezwalaj w trybie listy dozwolonych znane opakowania dispatch (
env,nice,nohup,stdbuf,timeout) utrwalają ścieżki wewnętrznych plików wykonywalnych zamiast ścieżek opakowań. Jeśli odpakowanie nie jest bezpieczne, żaden wpis listy dozwolonych nie jest automatycznie utrwalany. - Na hostach węzła Windows w trybie listy dozwolonych uruchomienia opakowania powłoki przez
cmd.exe /cwymagają zatwierdzenia (sam wpis listy dozwolonych nie zezwala automatycznie na formę opakowania). system.notifyobsługuje--priority <passive|active|timeSensitive>oraz--delivery <system|overlay|auto>.- Hosty węzła ignorują nadpisania
PATHi usuwają niebezpieczne klucze startowe/powłoki (DYLD_*,LD_*,NODE_OPTIONS,PYTHON*,PERL*,RUBYOPT,SHELLOPTS,PS4). Jeśli potrzebujesz dodatkowych wpisów PATH, skonfiguruj środowisko usługi hosta węzła (albo zainstaluj narzędzia w standardowych lokalizacjach) zamiast przekazywaćPATHprzez--env. - W trybie węzła macOS
system.runjest kontrolowane przez zatwierdzenia exec w aplikacji macOS (Ustawienia → Zatwierdzenia exec). Tryby ask/allowlist/full działają tak samo jak w bezgłowym hoście węzła; odrzucone monity zwracająSYSTEM_RUN_DENIED. - W bezgłowym hoście węzła
system.runjest kontrolowane przez zatwierdzenia exec (~/.openclaw/exec-approvals.json).
Powiązanie węzła exec
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 zostać zastąpione dla pojedynczego agenta).
Domyślne globalne:
Mapa uprawnień
Węzły mogą zawierać mapępermissions w node.list / node.describe, indeksowaną według nazwy uprawnienia (np. screenRecording, accessibility) z wartościami logicznymi (true = przyznane).
Bezgłowy host węzła (wieloplatformowy)
OpenClaw może uruchamiać bezgłowy host węzła (bez UI), który łączy się z WebSocket Gateway i udostępniasystem.run / system.which. Jest to przydatne na Linux/Windows
lub do uruchamiania minimalnego węzła obok serwera.
Uruchom go:
- Parowanie nadal jest wymagane (Gateway pokaże monit parowania urządzenia).
- Host węzła przechowuje identyfikator węzła, token, nazwę wyświetlaną i informacje o połączeniu z gateway w
~/.openclaw/node.json. - Zatwierdzenia exec są wymuszane lokalnie przez
~/.openclaw/exec-approvals.json(zobacz Zatwierdzenia exec). - Na macOS bezgłowy host węzła domyślnie wykonuje
system.runlokalnie. UstawOPENCLAW_NODE_EXEC_HOST=app, aby kierowaćsystem.runprzez host exec aplikacji towarzyszącej; dodajOPENCLAW_NODE_EXEC_FALLBACK=0, aby wymagać hosta aplikacji i bezpiecznie zakończyć niepowodzeniem, jeśli jest niedostępny. - Dodaj
--tls/--tls-fingerprint, gdy Gateway WS używa TLS.
Tryb węzła Mac
- Aplikacja paska menu macOS łączy się z serwerem Gateway WS jako węzeł (więc
openclaw nodes …działa względem tego Maca). - W trybie zdalnym aplikacja otwiera tunel SSH dla portu Gateway i łączy się z
localhost.