Web (Gateway)
O Gateway fornece uma pequena Control UI no navegador (Vite + Lit) na mesma porta do WebSocket do Gateway:- padrão:
http://<host>:18789/ - prefixo opcional: defina
gateway.controlUi.basePath(por exemplo,/openclaw)
Webhooks
Quandohooks.enabled=true, o Gateway também expõe um pequeno endpoint de webhook no mesmo servidor HTTP.
Veja Gateway configuration → hooks para auth + payloads.
Config (ativado por padrão)
A Control UI é ativada por padrão quando os assets estão presentes (dist/control-ui).
Você pode controlá-la via config:
Acesso por Tailscale
Serve integrado (recomendado)
Mantenha o Gateway em loopback e deixe o Tailscale Serve fazer o proxy:https://<magicdns>/(ou ogateway.controlUi.basePathque você configurou)
Bind na tailnet + token
http://<tailscale-ip>:18789/(ou ogateway.controlUi.basePathque você configurou)
Internet pública (Funnel)
Notas de segurança
- A auth do Gateway é exigida por padrão (token, senha, trusted-proxy ou cabeçalhos de identidade do Tailscale Serve quando habilitados).
- Binds sem loopback ainda exigem auth do gateway. Na prática, isso significa auth por token/senha ou um proxy reverso com reconhecimento de identidade usando
gateway.auth.mode: "trusted-proxy". - O assistente cria auth com segredo compartilhado por padrão e normalmente gera um token do gateway (mesmo em loopback).
- No modo de segredo compartilhado, a UI envia
connect.params.auth.tokenouconnect.params.auth.password. - Em modos com identidade, como Tailscale Serve ou
trusted-proxy, a verificação de auth do WebSocket é satisfeita a partir dos cabeçalhos da requisição. - Para implantações da Control UI sem loopback, defina
gateway.controlUi.allowedOriginsexplicitamente (origins completas). Sem isso, a inicialização do gateway é recusada por padrão. gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=truehabilita o modo de fallback de origin pelo cabeçalho Host, mas isso é um downgrade de segurança perigoso.- Com Serve, os cabeçalhos de identidade do Tailscale podem satisfazer a auth da Control UI/WebSocket
quando
gateway.auth.allowTailscaleétrue(sem necessidade de token/senha). Endpoints da API HTTP não usam esses cabeçalhos de identidade do Tailscale; eles seguem o modo normal de auth HTTP do gateway. Definagateway.auth.allowTailscale: falsepara exigir credenciais explícitas. Veja Tailscale e Security. Esse fluxo sem token pressupõe que o host do gateway é confiável. gateway.tailscale.mode: "funnel"exigegateway.auth.mode: "password"(senha compartilhada).
Compilar a UI
O Gateway fornece arquivos estáticos dedist/control-ui. Compile-os com: