Web (Gateway)
El Gateway sirve una pequeña UI de control del navegador (Vite + Lit) desde el mismo puerto que el WebSocket del Gateway:- predeterminado:
http://<host>:18789/ - prefijo opcional: establece
gateway.controlUi.basePath(por ejemplo,/openclaw)
Webhooks
Cuandohooks.enabled=true, el Gateway también expone un pequeño endpoint de webhook en el mismo servidor HTTP.
Consulta Configuración del Gateway → hooks para autenticación + cargas útiles.
Configuración (activada por defecto)
La Control UI está activada por defecto cuando los assets están presentes (dist/control-ui).
Puedes controlarla mediante la configuración:
Acceso con Tailscale
Serve integrado (recomendado)
Mantén el Gateway en loopback y deja que Tailscale Serve actúe como proxy:https://<magicdns>/(o elgateway.controlUi.basePathque hayas configurado)
Bind en tailnet + token
http://<tailscale-ip>:18789/(o elgateway.controlUi.basePathque hayas configurado)
Internet pública (Funnel)
Notas de seguridad
- La autenticación del Gateway es obligatoria por defecto (token, contraseña, proxy de confianza o encabezados de identidad de Tailscale Serve cuando está habilitado).
- Los binds sin loopback siguen requiriendo autenticación del gateway. En la práctica eso significa autenticación con token/contraseña o un proxy inverso con conocimiento de identidad con
gateway.auth.mode: "trusted-proxy". - El asistente crea autenticación de secreto compartido por defecto y normalmente genera un token de gateway (incluso en loopback).
- En modo de secreto compartido, la UI envía
connect.params.auth.tokenoconnect.params.auth.password. - En modos con identidad, como Tailscale Serve o
trusted-proxy, la comprobación de autenticación de WebSocket se satisface desde los encabezados de la solicitud. - Para despliegues de Control UI sin loopback, establece
gateway.controlUi.allowedOriginsexplícitamente (orígenes completos). Sin ello, el inicio del gateway se rechaza por defecto. gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=truehabilita el modo de respaldo de origen mediante encabezado Host, pero es una degradación de seguridad peligrosa.- Con Serve, los encabezados de identidad de Tailscale pueden satisfacer la autenticación de la Control UI/WebSocket
cuando
gateway.auth.allowTailscaleestrue(no se requiere token/contraseña). Los endpoints de la API HTTP no usan esos encabezados de identidad de Tailscale; siguen el modo normal de autenticación HTTP del gateway. Establecegateway.auth.allowTailscale: falsepara requerir credenciales explícitas. Consulta Tailscale y Security. Este flujo sin token asume que el host del gateway es de confianza. gateway.tailscale.mode: "funnel"requieregateway.auth.mode: "password"(contraseña compartida).
Compilar la UI
El Gateway sirve archivos estáticos desdedist/control-ui. Compílalos con: