Dashboard (Control UI)
The Gateway dashboard is the browser Control UI served at/ by default
(override with gateway.controlUi.basePath).
Quick open (local Gateway):
Key references:
- Control UI for usage and UI capabilities.
- Tailscale for Serve/Funnel automation.
- Web surfaces for bind modes and security notes.
connect.params.auth.tokenconnect.params.auth.password- Tailscale Serve identity headers when
gateway.auth.allowTailscale: true - trusted-proxy identity headers when
gateway.auth.mode: "trusted-proxy"
gateway.auth in Gateway configuration.
Security note: the Control UI is an admin surface (chat, config, exec approvals).
Do not expose it publicly. The UI keeps dashboard URL tokens in sessionStorage
for the current browser tab session and selected gateway URL, and strips them from the URL after load.
Prefer localhost, Tailscale Serve, or an SSH tunnel.
Fast path (recommended)
- After onboarding, the CLI auto-opens the dashboard and prints a clean (non-tokenized) link.
- Re-open anytime:
openclaw dashboard(copies link, opens browser if possible, shows SSH hint if headless). - If the UI prompts for shared-secret auth, paste the configured token or password into Control UI settings.
Auth basics (local vs remote)
- Localhost: open
http://127.0.0.1:18789/. - Shared-secret token source:
gateway.auth.token(orOPENCLAW_GATEWAY_TOKEN);openclaw dashboardcan pass it via URL fragment for one-time bootstrap, and the Control UI keeps it in sessionStorage for the current browser tab session and selected gateway URL instead of localStorage. - If
gateway.auth.tokenis SecretRef-managed,openclaw dashboardprints/copies/opens a non-tokenized URL by design. This avoids exposing externally managed tokens in shell logs, clipboard history, or browser-launch arguments. - If
gateway.auth.tokenis configured as a SecretRef and is unresolved in your current shell,openclaw dashboardstill prints a non-tokenized URL plus actionable auth setup guidance. - Shared-secret password: use the configured
gateway.auth.password(orOPENCLAW_GATEWAY_PASSWORD). The dashboard does not persist passwords across reloads. - Identity-bearing modes: Tailscale Serve can satisfy Control UI/WebSocket
auth via identity headers when
gateway.auth.allowTailscale: true, and a non-loopback identity-aware reverse proxy can satisfygateway.auth.mode: "trusted-proxy". In those modes the dashboard does not need a pasted shared secret for the WebSocket. - Not localhost: use Tailscale Serve, a non-loopback shared-secret bind, a
non-loopback identity-aware reverse proxy with
gateway.auth.mode: "trusted-proxy", or an SSH tunnel. HTTP APIs still use shared-secret auth unless you intentionally run private-ingressgateway.auth.mode: "none"or trusted-proxy HTTP auth. See Web surfaces.
If you see “unauthorized” / 1008
- Ensure the gateway is reachable (local:
openclaw status; remote: SSH tunnelssh -N -L 18789:127.0.0.1:18789 user@hostthen openhttp://127.0.0.1:18789/). - For
AUTH_TOKEN_MISMATCH, clients may do one trusted retry with a cached device token when the gateway returns retry hints. That cached-token retry reuses the token’s cached approved scopes; explicitdeviceToken/ explicitscopescallers keep their requested scope set. If auth still fails after that retry, resolve token drift manually. - Outside that retry path, connect auth precedence is explicit shared token/password first, then explicit
deviceToken, then stored device token, then bootstrap token. - On the async Tailscale Serve Control UI path, failed attempts for the same
{scope, ip}are serialized before the failed-auth limiter records them, so the second concurrent bad retry can already showretry later. - For token drift repair steps, follow Token drift recovery checklist.
- Retrieve or supply the shared secret from the gateway host:
- Token:
openclaw config get gateway.auth.token - Password: resolve the configured
gateway.auth.passwordorOPENCLAW_GATEWAY_PASSWORD - SecretRef-managed token: resolve the external secret provider or export
OPENCLAW_GATEWAY_TOKENin this shell, then rerunopenclaw dashboard - No shared secret configured:
openclaw doctor --generate-gateway-token
- Token:
- In the dashboard settings, paste the token or password into the auth field, then connect.