Control UI (browser)
The Control UI is a small Vite + Lit single-page app served by the Gateway:- default:
http://<host>:18789/ - optional prefix: set
gateway.controlUi.basePath(e.g./openclaw)
Quick open (local)
If the Gateway is running on the same computer, open: If the page fails to load, start the Gateway first:openclaw gateway.
Auth is supplied during the WebSocket handshake via:
connect.params.auth.tokenconnect.params.auth.passwordThe dashboard settings panel lets you store a token; passwords are not persisted. The onboarding wizard generates a gateway token by default, so paste it here on first connect.
Device pairing (first connection)
When you connect to the Control UI from a new browser or device, the Gateway requires a one-time pairing approval — even if you’re on the same Tailnet withgateway.auth.allowTailscale: true. This is a security measure to prevent
unauthorized access.
What you’ll see: “disconnected (1008): pairing required”
To approve the device:
openclaw devices revoke --device <id> --role <role>. See
Devices CLI for token rotation and revocation.
Notes:
-
- Mahalliy ulanishlar (
127.0.0.1) avtomatik tasdiqlanadi.
- Mahalliy ulanishlar (
-
- Masofaviy ulanishlar (LAN, Tailnet va boshqalar) 3. aniq tasdiqlashni talab qiladi.
- Each browser profile generates a unique device ID, so switching browsers or clearing browser data will require re-pairing.
5. Nimalar qila oladi (bugun)
- Chat with the model via Gateway WS (
chat.history,chat.send,chat.abort,chat.inject) -
- Chat’da tool chaqiruvlarini oqimda uzatish + jonli tool chiqish kartalari (agent hodisalari)
-
- Kanallar: WhatsApp/Telegram/Discord/Slack + plagin kanallari (Mattermost va boshqalar) 9. holat + QR login + har bir kanal uchun sozlamalar (
channels.status,web.login.*,config.patch)
- Kanallar: WhatsApp/Telegram/Discord/Slack + plagin kanallari (Mattermost va boshqalar) 9. holat + QR login + har bir kanal uchun sozlamalar (
-
- Instansiyalar: mavjudlik ro‘yxati + yangilash (
system-presence)
- Instansiyalar: mavjudlik ro‘yxati + yangilash (
- Sessions: list + per-session thinking/verbose overrides (
sessions.list,sessions.patch) - Cron jobs: list/add/run/enable/disable + run history (
cron.*) - Skills: status, enable/disable, install, API key updates (
skills.*) - Nodes: list + caps (
node.list) -
- Exec tasdiqlari: gateway yoki node allowlist’larini tahrirlash +
exec host=gateway/nodeuchun siyosat so‘rash (exec.approvals.*)
- Exec tasdiqlari: gateway yoki node allowlist’larini tahrirlash +
-
- Config:
~/.openclaw/openclaw.jsonni ko‘rish/tahrirlash (config.get,config.set)
- Config:
-
- Config: tekshiruv bilan qo‘llash + qayta ishga tushirish (
config.apply) va oxirgi faol sessiyani uyg‘otish
- Config: tekshiruv bilan qo‘llash + qayta ishga tushirish (
-
- Config yozuvlari bir vaqtning o‘zida tahrirlarni bosib ketmaslik uchun base-hash himoyasini o‘z ichiga oladi
- Config schema + form rendering (
config.schema, including plugin + channel schemas); Raw JSON editor remains available - Debug: status/health/models snapshots + event log + manual RPC calls (
status,health,models.list) -
- Loglar: gateway fayl loglarini filtr/eksport bilan jonli kuzatish (
logs.tail)
- Loglar: gateway fayl loglarini filtr/eksport bilan jonli kuzatish (
-
- Yangilash: paket/git yangilashni ishga tushirish + qayta ishga tushirish (
update.run) va qayta ishga tushirish hisobotini olish
- Yangilash: paket/git yangilashni ishga tushirish + qayta ishga tushirish (
- Cron vazifalar paneli eslatmalari:
-
- Izolyatsiyalangan vazifalar uchun yetkazib berish sukut bo‘yicha qisqa xulosa e’lon qilishga sozlangan. 25. Agar faqat ichki ishga tushirishlarni xohlasangiz, none’ga o‘zgartirishingiz mumkin.
-
- Announce tanlanganda kanal/maqsad maydonlari paydo bo‘ladi.
27. Chat xatti-harakati
-
chat.sendbloklamaydi: darhol{ runId, status: "started" }bilan tasdiqlaydi va javobchathodisalari orqali oqimda keladi.
-
- Xuddi shu
idempotencyKeybilan qayta yuborish ish jarayonida{ status: "in_flight" }, yakunlangandan so‘ng esa{ status: "ok" }ni qaytaradi.
- Xuddi shu
-
chat.injectsessiya transkriptiga assistent eslatmasini qo‘shadi va faqat UI yangilanishlari uchunchathodisasini tarqatadi (agent ishga tushirilmaydi, kanalga yetkazilmaydi).
-
- To‘xtatish:
-
- Stop tugmasini bosing (
chat.abortni chaqiradi)
- Stop tugmasini bosing (
-
/stopyozing (yokistop|esc|abort|wait|exit|interrupt) — out-of-band bekor qilish uchun
-
chat.abort{ sessionKey }(runIdsiz) ni qo‘llab-quvvatlaydi va shu sessiya uchun barcha faol ishga tushirishlarni bekor qiladi
35. Tailnet orqali kirish (tavsiya etiladi)
36. Integratsiyalashgan Tailscale Serve (afzal)
- Gateway’ni loopback’da qoldiring va Tailscale Serve orqali HTTPS bilan proksi qiling:
- Ochish:
-
https://<magicdns>/(yoki sozlangangateway.controlUi.basePath)
- Sukut bo‘yicha, Serve so‘rovlari
gateway.auth.allowTailscaletruebo‘lganda Tailscale identity header’lari (tailscale-user-login) orqali autentifikatsiyadan o‘ta oladi. 42. OpenClaw identifikatsiyanix-forwarded-formanzilinitailscale whoisorqali aniqlab, header bilan moslashtirish orqali tekshiradi va faqat so‘rov loopback’ga Tailscale’ningx-forwarded-*header’lari bilan kelgandagina qabul qiladi. 43. Agar Serve trafigi uchun ham token/parol talab qilmoqchi bo‘lsangiz,gateway.auth.allowTailscale: falseqilib qo‘ying (yokigateway.auth.mode: "password"ni majburiy qiling).
44. Tailnet’ga bog‘lash + token
- So‘ng oching:
-
http://<tailscale-ip>:18789/(yoki sozlangangateway.controlUi.basePath)
- Token’ni UI sozlamalariga joylang (
connect.params.auth.tokensifatida yuboriladi).
49. Xavfsiz bo‘lmagan HTTP
- Agar panelni oddiy HTTP orqali ochsangiz (
http://<lan-ip>yokihttp://<tailscale-ip>), brauzer xavfsiz bo‘lmagan kontekstda ishlaydi va WebCrypto’ni bloklaydi. By default, OpenClaw blocks Control UI connections without device identity.
https://<magicdns>/(Serve)http://127.0.0.1:18789/(on the gateway host)
Building the UI
The Gateway serves static files fromdist/control-ui. Build them with:
ws://127.0.0.1:18789).
Debugging/testing: dev server + remote Gateway
The Control UI is static files; the WebSocket target is configurable and can be different from the HTTP origin. This is handy when you want the Vite dev server locally but the Gateway runs elsewhere.- Start the UI dev server:
pnpm ui:dev - Open a URL like:
gatewayUrlis stored in localStorage after load and removed from the URL.tokenis stored in localStorage;passwordis kept in memory only.- When
gatewayUrlis set, the UI does not fall back to config or environment credentials. Providetoken(orpassword) explicitly. Missing explicit credentials is an error. - Use
wss://when the Gateway is behind TLS (Tailscale Serve, HTTPS proxy, etc.). gatewayUrlis only accepted in a top-level window (not embedded) to prevent clickjacking.- For cross-origin dev setups (e.g.
pnpm ui:devto a remote Gateway), add the UI origin togateway.controlUi.allowedOrigins.