Web
El Gateway sirve una pequeña Control UI para navegador (Vite + Lit) desde el mismo puerto que el WebSocket del Gateway:
- por defecto:
http://<host>:18789/ - prefijo opcional: establece
gateway.controlUi.basePath(ej./openclaw)
Las capacidades viven en Control UI. Esta página se centra en los modos de enlace, seguridad y superficies orientadas a la web.
Webhooks
Cuando hooks.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 (activado por defecto)
La Control UI está activada por defecto cuando los recursos están presentes (dist/control-ui). Puedes controlarla mediante configuración:
{
gateway: {
controlUi: { enabled: true, basePath: "/openclaw" }, // basePath opcional
},
}
Acceso Tailscale
Servir Integrado (recomendado)
Mantén el Gateway en loopback y deja que Tailscale Serve lo proxie:
{
gateway: {
bind: "loopback",
tailscale: { mode: "serve" },
},
}
Luego inicia el gateway:
openclaw gateway
Abre:
https://<magicdns>/(o tugateway.controlUi.basePathconfigurado)
Enlace Tailnet + token
{
gateway: {
bind: "tailnet",
controlUi: { enabled: true },
auth: { mode: "token", token: "your-token" },
},
}
Luego inicia el gateway (se requiere token para enlaces que no sean loopback):
openclaw gateway
Abre:
http://<tailscale-ip>:18789/(o tugateway.controlUi.basePathconfigurado)
Internet público (Funnel)
{
gateway: {
bind: "loopback",
tailscale: { mode: "funnel" },
auth: { mode: "password" }, // o OPENCLAW_GATEWAY_PASSWORD
},
}
Notas de seguridad
- La autenticación del Gateway es requerida por defecto (token/contraseña o cabeceras de identidad de Tailscale).
- Los enlaces que no sean loopback aún requieren un token/contraseña compartido (
gateway.autho variable de entorno). - El asistente genera un token de gateway por defecto (incluso en loopback).
- La UI envía
connect.params.auth.tokenoconnect.params.auth.password. - Para despliegues de Control UI que no sean loopback, establece
gateway.controlUi.allowedOriginsexplícitamente (orígenes completos). Sin esto, el inicio del gateway se rechaza por defecto. gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=truehabilita el modo de fallback de origen por cabecera Host, pero es una degradación de seguridad peligrosa.- Con Serve, las cabeceras de identidad de Tailscale pueden satisfacer la autenticación de Control UI/WebSocket cuando
gateway.auth.allowTailscaleestrue(no se requiere token/contraseña). Los endpoints de la API HTTP aún requieren token/contraseña. Establecegateway.auth.allowTailscale: falsepara requerir credenciales explícitas. Consulta Tailscale y Seguridad. Este flujo sin token asume que el host del gateway es confiable. gateway.tailscale.mode: "funnel"requieregateway.auth.mode: "password"(contraseña compartida).
Construyendo la UI
El Gateway sirve archivos estáticos desde dist/control-ui. Construyelos con:
pnpm ui:build # instala automáticamente las dependencias de la UI en la primera ejecución