openclaw gateway ….
Виявлення Bonjour
Налаштування локального mDNS + wide-area DNS-SD.
Огляд виявлення
Як OpenClaw оголошує та знаходить шлюзи.
Конфігурація
Ключі конфігурації gateway верхнього рівня.
Запуск Gateway
Запустіть локальний процес Gateway:Поведінка під час запуску
Поведінка під час запуску
- За замовчуванням Gateway відмовляється запускатися, якщо в
~/.openclaw/openclaw.jsonне встановленоgateway.mode=local. Використовуйте--allow-unconfiguredдля одноразових/dev-запусків. - Очікується, що
openclaw onboard --mode localіopenclaw setupзаписуютьgateway.mode=local. Якщо файл існує, алеgateway.modeвідсутній, вважайте це пошкодженою або перезаписаною конфігурацією та виправте її, замість неявного припущення локального режиму. - Якщо файл існує, а
gateway.modeвідсутній, Gateway вважає це підозрілим пошкодженням конфігурації та відмовляється “вгадувати local” замість вас. - Прив’язування поза loopback без автентифікації заблоковано (захисне обмеження).
lan,tailnetіcustomнаразі розв’язуються через BYOH-шляхи лише IPv4.- BYOH лише IPv6 сьогодні не підтримується нативно на цьому шляху. Використовуйте IPv4 sidecar або проксі, якщо сам хост підтримує лише IPv6.
SIGUSR1запускає перезапуск усередині процесу, коли це авторизовано (commands.restartувімкнено за замовчуванням; встановітьcommands.restart: false, щоб заблокувати ручний перезапуск, тоді як застосування/оновлення інструментів і конфігурації gateway залишаються дозволеними).- Обробники
SIGINT/SIGTERMзупиняють процес gateway, але не відновлюють жоден кастомний стан термінала. Якщо ви обгортаєте CLI за допомогою TUI або введення в raw-mode, відновіть термінал перед виходом.
Параметри
Порт WebSocket (значення за замовчуванням береться з config/env; зазвичай
18789).Режим прив’язування слухача.
lan, tailnet і custom наразі розв’язуються через шляхи лише IPv4.Перевизначення режиму автентифікації.
Перевизначення токена (також встановлює
OPENCLAW_GATEWAY_TOKEN для процесу).Перевизначення пароля.
Прочитати пароль gateway з файлу.
Відкрити доступ до Gateway через Tailscale.
Скинути конфігурацію Tailscale serve/funnel під час завершення роботи.
Сьогодні очікується IPv4-адреса. Для BYOH лише IPv6 розмістіть IPv4 sidecar або проксі перед Gateway і вкажіть OpenClaw на цю IPv4-кінцеву точку.
Дозволити запуск gateway без
gateway.mode=local у конфігурації. Обходить захист запуску лише для одноразового/dev bootstrap; не записує й не виправляє файл конфігурації.Створити dev-конфігурацію + робочий простір, якщо їх немає (пропускає BOOTSTRAP.md).
Скинути dev-конфігурацію + облікові дані + сеанси + робочий простір (потребує
--dev).Завершити будь-якого наявного слухача на вибраному порту перед запуском.
Докладні журнали.
Показувати в консолі лише журнали бекенда CLI (і ввімкнути stdout/stderr).
Стиль журналу WebSocket.
Аліас для
--ws-log compact.Записувати необроблені події потоку моделі в jsonl.
Шлях jsonl для необробленого потоку.
Перезапуск Gateway
openclaw gateway restart --safe просить запущений Gateway виконати попередню перевірку активної роботи й запланувати один об’єднаний перезапуск після завершення активної роботи. Безпечний перезапуск за замовчуванням чекає активну роботу до налаштованого gateway.reload.deferralTimeoutMs (за замовчуванням 5 хвилин); коли цей ліміт вичерпується, перезапуск примусово виконується. Встановіть gateway.reload.deferralTimeoutMs у 0 для безстрокового безпечного очікування, яке ніколи не примушує перезапуск. Звичайний restart зберігає наявну поведінку менеджера служб; --force залишається шляхом негайного перевизначення.
openclaw gateway restart --safe --skip-deferral виконує той самий скоординований перезапуск із урахуванням OpenClaw, що й --safe, але обходить шлюз відкладення активної роботи, тому Gateway негайно генерує перезапуск навіть коли повідомлено про блокери. Використовуйте це як аварійний вихід оператора, коли відкладення закріплене завислим запуском задачі, а лише --safe може бути обмежений gateway.reload.deferralTimeoutMs. --skip-deferral потребує --safe.
Профілювання Gateway
- Встановіть
OPENCLAW_GATEWAY_STARTUP_TRACE=1, щоб журналювати часові показники фаз під час запуску Gateway, включно із затримкоюeventLoopMaxдля кожної фази та часовими показниками таблиць пошуку plugin для installed-index, реєстру маніфестів, планування запуску й роботи owner-map. - Встановіть
OPENCLAW_GATEWAY_RESTART_TRACE=1, щоб журналювати рядкиrestart trace:у межах перезапуску для обробки сигналу перезапуску, завершення активної роботи, фаз вимкнення, наступного запуску, часу готовності й метрик пам’яті. - Встановіть
OPENCLAW_DIAGNOSTICS=timelineразом ізOPENCLAW_DIAGNOSTICS_TIMELINE_PATH=<path>, щоб записувати best-effort JSONL-хронологію діагностики запуску для зовнішніх QA harnesses. Також можна ввімкнути прапорець черезdiagnostics.flags: ["timeline"]у конфігурації; шлях усе одно надається через env. ДодайтеOPENCLAW_DIAGNOSTICS_EVENT_LOOP=1, щоб включити вибірки event-loop. - Спочатку запустіть
pnpm build, потімpnpm test:startup:gateway -- --runs 5 --warmup 1, щоб виміряти продуктивність запуску Gateway відносно зібраної точки входу CLI. Benchmark записує перший вивід процесу,/healthz,/readyz, часові показники трасування запуску, затримку event-loop і деталі часових показників таблиць пошуку plugin. - Спочатку запустіть
pnpm build, потімpnpm test:restart:gateway -- --case skipChannels --runs 1 --restarts 5, щоб виміряти продуктивність перезапуску Gateway всередині процесу відносно зібраної точки входу CLI на macOS або Linux. Benchmark перезапуску використовує SIGUSR1, вмикає трасування запуску й перезапуску в дочірньому процесі та записує наступний/healthz, наступний/readyz, downtime, час готовності, CPU, RSS і метрики трасування перезапуску. - Вважайте
/healthzперевіркою життєздатності, а/readyz— готовністю до використання. Рядки трасування й вивід benchmark призначені для атрибуції власнику; не вважайте один проміжок трасування або одну вибірку повним висновком щодо продуктивності.
Запит до запущеного Gateway
Усі команди запитів використовують WebSocket RPC.- Режими виводу
- Спільні параметри
- За замовчуванням: зручно для читання людиною (кольорове в TTY).
--json: машинозчитуваний JSON (без стилізації/spinner).--no-color(абоNO_COLOR=1): вимкнути ANSI, зберігаючи людське компонування.
Коли ви встановлюєте
--url, CLI не повертається до облікових даних із конфігурації або середовища. Передайте --token або --password явно. Відсутність явних облікових даних є помилкою.gateway health
/healthz є пробою життєздатності: вона повертається, щойно сервер може відповідати HTTP. HTTP-кінцева точка /readyz суворіша й залишається червоною, поки startup plugin sidecars, канали або налаштовані хуки ще стабілізуються. Локальні або автентифіковані детальні відповіді readiness містять діагностичний блок eventLoop із затримкою event-loop, використанням event-loop, співвідношенням ядер CPU і прапорцем degraded.
Спрямувати запит на local loopback Gateway на цьому порту. Це перевизначає
OPENCLAW_GATEWAY_URL і OPENCLAW_GATEWAY_PORT для виклику health.gateway usage-cost
Отримати підсумки usage-cost із журналів сеансів.
Кількість днів для включення.
Обмежити підсумок витрат одним налаштованим ідентифікатором агента.
Агрегувати підсумок витрат для всіх налаштованих агентів. Не можна поєднувати з
--agent.gateway stability
Отримати нещодавній diagnostic stability recorder із запущеного Gateway.
Максимальна кількість нещодавніх подій для включення (макс.
1000).Фільтрувати за типом діагностичної події, наприклад
payload.large або diagnostic.memory.pressure.Включати лише події після діагностичного порядкового номера.
Прочитати збережений stability bundle замість виклику запущеного Gateway. Використовуйте
--bundle latest (або просто --bundle) для найновішого bundle у каталозі стану або передайте шлях до JSON bundle напряму.Записати придатний для поширення zip із діагностикою підтримки замість друку деталей stability.
Шлях виводу для
--export.Приватність і поведінка bundle
Приватність і поведінка bundle
- Записи зберігають операційні метадані: назви подій, лічильники, розміри в байтах, показники пам’яті, стан черги/сеансу, ідентифікатори схвалень, назви каналів/plugin і редаговані підсумки сеансів. Вони не зберігають текст чату, тіла webhook, вивід інструментів, необроблені тіла запитів або відповідей, токени, cookie, секретні значення, імена хостів або необроблені ідентифікатори сеансів. Встановіть
diagnostics.enabled: false, щоб повністю вимкнути recorder. - Під час фатальних завершень Gateway, timeout вимкнення та збоїв запуску після перезапуску OpenClaw записує той самий діагностичний знімок у
~/.openclaw/logs/stability/openclaw-stability-*.json, коли recorder має події. Перегляньте найновіший bundle за допомогоюopenclaw gateway stability --bundle latest;--limit,--typeі--since-seqтакож застосовуються до виводу bundle.
gateway diagnostics export
Записати локальний zip із діагностикою, призначений для прикріплення до звітів про помилки. Модель приватності та вміст bundle див. у Експорті діагностики.
Шлях вихідного zip-файлу. За замовчуванням використовується експорт для підтримки в каталозі стану.
Максимальна кількість санітизованих рядків журналу для включення.
Максимальна кількість байтів журналу для перевірки.
URL WebSocket Gateway для знімка стану справності.
Токен Gateway для знімка стану справності.
Пароль Gateway для знімка стану справності.
Тайм-аут знімка статусу/справності.
Пропустити пошук збереженого пакета стабільності.
Вивести записаний шлях, розмір і маніфест як JSON.
gateway status
gateway status показує службу Gateway (launchd/systemd/schtasks) плюс необов’язкову перевірку можливості підключення/автентифікації.
Додати явну ціль перевірки. Налаштовані remote + localhost усе одно перевіряються.
Автентифікація токеном для перевірки.
Автентифікація паролем для перевірки.
Тайм-аут перевірки.
Пропустити перевірку підключення (лише подання служби).
Також сканувати служби системного рівня.
Підвищити стандартну перевірку підключення до перевірки читання і завершити роботу з ненульовим кодом, якщо ця перевірка читання не вдасться. Не можна поєднувати з
--no-probe.Семантика статусу
Семантика статусу
gateway statusлишається доступним для діагностики, навіть коли локальна конфігурація CLI відсутня або недійсна.- Стандартний
gateway statusпідтверджує стан служби, підключення WebSocket і можливість автентифікації, видиму під час handshake. Він не підтверджує операції читання/запису/адміністрування. - Діагностичні перевірки не змінюють стан для автентифікації пристрою під час першого використання: вони повторно використовують наявний кешований токен пристрою, якщо він існує, але не створюють нову ідентичність пристрою CLI або запис сполучення пристрою лише для читання тільки для перевірки статусу.
gateway statusза можливості розв’язує налаштовані SecretRefs автентифікації для автентифікації перевірки.- Якщо потрібний SecretRef автентифікації не розв’язано в цьому шляху команди,
gateway status --jsonповідомляєrpc.authWarning, коли перевірка підключення/автентифікації не вдається; передайте--token/--passwordявно або спершу розв’яжіть джерело секрету. - Якщо перевірка успішна, попередження про нерозв’язані посилання автентифікації пригнічуються, щоб уникнути хибних спрацювань.
- Коли перевірку ввімкнено, вивід JSON містить
gateway.version, якщо запущений Gateway повідомляє її;--require-rpcможе повернутися до корисного навантаження RPCstatus.runtimeVersion, якщо подальша перевірка handshake не може надати метадані версії. - Використовуйте
--require-rpcу скриптах і автоматизації, коли прослуховувальної служби недостатньо і вам також потрібна справність RPC-викликів із областю читання. --deepдодає найкращу можливу перевірку додаткових встановлень launchd/systemd/schtasks. Коли виявлено кілька служб, схожих на gateway, зрозумілий для людини вивід друкує підказки з очищення і попереджає, що більшість налаштувань мають запускати один gateway на машину.--deepтакож повідомляє про нещодавню передачу перезапуску супервізора Gateway, коли процес служби коректно завершився для перезапуску зовнішнім супервізором.--deepзапускає перевірку конфігурації в режимі з урахуванням плагінів (pluginValidation: "full") і показує налаштовані попередження маніфестів плагінів (наприклад, відсутні метадані конфігурації каналу), щоб smoke-перевірки встановлення й оновлення їх виявляли. Стандартнийgateway statusзберігає швидкий шлях лише для читання, який пропускає перевірку плагінів.- Зрозумілий для людини вивід містить розв’язаний шлях до файлового журналу плюс знімок шляхів/дійсності конфігурації CLI-порівняно-зі-службою, щоб допомогти діагностувати розбіжність профілю або каталогу стану.
Перевірки розбіжності автентифікації Linux systemd
Перевірки розбіжності автентифікації Linux systemd
- У встановленнях Linux systemd перевірки розбіжності автентифікації служби читають значення
Environment=іEnvironmentFile=з unit (включно з%h, шляхами в лапках, кількома файлами та необов’язковими файлами-). - Перевірки розбіжності розв’язують SecretRefs
gateway.auth.tokenза допомогою об’єднаного runtime env (спочатку env команди служби, потім fallback до process env). - Якщо автентифікація токеном фактично не активна (явний
gateway.auth.modeзі значеннямpassword/none/trusted-proxyабо режим не задано, де пароль може перемогти, а жоден кандидат токена не може перемогти), перевірки розбіжності токена пропускають розв’язання токена конфігурації.
gateway probe
gateway probe — це команда «налагодити все». Вона завжди перевіряє:
- ваш налаштований remote gateway (якщо задано), і
- localhost (loopback) навіть якщо remote налаштовано.
--url, ця явна ціль додається перед обома. Зрозумілий для людини вивід позначає цілі як:
URL (explicit)Remote (configured)абоRemote (configured, inactive)Local loopback
Якщо доступні кілька цілей перевірки, команда друкує їх усі. SSH-тунель, TLS/proxy URL і налаштований remote URL можуть усі вказувати на той самий gateway, навіть коли їхні транспортні порти відрізняються;
multiple_gateways зарезервовано для окремих або неоднозначних за ідентичністю доступних gateway. Кілька gateway підтримуються, коли ви використовуєте ізольовані профілі (наприклад, rescue bot), але більшість встановлень усе одно запускають один gateway.Використати цей порт для цілі перевірки local loopback і віддаленого порту SSH-тунелю. Без
--url це вибирає ціль local loopback замість налаштованого URL середовища gateway, порту середовища або remote-цілей.Інтерпретація
Інтерпретація
Reachable: yesозначає, що принаймні одна ціль прийняла підключення WebSocket.Capability: read-only|write-capable|admin-capable|pairing-pending|connect-onlyповідомляє, що перевірка змогла підтвердити щодо автентифікації. Це окремо від доступності.Read probe: okозначає, що RPC-виклики деталей з областю читання (health/status/system-presence/config.get) також були успішними.Read probe: limited - missing scope: operator.readозначає, що підключення успішне, але RPC з областю читання обмежено. Це повідомляється як погіршена доступність, а не повний збій.Read probe: failedпісляConnect: okозначає, що Gateway прийняв підключення WebSocket, але подальша діагностика читання перевищила тайм-аут або завершилася невдало. Це також погіршена доступність, а не недоступний Gateway.- Як і
gateway status, probe повторно використовує наявну кешовану автентифікацію пристрою, але не створює ідентичність пристрою під час першого використання або стан сполучення. - Код завершення ненульовий лише тоді, коли жодна перевірена ціль не доступна.
Виведення JSON
Виведення JSON
Верхній рівень:
ok: принаймні одна ціль доступна.degraded: принаймні одна ціль прийняла підключення, але не завершила повну діагностику RPC з деталями.capability: найкраща можливість, виявлена серед доступних цілей (read_only,write_capable,admin_capable,pairing_pending,connected_no_operator_scopeабоunknown).primaryTargetId: найкраща ціль, яку слід вважати активним переможцем у такому порядку: явний URL, SSH-тунель, налаштована віддалена ціль, потім local loopback.warnings[]: попереджувальні записи за принципом best-effort ізcode,messageта необов’язковимиtargetIds.network: підказки URL для local loopback/tailnet, отримані з поточної конфігурації та мережі хоста.discovery.timeoutMsіdiscovery.count: фактичний бюджет виявлення/кількість результатів, використані для цього проходу перевірки.
targets[].connect):ok: доступність після підключення + класифікація деградації.rpcOk: успішне повне RPC з деталями.scopeLimited: RPC з деталями завершився невдало через відсутню область доступу оператора.
targets[].auth):role: роль автентифікації, повідомлена вhello-ok, якщо доступна.scopes: надані області доступу, повідомлені вhello-ok, якщо доступні.capability: показана класифікація можливості автентифікації для цієї цілі.
Поширені коди попереджень
Поширені коди попереджень
ssh_tunnel_failed: налаштування SSH-тунелю не вдалося; команда повернулася до прямих перевірок.multiple_gateways: були доступні різні ідентичності gateway, або OpenClaw не зміг довести, що доступні цілі є тим самим gateway. SSH-тунель, URL проксі або налаштований віддалений URL до того самого gateway не спричиняє цього попередження.auth_secretref_unresolved: налаштований SecretRef автентифікації не вдалося розв’язати для цілі, що завершилася невдало.probe_scope_limited: підключення WebSocket успішне, але проба читання була обмежена через відсутнійoperator.read.
Віддалено через SSH (паритет із застосунком Mac)
Режим застосунку macOS «Віддалено через SSH» використовує локальне перенаправлення порту, щоб віддалений gateway (який може бути прив’язаний лише до loopback) став доступним за адресоюws://127.0.0.1:<port>.
Еквівалент CLI:
user@host або user@host:port (порт за замовчуванням 22).Файл ідентичності.
Вибрати перший виявлений хост gateway як SSH-ціль із розв’язаного кінцевого пункту виявлення (
local. плюс налаштований домен широкої зони, якщо є). Підказки лише TXT ігноруються.gateway.remote.sshTargetgateway.remote.sshIdentity
gateway call <method>
Низькорівневий помічник RPC.
Рядок об’єкта JSON для параметрів.
URL WebSocket Gateway.
Токен Gateway.
Пароль Gateway.
Бюджет часу очікування.
Переважно для RPC у стилі агентів, які транслюють проміжні події перед фінальним корисним навантаженням.
Машиночитане виведення JSON.
--params має бути дійсним JSON.Керування службою Gateway
Установлення з обгорткою
Використовуйте--wrapper, коли керована служба має запускатися через інший виконуваний файл, наприклад
проміжну обгортку менеджера секретів або допоміжний інструмент запуску від імені іншого користувача. Обгортка отримує звичайні аргументи Gateway і
відповідає за те, щоб зрештою виконати openclaw або Node з цими аргументами.
gateway install перевіряє, що шлях указує на
виконуваний файл, записує обгортку в ProgramArguments служби та зберігає
OPENCLAW_WRAPPER у середовищі служби для подальших примусових перевстановлень, оновлень і виправлень
doctor.
OPENCLAW_WRAPPER під час перевстановлення:
Command options
Command options
gateway status:--url,--token,--password,--timeout,--no-probe,--require-rpc,--deep,--jsongateway install:--port,--runtime <node|bun>,--token,--wrapper <path>,--force,--jsongateway restart:--safe,--skip-deferral,--force,--wait <duration>,--jsongateway uninstall|start:--jsongateway stop:--disable,--json
Lifecycle behavior
Lifecycle behavior
- Використовуйте
gateway restart, щоб перезапустити керовану службу. Не поєднуйте послідовноgateway stopіgateway startяк заміну перезапуску. - На macOS
gateway stopтипово використовуєlaunchctl bootout, що видаляє LaunchAgent із поточного сеансу завантаження без збереження вимкнення — автоматичне відновлення KeepAlive залишається активним для майбутніх збоїв, аgateway startповторно вмикає все без ручногоlaunchctl enable. Передайте--disable, щоб постійно придушити KeepAlive і RunAtLoad, щоб Gateway не запускався повторно до наступного явногоgateway start; використовуйте це, коли ручна зупинка має зберігатися після перезавантажень або перезапусків системи. gateway restart --safeпросить запущений Gateway попередньо перевірити активну роботу та запланувати один об’єднаний перезапуск після завершення активної роботи. Типовий безпечний перезапуск чекає на активну роботу до налаштованогоgateway.reload.deferralTimeoutMs(типово 5 хвилин); коли цей бюджет вичерпується, перезапуск примусово виконується. Установітьgateway.reload.deferralTimeoutMsу0для безстрокового безпечного очікування, яке ніколи не примушує перезапуск.--safeне можна поєднувати з--forceабо--wait.gateway restart --wait 30sперевизначає налаштований бюджет очікування завершення роботи перед перезапуском для цього перезапуску. Числа без одиниць вимірюються в мілісекундах; приймаються одиниці на кшталтs,mіh.--wait 0чекає безстроково.gateway restart --safe --skip-deferralвиконує безпечний перезапуск із урахуванням OpenClaw, але обходить шлюз відкладання, тому Gateway негайно випромінює перезапуск навіть коли повідомлено про блокери. Це аварійний вихід для оператора в разі завислих відкладань запуску завдань; вимагає--safe.gateway restart --forceпропускає очікування завершення активної роботи та перезапускає негайно. Використовуйте це, коли оператор уже перевірив перелічені блокери завдань і хоче повернути Gateway до роботи негайно.- Команди життєвого циклу приймають
--jsonдля скриптів.
Auth and SecretRefs at install time
Auth and SecretRefs at install time
- Коли автентифікація токеном потребує токена, а
gateway.auth.tokenкерується SecretRef,gateway installперевіряє, що SecretRef можна розв’язати, але не зберігає розв’язаний токен у метаданих середовища служби. - Якщо автентифікація токеном потребує токена, а налаштований SecretRef токена не розв’язується, установлення закривається помилкою замість збереження резервного відкритого тексту.
- Для автентифікації паролем у
gateway runнадавайте перевагуOPENCLAW_GATEWAY_PASSWORD,--password-fileабоgateway.auth.passwordна основі SecretRef замість вбудованого--password. - У виведеному режимі автентифікації лише оболонковий
OPENCLAW_GATEWAY_PASSWORDне послаблює вимоги до токена під час установлення; використовуйте тривалу конфігурацію (gateway.auth.passwordабо configenv) під час установлення керованої служби. - Якщо налаштовано і
gateway.auth.token, іgateway.auth.password, аgateway.auth.modeне задано, установлення блокується, доки режим не буде задано явно.
Виявлення Gateway (Bonjour)
gateway discover сканує маяки Gateway (_openclaw-gw._tcp).
- Multicast DNS-SD:
local. - Unicast DNS-SD (Wide-Area Bonjour): виберіть домен (приклад:
openclaw.internal.) і налаштуйте split DNS + DNS-сервер; див. Bonjour.
role(підказка ролі Gateway)transport(підказка транспорту, наприкладgateway)gatewayPort(порт WebSocket, зазвичай18789)sshPort(лише режим повного виявлення; клієнти типово використовують цілі SSH22, коли його немає)tailnetDns(ім’я хоста MagicDNS, коли доступне)gatewayTls/gatewayTlsSha256(TLS увімкнено + відбиток сертифіката)cliPath(лише режим повного виявлення)
gateway discover
Тайм-аут для команди (огляд/розв’язання).
Машиночитаний вивід (також вимикає стилізацію/індикатор виконання).
- CLI сканує
local.плюс налаштований домен широкої зони, коли його ввімкнено. wsUrlу JSON-виводі виводиться з розв’язаної кінцевої точки служби, а не з підказок лише TXT, таких якlanHostабоtailnetDns.- У
local.mDNS і широкозонному DNS-SDsshPortіcliPathпублікуються лише колиdiscovery.mdns.modeмає значенняfull.