chore(i18n): refresh uk translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-24 06:50:38 +00:00
parent 2a0530e1f1
commit b7726a14ec
8 changed files with 1593 additions and 1546 deletions

View File

@ -1,49 +1,49 @@
---
read_when:
- Запуск headless хоста Node
- Запуск безголового хоста Node
- Сполучення вузла не на macOS для system.run
summary: Довідка CLI для `openclaw node` (headless хост Node)
summary: Довідник CLI для `openclaw node` (безголовий хост Node)
title: Node
x-i18n:
generated_at: "2026-04-24T05:21:35Z"
generated_at: "2026-04-24T06:45:24Z"
model: gpt-5.4
provider: openai
source_hash: 61b16bdd0c52115bc9938a0fc975369159a4e45d743173ab4e65fce8292af51e
source_hash: 9f2bd6d61ee87d36f7691207d03a91c914e6460549256e0cc6ea7bebfa713923
source_path: cli/node.md
workflow: 15
---
# `openclaw node`
Запустіть **headless хост Node**, який підключається до WebSocket Gateway і надає
Запускає **безголовий хост Node**, який підключається до WebSocket Gateway і надає
`system.run` / `system.which` на цій машині.
## Навіщо використовувати хост Node?
Використовуйте хост Node, коли хочете, щоб агенти **запускали команди на інших машинах** у вашій
мережі без встановлення там повноцінного допоміжного застосунку для macOS.
мережі без встановлення повноцінного супутнього застосунку macOS на цих машинах.
Поширені сценарії використання:
- Запуск команд на віддалених Linux/Windows машинах (сервери збірки, лабораторні машини, NAS).
- Зберігайте **ізоляцію** exec на Gateway, але делегуйте дозволені запуски іншим хостам.
- Надайте легку, headless ціль виконання для вузлів автоматизації або CI.
- Зберігайте **ізоляцію** exec на Gateway, але делегуйте схвалені запуски іншим хостам.
- Надайте легку, безголову ціль виконання для вузлів автоматизації або CI.
Виконання все одно захищене **погодженнями exec** та списками дозволів для кожного агента на
хості Node, тож ви можете зберігати доступ до команд обмеженим і явним.
Виконання, як і раніше, захищене **схваленнями exec** та списками дозволів для кожного агента на
хості Node, тож ви можете зберігати доступ до команд обмеженим і явно визначеним.
## Проксі браузера (нульова конфігурація)
Хости Node автоматично оголошують проксі браузера, якщо `browser.enabled` не
вимкнено на вузлі. Це дозволяє агенту використовувати автоматизацію браузера на цьому вузлі
без додаткового налаштування.
вимкнено на вузлі. Це дозволяє агенту використовувати автоматизацію браузера на
цьому вузлі без додаткової конфігурації.
За замовчуванням проксі надає доступ до звичайної поверхні профілю браузера вузла. Якщо ви
Типово проксі відкриває поверхню звичайного профілю браузера вузла. Якщо ви
встановите `nodeHost.browserProxy.allowProfiles`, проксі стане обмежувальним:
націлювання на профілі поза списком дозволених буде відхилено, а маршрути
створення/видалення постійних профілів буде заблоковано через проксі.
націлювання на профілі, яких немає у списку дозволених, буде відхилено, а
маршрути створення/видалення постійних профілів будуть заблоковані через проксі.
За потреби вимкніть це на вузлі:
За потреби вимкніть його на вузлі:
```json5
{
@ -55,7 +55,7 @@ x-i18n:
}
```
## Запуск (у передньому плані)
## Запуск (на передньому плані)
```bash
openclaw node run --host <gateway-host> --port 18789
@ -65,30 +65,33 @@ openclaw node run --host <gateway-host> --port 18789
- `--host <host>`: хост WebSocket Gateway (типово: `127.0.0.1`)
- `--port <port>`: порт WebSocket Gateway (типово: `18789`)
- `--tls`: використовувати TLS для підключення до gateway
- `--tls-fingerprint <sha256>`: очікуваний відбиток TLS-сертифіката (sha256)
- `--node-id <id>`: перевизначити id вузла (очищає токен сполучення)
- `--tls`: використовувати TLS для з’єднання з gateway
- `--tls-fingerprint <sha256>`: очікуваний відбиток сертифіката TLS (sha256)
- `--node-id <id>`: перевизначити ідентифікатор вузла (очищає токен сполучення)
- `--display-name <name>`: перевизначити відображувану назву вузла
## Автентифікація Gateway для хоста Node
`openclaw node run` і `openclaw node install` визначають автентифікацію gateway з config/env (без прапорців `--token`/`--password` у командах node):
- `OPENCLAW_GATEWAY_TOKEN` / `OPENCLAW_GATEWAY_PASSWORD` перевіряються першими.
- Потім використовується резервне значення з локальної конфігурації: `gateway.auth.token` / `gateway.auth.password`.
- Спочатку перевіряються `OPENCLAW_GATEWAY_TOKEN` / `OPENCLAW_GATEWAY_PASSWORD`.
- Далі використовується локальний резервний варіант із config: `gateway.auth.token` / `gateway.auth.password`.
- У локальному режимі хост Node навмисно не успадковує `gateway.remote.token` / `gateway.remote.password`.
- Якщо `gateway.auth.token` / `gateway.auth.password` явно налаштовано через SecretRef і їх не вдається визначити, визначення автентифікації вузла завершується із закритою відмовою (без маскування резервним віддаленим варіантом).
- У `gateway.mode=remote` поля віддаленого клієнта (`gateway.remote.token` / `gateway.remote.password`) також можуть використовуватися згідно з правилами пріоритету для віддаленого режиму.
- Якщо `gateway.auth.token` / `gateway.auth.password` явно налаштовано через SecretRef і вони не розв’язані, визначення автентифікації вузла завершується в закритому режимі (без маскування резервним віддаленим варіантом).
- У `gateway.mode=remote` поля віддаленого клієнта (`gateway.remote.token` / `gateway.remote.password`) також можуть використовуватися відповідно до правил пріоритету віддаленого режиму.
- Визначення автентифікації хоста Node враховує лише змінні середовища `OPENCLAW_GATEWAY_*`.
Для вузла, що підключається до не-loopback `ws://` Gateway у довіреній приватній
мережі, встановіть `OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1`. Без цього запуск вузла
завершиться із закритою відмовою і запропонує вам використовувати `wss://`, SSH-тунель або Tailscale.
`openclaw node install` зберігає цю явну згоду в сервісі вузла під наглядом.
Для вузла, що підключається до Gateway `ws://` не на loopback-адресі в довіреній приватній
мережі, установіть `OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1`. Без цього запуск
вузла завершується в закритому режимі та пропонує використовувати `wss://`,
тунель SSH або Tailscale.
Це opt-in через середовище процесу, а не ключ конфігурації `openclaw.json`.
`openclaw node install` зберігає його в керованому сервісі вузла, якщо він
присутній у середовищі команди встановлення.
## Сервіс (у фоновому режимі)
Встановіть headless хост Node як користувацький сервіс.
Встановіть безголовий хост Node як сервіс користувача.
```bash
openclaw node install --host <gateway-host> --port 18789
@ -98,11 +101,11 @@ openclaw node install --host <gateway-host> --port 18789
- `--host <host>`: хост WebSocket Gateway (типово: `127.0.0.1`)
- `--port <port>`: порт WebSocket Gateway (типово: `18789`)
- `--tls`: використовувати TLS для підключення до gateway
- `--tls-fingerprint <sha256>`: очікуваний відбиток TLS-сертифіката (sha256)
- `--node-id <id>`: перевизначити id вузла (очищає токен сполучення)
- `--tls`: використовувати TLS для з’єднання з gateway
- `--tls-fingerprint <sha256>`: очікуваний відбиток сертифіката TLS (sha256)
- `--node-id <id>`: перевизначити ідентифікатор вузла (очищає токен сполучення)
- `--display-name <name>`: перевизначити відображувану назву вузла
- `--runtime <runtime>`: runtime сервісу (`node` або `bun`)
- `--runtime <runtime>`: середовище виконання сервісу (`node` або `bun`)
- `--force`: перевстановити/перезаписати, якщо вже встановлено
Керування сервісом:
@ -114,14 +117,14 @@ openclaw node restart
openclaw node uninstall
```
Використовуйте `openclaw node run` для хоста Node у передньому плані (без сервісу).
Використовуйте `openclaw node run` для запуску хоста Node на передньому плані (без сервісу).
Команди сервісу приймають `--json` для машиночитаного виводу.
## Сполучення
Під час першого підключення на Gateway створюється запит на сполучення пристрою, що очікує підтвердження (`role: node`).
Підтвердьте його за допомогою:
Перше з’єднання створює очікуваний запит на сполучення пристрою (`role: node`) на Gateway.
Схваліть його за допомогою:
```bash
openclaw devices list
@ -129,26 +132,27 @@ openclaw devices approve <requestId>
```
Якщо вузол повторно намагається виконати сполучення зі зміненими даними автентифікації (role/scopes/public key),
попередній запит, що очікує підтвердження, замінюється, і створюється новий `requestId`.
Перед підтвердженням знову виконайте `openclaw devices list`.
попередній очікуваний запит замінюється, і створюється новий `requestId`.
Перед схваленням знову виконайте `openclaw devices list`.
Хост Node зберігає id вузла, токен, відображувану назву та інформацію про підключення до gateway у
Хост Node зберігає свій ідентифікатор вузла, токен, відображувану назву та інформацію про з’єднання з gateway у
`~/.openclaw/node.json`.
## Погодження exec
## Схвалення exec
`system.run` захищено локальними погодженнями exec:
`system.run` контролюється локальними схваленнями exec:
- `~/.openclaw/exec-approvals.json`
- [Погодження exec](/uk/tools/exec-approvals)
- [Схвалення exec](/uk/tools/exec-approvals)
- `openclaw approvals --node <id|name|ip>` (редагування з Gateway)
Для схваленого асинхронного exec вузла OpenClaw готує канонічний `systemRunPlan`
перед запитом підтвердження. Подальше переспрямування схваленого `system.run` повторно використовує цей збережений
план, тому редагування полів command/cwd/session після створення запиту
на погодження буде відхилено замість зміни того, що виконує вузол.
Для схваленого асинхронного exec на вузлі OpenClaw готує канонічний `systemRunPlan`
перед запитом підтвердження. Пізніше переспрямування схваленого `system.run`
повторно використовує цей збережений план, тож зміни до полів command/cwd/session
після створення запиту на схвалення будуть відхилені замість зміни того, що
виконує вузол.
## Пов’язане
- [Довідка CLI](/uk/cli)
- [Довідник CLI](/uk/cli)
- [Вузли](/uk/nodes)

View File

