Ein Node ist ein Begleitgerät (macOS/iOS/Android/headless), das sich mit dem Gateway-WebSocket (derselbe Port wie für Operatoren) mitDocumentation 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" verbindet und über node.invoke eine Befehlsoberfläche bereitstellt (z. B. canvas.*, camera.*, device.*, notifications.*, system.*). Protokolldetails: Gateway-Protokoll.
Legacy-Transport: Bridge-Protokoll (TCP JSONL;
historisch nur für aktuelle Nodes).
macOS kann auch im Node-Modus ausgeführt werden: Die Menüleisten-App verbindet sich mit dem WS-Server des Gateway und stellt ihre lokalen Canvas-/Kamera-Befehle als Node bereit (sodass
openclaw nodes … mit diesem Mac funktioniert). Im Remote-Gateway-Modus wird die Browser-Automatisierung vom CLI-Node-Host (openclaw node run oder dem installierten Node-Dienst) übernommen, nicht vom nativen App-Node.
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
Koppeln + Status
WS-Nodes verwenden Gerätekopplung. Nodes präsentieren währendconnect eine Geräteidentität; das Gateway erstellt eine Gerätekopplungsanfrage für role: node. Genehmigen Sie sie über die Geräte-CLI (oder UI).
Schnelle CLI:
requestId erstellt. Führen Sie vor der Genehmigung erneut
openclaw devices list aus.
Hinweise:
nodes statusmarkiert einen Node als gekoppelt, wenn seine Gerätekopplungsrollenodeenthält.- Der Gerätekopplungsdatensatz ist der dauerhafte Vertrag für genehmigte Rollen. Die Token-Rotation bleibt innerhalb dieses Vertrags; sie kann einen gekoppelten Node nicht in eine andere Rolle hochstufen, die durch die Kopplungsgenehmigung nie gewährt wurde.
node.pair.*(CLI:openclaw nodes pending/approve/reject/remove/rename) ist ein separater, Gateway-eigener Node-Kopplungsspeicher; er steuert nicht den WS-connect-Handshake.openclaw nodes remove --node <id|name|ip>löscht veraltete Einträge aus diesem separaten, Gateway-eigenen Node-Kopplungsspeicher.- Der Genehmigungsumfang folgt den deklarierten Befehlen der ausstehenden Anfrage:
- Anfrage ohne Befehle:
operator.pairing - Nicht-Exec-Node-Befehle:
operator.pairing+operator.write system.run/system.run.prepare/system.which:operator.pairing+operator.admin
- Anfrage ohne Befehle:
Remote-Node-Host (system.run)
Verwenden Sie einen Node-Host, wenn Ihr Gateway auf einem Rechner läuft und Befehle auf einem anderen ausgeführt werden sollen. Das Modell spricht weiterhin mit dem Gateway; das Gateway leitetexec-Aufrufe an den Node-Host weiter, wenn host=node ausgewählt ist.
Was wo läuft
- Gateway-Host: empfängt Nachrichten, führt das Modell aus, leitet Tool-Aufrufe weiter.
- Node-Host: führt
system.run/system.whichauf dem Node-Rechner aus. - Genehmigungen: werden auf dem Node-Host über
~/.openclaw/exec-approvals.jsonerzwungen.
- Genehmigungsbasierte Node-Ausführungen binden den exakten Anfragekontext.
- Für direkte Shell-/Runtime-Dateiausführungen bindet OpenClaw außerdem nach bestem Aufwand einen konkreten lokalen Dateioperanden und verweigert die Ausführung, wenn sich diese Datei vor der Ausführung ändert.
- Wenn OpenClaw für einen Interpreter-/Runtime-Befehl nicht genau eine konkrete lokale Datei identifizieren kann, wird die genehmigungsbasierte Ausführung verweigert, statt eine vollständige Runtime-Abdeckung vorzutäuschen. Verwenden Sie Sandboxing, separate Hosts oder eine explizite vertrauenswürdige Allowlist/einen vollständigen Workflow für breitere Interpreter-Semantik.
Einen Node-Host starten (Vordergrund)
Auf dem Node-Rechner:Remote-Gateway über SSH-Tunnel (loopback-Bind)
Wenn das Gateway an loopback bindet (gateway.bind=loopback, Standard im lokalen Modus), können Remote-Node-Hosts keine direkte Verbindung herstellen. Erstellen Sie einen SSH-Tunnel und richten Sie den Node-Host auf das lokale Ende des Tunnels aus.
Beispiel (Node-Host -> Gateway-Host):
openclaw node rununterstützt Token- oder Passwortauthentifizierung.- Env-Vars werden bevorzugt:
OPENCLAW_GATEWAY_TOKEN/OPENCLAW_GATEWAY_PASSWORD. - Der Config-Fallback ist
gateway.auth.token/gateway.auth.password. - Im lokalen Modus ignoriert der Node-Host absichtlich
gateway.remote.token/gateway.remote.password. - Im Remote-Modus kommen
gateway.remote.token/gateway.remote.passwordgemäß den Remote-Prioritätsregeln infrage. - Wenn aktive lokale
gateway.auth.*-SecretRefs konfiguriert, aber nicht aufgelöst sind, schlägt die Node-Host-Authentifizierung geschlossen fehl. - Die Authentifizierungsauflösung des Node-Hosts berücksichtigt nur
OPENCLAW_GATEWAY_*-Env-Vars.
Einen Node-Host starten (Dienst)
Koppeln + benennen
Auf dem Gateway-Host:openclaw devices list aus und genehmigen Sie die aktuelle requestId.
Benennungsoptionen:
--display-namebeiopenclaw node run/openclaw node install(bleibt auf dem Node in~/.openclaw/node.jsonerhalten).openclaw nodes rename --node <id|name|ip> --name "Build Node"(Gateway-Override).
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 ausrichten
Standardwerte konfigurieren (Gateway-Konfiguration):exec-Aufruf mit host=node auf dem Node-Host (vorbehaltlich der Node-Allowlist/Genehmigungen).
host=auto wählt den Node nicht automatisch von selbst aus, aber eine explizite Anfrage pro Aufruf mit host=node ist aus auto heraus zulässig. Wenn Node-Exec der Standard für die Sitzung sein soll, setzen Sie explizit tools.exec.host=node oder /exec host=node ....
Verwandt:
Befehle aufrufen
Niedrige Ebene (rohes RPC):Befehlsrichtlinie
Node-Befehle müssen zwei Gates passieren, bevor sie aufgerufen werden können:- Der Node muss den Befehl in seiner WebSocket-Liste
connect.commandsdeklarieren. - Die Plattformrichtlinie des Gateway muss den deklarierten Befehl erlauben.
canvas.*, camera.list, location.get und screen.snapshot.
Gefährliche oder besonders datenschutzrelevante Befehle wie camera.snap, camera.clip und
screen.record erfordern weiterhin ein explizites Opt-in mit
gateway.nodes.allowCommands. gateway.nodes.denyCommands hat immer Vorrang vor Standardwerten und zusätzlichen Allowlist-Einträgen.
Plugin-eigene Node-Befehle können eine Gateway-Node-Invoke-Richtlinie hinzufügen. Diese Richtlinie läuft nach der Allowlist-Prüfung und vor der Weiterleitung an den Node, sodass rohes
node.invoke, CLI-Helper und dedizierte Agenten-Tools dieselbe Plugin-Berechtigungsgrenze teilen. Gefährliche Plugin-Node-Befehle erfordern weiterhin ein explizites Opt-in mit
gateway.nodes.allowCommands.
Nachdem ein Node seine deklarierte Befehlsliste geändert hat, lehnen Sie die alte Gerätekopplung ab und genehmigen Sie die neue Anfrage, damit das Gateway den aktualisierten Befehlssnapshot speichert.
Screenshots (Canvas-Snapshots)
Wenn der Node den Canvas (WebView) anzeigt, gibtcanvas.snapshot { format, base64 } zurück.
CLI-Helper (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/--heightzur 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 Clipdauer wird begrenzt (derzeit
<= 60s), um übergroße base64-Payloads zu vermeiden. - Android fragt nach Möglichkeit nach
CAMERA-/RECORD_AUDIO-Berechtigungen; verweigerte Berechtigungen schlagen mit*_PERMISSION_REQUIREDfehl.
Bildschirmaufzeichnungen (Nodes)
Unterstützte Nodes stellenscreen.record (mp4) bereit. Beispiel:
- Die Verfügbarkeit von
screen.recordhängt von der Node-Plattform ab. - Bildschirmaufzeichnungen werden auf
<= 60sbegrenzt. --no-audiodeaktiviert die Mikrofonaufnahme auf unterstützten Plattformen.- Verwenden Sie
--screen <index>, um ein Display auszuwählen, wenn mehrere Bildschirme verfügbar sind.
Standort (Nodes)
Nodes stellenlocation.get bereit, wenn Standort in den Einstellungen aktiviert ist.
CLI-Helper:
- Standort ist standardmäßig deaktiviert.
- „Immer“ erfordert eine Systemberechtigung; Abruf im Hintergrund erfolgt nach bestem Aufwand.
- Die Antwort enthält Lat/Lon, 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.
Aufruf auf niedriger Ebene:
- Die Berechtigungsanfrage 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- + 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
- Bewegungsbefehle sind durch die verfügbaren Sensoren nach Capability freigeschaltet.
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 Nutzlast zurück.- Shell-Ausführung läuft jetzt über das Tool
execmithost=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 wurde, leitet das Gateway diesen gespeicherten Plan weiter, nicht später vom Aufrufer bearbeitete command/cwd/session-Felder. system.notifyberücksichtigt den Status der Mitteilungsberechtigung in der macOS-App.- Nicht erkannte Node-Metadaten für
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). - Bei „immer erlauben“-Entscheidungen im Allowlist-Modus speichern bekannte Dispatch-Wrapper (
env,nice,nohup,stdbuf,timeout) die inneren ausführbaren Pfade statt der Wrapper-Pfade. Wenn das Entpacken nicht sicher ist, wird automatisch kein Allowlist-Eintrag gespeichert. - Auf Windows-Node-Hosts im Allowlist-Modus erfordern Shell-Wrapper-Ausführungen ü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 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 geschützt (Einstellungen → Exec-Genehmigungen). Ask/allowlist/full verhalten sich genauso wie beim Headless-Node-Host; abgelehnte Prompts gebenSYSTEM_RUN_DENIEDzurück. - Auf dem Headless-Node-Host wird
system.rundurch Exec-Genehmigungen geschützt (~/.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 festgelegt (und kann pro Agent überschrieben werden).
Globale Standardeinstellung:
Berechtigungszuordnung
Nodes können innode.list / node.describe eine permissions-Zuordnung enthalten, indiziert nach Berechtigungsname (z. B. screenRecording, accessibility) mit booleschen Werten (true = erteilt).
Headless-Node-Host (plattformübergreifend)
OpenClaw kann einen Headless-Node-Host (ohne UI) ausführen, der eine Verbindung zum Gateway- WebSocket herstellt undsystem.run / system.which bereitstellt. Das ist unter Linux/Windows
oder zum Ausführen eines minimalen Node neben einem Server nützlich.
Starten Sie ihn:
- Pairing ist weiterhin erforderlich (das Gateway zeigt einen Prompt zur Gerätekopplung an).
- Der Node-Host speichert seine Node-ID, sein Token, seinen Anzeigenamen und seine Gateway-Verbindungsinformationen in
~/.openclaw/node.json. - Exec-Genehmigungen werden lokal über
~/.openclaw/exec-approvals.jsonerzwungen (siehe Exec-Genehmigungen). - 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 Begleit-App zu leiten; fügen SieOPENCLAW_NODE_EXEC_FALLBACK=0hinzu, um den App-Host vorauszusetzen und geschlossen fehlzuschlagen, 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 …mit diesem Mac funktioniert). - Im Remote-Modus öffnet die App einen SSH-Tunnel für den Gateway-Port und verbindet sich mit
localhost.