CLI Gateway
Gateway — це WebSocket-сервер OpenClaw (канали, вузли, сесії, hooks). Підкоманди на цій сторінці доступні черезopenclaw gateway ….
Пов’язана документація:
Запуск Gateway
Запустіть локальний процес Gateway:- Типово Gateway відмовляється запускатися, якщо в
~/.openclaw/openclaw.jsonне встановленоgateway.mode=local. Для ad-hoc/dev запусків використовуйте--allow-unconfigured. - Очікується, що
openclaw onboard --mode localіopenclaw setupзаписуютьgateway.mode=local. Якщо файл існує, алеgateway.modeвідсутній, вважайте це пошкодженою або перезаписаною конфігурацією та виправте її, а не припускайте локальний режим неявно. - Якщо файл існує, а
gateway.modeвідсутній, Gateway вважає це підозрілим пошкодженням конфігурації й відмовляється «вгадувати local» за вас. - Прив’язування поза loopback без автентифікації блокується (запобіжний захист).
SIGUSR1запускає перезапуск у межах процесу, якщо це дозволено (commands.restartтипово ввімкнено; установітьcommands.restart: false, щоб заблокувати ручний перезапуск, при цьому інструменти/конфігурація gateway apply/update залишаються дозволеними).- Обробники
SIGINT/SIGTERMзупиняють процес gateway, але не відновлюють жоден нестандартний стан термінала. Якщо ви обгортаєте CLI у TUI або raw-mode ввід, відновіть термінал перед виходом.
Параметри
--port <port>: порт WebSocket (типове значення береться з config/env; зазвичай18789).--bind <loopback|lan|tailnet|auto|custom>: режим прив’язки слухача.--auth <token|password>: перевизначення режиму автентифікації.--token <token>: перевизначення токена (також встановлюєOPENCLAW_GATEWAY_TOKENдля процесу).--password <password>: перевизначення пароля. Попередження: паролі, передані inline, можуть бути видимі в локальних списках процесів.--password-file <path>: прочитати пароль gateway з файлу.--tailscale <off|serve|funnel>: зробити Gateway доступним через Tailscale.--tailscale-reset-on-exit: скинути конфігурацію Tailscale serve/funnel під час завершення роботи.--allow-unconfigured: дозволити запуск gateway безgateway.mode=localу конфігурації. Це обходить стартовий захист лише для ad-hoc/dev bootstrap; параметр не записує й не виправляє файл конфігурації.--dev: створити dev config + workspace, якщо їх немає (пропускає BOOTSTRAP.md).--reset: скинути dev config + credentials + sessions + workspace (потребує--dev).--force: завершити будь-який наявний listener на вибраному порту перед запуском.--verbose: докладні логи.--cli-backend-logs: показувати в консолі лише backend-логи CLI (і ввімкнути stdout/stderr).--ws-log <auto|full|compact>: стиль логів websocket (типовоauto).--compact: псевдонім для--ws-log compact.--raw-stream: логувати сирі події потоку моделі в jsonl.--raw-stream-path <path>: шлях до raw stream jsonl.
- Установіть
OPENCLAW_GATEWAY_STARTUP_TRACE=1, щоб логувати таймінги фаз під час запуску Gateway. - Запустіть
pnpm test:startup:gateway -- --runs 5 --warmup 1, щоб виміряти запуск Gateway. Бенчмарк фіксує перший вивід процесу,/healthz,/readyzі таймінги трасування запуску.
Запит до запущеного Gateway
Усі команди запиту використовують WebSocket RPC. Режими виводу:- Типово: зручний для читання людиною вивід (із кольорами в TTY).
--json: JSON для машинного читання (без стилізації/spinner).--no-color(абоNO_COLOR=1): вимкнути ANSI, зберігши людський макет.
--url <url>: URL WebSocket Gateway.--token <token>: токен Gateway.--password <password>: пароль Gateway.--timeout <ms>: тайм-аут/бюджет (залежить від команди).--expect-final: чекати на відповідь “final” (виклики агента).
--url, CLI не використовує резервний перехід до credentials із конфігурації або середовища.
Явно передайте --token або --password. Відсутність явно вказаних credentials — це помилка.
gateway health
/healthz — це liveness probe: він повертає відповідь, щойно сервер може відповідати на HTTP. HTTP endpoint /readyz суворіший і залишається червоним, поки startup sidecars, канали або налаштовані hooks ще завершують ініціалізацію.
gateway usage-cost
Отримати зведення usage-cost із логів сесій.
--days <days>: кількість днів, які слід включити (типово30).
gateway stability
Отримати нещодавній diagnostic stability recorder із запущеного Gateway.
--limit <limit>: максимальна кількість нещодавніх подій для включення (типово25, максимум1000).--type <type>: фільтр за типом diagnostic event, наприкладpayload.largeабоdiagnostic.memory.pressure.--since-seq <seq>: включати лише події після номера послідовності diagnostics.--bundle [path]: читати збережений stability bundle замість виклику запущеного Gateway. Використовуйте--bundle latest(або просто--bundle) для найновішого bundle у каталозі стану, або передайте шлях до JSON bundle безпосередньо.--export: записати zip із diagnostics для підтримки, яким можна поділитися, замість виведення подробиць stability.--output <path>: шлях виводу для--export.
- Записи зберігають операційні метадані: назви подій, лічильники, розміри в байтах, показники пам’яті, стан черги/сесії, назви каналів/Plugin, а також відредаговані зведення сесій. Вони не зберігають текст чату, тіла webhook, виводи інструментів, сирі тіла запитів або відповідей, токени, cookies, секретні значення, імена хостів або сирі id сесій. Установіть
diagnostics.enabled: false, щоб повністю вимкнути recorder. - Під час фатальних завершень Gateway, тайм-аутів вимкнення та збоїв запуску після перезапуску OpenClaw записує той самий diagnostic snapshot у
~/.openclaw/logs/stability/openclaw-stability-*.json, коли recorder має події. Перегляньте найновіший bundle за допомогоюopenclaw gateway stability --bundle latest; параметри--limit,--typeі--since-seqтакож застосовуються до виводу bundle.
gateway diagnostics export
Записати локальний zip із diagnostics, призначений для додавання до звітів про помилки.
Модель конфіденційності та вміст bundle див. у Експорт diagnostics.
--output <path>: шлях вихідного zip. Типово — support export у каталозі стану.--log-lines <count>: максимальна кількість санітизованих рядків логів для включення (типово5000).--log-bytes <bytes>: максимальна кількість байтів логів для перевірки (типово1000000).--url <url>: URL WebSocket Gateway для health snapshot.--token <token>: токен Gateway для health snapshot.--password <password>: пароль Gateway для health snapshot.--timeout <ms>: тайм-аут snapshot status/health (типово3000).--no-stability-bundle: пропустити пошук збереженого stability bundle.--json: вивести записаний шлях, розмір і маніфест у форматі JSON.
gateway status
gateway status показує службу Gateway (launchd/systemd/schtasks) разом з необов’язковою перевіркою можливостей підключення/автентифікації.
--url <url>: додати явну ціль probe. Налаштований remote + localhost усе одно перевіряються.--token <token>: автентифікація токеном для probe.--password <password>: автентифікація паролем для probe.--timeout <ms>: тайм-аут probe (типово10000).--no-probe: пропустити перевірку підключення (лише перегляд служби).--deep: також сканувати служби на системному рівні.--require-rpc: підвищити типову перевірку підключення до read probe і завершуватися з ненульовим кодом, якщо цей read probe не вдається. Не можна поєднувати з--no-probe.
gateway statusзалишається доступним для diagnostics, навіть коли локальна конфігурація CLI відсутня або некоректна.- Типовий
gateway statusпідтверджує стан служби, WebSocket-підключення та можливість автентифікації, видиму під час handshake. Він не підтверджує операції читання/запису/адміністрування. gateway statusза можливості визначає налаштовані auth SecretRefs для автентифікації probe.- Якщо обов’язковий auth SecretRef не визначається в цьому шляху команди,
gateway status --jsonповідомляєrpc.authWarning, коли перевірка підключення/автентифікації probe завершується невдачею; явно передайте--token/--passwordабо спочатку визначте джерело секрету. - Якщо перевірка probe успішна, попередження про невизначені auth-ref приглушуються, щоб уникнути хибнопозитивних результатів.
- Використовуйте
--require-rpcу скриптах і автоматизації, коли наявності служби, що слухає, недостатньо й потрібно, щоб RPC-виклики з правами читання теж були справними. --deepдодає найкращу з можливих перевірку додаткових встановлень launchd/systemd/schtasks. Коли виявляються кілька служб, схожих на gateway, у виводі для людини друкуються підказки щодо очищення й попередження про те, що більшість інсталяцій мають запускати одну gateway на машину.- Вивід для людини містить визначений шлях до файлового логу, а також snapshot шляхів/коректності конфігурації CLI і служби, щоб допомогти діагностувати розбіжності профілю або каталогу стану.
- У встановленнях Linux systemd перевірки розбіжності автентифікації служби читають обидва значення
Environment=іEnvironmentFile=із unit-файла (включно з%h, шляхами в лапках, кількома файлами та необов’язковими файлами з-). - Перевірки розбіжностей визначають SecretRef
gateway.auth.tokenза допомогою об’єднаного середовища виконання (спочатку середовище команди служби, потім резервне середовище процесу). - Якщо автентифікація токеном фактично не активна (явний
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
Reachable: yesозначає, що принаймні одна ціль прийняла WebSocket-підключення.Capability: read-only|write-capable|admin-capable|pairing-pending|connect-onlyповідомляє, що probe зміг підтвердити щодо автентифікації. Це окремо від доступності.Read probe: okозначає, що detail RPC-виклики з правами читання (health/status/system-presence/config.get) також були успішні.Read probe: limited - missing scope: operator.readозначає, що підключення успішне, але RPC з правами читання обмежений. Це повідомляється як погіршена доступність, а не як повна невдача.- Код виходу є ненульовим лише тоді, коли жодна перевірена ціль не є доступною.
--json):
- Верхній рівень:
ok: доступна принаймні одна ціль.degraded: принаймні одна ціль мала RPC деталей з обмеженою областю доступу.capability: найкраща можливість, виявлена серед доступних цілей (read_only,write_capable,admin_capable,pairing_pending,connected_no_operator_scopeабоunknown).primaryTargetId: найкраща ціль, яку слід вважати активним переможцем, у такому порядку: явний URL, SSH-тунель, налаштований remote, потім local loopback.warnings[]: записи попереджень із найкращими доступними даними зcode,messageі необов’язковимиtargetIds.network: підказки URL для local loopback/tailnet, виведені з поточної конфігурації та мережі хоста.discovery.timeoutMsіdiscovery.count: фактичний бюджет/кількість результатів discovery, використані для цього проходу probe.
- Для кожної цілі (
targets[].connect):ok: доступність після підключення + класифікація degraded.rpcOk: повний успіх RPC деталей.scopeLimited: RPC деталей завершився невдачею через відсутню область доступу operator.
- Для кожної цілі (
targets[].auth):role: роль автентифікації, повідомлена вhello-ok, коли доступно.scopes: надані області доступу, повідомлені вhello-ok, коли доступно.capability: показана класифікація можливостей автентифікації для цієї цілі.
ssh_tunnel_failed: не вдалося налаштувати SSH-тунель; команда повернулася до прямих probe.multiple_gateways: доступною була більш ніж одна ціль; це нетипово, якщо тільки ви навмисно не запускаєте ізольовані профілі, наприклад rescue bot.auth_secretref_unresolved: не вдалося визначити налаштований auth SecretRef для цілі, що завершилася невдачею.probe_scope_limited: WebSocket-підключення успішне, але read probe був обмежений через відсутністьoperator.read.
Remote через SSH (паритет із Mac app)
Режим macOS app “Remote over SSH” використовує локальне перенаправлення порту, тож remote gateway (який може бути прив’язаний лише до loopback) стає доступним за адресоюws://127.0.0.1:<port>.
Еквівалент у CLI:
--ssh <target>:user@hostабоuser@host:port(типовий порт —22).--ssh-identity <path>: файл ідентифікації.--ssh-auto: вибрати перший виявлений хост gateway як SSH-ціль із визначеної кінцевої точки discovery (local.плюс налаштований wide-area domain, якщо він є). Підказки лише з TXT ігноруються.
gateway.remote.sshTargetgateway.remote.sshIdentity
gateway call <method>
Низькорівневий допоміжний інструмент RPC.
--params <json>: рядок JSON-об’єкта для params (типово{})--url <url>--token <token>--password <password>--timeout <ms>--expect-final--json
--paramsмає бути коректним JSON.--expect-finalголовним чином призначений для RPC у стилі агентів, які передають проміжні події потоком перед фінальним payload.
Керування службою Gateway
gateway status:--url,--token,--password,--timeout,--no-probe,--require-rpc,--deep,--jsongateway install:--port,--runtime <node|bun>,--token,--force,--jsongateway uninstall|start|stop|restart:--json
gateway installпідтримує--port,--runtime,--token,--force,--json.- Коли автентифікація токеном вимагає токен і
gateway.auth.tokenкерується через SecretRef,gateway installперевіряє, що SecretRef можна визначити, але не зберігає визначений токен у метаданих середовища служби. - Якщо автентифікація токеном вимагає токен, а налаштований SecretRef токена не визначається, встановлення завершується з безпечним блокуванням замість збереження резервного відкритого тексту.
- Для автентифікації паролем у
gateway runвіддавайте перевагуOPENCLAW_GATEWAY_PASSWORD,--password-fileабоgateway.auth.passwordна основі SecretRef замість inline--password. - У режимі виведеної автентифікації лише оболонковий
OPENCLAW_GATEWAY_PASSWORDне послаблює вимоги до токена для встановлення; під час встановлення керованої служби використовуйте сталу конфігурацію (gateway.auth.passwordабоenvконфігурації). - Якщо налаштовано і
gateway.auth.token, іgateway.auth.password, аgateway.auth.modeне задано, встановлення блокується, доки режим не буде явно встановлено. - Команди життєвого циклу приймають
--jsonдля використання у скриптах.
Виявлення gateway (Bonjour)
gateway discover сканує маяки Gateway (_openclaw-gw._tcp).
- Multicast DNS-SD:
local. - Unicast DNS-SD (Wide-Area Bonjour): виберіть домен (приклад:
openclaw.internal.) і налаштуйте split DNS + DNS-сервер; див. /gateway/bonjour
role(підказка ролі gateway)transport(підказка транспорту, наприкладgateway)gatewayPort(порт WebSocket, зазвичай18789)sshPort(необов’язково; клієнти типово використовують22для SSH-цілей, якщо його немає)tailnetDns(ім’я хоста MagicDNS, коли доступно)gatewayTls/gatewayTlsSha256(TLS увімкнено + відбиток сертифіката)cliPath(підказка remote-install, записана в wide-area zone)
gateway discover
--timeout <ms>: тайм-аут для команди (browse/resolve); типово2000.--json: машинозчитуваний вивід (також вимикає стилізацію/spinner).
- CLI сканує
local.плюс налаштований wide-area domain, коли його ввімкнено. wsUrlу JSON-виводі виводиться з визначеної кінцевої точки служби, а не з підказок лише TXT, таких якlanHostабоtailnetDns.- У
local.mDNSsshPortіcliPathтранслюються лише тоді, колиdiscovery.mdns.modeмає значенняfull. Wide-area DNS-SD усе одно записуєcliPath;sshPortтам теж залишається необов’язковим.