Nodes
Um nó é um dispositivo complementar (macOS/iOS/Android/headless) que se conecta ao WebSocket do Gateway (mesma porta dos operadores) comrole: "node" e expõe uma superfície de comandos (por exemplo, canvas.*, camera.*, system.*) via node.invoke. Detalhes do protocolo: Gateway protocol.
Transporte legado: Bridge protocol (TCP JSONL; obsoleto/removido para nós atuais).
O macOS também pode rodar em modo nó: o app da barra de menus conecta-se ao servidor WS do Gateway e expõe seus comandos locais de canvas/câmera como um nó (assim openclaw nodes … funciona neste Mac).
Notas:
- Nós são periféricos, não gateways. Eles não executam o serviço de gateway.
- Mensagens de Telegram/WhatsApp/etc. chegam ao gateway, não aos nós.
- Runbook de solução de problemas: /nodes/troubleshooting
Pareamento + status
Nós WS usam pareamento de dispositivo. Os nós apresentam uma identidade de dispositivo duranteconnect; o Gateway
cria uma solicitação de pareamento de dispositivo para role: node. Aprove via CLI (ou UI) do dispositivo.
CLI rápido:
nodes statusmarca um nó como pareado quando sua função de pareamento de dispositivo incluinode.node.pair.*(CLI:openclaw nodes pending/approve/reject) é um armazenamento de pareamento de nós separado e pertencente ao gateway; ele não bloqueia o handshake WS deconnect.
Host remoto de nó (system.run)
Use um host de nó quando seu Gateway roda em uma máquina e você quer que comandos sejam executados em outra. O modelo ainda fala com o gateway; o gateway encaminha chamadas deexec para o host de nó quando host=node é selecionado.
O que roda onde
- Host do Gateway: recebe mensagens, executa o modelo, roteia chamadas de ferramentas.
- Host de nó: executa
system.run/system.whichna máquina do nó. - Aprovações: aplicadas no host de nó via
~/.openclaw/exec-approvals.json.
Iniciar um host de nó (foreground)
Na máquina do nó:Gateway remoto via túnel SSH (bind em loopback)
Se o Gateway fizer bind em loopback (gateway.bind=loopback, padrão no modo local),
hosts de nó remotos não conseguem se conectar diretamente. Crie um túnel SSH e aponte o
host de nó para a extremidade local do túnel.
Exemplo (host de nó -> host do gateway):
- O token é
gateway.auth.tokenda configuração do gateway (~/.openclaw/openclaw.jsonno host do gateway). openclaw node runlêOPENCLAW_GATEWAY_TOKENpara autenticação.
Iniciar um host de nó (serviço)
Parear + nomear
No host do gateway:--display-nameemopenclaw node run/openclaw node install(persiste em~/.openclaw/node.jsonno nó).openclaw nodes rename --node <id|name|ip> --name "Build Node"(sobrescrita no gateway).
Colocar comandos na lista de permissões
Aprovações de exec são por host de nó. Adicione entradas de lista de permissões a partir do gateway:~/.openclaw/exec-approvals.json.
Vinculação de exec ao nó
Configure os padrões (configuração do gateway):exec com host=node roda no host de nó (sujeito à lista de permissões/aprovações do nó).
Relacionado:
Invocando comandos
Baixo nível (RPC bruto):Capturas de tela (snapshots do canvas)
Se o nó estiver exibindo o Canvas (WebView),canvas.snapshot retorna { format, base64 }.
Auxiliar de CLI (grava em um arquivo temporário e imprime MEDIA:<path>):
Controles do Canvas
canvas presentaceita URLs ou caminhos de arquivo local (--target), além de--x/--y/--width/--heightopcional para posicionamento.canvas evalaceita JS inline (--js) ou um argumento posicional.
A2UI (Canvas)
- Apenas A2UI v0.8 JSONL é suportado (v0.9/createSurface é rejeitado).
Fotos + vídeos (câmera do nó)
Fotos (jpg):
mp4):
- O nó deve estar em primeiro plano para
canvas.*ecamera.*(chamadas em segundo plano retornamNODE_BACKGROUND_UNAVAILABLE). - A duração do clipe é limitada (atualmente
<= 60s) para evitar payloads base64 muito grandes. - O Android solicitará permissões de
CAMERA/RECORD_AUDIOquando possível; permissões negadas falham com*_PERMISSION_REQUIRED.
Gravações de tela (nós)
Os nós expõemscreen.record (mp4). Exemplo:
screen.recordexige que o app do nó esteja em primeiro plano.- O Android mostrará o prompt do sistema de captura de tela antes da gravação.
- As gravações de tela são limitadas a
<= 60s. --no-audiodesativa a captura do microfone (suportado em iOS/Android; o macOS usa áudio de captura do sistema).- Use
--screen <index>para selecionar um display quando houver múltiplas telas disponíveis.
Localização (nós)
Os nós expõemlocation.get quando Localização está habilitada nas configurações.
Auxiliar de CLI:
- A Localização vem desativada por padrão.
- “Sempre” exige permissão do sistema; a busca em segundo plano é por melhor esforço.
- A resposta inclui lat/lon, precisão (metros) e timestamp.
SMS (nós Android)
Nós Android podem exporsms.send quando o usuário concede permissão de SMS e o dispositivo suporta telefonia.
Invocação de baixo nível:
- O prompt de permissão deve ser aceito no dispositivo Android antes que a capacidade seja anunciada.
- Dispositivos apenas Wi‑Fi sem telefonia não anunciarão
sms.send.
Comandos do sistema (host de nó / nó mac)
O nó macOS expõesystem.run, system.notify e system.execApprovals.get/set.
O host de nó headless expõe system.run, system.which e system.execApprovals.get/set.
Exemplos:
system.runretorna stdout/stderr/código de saída no payload.system.notifyrespeita o estado de permissão de notificações no app macOS.system.runsuporta--cwd,--env KEY=VAL,--command-timeoute--needs-screen-recording.system.notifysuporta--priority <passive|active|timeSensitive>e--delivery <system|overlay|auto>.- Hosts Node ignoram substituições de
PATH. Se você precisar de entradas adicionais no PATH, configure o ambiente do serviço do host Node (ou instale as ferramentas em locais padrão) em vez de passarPATHvia--env. - No modo nó do macOS,
system.runé controlado por aprovações de exec no app macOS (Configurações → Exec approvals). Ask/allowlist/full se comportam da mesma forma que no host de nó headless; prompts negados retornamSYSTEM_RUN_DENIED. - No host de nó headless,
system.runé controlado por aprovações de exec (~/.openclaw/exec-approvals.json).
Associar nó Exec
Quando vários nós estão disponíveis, você pode vincular exec a um nó específico. Isso define o nó padrão paraexec host=node (e pode ser sobrescrito por agente).
Padrão global:
Mapa de permissões
Os nós podem incluir um mapapermissions em node.list / node.describe, indexado pelo nome da permissão (por exemplo, screenRecording, accessibility) com valores booleanos (true = concedida).
Host de nó headless (multiplataforma)
O OpenClaw pode rodar um host de nó headless (sem UI) que se conecta ao WebSocket do Gateway e expõesystem.run / system.which. Isso é útil em Linux/Windows
ou para executar um nó mínimo ao lado de um servidor.
Inicie-o:
- O pareamento ainda é necessário (o Gateway mostrará um prompt de aprovação do nó).
- O host de nó armazena seu id de nó, token, nome de exibição e informações de conexão do gateway em
~/.openclaw/node.json. - As aprovações de exec são aplicadas localmente via
~/.openclaw/exec-approvals.json(veja Exec approvals). - No macOS, o host de nó headless prefere o host de exec do app complementar quando acessível e
faz fallback para execução local se o app estiver indisponível. Defina
OPENCLAW_NODE_EXEC_HOST=apppara exigir o app, ouOPENCLAW_NODE_EXEC_FALLBACK=0para desativar o fallback. - Adicione
--tls/--tls-fingerprintquando o WS do Gateway usar TLS.
Modo nó do Mac
- O app da barra de menus do macOS conecta-se ao servidor WS do Gateway como um nó (assim
openclaw nodes …funciona neste Mac). - Em modo remoto, o app abre um túnel SSH para a porta do Gateway e conecta-se a
localhost.