Protocolo Bridge (transporte de nodo heredado)
El protocolo Bridge es un transporte de nodo heredado (TCP JSONL). Los nuevos clientes de nodo deben usar el protocolo WebSocket unificado del Gateway en su lugar. Si está creando un operador o un cliente de nodo, use el protocolo del Gateway. Nota: Las compilaciones actuales de OpenClaw ya no incluyen el listener TCP del bridge; este documento se conserva como referencia histórica. Las claves de configuración heredadasbridge.* ya no forman parte del esquema de configuración.
Por qué tenemos ambos
- Límite de seguridad: el bridge expone una pequeña lista de permitidos en lugar de la superficie completa de la API del gateway.
- Emparejamiento + identidad del nodo: la admisión de nodos es responsabilidad del gateway y está vinculada a un token por nodo.
- UX de descubrimiento: los nodos pueden descubrir gateways vía Bonjour en la LAN, o conectarse directamente a través de un tailnet.
- WS de loopback: el plano de control WS completo permanece local a menos que se tunelice vía SSH.
Transporte
- TCP, un objeto JSON por línea (JSONL).
- TLS opcional (cuando
bridge.tls.enabledes true). - El puerto de escucha predeterminado heredado era
18790(las compilaciones actuales no inician un bridge TCP).
bridgeTls=1 más
bridgeTlsSha256 para que los nodos puedan fijar el certificado. Ten en cuenta que los registros TXT de Bonjour/mDNS son
no autenticados; los clientes no deben tratar la huella digital anunciada como un
pin autorizado sin la intención explícita del usuario u otra verificación fuera de banda.
Handshake + emparejamiento
- El cliente envía
hellocon metadatos del nodo + token (si ya está emparejado). - Si no está emparejado, el gateway responde
error(NOT_PAIRED/UNAUTHORIZED). - El cliente envía
pair-request. - El gateway espera la aprobación y luego envía
pair-okyhello-ok.
hello-ok devuelve serverName y puede incluir canvasHostUrl.
Frames
Cliente → Gateway:req/res: RPC del gateway con alcance (chat, sesiones, configuración, salud, voicewake, skills.bins)event: señales del nodo (transcripción de voz, solicitud de agente, suscripción a chat, ciclo de vida de exec)
invoke/invoke-res: comandos del nodo (canvas.*,camera.*,screen.record,location.get,sms.send)event: actualizaciones de chat para sesiones suscritasping/pong: mantenimiento de conexión
src/gateway/server-bridge.ts (eliminado).
Eventos del ciclo de vida de exec
Los nodos pueden emitir eventosexec.finished o exec.denied para exponer la actividad de system.run.
Estos se mapean a eventos del sistema en el gateway. (Los nodos heredados aún pueden emitir exec.started.)
Campos del payload (todos opcionales salvo que se indique lo contrario):
sessionKey(obligatorio): sesión del agente que recibirá el evento del sistema.runId: id de exec único para agrupar.command: cadena de comando en bruto o formateada.exitCode,timedOut,success,output: detalles de finalización (solo cuando finaliza).reason: motivo de denegación (solo cuando se deniega).
Uso de tailnet
- Vincule el bridge a una IP de tailnet:
bridge.bind: "tailnet"en~/.openclaw/openclaw.json. - Los clientes se conectan mediante el nombre MagicDNS o la IP del tailnet.
- Bonjour no cruza redes; use host/puerto manual o DNS‑SD de área amplia cuando sea necesario.