Nodes
Ein Node ist ein Begleitgerät (macOS/iOS/Android/headless), das sich mit dem Gateway-WebSocket (derselbe Port wie für Operatoren) mitrole: "node" verbindet und eine Befehlsoberfläche (z. B. canvas.*, camera.*, device.*, notifications.*, system.*) über node.invoke bereitstellt. Protokolldetails: Gateway protocol.
Veralteter Transport: Bridge protocol (TCP JSONL;
nur historisch für aktuelle Nodes).
macOS kann auch im Node-Modus laufen: Die Menüleisten-App verbindet sich mit dem WS-Server des Gateways und stellt ihre lokalen Canvas-/Kamera-Befehle als Node bereit (sodass openclaw nodes … gegen diesen Mac funktioniert).
Hinweise:
- Nodes sind Peripheriegeräte, keine Gateways. Sie führen den Gateway-Dienst nicht aus.
- Telegram-/WhatsApp-/usw.-Nachrichten landen auf dem Gateway, nicht auf Nodes.
- Runbook zur Fehlerbehebung: /nodes/troubleshooting
Pairing + Status
WS-Nodes verwenden Device Pairing. Nodes präsentieren währendconnect eine Geräteidentität; das Gateway
erstellt eine Geräte-Pairing-Anfrage für role: node. Genehmigen Sie sie über die devices CLI (oder UI).
Schnelle CLI:
requestId erstellt. Führen Sie
openclaw devices list erneut aus, bevor Sie genehmigen.
Hinweise:
nodes statusmarkiert einen Node als paired, wenn seine Geräte-Pairing-Rollenodeenthält.- Der Geräte-Pairing-Eintrag ist der dauerhafte Vertrag über genehmigte Rollen. Token- Rotation bleibt innerhalb dieses Vertrags; sie kann einen gekoppelten Node nicht zu einer anderen Rolle hochstufen, die durch die Pairing-Genehmigung nie gewährt wurde.
node.pair.*(CLI:openclaw nodes pending/approve/reject/rename) ist ein separater, gateway-eigener Node-Pairing-Speicher; er steuert nicht den WS-connect-Handshake.- Der Genehmigungsumfang folgt den deklarierten Befehlen der ausstehenden Anfrage:
- Anfrage ohne Befehl:
operator.pairing - Node-Befehle ohne exec:
operator.pairing+operator.write system.run/system.run.prepare/system.which:operator.pairing+operator.admin
- Anfrage ohne Befehl:
Remote-Node-Host (system.run)
Verwenden Sie einen node host, wenn Ihr Gateway auf einer Maschine läuft und Sie Befehle auf einer anderen ausführen möchten. Das Modell spricht weiterhin mit dem gateway; das Gateway leitetexec-Aufrufe an den node host weiter, wenn host=node ausgewählt ist.
Was läuft wo
- Gateway-Host: empfängt Nachrichten, führt das Modell aus, routet Tool-Aufrufe.
- Node-Host: führt
system.run/system.whichauf der Node-Maschine aus. - Genehmigungen: werden auf dem Node-Host über
~/.openclaw/exec-approvals.jsonerzwungen.
- Genehmigungsgestützte Node-Läufe binden den exakten Anfragekontext.
- Für direkte Shell-/Laufzeit-Dateiausführungen bindet OpenClaw außerdem best effort genau einen konkreten lokalen Dateioperanden und verweigert die Ausführung, wenn sich diese Datei vor der Ausführung ändert.
- Wenn OpenClaw nicht genau eine konkrete lokale Datei für einen Interpreter-/Laufzeitbefehl identifizieren kann, wird die genehmigungsgestützte Ausführung verweigert, statt eine vollständige Laufzeitabdeckung vorzutäuschen. Verwenden Sie Sandboxing, separate Hosts oder einen expliziten vertrauenswürdigen Allowlist-/Full-Workflow für weiter gefasste Interpreter-Semantik.
Einen Node-Host starten (Vordergrund)
Auf der Node-Maschine:Remote-Gateway über SSH-Tunnel (Loopback-Bindung)
Wenn das Gateway an Loopback bindet (gateway.bind=loopback, Standard im lokalen Modus),
können sich Remote-Node-Hosts nicht direkt verbinden. Erstellen Sie einen SSH-Tunnel und verweisen Sie den
Node-Host auf das lokale Ende des Tunnels.
Beispiel (Node-Host -> Gateway-Host):
openclaw node rununterstützt Token- oder Passwort-Auth.- Env-Variablen werden bevorzugt:
OPENCLAW_GATEWAY_TOKEN/OPENCLAW_GATEWAY_PASSWORD. - Konfigurations-Fallback ist
gateway.auth.token/gateway.auth.password. - Im lokalen Modus ignoriert node host absichtlich
gateway.remote.token/gateway.remote.password. - Im Remote-Modus sind
gateway.remote.token/gateway.remote.passwordgemäß den Vorrangregeln für remote zulässig. - Wenn aktive lokale
gateway.auth.*-SecretRefs konfiguriert, aber nicht aufgelöst sind, schlägt die Node-Host-Auth fail-closed fehl. - Die Auth-Auflösung des Node-Hosts berücksichtigt nur
OPENCLAW_GATEWAY_*-Env-Variablen.
Einen Node-Host starten (Dienst)
Pairen + benennen
Auf dem Gateway-Host:openclaw devices list
erneut aus und genehmigen Sie die aktuelle requestId.
Optionen für die Benennung:
--display-namebeiopenclaw node run/openclaw node install(wird in~/.openclaw/node.jsonauf dem Node gespeichert).openclaw nodes rename --node <id|name|ip> --name "Build Node"(Gateway-Override).
Die Befehle auf die Allowlist setzen
Exec-Genehmigungen gelten pro Node-Host. Fügen Sie Allowlist-Einträge vom Gateway aus hinzu:~/.openclaw/exec-approvals.json.
Exec auf den Node richten
Standardeinstellungen konfigurieren (Gateway-Konfiguration):exec-Aufruf mit host=node auf dem Node-Host (vorbehaltlich
der Allowlist/Genehmigungen des Nodes).
host=auto wählt den Node nicht implizit selbstständig aus, aber eine explizite Anfrage pro Aufruf mit host=node ist von auto aus zulässig. Wenn Node-Exec standardmäßig für die Sitzung verwendet werden soll, setzen Sie tools.exec.host=node oder /exec host=node ... explizit.
Verwandt:
Befehle aufrufen
Low-Level (rohes RPC):Screenshots (Canvas-Snapshots)
Wenn der Node das Canvas anzeigt (WebView), gibtcanvas.snapshot { format, base64 } zurück.
CLI-Helfer (schreibt in eine temporäre Datei und gibt MEDIA:<path> aus):
Canvas-Steuerung
canvas presentakzeptiert URLs oder lokale Dateipfade (--target) sowie optional--x/--y/--width/--heightfür die Positionierung.canvas evalakzeptiert Inline-JS (--js) oder ein Positionsargument.
A2UI (Canvas)
- Es wird nur A2UI-v0.8-JSONL unterstützt (v0.9/createSurface wird abgelehnt).
Fotos + Videos (Node-Kamera)
Fotos (jpg):
mp4):
- Der Node muss für
canvas.*undcamera.*im Vordergrund sein (Hintergrundaufrufe gebenNODE_BACKGROUND_UNAVAILABLEzurück). - Die Clip-Dauer ist begrenzt (derzeit
<= 60s), um übergroße base64-Payloads zu vermeiden. - Android fordert nach Möglichkeit Berechtigungen für
CAMERA/RECORD_AUDIOan; verweigerte Berechtigungen schlagen mit*_PERMISSION_REQUIREDfehl.
Bildschirmaufzeichnungen (Nodes)
Unterstützte Nodes stellenscreen.record bereit (mp4). Beispiel:
- Die Verfügbarkeit von
screen.recordhängt von der Plattform des Nodes ab. - Bildschirmaufzeichnungen sind auf
<= 60sbegrenzt. --no-audiodeaktiviert die Mikrofonaufnahme auf unterstützten Plattformen.- Verwenden Sie
--screen <index>, um bei mehreren Bildschirmen ein Display auszuwählen.
Standort (Nodes)
Nodes stellenlocation.get bereit, wenn Location in den Einstellungen aktiviert ist.
CLI-Helfer:
- Standort ist standardmäßig deaktiviert.
- „Always“ erfordert eine Systemberechtigung; Hintergrundabrufe sind best effort.
- Die Antwort enthält Breite/Länge, Genauigkeit (Meter) und Zeitstempel.
SMS (Android-Nodes)
Android-Nodes könnensms.send bereitstellen, wenn der Benutzer die SMS-Berechtigung gewährt und das Gerät Telefonie unterstützt.
Low-Level-Aufruf:
- Die Berechtigungsabfrage muss auf dem Android-Gerät akzeptiert werden, bevor die Fähigkeit angekündigt wird.
- Geräte nur mit WLAN ohne Telefonie kündigen
sms.sendnicht an.
Android-Geräte- und persönliche Datenbefehle
Android-Nodes können zusätzliche Befehlsfamilien ankündigen, wenn die entsprechenden Fähigkeiten aktiviert sind. Verfügbare Familien:device.status,device.info,device.permissions,device.healthnotifications.list,notifications.actionsphotos.latestcontacts.search,contacts.addcalendar.events,calendar.addcallLog.searchsms.searchmotion.activity,motion.pedometer
- Motion-Befehle werden durch verfügbare Sensoren capability-gated.
Systembefehle (Node-Host / Mac-Node)
Der macOS-Node stelltsystem.run, system.notify und system.execApprovals.get/set bereit.
Der Headless-Node-Host stellt system.run, system.which und system.execApprovals.get/set bereit.
Beispiele:
system.rungibt stdout/stderr/Exit-Code in der Payload zurück.- Shell-Ausführung läuft jetzt über das
exec-Tool mithost=node;nodesbleibt die direkte RPC-Oberfläche für explizite Node-Befehle. nodes invokestelltsystem.runodersystem.run.preparenicht bereit; diese bleiben ausschließlich auf dem Exec-Pfad.- Der Exec-Pfad bereitet vor der Genehmigung einen kanonischen
systemRunPlanvor. Sobald eine Genehmigung erteilt ist, leitet das Gateway diesen gespeicherten Plan weiter, nicht später vom Aufrufer bearbeitete Felder für command/cwd/session. system.notifyberücksichtigt den Zustand der Benachrichtigungsberechtigung in der macOS-App.- Nicht erkannte Node-Metadaten
platform/deviceFamilyverwenden eine konservative Standard-Allowlist, diesystem.runundsystem.whichausschließt. Wenn Sie diese Befehle absichtlich für eine unbekannte Plattform benötigen, fügen Sie sie explizit übergateway.nodes.allowCommandshinzu. system.rununterstützt--cwd,--env KEY=VAL,--command-timeoutund--needs-screen-recording.- Für Shell-Wrapper (
bash|sh|zsh ... -c/-lc) werden anfragebezogene--env-Werte auf eine explizite Allowlist reduziert (TERM,LANG,LC_*,COLORTERM,NO_COLOR,FORCE_COLOR). - Für Entscheidungen „immer erlauben“ im Allowlist-Modus speichern bekannte Dispatch-Wrapper (
env,nice,nohup,stdbuf,timeout) innere ausführbare Pfade statt Wrapper-Pfade. Wenn sich ein sicheres Unwrapping nicht durchführen lässt, wird automatisch kein Allowlist-Eintrag gespeichert. - Auf Windows-Node-Hosts im Allowlist-Modus erfordern Shell-Wrapper-Aufrufe über
cmd.exe /ceine Genehmigung (ein Allowlist-Eintrag allein erlaubt die Wrapper-Form nicht automatisch). system.notifyunterstützt--priority <passive|active|timeSensitive>und--delivery <system|overlay|auto>.- Node-Hosts ignorieren
PATH-Überschreibungen und entfernen gefährliche Start-/Shell-Schlüssel (DYLD_*,LD_*,NODE_OPTIONS,PYTHON*,PERL*,RUBYOPT,SHELLOPTS,PS4). Wenn Sie zusätzliche PATH-Einträge benötigen, konfigurieren Sie stattdessen die Dienstumgebung des Node-Hosts (oder installieren Sie Tools an Standardorten), stattPATHüber--envzu übergeben. - Im macOS-Node-Modus wird
system.rundurch Exec-Genehmigungen in der macOS-App gesteuert (Einstellungen → Exec approvals). Ask/allowlist/full verhalten sich wie beim Headless-Node-Host; verweigerte Prompts gebenSYSTEM_RUN_DENIEDzurück. - Auf dem Headless-Node-Host wird
system.rundurch Exec-Genehmigungen gesteuert (~/.openclaw/exec-approvals.json).
Exec-Node-Bindung
Wenn mehrere Nodes verfügbar sind, können Sie Exec an einen bestimmten Node binden. Dadurch wird der Standard-Node fürexec host=node gesetzt (und kann pro Agent überschrieben werden).
Globaler Standard:
Berechtigungszuordnung
Nodes können eine Zuordnungpermissions in node.list / node.describe enthalten, mit dem Berechtigungsnamen als Schlüssel (z. B. screenRecording, accessibility) und booleschen Werten (true = gewährt).
Headless-Node-Host (plattformübergreifend)
OpenClaw kann einen Headless-Node-Host (ohne UI) ausführen, der sich mit dem Gateway WebSocket verbindet undsystem.run / system.which bereitstellt. Das ist nützlich unter Linux/Windows
oder um einen minimalen Node neben einem Server auszuführen.
Starten:
- Pairing ist weiterhin erforderlich (das Gateway zeigt eine Geräte-Pairing-Aufforderung an).
- Der Node-Host speichert seine Node-ID, sein Token, seinen Anzeigenamen und die Gateway-Verbindungsinformationen in
~/.openclaw/node.json. - Exec-Genehmigungen werden lokal über
~/.openclaw/exec-approvals.jsonerzwungen (siehe Exec approvals). - Unter macOS führt der Headless-Node-Host
system.runstandardmäßig lokal aus. Setzen SieOPENCLAW_NODE_EXEC_HOST=app, umsystem.runüber den Exec-Host der Companion-App zu routen; fügen SieOPENCLAW_NODE_EXEC_FALLBACK=0hinzu, um den App-Host zu erzwingen und fail-closed zu sein, wenn er nicht verfügbar ist. - Fügen Sie
--tls/--tls-fingerprinthinzu, wenn das Gateway WS TLS verwendet.
Mac-Node-Modus
- Die macOS-Menüleisten-App verbindet sich als Node mit dem Gateway-WS-Server (sodass
openclaw nodes …gegen diesen Mac funktioniert). - Im Remote-Modus öffnet die App einen SSH-Tunnel für den Gateway-Port und verbindet sich mit
localhost.