UI управления (браузер)
UI управления — это небольшое одностраничное приложение Vite + Lit, которое обслуживается Gateway:- по умолчанию:
http://<host>:18789/ - необязательный префикс: задайте
gateway.controlUi.basePath(например,/openclaw)
Быстрое открытие (локально)
Если Gateway запущен на том же компьютере, откройте: Если страница не загружается, сначала запустите Gateway:openclaw gateway.
Аутентификация передаётся во время рукопожатия WebSocket через:
connect.params.auth.tokenconnect.params.auth.passwordПанель настроек дашборда позволяет сохранить токен; пароли не сохраняются. Мастер онбординга по умолчанию генерирует токен Gateway, поэтому при первом подключении вставьте его сюда.
Сопряжение устройства (первое подключение)
Когда вы подключаетесь к UI управления из нового браузера или с нового устройства, Gateway требует одноразового подтверждения сопряжения — даже если вы находитесь в том же Tailnet сgateway.auth.allowTailscale: true. Это мера безопасности для предотвращения
несанкционированного доступа.
Что вы увидите: «disconnected (1008): pairing required»
Как одобрить устройство:
openclaw devices revoke --device <id> --role <role>. Devices CLI для ротации токенов и отзыва.
Примечания:
- Локальные подключения (
127.0.0.1) одобряются автоматически. - Удалённые подключения (LAN, Tailnet и т. п.) требуют явного одобрения.
- Каждый профиль браузера генерирует уникальный идентификатор устройства, поэтому смена браузера или очистка данных браузера потребует повторного сопряжения.
Что он умеет (на сегодня)
- Чат с моделью через Gateway WS (
chat.history,chat.send,chat.abort,chat.inject) - Потоковая передача вызовов инструментов и живые карточки вывода инструментов в чате (события агента)
- Каналы: WhatsApp/Telegram/Discord/Slack + каналы плагинов (Mattermost и т. п.) — статус + QR‑вход + конфиг на канал (
channels.status,web.login.*,config.patch) - Инстансы: список присутствия + обновление (
system-presence) - Сеансы: список + переопределения «thinking/verbose» для каждого сеанса (
sessions.list,sessions.patch) - Cron‑задачи: список/добавить/запустить/включить/выключить + история запусков (
cron.*) - Skills: статус, включение/выключение, установка, обновление ключей API (
skills.*) - Узлы: список + возможности (
node.list) - Подтверждения выполнения команд: редактирование списков разрешённых для Gateway или узла + запрос политики для
exec host=gateway/node(exec.approvals.*) - Конфиг: просмотр/редактирование
~/.openclaw/openclaw.json(config.get,config.set) - Конфиг: применить + перезапустить с валидацией (
config.apply) и пробудить последний активный сеанс - Записи конфига включают защиту по базовому хэшу, чтобы предотвратить перезапись параллельных правок
- Схема конфига + рендеринг форм (
config.schema, включая схемы плагинов и каналов); редактор Raw JSON остаётся доступным - Отладка: снимки статуса/здоровья/моделей + журнал событий + ручные RPC‑вызовы (
status,health,models.list) - Логи: живой tail файловых логов Gateway с фильтрацией/экспортом (
logs.tail) - Обновление: запуск обновления пакета/git + перезапуск (
update.run) с отчётом о перезапуске
- Для изолированных задач доставка по умолчанию — объявление краткого резюме. Можно переключить на «нет», если нужны только внутренние запуски.
- Поля канал/цель появляются, когда выбрано «announce».
Поведение чата
chat.sendнеблокирующий: сразу подтверждается с{ runId, status: "started" }, а ответ поступает потоково через событияchat.- Повторная отправка с тем же
idempotencyKeyвозвращает{ status: "in_flight" }во время выполнения и{ status: "ok" }после завершения. chat.injectдобавляет заметку ассистента в транскрипт сеанса и рассылает событиеchatтолько для UI‑обновлений (без запуска агента и без доставки в канал).- Остановка:
- Нажмите 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), когда gateway.auth.allowTailscale — true. OpenClaw
проверяет идентичность, разрешая адрес x-forwarded-for с помощью
tailscale whois и сопоставляя его с заголовком, и принимает такие запросы только когда
они приходят на loopback с заголовками Tailscale x-forwarded-*. Установите
gateway.auth.allowTailscale: false (или принудительно gateway.auth.mode: "password"),
если хотите требовать токен/пароль даже для трафика Serve.
Привязка к tailnet + токен
http://<tailscale-ip>:18789/(или ваш настроенныйgateway.controlUi.basePath)
connect.params.auth.token).
Небезопасный HTTP
Если вы открываете дашборд по обычному HTTP (http://<lan-ip> или http://<tailscale-ip>),
браузер работает в незащищённом контексте и блокирует WebCrypto. По умолчанию
OpenClaw блокирует подключения UI управления без идентичности устройства.
Рекомендуемое исправление: используйте HTTPS (Tailscale Serve) или открывайте UI локально:
https://<magicdns>/(Serve)http://127.0.0.1:18789/(на хосте шлюза Gateway)
Сборка UI
Gateway раздаёт статические файлы изdist/control-ui. Соберите их с помощью:
ws://127.0.0.1:18789).
Отладка/тестирование: dev‑сервер + удалённый Gateway
UI управления — это статические файлы; цель WebSocket настраивается и может отличаться от HTTP‑источника. Это удобно, когда вы хотите запускать Vite dev‑сервер локально, а Gateway — в другом месте.- Запустите dev‑сервер UI:
pnpm ui:dev - Откройте URL вида:
gatewayUrlсохраняется в localStorage после загрузки и удаляется из URL.tokenсохраняется в localStorage;passwordхранится только в памяти.- Когда задан
gatewayUrl, UI не использует запасные учётные данные из конфига или переменных окружения. Явно укажитеtoken(илиpassword). Отсутствие явных учётных данных — ошибка. - Используйте
wss://, когда Gateway находится за TLS (Tailscale Serve, HTTPS‑прокси и т. п.). gatewayUrlпринимается только в окне верхнего уровня (не во встраиваемом), чтобы предотвратить кликджекинг.- Для кросс‑доменной разработки (например,
pnpm ui:devк удалённому Gateway) добавьте origin UI вgateway.controlUi.allowedOrigins.