role: "node" en een commandoppervlak aanbiedt (bijv. canvas.*, camera.*, device.*, notifications.*, system.*) via node.invoke. Protocoldetails: Gateway-protocol.
Verouderd transport: Bridge-protocol (TCP JSONL;
alleen historisch voor huidige nodes).
macOS kan ook in node-modus draaien: de menubalk-app maakt verbinding met de
WS-server van de Gateway en biedt de lokale canvas-/camera-commando’s aan als node (zodat
openclaw nodes … werkt tegen deze Mac). In externe-gatewaymodus wordt
browserautomatisering afgehandeld door de CLI-nodehost (openclaw node run of de
geïnstalleerde nodeservice), niet door de native app-node.
Opmerkingen:
- Nodes zijn randapparaten, geen gateways. Ze draaien de gatewayservice niet.
- Telegram/WhatsApp/enz. berichten komen binnen op de gateway, niet op nodes.
- Runbook voor probleemoplossing: /nodes/troubleshooting
Koppelen + status
WS-nodes gebruiken apparaatkoppeling. Nodes presenteren een apparaatidentiteit tijdensconnect; de Gateway
maakt een apparaatkoppelingsverzoek voor role: node. Keur goed via de apparaten-CLI (of UI).
Snelle CLI:
requestId aangemaakt. Voer
openclaw devices list opnieuw uit voordat je goedkeurt.
Opmerkingen:
nodes statusmarkeert een node als gekoppeld wanneer de rol van de apparaatkoppelingnodebevat.- Het apparaatkoppelingsrecord is het duurzame contract voor goedgekeurde rollen. Tokenrotatie blijft binnen dat contract; het kan een gekoppelde node niet upgraden naar een andere rol waarvoor koppeling nooit goedkeuring heeft verleend.
node.pair.*(CLI:openclaw nodes pending/approve/reject/remove/rename) is een aparte, gateway-eigendom nodekoppelingsopslag; deze bewaakt de WS-connect-handshake niet.openclaw nodes remove --node <id|name|ip>verwijdert een nodekoppeling. Voor een apparaat-ondersteunde node trekt dit denode-rol van het apparaat indevices/paired.jsonin en verbreekt het de node-rolsessies van dat apparaat — een apparaat met gemengde rollen behoudt zijn rij en verliest alleen denode-rol, terwijl een rij voor een apparaat met alleen node wordt verwijderd. Het wist ook elke overeenkomende vermelding uit de aparte, gateway-eigendom node koppelingsopslag.operator.pairingmag niet-operator-noderijen verwijderen; een apparaat-tokenaanroeper die zijn eigen node-rol op een apparaat met gemengde rollen intrekt heeft daarnaastoperator.adminnodig.- Goedkeuringsscope volgt de gedeclareerde commando’s van het openstaande verzoek:
- verzoek zonder commando’s:
operator.pairing - niet-exec-nodecommando’s:
operator.pairing+operator.write system.run/system.run.prepare/system.which:operator.pairing+operator.admin
- verzoek zonder commando’s:
Externe nodehost (system.run)
Gebruik een nodehost wanneer je Gateway op de ene machine draait en je commando’s op een andere wilt uitvoeren. Het model praat nog steeds met de gateway; de gateway stuurtexec-aanroepen door naar de nodehost wanneer host=node is geselecteerd.
Wat draait waar
- Gatewayhost: ontvangt berichten, draait het model, routeert toolaanroepen.
- Nodehost: voert
system.run/system.whichuit op de nodemachine. - Goedkeuringen: afgedwongen op de nodehost via
~/.openclaw/exec-approvals.json.
- Node-uitvoeringen met goedkeuring binden de exacte verzoekcontext.
- Voor directe shell-/runtime-bestandsuitvoeringen bindt OpenClaw ook naar beste vermogen één concrete lokale bestandsoperand en weigert de uitvoering als dat bestand vóór uitvoering wijzigt.
- Als OpenClaw niet precies één concreet lokaal bestand voor een interpreter-/runtimecommando kan identificeren, wordt uitvoering met goedkeuring geweigerd in plaats van volledige runtime-dekking te suggereren. Gebruik sandboxing, aparte hosts, of een expliciete vertrouwde allowlist/volledige workflow voor bredere interpretersemantiek.
Een nodehost starten (voorgrond)
Op de nodemachine:Externe gateway via SSH-tunnel (loopback-binding)
Als de Gateway aan loopback bindt (gateway.bind=loopback, standaard in lokale modus),
kunnen externe nodehosts niet rechtstreeks verbinden. Maak een SSH-tunnel en wijs de
nodehost naar het lokale uiteinde van de tunnel.
Voorbeeld (nodehost -> gatewayhost):
openclaw node runondersteunt authenticatie met token of wachtwoord.- Omgevingsvariabelen hebben de voorkeur:
OPENCLAW_GATEWAY_TOKEN/OPENCLAW_GATEWAY_PASSWORD. - Config-fallback is
gateway.auth.token/gateway.auth.password. - In lokale modus negeert de nodehost bewust
gateway.remote.token/gateway.remote.password. - In externe modus komen
gateway.remote.token/gateway.remote.passwordin aanmerking volgens de externe voorrangsregels. - Als actieve lokale
gateway.auth.*SecretRefs zijn geconfigureerd maar niet opgelost, faalt nodehost-auth gesloten. - Auth-resolutie voor nodehosts respecteert alleen
OPENCLAW_GATEWAY_*-omgevingsvariabelen.
Een nodehost starten (service)
Koppelen + naam
Op de gatewayhost:openclaw devices list opnieuw uit
en keur de huidige requestId goed.
Naamgevingsopties:
--display-nameopopenclaw node run/openclaw node install(blijft bewaard in~/.openclaw/node.jsonop de node).openclaw nodes rename --node <id|name|ip> --name "Build Node"(gateway-override).
De commando’s allowlisten
Exec-goedkeuringen zijn per nodehost. Voeg allowlist-vermeldingen toe vanaf de gateway:~/.openclaw/exec-approvals.json.
Exec naar de node wijzen
Configureer standaardinstellingen (gatewayconfig):exec-aanroep met host=node op de nodehost (onderhevig aan de
node-allowlist/goedkeuringen).
host=auto kiest de node niet impliciet zelfstandig, maar een expliciet per-aanroepverzoek host=node is toegestaan vanuit auto. Als je node-exec als standaard voor de sessie wilt, stel dan expliciet tools.exec.host=node of /exec host=node ... in.
Gerelateerd:
Lokale modelinferentie
Een desktop- of servernode kan chat-geschikte modellen aanbieden vanuit een Ollama-server die op die node draait. Agents gebruiken denode_inference-tool van de Ollama-plugin om
geïnstalleerde modellen te ontdekken en een begrensde prompt extern uit te voeren; de Gateway heeft
geen directe netwerktoegang tot Ollama nodig. Zie Ollama node-lokale inferentie
voor installatie, modelfiltering en directe verificatiecommando’s.
Commando’s aanroepen
Laag niveau (raw RPC):Commandobeleid
Nodecommando’s moeten twee poorten passeren voordat ze kunnen worden aangeroepen:- De node moet het commando declareren in zijn WebSocket-
connect.commands-lijst. - Het platformbeleid van de gateway moet het gedeclareerde commando toestaan.
canvas.*, camera.list, location.get en screen.snapshot standaard toe.
Vertrouwde nodes die de talk-capability adverteren of talk.*-commando’s declareren
staan ook gedeclareerde push-to-talk-commando’s (talk.ptt.start, talk.ptt.stop,
talk.ptt.cancel, talk.ptt.once) standaard toe, onafhankelijk van het platformlabel.
Gevaarlijke of privacygevoelige commando’s zoals camera.snap, camera.clip en
screen.record vereisen nog steeds expliciete opt-in met
gateway.nodes.allowCommands. gateway.nodes.denyCommands wint altijd van
standaardwaarden en extra allowlist-vermeldingen.
Plugin-eigendom nodecommando’s kunnen een Gateway-node-invoke-beleid toevoegen. Dat beleid
draait na de allowlist-controle en vóór het doorsturen naar de node, zodat raw
node.invoke, CLI-helpers en specifieke agenttools dezelfde plugin-
toestemmingsgrens delen. Gevaarlijke plugin-nodecommando’s vereisen nog steeds expliciete
gateway.nodes.allowCommands-opt-in.
Nadat een node zijn gedeclareerde commandolijst wijzigt, wijs je de oude apparaatkoppeling af
en keur je het nieuwe verzoek goed zodat de gateway de bijgewerkte commandosnapshot opslaat.
Config (openclaw.json)
Node-gerelateerde instellingen staan onder gateway.nodes en tools.exec:
denyCommands verwijdert een commando zelfs wanneer een
platformstandaard of allowCommands-vermelding het anders zou toestaan. Zie
Referentie voor Gateway-configuratie
voor velddetails over gateway-nodekoppeling en commandobeleid.
Exec-node-override per agent:
Schermafbeeldingen (canvas-snapshots)
Als de node de Canvas (WebView) toont, retourneertcanvas.snapshot { format, base64 }.
CLI-helper (schrijft naar een tijdelijk bestand en print het opgeslagen pad):
Canvas-besturing
canvas presentaccepteert URL’s of lokale bestandspaden (--target), plus optioneel--x/--y/--width/--heightvoor positionering.canvas evalaccepteert inline JS (--js) of een positioneel argument.
A2UI (Canvas)
- Mobiele Nodes gebruiken een gebundelde app-eigen A2UI-pagina voor rendering met acties.
- Alleen A2UI v0.8 JSONL wordt ondersteund (v0.9/createSurface wordt geweigerd).
- iOS en Android renderen externe Gateway Canvas-pagina’s, maar A2UI-knopacties worden alleen verzonden vanaf de gebundelde app-eigen A2UI-pagina. Door Gateway gehoste HTTP/HTTPS A2UI-pagina’s zijn op die mobiele clients alleen voor rendering.
Foto’s + video’s (Node-camera)
Foto’s (jpg):
mp4):
- De Node moet op de voorgrond staan voor
canvas.*encamera.*(achtergrondaanroepen retournerenNODE_BACKGROUND_UNAVAILABLE). - De clipduur wordt begrensd (momenteel
<= 60s) om te grote base64-payloads te voorkomen. - Android vraagt waar mogelijk om
CAMERA/RECORD_AUDIO-machtigingen; geweigerde machtigingen mislukken met*_PERMISSION_REQUIRED.
Schermopnamen (Nodes)
Ondersteunde Nodes biedenscreen.record (mp4). Voorbeeld:
- De beschikbaarheid van
screen.recordhangt af van het Node-platform. - Schermopnamen worden begrensd op
<= 60s. --no-audioschakelt microfoonopname uit op ondersteunde platforms.- Gebruik
--screen <index>om een scherm te selecteren wanneer meerdere schermen beschikbaar zijn.
Locatie (Nodes)
Nodes biedenlocation.get wanneer Locatie is ingeschakeld in de instellingen.
CLI-helper:
- Locatie staat standaard uit.
- “Altijd” vereist systeemmachtiging; ophalen op de achtergrond gebeurt naar beste vermogen.
- Het antwoord bevat lat/lon, nauwkeurigheid (meters) en tijdstempel.
SMS (Android-Nodes)
Android-Nodes kunnensms.send bieden wanneer de gebruiker SMS-machtiging verleent en het apparaat telefonie ondersteunt.
Low-level aanroep:
- De machtigingsprompt moet op het Android-apparaat worden geaccepteerd voordat de capability wordt geadverteerd.
- Apparaten met alleen wifi zonder telefonie adverteren
sms.sendniet.
Android-apparaat- + persoonlijkegegevenscommando’s
Android-Nodes kunnen aanvullende commandofamilies adverteren wanneer de bijbehorende capabilities zijn ingeschakeld. Beschikbare families:device.status,device.info,device.permissions,device.healthdevice.appswanneer het delen van geïnstalleerde apps is ingeschakeld in Android-instellingennotifications.list,notifications.actionsphotos.latestcontacts.search,contacts.addcalendar.events,calendar.addcallLog.searchsms.searchmotion.activity,motion.pedometer
device.appsis opt-in en retourneert standaard apps die zichtbaar zijn in de launcher.- Bewegingscommando’s worden op capability begrensd door beschikbare sensoren.
Systeemcommando’s (Node-host / Mac-Node)
De macOS-Node biedtsystem.run, system.notify en system.execApprovals.get/set.
De headless Node-host biedt system.run, system.which en system.execApprovals.get/set.
Voorbeelden:
system.runretourneert stdout/stderr/exitcode in de payload.- Shell-uitvoering loopt nu via de
exec-tool methost=node;nodesblijft het directe RPC-oppervlak voor expliciete Node-commando’s. nodes invokebiedt geensystem.runofsystem.run.prepare; die blijven alleen op het exec-pad.- Het exec-pad bereidt vóór goedkeuring een canoniek
systemRunPlanvoor. Zodra een goedkeuring is verleend, stuurt de gateway dat opgeslagen plan door, niet later door de aanroeper bewerkte command/cwd/session-velden. system.notifyrespecteert de status van notificatiemachtigingen in de macOS-app.- Niet-herkende Node-
platform- /deviceFamily-metadata gebruiken een conservatieve standaard-allowlist diesystem.runensystem.whichuitsluit. Als je die commando’s bewust nodig hebt voor een onbekend platform, voeg ze dan expliciet toe viagateway.nodes.allowCommands. system.runondersteunt--cwd,--env KEY=VAL,--command-timeouten--needs-screen-recording.- Voor shell-wrappers (
bash|sh|zsh ... -c/-lc) worden request-scoped--env-waarden beperkt tot een expliciete allowlist (TERM,LANG,LC_*,COLORTERM,NO_COLOR,FORCE_COLOR). - Voor allow-always-beslissingen in allowlist-modus blijven bekende dispatch-wrappers (
env,flock,nice,nohup,stdbuf,timeout) interne executable-paden bewaren in plaats van wrapper-paden. Als uitpakken niet veilig is, wordt er niet automatisch een allowlist-vermelding bewaard. - Op Windows-Node-hosts in allowlist-modus vereisen shell-wrapper-runs via
cmd.exe /cgoedkeuring (alleen een allowlist-vermelding staat de wrapper-vorm niet automatisch toe). system.notifyondersteunt--priority <passive|active|timeSensitive>en--delivery <system|overlay|auto>.- Node-hosts negeren
PATH-overschrijvingen en verwijderen gevaarlijke opstart-/shellsleutels (DYLD_*,LD_*,BASHOPTS,FPATH,KSH_ENV,NODE_OPTIONS,NODE_REDIRECT_WARNINGS,NODE_REPL_EXTERNAL_MODULE,NODE_REPL_HISTORY,NODE_V8_COVERAGE,PYTHON*,PERL*,RUBYOPT,SHELLOPTS,PS4,TCLLIBPATH). Als je extra PATH-vermeldingen nodig hebt, configureer dan de serviceomgeving van de Node-host (of installeer tools op standaardlocaties) in plaats vanPATHvia--envdoor te geven. - In macOS-Node-modus wordt
system.runbegrensd door exec-goedkeuringen in de macOS-app (Instellingen → Exec-goedkeuringen). Ask/allowlist/full gedragen zich hetzelfde als de headless Node-host; geweigerde prompts retournerenSYSTEM_RUN_DENIED. - Op de headless Node-host wordt
system.runbegrensd door exec-goedkeuringen (~/.openclaw/exec-approvals.json).
Exec-Node-binding
Wanneer meerdere Nodes beschikbaar zijn, kun je exec aan een specifieke Node binden. Dit stelt de standaard-Node in voorexec host=node (en kan per agent worden overschreven).
Globale standaard:
Machtigingenkaart
Nodes kunnen eenpermissions-kaart opnemen in node.list / node.describe, gesleuteld op machtigingsnaam (bijv. screenRecording, accessibility) met booleaanse waarden (true = verleend).
Headless Node-host (cross-platform)
OpenClaw kan een headless Node-host (geen UI) uitvoeren die verbinding maakt met de Gateway WebSocket ensystem.run / system.which biedt. Dit is nuttig op Linux/Windows
of om een minimale Node naast een server uit te voeren.
Start deze:
- Koppelen is nog steeds vereist (de Gateway toont een prompt om apparaten te koppelen).
- De Node-host slaat zijn Node-id, token, weergavenaam en Gateway-verbindingsinfo op in
~/.openclaw/node.json. - Exec-goedkeuringen worden lokaal afgedwongen via
~/.openclaw/exec-approvals.json(zie Exec-goedkeuringen). - Op macOS voert de headless Node-host
system.runstandaard lokaal uit. StelOPENCLAW_NODE_EXEC_HOST=appin omsystem.runvia de exec-host van de begeleidende app te routeren; voegOPENCLAW_NODE_EXEC_FALLBACK=0toe om de app-host te vereisen en fail-closed te mislukken als deze niet beschikbaar is. - Voeg
--tls/--tls-fingerprinttoe wanneer de Gateway WS TLS gebruikt.
Mac-Node-modus
- De macOS-menubalkapp maakt verbinding met de Gateway WS-server als Node (zodat
openclaw nodes …tegen deze Mac werkt). - In externe modus opent de app een SSH-tunnel voor de Gateway-poort en maakt verbinding met
localhost.