Web interfaces
Інтерфейс керування
Інтерфейс керування — це невеликий односторінковий застосунок Vite + Lit, який обслуговує Gateway:
- типово:
http://<host>:18789/ - необов’язковий префікс: задайте
gateway.controlUi.basePath(наприклад,/openclaw)
Він працює безпосередньо з Gateway WebSocket на тому самому порту.
Швидке відкриття (локально)
Якщо Gateway запущено на тому самому комп’ютері, відкрийте:
Якщо сторінка не завантажується, спочатку запустіть Gateway: openclaw gateway.
Автентифікація передається під час WebSocket-рукостискання через:
connect.params.auth.tokenconnect.params.auth.password- заголовки ідентичності Tailscale Serve, коли
gateway.auth.allowTailscale: true - заголовки ідентичності довіреного проксі, коли
gateway.auth.mode: "trusted-proxy"
Панель налаштувань дашборда зберігає токен для поточної сесії вкладки браузера й вибраної URL Gateway; паролі не зберігаються. Онбординг зазвичай генерує токен Gateway для автентифікації зі спільним секретом під час першого підключення, але автентифікація паролем також працює, коли gateway.auth.mode має значення "password".
Сполучення пристрою (перше підключення)
Коли ви підключаєтеся до інтерфейсу керування з нового браузера або пристрою, Gateway зазвичай вимагає одноразового схвалення сполучення. Це захід безпеки для запобігання несанкціонованому доступу.
Що ви побачите: "disconnected (1008): pairing required"
Перелічіть запити в очікуванні
openclaw devices listСхваліть за ID запиту
openclaw devices approve <requestId>Якщо браузер повторює сполучення зі зміненими деталями автентифікації (роль/області доступу/публічний ключ), попередній запит в очікуванні замінюється, і створюється новий requestId. Перед схваленням повторно запустіть openclaw devices list.
Якщо браузер уже сполучений і ви змінюєте доступ із читання на запис/адміністрування, це обробляється як підвищення схвалення, а не тихе повторне підключення. OpenClaw залишає старе схвалення активним, блокує повторне підключення з ширшими правами й просить явно схвалити новий набір областей доступу.
Після схвалення пристрій запам’ятовується й не потребуватиме повторного схвалення, доки ви не відкличете його за допомогою openclaw devices revoke --device <id> --role <role>. Див. CLI пристроїв щодо ротації та відкликання токенів.
Агенти Paperclip, які підключаються через адаптер openclaw_gateway, використовують той самий потік схвалення першого запуску. Після початкової спроби підключення запустіть openclaw devices approve --latest, щоб переглянути запит в очікуванні, а потім повторно запустіть надруковану команду openclaw devices approve <requestId>, щоб схвалити його. Для віддаленого Gateway передайте явні значення --url і --token. Щоб схвалення залишалися стабільними між перезапусками, налаштуйте постійний adapterConfig.devicePrivateKeyPem у Paperclip замість того, щоб дозволяти йому генерувати нову тимчасову ідентичність пристрою під час кожного запуску.
Сполучення мобільного пристрою
Уже сполучений адміністратор може створити QR для підключення iOS/Android без відкриття термінала:
Відкрийте мобільне сполучення
Виберіть Вузли, а потім натисніть Сполучити мобільний пристрій у картці Пристрої.
Підключіть телефон
У мобільному застосунку OpenClaw відкрийте Налаштування → Gateway і відскануйте QR код. Натомість можна скопіювати й вставити код налаштування.
Підтвердьте підключення
Офіційний застосунок iOS/Android підключається автоматично. Якщо Пристрої показують запит в очікуванні, перегляньте його роль і області доступу перед схваленням.
Створення коду налаштування потребує operator.admin; кнопка вимкнена для
сесій без нього. Код налаштування містить короткочасні початкові облікові дані,
тому ставтеся до QR і скопійованого коду як до пароля, доки вони чинні. Для віддаленого
сполучення Gateway має розв’язуватися в wss:// (наприклад, через Tailscale
Serve/Funnel); звичайний ws:// обмежений loopback і приватними LAN-адресами.
Див. Сполучення, щоб отримати
повні відомості про безпеку та резервні варіанти.
Особиста ідентичність (локальна для браузера)
Інтерфейс керування підтримує особисту ідентичність для кожного браузера (відображуване ім’я та аватар), яка додається до вихідних повідомлень для атрибуції у спільних сесіях. Вона зберігається в сховищі браузера, обмежена поточним профілем браузера й не синхронізується з іншими пристроями та не зберігається на сервері, крім звичайних метаданих авторства розмови для повідомлень, які ви фактично надсилаєте. Очищення даних сайту або перемикання браузерів скидає її до порожнього стану.
Такий самий локальний для браузера шаблон застосовується до перевизначення аватара асистента. Завантажені аватари асистента накладаються на розв’язану Gateway ідентичність лише в локальному браузері й ніколи не проходять круговий шлях через config.patch. Спільне поле конфігурації ui.assistant.avatar усе ще доступне для клієнтів не з UI, які записують це поле напряму (наприклад, скриптових Gateway або користувацьких дашбордів).
Кінцева точка runtime-конфігурації
Інтерфейс керування отримує свої runtime-налаштування з /control-ui-config.json, розв’язаного відносно базового шляху інтерфейсу керування Gateway (наприклад, /__openclaw__/control-ui-config.json, коли UI обслуговується під /__openclaw__/). Ця кінцева точка захищена тією самою автентифікацією Gateway, що й решта HTTP-поверхні: неавтентифіковані браузери не можуть її отримати, а успішне отримання потребує або вже чинного токена/пароля Gateway, ідентичності Tailscale Serve, або ідентичності довіреного проксі.
Підтримка мов
Інтерфейс керування може локалізуватися під час першого завантаження на основі локалі вашого браузера. Щоб змінити це пізніше, відкрийте Огляд -> Доступ до Gateway -> Мова. Вибір локалі розташований у картці доступу до Gateway, а не в розділі оформлення.
- Підтримувані локалі:
en,zh-CN,zh-TW,pt-BR,de,es,ja-JP,ko,fr,ar,it,tr,uk,id,pl,th,vi,nl,fa - Неанглійські переклади ліниво завантажуються в браузері.
- Вибрану локаль збережено в сховищі браузера й повторно використано під час майбутніх відвідувань.
- Відсутні ключі перекладу повертаються до англійської.
Переклади документації генеруються для того самого набору неанглійських локалей, але вбудований перемикач мов сайту документації Mintlify обмежений кодами локалей, які приймає Mintlify. Документація тайською (th) і перською (fa) все ще генерується в репозиторії публікації; вона може не з’являтися в цьому перемикачі, доки Mintlify не підтримуватиме ці коди.
Теми оформлення
Панель оформлення містить вбудовані теми Claw, Knot і Dash, а також один локальний для браузера слот імпорту tweakcn. Щоб імпортувати тему, відкрийте редактор tweakcn, виберіть або створіть тему, натисніть Поділитися та вставте скопійоване посилання на тему в оформлення. Імпортер також приймає URL реєстру https://tweakcn.com/r/themes/<id>, URL редактора на кшталт https://tweakcn.com/editor/theme?theme=amethyst-haze, відносні шляхи /themes/<id>, сирі ID тем і стандартні назви тем, як-от amethyst-haze.
Оформлення також містить локальне для браузера налаштування розміру тексту. Налаштування зберігається разом з іншими параметрами інтерфейсу керування, застосовується до тексту чату, тексту композитора, карток інструментів і бічних панелей чату та утримує поля введення тексту щонайменше 16px, щоб мобільний Safari не виконував автоматичне масштабування під час фокусу.
Імпортовані теми зберігаються лише в поточному профілі браузера. Вони не записуються в конфігурацію Gateway і не синхронізуються між пристроями. Заміна імпортованої теми оновлює один локальний слот; очищення перемикає активну тему назад на Claw, якщо імпортовану тему було вибрано.
Що він може робити (сьогодні)
Чат і розмова
- Спілкуватися з моделлю через Gateway WS (
chat.history,chat.send,chat.abort,chat.inject). - Оновлення історії чату запитують обмежене недавнє вікно з лімітами тексту для кожного повідомлення, щоб великі сесії не змушували браузер рендерити повне навантаження розмови до того, як чат стане придатним до використання.
- Розмовляти через realtime-сесії браузера. OpenAI використовує прямий WebRTC, Google Live використовує обмежений одноразовий браузерний токен через WebSocket, а backend-only realtime-голосові plugins використовують relay-транспорт Gateway. Сесії провайдера, якими володіє клієнт, починаються з
talk.client.create; relay-сесії Gateway починаються зtalk.session.create. Relay утримує облікові дані провайдера на Gateway, поки браузер транслює мікрофонний PCM черезtalk.session.appendAudio, пересилає виклики інструментів провайдераopenclaw_agent_consultчерезtalk.client.toolCallдля політики Gateway і більшої налаштованої моделі OpenClaw, а також маршрутизує голосове керування активним запуском черезtalk.client.steerабоtalk.session.steer. - Транслювати виклики інструментів і live-картки виводу інструментів у чаті (події агента).
- Вкладка активності з локальними для браузера, орієнтованими на редагування зведеннями live-активності інструментів з наявної доставки подій
session.tool/ інструментів.
Канали, екземпляри, сесії, сни
- Канали: статус вбудованих і пакетних/зовнішніх каналів plugin, QR-вхід і конфігурація для кожного каналу (
channels.status,web.login.*,config.patch). - Оновлення зондування каналів залишають попередній знімок видимим, поки повільні перевірки провайдера завершуються, а часткові знімки позначаються, коли зондування або аудит перевищує свій бюджет UI.
- Екземпляри: список присутності + оновлення (
system-presence). - Сесії: типово перелічувати сесії налаштованих агентів, закріплювати часті сесії, перейменовувати їх, архівувати або відновлювати неактивні сесії, відступати від застарілих ключів сесій неналаштованих агентів і застосовувати для кожної сесії перевизначення моделі/мислення/швидкого режиму/докладності/трасування/міркування (
sessions.list,sessions.patch). Закріплені сесії сортуються вище за недавні незакріплені сесії; архівовані сесії розташовані в архівному поданні сторінки сесій і зберігають свої розмови. - Сни: статус Dreaming, перемикач увімкнення/вимкнення та читач Dream Diary (
doctor.memory.status,doctor.memory.dreamDiary,config.patch).
Cron, skills, вузли, схвалення exec
- Завдання Cron: перелік/додавання/редагування/запуск/увімкнення/вимкнення + історія запусків (
cron.*). - Skills: статус, увімкнення/вимкнення, встановлення, оновлення ключів API (
skills.*). - Вузли: перелік + можливості (
node.list), створення мобільних кодів налаштування та схвалення сполучення пристроїв (device.pair.*). - Схвалення exec: редагування списків дозволів Gateway або вузла + політика запиту для
exec host=gateway/node(exec.approvals.*).
Конфігурація
- Переглядайте/редагуйте
~/.openclaw/openclaw.json(config.get,config.set). - MCP має окрему сторінку налаштувань для налаштованих серверів, увімкнення, підсумків OAuth/фільтрів/паралельного виконання, поширених команд оператора та редактора конфігурації
mcpз обмеженою областю дії. - Застосовуйте + перезапускайте з валідацією (
config.apply) і пробуджуйте останній активний сеанс. - Записи містять захист на основі базового хеша, щоб запобігти перезапису паралельних змін.
- Записи (
config.set/config.apply/config.patch) попередньо перевіряють розв’язання активних SecretRef для посилань у надісланому корисному навантаженні конфігурації; нерозв’язані активні надіслані посилання відхиляються перед записом. - Збереження форми відкидає застарілі відредаговані заповнювачі, які не можна відновити зі збереженої конфігурації, водночас зберігаючи відредаговані значення, які досі відповідають збереженим секретам.
- Схема + рендеринг форми (
config.schema/config.schema.lookup, включно з полямиtitle/description, відповідними підказками UI, підсумками безпосередніх дочірніх елементів, метаданими документації на вкладених вузлах object/wildcard/array/composition, а також схемами plugin + каналу, коли вони доступні); редактор Raw JSON доступний лише тоді, коли знімок має безпечний необроблений цикл читання-запису. - Якщо знімок не може безпечно виконати цикл читання-запису необробленого тексту, Control UI примусово вмикає режим форми та вимикає режим Raw для цього знімка.
- Редактор Raw JSON "Скинути до збереженого" зберігає форму, створену в raw-режимі (форматування, коментарі, компонування
$include), замість повторного рендерингу сплощеного знімка, тож зовнішні редагування переживають скидання, коли знімок може безпечно виконати цикл читання-запису. - Структуровані значення об’єктів SecretRef відображаються лише для читання в текстових полях форми, щоб запобігти випадковому пошкодженню через перетворення об’єкта на рядок.
Налагодження, журнали, оновлення
- Налагодження: знімки стану/працездатності/моделей + журнал подій + ручні RPC-виклики (
status,health,models.list). - Журнал подій містить таймінги оновлення/RPC Control UI, таймінги повільного рендерингу чату/конфігурації та записи чутливості браузера для довгих кадрів анімації або довгих завдань, коли браузер надає ці типи записів PerformanceObserver.
- Журнали: live tail файлових журналів gateway з фільтром/експортом (
logs.tail). - Оновлення: запустіть оновлення пакета/git + перезапуск (
update.run) зі звітом про перезапуск, потім опитуйтеupdate.statusпісля повторного підключення, щоб перевірити запущену версію gateway.
Нотатки панелі завдань Cron
- Для ізольованих завдань доставка за замовчуванням оголошує підсумок. Можна перемкнути на none, якщо потрібні лише внутрішні запуски.
- Поля каналу/цілі з’являються, коли вибрано оголошення.
- Режим Webhook використовує
delivery.mode = "webhook"зdelivery.to, установленим на дійсну HTTP(S) URL-адресу webhook. - Для завдань основного сеансу доступні режими доставки webhook і none.
- Розширені елементи керування редагуванням включають видалення після запуску, очищення перевизначення агента, точні/зміщені параметри cron, перевизначення моделі/мислення агента та перемикачі доставки за принципом найкращих зусиль.
- Валідація форми вбудована з помилками на рівні полів; недійсні значення вимикають кнопку збереження, доки їх не буде виправлено.
- Установіть
cron.webhookToken, щоб надсилати окремий bearer-токен; якщо його пропущено, webhook надсилається без заголовка автентифікації. - Застарілий fallback: запустіть
openclaw doctor --fix, щоб мігрувати збережені застарілі завдання зnotify: trueзcron.webhookдо явної доставки через webhook для кожного завдання або доставки після завершення.
Сторінка MCP
Окрема сторінка MCP — це операторське подання для MCP-серверів, керованих OpenClaw, у mcp.servers. Вона сама не запускає MCP-транспорти; використовуйте її, щоб переглядати й редагувати збережену конфігурацію, а потім використовуйте openclaw mcp doctor --probe, коли потрібен live-доказ сервера.
Типовий робочий процес:
- Відкрийте MCP на бічній панелі.
- Перевірте картки зведення для загальної кількості серверів, увімкнених серверів, OAuth і кількості відфільтрованих серверів.
- Перегляньте кожен рядок сервера щодо транспорту, увімкнення, автентифікації, фільтрів, тайм-аутів і підказок команд.
- Перемикайте увімкнення, коли сервер має залишатися налаштованим, але не брати участі у runtime-виявленні.
- Редагуйте секцію конфігурації
mcpз відповідною областю дії для визначень серверів, заголовків, шляхів TLS/mTLS, метаданих OAuth, фільтрів інструментів і метаданих проєкції Codex. - Використовуйте Зберегти для запису конфігурації або Зберегти й опублікувати, коли запущений Gateway має застосувати змінену конфігурацію.
- Запустіть
openclaw mcp status --verbose,openclaw mcp doctor --probeабоopenclaw mcp reloadз термінала, коли відредагованому процесу потрібні статична діагностика, живе підтвердження або скидання кешованого runtime.
Сторінка редагує URL-подібні значення з обліковими даними перед відображенням і бере імена серверів у лапки у фрагментах команд, щоб скопійовані команди й далі працювали з пробілами або метасимволами оболонки. Повний довідник CLI і конфігурації розміщено в MCP.
Вкладка активності
Вкладка активності — це ефемерний локальний для браузера спостерігач за живою активністю інструментів. Вона походить із того самого потоку подій Gateway session.tool / інструментів, який живить картки інструментів чату; вона не додає іншої сім’ї подій Gateway, кінцевої точки, довготривалого сховища активності, стрічки метрик або зовнішнього потоку спостереження.
Записи активності зберігають лише очищені зведення та відредаговані, скорочені попередні перегляди виводу. Значення аргументів інструментів не зберігаються в стані активності; UI показує, що аргументи приховано, і записує лише кількість полів аргументів. Список у пам’яті прив’язаний до поточної вкладки браузера, переживає навігацію в межах Control UI і скидається під час перезавантаження сторінки, перемикання сесії або натискання Очистити.
Поведінка чату
Семантика надсилання та історії
chat.sendє неблокувальним: він негайно підтверджує отримання через{ runId, status: "started" }, а відповідь передається потоком через подіїchat. Довірені клієнти Control UI також можуть отримувати необов’язкові метадані часу ACK для локальної діагностики.- Завантаження в чат приймають зображення та невідеофайли. Зображення зберігають нативний шлях до зображення; інші файли зберігаються як керовані медіа й показуються в історії як посилання на вкладення.
- Повторне надсилання з тим самим
idempotencyKeyповертає{ status: "in_flight" }під час виконання і{ status: "ok" }після завершення. - Відповіді
chat.historyобмежені за розміром для безпеки UI. Коли записи транскрипту завеликі, Gateway може скорочувати довгі текстові поля, пропускати важкі блоки метаданих і замінювати завеликі повідомлення заповнювачем ([chat.history omitted: message too large]). - Коли видиме повідомлення асистента було скорочене в
chat.history, бічний читач може на вимогу отримати повний нормалізований для відображення запис транскрипту черезchat.message.getзаsessionKey, активнимagentId, коли потрібно, іmessageIdтранскрипту. Якщо Gateway усе ще не може повернути більше, читач показує явний стан недоступності замість тихого повторення скороченого попереднього перегляду. - Зображення, створені асистентом або генерацією, зберігаються як керовані медіапосилання і повертаються через автентифіковані медіа-URL Gateway, тож перезавантаження не залежать від збереження сирих base64-пейлоадів зображень у відповіді історії чату.
- Під час рендерингу
chat.historyControl UI вилучає з видимого тексту асистента лише-для-відображення inline-теги директив (наприклад[[reply_to_*]]і[[audio_as_voice]]), plain-text XML-пейлоади викликів інструментів (зокрема<tool_call>...</tool_call>,<function_call>...</function_call>,<tool_calls>...</tool_calls>,<function_calls>...</function_calls>і скорочені блоки викликів інструментів), а також витеклі ASCII/повноширинні керівні токени моделі, і пропускає записи асистента, весь видимий текст яких є лише точним silent-токеномNO_REPLY/no_replyабо токеном підтвердження HeartbeatHEARTBEAT_OK. - Під час активного надсилання і фінального оновлення історії подання чату зберігає локальні оптимістичні повідомлення користувача/асистента видимими, якщо
chat.historyненадовго повертає старіший знімок; канонічний транскрипт замінює ці локальні повідомлення, щойно історія Gateway наздоганяє. - Живі події
chatє станом доставки, тоді якchat.historyперебудовується з довготривалого транскрипту сесії. Після фінальних подій інструментів Control UI перезавантажує історію і зливає лише невеликий оптимістичний хвіст; межу транскрипту задокументовано в WebChat. chat.injectдодає нотатку асистента до транскрипту сесії та транслює подіюchatдля оновлень лише в UI (без запуску агента, без доставки каналом).- Бічна панель показує останні сесії з дією Нова сесія, посиланням Усі сесії та кнопкою пошуку сесій, яка відкриває повний вибір сесії (обмежений вибраним агентом, із пошуком і пагінацією). Перемикання агентів показує лише сесії, пов’язані з цим агентом, і повертається до головної сесії цього агента, якщо в нього ще немає збережених сесій панелі керування.
- Кожен рядок вибору сесії може перейменувати, закріпити або архівувати сесію. Активний запуск і головну сесію агента не можна архівувати. Архівування поточної вибраної сесії перемикає чат назад на головну сесію цього агента.
- На десктопних ширинах елементи керування чатом залишаються в одному компактному рядку і згортаються під час прокручування транскрипту вниз; прокручування вгору, повернення на початок або досягнення низу відновлює елементи керування.
- Послідовні дублікати текстових повідомлень відображаються як одна бульбашка з бейджем кількості. Повідомлення, що містять зображення, вкладення, вивід інструментів або попередні перегляди полотна, не згортаються.
- Перемикачі моделі й thinking у заголовку чату негайно виправляють активну сесію через
sessions.patch; це сталі перевизначення сесії, а не параметри надсилання лише для одного ходу. - Якщо ви надсилаєте повідомлення, поки зміна перемикача моделі для тієї самої сесії ще зберігається, композер чекає на цей патч сесії перед викликом
chat.send, щоб надсилання використало вибрану модель. - Введення
/newу Control UI створює та перемикає на таку саму свіжу сесію панелі керування, як Новий чат, окрім випадку, коли налаштованоsession.dmScope: "main"і поточний батьківський об’єкт є головною сесією агента; у такому разі він скидає головну сесію на місці. Введення/resetзберігає явне скидання Gateway на місці для поточної сесії. - Перемикач моделі чату запитує налаштоване подання моделей Gateway. Якщо присутній
agents.defaults.models, цей allowlist керує перемикачем, зокрема записамиprovider/*, які залишають каталоги з областю дії провайдера динамічними. Інакше перемикач показує явні записиmodels.providers.*.modelsплюс провайдерів із придатною автентифікацією. Повний каталог лишається доступним через налагоджувальний RPCmodels.listзview: "all". - Коли свіжі звіти Gateway про використання сесії містять поточні токени контексту, панель інструментів композера чату показує невелике кільце використання контексту з відсотком використання; повна деталізація токенів міститься в його підказці. Кільце перемикається на стиль попередження за високого тиску контексту і, на рекомендованих рівнях Compaction, показує компактну кнопку, яка запускає звичайний шлях Compaction сесії. Застарілі знімки токенів приховані, доки Gateway знову не повідомить свіже використання.
Режим розмови (браузерний realtime)
Режим розмови використовує зареєстрованого realtime-провайдера голосу. Налаштуйте OpenAI з talk.realtime.provider: "openai" плюс профілем автентифікації API-ключа openai, talk.realtime.providers.openai.apiKey або OPENAI_API_KEY; OAuth-профілі OpenAI не налаштовують Realtime-голос. Налаштуйте Google з talk.realtime.provider: "google" плюс talk.realtime.providers.google.apiKey. Браузер ніколи не отримує стандартний API-ключ провайдера. OpenAI отримує ефемерний клієнтський секрет Realtime для WebRTC. Google Live отримує одноразовий обмежений токен автентифікації Live API для браузерної WebSocket-сесії, з інструкціями та деклараціями інструментів, зафіксованими в токені Gateway. Провайдери, які надають лише backend realtime-міст, працюють через relay-транспорт Gateway, тож облікові дані та vendor-сокети залишаються на сервері, тоді як аудіо браузера рухається через автентифіковані RPC Gateway. Prompt Realtime-сесії збирається Gateway; talk.client.create не приймає надані викликачем перевизначення інструкцій.
Композитор чату містить кнопку параметрів розмови поруч із кнопкою запуску/зупинки розмови. Параметри застосовуються до наступного сеансу розмови й можуть перевизначати постачальника, транспорт, модель, голос, зусилля міркування, поріг VAD, тривалість тиші та префіксне доповнення. Коли параметр порожній, Gateway використовує налаштовані типові значення, якщо вони доступні, або типове значення постачальника. Вибір ретрансляції Gateway примусово вмикає серверний шлях ретрансляції; вибір WebRTC залишає сеанс під керуванням клієнта й завершується помилкою замість тихого відступу до ретрансляції, якщо постачальник не може створити браузерний сеанс.
У композиторі чату елемент керування розмовою — це кнопка з хвилями поруч із кнопкою диктування через мікрофон. Коли розмова починається, рядок стану композитора показує Connecting Talk..., потім Talk live, поки аудіо підключено, або Asking OpenClaw..., поки виклик інструмента в реальному часі консультується з налаштованою більшою моделлю через talk.client.toolCall.
Жива smoke-перевірка для супровідників: OPENAI_API_KEY=... GEMINI_API_KEY=... node --import tsx scripts/dev/realtime-talk-live-smoke.ts перевіряє серверний міст WebSocket OpenAI, браузерний обмін SDP WebRTC OpenAI, браузерне налаштування WebSocket Google Live з обмеженими токенами та браузерний адаптер ретрансляції Gateway із підробленим медіа мікрофона. Команда друкує лише стан постачальника й не журналює секрети.
Зупинка та переривання
- Натисніть Зупинити (викликає
chat.abort). - Поки виконання активне, звичайні наступні повідомлення стають у чергу. Натисніть Скерувати на повідомленні в черзі, щоб вставити це наступне повідомлення в поточний хід.
- Введіть
/stop(або окремі фрази переривання, як-отstop,stop action,stop run,stop openclaw,please stop), щоб перервати поза основним каналом. chat.abortпідтримує{ sessionKey }(безrunId), щоб перервати всі активні виконання для цього сеансу.
Збереження часткового вмісту після переривання
- Коли виконання перервано, частковий текст асистента все ще може відображатися в UI.
- Gateway зберігає перерваний частковий текст асистента в історії транскрипту, коли існує буферизований вивід.
- Збережені записи містять метадані переривання, щоб споживачі транскрипту могли відрізнити часткові результати переривання від звичайного завершеного виводу.
Установлення PWA та веб push
Control UI постачається з manifest.webmanifest і service worker, тому сучасні браузери можуть установити його як автономну PWA. Web Push дає Gateway змогу пробуджувати встановлену PWA сповіщеннями навіть тоді, коли вкладка або вікно браузера не відкриті.
Якщо сторінка показує Невідповідність протоколу одразу після оновлення OpenClaw, спершу знову відкрийте панель керування за допомогою openclaw dashboard і виконайте повне оновлення сторінки. Якщо помилка лишається, очистьте дані сайту для origin панелі керування або протестуйте в приватному вікні браузера; стара вкладка або кеш service worker браузера може продовжувати виконувати пакет Control UI до оновлення проти новішого Gateway.
| Поверхня | Що вона робить |
|---|---|
ui/public/manifest.webmanifest |
Маніфест PWA. Браузери пропонують "Установити застосунок", щойно він стає доступним. |
ui/public/sw.js |
Service worker, який обробляє події push і натискання сповіщень. |
push/vapid-keys.json (у каталозі стану OpenClaw) |
Автоматично згенерована пара ключів VAPID, що використовується для підписування Web Push payloads. |
push/web-push-subscriptions.json |
Збережені кінцеві точки підписок браузера. |
Перевизначайте пару ключів VAPID через змінні середовища процесу Gateway, коли потрібно закріпити ключі (для розгортань на кількох хостах, ротації секретів або тестів):
OPENCLAW_VAPID_PUBLIC_KEYOPENCLAW_VAPID_PRIVATE_KEYOPENCLAW_VAPID_SUBJECT(типовоhttps://openclaw.ai)
Control UI використовує ці методи Gateway, обмежені областю доступу, щоб реєструвати й тестувати підписки браузера:
push.web.vapidPublicKey— отримує активний публічний ключ VAPID.push.web.subscribe— реєструєendpointразом ізkeys.p256dh/keys.auth.push.web.unsubscribe— видаляє зареєстровану кінцеву точку.push.web.test— надсилає тестове сповіщення до підписки викликача.
Вбудовування з хостингу
Повідомлення асистента можуть вбудовано відображати розміщений вебвміст за допомогою shortcode [embed ...]. Політикою sandbox для iframe керує gateway.controlUi.embedSandbox:
strict
Вимикає виконання скриптів у розміщених вбудованих елементах.
scripts (типово)
Дозволяє інтерактивні вбудовані елементи, зберігаючи ізоляцію origin; це типове значення і зазвичай його достатньо для автономних браузерних ігор/віджетів.
trusted
Додає allow-same-origin поверх allow-scripts для документів того самого сайту, яким навмисно потрібні сильніші привілеї.
Приклад:
{ gateway: { controlUi: { embedSandbox: "scripts", }, },}Абсолютні зовнішні URL-адреси вбудовування http(s) типово залишаються заблокованими. Якщо ви навмисно хочете, щоб [embed url="https://..."] завантажував сторонні сторінки, установіть gateway.controlUi.allowExternalEmbedUrls: true.
Ширина повідомлень чату
Згруповані повідомлення чату використовують читабельну типову максимальну ширину. Розгортання на широких моніторах можуть перевизначити її без виправлення вбудованого CSS, установивши gateway.controlUi.chatMessageMaxWidth:
{ gateway: { controlUi: { chatMessageMaxWidth: "min(1280px, 82%)", }, },}Значення перевіряється до того, як потрапить у браузер. Підтримувані значення охоплюють прості довжини й відсотки, як-от 960px або 82%, а також обмежені вирази ширини min(...), max(...), clamp(...), calc(...) і fit-content(...).
Доступ через tailnet (рекомендовано)
Інтегрований Tailscale Serve (бажано)
Залиште Gateway на loopback і дозвольте Tailscale Serve проксіювати його через HTTPS:
openclaw gateway --tailscale serveВідкрийте:
https://<magicdns>/(або налаштованийgateway.controlUi.basePath)
Типово запити Control UI/WebSocket Serve можуть автентифікуватися через заголовки ідентичності Tailscale (tailscale-user-login), коли gateway.auth.allowTailscale має значення true. OpenClaw перевіряє ідентичність, розв'язуючи адресу x-forwarded-for за допомогою tailscale whois і зіставляючи її із заголовком, та приймає їх лише тоді, коли запит потрапляє на loopback із заголовками x-forwarded-* від Tailscale. Для операторських сеансів Control UI з ідентичністю браузерного пристрою цей перевірений шлях Serve також пропускає круговий обмін сполучення пристрою; браузери без пристрою та з'єднання з роллю вузла все ще проходять звичайні перевірки пристрою. Установіть gateway.auth.allowTailscale: false, якщо хочете вимагати явні облікові дані спільного секрету навіть для трафіку Serve. Потім використовуйте gateway.auth.mode: "token" або "password".
Для цього асинхронного шляху ідентичності Serve невдалі спроби автентифікації з тієї самої IP-адреси клієнта й області автентифікації серіалізуються перед записами rate-limit. Тому одночасні невдалі повторні спроби з того самого браузера можуть показати retry later на другому запиті замість двох звичайних невідповідностей, що виконуються паралельно.
Прив'язка до tailnet + токен
openclaw gateway --bind tailnet --token "$(openssl rand -hex 32)"Потім відкрийте:
http://<tailscale-ip>:18789/(або налаштованийgateway.controlUi.basePath)
Вставте відповідний спільний секрет у налаштування UI (надсилається як connect.params.auth.token або connect.params.auth.password).
Небезпечний HTTP
Якщо ви відкриваєте панель керування через звичайний HTTP (http://<lan-ip> або http://<tailscale-ip>), браузер працює в незахищеному контексті й блокує WebCrypto. Типово OpenClaw блокує з'єднання Control UI без ідентичності пристрою.
Задокументовані винятки:
- сумісність незахищеного HTTP лише для localhost із
gateway.controlUi.allowInsecureAuth=true - успішна операторська автентифікація Control UI через
gateway.auth.mode: "trusted-proxy" - аварійний
gateway.controlUi.dangerouslyDisableDeviceAuth=true
Рекомендоване виправлення: використовуйте HTTPS (Tailscale Serve) або відкрийте UI локально:
https://<magicdns>/(Serve)http://127.0.0.1:18789/(на хості gateway)
Поведінка перемикача незахищеної автентифікації
{ gateway: { controlUi: { allowInsecureAuth: true }, bind: "tailnet", auth: { mode: "token", token: "replace-me" }, },}allowInsecureAuth — це лише локальний перемикач сумісності:
- Він дозволяє сеансам Control UI localhost продовжуватися без ідентичності пристрою в незахищених HTTP-контекстах.
- Він не обходить перевірки сполучення.
- Він не послаблює вимоги до ідентичності пристрою для віддалених (не localhost) з'єднань.
Лише аварійний доступ
{ gateway: { controlUi: { dangerouslyDisableDeviceAuth: true }, bind: "tailnet", auth: { mode: "token", token: "replace-me" }, },}Примітка щодо довіреного проксі
- Успішна автентифікація trusted-proxy може допускати операторські сеанси Control UI без ідентичності пристрою.
- Це не поширюється на сеанси Control UI з роллю вузла.
- Зворотні проксі same-host loopback усе ще не задовольняють автентифікацію trusted-proxy; див. Автентифікація довіреного проксі.
Див. Tailscale, щоб отримати вказівки з налаштування HTTPS.
Політика безпеки вмісту
Control UI постачається зі строгою політикою img-src: дозволено лише ресурси same-origin, URL-адреси data: і локально згенеровані URL-адреси blob:. Віддалені URL-адреси зображень http(s) і protocol-relative відхиляються браузером і не запускають мережеві запити.
Що це означає на практиці:
- Аватари й зображення, що обслуговуються за відносними шляхами (наприклад
/avatars/<id>), усе ще відображаються, зокрема автентифіковані маршрути аватарів, які UI отримує й перетворює на локальні URL-адресиblob:. - Вбудовані URL-адреси
data:image/...усе ще відображаються (корисно для payloads у протоколі). - Локальні URL-адреси
blob:, створені Control UI, усе ще відображаються. - Віддалені URL-адреси аватарів, випущені метаданими каналу, видаляються в допоміжних функціях аватарів Control UI і замінюються вбудованим логотипом/бейджем, тому скомпрометований або зловмисний канал не може примусити браузер оператора виконувати довільні віддалені запити зображень.
Вам не потрібно нічого змінювати, щоб отримати цю поведінку — вона завжди ввімкнена й не налаштовується.
Автентифікація маршруту аватара
Коли автентифікацію gateway налаштовано, кінцева точка аватара Control UI вимагає той самий токен gateway, що й решта API:
GET /avatar/<agentId>повертає зображення аватара лише автентифікованим викликачам.GET /avatar/<agentId>?meta=1повертає метадані аватара за тим самим правилом.- Неавтентифіковані запити до будь-якого з цих маршрутів відхиляються (відповідно до сусіднього маршруту assistant-media). Це запобігає витоку ідентичності агента через маршрут аватара на хостах, які інакше захищені.
- Сам Control UI пересилає токен gateway як bearer-заголовок під час отримання аватарів і використовує автентифіковані URL-адреси blob, щоб зображення все одно відображалося в панелях керування.
Якщо вимкнути автентифікацію Gateway (не рекомендовано на спільних хостах), маршрут аватара також стає неавтентифікованим, відповідно до решти Gateway.
Автентифікація маршруту медіа асистента
Коли автентифікацію Gateway налаштовано, попередні перегляди локальних медіа асистента використовують двоетапний маршрут:
GET /__openclaw__/assistant-media?meta=1&source=<path>вимагає звичайної автентифікації оператора Control UI. Під час перевірки доступності браузер надсилає токен Gateway як bearer-заголовок.- Успішні відповіді з метаданими містять короткочасний
mediaTicket, прив’язаний до цього точного шляху джерела. - URL-адреси зображень, аудіо, відео та документів, відтворених браузером, використовують
mediaTicket=<ticket>замість активного токена або пароля Gateway. Квиток швидко спливає й не може авторизувати інше джерело.
Це зберігає сумісність звичайного відтворення медіа з нативними медіаелементами браузера, не розміщуючи багаторазові облікові дані Gateway у видимих URL-адресах медіа.
Збирання UI
Gateway обслуговує статичні файли з dist/control-ui. Зберіть їх за допомогою:
pnpm ui:buildНеобов’язкова абсолютна база (коли потрібні фіксовані URL-адреси ресурсів):
OPENCLAW_CONTROL_UI_BASE_PATH=/openclaw/ pnpm ui:buildДля локальної розробки (окремий dev-сервер):
pnpm ui:devПотім спрямуйте UI на вашу WS-URL-адресу Gateway (наприклад, ws://127.0.0.1:18789).
Порожня сторінка Control UI
Якщо браузер завантажує порожню панель керування, а DevTools не показує корисної помилки, розширення або ранній content script міг завадити виконанню застосунку JavaScript-модуля. Статична сторінка містить просту HTML-панель відновлення, яка з’являється, коли <openclaw-app> не зареєстровано після запуску.
Скористайтеся дією Спробувати ще раз на панелі після зміни середовища браузера або перезавантажте вручну після таких перевірок:
- Вимкніть розширення, які ін’єктуються на всі сторінки, особливо розширення з content scripts
<all_urls>. - Спробуйте приватне вікно, чистий профіль браузера або інший браузер.
- Залиште Gateway запущеним і перевірте ту саму URL-адресу панелі керування після зміни браузера.
Налагодження/тестування: dev-сервер + віддалений Gateway
Control UI — це статичні файли; ціль WebSocket налаштовується і може відрізнятися від HTTP-джерела. Це зручно, коли ви хочете використовувати Vite dev-сервер локально, але Gateway працює деінде.
Запустіть dev-сервер UI
pnpm ui:devВідкрийте з gatewayUrl
http://localhost:5173/?gatewayUrl=ws%3A%2F%2F<gateway-host>%3A18789Необов’язкова одноразова автентифікація (якщо потрібно):
http://localhost:5173/?gatewayUrl=wss%3A%2F%2F<gateway-host>%3A18789#token=<gateway-token>Примітки
gatewayUrlзберігається в localStorage після завантаження та видаляється з URL-адреси.- Якщо ви передаєте повну кінцеву точку
ws://абоwss://черезgatewayUrl, URL-кодуйте значенняgatewayUrl, щоб браузер правильно розібрав рядок запиту. tokenслід передавати через фрагмент URL-адреси (#token=...), коли це можливо. Фрагменти не надсилаються на сервер, що запобігає витоку в журналах запитів і Referer. Застарілі параметри запиту?token=усе ще імпортуються один раз для сумісності, але лише як fallback, і негайно видаляються після bootstrap.passwordзберігається лише в пам’яті.- Коли
gatewayUrlзадано, UI не повертається до облікових даних із конфігурації або середовища. Надайтеtoken(абоpassword) явно. Відсутність явних облікових даних є помилкою. - Використовуйте
wss://, коли Gateway розташований за TLS (Tailscale Serve, HTTPS-проксі тощо). gatewayUrlприймається лише у вікні верхнього рівня (не у вбудованому), щоб запобігти clickjacking.- Публічні нелупбек-розгортання Control UI повинні явно задавати
gateway.controlUi.allowedOrigins(повні джерела). Приватні LAN/Tailnet-завантаження з тим самим джерелом із loopback, RFC1918/link-local,.local,.ts.netабо хостів Tailscale CGNAT приймаються без увімкнення fallback за Host-заголовком. - Запуск Gateway може ініціалізувати локальні джерела, як-от
http://localhost:<port>іhttp://127.0.0.1:<port>, з ефективних runtime bind і порту, але віддалені джерела браузера все одно потребують явних записів. - Не використовуйте
gateway.controlUi.allowedOrigins: ["*"], окрім суворо контрольованого локального тестування. Це означає дозволити будь-яке джерело браузера, а не «зіставити будь-який хост, який я використовую». gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=trueвмикає режим fallback за Host-заголовком, але це небезпечний режим безпеки.
Приклад:
{ gateway: { controlUi: { allowedOrigins: ["http://localhost:5173"], }, },}Докладні відомості про налаштування віддаленого доступу: Віддалений доступ.
Пов’язане
- Панель керування — панель керування Gateway
- Перевірки працездатності — моніторинг працездатності Gateway
- TUI — термінальний інтерфейс користувача
- WebChat — браузерний інтерфейс чату