Web (Gateway)¶
O Gateway serve uma pequena UI de Controle no navegador (Vite + Lit) a partir da mesma porta do WebSocket do Gateway:
- padrão:
http://<host>:18789/ - prefixo opcional: defina
gateway.controlUi.basePath(por exemplo,/openclaw)
As funcionalidades ficam em UI de Controle. Esta página foca em modos de bind, segurança e superfícies expostas à web.
Webhooks¶
Quando hooks.enabled=true, o Gateway também expõe um pequeno endpoint de webhook no mesmo servidor HTTP.
Veja Configuração do Gateway → hooks para autenticação + payloads.
Configuração (ativado por padrão)¶
A UI de Controle é ativada por padrão quando os assets estão presentes (dist/control-ui).
Você pode controlá-la via configuração:
{
gateway: {
controlUi: { enabled: true, basePath: "/openclaw" }, // basePath optional
},
}
Acesso via Tailscale¶
Serve integrado (recomendado)¶
Mantenha o Gateway em loopback e deixe o Tailscale Serve fazer o proxy:
{
gateway: {
bind: "loopback",
tailscale: { mode: "serve" },
},
}
Depois inicie o gateway:
openclaw gateway
Abra:
https://<magicdns>/(ou ogateway.controlUi.basePathconfigurado)
Bind no tailnet + token¶
{
gateway: {
bind: "tailnet",
controlUi: { enabled: true },
auth: { mode: "token", token: "your-token" },
},
}
Depois inicie o gateway (token exigido para binds fora de loopback):
openclaw gateway
Abra:
http://<tailscale-ip>:18789/(ou ogateway.controlUi.basePathconfigurado)
Internet pública (Funnel)¶
{
gateway: {
bind: "loopback",
tailscale: { mode: "funnel" },
auth: { mode: "password" }, // or OPENCLAW_GATEWAY_PASSWORD
},
}
Notas de segurança¶
- A autenticação do Gateway é exigida por padrão (token/senha ou cabeçalhos de identidade do Tailscale).
- Binds fora de loopback ainda exigem um token/senha compartilhado (
gateway.authou env). - O assistente gera um token do gateway por padrão (mesmo em loopback).
- A UI envia
connect.params.auth.tokenouconnect.params.auth.password. - A UI de Controle envia cabeçalhos anti-clickjacking e aceita apenas conexões de websocket do navegador de mesma origem, a menos que
gateway.controlUi.allowedOriginsesteja definido. - Com Serve, os cabeçalhos de identidade do Tailscale podem satisfazer a autenticação quando
gateway.auth.allowTailscaleétrue(nenhum token/senha necessário). Definagateway.auth.allowTailscale: falsepara exigir credenciais explícitas. Veja Tailscale e Segurança. gateway.tailscale.mode: "funnel"exigegateway.auth.mode: "password"(senha compartilhada).
Construindo a UI¶
O Gateway serve arquivos estáticos a partir de dist/control-ui. Compile-os com:
pnpm ui:build # auto-installs UI deps on first run