@ -1,13 +1,13 @@
---
read_when:
- Вам потрібне покрокове налаштування Gateway, робочого простору, автентифікації, каналів і Skills
summary: Довідка CLI для `openclaw onboard` (інтерактивний онбординг)
- Ви хочете покрокове налаштування для Gateway, робочого простору, автентифікації, каналів і Skills
summary: Довідник CLI для `openclaw onboard` (інтерактивне онбординг)
title: Онбординг
x-i18n:
generated_at: "2026-04-23T20:48:00Z"
generated_at: "2026-04-24T06:45:23Z"
model: gpt-5.4
provider: openai
source_hash: ab92ff5651b7db18850558cbb47527bf0486f278c8aed0929eaeff0017b6c280
source_hash: c1959ad7014b891230e497a2e0ab494ba316090c81629f25b8147614b694ead5
source_path: cli/onboard.md
workflow: 15
---
@ -18,11 +18,11 @@ x-i18n:
## Пов’язані посібники
- Центр CLI-онбордингу: [Onboarding (CLI)](/uk/start/wizard)
- Огляд онбордингу: [Onboarding Overview](/uk/start/onboarding-overview)
- Довідка CLI-онбордингу: [CLI Setup Reference](/uk/start/wizard-cli-reference)
- Автоматизація CLI: [CLI Automation](/uk/start/wizard-cli-automation)
- Онбординг macOS: [Onboarding (macOS App)](/uk/start/onboarding)
- Центр онбордингу CLI: [Онбординг (CLI)](/uk/start/wizard)
- Огляд онбордингу: [Огляд онбордингу](/uk/start/onboarding-overview)
- Довідник CLI онбордингу: [Довідник з налаштування CLI](/uk/start/wizard-cli-reference)
- Автоматизація CLI: [Автоматизація CLI](/uk/start/wizard-cli-automation)
- Онбординг macOS: [Онбординг (додаток macOS)](/uk/start/onboarding)
## Приклади
@ -33,10 +33,12 @@ openclaw onboard --flow manual
openclaw onboard --mode remote --remote-url wss://gateway-host:18789
```
Для цілей `ws://` у приватній мережі без шифрування (лише для довірених мереж) установіть
`OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1` у змінних середовища процесу онбордингу.
Для цілей приватної мережі `ws://` у відкритому тексті (лише для довірених мереж) встановіть
`OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1` у середовищі процесу онбордингу.
Еквівалента `openclaw.json` для цього аварійного обходу
клієнтського транспорту не існує.
Неінтерактивний custom provider:
Некерований користувачем custom provider:
```bash
openclaw onboard --non-interactive \
@ -48,9 +50,9 @@ openclaw onboard --non-interactive \
--custom-compatibility openai
```
`--custom-api-key` необов’язковий у неінтерактивному режимі. Якщо його не вказано, онбординг перевіряє `CUSTOM_API_KEY`.
`--custom-api-key` є необов’язковим у неінтерактивному режимі. Якщо його не вказано, онбординг перевіряє `CUSTOM_API_KEY`.
LM Studio також підтримує специфічний для provider-а прапорець ключа в неінтерактивному режимі:
LM Studio також підтримує прапорець ключа, специфічний для провайдера, у неінтерактивному режимі:
```bash
openclaw onboard --non-interactive \
@ -71,9 +73,9 @@ openclaw onboard --non-interactive \
--accept-risk
```
`--custom-base-url` типово має значення `http://127.0.0.1:11434`. `--custom-model-id` необов’язковий; якщо його не вказано, онбординг використовує типові значення, запропоновані Ollama. Cloud model id, як-от `kimi-k2.5:cloud`, тут також працюють.
Для `--custom-base-url` типовим значенням є `http://127.0.0.1:11434`. `--custom-model-id` є необов’язковим; якщо його не вказано, онбординг використовує рекомендовані Ollama значення за замовчуванням. Хмарні ідентифікатори моделей, як-от `kimi-k2.5:cloud`, тут також працюють.
Зберігайте ключі provider-а як ref, а не як відкритий текст:
Зберігайте ключі провайдера як посилання, а не як відкритий текст:
```bash
openclaw onboard --non-interactive \
@ -82,26 +84,26 @@ openclaw onboard --non-interactive \
--accept-risk
```
З `--secret-input-mode ref` онбординг записує refs, прив’язані до змінних середовища, замість значень ключів відкритим текстом.
Для provider-ів на основі auth-profile це записує записи `keyRef`; для custom provider-ів це записує `models.providers.<id>.apiKey` як env ref (наприклад `{ source: "env", provider: "default", id: "CUSTOM_API_KEY" }`).
З `--secret-input-mode ref` онбординг записує посилання, що спираються на змінні середовища, замість значень ключів у відкритому тексті.
Для провайдерів, що спираються на auth-profile, це записує записи `keyRef`; для custom providers це записує `models.providers.<id>.apiKey` як env ref (наприклад, `{ source: "env", provider: "default", id: "CUSTOM_API_KEY" }`).
Контракт неінтерактивного режиму `ref`:
- Установіть змінну середовища provider-а в середовищі процесу онбордингу (наприклад, `OPENAI_API_KEY`).
- Не передавайте вбудовані прапорці ключів (наприклад, `--openai-api-key`), якщо цю змінну середовища також не встановлено.
- Якщо передано вбудований прапорець ключа без обов’язкової змінної середовища, онбординг одразу завершується з помилкою та підказкою.
- Встановіть env var провайдера в середовищі процесу онбордингу (наприклад, `OPENAI_API_KEY`).
- Не передавайте вбудовані прапорці ключів (наприклад, `--openai-api-key`), якщо цю env var також не встановлено.
- Якщо прапорець вбудованого ключа передано без обов’язкової env var, онбординг негайно завершується з підказками.
Параметри токена Gateway у неінтерактивному режимі:
- `--gateway-auth token --gateway-token <token>` зберігає токен у відкритому тексті.
- `--gateway-auth token --gateway-token-ref-env <name>` зберігає `gateway.auth.token` як env SecretRef.
- `--gateway-token` і `--gateway-token-ref-env` взаємовиключні.
- `--gateway-token-ref-env` вимагає непорожньої змінної середовища в середовищі процесу онбордингу.
- З `--install-daemon`, коли автентифікація токеном вимагає токен, токени Gateway, керовані через SecretRef, перевіряються, але не зберігаються як розв’язані значення відкритим текстом у метаданих середовища сервісу supervisor.
- З `--install-daemon`, якщо режим токена вимагає токен, а налаштований SecretRef токена не розв’язується, онбординг завершується в закритий спосіб із підказками щодо виправлення.
- З `--install-daemon`, якщо налаштовано і `gateway.auth.token`, і `gateway.auth.password`, а `gateway.auth.mode` не встановлено, онбординг блокує встановлення, доки режим не буде явно задано.
- Локальний онбординг записує `gateway.mode="local"` у конфігурацію. Якщо в подальшому файлі конфігурації `gateway.mode` відсутній, сприймайте це як пошкодження конфігурації або неповне ручне редагування, а не як дійсне скорочення для локального режиму.
- `--allow-unconfigured`окремий аварійний механізм runtime Gateway. Він не означає, що онбординг може пропустити `gateway.mode`.
- `--gateway-token` і `--gateway-token-ref-env` є взаємовиключними.
- `--gateway-token-ref-env` потребує непорожню env var у середовищі процесу онбордингу.
- З `--install-daemon`, коли автентифікація токеном потребує токена, токени Gateway, керовані через SecretRef, проходять перевірку, але не зберігаються як розгорнутий відкритий текст у метаданих середовища сервісу supervisor.
- З `--install-daemon`, якщо режим токена потребує токена, а налаштований SecretRef токена не розв’язано, онбординг завершується за принципом fail-closed із вказівками щодо виправлення.
- З `--install-daemon`, якщо налаштовано і `gateway.auth.token`, і `gateway.auth.password`, а `gateway.auth.mode` не задано, онбординг блокує встановлення, доки режим не буде явно задано.
- Локальний онбординг записує `gateway.mode="local"` у конфігурацію. Якщо в подальшому у файлі конфігурації бракує `gateway.mode`, розглядайте це як пошкодження конфігурації або неповне ручне редагування, а не як коректне скорочення для локального режиму.
- `--allow-unconfigured`це окремий аварійний обхід для середовища виконання Gateway. Це не означає, що онбординг може пропустити `gateway.mode`.
Приклад:
@ -115,29 +117,29 @@ openclaw onboard --non-interactive \
--accept-risk
```
Стан здоров’я локального Gateway у неінтерактивному режимі:
Стан локального Gateway у неінтерактивному режимі:
- Якщо не передано `--skip-health`, онбординг чекає доступного локального gateway перед успішним завершенням.
- `--install-daemon` спочатку запускає керований шлях встановлення gateway. Без нього у вас уже має працювати локальний gateway, наприклад через `openclaw gateway run`.
- Якщо вам потрібні лише записи конфігурації/робочого простору/bootstrap в автоматизації, використовуйте `--skip-health`.
- У native Windows `--install-daemon` спочатку намагається використати Scheduled Tasks і переходить до елемента автозапуску в Startup-folder для поточного користувача, якщо створення завдання заборонено.
- Якщо ви не передасте `--skip-health`, онбординг чекає на досяжний локальний Gateway, перш ніж успішно завершитися.
- `--install-daemon` спочатку запускає керований шлях встановлення Gateway. Без нього у вас уже має працювати локальний Gateway, наприклад `openclaw gateway run`.
- Якщо вам в автоматизації потрібні лише записи конфігурації/робочого простору/bootstrap, використовуйте `--skip-health`.
- У native Windows `--install-daemon` спочатку намагається використати Scheduled Tasks, а якщо створення завдання заборонене — переходить до елемента входу користувача у теці Startup.
Поведінка інтерактивного онбордингу в режимі reference:
Поведінка інтерактивного онбордингу з режимом посилань:
- Коли з’явиться запит, виберіть **Use secret reference**.
- Коли буде запит, виберіть **Use secret reference**.
- Потім виберіть один із варіантів:
- Environment variable
- Configured secret provider (`file` або `exec`)
- Перед збереженням ref онбординг виконує швидку попередню перевірку.
- Якщо перевірка не пройде, онбординг покаже помилку й дозволить повторити спробу.
- Змінна середовища
- Налаштований провайдер секретів (`file` або `exec`)
- Перед збереженням посилання онбординг виконує швидку попередню перевірку.
- Якщо перевірка не проходить, онбординг показує помилку й дає змогу повторити спробу.
Неінтерактивний вибір endpoint для Z.AI:
Вибір endpoint для Z.AI у неінтерактивному режимі:
Примітка: `--auth-choice zai-api-key` тепер автоматично визначає найкращий endpoint Z.AI для вашого ключа (надає перевагу загальному API з `zai/glm-5.1`).
Якщо вам потрібні саме endpoints GLM Coding Plan, виберіть `zai-coding-global` або `zai-coding-cn`.
Якщо вам конкретно потрібні endpoint плану GLM Coding, виберіть `zai-coding-global` або `zai-coding-cn`.
```bash
# Вибір endpoint без запитів
# Вибір endpoint без запиту
openclaw onboard --non-interactive \
--auth-choice zai-coding-global \
--zai-api-key "$ZAI_API_KEY"
@ -156,27 +158,24 @@ openclaw onboard --non-interactive \
--mistral-api-key "$MISTRAL_API_KEY"
```
Примітки щодо flow:
Примітки щодо потоків:
- `quickstart`: мінімум запитань, автоматично генерує токен gateway.
- `manual`: повний набір запитань для port/bind/auth (псевдонім `advanced`).
- Коли вибір автентифікації передбачає бажаний provider, онбординг попередньо фільтрує
вибір типових моделей і allowlist до цього provider-а. Для Volcengine і
BytePlus це також охоплює варіанти coding-plan
- `quickstart`: мінімум запитів, автоматично генерує токен Gateway.
- `manual`: повні запити для порту/bind/auth (псевдонім `advanced`).
- Коли вибір автентифікації передбачає пріоритетного провайдера, онбординг попередньо фільтрує засоби вибору default-model і allowlist за цим провайдером. Для Volcengine і BytePlus це також охоплює варіанти coding-plan
(`volcengine-plan/*`, `byteplus-plan/*`).
- Якщо фільтр бажаного provider-а ще не дає жодної завантаженої моделі,
онбординг повертається до нефільтрованого каталогу замість того, щоб залишити вибір порожнім.
- На кроці web-пошуку деякі providers можуть викликати додаткові запити, специфічні для provider-а:
- **Grok** може запропонувати необов’язкове налаштування `x_search` із тим самим `XAI_API_KEY`
- Якщо фільтр пріоритетного провайдера поки не дає жодної завантаженої моделі, онбординг повертається до нефільтрованого каталогу, а не залишає список вибору порожнім.
- На етапі web-search деякі провайдери можуть запускати додаткові запити, специфічні для провайдера:
- **Grok** може запропонувати необов’язкове налаштування `x_search` з тим самим `XAI_API_KEY`
і вибором моделі `x_search`.
- **Kimi** може запитати регіон API Moonshot (`api.moonshot.ai` чи
`api.moonshot.cn`) і типову модель web-пошуку Kimi.
- Поведінка області DM під час локального онбордингу: [CLI Setup Reference](/uk/start/wizard-cli-reference#outputs-and-internals).
- **Kimi** може запитати регіон Moonshot API (`api.moonshot.ai` чи
`api.moonshot.cn`) і типову модель web-search Kimi.
- Поведінка області DM у локальному онбордингу: [Довідник з налаштування CLI](/uk/start/wizard-cli-reference#outputs-and-internals).
- Найшвидший перший чат: `openclaw dashboard` (Control UI, без налаштування каналів).
- Custom Provider: підключайте будь-який endpoint, сумісний з OpenAI або Anthropic,
включно з хостованими provider-ами, яких немає у списку. Використовуйте Unknown для автовизначення.
включно з розміщеними провайдерами, яких немає у списку. Використовуйте Unknown для автовизначення.
## Поширені наступні команди
## Поширені подальші команди
```bash
openclaw configure
@ -184,5 +183,5 @@ openclaw agents add <name>
```
<Note>
`--json` не означає неінтерактивний режим. Для скриптів використовуйте `--non-interactive`.
`--json` не означає неінтерактивний режим. Для сценаріїв використовуйте `--non-interactive`.
</Note>

View File

@ -1,62 +1,62 @@
---
read_when:
- Вам потрібні точні семантики полів конфігурації або типові значення
- Вам потрібні точні семантики полів конфігурації або значення за замовчуванням
- Ви перевіряєте блоки конфігурації каналу, моделі, Gateway або інструмента
summary: Довідник конфігурації Gateway для основних ключів OpenClaw, типових значень і посилань на окремі довідники підсистем
title: Довідник конфігурації
summary: Довідник з конфігурації Gateway для основних ключів OpenClaw, значень за замовчуванням і посилань на окремі довідники підсистем
title: Довідник з конфігурації
x-i18n:
generated_at: "2026-04-24T03:44:24Z"
generated_at: "2026-04-24T06:45:27Z"
model: gpt-5.4
provider: openai
source_hash: 6dc3b920ada38951086908713e9347141d8b11faa007df23a90a2532ac6f3bb2
source_hash: dc0d9feea2f2707f267d50ec83aa664ef503db8f9132762345cc80305f8bef73
source_path: gateway/configuration-reference.md
workflow: 15
---
Основний довідник конфігурації для `~/.openclaw/openclaw.json`. Для огляду, орієнтованого на завдання, див. [Конфігурація](/uk/gateway/configuration).
Основний довідник з конфігурації для `~/.openclaw/openclaw.json`. Для огляду, орієнтованого на завдання, див. [Configuration](/uk/gateway/configuration).
Ця сторінка охоплює основні поверхні конфігурації OpenClaw і містить посилання назовні, коли підсистема має власний, глибший довідник. Вона **не** намагається вбудувати на одній сторінці кожен каталог команд, що належить каналу/Plugin, або кожен глибокий параметр пам’яті/QMD.
Ця сторінка охоплює основні поверхні конфігурації OpenClaw і дає посилання назовні, коли підсистема має власний докладніший довідник. Вона **не** намагається вбудувати на одній сторінці кожен каталог команд, що належить каналу/Plugin, або кожен глибокий параметр пам’яті/QMD.
Джерело істини в коді:
- `openclaw config schema` виводить актуальну JSON Schema, яка використовується для валідації й UI керування, з об’єднаними метаданими bundled/Plugin/channel, якщо вони доступні
- `config.schema.lookup` повертає один вузол схеми з областю шляху для інструментів деталізації
- `pnpm config:docs:check` / `pnpm config:docs:gen` перевіряють хеш базової лінії документації конфігурації щодо поточної поверхні схеми
- `openclaw config schema` виводить актуальну JSON Schema, що використовується для валідації та інтерфейсу Control UI, з об’єднаними метаданими bundled/Plugin/channel, коли вони доступні
- `config.schema.lookup` повертає один вузол схеми з прив’язкою до шляху для інструментів деталізації
- `pnpm config:docs:check` / `pnpm config:docs:gen` перевіряють базовий хеш документації конфігурації щодо поточної поверхні схеми
Окремі глибокі довідники:
Окремі докладні довідники:
- [Довідник конфігурації пам’яті](/uk/reference/memory-config) для `agents.defaults.memorySearch.*`, `memory.qmd.*`, `memory.citations` і конфігурації dreaming у `plugins.entries.memory-core.config.dreaming`
- [Довідник з конфігурації пам’яті](/uk/reference/memory-config) для `agents.defaults.memorySearch.*`, `memory.qmd.*`, `memory.citations` і конфігурації Dreaming у `plugins.entries.memory-core.config.dreaming`
- [Слеш-команди](/uk/tools/slash-commands) для поточного вбудованого + bundled каталогу команд
- сторінки каналу/Plugin-власника для поверхонь команд, специфічних для каналу
- сторінки відповідних каналів/Plugin для поверхонь команд, специфічних для каналів
Формат конфігурації — **JSON5** (дозволені коментарі + кінцеві коми). Усі поля необов’язкові — OpenClaw використовує безпечні типові значення, якщо їх пропущено.
Формат конфігурації — **JSON5** (дозволені коментарі й кінцеві коми). Усі поля необов’язкові — OpenClaw використовує безпечні значення за замовчуванням, якщо їх не вказано.
---
## Канали
Ключі конфігурації для кожного каналу перенесено на окрему сторінку — див.
[Конфігурація — канали](/uk/gateway/config-channels) для `channels.*`,
включно зі Slack, Discord, Telegram, WhatsApp, Matrix, iMessage та іншими
bundled каналами (автентифікація, контроль доступу, багатообліковість, обмеження за згадками).
[Configuration — channels](/uk/gateway/config-channels) для `channels.*`,
зокрема Slack, Discord, Telegram, WhatsApp, Matrix, iMessage та інших
bundled каналів (автентифікація, керування доступом, кілька облікових записів, обмеження згадок).
## Типові значення агента, багатоагентність, сесії та повідомлення
## Типові значення агента, multi-agent, сесії та повідомлення
Перенесено на окрему сторінку — див.
[Конфігурація — агенти](/uk/gateway/config-agents) для:
[Configuration — agents](/uk/gateway/config-agents) для:
- `agents.defaults.*` (робочий простір, модель, thinking, Heartbeat, пам’ять, медіа, Skills, sandbox)
- `multiAgent.*` (багатоагентна маршрутизація та bindings)
- `session.*` (життєвий цикл сесії, Compaction, обрізання)
- `agents.defaults.*` (робоча область, модель, thinking, heartbeat, пам’ять, медіа, skills, sandbox)
- `multiAgent.*` (маршрутизація multi-agent і прив’язки)
- `session.*` (життєвий цикл сесії, Compaction, очищення)
- `messages.*` (доставка повідомлень, TTS, рендеринг markdown)
- `talk.*` (режим Talk)
- `talk.silenceTimeoutMs`: якщо не задано, Talk зберігає типове для платформи вікно паузи перед надсиланням транскрипту (`700 ms на macOS і Android, 900 ms на iOS`)
## Інструменти та користувацькі провайдери
## Інструменти та власні провайдери
Політика інструментів, експериментальні перемикачі, конфігурація інструментів із підтримкою провайдерів і налаштування
користувацьких провайдерів / base-URL перенесені на окрему сторінку — див.
[Конфігурація — інструменти та користувацькі провайдери](/uk/gateway/config-tools).
Політика інструментів, експериментальні перемикачі, конфігурація інструментів на основі провайдерів і налаштування власних
провайдерів / base-URL перенесено на окрему сторінку — див.
[Configuration — tools and custom providers](/uk/gateway/config-tools).
## Skills
@ -83,14 +83,14 @@ bundled каналами (автентифікація, контроль дос
}
```
- `allowBundled`: необов’язковий allowlist лише для bundled Skills (керовані/workspace Skills не зачіпаються).
- `load.extraDirs`: додаткові спільні корені Skills (найнижчий пріоритет).
- `install.preferBrew`: якщо true, надавати перевагу інсталяторам Homebrew, коли `brew`
- `allowBundled`: необов’язковий список дозволених лише для bundled skills (керовані/workspace skills не зачіпаються).
- `load.extraDirs`: додаткові спільні кореневі каталоги skills (найнижчий пріоритет).
- `install.preferBrew`: якщо `true`, віддавати перевагу інсталяторам Homebrew, коли `brew`
доступний, перш ніж переходити до інших типів інсталяторів.
- `install.nodeManager`: пріоритет node-інсталятора для специфікацій `metadata.openclaw.install`
- `install.nodeManager`: пріоритетний менеджер Node для специфікацій `metadata.openclaw.install`
(`npm` | `pnpm` | `yarn` | `bun`).
- `entries.<skillKey>.enabled: false` вимикає Skill, навіть якщо він bundled/встановлений.
- `entries.<skillKey>.apiKey`: зручне поле для Skills, які оголошують основну env-змінну (рядок відкритим текстом або об’єкт SecretRef).
- `entries.<skillKey>.enabled: false` вимикає skill, навіть якщо він bundled/встановлений.
- `entries.<skillKey>.apiKey`: зручне поле для skills, які оголошують основну змінну середовища (простий текстовий рядок або об’єкт SecretRef).
---
@ -119,40 +119,40 @@ bundled каналами (автентифікація, контроль дос
```
- Завантажуються з `~/.openclaw/extensions`, `<workspace>/.openclaw/extensions`, а також `plugins.load.paths`.
- Виявлення приймає нативні Plugins OpenClaw, а також сумісні пакети Codex і Claude, включно з пакетами Claude типового макета без маніфесту.
- Виявлення підтримує нативні Plugins OpenClaw, а також сумісні пакети Codex і Claude, включно з пакетами Claude стандартного макета без manifest.
- **Зміни конфігурації потребують перезапуску Gateway.**
- `allow`: необов’язковий allowlist (завантажуються лише перелічені Plugins). `deny` має пріоритет.
- `plugins.entries.<id>.apiKey`: зручне поле API-ключа на рівні Plugin (коли підтримується Plugin).
- `plugins.entries.<id>.env`: карта env-змінних у межах Plugin.
- `plugins.entries.<id>.hooks.allowPromptInjection`: коли `false`, ядро блокує `before_prompt_build` та ігнорує поля legacy `before_agent_start`, що змінюють prompt, зберігаючи legacy `modelOverride` і `providerOverride`. Застосовується до нативних hooks Plugin і підтримуваних каталогів hooks, наданих пакетом.
- `plugins.entries.<id>.subagent.allowModelOverride`: явно довіряти цьому Plugin запитувати перевизначення `provider` і `model` для окремих запусків фонових субагентів.
- `plugins.entries.<id>.subagent.allowedModels`: необов’язковий allowlist канонічних цілей `provider/model` для довірених перевизначень субагента. Використовуйте `"*"`, лише якщо навмисно хочете дозволити будь-яку модель.
- `plugins.entries.<id>.config`: об’єкт конфігурації, визначений Plugin (перевіряється за схемою нативного Plugin OpenClaw, якщо вона доступна).
- `plugins.entries.firecrawl.config.webFetch`: параметри провайдера web-fetch Firecrawl.
- `apiKey`: API-ключ Firecrawl (приймає SecretRef). Використовує резервне значення з `plugins.entries.firecrawl.config.webSearch.apiKey`, legacy `tools.web.fetch.firecrawl.apiKey` або env-змінної `FIRECRAWL_API_KEY`.
- `baseUrl`: базова URL-адреса API Firecrawl (типово: `https://api.firecrawl.dev`).
- `onlyMainContent`: витягувати лише основний вміст зі сторінок (типово: `true`).
- `allow`: необов’язковий список дозволених (завантажуються лише перелічені Plugins). `deny` має пріоритет.
- `plugins.entries.<id>.apiKey`: зручне поле API-ключа на рівні Plugin (коли Plugin його підтримує).
- `plugins.entries.<id>.env`: мапа змінних середовища в межах Plugin.
- `plugins.entries.<id>.hooks.allowPromptInjection`: коли `false`, ядро блокує `before_prompt_build` і ігнорує поля, що змінюють prompt, із застарілого `before_agent_start`, водночас зберігаючи застарілі `modelOverride` і `providerOverride`. Застосовується до нативних хуків Plugin і підтримуваних каталогів хуків, що надаються пакетами.
- `plugins.entries.<id>.subagent.allowModelOverride`: явно довіряти цьому Plugin запитувати перевизначення `provider` і `model` для кожного запуску фонових subagent.
- `plugins.entries.<id>.subagent.allowedModels`: необов’язковий список дозволених канонічних цілей `provider/model` для довірених перевизначень subagent. Використовуйте `"*"`, лише якщо навмисно хочете дозволити будь-яку модель.
- `plugins.entries.<id>.config`: об’єкт конфігурації, визначений Plugin (валідується за схемою нативного Plugin OpenClaw, якщо вона доступна).
- `plugins.entries.firecrawl.config.webFetch`: налаштування провайдера web-fetch Firecrawl.
- `apiKey`: API-ключ Firecrawl (підтримує SecretRef). Використовує як резервне значення `plugins.entries.firecrawl.config.webSearch.apiKey`, застаріле `tools.web.fetch.firecrawl.apiKey` або змінну середовища `FIRECRAWL_API_KEY`.
- `baseUrl`: базовий URL API Firecrawl (типово: `https://api.firecrawl.dev`).
- `onlyMainContent`: витягувати лише основний вміст сторінок (типово: `true`).
- `maxAgeMs`: максимальний вік кешу в мілісекундах (типово: `172800000` / 2 дні).
- `timeoutSeconds`: тайм-аут запиту scrape у секундах (типово: `60`).
- `plugins.entries.xai.config.xSearch`: параметри xAI X Search (вебпошук Grok).
- `enabled`: увімкнути провайдер X Search.
- `plugins.entries.xai.config.xSearch`: налаштування xAI X Search (вебпошук Grok).
- `enabled`: увімкнути провайдера X Search.
- `model`: модель Grok для пошуку (наприклад, `"grok-4-1-fast"`).
- `plugins.entries.memory-core.config.dreaming`: параметри dreaming пам’яті. Див. [Dreaming](/uk/concepts/dreaming) для фаз і порогів.
- `enabled`: головний перемикач dreaming (типово `false`).
- `frequency`: Cron-розклад для кожного повного циклу dreaming (типово `"0 3 * * *"`).
- політика фаз і пороги є деталями реалізації (не ключами конфігурації для користувача).
- Повна конфігурація пам’яті міститься в [Довіднику конфігурації пам’яті](/uk/reference/memory-config):
- `plugins.entries.memory-core.config.dreaming`: налаштування Dreaming для пам’яті. Див. [Dreaming](/uk/concepts/dreaming) для фаз і порогів.
- `enabled`: головний перемикач Dreaming (типово `false`).
- `frequency`: розклад Cron для кожного повного циклу Dreaming (типово `"0 3 * * *"`).
- політика фаз і пороги — це деталі реалізації (не користувацькі ключі конфігурації).
- Повна конфігурація пам’яті наведена в [Довіднику з конфігурації пам’яті](/uk/reference/memory-config):
- `agents.defaults.memorySearch.*`
- `memory.backend`
- `memory.citations`
- `memory.qmd.*`
- `plugins.entries.memory-core.config.dreaming`
- Увімкнені Claude bundle Plugins також можуть додавати вбудовані типові значення Pi з `settings.json`; OpenClaw застосовує їх як очищені налаштування агента, а не як сирі патчі конфігурації OpenClaw.
- `plugins.slots.memory`: вибрати id активного Plugin пам’яті або `"none"`, щоб вимкнути Plugins пам’яті.
- `plugins.slots.contextEngine`: вибрати id активного Plugin механізму контексту; типово `"legacy"`, якщо ви не встановите й не виберете інший механізм.
- `plugins.installs`: метадані інсталяцій, керовані CLI, які використовує `openclaw plugins update`.
- Містять `source`, `spec`, `sourcePath`, `installPath`, `version`, `resolvedName`, `resolvedVersion`, `resolvedSpec`, `integrity`, `shasum`, `resolvedAt`, `installedAt`.
- Розглядайте `plugins.installs.*` як керований стан; надавайте перевагу командам CLI, а не ручному редагуванню.
- Увімкнені Plugins-пакети Claude також можуть додавати вбудовані типові значення Pi із `settings.json`; OpenClaw застосовує їх як очищені налаштування агента, а не як сирі патчі конфігурації OpenClaw.
- `plugins.slots.memory`: виберіть ідентифікатор активного Plugin пам’яті або `"none"`, щоб вимкнути Plugins пам’яті.
- `plugins.slots.contextEngine`: виберіть ідентифікатор активного Plugin рушія контексту; типове значення — `"legacy"`, якщо ви не встановите й не виберете інший рушій.
- `plugins.installs`: метадані встановлення, керовані CLI та використовувані `openclaw plugins update`.
- Містить `source`, `spec`, `sourcePath`, `installPath`, `version`, `resolvedName`, `resolvedVersion`, `resolvedSpec`, `integrity`, `shasum`, `resolvedAt`, `installedAt`.
- Розглядайте `plugins.installs.*` як керований стан; віддавайте перевагу командам CLI, а не ручному редагуванню.
Див. [Plugins](/uk/tools/plugin).
@ -195,29 +195,29 @@ bundled каналами (автентифікація, контроль дос
```
- `evaluateEnabled: false` вимикає `act:evaluate` і `wait --fn`.
- `ssrfPolicy.dangerouslyAllowPrivateNetwork` вимкнено, якщо не задано, тому браузерна навігація типово залишається суворою.
- Установлюйте `ssrfPolicy.dangerouslyAllowPrivateNetwork: true` лише тоді, коли ви свідомо довіряєте браузерній навігації в приватній мережі.
- У суворому режимі віддалені кінцеві точки профілю CDP (`profiles.*.cdpUrl`) підпадають під те саме блокування приватної мережі під час перевірок доступності/виявлення.
- `ssrfPolicy.allowPrivateNetwork` залишається підтримуваним як legacy-псевдонім.
- `ssrfPolicy.dangerouslyAllowPrivateNetwork` вимкнено, якщо не задано, тож навігація браузера за замовчуванням лишається суворою.
- Установлюйте `ssrfPolicy.dangerouslyAllowPrivateNetwork: true`, лише якщо ви свідомо довіряєте навігації браузера в приватній мережі.
- У суворому режимі віддалені кінцеві точки профілів CDP (`profiles.*.cdpUrl`) підлягають такому самому блокуванню приватної мережі під час перевірок доступності/виявлення.
- `ssrfPolicy.allowPrivateNetwork` і далі підтримується як застарілий псевдонім.
- У суворому режимі використовуйте `ssrfPolicy.hostnameAllowlist` і `ssrfPolicy.allowedHostnames` для явних винятків.
- Віддалені профілі працюють лише в режимі attach-only (start/stop/reset вимкнені).
- `profiles.*.cdpUrl` приймає `http://`, `https://`, `ws://` і `wss://`.
- `profiles.*.cdpUrl` підтримує `http://`, `https://`, `ws://` і `wss://`.
Використовуйте HTTP(S), коли хочете, щоб OpenClaw виявив `/json/version`; використовуйте WS(S),
коли ваш провайдер надає пряму URL-адресу DevTools WebSocket.
- Профілі `existing-session` використовують Chrome MCP замість CDP і можуть підключатися на
вибраному хості або через підключений браузерний Node.
коли ваш провайдер надає прямий URL DevTools WebSocket.
- Профілі `existing-session` використовують Chrome MCP замість CDP і можуть приєднуватися на
вибраному хості або через під’єднаний вузол браузера.
- Профілі `existing-session` можуть задавати `userDataDir`, щоб націлитися на конкретний
профіль браузера на основі Chromium, наприклад Brave або Edge.
- Профілі `existing-session` зберігають поточні обмеження маршруту Chrome MCP:
дії на основі snapshot/ref замість націлення на CSS-selector, hooks
завантаження одного файла, відсутність перевизначення тайм-ауту діалогів, відсутність `wait --load networkidle`, а також
дії на основі snapshot/ref замість націлювання через CSS-селектори, хуки завантаження одного файла,
без перевизначення тайм-ауту діалогів, без `wait --load networkidle`, а також без
`responsebody`, експорту PDF, перехоплення завантажень або пакетних дій.
- Локальні керовані профілі `openclaw` автоматично призначають `cdpPort` і `cdpUrl`; явно
- Для локально керованих профілів `openclaw` автоматично призначаються `cdpPort` і `cdpUrl`; явно
задавайте `cdpUrl` лише для віддаленого CDP.
- Порядок автовиявлення: типовий браузер, якщо він на основі Chromium → Chrome → Brave → Edge → Chromium → Chrome Canary.
- Сервіс керування: лише local loopback (порт похідний від `gateway.port`, типово `18791`).
- `extraArgs` додає додаткові launch-прапорці до локального запуску Chromium (наприклад,
`--disable-gpu`, розмір вікна або налагоджувальні прапорці).
- Служба керування: лише loopback (порт похідний від `gateway.port`, типово `18791`).
- `extraArgs` додає додаткові прапорці запуску до локального старту Chromium (наприклад,
`--disable-gpu`, розмір вікна або прапорці налагодження).
---
@ -235,8 +235,8 @@ bundled каналами (автентифікація, контроль дос
}
```
- `seamColor`: акцентний колір для chrome нативного UI застосунку (відтінок бульбашки режиму Talk тощо).
- `assistant`: перевизначення ідентичності UI керування. Використовує резервне значення з ідентичності активного агента.
- `seamColor`: колір акценту для chrome нативного інтерфейсу застосунку (відтінок бульбашки режиму Talk тощо).
- `assistant`: перевизначення ідентичності Control UI. Використовує ідентичність активного агента як резервну.
---
@ -286,9 +286,9 @@ bundled каналами (автентифікація, контроль дос
// Необов’язково. Типове значення false.
allowRealIpFallback: false,
tools: {
// Додаткові HTTP deny для /tools/invoke
// Додаткові HTTP-заборони для /tools/invoke
deny: ["browser"],
// Видалити інструменти з типового HTTP deny list
// Видалити інструменти зі стандартного списку HTTP-заборон
allow: ["gateway"],
},
push: {
@ -303,66 +303,71 @@ bundled каналами (автентифікація, контроль дос
}
```
<Accordion title=еталі полів Gateway">
<Accordion title=окладно про поля Gateway">
- `mode`: `local` (запустити Gateway) або `remote` (підключитися до віддаленого Gateway). Gateway відмовиться запускатися, якщо не `local`.
- `mode`: `local` (запустити gateway) або `remote` (підключитися до віддаленого gateway). Gateway відмовляється запускатися, якщо не `local`.
- `port`: єдиний мультиплексований порт для WS + HTTP. Пріоритет: `--port` > `OPENCLAW_GATEWAY_PORT` > `gateway.port` > `18789`.
- `bind`: `auto`, `loopback` (типово), `lan` (`0.0.0.0`), `tailnet` (лише IP Tailscale) або `custom`.
- **Застарілі псевдоніми bind**: використовуйте значення режиму bind у `gateway.bind` (`auto`, `loopback`, `lan`, `tailnet`, `custom`), а не псевдоніми хостів (`0.0.0.0`, `127.0.0.1`, `localhost`, `::`, `::1`).
- **Примітка щодо Docker**: типовий bind `loopback` слухає на `127.0.0.1` усередині контейнера. За мережевої конфігурації Docker bridge (`-p 18789:18789`) трафік надходить на `eth0`, тому Gateway недосяжний. Використовуйте `--network host` або встановіть `bind: "lan"` (або `bind: "custom"` з `customBindHost: "0.0.0.0"`), щоб слухати на всіх інтерфейсах.
- **Автентифікація**: типово обов’язкова. Bind-и, відмінні від loopback, потребують автентифікації Gateway. На практиці це означає спільний token/password або reverse proxy з урахуванням ідентичності з `gateway.auth.mode: "trusted-proxy"`. Майстер початкового налаштування типово генерує token.
- Якщо налаштовано і `gateway.auth.token`, і `gateway.auth.password` (включно з SecretRef), явно задайте `gateway.auth.mode` як `token` або `password`. Під час запуску та в потоках встановлення/відновлення служби буде помилка, якщо налаштовано обидва, а режим не задано.
- `gateway.auth.mode: "none"`: явний режим без автентифікації. Використовуйте лише для довірених налаштувань local loopback; цей варіант навмисно не пропонується під час початкового налаштування.
- `gateway.auth.mode: "trusted-proxy"`: делегувати автентифікацію reverse proxy з урахуванням ідентичності й довіряти заголовкам ідентичності від `gateway.trustedProxies` (див. [Автентифікація через Trusted Proxy](/uk/gateway/trusted-proxy-auth)). Цей режим очікує **не-loopback** джерело proxy; reverse proxy loopback на тому самому хості не задовольняють автентифікацію trusted-proxy.
- `gateway.auth.allowTailscale`: коли `true`, заголовки ідентичності Tailscale Serve можуть задовольняти автентифікацію UI керування/WebSocket (перевіряється через `tailscale whois`). Кінцеві точки HTTP API **не** використовують цю автентифікацію заголовком Tailscale; натомість вони дотримуються звичайного режиму HTTP-автентифікації Gateway. Цей потік без token припускає, що хост Gateway є довіреним. Типове значення — `true`, коли `tailscale.mode = "serve"`.
- `gateway.auth.rateLimit`: необов’язковий лімітатор невдалих спроб автентифікації. Застосовується для кожного IP клієнта й для кожної області автентифікації (спільний секрет і token пристрою відстежуються незалежно). Заблоковані спроби повертають `429` + `Retry-After`.
- У асинхронному шляху UI керування Tailscale Serve невдалі спроби для того самого `{scope, clientIp}` серіалізуються перед записом невдачі. Тому паралельні хибні спроби від одного клієнта можуть активувати лімітатор уже на другому запиті, а не пройти обидві як звичайні невідповідності.
- `gateway.auth.rateLimit.exemptLoopback` типово має значення `true`; установіть `false`, якщо ви навмисно хочете також обмежувати трафік localhost (для тестових налаштувань або суворих proxy-розгортань).
- Спроби WS-автентифікації з browser-origin завжди обмежуються, і для них вимкнено виняток loopback (додатковий захист від brute force localhost із браузера).
- У loopback такі блокування для browser-origin ізолюються за нормалізованим значенням `Origin`,
тому повторні невдачі з одного localhost-origin не призводять автоматично
до блокування іншого origin.
- `tailscale.mode`: `serve` (лише tailnet, bind loopback) або `funnel` (публічний, потребує автентифікації).
- `controlUi.allowedOrigins`: явний allowlist browser-origin для підключень Gateway WebSocket. Потрібний, коли браузерні клієнти очікуються з origin, відмінних від loopback.
- `controlUi.dangerouslyAllowHostHeaderOriginFallback`: небезпечний режим, який вмикає резервне визначення origin за заголовком Host для розгортань, що навмисно покладаються на політику origin за заголовком Host.
- `remote.transport`: `ssh` (типово) або `direct` (ws/wss). Для `direct` значення `remote.url` має бути `ws://` або `wss://`.
- `OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1`: аварійне перевизначення на боці клієнта, яке дозволяє відкритий `ws://` до довірених IP приватної мережі; типовим лишається дозвіл відкритого трафіку лише для loopback.
- `gateway.remote.token` / `.password` — це поля облікових даних віддаленого клієнта. Вони самі по собі не налаштовують автентифікацію Gateway.
- `gateway.push.apns.relay.baseUrl`: базова HTTPS URL-адреса для зовнішнього APNs relay, який використовується офіційними/TestFlight збірками iOS після того, як вони публікують реєстрації на основі relay до Gateway. Ця URL-адреса має збігатися з URL relay, скомпільованою в збірку iOS.
- `gateway.push.apns.relay.timeoutMs`: тайм-аут надсилання від Gateway до relay у мілісекундах. Типове значення: `10000`.
- Реєстрації на основі relay делегуються конкретній ідентичності Gateway. Зіставлений застосунок iOS отримує `gateway.identity.get`, включає цю ідентичність у реєстрацію relay і передає Gateway право надсилання в межах реєстрації. Інший Gateway не може повторно використати цю збережену реєстрацію.
- `OPENCLAW_APNS_RELAY_BASE_URL` / `OPENCLAW_APNS_RELAY_TIMEOUT_MS`: тимчасові env-перевизначення для наведеної вище конфігурації relay.
- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true`: аварійний варіант лише для розробки для loopback HTTP URL-адрес relay. У продакшені URL-адреси relay мають залишатися на HTTPS.
- `gateway.channelHealthCheckMinutes`: інтервал монітора стану каналів у хвилинах. Установіть `0`, щоб глобально вимкнути перезапуски монітора стану. Типове значення: `5`.
- `gateway.channelStaleEventThresholdMinutes`: поріг застарілого сокета в хвилинах. Тримайте його більшим або рівним `gateway.channelHealthCheckMinutes`. Типове значення: `30`.
- `gateway.channelMaxRestartsPerHour`: максимальна кількість перезапусків монітора стану для кожного каналу/облікового запису за ковзну годину. Типове значення: `10`.
- `channels.<provider>.healthMonitor.enabled`: вимкнення перезапусків монітора стану для окремого каналу при збереженні глобального монітора увімкненим.
- `channels.<provider>.accounts.<accountId>.healthMonitor.enabled`: перевизначення для окремого облікового запису в каналах з багатьма обліковими записами. Якщо задано, має пріоритет над перевизначенням на рівні каналу.
- Локальні шляхи виклику Gateway можуть використовувати `gateway.remote.*` як резервний варіант лише тоді, коли `gateway.auth.*` не задано.
- Якщо `gateway.auth.token` / `gateway.auth.password` явно налаштовано через SecretRef і не визначено, визначення завершується fail closed (без маскування через резервний remote-варіант).
- `trustedProxies`: IP reverse proxy, які завершують TLS або вставляють заголовки forwarded-client. Перелічуйте лише proxy, які ви контролюєте. Записи loopback все ще валідні для налаштувань proxy на тому самому хості/локального виявлення (наприклад, Tailscale Serve або локальний reverse proxy), але вони **не** роблять loopback-запити придатними для `gateway.auth.mode: "trusted-proxy"`.
- `allowRealIpFallback`: коли `true`, Gateway приймає `X-Real-IP`, якщо відсутній `X-Forwarded-For`. Типове значення `false` для fail-closed поведінки.
- `gateway.tools.deny`: додаткові назви інструментів, заблоковані для HTTP `POST /tools/invoke` (розширює типовий deny list).
- `gateway.tools.allow`: видалити назви інструментів із типового HTTP deny list.
- **Застарілі псевдоніми bind**: використовуйте значення режиму bind у `gateway.bind` (`auto`, `loopback`, `lan`, `tailnet`, `custom`), а не псевдоніми хоста (`0.0.0.0`, `127.0.0.1`, `localhost`, `::`, `::1`).
- **Примітка щодо Docker**: типовий bind `loopback` слухає `127.0.0.1` усередині контейнера. За мережевої конфігурації Docker bridge (`-p 18789:18789`) трафік надходить на `eth0`, тому gateway недоступний. Використовуйте `--network host` або встановіть `bind: "lan"` (або `bind: "custom"` з `customBindHost: "0.0.0.0"`), щоб слухати на всіх інтерфейсах.
- **Auth**: типово обов’язкова. Binds не на loopback вимагають автентифікації gateway. На практиці це означає спільний token/password або reverse proxy з контролем ідентичності з `gateway.auth.mode: "trusted-proxy"`. Майстер початкового налаштування типово генерує token.
- Якщо налаштовано і `gateway.auth.token`, і `gateway.auth.password` (зокрема через SecretRef), явно встановіть `gateway.auth.mode` у `token` або `password`. Запуск, а також потоки встановлення/відновлення сервісу завершуються помилкою, якщо обидва налаштовані, а mode не задано.
- `gateway.auth.mode: "none"`: явний режим без auth. Використовуйте лише для довірених локальних конфігурацій loopback; цей варіант навмисно не пропонується в підказках початкового налаштування.
- `gateway.auth.mode: "trusted-proxy"`: делегує auth reverse proxy з контролем ідентичності та довіряє заголовкам ідентичності від `gateway.trustedProxies` (див. [Trusted Proxy Auth](/uk/gateway/trusted-proxy-auth)). Цей режим очікує **не-loopback** джерело proxy; reverse proxy loopback на тому ж хості не задовольняють auth trusted-proxy.
- `gateway.auth.allowTailscale`: коли `true`, заголовки ідентичності Tailscale Serve можуть задовольняти auth для Control UI/WebSocket (перевіряється через `tailscale whois`). Кінцеві точки HTTP API **не** використовують цю auth через заголовки Tailscale; натомість вони дотримуються звичайного режиму HTTP auth gateway. Цей потік без token припускає, що хост gateway є довіреним. Типове значення — `true`, коли `tailscale.mode = "serve"`.
- `gateway.auth.rateLimit`: необов’язковий обмежувач невдалих спроб auth. Застосовується для кожної IP-адреси клієнта й для кожної області auth окремо (shared-secret і device-token відстежуються незалежно). Заблоковані спроби повертають `429` + `Retry-After`.
- На асинхронному шляху Tailscale Serve Control UI невдалі спроби для того самого `{scope, clientIp}` серіалізуються до запису про невдачу. Тому одночасні хибні спроби від того самого клієнта можуть спрацювати на обмежувач уже на другому запиті, а не пройти обидві як звичайні невідповідності.
- `gateway.auth.rateLimit.exemptLoopback` типово дорівнює `true`; установіть `false`, якщо навмисно хочете також застосовувати rate limit до трафіку localhost (для тестових конфігурацій або суворих розгортань proxy).
- Спроби WS auth з походження браузера завжди обмежуються без винятку для loopback (додатковий захист від brute force localhost з браузера).
- На loopback ці блокування з боку браузерного походження ізольовані за нормалізованим значенням `Origin`,
тож повторні невдалі спроби з одного походження localhost не блокують автоматично
інше походження.
- `tailscale.mode`: `serve` (лише tailnet, bind loopback) або `funnel` (публічний, потребує auth).
- `controlUi.allowedOrigins`: явний список дозволених browser-origin для підключень Gateway WebSocket. Обов’язковий, коли очікуються браузерні клієнти з не-loopback походжень.
- `controlUi.dangerouslyAllowHostHeaderOriginFallback`: небезпечний режим, що вмикає fallback походження через заголовок Host для розгортань, які навмисно покладаються на політику походження заголовка Host.
- `remote.transport`: `ssh` (типово) або `direct` (ws/wss). Для `direct` `remote.url` має бути `ws://` або `wss://`.
- `OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1`: аварійний override на рівні середовища процесу клієнта,
який дозволяє незашифрований `ws://` до довірених IP-адрес приватної мережі;
типове значення й далі дозволяє незашифрований трафік лише для loopback. Еквівалента в `openclaw.json`
немає, а конфігурація приватної мережі браузера, наприклад
`browser.ssrfPolicy.dangerouslyAllowPrivateNetwork`, не впливає на
клієнтів Gateway WebSocket.
- `gateway.remote.token` / `.password` — це поля облікових даних віддаленого клієнта. Вони самі собою не налаштовують auth gateway.
- `gateway.push.apns.relay.baseUrl`: базовий HTTPS URL для зовнішнього APNs relay, який використовують офіційні/TestFlight збірки iOS після публікації relay-реєстрацій до gateway. Цей URL має збігатися з URL relay, зібраним у збірку iOS.
- `gateway.push.apns.relay.timeoutMs`: тайм-аут надсилання від gateway до relay у мілісекундах. Типове значення: `10000`.
- Реєстрації на основі relay делегуються конкретній ідентичності gateway. Пов’язаний застосунок iOS отримує `gateway.identity.get`, включає цю ідентичність у реєстрацію relay і пересилає gateway право надсилання в межах реєстрації. Інший gateway не може повторно використати цю збережену реєстрацію.
- `OPENCLAW_APNS_RELAY_BASE_URL` / `OPENCLAW_APNS_RELAY_TIMEOUT_MS`: тимчасові override змінних середовища для наведеної вище конфігурації relay.
- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true`: аварійний виняток лише для розробки, який дозволяє loopback HTTP URL для relay. У production URL relay мають залишатися на HTTPS.
- `gateway.channelHealthCheckMinutes`: інтервал моніторингу стану каналу в хвилинах. Установіть `0`, щоб глобально вимкнути перезапуски health-monitor. Типове значення: `5`.
- `gateway.channelStaleEventThresholdMinutes`: поріг застарілого сокета в хвилинах. Це значення має бути більшим або рівним `gateway.channelHealthCheckMinutes`. Типове значення: `30`.
- `gateway.channelMaxRestartsPerHour`: максимальна кількість перезапусків health-monitor на канал/обліковий запис протягом ковзної години. Типове значення: `10`.
- `channels.<provider>.healthMonitor.enabled`: вимкнення перезапусків health-monitor для окремого каналу зі збереженням глобального монітора увімкненим.
- `channels.<provider>.accounts.<accountId>.healthMonitor.enabled`: перевизначення на рівні облікового запису для каналів із кількома обліковими записами. Якщо задано, має пріоритет над перевизначенням на рівні каналу.
- Локальні шляхи викликів gateway можуть використовувати `gateway.remote.*` як резервний варіант лише тоді, коли `gateway.auth.*` не задано.
- Якщо `gateway.auth.token` / `gateway.auth.password` явно налаштовано через SecretRef, але не розв’язано, розв’язання завершується в закритому режимі помилки (без маскування резервним fallback до remote).
- `trustedProxies`: IP-адреси reverse proxy, які завершують TLS або вставляють заголовки forwarded-client. Перелічуйте лише proxy, які ви контролюєте. Записи loopback лишаються коректними для конфігурацій proxy/локального виявлення на тому ж хості (наприклад Tailscale Serve або локальний reverse proxy), але вони **не** роблять запити loopback придатними для `gateway.auth.mode: "trusted-proxy"`.
- `allowRealIpFallback`: коли `true`, gateway приймає `X-Real-IP`, якщо `X-Forwarded-For` відсутній. Типове значення `false` для fail-closed поведінки.
- `gateway.tools.deny`: додаткові назви інструментів, заблоковані для HTTP `POST /tools/invoke` (розширює типовий список заборон).
- `gateway.tools.allow`: прибирає назви інструментів із типового списку HTTP-заборон.
</Accordion>
### OpenAI-compatible endpoints
### Кінцеві точки, сумісні з OpenAI
- Chat Completions: типово вимкнені. Увімкніть через `gateway.http.endpoints.chatCompletions.enabled: true`.
- Chat Completions: типово вимкнено. Увімкніть через `gateway.http.endpoints.chatCompletions.enabled: true`.
- Responses API: `gateway.http.endpoints.responses.enabled`.
- Посилення безпеки URL-вводу Responses:
- Посилене захист URL-входів для Responses:
- `gateway.http.endpoints.responses.maxUrlParts`
- `gateway.http.endpoints.responses.files.urlAllowlist`
- `gateway.http.endpoints.responses.images.urlAllowlist`
Порожні allowlist трактуються як незадані; використовуйте `gateway.http.endpoints.responses.files.allowUrl=false`
і/або `gateway.http.endpoints.responses.images.allowUrl=false`, щоб вимкнути отримання за URL.
- Необов’язковий заголовок посилення безпеки відповіді:
- `gateway.http.securityHeaders.strictTransportSecurity` (установлюйте лише для HTTPS-origin, які ви контролюєте; див. [Автентифікація через Trusted Proxy](/uk/gateway/trusted-proxy-auth#tls-termination-and-hsts))
Порожні списки allowlist вважаються незаданими; використовуйте `gateway.http.endpoints.responses.files.allowUrl=false`
і/або `gateway.http.endpoints.responses.images.allowUrl=false`, щоб вимкнути отримання URL.
- Необов’язковий заголовок посиленого захисту відповіді:
- `gateway.http.securityHeaders.strictTransportSecurity` (задавайте лише для контрольованих вами HTTPS-походжень; див. [Trusted Proxy Auth](/uk/gateway/trusted-proxy-auth#tls-termination-and-hsts))
### Ізоляція кількох екземплярів
Запускайте кілька Gateway на одному хості з унікальними портами та каталогами стану:
Запускайте кілька gateway на одному хості з унікальними портами та каталогами стану:
```bash
OPENCLAW_CONFIG_PATH=~/.openclaw/a.json \
@ -372,7 +377,7 @@ openclaw gateway --port 19001
Зручні прапорці: `--dev` (використовує `~/.openclaw-dev` + порт `19001`), `--profile <name>` (використовує `~/.openclaw-<name>`).
Див. [Кілька Gateway](/uk/gateway/multiple-gateways).
Див. [Multiple Gateways](/uk/gateway/multiple-gateways).
### `gateway.tls`
@ -390,11 +395,11 @@ openclaw gateway --port 19001
}
```
- `enabled`: вмикає завершення TLS на слухачі Gateway (HTTPS/WSS) (типово: `false`).
- `autoGenerate`: автоматично генерує локальну самопідписану пару cert/key, коли явні файли не налаштовано; лише для local/dev використання.
- `certPath`: шлях у файловій системі до файла сертифіката TLS.
- `keyPath`: шлях у файловій системі до приватного ключа TLS; обмежте доступ до нього дозволами.
- `caPath`: необов’язковий шлях до набору CA для перевірки клієнта або користувацьких ланцюжків довіри.
- `enabled`: вмикає завершення TLS на слухачі gateway (HTTPS/WSS) (типове значення: `false`).
- `autoGenerate`: автоматично генерує локальну самопідписану пару cert/key, якщо явні файли не налаштовано; лише для локального/dev використання.
- `certPath`: шлях файлової системи до файла сертифіката TLS.
- `keyPath`: шлях файлової системи до файла приватного ключа TLS; обмежуйте доступ через дозволи.
- `caPath`: необов’язковий шлях до пакета CA для перевірки клієнта або власних ланцюжків довіри.
### `gateway.reload`
@ -410,17 +415,17 @@ openclaw gateway --port 19001
}
```
- `mode`: керує тим, як зміни конфігурації застосовуються під час runtime.
- `mode`: керує тим, як зміни конфігурації застосовуються під час виконання.
- `"off"`: ігнорувати зміни наживо; зміни потребують явного перезапуску.
- `"restart"`: завжди перезапускати процес Gateway після зміни конфігурації.
- `"restart"`: завжди перезапускати процес gateway після зміни конфігурації.
- `"hot"`: застосовувати зміни в процесі без перезапуску.
- `"hybrid"` (типово): спочатку спробувати hot reload; якщо потрібно, перейти до перезапуску.
- `debounceMs`: вікно debounce у мс перед застосуванням змін конфігурації (невід’ємне ціле число).
- `deferralTimeoutMs`: максимальний час очікування в мс для операцій, що виконуються, перед примусовим перезапуском (типово: `300000` = 5 хвилин).
- `"hybrid"` (типово): спочатку пробувати hot reload; якщо потрібно — переходити до перезапуску.
- `debounceMs`: вікно debounce в мс перед застосуванням змін конфігурації (невід’ємне ціле число).
- `deferralTimeoutMs`: максимальний час очікування в мс для операцій у процесі перед примусовим перезапуском (типове значення: `300000` = 5 хвилин).
---
## Hooks
## Хуки
```json5
{
@ -453,47 +458,47 @@ openclaw gateway --port 19001
}
```
Автентифікація: `Authorization: Bearer <token>` або `x-openclaw-token: <token>`.
Токени hook у рядку запиту відхиляються.
Auth: `Authorization: Bearer <token>` або `x-openclaw-token: <token>`.
Токени hooks у query string відхиляються.
Примітки щодо валідації та безпеки:
- `hooks.enabled=true` потребує непорожнього `hooks.token`.
- `hooks.enabled=true` вимагає непорожній `hooks.token`.
- `hooks.token` має **відрізнятися** від `gateway.auth.token`; повторне використання токена Gateway відхиляється.
- `hooks.path` не може бути `/`; використовуйте окремий підшлях, наприклад `/hooks`.
- Якщо `hooks.allowRequestSessionKey=true`, обмежте `hooks.allowedSessionKeyPrefixes` (наприклад `["hook:"]`).
- Якщо mapping або preset використовує шаблонізований `sessionKey`, установіть `hooks.allowedSessionKeyPrefixes` і `hooks.allowRequestSessionKey=true`. Статичні ключі mapping цього opt-in не потребують.
- Якщо mapping або preset використовує шаблонний `sessionKey`, задайте `hooks.allowedSessionKeyPrefixes` і `hooks.allowRequestSessionKey=true`. Статичні ключі mapping не потребують цього дозволу.
**Endpoints:**
**Кінцеві точки:**
- `POST /hooks/wake``{ text, mode?: "now"|"next-heartbeat" }`
- `POST /hooks/agent``{ message, name?, agentId?, sessionKey?, wakeMode?, deliver?, channel?, to?, model?, thinking?, timeoutSeconds? }`
- `sessionKey` з payload запиту приймається лише коли `hooks.allowRequestSessionKey=true` (типово: `false`).
- `sessionKey` із тіла запиту приймається лише коли `hooks.allowRequestSessionKey=true` (типове значення: `false`).
- `POST /hooks/<name>` → визначається через `hooks.mappings`
- Значення `sessionKey` у mapping, згенеровані шаблоном, розглядаються як зовнішньо надані й також потребують `hooks.allowRequestSessionKey=true`.
- Значення `sessionKey` у mapping, згенеровані шаблоном, розглядаються як зовнішньо надані й також вимагають `hooks.allowRequestSessionKey=true`.
<Accordion title=еталі mapping">
<Accordion title=окладно про mappings">
- `match.path` зіставляє підшлях після `/hooks` (наприклад `/hooks/gmail``gmail`).
- `match.source` зіставляє поле payload для загальних шляхів.
- `match.path` зіставляється з підшляхом після `/hooks` (наприклад `/hooks/gmail``gmail`).
- `match.source` зіставляється з полем у payload для узагальнених шляхів.
- Шаблони на кшталт `{{messages[0].subject}}` читають дані з payload.
- `transform` може вказувати на модуль JS/TS, який повертає дію hook.
- `transform.module` має бути відносним шляхом і залишатися в межах `hooks.transformsDir` (абсолютні шляхи та traversal відхиляються).
- `agentId` маршрутизує до конкретного агента; невідомі ID використовують резервне значення за замовчуванням.
- `allowedAgentIds`: обмежує явну маршрутизацію (`*` або пропущено = дозволити все, `[]` = заборонити все).
- `defaultSessionKey`: необов’язковий фіксований ключ сесії для запусків hook-агента без явного `sessionKey`.
- `allowRequestSessionKey`: дозволити викликам `/hooks/agent` і ключам сесій mapping, що керуються шаблонами, задавати `sessionKey` (типово: `false`).
- `allowedSessionKeyPrefixes`: необов’язковий allowlist префіксів для явних значень `sessionKey` (запит + mapping), наприклад `["hook:"]`. Він стає обов’язковим, коли будь-який mapping або preset використовує шаблонізований `sessionKey`.
- `deliver: true` надсилає фінальну відповідь у канал; типове значення `channel` `last`.
- `model` перевизначає LLM для цього запуску hook (має бути дозволено, якщо каталог моделей задано).
- `transform` може вказувати на модуль JS/TS, що повертає дію hook.
- `transform.module` має бути відносним шляхом і залишатися в межах `hooks.transformsDir` (абсолютні шляхи й traversal відхиляються).
- `agentId` маршрутизує до конкретного агента; невідомі ID повертаються до типового.
- `allowedAgentIds`: обмежує явну маршрутизацію (`*` або не задано = дозволити все, `[]` = заборонити все).
- `defaultSessionKey`: необов’язковий фіксований ключ сесії для запусків агента hook без явного `sessionKey`.
- `allowRequestSessionKey`: дозволити викликачам `/hooks/agent` і ключам сесії mapping, керованим шаблоном, задавати `sessionKey` (типове значення: `false`).
- `allowedSessionKeyPrefixes`: необов’язковий список дозволених префіксів для явних значень `sessionKey` (запит + mapping), наприклад `["hook:"]`. Стає обов’язковим, коли будь-який mapping або preset використовує шаблонний `sessionKey`.
- `deliver: true` надсилає фінальну відповідь до каналу; `channel` типово дорівнює `last`.
- `model` перевизначає LLM для цього запуску hook (має бути дозволено, якщо задано каталог моделей).
</Accordion>
### Інтеграція Gmail
- Вбудований preset Gmail використовує `sessionKey: "hook:gmail:{{messages[0].id}}"`.
- Якщо ви зберігаєте цю маршрутизацію для кожного повідомлення, установіть `hooks.allowRequestSessionKey: true` і обмежте `hooks.allowedSessionKeyPrefixes` відповідно до простору імен Gmail, наприклад `["hook:", "hook:gmail:"]`.
- Якщо вам потрібно `hooks.allowRequestSessionKey: false`, перевизначте preset статичним `sessionKey` замість шаблонізованого типового значення.
- Якщо ви зберігаєте таку маршрутизацію для кожного повідомлення, установіть `hooks.allowRequestSessionKey: true` і обмежте `hooks.allowedSessionKeyPrefixes`, щоб вони відповідали простору імен Gmail, наприклад `["hook:", "hook:gmail:"]`.
- Якщо вам потрібне `hooks.allowRequestSessionKey: false`, перевизначте preset статичним `sessionKey` замість шаблонного типового.
```json5
{
@ -521,7 +526,7 @@ openclaw gateway --port 19001
---
## Хост canvas
## Canvas host
```json5
{
@ -533,18 +538,18 @@ openclaw gateway --port 19001
}
```
- Обслуговує редаговані агентом HTML/CSS/JS та A2UI через HTTP під портом Gateway:
- Обслуговує HTML/CSS/JS і A2UI, які може редагувати агент, через HTTP на порту Gateway:
- `http://<gateway-host>:<gateway.port>/__openclaw__/canvas/`
- `http://<gateway-host>:<gateway.port>/__openclaw__/a2ui/`
- Лише локально: залишайте `gateway.bind: "loopback"` (типово).
- Для bind, відмінних від loopback: маршрути canvas потребують автентифікації Gateway (token/password/trusted-proxy), так само як і інші HTTP-поверхні Gateway.
- Node WebView зазвичай не надсилають заголовки автентифікації; після сполучення й підключення node Gateway рекламує URL-адреси можливостей з областю node для доступу до canvas/A2UI.
- URL-адреси можливостей прив’язані до активної WS-сесії node і швидко спливають. Резервний варіант на основі IP не використовується.
- Вставляє клієнт live-reload у HTML, що обслуговується.
- Автоматично створює початковий `index.html`, якщо каталог порожній.
- Лише локально: зберігайте `gateway.bind: "loopback"` (типово).
- Binds не на loopback: маршрути canvas вимагають auth Gateway (token/password/trusted-proxy), як і інші HTTP-поверхні Gateway.
- Node WebViews зазвичай не надсилають заголовки auth; після сполучення й підключення node Gateway оголошує URL можливостей у межах node для доступу до canvas/A2UI.
- URL можливостей прив’язані до активної WS-сесії node і швидко спливають. Fallback на основі IP не використовується.
- Впроваджує клієнт live reload у відданий HTML.
- Автоматично створює стартовий `index.html`, якщо каталог порожній.
- Також обслуговує A2UI за адресою `/__openclaw__/a2ui/`.
- Зміни потребують перезапуску Gateway.
- Вимкніть live reload для великих каталогів або при помилках `EMFILE`.
- Зміни потребують перезапуску gateway.
- Вимикайте live reload для великих каталогів або в разі помилок `EMFILE`.
---
@ -562,11 +567,11 @@ openclaw gateway --port 19001
}
```
- `minimal` (типово): не включає `cliPath` + `sshPort` із TXT-записів.
- `minimal` (типово): не включає `cliPath` + `sshPort` до записів TXT.
- `full`: включає `cliPath` + `sshPort`.
- Типове ім’я хоста — `openclaw`. Перевизначається через `OPENCLAW_MDNS_HOSTNAME`.
- Ім’я хоста типово `openclaw`. Перевизначається через `OPENCLAW_MDNS_HOSTNAME`.
### Глобальна область (DNS-SD)
### Wide-area (DNS-SD)
```json5
{
@ -576,7 +581,7 @@ openclaw gateway --port 19001
}
```
Записує unicast DNS-SD zone у `~/.openclaw/dns/`. Для міжмережевого виявлення поєднуйте з DNS-сервером (рекомендовано CoreDNS) + Tailscale split DNS.
Записує зону unicast DNS-SD у `~/.openclaw/dns/`. Для виявлення між мережами поєднуйте з DNS-сервером (рекомендовано CoreDNS) + Tailscale split DNS.
Налаштування: `openclaw dns setup --apply`.
@ -584,7 +589,7 @@ openclaw gateway --port 19001
## Середовище
### `env` (вбудовані env-змінні)
### `env` (вбудовані змінні середовища)
```json5
{
@ -601,14 +606,14 @@ openclaw gateway --port 19001
}
```
- Вбудовані env-змінні застосовуються, лише якщо в env процесу відсутній ключ.
- Файли `.env`: `.env` поточного робочого каталогу + `~/.openclaw/.env` (жоден не перевизначає наявні змінні).
- `shellEnv`: імпортує відсутні очікувані ключі з профілю вашої оболонки входу.
- Див. [Середовище](/uk/help/environment) для повної пріоритетності.
- Вбудовані змінні середовища застосовуються лише якщо в середовищі процесу відсутній цей ключ.
- Файли `.env`: `.env` у CWD + `~/.openclaw/.env` (жоден із них не перевизначає наявні змінні).
- `shellEnv`: імпортує відсутні очікувані ключі з профілю вашої login shell.
- Повний порядок пріоритету див. у [Environment](/uk/help/environment).
### Підстановка env-змінних
### Підстановка змінних середовища
Посилайтеся на env-змінні в будь-якому рядку конфігурації через `${VAR_NAME}`:
Посилайтеся на змінні середовища в будь-якому рядку конфігурації через `${VAR_NAME}`:
```json5
{
@ -618,16 +623,16 @@ openclaw gateway --port 19001
}
```
- Зіставляються лише імена у верхньому регістрі: `[A-Z_][A-Z0-9_]*`.
- Відсутні/порожні змінні викликають помилку під час завантаження конфігурації.
- Екрануйте як `$${VAR}` для літерального `${VAR}`.
- Зіставляються лише назви у верхньому регістрі: `[A-Z_][A-Z0-9_]*`.
- Відсутні/порожні змінні спричиняють помилку під час завантаження конфігурації.
- Екрануйте через `$${VAR}`, щоб отримати літеральний `${VAR}`.
- Працює з `$include`.
---
## Секрети
Посилання на секрети є адитивними: значення відкритим текстом усе ще працюють.
Посилання на секрети є адитивними: значення у відкритому тексті також продовжують працювати.
### `SecretRef`
@ -640,16 +645,16 @@ openclaw gateway --port 19001
Валідація:
- шаблон `provider`: `^[a-z][a-z0-9_-]{0,63}$`
- шаблон id для `source: "env"`: `^[A-Z][A-Z0-9_]{0,127}$`
- `source: "file"` id: абсолютний JSON pointer (наприклад `"/providers/openai/apiKey"`)
- шаблон id для `source: "exec"`: `^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$`
- id для `source: "exec"` не мають містити сегменти шляху `.` або `..`, розділені `/` (наприклад `a/../b` відхиляється)
- шаблон `id` для `source: "env"`: `^[A-Z][A-Z0-9_]{0,127}$`
- `id` для `source: "file"`: абсолютний JSON pointer (наприклад `"/providers/openai/apiKey"`)
- шаблон `id` для `source: "exec"`: `^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$`
- `id` для `source: "exec"` не повинен містити slash-delimited сегменти шляху `.` або `..` (наприклад `a/../b` відхиляється)
### Підтримувана поверхня облікових даних
- Канонічна матриця: [Поверхня облікових даних SecretRef](/uk/reference/secretref-credential-surface)
- `secrets apply` націлюється на підтримувані шляхи облікових даних у `openclaw.json`.
- Посилання з `auth-profiles.json` включені в runtime-визначення та покриття аудиту.
- Посилання в `auth-profiles.json` включені до розв’язання під час виконання та покриття аудиту.
### Конфігурація провайдерів секретів
@ -681,18 +686,18 @@ openclaw gateway --port 19001
Примітки:
- Провайдер `file` підтримує `mode: "json"` і `mode: "singleValue"` (`id` має бути `"value"` у режимі singleValue).
- Шляхи провайдерів file та exec завершуються fail closed, коли перевірка ACL Windows недоступна. Установлюйте `allowInsecurePath: true` лише для довірених шляхів, які неможливо перевірити.
- Провайдер `exec` потребує абсолютного шляху `command` і використовує protocol payload у stdin/stdout.
- Типово шляхи команд-символьних посилань відхиляються. Установіть `allowSymlinkCommand: true`, щоб дозволити шляхи-символьні посилання з перевіркою шляху до визначеної цілі.
- Якщо налаштовано `trustedDirs`, перевірка довірених каталогів застосовується до шляху визначеної цілі.
- Середовище дочірнього процесу `exec` типово мінімальне; явно передавайте потрібні змінні через `passEnv`.
- Посилання на секрети визначаються під час активації у внутрішньопам’ятний знімок, а потім шляхи запитів читають лише цей знімок.
- Фільтрація активної поверхні застосовується під час активації: невизначені посилання на увімкнених поверхнях призводять до помилки запуску/перезавантаження, а неактивні поверхні пропускаються з діагностикою.
- Провайдер `file` підтримує `mode: "json"` і `mode: "singleValue"` (у режимі singleValue `id` має дорівнювати `"value"`).
- Шляхи провайдера file і exec завершуються помилкою в закритому режимі, якщо перевірка Windows ACL недоступна. Установлюйте `allowInsecurePath: true` лише для довірених шляхів, які не можна перевірити.
- Провайдер `exec` вимагає абсолютний шлях `command` і використовує payload протоколу через stdin/stdout.
- Типово шляхи command, що є symlink, відхиляються. Установіть `allowSymlinkCommand: true`, щоб дозволити шляхи symlink із перевіркою розв’язаного цільового шляху.
- Якщо налаштовано `trustedDirs`, перевірка trusted-dir застосовується до розв’язаного цільового шляху.
- Середовище дочірнього процесу `exec` типово мінімальне; передавайте потрібні змінні явно через `passEnv`.
- Посилання на секрети розв’язуються під час активації у snapshot в пам’яті, після чого шляхи запитів читають лише цей snapshot.
- Під час активації застосовується фільтрація активної поверхні: нерозв’язані посилання на увімкнених поверхнях спричиняють помилку запуску/reload, тоді як неактивні поверхні пропускаються з діагностикою.
---
## Сховище автентифікації
## Сховище auth
```json5
{
@ -712,11 +717,11 @@ openclaw gateway --port 19001
- Профілі для кожного агента зберігаються в `<agentDir>/auth-profiles.json`.
- `auth-profiles.json` підтримує посилання на рівні значень (`keyRef` для `api_key`, `tokenRef` для `token`) для статичних режимів облікових даних.
- Профілі в режимі OAuth (`auth.profiles.<id>.mode = "oauth"`) не підтримують облікові дані профілю автентифікації на основі SecretRef.
- Статичні runtime-облікові дані беруться з визначених внутрішньопам’ятних знімків; legacy-записи `auth.json` очищаються, коли їх виявлено.
- Legacy-імпорти OAuth беруться з `~/.openclaw/credentials/oauth.json`.
- Профілі в режимі OAuth (`auth.profiles.<id>.mode = "oauth"`) не підтримують облікові дані профілю auth на основі SecretRef.
- Статичні облікові дані під час виконання беруться з розв’язаних snapshot у пам’яті; застарілі статичні записи `auth.json` очищаються під час виявлення.
- Застарілий імпорт OAuth виконується з `~/.openclaw/credentials/oauth.json`.
- Див. [OAuth](/uk/concepts/oauth).
- Runtime-поведінка секретів і інструменти `audit/configure/apply`: [Керування секретами](/uk/gateway/secrets).
- Поведінка secrets під час виконання та інструменти `audit/configure/apply`: [Керування секретами](/uk/gateway/secrets).
### `auth.cooldowns`
@ -738,22 +743,21 @@ openclaw gateway --port 19001
}
```
- `billingBackoffHours`: базовий backoff у годинах, коли профіль завершується помилкою через справжні
помилки білінгу/недостатнього кредиту (типово: `5`). Явний текст про білінг
- `billingBackoffHours`: базова затримка повтору в годинах, коли профіль завершується помилкою через справжні
billing-помилки/недостатній кредит (типове значення: `5`). Явний текст про billing
усе ще може потрапити сюди навіть для відповідей `401`/`403`, але
зіставлення тексту, специфічні для провайдера, залишаються в межах провайдера,
якому вони належать (наприклад, OpenRouter
`Key limit exceeded`). Повідомлення про вікно використання або
ліміт витрат організації/робочого простору для повторюваних HTTP `402`
натомість залишаються в шляху `rate_limit`.
- `billingBackoffHoursByProvider`: необов’язкові перевизначення годин backoff для білінгу для кожного провайдера.
- `billingMaxHours`: обмеження в годинах для експоненційного зростання backoff білінгу (типово: `24`).
- `authPermanentBackoffMinutes`: базовий backoff у хвилинах для збоїв `auth_permanent` з високою впевненістю (типово: `10`).
- `authPermanentMaxMinutes`: обмеження в хвилинах для зростання backoff `auth_permanent` (типово: `60`).
- `failureWindowHours`: ковзне вікно в годинах, яке використовується для лічильників backoff (типово: `24`).
- `overloadedProfileRotations`: максимальна кількість ротацій auth-профілю в межах того самого провайдера для перевантажених помилок перед переходом до резервної моделі (типово: `1`). Форми зайнятості провайдера, такі як `ModelNotReadyException`, потрапляють сюди.
- `overloadedBackoffMs`: фіксована затримка перед повторною спробою ротації перевантаженого провайдера/профілю (типово: `0`).
- `rateLimitedProfileRotations`: максимальна кількість ротацій auth-профілю в межах того самого провайдера для помилок rate-limit перед переходом до резервної моделі (типово: `1`). Цей кошик rate-limit включає текст, характерний для провайдерів, такий як `Too many concurrent requests`, `ThrottlingException`, `concurrency limit reached`, `workers_ai ... quota limit exceeded` і `resource exhausted`.
текстові зіставлення, специфічні для провайдера, залишаються обмеженими тим провайдером,
якому вони належать (наприклад OpenRouter
`Key limit exceeded`). Повторювані HTTP `402` повідомлення про usage-window або
ліміти витрат organization/workspace натомість залишаються в шляху `rate_limit`.
- `billingBackoffHoursByProvider`: необов’язкові перевизначення годин затримки billing для окремих провайдерів.
- `billingMaxHours`: верхня межа в годинах для експоненційного зростання затримки billing (типове значення: `24`).
- `authPermanentBackoffMinutes`: базова затримка повтору в хвилинах для збоїв `auth_permanent` із високою впевненістю (типове значення: `10`).
- `authPermanentMaxMinutes`: верхня межа в хвилинах для зростання затримки `auth_permanent` (типове значення: `60`).
- `failureWindowHours`: ковзне вікно в годинах, що використовується для лічильників затримки повтору (типове значення: `24`).
- `overloadedProfileRotations`: максимальна кількість ротацій auth-профілів того самого провайдера для помилок перевантаження перед переходом до fallback моделі (типове значення: `1`). Сюди потрапляють форми зайнятості провайдера, як-от `ModelNotReadyException`.
- `overloadedBackoffMs`: фіксована затримка перед повторною спробою ротації перевантаженого провайдера/профілю (типове значення: `0`).
- `rateLimitedProfileRotations`: максимальна кількість ротацій auth-профілів того самого провайдера для помилок rate limit перед переходом до fallback моделі (типове значення: `1`). До цього кошика rate limit входить текст у форматі провайдера, як-от `Too many concurrent requests`, `ThrottlingException`, `concurrency limit reached`, `workers_ai ... quota limit exceeded` і `resource exhausted`.
---
@ -774,8 +778,8 @@ openclaw gateway --port 19001
- Типовий файл журналу: `/tmp/openclaw/openclaw-YYYY-MM-DD.log`.
- Установіть `logging.file` для стабільного шляху.
- `consoleLevel` підвищується до `debug` при `--verbose`.
- `maxFileBytes`: максимальний розмір файла журналу в байтах, після якого запис пригнічується (додатне ціле число; типово: `524288000` = 500 MB). Для продакшен-розгортань використовуйте зовнішню ротацію журналів.
- `consoleLevel` підвищується до `debug` із `--verbose`.
- `maxFileBytes`: максимальний розмір файла журналу в байтах, після якого запис припиняється (додатне ціле число; типове значення: `524288000` = 500 MB). Для production-розгортань використовуйте зовнішню ротацію журналів.
---
@ -812,20 +816,20 @@ openclaw gateway --port 19001
}
```
- `enabled`: головний перемикач для виводу інструментування (типово: `true`).
- `flags`: масив рядків-прапорців, які вмикають цільовий вивід журналу (підтримує шаблони на кшталт `"telegram.*"` або `"*"`).
- `stuckSessionWarnMs`: поріг віку в мс для видачі попереджень про завислі сесії, поки сесія залишається в стані обробки.
- `otel.enabled`: вмикає конвеєр експорту OpenTelemetry (типово: `false`).
- `enabled`: головний перемикач для виводу інструментації (типове значення: `true`).
- `flags`: масив рядків прапорців, що вмикають цільовий вивід у журнал (підтримує шаблони з підстановками, як-от `"telegram.*"` або `"*"`).
- `stuckSessionWarnMs`: пороговий вік у мс для виведення попереджень про завислу сесію, поки сесія залишається в стані обробки.
- `otel.enabled`: вмикає конвеєр експорту OpenTelemetry (типове значення: `false`).
- `otel.endpoint`: URL колектора для експорту OTel.
- `otel.protocol`: `"http/protobuf"` (типово) або `"grpc"`.
- `otel.headers`: додаткові заголовки метаданих HTTP/gRPC, які надсилаються із запитами експорту OTel.
- `otel.headers`: додаткові заголовки метаданих HTTP/gRPC, що надсилаються із запитами експорту OTel.
- `otel.serviceName`: назва сервісу для атрибутів ресурсу.
- `otel.traces` / `otel.metrics` / `otel.logs`: увімкнути експорт trace, metrics або log.
- `otel.sampleRate`: частота вибірки trace `0``1`.
- `otel.traces` / `otel.metrics` / `otel.logs`: увімкнути експорт trace, metrics або logs.
- `otel.sampleRate`: частота семплювання trace `0``1`.
- `otel.flushIntervalMs`: інтервал періодичного скидання телеметрії в мс.
- `cacheTrace.enabled`: журналювати знімки трасування кешу для вбудованих запусків (типово: `false`).
- `cacheTrace.filePath`: шлях виводу для JSONL трасування кешу (типово: `$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl`).
- `cacheTrace.includeMessages` / `includePrompt` / `includeSystem`: керують тим, що включається у вивід трасування кешу (усі типово: `true`).
- `cacheTrace.enabled`: журналювати знімки cache trace для вбудованих запусків (типове значення: `false`).
- `cacheTrace.filePath`: шлях виводу для JSONL cache trace (типове значення: `$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl`).
- `cacheTrace.includeMessages` / `includePrompt` / `includeSystem`: керують тим, що включається у вивід cache trace (усі типово: `true`).
---
@ -847,12 +851,12 @@ openclaw gateway --port 19001
}
```
- `channel`: канал релізів для npm/git-інсталяцій`"stable"`, `"beta"` або `"dev"`.
- `checkOnStart`: перевіряти оновлення npm під час запуску Gateway (типово: `true`).
- `auto.enabled`: увімкнути фонове автооновлення для пакетних інсталяцій (типово: `false`).
- `auto.stableDelayHours`: мінімальна затримка в годинах перед автозастосуванням stable-каналу (типово: `6`; макс.: `168`).
- `auto.stableJitterHours`: додаткове вікно розподілу розгортання stable-каналу в годинах (типово: `12`; макс.: `168`).
- `auto.betaCheckIntervalHours`: як часто виконуються перевірки beta-каналу в годинах (типово: `1`; макс.: `24`).
- `channel`: канал релізів для встановлень npm/git — `"stable"`, `"beta"` або `"dev"`.
- `checkOnStart`: перевіряти оновлення npm під час запуску gateway (типове значення: `true`).
- `auto.enabled`: увімкнути фонове автооновлення для встановлень пакетів (типове значення: `false`).
- `auto.stableDelayHours`: мінімальна затримка в годинах перед автозастосуванням для каналу stable (типове значення: `6`; максимум: `168`).
- `auto.stableJitterHours`: додаткове вікно розподілу розгортання для каналу stable в годинах (типове значення: `12`; максимум: `168`).
- `auto.betaCheckIntervalHours`: як часто виконуються перевірки каналу beta, у годинах (типове значення: `1`; максимум: `24`).
---
@ -885,21 +889,21 @@ openclaw gateway --port 19001
}
```
- `enabled`: глобальний прапорець можливості ACP (типово: `false`).
- `dispatch.enabled`: незалежний прапорець для диспетчеризації ходів сесій ACP (типово: `true`). Установіть `false`, щоб зберегти доступність команд ACP, але заблокувати виконання.
- `backend`: id типового runtime-бекенду ACP (має збігатися із зареєстрованим ACP runtime Plugin).
- `defaultAgent`: резервний id цільового агента ACP, коли spawn не задає явну ціль.
- `allowedAgents`: allowlist id агентів, дозволених для runtime-сесій ACP; порожнє значення означає відсутність додаткових обмежень.
- `enabled`: глобальний feature gate ACP (типове значення: `false`).
- `dispatch.enabled`: незалежний gate для dispatch ходів сесії ACP (типове значення: `true`). Установіть `false`, щоб команди ACP залишалися доступними, але виконання блокувалося.
- `backend`: ідентифікатор типового runtime backend ACP (має відповідати зареєстрованому runtime Plugin ACP).
- `defaultAgent`: fallback ідентифікатор цільового агента ACP, коли породження не задають явну ціль.
- `allowedAgents`: список дозволених ідентифікаторів агентів для runtime-сесій ACP; порожній означає відсутність додаткових обмежень.
- `maxConcurrentSessions`: максимальна кількість одночасно активних сесій ACP.
- `stream.coalesceIdleMs`: вікно idle-flush у мс для потокового тексту.
- `stream.maxChunkChars`: максимальний розмір частини перед розбиттям проєкції потокового блока.
- `stream.repeatSuppression`: пригнічувати повторювані рядки стану/інструментів у межах ходу (типово: `true`).
- `stream.coalesceIdleMs`: вікно скидання простою в мс для потокового тексту.
- `stream.maxChunkChars`: максимальний розмір фрагмента перед розділенням проєкції потокового блока.
- `stream.repeatSuppression`: пригнічувати повторювані рядки статусу/інструментів для кожного ходу (типове значення: `true`).
- `stream.deliveryMode`: `"live"` передає потік поступово; `"final_only"` буферизує до термінальних подій ходу.
- `stream.hiddenBoundarySeparator`: роздільник перед видимим текстом після прихованих подій інструментів (типово: `"paragraph"`).
- `stream.maxOutputChars`: максимальна кількість символів виводу асистента, що проєктується на один хід ACP.
- `stream.maxSessionUpdateChars`: максимальна кількість символів для проєктованих рядків стану/оновлення ACP.
- `stream.tagVisibility`: запис імен тегів у булеві перевизначення видимості для потокових подій.
- `runtime.ttlMinutes`: idle TTL у хвилинах для воркерів сесій ACP до того, як вони стануть придатними для очищення.
- `stream.hiddenBoundarySeparator`: роздільник перед видимим текстом після прихованих подій інструментів (типове значення: `"paragraph"`).
- `stream.maxOutputChars`: максимальна кількість символів виводу помічника, проєктованих на хід ACP.
- `stream.maxSessionUpdateChars`: максимальна кількість символів для проєктованих рядків статусу/оновлень ACP.
- `stream.tagVisibility`: запис із назв тегів до логічних перевизначень видимості для потокових подій.
- `runtime.ttlMinutes`: idle TTL у хвилинах для працівників сесій ACP до можливого очищення.
- `runtime.installCommand`: необов’язкова команда встановлення, яку слід виконати під час початкового налаштування runtime-середовища ACP.
---
@ -919,14 +923,14 @@ openclaw gateway --port 19001
- `cli.banner.taglineMode` керує стилем слогана банера:
- `"random"` (типово): ротаційні кумедні/сезонні слогани.
- `"default"`: фіксований нейтральний слоган (`All your chats, one OpenClaw.`).
- `"off"`: без тексту слогана (заголовок/версія банера все одно показуються).
- Щоб приховати весь банер (а не лише слогани), установіть env `OPENCLAW_HIDE_BANNER=1`.
- `"off"`: без тексту слогана (назва/версія банера все одно показуються).
- Щоб приховати весь банер (а не лише слогани), установіть змінну середовища `OPENCLAW_HIDE_BANNER=1`.
---
## Майстер
## Wizard
Метадані, які записуються керованими потоками налаштування CLI (`onboard`, `configure`, `doctor`):
Метадані, які записують керовані CLI потоки налаштування (`onboard`, `configure`, `doctor`):
```json5
{
@ -948,9 +952,9 @@ openclaw gateway --port 19001
---
## Bridge (застарілий, видалений)
## Bridge (застарілий, вилучений)
Поточні збірки більше не містять TCP bridge. Node підключаються через WebSocket Gateway. Ключі `bridge.*` більше не є частиною схеми конфігурації (валідація завершується помилкою, доки їх не буде видалено; `openclaw doctor --fix` може прибрати невідомі ключі).
Поточні збірки більше не містять TCP bridge. Nodes підключаються через Gateway WebSocket. Ключі `bridge.*` більше не входять до схеми конфігурації (валідація завершується помилкою, доки їх не буде видалено; `openclaw doctor --fix` може прибрати невідомі ключі).
<Accordion title="Застаріла конфігурація bridge (історична довідка)">
@ -990,11 +994,11 @@ openclaw gateway --port 19001
}
```
- `sessionRetention`: як довго зберігати завершені ізольовані сесії запусків Cron перед їхнім очищенням із `sessions.json`. Також керує очищенням архівованих видалених транскриптів Cron. Типове значення: `24h`; установіть `false`, щоб вимкнути.
- `runLog.maxBytes`: максимальний розмір файла журналу одного запуску (`cron/runs/<jobId>.jsonl`) перед очищенням. Типове значення: `2_000_000` байтів.
- `runLog.keepLines`: кількість найновіших рядків, які зберігаються, коли запускається очищення журналу запусків. Типове значення: `2000`.
- `webhookToken`: bearer token, що використовується для доставки POST у Cron Webhook (`delivery.mode = "webhook"`); якщо не задано, заголовок автентифікації не надсилається.
- `webhook`: застаріла резервна URL-адреса legacy Webhook (http/https), що використовується лише для збережених завдань, у яких досі є `notify: true`.
- `sessionRetention`: як довго зберігати завершені ізольовані сесії запуску Cron перед очищенням із `sessions.json`. Також керує очищенням архівованих видалених транскриптів Cron. Типове значення: `24h`; установіть `false`, щоб вимкнути.
- `runLog.maxBytes`: максимальний розмір файла журналу на один запуск (`cron/runs/<jobId>.jsonl`) перед очищенням. Типове значення: `2_000_000` байтів.
- `runLog.keepLines`: кількість найновіших рядків, що зберігаються під час очищення журналу запуску. Типове значення: `2000`.
- `webhookToken`: bearer token, що використовується для доставлення POST до Cron Webhook (`delivery.mode = "webhook"`); якщо не задано, заголовок auth не надсилається.
- `webhook`: застарілий резервний URL Webhook (http/https), який використовується лише для збережених завдань, що все ще мають `notify: true`.
### `cron.retry`
@ -1010,11 +1014,11 @@ openclaw gateway --port 19001
}
```
- `maxAttempts`: максимальна кількість повторних спроб для одноразових завдань при тимчасових помилках (типово: `3`; діапазон: `0``10`).
- `backoffMs`: масив затримок backoff у мс для кожної повторної спроби (типово: `[30000, 60000, 300000]`; 110 записів).
- `retryOn`: типи помилок, які запускають повторні спроби — `"rate_limit"`, `"overloaded"`, `"network"`, `"timeout"`, `"server_error"`. Пропустіть, щоб повторювати всі тимчасові типи.
- `maxAttempts`: максимальна кількість повторних спроб для одноразових завдань у разі тимчасових помилок (типове значення: `3`; діапазон: `0``10`).
- `backoffMs`: масив затримок повтору в мс для кожної повторної спроби (типове значення: `[30000, 60000, 300000]`; 110 записів).
- `retryOn`: типи помилок, що запускають повторні спроби — `"rate_limit"`, `"overloaded"`, `"network"`, `"timeout"`, `"server_error"`. Не вказуйте, щоб повторювати для всіх тимчасових типів.
Застосовується лише до одноразових завдань Cron. Для повторюваних завдань використовується окрема обробка збоїв.
Застосовується лише до одноразових завдань Cron. Для періодичних завдань використовується окрема обробка збоїв.
### `cron.failureAlert`
@ -1032,11 +1036,11 @@ openclaw gateway --port 19001
}
```
- `enabled`: увімкнути сповіщення про збої для завдань Cron (типово: `false`).
- `after`: кількість послідовних збоїв перед спрацюванням сповіщення (додатне ціле число, мін.: `1`).
- `enabled`: увімкнути сповіщення про збої для завдань Cron (типове значення: `false`).
- `after`: кількість послідовних збоїв перед спрацюванням сповіщення (додатне ціле число, мінімум: `1`).
- `cooldownMs`: мінімальна кількість мілісекунд між повторними сповіщеннями для того самого завдання (невід’ємне ціле число).
- `mode`: режим доставки`"announce"` надсилає через повідомлення каналу; `"webhook"` виконує POST на налаштований Webhook.
- `accountId`: необов’язковий id облікового запису або каналу для обмеження області доставки сповіщення.
- `mode`: режим доставлення`"announce"` надсилає через повідомлення каналу; `"webhook"` надсилає POST на налаштований Webhook.
- `accountId`: необов’язковий ідентифікатор облікового запису або каналу для обмеження доставлення сповіщень.
### `cron.failureDestination`
@ -1053,43 +1057,43 @@ openclaw gateway --port 19001
}
```
- Типова ціль призначення для сповіщень про збої Cron для всіх завдань.
- `mode`: `"announce"` або `"webhook"`; типове значення — `"announce"`, коли є достатньо даних про ціль.
- `channel`: перевизначення каналу для доставки announce. `"last"` повторно використовує останній відомий канал доставки.
- `to`: явна ціль announce або URL-адреса Webhook. Обов’язкове для режиму webhook.
- `accountId`: необов’язкове перевизначення облікового запису для доставки.
- `delivery.failureDestination` для окремого завдання перевизначає це глобальне типове значення.
- Коли не задано ані глобальну, ані окрему ціль призначення для збоїв, завдання, які вже доставляють через `announce`, у разі збою використовують свою основну ціль announce як резервний варіант.
- `delivery.failureDestination` підтримується лише для завдань `sessionTarget="isolated"`, якщо тільки основний `delivery.mode` завдання не має значення `"webhook"`.
- Типова ціль для сповіщень про збої Cron для всіх завдань.
- `mode`: `"announce"` або `"webhook"`; типове значення — `"announce"`, коли доступно достатньо цільових даних.
- `channel`: перевизначення каналу для доставлення announce. `"last"` повторно використовує останній відомий канал доставлення.
- `to`: явна ціль announce або URL Webhook. Обов’язкове для режиму webhook.
- `accountId`: необов’язкове перевизначення облікового запису для доставлення.
- `delivery.failureDestination` на рівні завдання перевизначає це глобальне типове значення.
- Коли не задано ні глобальну, ні окрему ціль збою для завдання, завдання, які вже доставляють через `announce`, у разі збою використовують як fallback цю основну ціль announce.
- `delivery.failureDestination` підтримується лише для завдань `sessionTarget="isolated"`, якщо тільки основне значення `delivery.mode` завдання не дорівнює `"webhook"`.
Див. [Завдання Cron](/uk/automation/cron-jobs). Ізольовані виконання Cron відстежуються як [фонові завдання](/uk/automation/tasks).
Див. [Cron Jobs](/uk/automation/cron-jobs). Ізольовані виконання Cron відстежуються як [фонові завдання](/uk/automation/tasks).
---
## Змінні шаблону моделі медіа
Заповнювачі шаблонів, що розгортаються в `tools.media.models[].args`:
Заповнювачі шаблону, що розгортаються в `tools.media.models[].args`:
| Variable | Description |
| ------------------ | ------------------------------------------------- |
| `{{Body}}` | Повне тіло вхідного повідомлення |
| `{{RawBody}}` | Сире тіло (без обгорток історії/відправника) |
| `{{BodyStripped}}` | Тіло з видаленими згадками груп |
| `{{RawBody}}` | Необроблене тіло (без обгорток історії/відправника) |
| `{{BodyStripped}}` | Тіло без згадок у групі |
| `{{From}}` | Ідентифікатор відправника |
| `{{To}}` | Ідентифікатор призначення |
| `{{MessageSid}}` | id повідомлення каналу |
| `{{MessageSid}}` | Ідентифікатор повідомлення каналу |
| `{{SessionId}}` | UUID поточної сесії |
| `{{IsNewSession}}` | `"true"`, коли створено нову сесію |
| `{{MediaUrl}}` | Псевдо-URL вхідного медіа |
| `{{MediaPath}}` | Локальний шлях до медіа |
| `{{MediaType}}` | Тип медіа (image/audio/document/…) |
| `{{Transcript}}` | Транскрипт аудіо |
| `{{Prompt}}` | Визначений media prompt для записів CLI |
| `{{MaxChars}}` | Визначений максимум символів виводу для записів CLI |
| `{{Prompt}}` | Розв’язаний prompt медіа для записів CLI |
| `{{MaxChars}}` | Розв’язана максимальна кількість символів виводу для записів CLI |
| `{{ChatType}}` | `"direct"` або `"group"` |
| `{{GroupSubject}}` | Тема групи (best effort) |
| `{{GroupMembers}}` | Попередній перегляд учасників групи (best effort) |
| `{{SenderName}}` | Відображуване ім’я відправника (best effort) |
| `{{GroupMembers}}` | Попередній список учасників групи (best effort) |
| `{{SenderName}}` | Видиме ім’я відправника (best effort) |
| `{{SenderE164}}` | Номер телефону відправника (best effort) |
| `{{Provider}}` | Підказка провайдера (whatsapp, telegram, discord тощо) |
@ -1097,7 +1101,7 @@ openclaw gateway --port 19001
## Include конфігурації (`$include`)
Розділіть конфігурацію на кілька файлів:
Розділяйте конфігурацію на кілька файлів:
```json5
// ~/.openclaw/openclaw.json
@ -1116,16 +1120,16 @@ openclaw gateway --port 19001
- Масив файлів: глибоко зливається в заданому порядку (пізніші перевизначають попередні).
- Сусідні ключі: зливаються після include (перевизначають включені значення).
- Вкладені include: до 10 рівнів глибини.
- Шляхи: визначаються відносно файла, що включає, але мають залишатися в межах каталогу конфігурації верхнього рівня (`dirname` від `openclaw.json`). Абсолютні форми/форми `../` дозволені лише тоді, коли вони все одно визначаються в межах цієї границі.
- Записи, що належать OpenClaw і змінюють лише один розділ верхнього рівня, підкріплений include одного файла, записуються безпосередньо в цей включений файл. Наприклад, `plugins install` оновлює `plugins: { $include: "./plugins.json5" }` у `plugins.json5` і залишає `openclaw.json` без змін.
- Кореневі include, масиви include та include із сусідніми перевизначеннями доступні лише для читання для записів, що належать OpenClaw; такі записи завершуються fail closed замість сплощення конфігурації.
- Помилки: зрозумілі повідомлення для відсутніх файлів, помилок парсингу та циклічних include.
- Шляхи: розв’язуються відносно файла, який включає, але мають залишатися в межах каталогу конфігурації верхнього рівня (`dirname` для `openclaw.json`). Абсолютні форми/`../` дозволені лише тоді, коли після розв’язання вони все одно залишаються в межах цієї межі.
- Записи, виконувані OpenClaw і які змінюють лише один розділ верхнього рівня, підкріплений include одного файла, записуються безпосередньо в цей включений файл. Наприклад, `plugins install` оновлює `plugins: { $include: "./plugins.json5" }` у `plugins.json5` і залишає `openclaw.json` недоторканим.
- Кореневі include, масиви include та include із сусідніми перевизначеннями є лише для читання для записів, виконуваних OpenClaw; такі записи завершуються помилкою в закритому режимі замість сплощення конфігурації.
- Помилки: зрозумілі повідомлення для відсутніх файлів, помилок розбору й циклічних include.
---
овязане: [Конфігурація](/uk/gateway/configuration) · [Приклади конфігурації](/uk/gateway/configuration-examples) · [Doctor](/uk/gateway/doctor)_
овязане: [Configuration](/uk/gateway/configuration) · [Configuration Examples](/uk/gateway/configuration-examples) · [Doctor](/uk/gateway/doctor)_
## Пов’язане
- [Конфігурація](/uk/gateway/configuration)
- [Configuration](/uk/gateway/configuration)
- [Приклади конфігурації](/uk/gateway/configuration-examples)

View File

@ -1,77 +1,77 @@
---
read_when:
- Запуск або усунення несправностей віддалених конфігурацій gateway
summary: Віддалений доступ через тунелі SSH (Gateway WS) і tailnet
- Запуск або усунення несправностей віддалених налаштувань Gateway
summary: Віддалений доступ за допомогою SSH-тунелів (Gateway WS) і tailnet-мереж
title: Віддалений доступ
x-i18n:
generated_at: "2026-04-24T03:17:22Z"
generated_at: "2026-04-24T06:45:25Z"
model: gpt-5.4
provider: openai
source_hash: 3753f29d6b3cc3f1a2f749cc0fdfdd60dfde8822f0ec6db0e18e5412de0980da
source_hash: 66eebbe3762134f29f982201d7e79a789624b96042bd931e07d9855710d64bfe
source_path: gateway/remote.md
workflow: 15
---
# Віддалений доступ (SSH, тунелі та tailnet)
# Віддалений доступ (SSH, тунелі та tailnet-мережі)
Цей репозиторій підтримує “віддалено через SSH”, зберігаючи один Gateway (основний) запущеним на виділеному хості (desktop/server) і підключаючи до нього клієнтів.
Цей репозиторій підтримує «віддалену роботу через SSH», якщо один Gateway (головний) постійно працює на виділеному хості (desktop/server), а клієнти підключаються до нього.
- Для **операторів (вас / macOS app)**: SSH-тунелювання є універсальним резервним варіантом.
- Для **вузлів (iOS/Android і майбутніх пристроїв)**: підключайтеся до **WebSocket** Gateway (LAN/tailnet або через SSH-тунель за потреби).
- Для **операторів (вас / застосунку macOS)**: SSH-тунелювання — універсальний резервний варіант.
- Для **Node (iOS/Android і майбутніх пристроїв)**: підключення до **WebSocket** Gateway (LAN/tailnet або SSH-тунель за потреби).
## Основна ідея
- WebSocket Gateway прив’язується до **loopback** на налаштованому порту (типово 18789).
- Gateway WebSocket прив’язується до **loopback** на налаштованому порту (типово 18789).
- Для віддаленого використання ви переспрямовуєте цей loopback-порт через SSH (або використовуєте tailnet/VPN і менше покладаєтеся на тунелі).
## Поширені конфігурації VPN/tailnet (де живе агент)
## Поширені налаштування VPN/tailnet (де живе агент)
Думайте про **хост Gateway** як про “місце, де живе агент”. Він володіє сесіями, профілями автентифікації, каналами та станом.
Ваш ноутбук/desktop (і вузли) підключаються до цього хоста.
Думайте про **хост Gateway** як про місце, «де живе агент». Він володіє сеансами, профілями автентифікації, каналами та станом.
Ваш laptop/desktop (і Node) підключаються до цього хоста.
### 1) Завжди активний Gateway у вашому tailnet (VPS або домашній сервер)
### 1) Постійно ввімкнений Gateway у вашій tailnet-мережі (VPS або домашній сервер)
Запустіть Gateway на постійному хості та звертайтеся до нього через **Tailscale** або SSH.
Запустіть Gateway на постійному хості та підключайтеся до нього через **Tailscale** або SSH.
- **Найкращий UX:** залишайте `gateway.bind: "loopback"` і використовуйте **Tailscale Serve** для Control UI.
- **Резервний варіант:** залишайте loopback + SSH-тунель з будь-якої машини, якій потрібен доступ.
- **Приклади:** [exe.dev](/uk/install/exe-dev) (проста VM) або [Hetzner](/uk/install/hetzner) (production VPS).
- **Найкращий UX:** залиште `gateway.bind: "loopback"` і використовуйте **Tailscale Serve** для UI керування.
- **Резервний варіант:** залиште loopback + SSH-тунель із будь-якої машини, якій потрібен доступ.
- **Приклади:** [exe.dev](/uk/install/exe-dev) (простий VM) або [Hetzner](/uk/install/hetzner) (production VPS).
Це ідеально, коли ваш ноутбук часто засинає, але ви хочете, щоб агент завжди був активним.
Це ідеально, якщо ваш laptop часто переходить у сон, але ви хочете, щоб агент був постійно ввімкнений.
### 2) Домашній desktop запускає Gateway, ноутбук виконує віддалене керування
### 2) Домашній desktop запускає Gateway, laptop використовується для віддаленого керування
Ноутбук **не** запускає агента. Він підключається віддалено:
Laptop **не** запускає агент. Він підключається віддалено:
- Використовуйте режим macOS app **Remote over SSH** (Settings → General → “OpenClaw runs”).
- Застосунок відкриває та керує тунелем, тому WebChat + перевірки стану “просто працюють”.
- Використовуйте режим **Remote over SSH** у застосунку macOS (Settings → General → “OpenClaw runs”).
- Застосунок відкриває та керує тунелем, тому WebChat і перевірки стану «просто працюють».
Інструкція: [Віддалений доступ macOS](/uk/platforms/mac/remote).
Інструкція: [віддалений доступ macOS](/uk/platforms/mac/remote).
### 3) Ноутбук запускає Gateway, віддалений доступ з інших машин
### 3) Laptop запускає Gateway, віддалений доступ з інших машин
Залишайте Gateway локальним, але безпечно відкрийте до нього доступ:
Залиште Gateway локальним, але безпечно відкрийте до нього доступ:
- SSH-тунель до ноутбука з інших машин, або
- опублікуйте Control UI через Tailscale Serve і залишайте Gateway доступним лише через loopback.
- SSH-тунель до laptop з інших машин, або
- Tailscale Serve для UI керування, залишаючи Gateway доступним лише через loopback.
Посібник: [Tailscale](/uk/gateway/tailscale) і [Огляд Web](/uk/web).
Посібник: [Tailscale](/uk/gateway/tailscale) і [огляд Web](/uk/web).
## Потік команд (що де запускається)
Один сервіс gateway володіє станом + каналами. Вузли — це периферія.
Один сервіс gateway володіє станом і каналами. Node — це периферія.
Приклад потоку (Telegram → вузол):
Приклад потоку (Telegram → node):
- Повідомлення Telegram надходить до **Gateway**.
- Gateway запускає **агента** і вирішує, чи викликати інструмент вузла.
- Gateway викликає **вузол** через WebSocket Gateway (`node.*` RPC).
- Вузол повертає результат; Gateway надсилає відповідь назад до Telegram.
- Gateway запускає **агента** і вирішує, чи викликати інструмент node.
- Gateway викликає **node** через Gateway WebSocket (`node.*` RPC).
- Node повертає результат; Gateway надсилає відповідь назад у Telegram.
Примітки:
- **Вузли не запускають сервіс gateway.** На хост зазвичай слід запускати лише один gateway, якщо тільки ви навмисно не запускаєте ізольовані профілі (див. [Кілька gateway](/uk/gateway/multiple-gateways)).
- “Режим вузла” macOS app — це лише клієнт вузла через WebSocket Gateway.
- **Node не запускають сервіс gateway.** На одному хості має працювати лише один gateway, якщо ви свідомо не запускаєте ізольовані профілі (див. [Кілька gateway](/uk/gateway/multiple-gateways)).
- «Режим node» у застосунку macOS — це просто клієнт node через Gateway WebSocket.
## SSH-тунель (CLI + інструменти)
@ -84,15 +84,15 @@ ssh -N -L 18789:127.0.0.1:18789 user@host
Коли тунель активний:
- `openclaw health` і `openclaw status --deep` тепер звертаються до віддаленого gateway через `ws://127.0.0.1:18789`.
- `openclaw gateway status`, `openclaw gateway health`, `openclaw gateway probe` і `openclaw gateway call` також можуть за потреби звертатися до переспрямованого URL через `--url`.
- `openclaw gateway status`, `openclaw gateway health`, `openclaw gateway probe` і `openclaw gateway call` також можуть звертатися до переспрямованого URL через `--url`, якщо потрібно.
Примітка: замініть `18789` на ваш налаштований `gateway.port` (або `--port`/`OPENCLAW_GATEWAY_PORT`).
Примітка: коли ви передаєте `--url`, CLI не повертається до облікових даних з конфігурації чи середовища.
Явно вкажіть `--token` або `--password`. Відсутність явно заданих облікових даних є помилкою.
Примітка: замініть `18789` на налаштований `gateway.port` (або `--port`/`OPENCLAW_GATEWAY_PORT`).
Примітка: коли ви передаєте `--url`, CLI не використовує резервне отримання облікових даних із конфігурації або змінних середовища.
Явно вкажіть `--token` або `--password`. Відсутність явно вказаних облікових даних — це помилка.
## Типові віддалені значення CLI
## Типові віддалені налаштування CLI
Ви можете зберегти віддалену ціль, щоб команди CLI використовували її типово:
Ви можете зберегти віддалену ціль, щоб CLI-команди використовували її типово:
```json5
{
@ -110,62 +110,66 @@ ssh -N -L 18789:127.0.0.1:18789 user@host
## Пріоритет облікових даних
Визначення облікових даних Gateway дотримується одного спільного контракту для шляхів call/probe/status і моніторингу Discord exec-approval. Хост вузла використовує той самий базовий контракт з одним винятком для локального режиму (він навмисно ігнорує `gateway.remote.*`):
Визначення облікових даних Gateway дотримується єдиного спільного контракту для шляхів call/probe/status і моніторингу Discord exec-approval. Node-host використовує той самий базовий контракт з одним винятком для локального режиму (він навмисно ігнорує `gateway.remote.*`):
- Явні облікові дані (`--token`, `--password` або інструмент `gatewayToken`) завжди мають пріоритет у шляхах виклику, які приймають явну автентифікацію.
- Явно вказані облікові дані (`--token`, `--password` або `gatewayToken` інструмента) завжди мають пріоритет у шляхах call, які приймають явну автентифікацію.
- Безпека перевизначення URL:
- Перевизначення URL у CLI (`--url`) ніколи не використовують неявні облікові дані з конфігурації/env.
- Перевизначення URL через env (`OPENCLAW_GATEWAY_URL`) можуть використовувати лише облікові дані з env (`OPENCLAW_GATEWAY_TOKEN` / `OPENCLAW_GATEWAY_PASSWORD`).
- Перевизначення URL у CLI (`--url`) ніколи не використовують неявні облікові дані з конфігурації/змінних середовища.
- Перевизначення URL через змінні середовища (`OPENCLAW_GATEWAY_URL`) можуть використовувати лише облікові дані зі змінних середовища (`OPENCLAW_GATEWAY_TOKEN` / `OPENCLAW_GATEWAY_PASSWORD`).
- Типові значення локального режиму:
- token: `OPENCLAW_GATEWAY_TOKEN` -> `gateway.auth.token` -> `gateway.remote.token` (резервний віддалений варіант застосовується лише тоді, коли локальний вхідний токен автентифікації не задано)
- password: `OPENCLAW_GATEWAY_PASSWORD` -> `gateway.auth.password` -> `gateway.remote.password` (резервний віддалений варіант застосовується лише тоді, коли локальний вхідний пароль автентифікації не задано)
- token: `OPENCLAW_GATEWAY_TOKEN` -> `gateway.auth.token` -> `gateway.remote.token` (резервне використання remote застосовується, лише якщо вхідне значення token для локальної автентифікації не задано)
- password: `OPENCLAW_GATEWAY_PASSWORD` -> `gateway.auth.password` -> `gateway.remote.password` (резервне використання remote застосовується, лише якщо вхідне значення password для локальної автентифікації не задано)
- Типові значення віддаленого режиму:
- token: `gateway.remote.token` -> `OPENCLAW_GATEWAY_TOKEN` -> `gateway.auth.token`
- password: `OPENCLAW_GATEWAY_PASSWORD` -> `gateway.remote.password` -> `gateway.auth.password`
- Виняток локального режиму хоста вузла: `gateway.remote.token` / `gateway.remote.password` ігноруються.
- Перевірки token для віддалених probe/status за замовчуванням суворі: вони використовують лише `gateway.remote.token` (без резервного локального token) при націлюванні на віддалений режим.
- Перевизначення Gateway через env використовують лише `OPENCLAW_GATEWAY_*`.
- Виняток локального режиму Node-host: `gateway.remote.token` / `gateway.remote.password` ігноруються.
- Перевірки token для віддалених probe/status за замовчуванням суворі: вони використовують лише `gateway.remote.token` (без резервного використання локального token) при націлюванні на віддалений режим.
- Перевизначення середовища Gateway використовують лише `OPENCLAW_GATEWAY_*`.
## Chat UI через SSH
WebChat більше не використовує окремий HTTP-порт. Інтерфейс чату SwiftUI підключається безпосередньо до WebSocket Gateway.
WebChat більше не використовує окремий HTTP-порт. SwiftUI chat UI підключається безпосередньо до Gateway WebSocket.
- Переспрямуйте `18789` через SSH (див. вище), а потім підключайте клієнти до `ws://127.0.0.1:18789`.
- На macOS надавайте перевагу режиму застосунку “Remote over SSH”, який керує тунелем автоматично.
- На macOS віддавайте перевагу режиму «Remote over SSH» у застосунку, який автоматично керує тунелем.
## macOS app "Remote over SSH"
## «Remote over SSH» у застосунку macOS
Застосунок рядка меню macOS може повністю керувати цією конфігурацією (віддалені перевірки стану, WebChat і переспрямування Voice Wake).
Застосунок macOS у рядку меню може повністю керувати тим самим сценарієм (віддалені перевірки стану, WebChat і переспрямування Voice Wake).
Інструкція: [Віддалений доступ macOS](/uk/platforms/mac/remote).
Інструкція: [віддалений доступ macOS](/uk/platforms/mac/remote).
## Правила безпеки (remote/VPN)
Коротко: **залишайте Gateway доступним лише через loopback**, якщо ви точно не впевнені, що вам потрібна прив’язка.
Коротко: **залишайте Gateway доступним лише через loopback**, якщо ви не впевнені, що вам потрібна прив’язка.
- **Loopback + SSH/Tailscale Serve** — найбезпечніший типовий варіант (без публічного доступу).
- Відкритий `ws://` типово дозволений лише для loopback. Для довірених приватних мереж
установіть `OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1` у процесі клієнта як аварійний варіант.
- **Не-loopback прив’язки** (`lan`/`tailnet`/`custom` або `auto`, коли loopback недоступний) повинні використовувати автентифікацію gateway: token, password або reverse proxy з урахуванням ідентичності з `gateway.auth.mode: "trusted-proxy"`.
- `gateway.remote.token` / `.password` — це джерела облікових даних клієнта. Вони **самі по собі** не налаштовують автентифікацію сервера.
- Локальні шляхи виклику можуть використовувати `gateway.remote.*` як резервний варіант лише тоді, коли `gateway.auth.*` не задано.
- Якщо `gateway.auth.token` / `gateway.auth.password` явно налаштовано через SecretRef і не визначено, визначення завершується в закритому режимі (без маскування резервним віддаленим варіантом).
- `gateway.remote.tlsFingerprint` закріплює віддалений TLS-сертифікат при використанні `wss://`.
- **Tailscale Serve** може автентифікувати трафік Control UI/WebSocket через заголовки
ідентичності, коли `gateway.auth.allowTailscale: true`; endpoint HTTP API не
- Plaintext `ws://` типово дозволений лише для loopback. Для довірених приватних мереж
установіть `OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1` у процесі клієнта як
аварійний виняток. Еквівалента в `openclaw.json` немає; це має бути змінна
середовища процесу для клієнта, який виконує WebSocket-з’єднання.
- **Прив’язки не до loopback** (`lan`/`tailnet`/`custom` або `auto`, коли loopback недоступний) мають використовувати автентифікацію gateway: token, password або identity-aware reverse proxy з `gateway.auth.mode: "trusted-proxy"`.
- `gateway.remote.token` / `.password` — це джерела облікових даних клієнта. Вони **не** налаштовують автентифікацію сервера самі по собі.
- Локальні шляхи call можуть використовувати `gateway.remote.*` як резервний варіант лише тоді, коли `gateway.auth.*` не задано.
- Якщо `gateway.auth.token` / `gateway.auth.password` явно налаштовані через SecretRef і не можуть бути визначені, визначення завершується в закритому режимі (без маскування через резервний remote).
- `gateway.remote.tlsFingerprint` закріплює сертифікат TLS віддаленого вузла при використанні `wss://`.
- **Tailscale Serve** може автентифікувати трафік UI/WebSocket керування через identity
headers, якщо `gateway.auth.allowTailscale: true`; кінцеві точки HTTP API не
використовують цю автентифікацію заголовками Tailscale і натомість дотримуються
звичайного режиму HTTP-автентифікації gateway. Цей безтокеновий потік припускає, що хост gateway є довіреним. Установіть `false`, якщо ви хочете спільну секретну автентифікацію всюди.
- Автентифікація **trusted-proxy** призначена лише для конфігурацій не-loopback із proxy з урахуванням ідентичності.
Reverse proxy на тому самому хості через loopback не задовольняють `gateway.auth.mode: "trusted-proxy"`.
- Ставтеся до керування browser як до операторського доступу: лише tailnet + навмисне спарювання вузлів.
звичайного режиму HTTP-автентифікації gateway. Цей безтокеновий потік передбачає,
що хост gateway є довіреним. Установіть `false`, якщо хочете автентифікацію
через спільний секрет усюди.
- Автентифікація **trusted-proxy** призначена лише для конфігурацій identity-aware proxy не на loopback.
Reverse proxy на тому самому хості через loopback не задовольняють вимогу `gateway.auth.mode: "trusted-proxy"`.
- Розглядайте керування з браузера як операторський доступ: лише tailnet + свідоме спарювання Node.
Детальніше: [Безпека](/uk/gateway/security).
Докладніше: [Безпека](/uk/gateway/security).
### macOS: постійний SSH-тунель через LaunchAgent
Для клієнтів macOS, що підключаються до віддаленого gateway, найпростішу постійну конфігурацію забезпечує запис SSH `LocalForward` у config разом із LaunchAgent, щоб тунель залишався активним після перезавантажень і збоїв.
Для клієнтів macOS, які підключаються до віддаленого gateway, найпростішим постійним варіантом є запис SSH `LocalForward` у конфігурації разом із LaunchAgent, який підтримує тунель активним після перезавантажень і збоїв.
#### Крок 1: додайте конфігурацію SSH
#### Крок 1: додайте SSH-конфігурацію
Відредагуйте `~/.ssh/config`:
@ -187,7 +191,7 @@ ssh-copy-id -i ~/.ssh/id_rsa <REMOTE_USER>@<REMOTE_IP>
#### Крок 3: налаштуйте token gateway
Збережіть token у config, щоб він зберігався після перезапусків:
Збережіть token у конфігурації, щоб він зберігався після перезапусків:
```bash
openclaw config set gateway.remote.token "<your-token>"
@ -224,13 +228,13 @@ openclaw config set gateway.remote.token "<your-token>"
launchctl bootstrap gui/$UID ~/Library/LaunchAgents/ai.openclaw.ssh-tunnel.plist
```
Тунель автоматично запускатиметься під час входу, перезапускатиметься після збою та підтримуватиме переспрямований порт активним.
Тунель автоматично запускатиметься під час входу в систему, перезапускатиметься після збою та підтримуватиме переспрямований порт активним.
Примітка: якщо у вас залишився LaunchAgent `com.openclaw.ssh-tunnel` зі старішої конфігурації, вивантажте й видаліть його.
Примітка: якщо у вас залишився LaunchAgent `com.openclaw.ssh-tunnel` зі старішого налаштування, вивантажте та видаліть його.
#### Усунення несправностей
Перевірте, чи запущено тунель:
Перевірте, чи працює тунель:
```bash
ps aux | grep "ssh -N remote-gateway" | grep -v grep
@ -249,12 +253,12 @@ launchctl kickstart -k gui/$UID/ai.openclaw.ssh-tunnel
launchctl bootout gui/$UID/ai.openclaw.ssh-tunnel
```
| Запис конфігурації | Що він робить |
| ------------------------------------ | ------------------------------------------------------------ |
| `LocalForward 18789 127.0.0.1:18789` | Переспрямовує локальний порт 18789 на віддалений порт 18789 |
| `ssh -N` | SSH без виконання віддалених команд (лише переспрямування портів) |
| `KeepAlive` | Автоматично перезапускає тунель, якщо він аварійно завершується |
| `RunAtLoad` | Запускає тунель, коли LaunchAgent завантажується під час входу |
| Запис конфігурації | Що він робить |
| ------------------------------------- | ------------------------------------------------------------ |
| `LocalForward 18789 127.0.0.1:18789` | Переспрямовує локальний порт 18789 на віддалений порт 18789 |
| `ssh -N` | SSH без виконання віддалених команд (лише переспрямування портів) |
| `KeepAlive` | Автоматично перезапускає тунель, якщо він падає |
| `RunAtLoad` | Запускає тунель, коли LaunchAgent завантажується під час входу |
## Пов’язане

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -5,10 +5,10 @@ read_when:
summary: 'Plugin Google Meet: приєднання до явних URL-адрес Meet через Chrome або Twilio з типовими налаштуваннями голосу в реальному часі'
title: Plugin Google Meet
x-i18n:
generated_at: "2026-04-24T05:27:41Z"
generated_at: "2026-04-24T06:45:22Z"
model: gpt-5.4
provider: openai
source_hash: ab439b777e3043cc647a29e8e17b2794d14f48deceaadf8f81a014dd44583e23
source_hash: f0bf06b7ab585bf2dc9dbf6d890e1954e89e4deea148380e350d2d7f4d954f5e
source_path: plugins/google-meet.md
workflow: 15
---
@ -17,28 +17,28 @@ x-i18n:
Підтримка учасника Google Meet для OpenClaw.
Plugin є навмисно явним:
Plugin є навмисно явним за задумом:
- Він приєднується лише до явної URL-адреси `https://meet.google.com/...`.
- Голос у режимі `realtime` є режимом за замовчуванням.
- Голос у режимі realtime може звертатися назад до повного агента OpenClaw, коли потрібні глибші міркування або інструменти.
- Він приєднується лише за явним URL `https://meet.google.com/...`.
- Голосовий режим `realtime` є режимом за замовчуванням.
- Голосовий режим реального часу може повертатися до повного агента OpenClaw, коли потрібні глибші міркування або інструменти.
- Автентифікація починається з особистого Google OAuth або вже виконаного входу в профіль Chrome.
- Автоматичного оголошення згоди немає.
- Типовий аудіобекенд Chrome — `BlackHole 2ch`.
- Chrome може працювати локально або на спареному хості Node.
- Типовим аудіобекендом Chrome є `BlackHole 2ch`.
- Chrome може працювати локально або на підключеному вузлі.
- Twilio приймає номер для дозвону та необов’язкову послідовність PIN або DTMF.
- Команда CLI — `googlemeet`; `meet` зарезервовано для ширших робочих процесів телеконференцій агента.
## Швидкий старт
Установіть локальні аудіозалежності та переконайтеся, що провайдер realtime може використовувати OpenAI:
Встановіть локальні аудіозалежності та переконайтеся, що постачальник `realtime` може використовувати OpenAI:
```bash
brew install blackhole-2ch sox
export OPENAI_API_KEY=sk-...
```
`blackhole-2ch` установлює віртуальний аудіопристрій `BlackHole 2ch`. Інсталятор Homebrew вимагає перезавантаження, перш ніж macOS покаже цей пристрій:
`blackhole-2ch` встановлює віртуальний аудіопристрій `BlackHole 2ch`. Встановлювач Homebrew потребує перезавантаження, перш ніж macOS покаже цей пристрій:
```bash
sudo reboot
@ -87,19 +87,19 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij
}
```
Chrome приєднується як профіль Chrome, у якому виконано вхід. У Meet виберіть `BlackHole 2ch` для шляху мікрофона/динаміка, який використовує OpenClaw. Для чистого двостороннього аудіо використовуйте окремі віртуальні пристрої або граф у стилі Loopback; одного пристрою BlackHole достатньо для першого smoke-тесту, але може виникати луна.
Chrome приєднується як профіль Chrome, у якому виконано вхід. У Meet виберіть `BlackHole 2ch` для шляху мікрофона/динаміка, який використовує OpenClaw. Для чистого дуплексного звуку використовуйте окремі віртуальні пристрої або граф у стилі Loopback; одного пристрою BlackHole достатньо для першого smoke-тесту, але він може давати відлуння.
### Локальний Gateway + Chrome у Parallels
### Локальний Gateway + Parallels Chrome
Вам **не** потрібні повний Gateway OpenClaw або API-ключ моделі всередині macOS VM лише для того, щоб VM володіла Chrome. Запустіть Gateway та агента локально, а потім запустіть хост Node у VM. Один раз увімкніть вбудований Plugin у VM, щоб Node рекламував команду Chrome:
Вам **не** потрібен повний Gateway OpenClaw або ключ API моделі всередині macOS VM лише для того, щоб у VM був Chrome. Запустіть Gateway і агента локально, а потім запустіть хост вузла у VM. Один раз увімкніть вбудований Plugin у VM, щоб вузол рекламував команду Chrome:
Що де працює:
Що де виконується:
- Хост Gateway: Gateway OpenClaw, робочий простір агента, ключі моделі/API, провайдер realtime і конфігурація Plugin Google Meet.
- macOS VM у Parallels: CLI OpenClaw/хост Node, Google Chrome, SoX, BlackHole 2ch і профіль Chrome із виконаним входом у Google.
- Не потрібно у VM: сервіс Gateway, конфігурація агента, ключ OpenAI/GPT або налаштування провайдера моделі.
- Хост Gateway: Gateway OpenClaw, робочий простір агента, ключі моделі/API, постачальник `realtime` і конфігурація Plugin Google Meet.
- macOS VM у Parallels: CLI/хост вузла OpenClaw, Google Chrome, SoX, BlackHole 2ch і профіль Chrome, у якому виконано вхід у Google.
- Не потрібно у VM: служба Gateway, конфігурація агента, ключ OpenAI/GPT або налаштування постачальника моделі.
Установіть залежності у VM:
Встановіть залежності у VM:
```bash
brew install blackhole-2ch sox
@ -118,26 +118,26 @@ system_profiler SPAudioDataType | grep -i BlackHole
command -v rec play
```
Установіть або оновіть OpenClaw у VM, а потім увімкніть там вбудований Plugin:
Встановіть або оновіть OpenClaw у VM, а потім увімкніть там вбудований Plugin:
```bash
openclaw plugins enable google-meet
```
Запустіть хост Node у VM:
Запустіть хост вузла у VM:
```bash
openclaw node run --host <gateway-host> --port 18789 --display-name parallels-macos
```
Якщо `<gateway-host>` — це LAN IP і ви не використовуєте TLS, Node відхиляє незашифрований WebSocket, якщо ви явно не дозволите це для цієї довіреної приватної мережі:
Якщо `<gateway-host>` — це IP-адреса LAN і ви не використовуєте TLS, вузол відхиляє простий WebSocket, якщо ви явно не дозволите це для цієї довіреної приватної мережі:
```bash
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \
openclaw node run --host <gateway-lan-ip> --port 18789 --display-name parallels-macos
```
Використовуйте ту саму змінну середовища під час встановлення Node як LaunchAgent:
Використовуйте ту саму змінну середовища під час встановлення вузла як LaunchAgent:
```bash
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \
@ -145,20 +145,22 @@ OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \
openclaw node restart
```
Схваліть Node з хоста Gateway:
`OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1` — це середовище процесу, а не параметр `openclaw.json`. `openclaw node install` зберігає його в середовищі LaunchAgent, якщо воно присутнє в команді встановлення.
Схваліть вузол з хоста Gateway:
```bash
openclaw devices list
openclaw devices approve <requestId>
```
Підтвердьте, що Gateway бачить Node і що він рекламує `googlemeet.chrome`:
Підтвердьте, що Gateway бачить вузол і що він рекламує `googlemeet.chrome`:
```bash
openclaw nodes status
```
Спрямуйте Meet через цей Node на хості Gateway:
Спрямуйте Meet через цей вузол на хості Gateway:
```json5
{
@ -183,7 +185,7 @@ openclaw nodes status
}
```
Тепер приєднуйтеся як звичайно з хоста Gateway:
Тепер приєднуйтеся звичайним способом із хоста Gateway:
```bash
openclaw googlemeet join https://meet.google.com/abc-defg-hij
@ -191,29 +193,29 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij
або попросіть агента використати інструмент `google_meet` із `transport: "chrome-node"`.
Якщо `chromeNode.node` пропущено, OpenClaw автоматично вибирає Node лише тоді, коли рівно один підключений Node рекламує `googlemeet.chrome`. Якщо підключено кілька сумісних Node, задайте `chromeNode.node` як id Node, відображуване ім’я або віддалену IP-адресу.
Якщо `chromeNode.node` не вказано, OpenClaw виконує автовибір лише тоді, коли рівно один підключений вузол рекламує `googlemeet.chrome`. Якщо підключено кілька сумісних вузлів, задайте `chromeNode.node` як id вузла, відображуване ім’я або віддалену IP-адресу.
Поширені перевірки збоїв:
Типові перевірки збоїв:
- `No connected Google Meet-capable node`: запустіть `openclaw node run` у VM, схваліть спарювання та переконайтеся, що у VM було виконано `openclaw plugins enable google-meet`. Також підтвердьте, що хост Gateway дозволяє команду Node через `gateway.nodes.allowCommands: ["googlemeet.chrome"]`.
- `BlackHole 2ch audio device not found on the node`: установіть `blackhole-2ch` у VM і перезавантажте VM.
- Chrome відкривається, але не може приєднатися: увійдіть у Chrome всередині VM і підтвердьте, що цей профіль може вручну приєднатися за URL-адресою Meet.
- Немає звуку: у Meet спрямовуйте мікрофон/динамік через шлях віртуального аудіопристрою, який використовує OpenClaw; використовуйте окремі віртуальні пристрої або маршрутизацію у стилі Loopback для чистого двостороннього аудіо.
- `No connected Google Meet-capable node`: запустіть `openclaw node run` у VM, схваліть сполучення й переконайтеся, що у VM було виконано `openclaw plugins enable google-meet`. Також підтвердьте, що хост Gateway дозволяє команду вузла за допомогою `gateway.nodes.allowCommands: ["googlemeet.chrome"]`.
- `BlackHole 2ch audio device not found on the node`: встановіть `blackhole-2ch` у VM і перезавантажте VM.
- Chrome відкривається, але не може приєднатися: увійдіть у Chrome всередині VM і підтвердьте, що цей профіль може вручну приєднатися до URL Meet.
- Немає звуку: у Meet спрямуйте мікрофон/динамік через шлях віртуального аудіопристрою, який використовує OpenClaw; для чистого дуплексу використовуйте окремі віртуальні пристрої або маршрутизацію у стилі Loopback.
## Примітки щодо встановлення
Типовий режим realtime для Chrome використовує два зовнішні інструменти:
Типовий режим Chrome `realtime` використовує два зовнішні інструменти:
- `sox`: утиліта командного рядка для роботи з аудіо. Plugin використовує її команди `rec` і `play` для типового аудіомоста 8 кГц G.711 mu-law.
- `blackhole-2ch`: віртуальний аудіодрайвер macOS. Він створює аудіопристрій `BlackHole 2ch`, через який можна маршрутизувати Chrome/Meet.
- `sox`: утиліта командного рядка для роботи з аудіо. Plugin використовує її команди `rec` і `play` для типового аудіомосту 8 кГц G.711 mu-law.
- `blackhole-2ch`: віртуальний аудіодрайвер macOS. Він створює аудіопристрій `BlackHole 2ch`, через який можуть працювати Chrome/Meet.
OpenClaw не постачає в комплекті та не розповсюджує жоден із цих пакетів. У документації користувачам пропонується встановити їх як залежності хоста через Homebrew. SoX ліцензовано як `LGPL-2.0-only AND GPL-2.0-only`; BlackHole — GPL-3.0. Якщо ви збираєте інсталятор або appliance, що постачається з BlackHole разом з OpenClaw, перегляньте умови ліцензування BlackHole в оригінальному проєкті або отримайте окрему ліцензію від Existential Audio.
OpenClaw не постачає і не розповсюджує жоден із цих пакетів. Документація пропонує користувачам установлювати їх як залежності хоста через Homebrew. SoX ліцензовано як `LGPL-2.0-only AND GPL-2.0-only`; BlackHole — GPL-3.0. Якщо ви створюєте інсталятор або appliance, що постачає BlackHole разом з OpenClaw, перегляньте вихідні умови ліцензування BlackHole або отримайте окрему ліцензію від Existential Audio.
## Транспорти
### Chrome
Транспорт Chrome відкриває URL-адресу Meet у Google Chrome і приєднується як профіль Chrome, у якому виконано вхід. У macOS Plugin перед запуском перевіряє наявність `BlackHole 2ch`. Якщо налаштовано, він також запускає команду перевірки стану аудіомоста та команду запуску перед відкриттям Chrome. Використовуйте `chrome`, коли Chrome/аудіо працюють на хості Gateway; використовуйте `chrome-node`, коли Chrome/аудіо працюють на спареному Node, наприклад у macOS VM Parallels.
Транспорт Chrome відкриває URL Meet у Google Chrome і приєднується як профіль Chrome, у якому виконано вхід. У macOS Plugin перевіряє наявність `BlackHole 2ch` перед запуском. Якщо налаштовано, він також виконує команду перевірки стану аудіомосту та команду запуску перед відкриттям Chrome. Використовуйте `chrome`, коли Chrome/аудіо працюють на хості Gateway; використовуйте `chrome-node`, коли Chrome/аудіо працюють на підключеному вузлі, наприклад у macOS VM Parallels.
```bash
openclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chrome
@ -224,7 +226,7 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chrome
### Twilio
Транспорт Twilio — це строгий план дозвону, делегований Plugin Voice Call. Він не аналізує сторінки Meet у пошуку телефонних номерів.
Транспорт Twilio — це строгий план набору, делегований Plugin Voice Call. Він не аналізує сторінки Meet у пошуку телефонних номерів.
```bash
openclaw googlemeet join https://meet.google.com/abc-defg-hij \
@ -233,7 +235,7 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \
--pin 123456
```
Використовуйте `--dtmf-sequence`, коли зустріч потребує спеціальної послідовності:
Використовуйте `--dtmf-sequence`, якщо зустріч вимагає спеціальної послідовності:
```bash
openclaw googlemeet join https://meet.google.com/abc-defg-hij \
@ -244,15 +246,15 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \
## OAuth і попередня перевірка
Доступ до Google Meet Media API спочатку використовує особистий OAuth-клієнт. Налаштуйте `oauth.clientId` і, за потреби, `oauth.clientSecret`, а потім виконайте:
Доступ до Google Meet Media API спочатку використовує особистий клієнт OAuth. Налаштуйте `oauth.clientId` і, за потреби, `oauth.clientSecret`, а потім виконайте:
```bash
openclaw googlemeet auth login --json
```
Команда виводить блок конфігурації `oauth` із токеном оновлення. Вона використовує PKCE, callback localhost на `http://localhost:8085/oauth2callback` і ручний потік копіювання/вставлення з `--manual`.
Команда виводить блок конфігурації `oauth` із refresh token. Вона використовує PKCE, зворотний виклик localhost на `http://localhost:8085/oauth2callback` і ручний процес копіювання/вставлення з `--manual`.
Як резервні варіанти приймаються такі змінні середовища:
Ці змінні середовища приймаються як резервні варіанти:
- `OPENCLAW_GOOGLE_MEET_CLIENT_ID` або `GOOGLE_MEET_CLIENT_ID`
- `OPENCLAW_GOOGLE_MEET_CLIENT_SECRET` або `GOOGLE_MEET_CLIENT_SECRET`
@ -263,23 +265,23 @@ openclaw googlemeet auth login --json
- `OPENCLAW_GOOGLE_MEET_DEFAULT_MEETING` або `GOOGLE_MEET_DEFAULT_MEETING`
- `OPENCLAW_GOOGLE_MEET_PREVIEW_ACK` або `GOOGLE_MEET_PREVIEW_ACK`
Розв’яжіть URL-адресу Meet, код або `spaces/{id}` через `spaces.get`:
Розв’яжіть URL Meet, код або `spaces/{id}` через `spaces.get`:
```bash
openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij
```
Перед роботою з медіа виконайте попередню перевірку:
Виконайте попередню перевірку перед роботою з медіа:
```bash
openclaw googlemeet preflight --meeting https://meet.google.com/abc-defg-hij
```
Установлюйте `preview.enrollmentAcknowledged: true` лише після підтвердження, що ваш Cloud project, суб’єкт OAuth і учасники зустрічі зареєстровані в Google Workspace Developer Preview Program для Meet media APIs.
Установлюйте `preview.enrollmentAcknowledged: true` лише після підтвердження, що ваш Cloud project, принципал OAuth і учасники зустрічі зареєстровані в Google Workspace Developer Preview Program для Meet media APIs.
## Конфігурація
Поширеному режиму realtime для Chrome потрібні лише увімкнений Plugin, BlackHole, SoX і ключ OpenAI:
Поширеному шляху Chrome `realtime` потрібні лише увімкнений Plugin, BlackHole, SoX і ключ OpenAI:
```bash
brew install blackhole-2ch sox
@ -301,11 +303,11 @@ export OPENAI_API_KEY=sk-...
}
```
Типові значення:
Значення за замовчуванням:
- `defaultTransport: "chrome"`
- `defaultMode: "realtime"`
- `chromeNode.node`: необов’язковий id/ім’я/IP Node для `chrome-node`
- `chromeNode.node`: необов’язковий id/ім’я/IP вузла для `chrome-node`
- `chrome.audioBackend: "blackhole-2ch"`
- `chrome.audioInputCommand`: команда SoX `rec`, що записує аудіо 8 кГц G.711 mu-law у stdout
- `chrome.audioOutputCommand`: команда SoX `play`, що читає аудіо 8 кГц G.711 mu-law зі stdin
@ -361,39 +363,53 @@ export OPENAI_API_KEY=sk-...
}
```
Використовуйте `transport: "chrome"`, коли Chrome працює на хості Gateway. Використовуйте `transport: "chrome-node"`, коли Chrome працює на спареному Node, наприклад у Parallels VM. В обох випадках модель realtime і `openclaw_agent_consult` працюють на хості Gateway, тому облікові дані моделі залишаються там.
Використовуйте `transport: "chrome"`, коли Chrome працює на хості Gateway. Використовуйте `transport: "chrome-node"`, коли Chrome працює на підключеному вузлі, наприклад у Parallels VM. В обох випадках модель `realtime` і `openclaw_agent_consult` працюють на хості Gateway, тому облікові дані моделі залишаються там.
Використовуйте `action: "status"`, щоб перелічити активні сесії або перевірити id сесії. Використовуйте `action: "leave"`, щоб позначити сесію як завершену.
Використовуйте `action: "status"`, щоб перелічити активні сесії або перевірити ідентифікатор сесії. Використовуйте `action: "leave"`, щоб позначити сесію завершеною.
## Консультація агента в realtime
## Консультація агента в режимі реального часу
Режим realtime для Chrome оптимізовано для живого голосового циклу. Провайдер голосу realtime чує аудіо зустрічі та говорить через налаштований аудіоміст. Коли моделі realtime потрібні глибші міркування, актуальна інформація або звичайні інструменти OpenClaw, вона може викликати `openclaw_agent_consult`.
Режим Chrome `realtime` оптимізовано для живого голосового циклу. Постачальник голосу реального часу чує аудіо зустрічі та говорить через налаштований аудіоміст. Коли моделі реального часу потрібні глибші міркування, актуальна інформація або звичайні інструменти OpenClaw, вона може викликати `openclaw_agent_consult`.
Інструмент consult запускає за лаштунками звичайного агента OpenClaw із контекстом недавньої стенограми зустрічі та повертає стислу усну відповідь до голосової сесії realtime. Потім голосова модель може озвучити цю відповідь назад у зустріч.
Інструмент консультації запускає звичайного агента OpenClaw у фоновому режимі з контекстом нещодавньої стенограми зустрічі й повертає стислу усну відповідь до голосової сесії реального часу. Потім голосова модель може озвучити цю відповідь назад у зустріч.
`realtime.toolPolicy` керує запуском consult:
`realtime.toolPolicy` керує запуском консультації:
- `safe-read-only`: надавати інструмент consult і обмежувати звичайного агента інструментами `read`, `web_search`, `web_fetch`, `x_search`, `memory_search` і `memory_get`.
- `owner`: надавати інструмент consult і дозволяти звичайному агенту використовувати звичайну політику інструментів агента.
- `none`: не надавати інструмент consult голосовій моделі realtime.
- `safe-read-only`: показувати інструмент консультації та обмежувати звичайного агента інструментами
`read`, `web_search`, `web_fetch`, `x_search`, `memory_search` і
`memory_get`.
- `owner`: показувати інструмент консультації та дозволяти звичайному агенту використовувати нормальну
політику інструментів агента.
- `none`: не показувати інструмент консультації моделі голосу реального часу.
Ключ сесії consult має область дії в межах сесії Meet, тому подальші виклики consult можуть повторно використовувати попередній контекст consult протягом тієї самої зустрічі.
Ключ сесії консультації має область дії в межах кожної сесії Meet, тому повторні виклики консультації
можуть повторно використовувати попередній контекст консультації під час тієї самої зустрічі.
## Примітки
Офіційний media API Google Meet орієнтований на отримання, тому для мовлення в дзвінок Meet усе ще потрібен шлях учасника. Цей Plugin зберігає цю межу видимою: Chrome обробляє участь через браузер і локальну маршрутизацію аудіо; Twilio обробляє участь через телефонний дозвін.
Офіційний media API Google Meet орієнтований на прийом, тому для мовлення в
виклику Meet усе ще потрібен шлях учасника. Цей Plugin зберігає цю межу видимою:
Chrome обробляє участь через браузер і локальну маршрутизацію аудіо; Twilio обробляє
участь через телефонний дозвін.
Режиму realtime для Chrome потрібен один із варіантів:
Режиму Chrome `realtime` потрібно одне з такого:
- `chrome.audioInputCommand` плюс `chrome.audioOutputCommand`: OpenClaw керує мостом моделі realtime і передає аудіо 8 кГц G.711 mu-law між цими командами та вибраним провайдером голосу realtime.
- `chrome.audioBridgeCommand`: зовнішня команда моста керує всім локальним аудіошляхом і має завершитися після запуску або перевірки свого демона.
- `chrome.audioInputCommand` плюс `chrome.audioOutputCommand`: OpenClaw керує
мостом моделі реального часу та передає аудіо 8 кГц G.711 mu-law між цими
командами й вибраним постачальником голосу реального часу.
- `chrome.audioBridgeCommand`: зовнішня команда мосту керує всім локальним
аудіошляхом і має завершитися після запуску або перевірки свого демона.
Для чистого двостороннього аудіо маршрутизуйте вихід Meet і мікрофон Meet через окремі віртуальні пристрої або граф віртуальних пристроїв у стилі Loopback. Один спільний пристрій BlackHole може повертати голоси інших учасників назад у дзвінок.
Для чистого дуплексного аудіо спрямовуйте вихід Meet і мікрофон Meet через окремі
віртуальні пристрої або граф віртуальних пристроїв у стилі Loopback. Один спільний
пристрій BlackHole може повертати голоси інших учасників назад у виклик.
`googlemeet leave` зупиняє realtime аудіоміст пари команд для сесій Chrome. Для сесій Twilio, делегованих через Plugin Voice Call, він також завершує базовий голосовий виклик.
`googlemeet leave` зупиняє аудіоміст реального часу для сесій Chrome, який
працює через пару команд. Для сесій Twilio, делегованих через Plugin Voice Call, він також
завершує базовий голосовий виклик.
## Пов’язане
- [Plugin Voice Call](/uk/plugins/voice-call)
- [Режим розмови](/uk/nodes/talk)
- [Створення Plugin](/uk/plugins/building-plugins)
- [Режим Talk](/uk/nodes/talk)
- [Створення plugin](/uk/plugins/building-plugins)

View File

@ -1,219 +1,224 @@
---
read_when:
- Шукаю визначення публічних каналів випуску
- Шукаю називання версій і частоту випусків
summary: Публічні канали випуску, називання версій і частота випусків
title: Політика випусків
- Шукаю визначення публічних каналів релізів
- Шукаю назви версій і каденцію
summary: Публічні канали релізів, назви версій і каденція
title: Політика релізів
x-i18n:
generated_at: "2026-04-24T05:03:59Z"
generated_at: "2026-04-24T06:45:24Z"
model: gpt-5.4
provider: openai
source_hash: 32c6d904e21f6d4150cf061ae27594bc2364f0927c48388362b16d8bf97491dc
source_hash: 2cba6cd02c6fb2380abd8d46e10567af2f96c7c6e45236689d69289348b829ce
source_path: reference/RELEASING.md
workflow: 15
---
OpenClaw має три публічні канали випуску:
OpenClaw має три публічні канали релізів:
- stable: теговані випуски, які за замовчуванням публікуються в npm `beta`, або в npm `latest`, якщо це явно запитано
- beta: теги попередніх випусків, які публікуються в npm `beta`
- stable: теговані релізи, які за замовчуванням публікуються в npm `beta`, або в npm `latest`, якщо це явно запитано
- beta: теги попередніх релізів, які публікуються в npm `beta`
- dev: рухома вершина `main`
## Називання версій
## Назви версій
- Версія stable-випуску: `YYYY.M.D`
- Версія stable-релізу: `YYYY.M.D`
- Git-тег: `vYYYY.M.D`
- Версія stable-коригувального випуску: `YYYY.M.D-N`
- Версія stable-коригувального релізу: `YYYY.M.D-N`
- Git-тег: `vYYYY.M.D-N`
- Версія beta-попереднього випуску: `YYYY.M.D-beta.N`
- Версія beta-попереднього релізу: `YYYY.M.D-beta.N`
- Git-тег: `vYYYY.M.D-beta.N`
- Не доповнюйте місяць або день нулями
- `latest` означає поточний підвищений stable-випуск npm
- Не додавайте нулі на початку місяця або дня
- `latest` означає поточний просунутий stable-реліз npm
- `beta` означає поточну ціль встановлення beta
- Stable і stable-коригувальні випуски за замовчуванням публікуються в npm `beta`; оператори випуску можуть явно вибрати `latest` або пізніше підвищити перевірену beta-збірку
- Кожен stable-випуск OpenClaw постачається разом із npm-пакетом і застосунком macOS;
beta-випуски зазвичай спочатку перевіряють і публікують шлях npm/package, а
збірка/підпис/нотаризація mac-застосунку залишаються для stable, якщо інше
- Stable і stable-коригувальні релізи за замовчуванням публікуються в npm `beta`; оператори релізу можуть явно націлити `latest` або пізніше просунути перевірену beta-збірку
- Кожен stable-реліз OpenClaw постачається разом із npm-пакетом і застосунком macOS;
beta-релізи зазвичай спочатку перевіряють і публікують шлях npm/package, а
збірка/підпис/нотаризація mac-застосунку зарезервовані для stable, якщо це
не запитано явно
## Частота випусків
## Каденція релізів
- Випуски спочатку проходять через beta
- Stable випускається лише після перевірки останньої beta
- Підтримувачі зазвичай роблять випуски з гілки `release/YYYY.M.D`, створеної
з поточної `main`, щоб перевірка випуску та виправлення не блокували нову
- Релізи спочатку проходять через beta
- Stable іде лише після перевірки найновішої beta
- Мейнтейнери зазвичай вирізають релізи з гілки `release/YYYY.M.D`, створеної
з поточного `main`, щоб перевірка релізу та виправлення не блокували нову
розробку в `main`
- Якщо beta-тег уже було запушено або опубліковано й він потребує виправлення,
підтримувачі створюють наступний тег `-beta.N` замість видалення або
- Якщо beta-тег уже було надіслано або опубліковано й він потребує виправлення,
мейнтейнери вирізають наступний тег `-beta.N` замість видалення або
перевідтворення старого beta-тега
- Детальна процедура випуску, погодження, облікові дані та нотатки щодо
відновлення доступні лише підтримувачам
- Детальна процедура релізу, погодження, облікові дані й примітки щодо
відновлення доступні лише для мейнтейнерів
## Передстартова перевірка випуску
## Передрелізна перевірка
- Запустіть `pnpm check:test-types` перед передстартовою перевіркою випуску, щоб
- Запустіть `pnpm check:test-types` перед передрелізною перевіркою, щоб
тестовий TypeScript залишався покритим поза швидшим локальним бар’єром
`pnpm check`
- Запустіть `pnpm check:architecture` перед передстартовою перевіркою випуску,
щоб ширші перевірки циклів імпорту та меж архітектури були зеленими поза
- Запустіть `pnpm check:architecture` перед передрелізною перевіркою, щоб
ширші перевірки циклів імпортів і меж архітектури були зеленими поза
швидшим локальним бар’єром
- Запустіть `pnpm build && pnpm ui:build` перед `pnpm release:check`, щоб
очікувані артефакти випуску `dist/*` і збірка Control UI були наявні для
кроку перевірки pack
- Запускайте `pnpm release:check` перед кожним тегованим випуском
- Перевірки випуску тепер виконуються в окремому ручному workflow:
очікувані артефакти релізу `dist/*` і бандл Control UI існували для кроку
перевірки пакування
- Запускайте `pnpm release:check` перед кожним тегованим релізом
- Перевірки релізу тепер запускаються в окремому ручному workflow:
`OpenClaw Release Checks`
- `OpenClaw Release Checks` також запускає бар’єр паритету моків QA Lab, а
також live-канали QA Matrix і Telegram перед погодженням випуску. Live-канали
- `OpenClaw Release Checks` також запускає бар’єр паритету QA Lab mock, а також
live-канали QA Matrix і Telegram перед погодженням релізу. Live-канали
використовують середовище `qa-live-shared`; Telegram також використовує
оренду облікових даних Convex CI.
- Крос-ОС перевірка встановлення, оновлення та виконання запускається з
приватного caller-workflow
оренди облікових даних Convex CI.
- Міжплатформова перевірка встановлення й оновлення під час виконання
диспетчеризується з приватного workflow-ініціатора
`openclaw/releases-private/.github/workflows/openclaw-cross-os-release-checks.yml`,
який викликає повторно використовуваний публічний workflow
`.github/workflows/openclaw-cross-os-release-checks-reusable.yml`
- Такий поділ навмисний: він зберігає реальний шлях npm-випуску коротким,
детермінованим і сфокусованим на артефактах, тоді як повільніші live-перевірки
залишаються у власному каналі, щоб не затримувати й не блокувати публікацію
- Перевірки випуску мають запускатися з workflow-ref `main` або з workflow-ref
`release/YYYY.M.D`, щоб логіка workflow і секрети залишалися контрольованими
- Цей workflow приймає або наявний тег випуску, або поточний повний 40-символьний
SHA коміту гілки workflow
- У режимі commit-SHA він приймає лише поточний HEAD гілки workflow; для
старіших комітів випуску використовуйте тег випуску
- Передстартова перевірка лише для валідації `OpenClaw NPM Release` також
приймає поточний повний 40-символьний SHA коміту гілки workflow без
необхідності запушеного тега
- Цей шлях SHA призначений лише для валідації та не може бути підвищений до
- Цей поділ навмисний: зберігати реальний шлях npm-релізу коротким,
детермінованим і зосередженим на артефактах, тоді як повільніші live-перевірки
лишаються у власному каналі, щоб не затримувати й не блокувати публікацію
- Перевірки релізу мають запускатися з workflow-ref гілки `main` або з
workflow-ref `release/YYYY.M.D`, щоб логіка workflow і секрети лишалися
контрольованими
- Цей workflow приймає або наявний тег релізу, або поточний повний
40-символьний SHA коміту workflow-гілки
- У режимі commit-SHA він приймає лише поточний HEAD workflow-гілки; для
старіших комітів релізу використовуйте тег релізу
- Передрелізна перевірка лише для валідації `OpenClaw NPM Release` також
приймає поточний повний 40-символьний SHA коміту workflow-гілки без потреби
в уже надісланому тегі
- Цей шлях SHA призначений лише для валідації й не може бути просунутий до
реальної публікації
- У режимі SHA workflow синтезує `v<package.json version>` лише для перевірки
метаданих пакета; реальна публікація все одно потребує реального тега випуску
- Обидва workflow зберігають реальний шлях публікації та підвищення на
GitHub-hosted runner-ах, тоді як шлях немутувальної валідації може
використовувати більші Blacksmith Linux runner-и
метаданих пакета; реальна публікація все одно вимагає реального тега релізу
- Обидва workflow зберігають реальний шлях публікації й просування на
GitHub-hosted runners, тоді як немутуючий шлях валідації може використовувати
більші Linux-ранери Blacksmith
- Цей workflow запускає
`OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_CACHE_TEST=1 pnpm test:live:cache`
з використанням секретів workflow `OPENAI_API_KEY` і `ANTHROPIC_API_KEY`
- Передстартова npm-перевірка більше не чекає на окремий канал перевірок випуску
з використанням обох workflow-секретів `OPENAI_API_KEY` і `ANTHROPIC_API_KEY`
- Передрелізна перевірка npm більше не очікує на окремий канал перевірок релізу
- Запустіть `RELEASE_TAG=vYYYY.M.D node --import tsx scripts/openclaw-npm-release-check.ts`
(або відповідний beta/коригувальний тег) перед погодженням
- Після npm-публікації запустіть
- Після публікації в npm запустіть
`node --import tsx scripts/openclaw-npm-postpublish-verify.ts YYYY.M.D`
(або відповідну beta/коригувальну версію), щоб перевірити шлях встановлення
з опублікованого реєстру у свіжому тимчасовому префіксі
- Після beta-публікації запустіть `OPENCLAW_NPM_TELEGRAM_PACKAGE_SPEC=openclaw@YYYY.M.D-beta.N pnpm test:docker:npm-telegram-live`
для перевірки онбордингу встановленого пакета, налаштування Telegram і
реального Telegram E2E щодо опублікованого npm-пакета.
- Автоматизація випусків підтримувачів тепер використовує схему
(або відповідну beta/коригувальну версію), щоб перевірити опублікований шлях
встановлення з реєстру в новому тимчасовому префіксі
- Після beta-публікації запустіть `OPENCLAW_NPM_TELEGRAM_PACKAGE_SPEC=openclaw@YYYY.M.D-beta.N OPENCLAW_NPM_TELEGRAM_CREDENTIAL_SOURCE=convex OPENCLAW_NPM_TELEGRAM_CREDENTIAL_ROLE=ci pnpm test:docker:npm-telegram-live`
щоб перевірити онбординг установленого пакета, налаштування Telegram і
реальний Telegram E2E для опублікованого npm-пакета з використанням спільного
пулу орендованих облікових даних Telegram. Локальні одноразові перевірки
мейнтейнерів можуть опустити змінні Convex і напряму передати три облікові
змінні середовища `OPENCLAW_QA_TELEGRAM_*`.
- Мейнтейнери можуть запускати ту саму перевірку після публікації через ручний
workflow GitHub Actions `NPM Telegram Beta E2E`. Він навмисно лише ручний і
не запускається на кожному merge.
- Автоматизація релізів мейнтейнерів тепер використовує підхід
preflight-then-promote:
- реальна npm-публікація має пройти успішний npm `preflight_run_id`
- реальна npm-публікація має бути запущена з тієї самої гілки `main` або
`release/YYYY.M.D`, що й успішний запуск preflight
- stable npm-випуски за замовчуванням використовують `beta`
- stable npm-публікація може явно вибирати `latest` через вхід workflow
- мутація npm dist-tag на основі токена тепер розташована в
- реальна публікація в npm має пройти успішний npm `preflight_run_id`
- реальна публікація в npm має запускатися з тієї самої гілки `main` або
`release/YYYY.M.D`, що й успішний передрелізний прогін
- stable npm-релізи за замовчуванням націлені на `beta`
- stable npm-публікація може явно націлювати `latest` через вхід workflow
- мутація npm dist-tag на основі токена тепер знаходиться в
`openclaw/releases-private/.github/workflows/openclaw-npm-dist-tags.yml`
з міркувань безпеки, оскільки `npm dist-tag add` усе ще потребує `NPM_TOKEN`,
тоді як публічний репозиторій зберігає публікацію лише через OIDC
- публічний `macOS Release` призначений лише для валідації
- реальна приватна mac-публікація має пройти успішні приватні mac
`preflight_run_id` і `validate_run_id`
- реальні шляхи публікації підвищують підготовлені артефакти замість
повторної їх збірки
- Для stable-коригувальних випусків, таких як `YYYY.M.D-N`, верифікатор після
- реальні шляхи публікації просувають підготовлені артефакти замість їх
повторної збірки
- Для stable-коригувальних релізів на кшталт `YYYY.M.D-N` перевіряльник після
публікації також перевіряє той самий шлях оновлення в тимчасовому префіксі з
`YYYY.M.D` до `YYYY.M.D-N`, щоб коригувальні випуски не могли непомітно
залишити старіші глобальні встановлення на базовому stable-корисному
навантаженні
- Передстартова npm-перевірка завершується з fail closed, якщо tarball не
містить одночасно `dist/control-ui/index.html` і непорожнє корисне
`YYYY.M.D` до `YYYY.M.D-N`, щоб коригувальні релізи не могли непомітно
залишити старі глобальні встановлення на базовому stable-вмісті
- Передрелізна перевірка npm завершується відмовою за замовчуванням, якщо
tarball не містить і `dist/control-ui/index.html`, і непорожнє корисне
навантаження `dist/control-ui/assets/`, щоб ми знову не випустили порожню
панель браузера
- Перевірка після публікації також перевіряє, що встановлення з опублікованого
реєстру містить непорожні залежності runtime вбудованих Plugin під
кореневим макетом `dist/*`. Випуск, який постачається з відсутнім або
порожнім корисним навантаженням залежностей вбудованого Plugin,
не проходить postpublish-верифікатор і не може бути підвищений
до `latest`.
- `pnpm test:install:smoke` також примусово застосовує бюджет `unpackedSize`
npm pack до tarball кандидата на оновлення, тож installer e2e виявляє
випадкове роздуття pack ще до шляху публікації випуску
- Якщо робота над випуском торкалася планування CI, маніфестів таймінгів
extension або матриць тестів extension, перед погодженням згенеруйте й
перегляньте належні планувальнику виходи матриці workflow
`checks-node-extensions` з `.github/workflows/ci.yml`, щоб примітки до
випуску не описували застарілу схему CI
- Готовність stable-випуску macOS також включає поверхні оновлювача:
- GitHub-випуск має в підсумку містити запаковані `.zip`, `.dmg` і `.dSYM.zip`
- `appcast.xml` у `main` після публікації має вказувати на новий stable zip
- запакований застосунок має зберігати bundle id не для debug, непорожній
Sparkle feed URL і `CFBundleVersion`, не нижчий за канонічний мінімальний
поріг збірки Sparkle для цієї версії випуску
браузерну панель керування
- Перевірка після публікації також перевіряє, що опубліковане встановлення з
реєстру містить непорожні runtime-залежності вбудованих Plugin у кореневому
макеті `dist/*`. Реліз, який постачається з відсутніми або порожніми
корисними навантаженнями залежностей вбудованих Plugin, не проходить
postpublish-перевірку й не може бути просунутий до `latest`.
- `pnpm test:install:smoke` також застосовує бюджет `unpackedSize` для
кандидатного tarball оновлення npm pack, тож installer e2e виявляє випадкове
роздуття пакета до шляху публікації релізу
- Якщо робота над релізом торкалася планування CI, маніфестів таймінгів
розширень або матриць тестів розширень, перед погодженням згенеруйте й
перегляньте виходи матриці workflow `checks-node-extensions`, якою керує
planner, з `.github/workflows/ci.yml`, щоб примітки до релізу не описували
застарілу схему CI
- Готовність stable-релізу macOS також включає поверхні оновлювача:
- GitHub-реліз має в підсумку містити запаковані `.zip`, `.dmg` і `.dSYM.zip`
- `appcast.xml` у `main` має після публікації вказувати на новий stable zip
- запакований застосунок має зберігати недебажний bundle id, непорожній URL
каналу Sparkle і `CFBundleVersion` на рівні або вище канонічного мінімального
build floor Sparkle для цієї версії релізу
## Вхідні параметри NPM workflow
## Вхідні параметри workflow NPM
`OpenClaw NPM Release` приймає такі керовані оператором вхідні параметри:
`OpenClaw NPM Release` приймає такі вхідні параметри, керовані оператором:
- `tag`: обов’язковий тег випуску, наприклад `v2026.4.2`, `v2026.4.2-1` або
- `tag`: обов’язковий тег релізу, наприклад `v2026.4.2`, `v2026.4.2-1` або
`v2026.4.2-beta.1`; коли `preflight_only=true`, це також може бути поточний
повний 40-символьний SHA коміту гілки workflow для передстартової перевірки
лише для валідації
повний 40-символьний SHA коміту workflow-гілки для передрелізної перевірки
лише з валідацією
- `preflight_only`: `true` для лише валідації/збірки/пакування, `false` для
реального шляху публікації
- `preflight_run_id`: обов’язковий у реальному шляху публікації, щоб workflow
повторно використав підготовлений tarball з успішного запуску preflight
повторно використав підготовлений tarball з успішного передрелізного прогону
- `npm_dist_tag`: цільовий npm-тег для шляху публікації; за замовчуванням `beta`
`OpenClaw Release Checks` приймає такі керовані оператором вхідні параметри:
`OpenClaw Release Checks` приймає такі вхідні параметри, керовані оператором:
- `ref`: наявний тег випуску або поточний повний 40-символьний SHA коміту
`main` для перевірки під час запуску з `main`; із гілки випуску використовуйте
наявний тег випуску або поточний повний 40-символьний SHA коміту гілки випуску
- `ref`: наявний тег релізу або поточний повний 40-символьний SHA коміту
`main` для перевірки під час запуску з `main`; із гілки релізу використовуйте
наявний тег релізу або поточний повний 40-символьний SHA коміту гілки релізу
Правила:
- Stable і коригувальні теги можуть публікуватися або в `beta`, або в `latest`
- Beta-теги попередніх випусків можуть публікуватися лише в `beta`
- Beta-теги попередніх релізів можуть публікуватися лише в `beta`
- Для `OpenClaw NPM Release` повний вхід commit SHA дозволений лише коли
`preflight_only=true`
- `OpenClaw Release Checks` завжди призначений лише для валідації і також
приймає поточний commit SHA гілки workflow
- Режим commit-SHA перевірок випуску також потребує поточного HEAD гілки workflow
- Реальний шлях публікації має використовувати той самий `npm_dist_tag`, що
використовувався під час preflight; workflow перевіряє ці метадані перед
- `OpenClaw Release Checks` завжди призначений лише для валідації та також
приймає поточний SHA коміту workflow-гілки
- Режим commit-SHA перевірок релізу також вимагає поточний HEAD workflow-гілки
- Реальний шлях публікації має використовувати той самий `npm_dist_tag`, що й
під час передрелізної перевірки; workflow перевіряє ці метадані перед
продовженням публікації
## Послідовність stable npm-випуску
## Послідовність stable npm-релізу
Під час створення stable npm-випуску:
Під час вирізання stable npm-релізу:
1. Запустіть `OpenClaw NPM Release` з `preflight_only=true`
- До появи тега можна використовувати поточний повний SHA коміту гілки
workflow для dry run передстартового workflow лише для валідації
2. Виберіть `npm_dist_tag=beta` для звичайного beta-first потоку або `latest`
лише тоді, коли ви навмисно хочете прямої stable-публікації
3. Окремо запустіть `OpenClaw Release Checks` з тим самим тегом або
повним поточним SHA коміту гілки workflow, коли вам потрібне покриття
live prompt cache, паритету QA Lab, Matrix і Telegram
- Це навмисно винесено окремо, щоб live-покриття залишалося доступним без
повторного зв’язування довготривалих або нестабільних перевірок із workflow публікації
- До появи тега ви можете використати поточний повний SHA коміту
workflow-гілки для сухого прогону передрелізного workflow лише з валідацією
2. Виберіть `npm_dist_tag=beta` для звичайного потоку beta-first, або `latest`
лише якщо ви навмисно хочете прямої stable-публікації
3. Запустіть `OpenClaw Release Checks` окремо з тим самим тегом або поточним
повним SHA коміту workflow-гілки, коли вам потрібне live-покриття prompt
cache, паритету QA Lab, Matrix і Telegram
- Це навмисно окремо, щоб live-покриття залишалося доступним без повторного
прив’язування довгих або нестабільних перевірок до workflow публікації
4. Збережіть успішний `preflight_run_id`
5. Знову запустіть `OpenClaw NPM Release` з `preflight_only=false`, тим самим
`tag`, тим самим `npm_dist_tag` і збереженим `preflight_run_id`
6. Якщо випуск потрапив у `beta`, використайте приватний workflow
`openclaw/releases-private/.github/workflows/openclaw-npm-dist-tags.yml`
для підвищення цієї stable-версії з `beta` до `latest`
7. Якщо випуск навмисно було одразу опубліковано в `latest`, а `beta`
має одразу посилатися на ту саму stable-збірку, використайте той самий
приватний workflow, щоб спрямувати обидва dist-tag на stable-версію, або
дозвольте його запланованій self-healing-синхронізації перемістити `beta` пізніше
6. Якщо реліз потрапив у `beta`, використайте приватний workflow
`openclaw/releases-private/.github/workflows/openclaw-npm-dist-tags.yml`,
щоб просунути цю stable-версію з `beta` до `latest`
7. Якщо реліз навмисно було одразу опубліковано в `latest`, а `beta` має одразу
слідувати за тією самою stable-збіркою, використайте той самий приватний
workflow, щоб націлити обидва dist-tag на stable-версію, або дозвольте його
запланованій self-healing синхронізації перемістити `beta` пізніше
Мутація dist-tag розміщена в приватному репозиторії з міркувань безпеки,
оскільки вона все ще потребує `NPM_TOKEN`, тоді як публічний репозиторій
зберігає публікацію лише через OIDC.
Мутація dist-tag винесена в приватний репозиторій з міркувань безпеки, оскільки
вона все ще потребує `NPM_TOKEN`, тоді як публічний репозиторій зберігає
публікацію лише через OIDC.
Це зберігає і шлях прямої публікації, і шлях beta-first-підвищення
задокументованими та видимими для оператора.
Це дозволяє документувати й робити видимими для операторів як шлях прямої
публікації, так і шлях просування beta-first.
## Публічні посилання
@ -224,10 +229,10 @@ OpenClaw має три публічні канали випуску:
- [`scripts/package-mac-dist.sh`](https://github.com/openclaw/openclaw/blob/main/scripts/package-mac-dist.sh)
- [`scripts/make_appcast.sh`](https://github.com/openclaw/openclaw/blob/main/scripts/make_appcast.sh)
Підтримувачі використовують приватну документацію з випусків у
Мейнтейнери використовують приватну документацію релізів у
[`openclaw/maintainers/release/README.md`](https://github.com/openclaw/maintainers/blob/main/release/README.md)
як фактичний runbook.
## Пов’язане
- [Канали випуску](/uk/install/development-channels)
- [Канали релізів](/uk/install/development-channels)