Nodos
Un nodo es un dispositivo complementario (macOS/iOS/Android/headless) que se conecta al WebSocket del Gateway (el mismo puerto que los operadores) conrole: "node" y expone una superficie de comandos (p. ej., canvas.*, camera.*, system.*) vía node.invoke. Detalles del protocolo: Protocolo del Gateway.
Transporte legado: Protocolo Bridge (TCP JSONL; obsoleto/eliminado para nodos actuales).
macOS también puede ejecutarse en modo nodo: la app de la barra de menús se conecta al servidor WS del Gateway y expone sus comandos locales de canvas/cámara como un nodo (para que openclaw nodes … funcione contra esta Mac).
Notas:
- Los nodos son periféricos, no gateways. No ejecutan el servicio de gateway.
- Los mensajes de Telegram/WhatsApp/etc. llegan al gateway, no a los nodos.
- Runbook de solución de problemas: /nodes/troubleshooting
Emparejamiento + estado
Los nodos WS usan emparejamiento de dispositivos. Los nodos presentan una identidad de dispositivo duranteconnect; el Gateway
crea una solicitud de emparejamiento de dispositivo para role: node. Apruebe mediante la CLI (o la UI) de dispositivos.
CLI rápida:
nodes statusmarca un nodo como emparejado cuando su rol de emparejamiento de dispositivo incluyenode.node.pair.*(CLI:openclaw nodes pending/approve/reject) es un almacén de emparejamiento de nodos independiente, propiedad del gateway; no controla el saludo WSconnect.
Host de nodo remoto (system.run)
Use un host de nodo cuando su Gateway se ejecuta en una máquina y desea que los comandos se ejecuten en otra. El modelo sigue hablando con el gateway; el gateway reenvía llamadasexec al host de nodo cuando se selecciona host=node.
Qué se ejecuta dónde
- Host del Gateway: recibe mensajes, ejecuta el modelo, enruta llamadas a herramientas.
- Host de nodo: ejecuta
system.run/system.whichen la máquina del nodo. - Aprobaciones: aplicadas en el host de nodo vía
~/.openclaw/exec-approvals.json.
Iniciar un host de nodo (primer plano)
En la máquina del nodo:Gateway remoto vía túnel SSH (enlace a loopback)
Si el Gateway se enlaza a loopback (gateway.bind=loopback, predeterminado en modo local),
los hosts de nodo remotos no pueden conectarse directamente. Cree un túnel SSH y apunte el
host de nodo al extremo local del túnel.
Ejemplo (host de nodo -> host del gateway):
- El token es
gateway.auth.tokende la configuración del gateway (~/.openclaw/openclaw.jsonen el host del gateway). openclaw node runleeOPENCLAW_GATEWAY_TOKENpara autenticación.
Iniciar un host de nodo (servicio)
Emparejar + nombrar
En el host del gateway:--display-nameenopenclaw node run/openclaw node install(persiste en~/.openclaw/node.jsonen el nodo).openclaw nodes rename --node <id|name|ip> --name "Build Node"(anulación del gateway).
Incluir los comandos en la lista de permitidos
Las aprobaciones de ejecución son por host de nodo. Agregue entradas a la lista de permitidos desde el gateway:~/.openclaw/exec-approvals.json.
Apuntar exec al nodo
Configure valores predeterminados (configuración del gateway):exec con host=node se ejecuta en el host de nodo (sujeto a la lista de permitidos/aprobaciones del nodo).
Relacionado:
Invocar comandos
Bajo nivel (RPC sin procesar):Capturas de pantalla (instantáneas del canvas)
Si el nodo muestra el Canvas (WebView),canvas.snapshot devuelve { format, base64 }.
Ayuda de CLI (escribe en un archivo temporal e imprime MEDIA:<path>):
Controles del Canvas
canvas presentacepta URLs o rutas de archivos locales (--target), además de--x/--y/--width/--heightopcional para posicionamiento.canvas evalacepta JS en línea (--js) o un argumento posicional.
A2UI (Canvas)
- Solo se admite A2UI v0.8 JSONL (v0.9/createSurface se rechaza).
Fotos + videos (cámara del nodo)
Fotos (jpg):
mp4):
- El nodo debe estar en primer plano para
canvas.*ycamera.*(las llamadas en segundo plano devuelvenNODE_BACKGROUND_UNAVAILABLE). - La duración del clip se limita (actualmente
<= 60s) para evitar cargas base64 sobredimensionadas. - Android solicitará permisos de
CAMERA/RECORD_AUDIOcuando sea posible; los permisos denegados fallan con*_PERMISSION_REQUIRED.
Grabaciones de pantalla (nodos)
Los nodos exponenscreen.record (mp4). Ejemplo:
screen.recordrequiere que la app del nodo esté en primer plano.- Android mostrará el aviso del sistema para captura de pantalla antes de grabar.
- Las grabaciones de pantalla se limitan a
<= 60s. --no-audiodeshabilita la captura del micrófono (compatible con iOS/Android; macOS usa el audio de captura del sistema).- Use
--screen <index>para seleccionar una pantalla cuando hay varias disponibles.
Ubicación (nodos)
Los nodos exponenlocation.get cuando Ubicación está habilitada en la configuración.
Ayuda de CLI:
- La Ubicación está desactivada de forma predeterminada.
- “Siempre” requiere permiso del sistema; la obtención en segundo plano es de mejor esfuerzo.
- La respuesta incluye lat/lon, precisión (metros) y marca de tiempo.
SMS (nodos Android)
Los nodos Android pueden exponersms.send cuando el usuario otorga permiso de SMS y el dispositivo admite telefonía.
Invocación de bajo nivel:
- El aviso de permisos debe aceptarse en el dispositivo Android antes de que se anuncie la capacidad.
- Los dispositivos solo Wi‑Fi sin telefonía no anunciarán
sms.send.
Comandos del sistema (host de nodo / nodo mac)
El nodo macOS exponesystem.run, system.notify y system.execApprovals.get/set.
El host de nodo headless expone system.run, system.which y system.execApprovals.get/set.
Ejemplos:
system.rundevuelve stdout/stderr/código de salida en la carga útil.system.notifyrespeta el estado de permisos de notificaciones en la app macOS.system.runadmite--cwd,--env KEY=VAL,--command-timeouty--needs-screen-recording.system.notifyadmite--priority <passive|active|timeSensitive>y--delivery <system|overlay|auto>.- Los nodos macOS descartan las anulaciones
PATH; los hosts de nodo headless solo aceptanPATHcuando antepone el PATH del host de nodo. Si necesitas entradas adicionales en PATH, configura el entorno del servicio host del nodo (o instala las herramientas en ubicaciones estándar) en lugar de pasarPATHmediante--env. - En modo nodo de macOS,
system.runestá controlado por aprobaciones de exec en la app macOS (Configuración → Aprobaciones de exec). Ask/allowlist/full se comportan igual que el host de nodo headless; las solicitudes denegadas devuelvenSYSTEM_RUN_DENIED. - En el host de nodo headless,
system.runestá controlado por aprobaciones de exec (~/.openclaw/exec-approvals.json).
Enlazado del nodo Exec
Cuando hay varios nodos disponibles, puede vincular exec a un nodo específico. Esto establece el nodo predeterminado paraexec host=node (y puede anularse por agente).
Predeterminado global:
Mapa de permisos
Los nodos pueden incluir un mapapermissions en node.list / node.describe, con claves por nombre de permiso (p. ej., screenRecording, accessibility) y valores booleanos (true = concedido).
Host de nodo headless (multiplataforma)
OpenClaw puede ejecutar un host de nodo headless (sin UI) que se conecta al WebSocket del Gateway y exponesystem.run / system.which. Esto es útil en Linux/Windows
o para ejecutar un nodo mínimo junto a un servidor.
Iniciarlo:
- El emparejamiento sigue siendo obligatorio (el Gateway mostrará un aviso de aprobación de nodo).
- El host de nodo almacena su id de nodo, token, nombre para mostrar e información de conexión al gateway en
~/.openclaw/node.json. - Las aprobaciones de exec se aplican localmente vía
~/.openclaw/exec-approvals.json(ver Aprobaciones de exec). - En macOS, el host de nodo headless prefiere el host de exec de la app complementaria cuando es alcanzable y
recurre a la ejecución local si la app no está disponible. Configure
OPENCLAW_NODE_EXEC_HOST=apppara requerir la app, oOPENCLAW_NODE_EXEC_FALLBACK=0para deshabilitar el fallback. - Agregue
--tls/--tls-fingerprintcuando el WS del Gateway use TLS.
Modo nodo de Mac
- La app de la barra de menús de macOS se conecta al servidor WS del Gateway como un nodo (para que
openclaw nodes …funcione contra esta Mac). - En modo remoto, la app abre un túnel SSH para el puerto del Gateway y se conecta a
localhost.