कंट्रोल UI (ब्राउज़र)
कंट्रोल UI एक छोटा Vite + Lit सिंगल‑पेज ऐप है जिसे Gateway द्वारा परोसा जाता है:- डिफ़ॉल्ट:
http://<host>:18789/ - optional prefix: set
gateway.controlUi.basePath(e.g./openclaw)
त्वरित खोलें (लोकल)
यदि Gateway उसी कंप्यूटर पर चल रहा है, तो खोलें: यदि पेज लोड नहीं होता, तो पहले Gateway शुरू करें:openclaw gateway.
प्रमाणीकरण WebSocket हैंडशेक के दौरान निम्न के माध्यम से प्रदान किया जाता है:
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.
डिवाइस पेयरिंग (पहला कनेक्शन)
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.
आप क्या देखेंगे: “disconnected (1008): pairing required”
डिवाइस को अनुमोदित करने के लिए:
openclaw devices revoke --device <id> --role <role>. See
Devices CLI for token rotation and revocation.
टिप्पणियाँ:
- लोकल कनेक्शन (
127.0.0.1) स्वतः अनुमोदित होते हैं। - Remote connections (LAN, Tailnet, etc.) require explicit approval.
- प्रत्येक ब्राउज़र प्रोफ़ाइल एक अद्वितीय डिवाइस ID बनाती है, इसलिए ब्राउज़र बदलने या ब्राउज़र डेटा साफ़ करने पर पुनः‑पेयरिंग की आवश्यकता होगी।
यह आज क्या कर सकता है
- Gateway WS के माध्यम से मॉडल के साथ चैट (
chat.history,chat.send,chat.abort,chat.inject) - चैट में टूल कॉल स्ट्रीम करना + लाइव टूल आउटपुट कार्ड (एजेंट इवेंट्स)
- Channels: WhatsApp/Telegram/Discord/Slack + plugin channels (Mattermost, etc.) status + QR login + per-channel config (
channels.status,web.login.*,config.patch) - इंस्टेंस: प्रेज़ेन्स सूची + रिफ़्रेश (
system-presence) - सत्र: सूची + प्रति‑सत्र thinking/verbose ओवरराइड (
sessions.list,sessions.patch) - क्रॉन जॉब्स: सूची/जोड़ें/चलाएँ/सक्षम/अक्षम + रन इतिहास (
cron.*) - Skills: स्थिति, सक्षम/अक्षम, इंस्टॉल, API कुंजी अपडेट (
skills.*) - नोड्स: सूची + क्षमताएँ (
node.list) - Exec अनुमोदन: gateway या नोड allowlists संपादित करें +
exec host=gateway/nodeके लिए नीति पूछें (exec.approvals.*) - विन्यास: देखें/संपादित करें
~/.openclaw/openclaw.json(config.get,config.set) - विन्यास: सत्यापन (
config.apply) के साथ लागू करें + पुनः प्रारंभ करें और अंतिम सक्रिय सत्र को जगाएँ - विन्यास लेखन में समवर्ती संपादनों को ओवरराइट होने से रोकने के लिए base-hash गार्ड शामिल है
- विन्यास स्कीमा + फ़ॉर्म रेंडरिंग (
config.schema, जिसमें प्लगइन + चैनल स्कीमा शामिल हैं); Raw JSON संपादक उपलब्ध रहता है - डिबग: स्थिति/स्वास्थ्य/मॉडल स्नैपशॉट्स + इवेंट लॉग + मैनुअल RPC कॉल (
status,health,models.list) - लॉग्स: फ़िल्टर/एक्सपोर्ट के साथ gateway फ़ाइल लॉग्स का लाइव टेल (
logs.tail) - अपडेट: पैकेज/git अपडेट चलाएँ + पुनः प्रारंभ करें (
update.run) और एक रीस्टार्ट रिपोर्ट के साथ
- For isolated jobs, delivery defaults to announce summary. You can switch to none if you want internal-only runs.
- जब announce चुना जाता है, तब चैनल/टार्गेट फ़ील्ड दिखाई देते हैं।
चैट व्यवहार
chat.sendनॉन‑ब्लॉकिंग है: यह तुरंत{ runId, status: "started" }के साथ ack करता है और प्रतिक्रियाchatइवेंट्स के माध्यम से स्ट्रीम होती है।- उसी
idempotencyKeyके साथ पुनः भेजने पर, चलने के दौरान{ status: "in_flight" }और पूर्ण होने के बाद{ status: "ok" }लौटता है। chat.injectसत्र ट्रांसक्रिप्ट में एक सहायक नोट जोड़ता है और UI‑केवल अपडेट्स के लिएchatइवेंट प्रसारित करता है (कोई एजेंट रन नहीं, कोई चैनल डिलीवरी नहीं)।- रोकें:
- Stop पर क्लिक करें (
chat.abortकॉल करता है) /stopटाइप करें (याstop|esc|abort|wait|exit|interrupt) ताकि आउट‑ऑफ़‑बैंड निरस्त किया जा सकेchat.abort{ sessionKey }का समर्थन करता है (कोईrunIdनहीं) ताकि उस सत्र के सभी सक्रिय रन निरस्त किए जा सकें
- Stop पर क्लिक करें (
Tailnet एक्सेस (अनुशंसित)
एकीकृत Tailscale Serve (पसंदीदा)
Gateway को loopback पर रखें और Tailscale Serve को HTTPS के साथ इसे प्रॉक्सी करने दें:https://<magicdns>/(या आपका विन्यस्तgateway.controlUi.basePath)
tailscale-user-login) when gateway.auth.allowTailscale is true. OpenClaw
verifies the identity by resolving the x-forwarded-for address with
tailscale whois and matching it to the header, and only accepts these when the
request hits loopback with Tailscale’s x-forwarded-* headers. Set
gateway.auth.allowTailscale: false (or force gateway.auth.mode: "password")
if you want to require a token/password even for Serve traffic.
Tailnet से बाइंड + टोकन
http://<tailscale-ip>:18789/(या आपका विन्यस्तgateway.controlUi.basePath)
connect.params.auth.token के रूप में भेजा जाता है)।
असुरक्षित HTTP
If you open the dashboard over plain HTTP (http://<lan-ip> or http://<tailscale-ip>),
the browser runs in a non-secure context and blocks WebCrypto. By default,
OpenClaw blocks Control UI connections without device identity.
अनुशंसित समाधान: HTTPS (Tailscale Serve) का उपयोग करें या UI को लोकली खोलें:
https://<magicdns>/(Serve)http://127.0.0.1:18789/(Gateway होस्ट पर)
UI बनाना
The Gateway serves static files fromdist/control-ui. Build them with:
ws://127.0.0.1:18789).
डिबगिंग/टेस्टिंग: dev सर्वर + रिमोट 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.- UI dev सर्वर शुरू करें:
pnpm ui:dev - इस प्रकार का URL खोलें:
gatewayUrlलोड के बाद localStorage में संग्रहीत होता है और URL से हटा दिया जाता है।tokenlocalStorage में संग्रहीत होता है;passwordकेवल मेमोरी में रखा जाता है।- When
gatewayUrlis set, the UI does not fall back to config or environment credentials. Providetoken(orpassword) explicitly. Missing explicit credentials is an error. - जब Gateway TLS (Tailscale Serve, HTTPS प्रॉक्सी, आदि) के पीछे हो, तो
wss://का उपयोग करें। - क्लिकजैकिंग रोकने के लिए
gatewayUrlकेवल टॉप‑लेवल विंडो में स्वीकार किया जाता है (एम्बेडेड नहीं)। - For cross-origin dev setups (e.g.
pnpm ui:devto a remote Gateway), add the UI origin togateway.controlUi.allowedOrigins.