2.4 KiB
2.4 KiB
summary, read_when
| summary | read_when | ||
|---|---|---|---|
| Gateway web surfaces: Control UI, bind modes, and security |
|
Web (Gateway)
The Gateway serves a small browser Control UI (Vite + Lit) from the same port as the Gateway WebSocket:
- default:
http://<host>:18789/ - optional prefix: set
gateway.controlUi.basePath(e.g./clawdbot)
Capabilities live in docs/control-ui.md.
This page focuses on bind modes, security, and web-facing surfaces.
Webhooks
When hooks.enabled=true, the Gateway also exposes a small webhook endpoint on the same HTTP server.
See docs/configuration.md → hooks for auth + payloads.
Config (default-on)
The Control UI is enabled by default when assets are present (dist/control-ui).
You can control it via config:
{
gateway: {
controlUi: { enabled: true, basePath: "/clawdbot" } // basePath optional
}
}
Tailscale access
Integrated Serve (recommended)
Keep the Gateway on loopback and let Tailscale Serve proxy it:
{
gateway: {
bind: "loopback",
tailscale: { mode: "serve" }
}
}
Then start the gateway:
clawdbot gateway
Open:
https://<magicdns>/(or your configuredgateway.controlUi.basePath)
Tailnet bind + token (legacy)
{
gateway: {
bind: "tailnet",
controlUi: { enabled: true }
}
}
Then start the gateway (token required for non-loopback binds):
export CLAWDBOT_GATEWAY_TOKEN="…your token…"
clawdbot gateway
Open:
http://<tailscale-ip>:18789/(or your configuredgateway.controlUi.basePath)
Public internet (Funnel)
{
gateway: {
bind: "loopback",
tailscale: { mode: "funnel" },
auth: { mode: "password" } // or CLAWDBOT_GATEWAY_PASSWORD
}
}
Security notes
- Binding the Gateway to a non-loopback address requires auth (
CLAWDBOT_GATEWAY_TOKENorgateway.auth). - The UI sends
connect.params.auth.tokenorconnect.params.auth.password. - Use
gateway.auth.allowTailscale: falseto require explicit credentials even in Serve mode. gateway.tailscale.mode: "funnel"requiresgateway.auth.mode: "password"(shared password).
Building the UI
The Gateway serves static files from dist/control-ui. Build them with:
pnpm ui:build # auto-installs UI deps on first run