chore(i18n): refresh uk translations
This commit is contained in:
parent
cbdf2a8111
commit
e9280cbf79
@ -1,27 +1,27 @@
|
||||
---
|
||||
read_when:
|
||||
- Ви хочете встановити або керувати плагінами Gateway чи сумісними пакетами
|
||||
- Ви хочете встановити або керувати плагінами Gateway чи сумісними наборами пакунків
|
||||
- Ви хочете налагодити збої завантаження плагінів
|
||||
summary: Довідник CLI для `openclaw plugins` (`list`, `install`, `marketplace`, `uninstall`, `enable`/`disable`, `doctor`)
|
||||
title: Плагіни
|
||||
title: Plugins
|
||||
x-i18n:
|
||||
generated_at: "2026-04-25T17:39:21Z"
|
||||
generated_at: "2026-04-25T18:41:32Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 2ae8f71873fb90dc7acde2ac522228cc60603ba34322e5b6d031e8de7545684e
|
||||
source_hash: 9536d2df20b9284855878dbfc649d7905d6440e9fe8d8d00e63b97c4e428194d
|
||||
source_path: cli/plugins.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# `openclaw plugins`
|
||||
|
||||
Керуйте плагінами Gateway, наборами хуків і сумісними пакетами.
|
||||
Керуйте плагінами Gateway, наборами хуків і сумісними наборами пакунків.
|
||||
|
||||
Пов’язано:
|
||||
|
||||
- Система плагінів: [Плагіни](/uk/tools/plugin)
|
||||
- Сумісність пакетів: [Пакети плагінів](/uk/plugins/bundles)
|
||||
- Маніфест плагіна + схема: [Маніфест плагіна](/uk/plugins/manifest)
|
||||
- Система Plugin: [Plugins](/uk/tools/plugin)
|
||||
- Сумісність наборів пакунків: [Набори пакунків Plugin](/uk/plugins/bundles)
|
||||
- Маніфест Plugin + схема: [Маніфест Plugin](/uk/plugins/manifest)
|
||||
- Посилення безпеки: [Безпека](/uk/gateway/security)
|
||||
|
||||
## Команди
|
||||
@ -48,17 +48,23 @@ openclaw plugins marketplace list <marketplace>
|
||||
openclaw plugins marketplace list <marketplace> --json
|
||||
```
|
||||
|
||||
Вбудовані плагіни постачаються разом з OpenClaw. Деякі з них увімкнені за замовчуванням (наприклад, вбудовані провайдери моделей, вбудовані провайдери мовлення та вбудований браузерний Plugin); інші потребують `plugins enable`.
|
||||
Вбудовані плагіни постачаються разом з OpenClaw. Деякі ввімкнені типово (наприклад,
|
||||
вбудовані провайдери моделей, вбудовані провайдери мовлення та вбудований
|
||||
плагін браузера); інші потребують `plugins enable`.
|
||||
|
||||
Власні плагіни OpenClaw мають постачатися з `openclaw.plugin.json` із вбудованою JSON Schema (`configSchema`, навіть якщо вона порожня). Сумісні пакети натомість використовують власні маніфести пакетів.
|
||||
Нативні плагіни OpenClaw повинні постачатися з `openclaw.plugin.json` із вбудованою JSON
|
||||
Schema (`configSchema`, навіть якщо вона порожня). Сумісні набори пакунків натомість використовують
|
||||
власні маніфести наборів пакунків.
|
||||
|
||||
`plugins list` показує `Format: openclaw` або `Format: bundle`. У докладному виводі list/info також показується підтип пакета (`codex`, `claude` або `cursor`), а також виявлені можливості пакета.
|
||||
`plugins list` показує `Format: openclaw` або `Format: bundle`. Докладний вивід list/info
|
||||
також показує підтип набору пакунків (`codex`, `claude` або `cursor`) плюс виявлені
|
||||
можливості набору пакунків.
|
||||
|
||||
### Встановлення
|
||||
|
||||
```bash
|
||||
openclaw plugins install <package> # спочатку ClawHub, потім npm
|
||||
openclaw plugins install clawhub:<package> # тільки ClawHub
|
||||
openclaw plugins install clawhub:<package> # лише ClawHub
|
||||
openclaw plugins install <package> --force # перезаписати наявне встановлення
|
||||
openclaw plugins install <package> --pin # закріпити версію
|
||||
openclaw plugins install <package> --dangerously-force-unsafe-install
|
||||
@ -68,31 +74,58 @@ openclaw plugins install <plugin> --marketplace <name> # marketplace (явно)
|
||||
openclaw plugins install <plugin> --marketplace https://github.com/<owner>/<repo>
|
||||
```
|
||||
|
||||
Прості назви пакетів спочатку перевіряються в ClawHub, а потім у npm. Примітка щодо безпеки: ставтеся до встановлення плагінів як до запуску коду. Надавайте перевагу закріпленим версіям.
|
||||
Імена пакунків без уточнень спочатку перевіряються в ClawHub, а потім у npm. Примітка щодо безпеки:
|
||||
ставтеся до встановлення плагінів як до виконання коду. Віддавайте перевагу закріпленим версіям.
|
||||
|
||||
Якщо ваш розділ `plugins` підтримується однофайловим `$include`, то `plugins install/update/enable/disable/uninstall` записують зміни безпосередньо до цього включеного файла та не змінюють `openclaw.json`. Кореневі include, масиви include та include із сусідніми перевизначеннями завершуються безпечною відмовою замість сплощення. Підтримувані форми див. у [Config includes](/uk/gateway/configuration).
|
||||
Якщо ваш розділ `plugins` підтримується однофайловим `$include`, `plugins install/update/enable/disable/uninstall` записують зміни до цього включеного файлу та не змінюють `openclaw.json`. Кореневі include, масиви include та include із сусідніми перевизначеннями аварійно зупиняються замість сплощення. Підтримувані форми див. у [Config includes](/uk/gateway/configuration).
|
||||
|
||||
Якщо конфігурація недійсна, `plugins install` зазвичай завершується безпечною відмовою і пропонує спочатку виконати `openclaw doctor --fix`.
|
||||
Якщо конфігурація невалідна, `plugins install` зазвичай аварійно зупиняється та пропонує
|
||||
спочатку виконати `openclaw doctor --fix`. Єдиний задокументований виняток — вузький
|
||||
шлях відновлення для вбудованого плагіна для плагінів, які явно погоджуються на
|
||||
`openclaw.install.allowInvalidConfigRecovery`.
|
||||
|
||||
Єдиний задокументований виняток — вузький шлях відновлення для вбудованих плагінів, які явно вмикають `openclaw.install.allowInvalidConfigRecovery`.
|
||||
`--force` повторно використовує наявну ціль встановлення та перезаписує вже встановлений
|
||||
плагін або набір хуків на місці. Використовуйте його, коли ви навмисно перевстановлюєте
|
||||
той самий id із нового локального шляху, архіву, пакунка ClawHub або npm-артефакту.
|
||||
Для звичайних оновлень уже відстежуваного npm-плагіна віддавайте перевагу
|
||||
`openclaw plugins update <id-or-npm-spec>`.
|
||||
|
||||
`--force` повторно використовує наявну ціль встановлення та перезаписує вже встановлений плагін або набір хуків на місці. Використовуйте цей параметр, коли ви свідомо перевстановлюєте той самий id з нового локального шляху, архіву, пакета ClawHub або артефакту npm. Для звичайних оновлень уже відстежуваного npm-плагіна використовуйте `openclaw plugins update <id-or-npm-spec>`.
|
||||
Якщо ви запускаєте `plugins install` для id плагіна, який уже встановлено, OpenClaw
|
||||
зупиняється та спрямовує вас до `plugins update <id-or-npm-spec>` для звичайного оновлення,
|
||||
або до `plugins install <package> --force`, якщо ви справді хочете перезаписати
|
||||
поточне встановлення з іншого джерела.
|
||||
|
||||
Якщо ви запускаєте `plugins install` для id плагіна, який уже встановлено, OpenClaw зупиняється і спрямовує вас до `plugins update <id-or-npm-spec>` для звичайного оновлення або до `plugins install <package> --force`, якщо ви справді хочете перезаписати поточне встановлення з іншого джерела.
|
||||
`--pin` застосовується лише до встановлень npm. Він не підтримується з `--marketplace`,
|
||||
оскільки встановлення з marketplace зберігають метадані джерела marketplace, а не
|
||||
специфікацію npm.
|
||||
|
||||
`--pin` застосовується лише до встановлень npm. Він не підтримується з `--marketplace`, тому що встановлення з marketplace зберігають метадані джерела marketplace, а не специфікацію npm.
|
||||
`--dangerously-force-unsafe-install` — це аварійний параметр для хибнопозитивних спрацьовувань
|
||||
у вбудованому сканері небезпечного коду. Він дозволяє продовжити встановлення навіть
|
||||
коли вбудований сканер повідомляє про результати рівня `critical`, але **не**
|
||||
обходить блокування політики хука плагіна `before_install` і **не**
|
||||
обходить збої сканування.
|
||||
|
||||
`--dangerously-force-unsafe-install` — це аварійний параметр для хибнопозитивних спрацювань вбудованого сканера небезпечного коду. Він дозволяє продовжити встановлення навіть тоді, коли вбудований сканер повідомляє про результати рівня `critical`, але він **не** обходить блокування політики хуків `before_install` плагіна і **не** обходить збої сканування.
|
||||
Цей прапорець CLI застосовується до потоків встановлення/оновлення плагінів. Встановлення
|
||||
залежностей Skills через Gateway використовують відповідне перевизначення запиту
|
||||
`dangerouslyForceUnsafeInstall`, тоді як `openclaw skills install` лишається окремим
|
||||
потоком завантаження/встановлення навичок ClawHub.
|
||||
|
||||
Цей прапорець CLI застосовується до потоків встановлення/оновлення плагінів. Встановлення залежностей Skills через Gateway використовують відповідне перевизначення запиту `dangerouslyForceUnsafeInstall`, тоді як `openclaw skills install` залишається окремим потоком завантаження/встановлення навичок ClawHub.
|
||||
`plugins install` також є поверхнею встановлення для наборів хуків, які надають
|
||||
`openclaw.hooks` у `package.json`. Використовуйте `openclaw hooks` для відфільтрованої
|
||||
видимості хуків і ввімкнення окремих хуків, а не для встановлення пакунків.
|
||||
|
||||
`plugins install` також є поверхнею встановлення для наборів хуків, які оголошують `openclaw.hooks` у `package.json`. Використовуйте `openclaw hooks` для відфільтрованої видимості хуків і вмикання окремих хуків, а не для встановлення пакета.
|
||||
Специфікації npm є **лише реєстровими** (назва пакунка + необов’язкова **точна версія** або
|
||||
**dist-tag**). Специфікації Git/URL/file і діапазони semver відхиляються. Встановлення
|
||||
залежностей для безпеки запускаються з `--ignore-scripts`.
|
||||
|
||||
Специфікації npm є **лише реєстровими** (назва пакета + необов’язкова **точна версія** або **dist-tag**). Специфікації git/URL/файлів і діапазони semver відхиляються. Для безпеки встановлення залежностей виконуються з `--ignore-scripts`.
|
||||
Специфікації без уточнень і `@latest` лишаються на стабільній гілці. Якщо npm розв’язує
|
||||
будь-який із цих варіантів до prerelease, OpenClaw зупиняється й просить вас явно погодитися,
|
||||
вказавши тег prerelease, наприклад `@beta`/`@rc`, або точну версію prerelease, наприклад
|
||||
`@1.2.3-beta.4`.
|
||||
|
||||
Прості специфікації та `@latest` залишаються на стабільній гілці. Якщо npm розв’язує будь-який із цих варіантів у prerelease, OpenClaw зупиняється і просить вас явно погодитися, використавши тег prerelease, наприклад `@beta`/`@rc`, або точну версію prerelease, наприклад `@1.2.3-beta.4`.
|
||||
|
||||
Якщо проста специфікація встановлення збігається з id вбудованого плагіна (наприклад, `diffs`), OpenClaw встановлює вбудований плагін напряму. Щоб установити пакет npm з такою самою назвою, використовуйте явну scoped-специфікацію (наприклад, `@scope/diffs`).
|
||||
Якщо специфікація встановлення без уточнень збігається з id вбудованого плагіна (наприклад, `diffs`), OpenClaw
|
||||
встановлює вбудований плагін безпосередньо. Щоб установити npm-пакунок із тією самою
|
||||
назвою, використовуйте явну scoped-специфікацію (наприклад, `@scope/diffs`).
|
||||
|
||||
Підтримувані архіви: `.zip`, `.tgz`, `.tar.gz`, `.tar`.
|
||||
|
||||
@ -105,15 +138,20 @@ openclaw plugins install clawhub:openclaw-codex-app-server
|
||||
openclaw plugins install clawhub:openclaw-codex-app-server@1.2.3
|
||||
```
|
||||
|
||||
Тепер OpenClaw також надає перевагу ClawHub для простих npm-безпечних специфікацій плагінів. Повернення до npm відбувається лише тоді, коли в ClawHub немає цього пакета або версії:
|
||||
Тепер OpenClaw також віддає перевагу ClawHub для специфікацій плагінів, сумісних із bare npm. Він переходить
|
||||
до npm лише якщо в ClawHub немає цього пакунка або версії:
|
||||
|
||||
```bash
|
||||
openclaw plugins install openclaw-codex-app-server
|
||||
```
|
||||
|
||||
OpenClaw завантажує архів пакета з ClawHub, перевіряє заявлену сумісність API плагіна / мінімального Gateway, а потім встановлює його через звичайний шлях архіву. Зафіксовані встановлення зберігають метадані джерела ClawHub для подальших оновлень.
|
||||
OpenClaw завантажує архів пакунка з ClawHub, перевіряє оголошену
|
||||
сумісність API Plugin / мінімальну сумісність gateway, а потім установлює його через звичайний
|
||||
шлях архіву. Зафіксовані встановлення зберігають свої метадані джерела ClawHub для подальших
|
||||
оновлень.
|
||||
|
||||
Використовуйте скорочення `plugin@marketplace`, коли назва marketplace існує в локальному кеші реєстру Claude за шляхом `~/.claude/plugins/known_marketplaces.json`:
|
||||
Використовуйте скорочення `plugin@marketplace`, коли назва marketplace існує в локальному
|
||||
кеші реєстру Claude за адресою `~/.claude/plugins/known_marketplaces.json`:
|
||||
|
||||
```bash
|
||||
openclaw plugins marketplace list <marketplace-name>
|
||||
@ -132,21 +170,30 @@ openclaw plugins install <plugin-name> --marketplace ./my-marketplace
|
||||
Джерелами marketplace можуть бути:
|
||||
|
||||
- назва відомого marketplace Claude з `~/.claude/plugins/known_marketplaces.json`
|
||||
- локальний корінь marketplace або шлях до `marketplace.json`
|
||||
- скорочення GitHub-репозиторію, наприклад `owner/repo`
|
||||
- локальний корінь marketplace або шлях `marketplace.json`
|
||||
- скорочений запис GitHub-репозиторію, наприклад `owner/repo`
|
||||
- URL GitHub-репозиторію, наприклад `https://github.com/owner/repo`
|
||||
- git URL
|
||||
|
||||
Для віддалених marketplace, завантажених із GitHub або git, записи плагінів мають залишатися всередині клонованого репозиторію marketplace. OpenClaw приймає джерела відносних шляхів із цього репозиторію та відхиляє HTTP(S), абсолютні шляхи, git, GitHub та інші не-шляхові джерела плагінів із віддалених маніфестів.
|
||||
Для віддалених marketplace, завантажених із GitHub або git, записи плагінів повинні
|
||||
залишатися всередині клонованого репозиторію marketplace. OpenClaw приймає відносні шляхи
|
||||
з цього репозиторію та відхиляє HTTP(S), абсолютні шляхи, git, GitHub та інші джерела
|
||||
плагінів, які не є шляхами, з віддалених маніфестів.
|
||||
|
||||
Для локальних шляхів і архівів OpenClaw автоматично визначає:
|
||||
|
||||
- власні плагіни OpenClaw (`openclaw.plugin.json`)
|
||||
- пакети, сумісні з Codex (`.codex-plugin/plugin.json`)
|
||||
- пакети, сумісні з Claude (`.claude-plugin/plugin.json` або типовий макет компонентів Claude)
|
||||
- пакети, сумісні з Cursor (`.cursor-plugin/plugin.json`)
|
||||
- нативні плагіни OpenClaw (`openclaw.plugin.json`)
|
||||
- сумісні набори пакунків Codex (`.codex-plugin/plugin.json`)
|
||||
- сумісні набори пакунків Claude (`.claude-plugin/plugin.json` або типовий
|
||||
макет компонентів Claude)
|
||||
- сумісні набори пакунків Cursor (`.cursor-plugin/plugin.json`)
|
||||
|
||||
Сумісні пакети встановлюються до звичайного кореня плагінів і беруть участь у тому самому потоці list/info/enable/disable. Наразі підтримуються skills пакетів, command-skills Claude, типові значення Claude `settings.json`, типові значення Claude `.lsp.json` / `lspServers`, оголошені в маніфесті, command-skills Cursor та сумісні каталоги хуків Codex; інші виявлені можливості пакетів показуються в diagnostics/info, але ще не підключені до виконання під час роботи.
|
||||
Сумісні набори пакунків установлюються до звичайного кореня плагінів і беруть участь
|
||||
у тому самому потоці list/info/enable/disable. Наразі підтримуються bundle skills, Claude
|
||||
command-skills, типові значення Claude `settings.json`, типові значення Claude `.lsp.json` /
|
||||
`lspServers`, оголошені в маніфесті, Cursor command-skills і сумісні
|
||||
каталоги хуків Codex; інші виявлені можливості наборів пакунків
|
||||
показуються в diagnostics/info, але ще не підключені до виконання під час роботи.
|
||||
|
||||
### Список
|
||||
|
||||
@ -157,15 +204,29 @@ openclaw plugins list --verbose
|
||||
openclaw plugins list --json
|
||||
```
|
||||
|
||||
Використовуйте `--enabled`, щоб показати лише увімкнені плагіни. Використовуйте `--verbose`, щоб перейти від табличного подання до рядків із докладною інформацією про кожен плагін із метаданими джерела/походження/версії/активації. Використовуйте `--json` для машинозчитуваного переліку плюс діагностики реєстру.
|
||||
Використовуйте `--enabled`, щоб показати лише ввімкнені плагіни. Використовуйте `--verbose`, щоб перейти
|
||||
від табличного подання до докладних рядків для кожного плагіна з метаданими
|
||||
джерела/походження/версії/активації. Використовуйте `--json` для машиночитаного
|
||||
інвентарю та diagnostics реєстру.
|
||||
|
||||
`plugins list` спочатку читає збережений локальний реєстр плагінів із резервним переходом на похідний режим лише за маніфестом, якщо реєстр відсутній або недійсний. Це корисно для перевірки, чи встановлено плагін, чи він увімкнений і чи видимий для планування холодного запуску, але це не жива перевірка середовища виконання вже запущеного процесу Gateway. Після зміни коду плагіна, стану ввімкнення, політики хуків або `plugins.load.paths` перезапустіть Gateway, який обслуговує канал, перш ніж очікувати виконання нового коду `register(api)` або хуків. Для віддалених/контейнерних розгортань переконайтеся, що ви перезапускаєте саме дочірній процес `openclaw gateway run`, а не лише процес-обгортку.
|
||||
`plugins list` спочатку читає збережений локальний реєстр плагінів, а за його
|
||||
відсутності або невалідності використовує резервний варіант, похідний лише від маніфесту. Це
|
||||
зручно для перевірки, чи встановлено плагін, чи він увімкнений і чи видимий для
|
||||
планування холодного запуску, але це не живе runtime-зондування вже запущеного
|
||||
процесу Gateway. Після зміни коду плагіна, стану ввімкнення, політики хуків або
|
||||
`plugins.load.paths` перезапустіть Gateway, який обслуговує канал, перш ніж
|
||||
очікувати виконання нового коду `register(api)` або хуків. Для віддалених/контейнерних
|
||||
розгортань переконайтеся, що ви перезапускаєте саме дочірній процес `openclaw gateway run`,
|
||||
а не лише процес-обгортку.
|
||||
|
||||
Для налагодження хуків під час виконання:
|
||||
Для налагодження runtime-хуків:
|
||||
|
||||
- `openclaw plugins inspect <id> --json` показує зареєстровані хуки та diagnostics із проходу inspection із завантаженням модуля.
|
||||
- `openclaw gateway status --deep --require-rpc` підтверджує досяжний Gateway, підказки щодо сервісу/процесу, шлях до конфігурації та справність RPC.
|
||||
- Невбудовані хуки розмови (`llm_input`, `llm_output`, `agent_end`) потребують `plugins.entries.<id>.hooks.allowConversationAccess=true`.
|
||||
- `openclaw plugins inspect <id> --json` показує зареєстровані хуки та diagnostics
|
||||
з проходу інспекції із завантаженням модуля.
|
||||
- `openclaw gateway status --deep --require-rpc` підтверджує доступний Gateway,
|
||||
підказки про сервіс/процес, шлях до config і стан RPC.
|
||||
- Для невбудованих хуків розмови (`llm_input`, `llm_output`, `agent_end`) потрібно
|
||||
`plugins.entries.<id>.hooks.allowConversationAccess=true`.
|
||||
|
||||
Використовуйте `--link`, щоб уникнути копіювання локального каталогу (додає його до `plugins.load.paths`):
|
||||
|
||||
@ -173,9 +234,23 @@ openclaw plugins list --json
|
||||
openclaw plugins install -l ./my-plugin
|
||||
```
|
||||
|
||||
`--force` не підтримується разом із `--link`, тому що зв’язані встановлення повторно використовують вихідний шлях замість копіювання в керовану ціль встановлення.
|
||||
`--force` не підтримується з `--link`, оскільки встановлення з посиланням повторно використовують
|
||||
вихідний шлях замість копіювання до керованої цілі встановлення.
|
||||
|
||||
Використовуйте `--pin` під час встановлень npm, щоб зберегти точну розв’язану специфікацію (`name@version`) у `plugins.installs`, залишивши стандартну поведінку без закріплення.
|
||||
Використовуйте `--pin` для встановлень npm, щоб зберегти розв’язану точну специфікацію (`name@version`) у
|
||||
керованому журналі встановлень, зберігаючи типову поведінку без закріплення.
|
||||
|
||||
### Журнал встановлень
|
||||
|
||||
Метадані встановлення плагінів — це машинно керований стан, а не конфігурація користувача. Нові
|
||||
встановлення та оновлення записують його до `plugins/installs.json` у межах активного каталогу
|
||||
стану OpenClaw. Файл містить попередження не редагувати його вручну та використовується
|
||||
`openclaw plugins update`, uninstall, diagnostics і холодним реєстром плагінів.
|
||||
|
||||
Застарілі записи `plugins.installs` у `openclaw.json` усе ще можна читати як
|
||||
застарілий резервний механізм сумісності. Коли шляхи install/update/uninstall
|
||||
перезаписують стан встановлення плагіна, OpenClaw записує файл журналу та видаляє
|
||||
`plugins.installs` зі збереженого payload конфігурації.
|
||||
|
||||
### Видалення
|
||||
|
||||
@ -185,9 +260,12 @@ openclaw plugins uninstall <id> --dry-run
|
||||
openclaw plugins uninstall <id> --keep-files
|
||||
```
|
||||
|
||||
`uninstall` видаляє записи плагінів з `plugins.entries`, `plugins.installs`, списку дозволених плагінів і, за потреби, зв’язані записи `plugins.load.paths`. Для плагінів активної пам’яті слот пам’яті скидається до `memory-core`.
|
||||
`uninstall` видаляє записи плагінів із `plugins.entries`, керованого журналу встановлень,
|
||||
allowlist плагінів і пов’язаних записів `plugins.load.paths`, коли це застосовно.
|
||||
Для плагінів active memory слот пам’яті скидається до `memory-core`.
|
||||
|
||||
За замовчуванням `uninstall` також видаляє каталог встановлення плагіна в активному кореневому каталозі плагінів state-dir. Використовуйте `--keep-files`, щоб зберегти файли на диску.
|
||||
Типово uninstall також видаляє каталог встановлення плагіна в корені плагінів активного state-dir. Використовуйте
|
||||
`--keep-files`, щоб зберегти файли на диску.
|
||||
|
||||
`--keep-config` підтримується як застарілий псевдонім для `--keep-files`.
|
||||
|
||||
@ -201,56 +279,64 @@ openclaw plugins update @openclaw/voice-call@beta
|
||||
openclaw plugins update openclaw-codex-app-server --dangerously-force-unsafe-install
|
||||
```
|
||||
|
||||
Оновлення застосовуються до відстежуваних встановлень у `plugins.installs` і відстежуваних встановлень наборів хуків у `hooks.internal.installs`.
|
||||
Оновлення застосовуються до відстежуваних встановлень плагінів у керованому журналі встановлень і
|
||||
відстежуваних встановлень наборів хуків у `hooks.internal.installs`.
|
||||
|
||||
Коли ви передаєте id плагіна, OpenClaw повторно використовує записану специфікацію встановлення для цього плагіна. Це означає, що раніше збережені dist-tag, як-от `@beta`, і точні закріплені версії надалі використовуються в наступних запусках `update <id>`.
|
||||
Коли ви передаєте id плагіна, OpenClaw повторно використовує записану специфікацію встановлення для цього
|
||||
плагіна. Це означає, що раніше збережені dist-tag, такі як `@beta`, і точні закріплені
|
||||
версії продовжують використовуватися в наступних запусках `update <id>`.
|
||||
|
||||
Для встановлень npm ви також можете передати явну специфікацію пакета npm з dist-tag або точною версією. OpenClaw зіставляє цю назву пакета з відстежуваним записом плагіна, оновлює встановлений плагін і записує нову специфікацію npm для майбутніх оновлень за id.
|
||||
Для встановлень npm ви також можете передати явну специфікацію npm-пакунка з dist-tag
|
||||
або точною версією. OpenClaw зіставляє цю назву пакунка назад із відстежуваним записом плагіна,
|
||||
оновлює цей встановлений плагін і записує нову специфікацію npm для майбутніх оновлень за id.
|
||||
|
||||
Передавання назви пакета npm без версії або тега також зіставляє її з відстежуваним записом плагіна. Використовуйте це, коли плагін було закріплено на точній версії, а ви хочете повернути його до типової лінії випусків реєстру.
|
||||
Передавання назви npm-пакунка без версії чи тега також зіставляється назад із
|
||||
відстежуваним записом плагіна. Використовуйте це, коли плагін було закріплено на
|
||||
точній версії, а ви хочете повернути його до типової гілки релізів реєстру.
|
||||
|
||||
Перед реальним оновленням npm OpenClaw перевіряє встановлену версію пакета відносно метаданих реєстру npm. Якщо встановлена версія та записана ідентичність артефакту вже збігаються з розв’язаною ціллю, оновлення буде пропущено без завантаження, перевстановлення або перезапису `openclaw.json`.
|
||||
Перед живим оновленням npm OpenClaw перевіряє встановлену версію пакунка щодо
|
||||
метаданих реєстру npm. Якщо встановлена версія та ідентичність записаного
|
||||
артефакту вже відповідають розв’язаній цілі, оновлення пропускається без
|
||||
завантаження, перевстановлення чи перезапису `openclaw.json`.
|
||||
|
||||
Коли існує збережений хеш цілісності, а хеш отриманого артефакту змінюється,
|
||||
OpenClaw розглядає це як дрейф артефакту npm. Інтерактивна команда
|
||||
`openclaw plugins update` виводить очікуваний і фактичний хеші та запитує
|
||||
підтвердження перед продовженням. Неінтерактивні допоміжні засоби оновлення
|
||||
завершуються безпечною відмовою, якщо викликач не надає явну політику продовження.
|
||||
OpenClaw розцінює це як дрейф npm-артефакту. Інтерактивна команда
|
||||
`openclaw plugins update` виводить очікуваний і фактичний хеші та просить
|
||||
підтвердження перед продовженням. Неінтерактивні помічники оновлення аварійно зупиняються,
|
||||
якщо викликач не надає явну політику продовження.
|
||||
|
||||
`--dangerously-force-unsafe-install` також доступний у `plugins update` як
|
||||
аварійне перевизначення для хибнопозитивних спрацювань вбудованого сканування
|
||||
небезпечного коду під час оновлень плагінів. Він, як і раніше, не обходить
|
||||
блокування політики `before_install` плагіна чи блокування через збої
|
||||
сканування, і застосовується лише до оновлень плагінів, а не до оновлень
|
||||
наборів хуків.
|
||||
аварійне перевизначення для хибнопозитивних спрацьовувань вбудованого сканування
|
||||
небезпечного коду під час оновлення плагінів. Він усе ще не обходить блокування
|
||||
політики плагіна `before_install` або блокування через збої сканування, і
|
||||
застосовується лише до оновлень плагінів, а не до оновлень наборів хуків.
|
||||
|
||||
### Inspect
|
||||
### Інспекція
|
||||
|
||||
```bash
|
||||
openclaw plugins inspect <id>
|
||||
openclaw plugins inspect <id> --json
|
||||
```
|
||||
|
||||
Глибока інтроспекція для одного плагіна. Показує ідентичність, статус
|
||||
завантаження, джерело, зареєстровані можливості, хуки, інструменти, команди,
|
||||
сервіси, методи gateway, HTTP-маршрути, прапорці політик, diagnostics,
|
||||
метадані встановлення, можливості пакета, а також будь-яку виявлену підтримку
|
||||
серверів MCP або LSP.
|
||||
Глибока інспекція для одного плагіна. Показує ідентичність, стан завантаження, джерело,
|
||||
зареєстровані можливості, хуки, інструменти, команди, сервіси, методи gateway,
|
||||
HTTP-маршрути, прапорці політики, diagnostics, метадані встановлення, можливості набору пакунків,
|
||||
а також будь-яку виявлену підтримку MCP або LSP-сервера.
|
||||
|
||||
Кожен плагін класифікується за тим, що саме він реєструє під час виконання:
|
||||
Кожен плагін класифікується за тим, що він фактично реєструє під час роботи:
|
||||
|
||||
- **plain-capability** — один тип можливостей (наприклад, плагін лише з одним провайдером)
|
||||
- **plain-capability** — один тип можливостей (наприклад, плагін лише для провайдера)
|
||||
- **hybrid-capability** — кілька типів можливостей (наприклад, текст + мовлення + зображення)
|
||||
- **hook-only** — лише хуки, без можливостей або поверхонь
|
||||
- **non-capability** — інструменти/команди/сервіси, але без можливостей
|
||||
|
||||
Докладніше про модель можливостей див. у [Форми плагінів](/uk/plugins/architecture#plugin-shapes).
|
||||
Докладніше про модель можливостей див. у [Форми Plugin](/uk/plugins/architecture#plugin-shapes).
|
||||
|
||||
Прапорець `--json` виводить машинозчитуваний звіт, придатний для сценаріїв і
|
||||
Прапорець `--json` виводить машиночитаний звіт, придатний для сценаріїв і
|
||||
аудиту.
|
||||
|
||||
`inspect --all` відображає загальносистемну таблицю зі стовпцями shape, capability kinds,
|
||||
compatibility notices, bundle capabilities і hook summary.
|
||||
`inspect --all` виводить загальнофлотську таблицю з колонками shape, kinds можливостей,
|
||||
повідомленнями про сумісність, можливостями наборів пакунків і підсумком хуків.
|
||||
|
||||
`info` — це псевдонім для `inspect`.
|
||||
|
||||
@ -260,15 +346,15 @@ compatibility notices, bundle capabilities і hook summary.
|
||||
openclaw plugins doctor
|
||||
```
|
||||
|
||||
`doctor` повідомляє про помилки завантаження плагінів, diagnostics
|
||||
маніфесту/виявлення та повідомлення про сумісність. Коли все чисто, він виводить `No plugin issues
|
||||
`doctor` повідомляє про помилки завантаження плагінів, diagnostics виявлення/маніфестів і
|
||||
повідомлення про сумісність. Якщо все чисто, він виводить `No plugin issues
|
||||
detected.`
|
||||
|
||||
Для збоїв форми модуля, як-от відсутні експорти `register`/`activate`, повторно
|
||||
запустіть із `OPENCLAW_PLUGIN_LOAD_DEBUG=1`, щоб включити стислий підсумок
|
||||
форми експорту до діагностичного виводу.
|
||||
Для збоїв форми модуля, таких як відсутні експорти `register`/`activate`, повторно запустіть
|
||||
із `OPENCLAW_PLUGIN_LOAD_DEBUG=1`, щоб включити компактний підсумок форми експортів у
|
||||
діагностичний вивід.
|
||||
|
||||
### Registry
|
||||
### Реєстр
|
||||
|
||||
```bash
|
||||
openclaw plugins registry
|
||||
@ -276,21 +362,20 @@ openclaw plugins registry --refresh
|
||||
openclaw plugins registry --json
|
||||
```
|
||||
|
||||
Локальний реєстр плагінів — це збережена холодна модель читання OpenClaw для
|
||||
ідентичності встановлених плагінів, стану ввімкнення, метаданих джерела та
|
||||
власності внесків. Звичайний запуск, пошук власника провайдера, класифікація
|
||||
налаштування каналу та інвентаризація плагінів можуть читати його без імпорту
|
||||
модулів середовища виконання плагінів.
|
||||
Локальний реєстр плагінів — це збережена модель холодного читання OpenClaw для встановленої
|
||||
ідентичності плагінів, стану ввімкнення, метаданих джерела та належності внесків.
|
||||
Звичайний запуск, пошук власника провайдера, класифікація налаштування каналу та
|
||||
інвентаризація плагінів можуть читати його без імпорту модулів runtime плагінів.
|
||||
|
||||
Використовуйте `plugins registry`, щоб перевірити, чи збережений реєстр
|
||||
наявний, актуальний чи застарілий. Використовуйте `--refresh`, щоб перебудувати
|
||||
його з довговічного журналу встановлень, політики конфігурації та метаданих
|
||||
маніфесту/пакета. Це шлях відновлення, а не шлях активації під час виконання.
|
||||
Використовуйте `plugins registry`, щоб перевірити, чи наявний збережений реєстр,
|
||||
чи він актуальний, чи застарілий. Використовуйте `--refresh`, щоб перебудувати його з
|
||||
довговічного журналу встановлень, політики config і метаданих маніфесту/пакунка. Це
|
||||
шлях відновлення, а не шлях runtime-активації.
|
||||
|
||||
`OPENCLAW_DISABLE_PERSISTED_PLUGIN_REGISTRY=1` — це застарілий аварійний
|
||||
перемикач сумісності для збоїв читання реєстру. Надавайте перевагу `plugins registry
|
||||
перемикач сумісності для збоїв читання реєстру. Віддавайте перевагу `plugins registry
|
||||
--refresh` або `openclaw doctor --fix`; резервний варіант через env призначений лише для
|
||||
аварійного відновлення запуску, поки розгортається міграція.
|
||||
аварійного відновлення запуску, поки триває розгортання міграції.
|
||||
|
||||
### Marketplace
|
||||
|
||||
@ -299,7 +384,7 @@ openclaw plugins marketplace list <source>
|
||||
openclaw plugins marketplace list <source> --json
|
||||
```
|
||||
|
||||
Список marketplace приймає локальний шлях до marketplace, шлях до `marketplace.json`,
|
||||
Список marketplace приймає локальний шлях marketplace, шлях `marketplace.json`,
|
||||
скорочення GitHub на кшталт `owner/repo`, URL GitHub-репозиторію або git URL. `--json`
|
||||
виводить мітку розв’язаного джерела, а також розібраний маніфест marketplace і
|
||||
записи плагінів.
|
||||
|
||||
@ -5,62 +5,62 @@ read_when:
|
||||
summary: Довідник із конфігурації Gateway для основних ключів OpenClaw, значень за замовчуванням і посилань на окремі довідники підсистем
|
||||
title: Довідник із конфігурації
|
||||
x-i18n:
|
||||
generated_at: "2026-04-25T18:14:13Z"
|
||||
generated_at: "2026-04-25T18:41:25Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 0b7e904455845a9559a0a8ed67b217597819f4a8abc38e6c8ecb69b6481528e8
|
||||
source_hash: 20618b101b5c287343e0f97cd2536f42950d855ba8a8ca5f6f5b5eb10cba749d
|
||||
source_path: gateway/configuration-reference.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
Довідник із основної конфігурації для `~/.openclaw/openclaw.json`. Для огляду, орієнтованого на завдання, див. [Configuration](/uk/gateway/configuration).
|
||||
Основний довідник із конфігурації для `~/.openclaw/openclaw.json`. Для огляду, орієнтованого на завдання, див. [Configuration](/uk/gateway/configuration).
|
||||
|
||||
Охоплює основні поверхні конфігурації OpenClaw і надає посилання назовні, коли підсистема має власний детальніший довідник. Каталоги команд, що належать каналам і Plugin, а також глибокі параметри пам’яті/QMD розміщено на окремих сторінках, а не тут.
|
||||
Охоплює основні поверхні конфігурації OpenClaw і надає посилання, коли підсистема має власний глибший довідник. Каталоги команд і детальні параметри пам’яті/QMD, що належать каналам і плагінам, винесені на окремі сторінки, а не розміщені тут.
|
||||
|
||||
Джерело істини в коді:
|
||||
|
||||
- `openclaw config schema` виводить актуальну JSON Schema, що використовується для валідації та Control UI, із об’єднаними метаданими bundled/plugin/channel, коли вони доступні
|
||||
- `config.schema.lookup` повертає один вузол схеми з прив’язкою до шляху для інструментів детального перегляду
|
||||
- `pnpm config:docs:check` / `pnpm config:docs:gen` перевіряють baseline hash документації конфігурації щодо поточної поверхні схеми
|
||||
- `openclaw config schema` виводить актуальну JSON Schema, яка використовується для валідації та Control UI, із об’єднаними метаданими bundled/plugin/channel, коли вони доступні
|
||||
- `config.schema.lookup` повертає один вузол схеми, прив’язаний до шляху, для інструментів деталізованого перегляду
|
||||
- `pnpm config:docs:check` / `pnpm config:docs:gen` перевіряють базовий хеш документації конфігурації щодо поточної поверхні схеми
|
||||
|
||||
Окремі детальні довідники:
|
||||
|
||||
- [Memory configuration reference](/uk/reference/memory-config) для `agents.defaults.memorySearch.*`, `memory.qmd.*`, `memory.citations` і конфігурації dreaming у `plugins.entries.memory-core.config.dreaming`
|
||||
- [Slash commands](/uk/tools/slash-commands) для поточного каталогу вбудованих + bundled команд
|
||||
- сторінки каналу/Plugin-власника для специфічних поверхонь команд каналів
|
||||
- [Slash commands](/uk/tools/slash-commands) для поточного вбудованого + bundled каталогу команд
|
||||
- сторінки відповідних каналів/плагінів для специфічних для каналу поверхонь команд
|
||||
|
||||
Формат конфігурації — **JSON5** (дозволено коментарі та кінцеві коми). Усі поля необов’язкові — OpenClaw використовує безпечні значення за замовчуванням, якщо їх не вказано.
|
||||
Формат конфігурації — **JSON5** (дозволені коментарі та кінцеві коми). Усі поля необов’язкові — OpenClaw використовує безпечні значення за замовчуванням, якщо їх пропущено.
|
||||
|
||||
---
|
||||
|
||||
## Канали
|
||||
|
||||
Ключі конфігурації для кожного каналу перенесено на окрему сторінку — див.
|
||||
Ключі конфігурації окремих каналів перенесено на окрему сторінку — див.
|
||||
[Configuration — channels](/uk/gateway/config-channels) для `channels.*`,
|
||||
зокрема Slack, Discord, Telegram, WhatsApp, Matrix, iMessage та інших
|
||||
bundled каналів (автентифікація, контроль доступу, кілька облікових записів, обмеження згадувань).
|
||||
bundled каналів (автентифікація, контроль доступу, кілька облікових записів, обмеження згадок).
|
||||
|
||||
## Значення агентів за замовчуванням, multi-agent, сесії та повідомлення
|
||||
## Значення агентів за замовчуванням, мультиагентність, сесії та повідомлення
|
||||
|
||||
Перенесено на окрему сторінку — див.
|
||||
[Configuration — agents](/uk/gateway/config-agents) для:
|
||||
|
||||
- `agents.defaults.*` (робочий простір, модель, thinking, heartbeat, пам’ять, медіа, skills, sandbox)
|
||||
- `multiAgent.*` (маршрутизація та прив’язки multi-agent)
|
||||
- `session.*` (життєвий цикл сесії, compaction, обрізання)
|
||||
- `session.*` (життєвий цикл сесії, compaction, очищення)
|
||||
- `messages.*` (доставка повідомлень, TTS, рендеринг markdown)
|
||||
- `talk.*` (режим Talk)
|
||||
- `talk.silenceTimeoutMs`: якщо не задано, Talk зберігає стандартне для платформи вікно паузи перед надсиланням транскрипту (`700 ms на macOS і Android, 900 ms на iOS`)
|
||||
- `talk.silenceTimeoutMs`: якщо не задано, Talk зберігає стандартне для платформи вікно паузи перед надсиланням транскрипту (`700 ms на macOS та Android, 900 ms на iOS`)
|
||||
|
||||
## Інструменти та власні провайдери
|
||||
## Інструменти та користувацькі провайдери
|
||||
|
||||
Політика інструментів, експериментальні перемикачі, конфігурація інструментів із підтримкою провайдерів і налаштування власних
|
||||
провайдерів / base-URL перенесено на окрему сторінку — див.
|
||||
Політика інструментів, експериментальні перемикачі, конфігурація інструментів на основі провайдерів, а також налаштування користувацьких
|
||||
провайдерів / base-URL перенесені на окрему сторінку — див.
|
||||
[Configuration — tools and custom providers](/uk/gateway/config-tools).
|
||||
|
||||
## MCP
|
||||
|
||||
Визначення MCP-серверів, якими керує OpenClaw, розміщуються в `mcp.servers` і
|
||||
Визначення MCP серверів, якими керує OpenClaw, розміщуються в `mcp.servers` і
|
||||
використовуються вбудованим Pi та іншими адаптерами середовища виконання. Команди `openclaw mcp list`,
|
||||
`show`, `set` і `unset` керують цим блоком без підключення до
|
||||
цільового сервера під час редагування конфігурації.
|
||||
@ -68,7 +68,7 @@ bundled каналів (автентифікація, контроль дост
|
||||
```json5
|
||||
{
|
||||
mcp: {
|
||||
// Необов’язково. За замовчуванням: 600000 ms (10 хвилин). Установіть 0, щоб вимкнути виселення під час простою.
|
||||
// Optional. Default: 600000 ms (10 minutes). Set 0 to disable idle eviction.
|
||||
sessionIdleTtlMs: 600000,
|
||||
servers: {
|
||||
docs: {
|
||||
@ -87,17 +87,17 @@ bundled каналів (автентифікація, контроль дост
|
||||
}
|
||||
```
|
||||
|
||||
- `mcp.servers`: іменовані визначення stdio- або віддалених MCP-серверів для середовищ виконання, які
|
||||
надають налаштовані MCP-інструменти.
|
||||
- `mcp.sessionIdleTtlMs`: TTL простою для bundled MCP runtime, прив’язаних до сесії.
|
||||
Одноразові вбудовані запуски запитують очищення після завершення виконання; цей TTL є резервним механізмом для
|
||||
- `mcp.servers`: іменовані визначення stdio або віддалених MCP серверів для середовищ виконання, які
|
||||
надають налаштовані MCP інструменти.
|
||||
- `mcp.sessionIdleTtlMs`: TTL простою для session-scoped bundled MCP runtime.
|
||||
Одноразові вбудовані запуски запитують очищення після завершення запуску; цей TTL є страховкою для
|
||||
довготривалих сесій і майбутніх викликів.
|
||||
- Зміни в `mcp.*` застосовуються на гарячу через знищення кешованих session MCP runtime.
|
||||
Наступне виявлення/використання інструмента відтворює їх із нової конфігурації, тому вилучені
|
||||
записи `mcp.servers` прибираються негайно, а не чекають TTL простою.
|
||||
- Зміни в `mcp.*` застосовуються гарячим способом через вивільнення кешованих session MCP runtime.
|
||||
Наступне виявлення/використання інструмента створить їх заново з нової конфігурації, тому видалені
|
||||
записи `mcp.servers` прибираються негайно, а не чекають завершення idle TTL.
|
||||
|
||||
Див. [MCP](/uk/cli/mcp#openclaw-as-an-mcp-client-registry) і
|
||||
[CLI backends](/uk/gateway/cli-backends#bundle-mcp-overlays) щодо поведінки runtime.
|
||||
[CLI backends](/uk/gateway/cli-backends#bundle-mcp-overlays) щодо поведінки середовища виконання.
|
||||
|
||||
## Skills
|
||||
|
||||
@ -124,18 +124,18 @@ bundled каналів (автентифікація, контроль дост
|
||||
}
|
||||
```
|
||||
|
||||
- `allowBundled`: необов’язковий allowlist лише для bundled skills (керовані/workspace skills не зачіпаються).
|
||||
- `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/installed.
|
||||
- `entries.<skillKey>.apiKey`: зручне поле для skills, які оголошують основну env-змінну (рядок відкритим текстом або об’єкт SecretRef).
|
||||
- `entries.<skillKey>.apiKey`: зручне поле для skills, які оголошують основну env var (простий рядок або об’єкт SecretRef).
|
||||
|
||||
---
|
||||
|
||||
## Plugin
|
||||
## Плагіни
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -160,42 +160,47 @@ bundled каналів (автентифікація, контроль дост
|
||||
```
|
||||
|
||||
- Завантажуються з `~/.openclaw/extensions`, `<workspace>/.openclaw/extensions`, а також `plugins.load.paths`.
|
||||
- Виявлення підтримує нативні Plugin OpenClaw, а також сумісні набори Codex і Claude, зокрема набори Claude стандартного макета без manifest.
|
||||
- **Зміни конфігурації потребують перезапуску gateway.**
|
||||
- `allow`: необов’язковий allowlist (завантажуються лише перелічені Plugin). `deny` має пріоритет.
|
||||
- `plugins.entries.<id>.apiKey`: зручне поле API key на рівні 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`. Застосовується до нативних hook Plugin і підтримуваних каталогів hook, наданих наборами.
|
||||
- `plugins.entries.<id>.hooks.allowConversationAccess`: якщо `true`, довірені небандловані Plugin можуть читати необроблений вміст розмови з типізованих hook, таких як `llm_input`, `llm_output` і `agent_end`.
|
||||
- `plugins.entries.<id>.subagent.allowModelOverride`: явно довіряти цьому Plugin запитувати перевизначення `provider` і `model` для окремого запуску фонових subagent.
|
||||
- `plugins.entries.<id>.subagent.allowedModels`: необов’язковий allowlist канонічних цілей `provider/model` для довірених перевизначень subagent. Використовуйте `"*"` лише тоді, коли навмисно хочете дозволити будь-яку модель.
|
||||
- `plugins.entries.<id>.config`: об’єкт конфігурації, визначений Plugin (валідується схемою нативного Plugin OpenClaw, коли вона доступна).
|
||||
- Налаштування облікових записів/runtime для channel Plugin розміщуються в `channels.<id>` і мають описуватися метаданими `channelConfigs` у manifest Plugin-власника, а не центральним реєстром параметрів OpenClaw.
|
||||
- `plugins.entries.firecrawl.config.webFetch`: налаштування провайдера Firecrawl web-fetch.
|
||||
- `apiKey`: API key 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`).
|
||||
- `maxAgeMs`: максимальний вік кешу в мілісекундах (за замовчуванням: `172800000` / 2 дні).
|
||||
- `timeoutSeconds`: тайм-аут запиту на збирання в секундах (за замовчуванням: `60`).
|
||||
- Виявлення приймає нативні плагіни OpenClaw, а також сумісні бандли Codex і Claude, включно з безманіфестними бандлами Claude стандартної структури.
|
||||
- **Зміни конфігурації потребують перезапуску Gateway.**
|
||||
- `allow`: необов’язковий список дозволу (завантажуються лише перелічені плагіни). `deny` має пріоритет.
|
||||
- `plugins.entries.<id>.apiKey`: зручне поле API-ключа на рівні плагіна (коли це підтримується плагіном).
|
||||
- `plugins.entries.<id>.env`: мапа env var у межах плагіна.
|
||||
- `plugins.entries.<id>.hooks.allowPromptInjection`: коли `false`, ядро блокує `before_prompt_build` і ігнорує поля, що змінюють prompt, із застарілого `before_agent_start`, зберігаючи при цьому застарілі `modelOverride` і `providerOverride`. Застосовується до нативних hooks плагінів і підтримуваних каталогів hooks, наданих бандлами.
|
||||
- `plugins.entries.<id>.hooks.allowConversationAccess`: коли `true`, довірені небудовані плагіни можуть читати необроблений вміст розмови з типізованих hooks, таких як `llm_input`, `llm_output` і `agent_end`.
|
||||
- `plugins.entries.<id>.subagent.allowModelOverride`: явно довіряти цьому плагіну запитувати перевизначення `provider` і `model` для окремого запуску фонових subagent-запусків.
|
||||
- `plugins.entries.<id>.subagent.allowedModels`: необов’язковий список дозволу канонічних цілей `provider/model` для довірених перевизначень subagent. Використовуйте `"*"` лише тоді, коли ви свідомо хочете дозволити будь-яку модель.
|
||||
- `plugins.entries.<id>.config`: об’єкт конфігурації, визначений плагіном (перевіряється схемою нативного плагіна OpenClaw, якщо вона доступна).
|
||||
- Налаштування облікових записів/середовища виконання channel plugin розміщуються в `channels.<id>` і мають описуватися метаданими `channelConfigs` маніфесту відповідного плагіна, а не центральним реєстром параметрів OpenClaw.
|
||||
- `plugins.entries.firecrawl.config.webFetch`: налаштування провайдера web-fetch Firecrawl.
|
||||
- `apiKey`: API-ключ Firecrawl (приймає SecretRef). Використовує як запасний варіант `plugins.entries.firecrawl.config.webSearch.apiKey`, застарілий `tools.web.fetch.firecrawl.apiKey` або env var `FIRECRAWL_API_KEY`.
|
||||
- `baseUrl`: базовий URL API Firecrawl (типово: `https://api.firecrawl.dev`).
|
||||
- `onlyMainContent`: витягувати лише основний вміст сторінок (типово: `true`).
|
||||
- `maxAgeMs`: максимальний вік кешу в мілісекундах (типово: `172800000` / 2 дні).
|
||||
- `timeoutSeconds`: тайм-аут запиту скрапінгу в секундах (типово: `60`).
|
||||
- `plugins.entries.xai.config.xSearch`: налаштування xAI X Search (вебпошук Grok).
|
||||
- `enabled`: увімкнути провайдер X Search.
|
||||
- `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 * * *"`).
|
||||
- політика фаз і пороги є деталями реалізації (не є користувацькими ключами конфігурації).
|
||||
- Повна конфігурація пам’яті розміщена в [Memory configuration reference](/uk/reference/memory-config):
|
||||
- `plugins.entries.memory-core.config.dreaming`: налаштування memory dreaming. Див. [Dreaming](/uk/concepts/dreaming) щодо фаз і порогів.
|
||||
- `enabled`: головний перемикач dreaming (типово `false`).
|
||||
- `frequency`: Cron-частота для кожного повного циклу dreaming (`"0 3 * * *"` типово).
|
||||
- політика фаз і пороги є деталями реалізації (не користувацькими ключами конфігурації).
|
||||
- Повна конфігурація пам’яті наведена в [Memory configuration reference](/uk/reference/memory-config):
|
||||
- `agents.defaults.memorySearch.*`
|
||||
- `memory.backend`
|
||||
- `memory.citations`
|
||||
- `memory.qmd.*`
|
||||
- `plugins.entries.memory-core.config.dreaming`
|
||||
- Увімкнені Claude bundle Plugin також можуть додавати вбудовані значення Pi за замовчуванням із `settings.json`; OpenClaw застосовує їх як очищені налаштування агента, а не як необроблені патчі конфігурації OpenClaw.
|
||||
- `plugins.slots.memory`: вибрати id активного Plugin пам’яті або `"none"`, щоб вимкнути Plugin пам’яті.
|
||||
- `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 замість ручного редагування.
|
||||
- Увімкнені бандлові плагіни Claude також можуть додавати вбудовані типові значення Pi із `settings.json`; OpenClaw застосовує їх як санітизовані налаштування агента, а не як сирі патчі конфігурації OpenClaw.
|
||||
- `plugins.slots.memory`: вибрати id активного плагіна пам’яті або `"none"`, щоб вимкнути плагіни пам’яті.
|
||||
- `plugins.slots.contextEngine`: вибрати id активного плагіна рушія контексту; типово `"legacy"`, якщо ви не встановите й не виберете інший рушій.
|
||||
- `plugins.installs`: застарілий сумісний резервний варіант для застарілих
|
||||
метаданих встановлення, якими керує CLI. Нові встановлення плагінів записують керований
|
||||
журнал стану `plugins/installs.json`.
|
||||
- Застарілі записи містять `source`, `spec`, `sourcePath`, `installPath`,
|
||||
`version`, `resolvedName`, `resolvedVersion`, `resolvedSpec`, `integrity`,
|
||||
`shasum`, `resolvedAt`, `installedAt`.
|
||||
- Розглядайте `plugins.installs.*` як керований стан; надавайте перевагу командам CLI над
|
||||
ручним редагуванням.
|
||||
|
||||
Див. [Plugins](/uk/tools/plugin).
|
||||
|
||||
@ -248,46 +253,46 @@ bundled каналів (автентифікація, контроль дост
|
||||
```
|
||||
|
||||
- `evaluateEnabled: false` вимикає `act:evaluate` і `wait --fn`.
|
||||
- `tabCleanup` очищає відстежувані вкладки основного агента після простою або коли
|
||||
- `tabCleanup` звільняє відстежувані вкладки основного агента після простою або коли
|
||||
сесія перевищує свій ліміт. Установіть `idleMinutes: 0` або `maxTabsPerSession: 0`, щоб
|
||||
вимкнути ці окремі режими очищення.
|
||||
- `ssrfPolicy.dangerouslyAllowPrivateNetwork` вимкнено, якщо не задано, тож навігація браузера за замовчуванням залишається суворою.
|
||||
вимкнути відповідні окремі режими очищення.
|
||||
- `ssrfPolicy.dangerouslyAllowPrivateNetwork` вимкнено, якщо не задано, тож навігація браузера типово залишається суворо обмеженою.
|
||||
- Установлюйте `ssrfPolicy.dangerouslyAllowPrivateNetwork: true` лише тоді, коли ви свідомо довіряєте навігації браузера в приватній мережі.
|
||||
- У суворому режимі віддалені кінцеві точки профілів CDP (`profiles.*.cdpUrl`) підлягають такому самому блокуванню приватної мережі під час перевірок доступності/виявлення.
|
||||
- `ssrfPolicy.allowPrivateNetwork` і надалі підтримується як legacy alias.
|
||||
- У суворому режимі кінцеві точки віддалених CDP-профілів (`profiles.*.cdpUrl`) підлягають тому самому блокуванню приватної мережі під час перевірок доступності/виявлення.
|
||||
- `ssrfPolicy.allowPrivateNetwork` і далі підтримується як застарілий псевдонім.
|
||||
- У суворому режимі використовуйте `ssrfPolicy.hostnameAllowlist` і `ssrfPolicy.allowedHostnames` для явних винятків.
|
||||
- Віддалені профілі працюють лише в режимі attach-only (start/stop/reset вимкнено).
|
||||
- Віддалені профілі працюють лише в режимі attach-only (запуск/зупинка/скидання вимкнено).
|
||||
- `profiles.*.cdpUrl` приймає `http://`, `https://`, `ws://` і `wss://`.
|
||||
Використовуйте HTTP(S), коли хочете, щоб OpenClaw виконав виявлення `/json/version`; використовуйте WS(S),
|
||||
коли ваш провайдер надає вам прямий URL WebSocket DevTools.
|
||||
- `remoteCdpTimeoutMs` і `remoteCdpHandshakeTimeoutMs` застосовуються до перевірки доступності віддаленого та
|
||||
`attachOnly` CDP, а також до запитів на відкриття вкладок. Керовані профілі
|
||||
local loopback зберігають локальні значення CDP за замовчуванням.
|
||||
- Якщо до зовнішньо керованого сервісу CDP можна дістатися через local loopback, установіть
|
||||
для цього профілю `attachOnly: true`; інакше OpenClaw сприйматиме порт loopback як
|
||||
локальний керований профіль браузера й може повідомляти про помилки володіння локальним портом.
|
||||
- Профілі `existing-session` використовують Chrome MCP замість CDP і можуть підключатися
|
||||
до вибраного хоста або через підключений вузол браузера.
|
||||
Використовуйте HTTP(S), якщо хочете, щоб OpenClaw виявляв `/json/version`; використовуйте WS(S),
|
||||
коли ваш провайдер надає прямий URL DevTools WebSocket.
|
||||
- `remoteCdpTimeoutMs` і `remoteCdpHandshakeTimeoutMs` застосовуються до віддалених і
|
||||
`attachOnly` перевірок доступності CDP, а також до запитів відкриття вкладок. Керовані loopback-
|
||||
профілі зберігають локальні типові значення CDP.
|
||||
- Якщо зовнішньо керований сервіс CDP доступний через loopback, установіть для цього
|
||||
профілю `attachOnly: true`; інакше OpenClaw трактуватиме loopback-порт як
|
||||
локальний керований профіль браузера і може повідомляти про помилки володіння локальним портом.
|
||||
- Профілі `existing-session` використовують Chrome MCP замість CDP і можуть підключатися на
|
||||
вибраному хості або через підключений browser node.
|
||||
- Профілі `existing-session` можуть задавати `userDataDir`, щоб націлитися на конкретний
|
||||
профіль браузера на базі Chromium, наприклад Brave або Edge.
|
||||
- Профілі `existing-session` зберігають поточні обмеження маршруту Chrome MCP:
|
||||
дії на основі snapshot/ref замість націлювання через CSS-селектори, hook завантаження
|
||||
одного файла, без перевизначення тайм-аутів діалогів, без `wait --load networkidle`, а також без
|
||||
`responsebody`, експорту PDF, перехоплення завантажень або пакетних дій.
|
||||
дії на основі snapshot/ref замість націлювання через CSS-селектори, хуки
|
||||
завантаження одного файла, без перевизначення тайм-аутів діалогів, без `wait --load networkidle`, а також без
|
||||
`responsebody`, експорту PDF, перехоплення завантажень чи пакетних дій.
|
||||
- Локальні керовані профілі `openclaw` автоматично призначають `cdpPort` і `cdpUrl`; явно
|
||||
задавайте `cdpUrl` лише для віддаленого CDP.
|
||||
- Локальні керовані профілі можуть задавати `executablePath`, щоб перевизначити глобальний
|
||||
`browser.executablePath` для цього профілю. Використовуйте це, щоб запускати один профіль у
|
||||
Chrome, а інший — у Brave.
|
||||
- Локальні керовані профілі використовують `browser.localLaunchTimeoutMs` для HTTP-виявлення Chrome CDP
|
||||
після запуску процесу та `browser.localCdpReadyTimeoutMs` для
|
||||
після старту процесу та `browser.localCdpReadyTimeoutMs` для
|
||||
готовності websocket CDP після запуску. Збільшуйте їх на повільніших хостах, де Chrome
|
||||
запускається успішно, але перевірки готовності випереджають завершення запуску.
|
||||
- Порядок автовиявлення: браузер за замовчуванням, якщо він на базі Chromium → Chrome → Brave → Edge → Chromium → Chrome Canary.
|
||||
успішно запускається, але перевірки готовності змагаються зі стартом.
|
||||
- Порядок автовиявлення: типовий браузер, якщо він на базі Chromium → Chrome → Brave → Edge → Chromium → Chrome Canary.
|
||||
- `browser.executablePath` приймає `~` для домашнього каталогу вашої ОС.
|
||||
- Сервіс керування: лише loopback (порт похідний від `gateway.port`, за замовчуванням `18791`).
|
||||
- `extraArgs` додає додаткові прапорці запуску до локального старту Chromium (наприклад,
|
||||
`--disable-gpu`, налаштування розміру вікна або прапорці налагодження).
|
||||
- Сервіс керування: лише loopback (порт визначається з `gateway.port`, типово `18791`).
|
||||
- `extraArgs` додає додаткові прапорці запуску до локального старту Chromium (наприклад
|
||||
`--disable-gpu`, розміри вікна або прапорці налагодження).
|
||||
|
||||
---
|
||||
|
||||
@ -305,8 +310,8 @@ bundled каналів (автентифікація, контроль дост
|
||||
}
|
||||
```
|
||||
|
||||
- `seamColor`: акцентний колір для chrome UI нативного застосунку (тон бульбашки режиму Talk тощо).
|
||||
- `assistant`: перевизначення ідентичності для Control UI. Якщо не задано, використовується ідентичність активного агента.
|
||||
- `seamColor`: колір акценту для chrome інтерфейсу нативного застосунку (відтінок бульбашки Talk Mode тощо).
|
||||
- `assistant`: перевизначення ідентичності Control UI. Якщо не задано, використовується ідентичність активного агента.
|
||||
|
||||
---
|
||||
|
||||
@ -381,68 +386,68 @@ 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`.
|
||||
- **Legacy aliases для 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**: за замовчуванням обов’язкова. Non-loopback bind вимагають auth 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; цей режим навмисно не пропонується у підказках onboarding.
|
||||
- `gateway.auth.mode: "trusted-proxy"`: делегувати auth reverse proxy з контролем ідентичності та довіряти заголовкам ідентичності від `gateway.trustedProxies` (див. [Trusted Proxy Auth](/uk/gateway/trusted-proxy-auth)). Цей режим очікує **non-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`, якщо ви навмисно хочете, щоб трафік localhost теж підлягав rate limiting (для тестових конфігурацій або суворих proxy-розгортань).
|
||||
- Спроби WS auth із браузерного джерела завжди обмежуються без винятку для loopback (додатковий захист від brute force localhost через браузер).
|
||||
- На loopback ці блокування для браузерного джерела ізольовані для кожного нормалізованого значення `Origin`,
|
||||
тому повторні невдалі спроби з одного localhost origin не блокують автоматично
|
||||
- `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` усередині контейнера. За використання bridge-мережі Docker (`-p 18789:18789`) трафік надходить на `eth0`, тому gateway недосяжний. Використовуйте `--network host` або встановіть `bind: "lan"` (або `bind: "custom"` із `customBindHost: "0.0.0.0"`), щоб слухати на всіх інтерфейсах.
|
||||
- **Auth**: типово обов’язкова. Не-loopback bind вимагають auth gateway. На практиці це означає спільний токен/пароль або reverse proxy з урахуванням ідентичності з `gateway.auth.mode: "trusted-proxy"`. Майстер onboarding типово генерує токен.
|
||||
- Якщо налаштовано і `gateway.auth.token`, і `gateway.auth.password` (включно з SecretRef), явно задайте `gateway.auth.mode` як `token` або `password`. Потоки запуску та встановлення/відновлення сервісу завершуються помилкою, якщо налаштовано обидва значення, а режим не задано.
|
||||
- `gateway.auth.mode: "none"`: явний режим без auth. Використовуйте лише для довірених локальних налаштувань local loopback; цей варіант навмисно не пропонується в підказках onboarding.
|
||||
- `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. Цей безтокеновий потік припускає, що хост gateway є довіреним. Типове значення — `true`, коли `tailscale.mode = "serve"`.
|
||||
- `gateway.auth.rateLimit`: необов’язковий обмежувач невдалих auth-спроб. Застосовується для кожної IP-адреси клієнта і для кожної області auth окремо (спільний секрет і токен пристрою відстежуються незалежно). Заблоковані спроби повертають `429` + `Retry-After`.
|
||||
- В асинхронному шляху Tailscale Serve Control UI невдалі спроби для того самого `{scope, clientIp}` серіалізуються перед записом невдачі. Тому одночасні хибні спроби від того самого клієнта можуть спрацювати на лімітер уже на другому запиті, замість того щоб обидві “прослизнули” як звичайні невідповідності.
|
||||
- `gateway.auth.rateLimit.exemptLoopback` типово має значення `true`; установіть `false`, якщо ви навмисно хочете також обмежувати localhost-трафік (для тестових конфігурацій або суворих proxy-розгортань).
|
||||
- Спроби auth для WS з походженням браузера завжди обмежуються, причому виняток для loopback вимкнено (захист у глибину від brute-force атак браузера на localhost).
|
||||
- На loopback ці блокування для браузерного походження ізолюються за нормалізованим значенням `Origin`,
|
||||
тож повторні невдачі з одного localhost origin не блокують автоматично
|
||||
інший origin.
|
||||
- `tailscale.mode`: `serve` (лише tailnet, bind loopback) або `funnel` (публічний, потребує auth).
|
||||
- `controlUi.allowedOrigins`: явний allowlist browser-origin для підключень Gateway WebSocket. Обов’язковий, коли клієнти браузера очікуються з non-loopback origin.
|
||||
- `controlUi.dangerouslyAllowHostHeaderOriginFallback`: небезпечний режим, що вмикає резервний варіант origin через заголовок Host для розгортань, які навмисно покладаються на політику origin на основі Host-header.
|
||||
- `remote.transport`: `ssh` (за замовчуванням) або `direct` (ws/wss). Для `direct` значення `remote.url` має бути `ws://` або `wss://`.
|
||||
- `OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1`: клієнтське аварійне перевизначення через
|
||||
змінну середовища процесу, яке дозволяє незашифрований `ws://` до довірених IP
|
||||
приватної мережі; за замовчуванням незашифрований трафік і далі дозволено лише для loopback. Еквівалента в `openclaw.json` немає, а конфігурація приватної мережі браузера, наприклад
|
||||
`browser.ssrfPolicy.dangerouslyAllowPrivateNetwork`, не впливає на
|
||||
клієнти Gateway WebSocket.
|
||||
- `gateway.remote.token` / `.password`: це поля облікових даних віддаленого клієнта. Вони самі по собі не налаштовують auth gateway.
|
||||
- `gateway.push.apns.relay.baseUrl`: базовий URL HTTPS для зовнішнього APNs relay, який використовують офіційні/TestFlight збірки iOS після публікації relay-backed реєстрацій у 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 URL relay через HTTP. У production URL relay мають лишатися на HTTPS.
|
||||
- `gateway.channelHealthCheckMinutes`: інтервал моніторингу стану каналу в хвилинах. Установіть `0`, щоб глобально вимкнути перезапуски health-monitor. За замовчуванням: `5`.
|
||||
- `gateway.channelStaleEventThresholdMinutes`: поріг застарілого сокета в хвилинах. Тримайте це значення більшим або рівним `gateway.channelHealthCheckMinutes`. За замовчуванням: `30`.
|
||||
- `gateway.channelMaxRestartsPerHour`: максимальна кількість перезапусків health-monitor на канал/обліковий запис за ковзну годину. За замовчуванням: `10`.
|
||||
- `channels.<provider>.healthMonitor.enabled`: opt-out на рівні каналу для перезапусків health-monitor, при цьому глобальний монітор лишається ввімкненим.
|
||||
- `channels.<provider>.accounts.<accountId>.healthMonitor.enabled`: перевизначення на рівні облікового запису для каналів із кількома обліковими записами. Якщо задано, воно має пріоритет над перевизначенням на рівні каналу.
|
||||
- Локальні шляхи виклику gateway можуть використовувати `gateway.remote.*` як резервний варіант лише тоді, коли `gateway.auth.*` не задано.
|
||||
- Якщо `gateway.auth.token` / `gateway.auth.password` явно налаштовано через SecretRef, але не розв’язано, розв’язання завершується fail-closed (без маскування резервним віддаленим варіантом).
|
||||
- `trustedProxies`: IP-адреси reverse proxy, які завершують TLS або вставляють заголовки forwarded-client. Вказуйте лише proxy, які ви контролюєте. Записи loopback і далі припустимі для конфігурацій same-host proxy/local-detection (наприклад, Tailscale Serve або локальний reverse proxy), але вони **не** роблять запити loopback придатними для `gateway.auth.mode: "trusted-proxy"`.
|
||||
- `allowRealIpFallback`: коли `true`, gateway приймає `X-Real-IP`, якщо `X-Forwarded-For` відсутній. За замовчуванням `false` для fail-closed поведінки.
|
||||
- `gateway.nodes.pairing.autoApproveCidrs`: необов’язковий allowlist CIDR/IP для автоматичного схвалення першого спарювання пристрою вузла без запитаних scope. Якщо не задано, вимкнено. Це не схвалює автоматично спарювання operator/browser/Control UI/WebChat, а також не схвалює автоматично підвищення ролі, scope, metadata або public-key.
|
||||
- `gateway.nodes.allowCommands` / `gateway.nodes.denyCommands`: глобальне формування allow/deny для оголошених команд вузла після спарювання та перевірки allowlist.
|
||||
- `gateway.tools.deny`: додаткові назви інструментів, заблоковані для HTTP `POST /tools/invoke` (розширює стандартний deny list).
|
||||
- `gateway.tools.allow`: вилучає назви інструментів зі стандартного deny list.
|
||||
- `controlUi.allowedOrigins`: явний список дозволених browser-origin для підключень Gateway WebSocket. Обов’язковий, коли очікуються браузерні клієнти з не-loopback origin.
|
||||
- `controlUi.dangerouslyAllowHostHeaderOriginFallback`: небезпечний режим, що вмикає fallback origin за заголовком Host для розгортань, які навмисно покладаються на політику origin на основі заголовка Host.
|
||||
- `remote.transport`: `ssh` (типово) або `direct` (ws/wss). Для `direct` `remote.url` має бути `ws://` або `wss://`.
|
||||
- `OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1`: клієнтський аварійний override у середовищі процесу,
|
||||
який дозволяє plaintext `ws://` до довірених IP-адрес приватної мережі; типовим значенням залишається plaintext лише для loopback. Еквівалента в `openclaw.json` немає,
|
||||
а конфігурація приватної мережі браузера, така як
|
||||
`browser.ssrfPolicy.dangerouslyAllowPrivateNetwork`, не впливає на клієнти Gateway
|
||||
WebSocket.
|
||||
- `gateway.remote.token` / `.password`: поля облікових даних віддаленого клієнта. Вони самі по собі не налаштовують auth gateway.
|
||||
- `gateway.push.apns.relay.baseUrl`: базовий HTTPS URL для зовнішнього relay APNs, який використовується офіційними/TestFlight-збірками iOS після того, як вони публікують relay-backed реєстрації в gateway. Цей URL має збігатися з URL relay, скомпільованим у збірці iOS.
|
||||
- `gateway.push.apns.relay.timeoutMs`: тайм-аут надсилання gateway-to-relay у мілісекундах. Типово `10000`.
|
||||
- Relay-backed реєстрації делегуються конкретній ідентичності 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 relay URL. У production URL relay мають залишатися на HTTPS.
|
||||
- `gateway.channelHealthCheckMinutes`: інтервал моніторингу стану каналу в хвилинах. Установіть `0`, щоб глобально вимкнути перезапуски health-monitor. Типово: `5`.
|
||||
- `gateway.channelStaleEventThresholdMinutes`: поріг застарілого сокета в хвилинах. Тримайте його більшим або рівним `gateway.channelHealthCheckMinutes`. Типово: `30`.
|
||||
- `gateway.channelMaxRestartsPerHour`: максимальна кількість перезапусків health-monitor на канал/обліковий запис у ковзній годині. Типово: `10`.
|
||||
- `channels.<provider>.healthMonitor.enabled`: opt-out на рівні каналу для перезапусків health-monitor із збереженням увімкненого глобального монітора.
|
||||
- `channels.<provider>.accounts.<accountId>.healthMonitor.enabled`: перевизначення на рівні облікового запису для multi-account каналів. Якщо задано, має пріоритет над перевизначенням на рівні каналу.
|
||||
- Локальні шляхи виклику gateway можуть використовувати `gateway.remote.*` як запасний варіант лише тоді, коли `gateway.auth.*` не задано.
|
||||
- Якщо `gateway.auth.token` / `gateway.auth.password` явно налаштовано через SecretRef і не розв’язано, розв’язання завершується fail-closed (без маскування через запасний remote fallback).
|
||||
- `trustedProxies`: IP-адреси reverse proxy, які завершують TLS або вставляють forwarded-client заголовки. Указуйте лише proxy, які ви контролюєте. Записи loopback і далі є чинними для конфігурацій same-host proxy/local-detection (наприклад Tailscale Serve або локальний reverse proxy), але вони **не** роблять loopback-запити придатними для `gateway.auth.mode: "trusted-proxy"`.
|
||||
- `allowRealIpFallback`: коли `true`, gateway приймає `X-Real-IP`, якщо `X-Forwarded-For` відсутній. Типово `false` для поведінки fail-closed.
|
||||
- `gateway.nodes.pairing.autoApproveCidrs`: необов’язковий список дозволених CIDR/IP для автоматичного схвалення першого pairing пристрою node без запитаних областей доступу. Коли не задано — вимкнено. Це не схвалює автоматично pairing operator/browser/Control UI/WebChat і не схвалює автоматично оновлення ролі, областей доступу, метаданих чи публічного ключа.
|
||||
- `gateway.nodes.allowCommands` / `gateway.nodes.denyCommands`: глобальне формування allow/deny для оголошених команд node після pairing і перевірки списку дозволу.
|
||||
- `gateway.tools.deny`: додаткові назви інструментів, заблоковані для HTTP `POST /tools/invoke` (розширює типовий список deny).
|
||||
- `gateway.tools.allow`: вилучає назви інструментів із типового HTTP deny-списку.
|
||||
|
||||
</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`
|
||||
Порожні allowlist сприймаються як незадані; використовуйте `gateway.http.endpoints.responses.files.allowUrl=false`
|
||||
та/або `gateway.http.endpoints.responses.images.allowUrl=false`, щоб вимкнути отримання URL.
|
||||
- Необов’язковий заголовок посиленого захисту відповіді:
|
||||
- `gateway.http.securityHeaders.strictTransportSecurity` (установлюйте лише для origin HTTPS, які ви контролюєте; див. [Trusted Proxy Auth](/uk/gateway/trusted-proxy-auth#tls-termination-and-hsts))
|
||||
- Необов’язковий заголовок посилення захисту відповіді:
|
||||
- `gateway.http.securityHeaders.strictTransportSecurity` (задавайте лише для HTTPS origin, які ви контролюєте; див. [Trusted Proxy Auth](/uk/gateway/trusted-proxy-auth#tls-termination-and-hsts))
|
||||
|
||||
### Ізоляція кількох екземплярів
|
||||
|
||||
@ -474,11 +479,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 bundle для перевірки клієнта або користувацьких ланцюгів довіри.
|
||||
|
||||
### `gateway.reload`
|
||||
|
||||
@ -495,12 +500,12 @@ openclaw gateway --port 19001
|
||||
```
|
||||
|
||||
- `mode`: керує тим, як зміни конфігурації застосовуються під час виконання.
|
||||
- `"off"`: ігнорувати зміни наживо; зміни потребують явного перезапуску.
|
||||
- `"off"`: ігнорувати живі зміни; зміни потребують явного перезапуску.
|
||||
- `"restart"`: завжди перезапускати процес gateway при зміні конфігурації.
|
||||
- `"hot"`: застосовувати зміни в межах процесу без перезапуску.
|
||||
- `"hybrid"` (за замовчуванням): спочатку спробувати hot reload; якщо потрібно, перейти до перезапуску.
|
||||
- `"hot"`: застосовувати зміни в процесі без перезапуску.
|
||||
- `"hybrid"` (типово): спочатку спробувати hot reload; якщо потрібно, перейти до перезапуску.
|
||||
- `debounceMs`: вікно debounce у мс перед застосуванням змін конфігурації (невід’ємне ціле число).
|
||||
- `deferralTimeoutMs`: необов’язковий максимальний час у мс для очікування поточних операцій перед примусовим перезапуском. Не вказуйте його або встановіть `0`, щоб чекати необмежено довго й періодично журналювати попередження про те, що ще є незавершені операції.
|
||||
- `deferralTimeoutMs`: необов’язковий максимальний час у мс, протягом якого чекати завершення операцій у процесі перед примусовим перезапуском. Пропустіть його або встановіть `0`, щоб чекати необмежено довго та періодично записувати попередження про операції, що все ще очікують.
|
||||
|
||||
---
|
||||
|
||||
@ -538,37 +543,37 @@ openclaw gateway --port 19001
|
||||
```
|
||||
|
||||
Auth: `Authorization: Bearer <token>` або `x-openclaw-token: <token>`.
|
||||
Hook token у query string відхиляються.
|
||||
Hook-токени в рядку запиту відхиляються.
|
||||
|
||||
Примітки щодо валідації та безпеки:
|
||||
|
||||
- `hooks.enabled=true` вимагає непорожній `hooks.token`.
|
||||
- `hooks.token` має **відрізнятися** від `gateway.auth.token`; повторне використання token Gateway відхиляється.
|
||||
- `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.
|
||||
- Якщо `hooks.allowRequestSessionKey=true`, обмежуйте `hooks.allowedSessionKeyPrefixes` (наприклад `["hook:"]`).
|
||||
- Якщо mapping або preset використовує шаблонізований `sessionKey`, задайте `hooks.allowedSessionKeyPrefixes` і `hooks.allowRequestSessionKey=true`. Статичні ключі mapping не потребують такого opt-in.
|
||||
|
||||
**Endpoints:**
|
||||
**Кінцеві точки:**
|
||||
|
||||
- `POST /hooks/wake` → `{ text, mode?: "now"|"next-heartbeat" }`
|
||||
- `POST /hooks/agent` → `{ message, name?, agentId?, sessionKey?, wakeMode?, deliver?, channel?, to?, model?, thinking?, timeoutSeconds? }`
|
||||
- `sessionKey` із корисного навантаження запиту приймається лише тоді, коли `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="Подробиці mapping">
|
||||
|
||||
- `match.path` відповідає підшляху після `/hooks` (наприклад, `/hooks/gmail` → `gmail`).
|
||||
- `match.source` відповідає полю корисного навантаження для загальних шляхів.
|
||||
- `match.path` зіставляє підшлях після `/hooks` (наприклад, `/hooks/gmail` → `gmail`).
|
||||
- `match.source` зіставляє поле корисного навантаження для загальних шляхів.
|
||||
- Шаблони на кшталт `{{messages[0].subject}}` читають дані з корисного навантаження.
|
||||
- `transform` може вказувати на модуль JS/TS, що повертає hook action.
|
||||
- `transform` може вказувати на модуль JS/TS, що повертає дію hook.
|
||||
- `transform.module` має бути відносним шляхом і залишатися в межах `hooks.transformsDir` (абсолютні шляхи та traversal відхиляються).
|
||||
- `agentId` спрямовує до конкретного агента; невідомі ID повертаються до стандартного.
|
||||
- `allowedAgentIds`: обмежує явну маршрутизацію (`*` або не вказано = дозволити всі, `[]` = заборонити всі).
|
||||
- `defaultSessionKey`: необов’язковий фіксований ключ сесії для запусків hook agent без явного `sessionKey`.
|
||||
- `allowRequestSessionKey`: дозволити викликачам `/hooks/agent` і ключам сесії mapping, керованим шаблонами, задавати `sessionKey` (за замовчуванням: `false`).
|
||||
- `allowedSessionKeyPrefixes`: необов’язковий allowlist префіксів для явних значень `sessionKey` (запит + mapping), наприклад `["hook:"]`. Він стає обов’язковим, коли будь-який mapping або preset використовує шаблонізований `sessionKey`.
|
||||
- `deliver: true` надсилає фінальну відповідь у канал; `channel` за замовчуванням — `last`.
|
||||
- `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>
|
||||
@ -576,8 +581,8 @@ Hook token у query string відхиляються.
|
||||
### Інтеграція 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
|
||||
{
|
||||
@ -600,12 +605,12 @@ Hook token у query string відхиляються.
|
||||
}
|
||||
```
|
||||
|
||||
- Gateway автоматично запускає `gog gmail watch serve` під час завантаження, якщо це налаштовано. Установіть `OPENCLAW_SKIP_GMAIL_WATCHER=1`, щоб вимкнути.
|
||||
- Gateway автоматично запускає `gog gmail watch serve` під час завантаження, якщо це налаштовано. Установіть `OPENCLAW_SKIP_GMAIL_WATCHER=1`, щоб вимкнути це.
|
||||
- Не запускайте окремий `gog gmail watch serve` паралельно з Gateway.
|
||||
|
||||
---
|
||||
|
||||
## Canvas host
|
||||
## Хост Canvas
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -620,11 +625,11 @@ Hook token у query string відхиляються.
|
||||
- Обслуговує редаговані агентом HTML/CSS/JS і A2UI через HTTP на порту Gateway:
|
||||
- `http://<gateway-host>:<gateway.port>/__openclaw__/canvas/`
|
||||
- `http://<gateway-host>:<gateway.port>/__openclaw__/a2ui/`
|
||||
- Лише локально: зберігайте `gateway.bind: "loopback"` (за замовчуванням).
|
||||
- Для non-loopback bind маршрути canvas вимагають auth Gateway (token/password/trusted-proxy), так само як і інші HTTP-поверхні Gateway.
|
||||
- Node WebView зазвичай не надсилають заголовки auth; після спарювання та підключення вузла Gateway рекламує URL можливостей, прив’язані до вузла, для доступу до canvas/A2UI.
|
||||
- URL можливостей прив’язані до активної WS-сесії вузла й швидко спливають. Резервний варіант на основі IP не використовується.
|
||||
- Впроваджує клієнт live reload у HTML, що обслуговується.
|
||||
- Лише локально: зберігайте `gateway.bind: "loopback"` (типово).
|
||||
- Для не-loopback bind: маршрути canvas потребують auth Gateway (token/password/trusted-proxy), як і інші HTTP-поверхні Gateway.
|
||||
- Node WebView зазвичай не надсилають заголовки auth; після pairing і підключення node Gateway рекламує URL можливостей у межах node для доступу до canvas/A2UI.
|
||||
- URL можливостей прив’язані до активної WS-сесії node і швидко спливають. Резервний варіант на основі IP не використовується.
|
||||
- Вбудовує клієнт live-reload у HTML, що обслуговується.
|
||||
- Автоматично створює стартовий `index.html`, якщо каталог порожній.
|
||||
- Також обслуговує A2UI за адресою `/__openclaw__/a2ui/`.
|
||||
- Зміни потребують перезапуску gateway.
|
||||
@ -646,9 +651,9 @@ Hook token у query string відхиляються.
|
||||
}
|
||||
```
|
||||
|
||||
- `minimal` (за замовчуванням): пропускає `cliPath` + `sshPort` із записів TXT.
|
||||
- `minimal` (типово): не включає `cliPath` + `sshPort` у TXT-записи.
|
||||
- `full`: включає `cliPath` + `sshPort`.
|
||||
- Ім’я хоста за замовчуванням — `openclaw`. Перевизначайте через `OPENCLAW_MDNS_HOSTNAME`.
|
||||
- Ім’я хоста типово `openclaw`. Перевизначайте через `OPENCLAW_MDNS_HOSTNAME`.
|
||||
|
||||
### Wide-area (DNS-SD)
|
||||
|
||||
@ -660,7 +665,7 @@ Hook token у query string відхиляються.
|
||||
}
|
||||
```
|
||||
|
||||
Записує зону unicast DNS-SD у `~/.openclaw/dns/`. Для виявлення між мережами поєднуйте з DNS-сервером (рекомендовано CoreDNS) і Tailscale split DNS.
|
||||
Записує зону unicast DNS-SD до `~/.openclaw/dns/`. Для виявлення між мережами поєднуйте це з DNS-сервером (рекомендується CoreDNS) + split DNS у Tailscale.
|
||||
|
||||
Налаштування: `openclaw dns setup --apply`.
|
||||
|
||||
@ -668,7 +673,7 @@ Hook token у query string відхиляються.
|
||||
|
||||
## Середовище
|
||||
|
||||
### `env` (вбудовані env-змінні)
|
||||
### `env` (вбудовані env var)
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -685,14 +690,14 @@ Hook token у query string відхиляються.
|
||||
}
|
||||
```
|
||||
|
||||
- Вбудовані env-змінні застосовуються лише тоді, коли в середовищі процесу відсутній ключ.
|
||||
- Файли `.env`: `.env` поточного робочого каталогу + `~/.openclaw/.env` (жоден не перевизначає наявні змінні).
|
||||
- Вбудовані env var застосовуються лише тоді, коли в середовищі процесу відсутній ключ.
|
||||
- Файли `.env`: `.env` поточного робочого каталогу + `~/.openclaw/.env` (жоден із них не перевизначає наявні змінні).
|
||||
- `shellEnv`: імпортує відсутні очікувані ключі з профілю вашої login shell.
|
||||
- Повний пріоритет див. у [Environment](/uk/help/environment).
|
||||
- Див. [Environment](/uk/help/environment) щодо повного пріоритету.
|
||||
|
||||
### Підстановка env-змінних
|
||||
### Підстановка env var
|
||||
|
||||
Посилайтеся на env-змінні в будь-якому рядку конфігурації через `${VAR_NAME}`:
|
||||
Посилайтеся на env var у будь-якому рядку конфігурації через `${VAR_NAME}`:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -702,16 +707,16 @@ Hook token у query string відхиляються.
|
||||
}
|
||||
```
|
||||
|
||||
- Зіставляються лише назви у верхньому регістрі: `[A-Z_][A-Z0-9_]*`.
|
||||
- Зіставляються лише імена у верхньому регістрі: `[A-Z_][A-Z0-9_]*`.
|
||||
- Відсутні/порожні змінні спричиняють помилку під час завантаження конфігурації.
|
||||
- Екрануйте через `$${VAR}`, щоб отримати буквальний `${VAR}`.
|
||||
- Екрануйте через `$${VAR}` для буквального `${VAR}`.
|
||||
- Працює з `$include`.
|
||||
|
||||
---
|
||||
|
||||
## Секрети
|
||||
|
||||
Посилання на секрети є адитивними: значення у відкритому тексті й надалі працюють.
|
||||
Посилання на секрети є адитивними: прості текстові значення й далі працюють.
|
||||
|
||||
### `SecretRef`
|
||||
|
||||
@ -725,15 +730,15 @@ Hook token у query string відхиляються.
|
||||
|
||||
- шаблон `provider`: `^[a-z][a-z0-9_-]{0,63}$`
|
||||
- шаблон `id` для `source: "env"`: `^[A-Z][A-Z0-9_]{0,127}$`
|
||||
- `id` для `source: "file"`: абсолютний покажчик JSON pointer (наприклад, `"/providers/openai/apiKey"`)
|
||||
- `id` для `source: "file"`: абсолютний 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: "exec"` не повинні містити slash-delimited сегменти шляху `.` або `..` (наприклад, `a/../b` відхиляється)
|
||||
|
||||
### Підтримувана поверхня облікових даних
|
||||
|
||||
- Канонічна матриця: [SecretRef Credential Surface](/uk/reference/secretref-credential-surface)
|
||||
- `secrets apply` націлюється на підтримувані шляхи облікових даних у `openclaw.json`.
|
||||
- Посилання в `auth-profiles.json` включено до runtime-розв’язання та покриття аудиту.
|
||||
- Посилання в `auth-profiles.json` включені в покриття розв’язання під час виконання та аудиту.
|
||||
|
||||
### Конфігурація провайдерів секретів
|
||||
|
||||
@ -765,14 +770,14 @@ Hook token у query string відхиляються.
|
||||
|
||||
Примітки:
|
||||
|
||||
- Провайдер `file` підтримує `mode: "json"` і `mode: "singleValue"` (у режимі singleValue значення `id` має бути `"value"`).
|
||||
- Шляхи провайдерів file і exec завершуються fail-closed, коли перевірка Windows ACL недоступна. Установлюйте `allowInsecurePath: true` лише для довірених шляхів, які неможливо перевірити.
|
||||
- Провайдер `exec` вимагає абсолютний шлях у `command` і використовує протокольні корисні навантаження через stdin/stdout.
|
||||
- За замовчуванням шляхи команд-симлінків відхиляються. Установіть `allowSymlinkCommand: true`, щоб дозволити шляхи симлінків із перевіркою шляху до розв’язаного цільового файла.
|
||||
- Якщо налаштовано `trustedDirs`, перевірка довірених каталогів застосовується до шляху розв’язаної цілі.
|
||||
- Середовище дочірнього процесу `exec` за замовчуванням мінімальне; явно передавайте потрібні змінні через `passEnv`.
|
||||
- Провайдер `file` підтримує `mode: "json"` і `mode: "singleValue"` (у режимі singleValue `id` має бути `"value"`).
|
||||
- Шляхи провайдерів file і exec завершуються fail-closed, якщо перевірка Windows ACL недоступна. Установлюйте `allowInsecurePath: true` лише для довірених шляхів, які неможливо перевірити.
|
||||
- Провайдер `exec` вимагає абсолютний шлях `command` і використовує корисні навантаження протоколу через stdin/stdout.
|
||||
- Типово шляхи команд-символічних посилань відхиляються. Установіть `allowSymlinkCommand: true`, щоб дозволити шляхи-символічні посилання з перевіркою розв’язаного цільового шляху.
|
||||
- Якщо налаштовано `trustedDirs`, перевірка довірених каталогів застосовується до розв’язаного цільового шляху.
|
||||
- Дочірнє середовище `exec` типово є мінімальним; явно передавайте потрібні змінні через `passEnv`.
|
||||
- Посилання на секрети розв’язуються під час активації в знімок у пам’яті, після чого шляхи запитів читають лише цей знімок.
|
||||
- Під час активації застосовується фільтрація активної поверхні: нерозв’язані посилання на ввімкнених поверхнях призводять до помилки запуску/перезавантаження, тоді як неактивні поверхні пропускаються з діагностикою.
|
||||
- Фільтрація активної поверхні застосовується під час активації: нерозв’язані посилання на увімкнених поверхнях призводять до помилки запуску/перезавантаження, а неактивні поверхні пропускаються з діагностикою.
|
||||
|
||||
---
|
||||
|
||||
@ -796,11 +801,11 @@ Hook token у query string відхиляються.
|
||||
|
||||
- Профілі для кожного агента зберігаються в `<agentDir>/auth-profiles.json`.
|
||||
- `auth-profiles.json` підтримує посилання на рівні значень (`keyRef` для `api_key`, `tokenRef` для `token`) для статичних режимів облікових даних.
|
||||
- Профілі режиму OAuth (`auth.profiles.<id>.mode = "oauth"`) не підтримують облікові дані профілів auth на основі SecretRef.
|
||||
- Статичні runtime-облікові дані надходять із розв’язаних знімків у пам’яті; legacy записи в `auth.json` очищаються при виявленні.
|
||||
- Legacy імпорт OAuth із `~/.openclaw/credentials/oauth.json`.
|
||||
- Профілі режиму OAuth (`auth.profiles.<id>.mode = "oauth"`) не підтримують облікові дані auth-profile на основі SecretRef.
|
||||
- Статичні облікові дані runtime надходять із розв’язаних знімків у пам’яті; застарілі статичні записи `auth.json` очищуються при виявленні.
|
||||
- Застарілий імпорт OAuth із `~/.openclaw/credentials/oauth.json`.
|
||||
- Див. [OAuth](/uk/concepts/oauth).
|
||||
- Runtime-поведінка секретів та інструменти `audit/configure/apply`: [Secrets Management](/uk/gateway/secrets).
|
||||
- Поведінка runtime секретів та інструменти `audit/configure/apply`: [Secrets Management](/uk/gateway/secrets).
|
||||
|
||||
### `auth.cooldowns`
|
||||
|
||||
@ -822,24 +827,24 @@ Hook token у query string відхиляються.
|
||||
}
|
||||
```
|
||||
|
||||
- `billingBackoffHours`: базовий backoff у годинах, коли профіль завершується помилкою через справжні
|
||||
помилки білінгу/недостатнього кредиту (за замовчуванням: `5`). Явний текст про білінг
|
||||
усе ще може потрапити сюди навіть у відповідях `401`/`403`, але провайдер-специфічні
|
||||
зіставлювачі тексту лишаються в межах провайдера, якому вони належать (наприклад OpenRouter
|
||||
`Key limit exceeded`). Повторювані повідомлення HTTP `402` про usage-window або
|
||||
ліміти витрат organization/workspace залишаються в шляху `rate_limit`.
|
||||
- `billingBackoffHoursByProvider`: необов’язкові перевизначення годин backoff для білінгу для кожного провайдера.
|
||||
- `billingMaxHours`: верхня межа в годинах для експоненційного зростання backoff білінгу (за замовчуванням: `24`).
|
||||
- `authPermanentBackoffMinutes`: базовий backoff у хвилинах для помилок `auth_permanent` із високою впевненістю (за замовчуванням: `10`).
|
||||
- `authPermanentMaxMinutes`: верхня межа в хвилинах для зростання backoff `auth_permanent` (за замовчуванням: `60`).
|
||||
- `failureWindowHours`: ковзне вікно в годинах, що використовується для лічильників backoff (за замовчуванням: `24`).
|
||||
- `overloadedProfileRotations`: максимальна кількість ротацій auth-profile того самого провайдера для перевантажених помилок перед переходом до резервної моделі (за замовчуванням: `1`). Форми на кшталт `ModelNotReadyException`, що вказують на зайнятість провайдера, потрапляють сюди.
|
||||
- `overloadedBackoffMs`: фіксована затримка перед повторною спробою ротації перевантаженого провайдера/профілю (за замовчуванням: `0`).
|
||||
- `rateLimitedProfileRotations`: максимальна кількість ротацій auth-profile того самого провайдера для помилок rate-limit перед переходом до резервної моделі (за замовчуванням: `1`). До цього кошика rate-limit входить текст, характерний для провайдерів, такий як `Too many concurrent requests`, `ThrottlingException`, `concurrency limit reached`, `workers_ai ... quota limit exceeded` і `resource exhausted`.
|
||||
- `billingBackoffHours`: базовий backoff у годинах, коли профіль зазнає невдачі через справжні помилки білінгу/недостатнього кредиту (типово: `5`). Явний текст про білінг
|
||||
усе ще може потрапити сюди навіть за відповідей `401`/`403`, але
|
||||
зіставлювачі тексту, специфічні для провайдера, залишаються прив’язаними до
|
||||
провайдера, якому вони належать (наприклад OpenRouter
|
||||
`Key limit exceeded`). Повторювані HTTP `402` повідомлення про usage-window або
|
||||
organization/workspace spend-limit натомість залишаються в шляху `rate_limit`.
|
||||
- `billingBackoffHoursByProvider`: необов’язкові перевизначення годин backoff для білінгу за провайдерами.
|
||||
- `billingMaxHours`: верхня межа в годинах для експоненційного зростання billing backoff (типово: `24`).
|
||||
- `authPermanentBackoffMinutes`: базовий backoff у хвилинах для збоїв `auth_permanent` з високою впевненістю (типово: `10`).
|
||||
- `authPermanentMaxMinutes`: верхня межа в хвилинах для зростання backoff `auth_permanent` (типово: `60`).
|
||||
- `failureWindowHours`: ковзне вікно в годинах, яке використовується для лічильників backoff (типово: `24`).
|
||||
- `overloadedProfileRotations`: максимальна кількість ротацій auth-profile того самого провайдера для помилок перевантаження перед переходом до резервної моделі (типово: `1`). Сюди потрапляють форми на кшталт `ModelNotReadyException`, що означають зайнятість провайдера.
|
||||
- `overloadedBackoffMs`: фіксована затримка перед повторною спробою ротації перевантаженого провайдера/профілю (типово: `0`).
|
||||
- `rateLimitedProfileRotations`: максимальна кількість ротацій auth-profile того самого провайдера для помилок rate-limit перед переходом до резервної моделі (типово: `1`). Цей кошик rate-limit включає текст у формі провайдера, наприклад `Too many concurrent requests`, `ThrottlingException`, `concurrency limit reached`, `workers_ai ... quota limit exceeded` і `resource exhausted`.
|
||||
|
||||
---
|
||||
|
||||
## Журналювання
|
||||
## Логування
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -854,10 +859,10 @@ Hook token у query string відхиляються.
|
||||
}
|
||||
```
|
||||
|
||||
- Стандартний файл журналу: `/tmp/openclaw/openclaw-YYYY-MM-DD.log`.
|
||||
- Типовий файл журналу: `/tmp/openclaw/openclaw-YYYY-MM-DD.log`.
|
||||
- Установіть `logging.file` для стабільного шляху.
|
||||
- `consoleLevel` підвищується до `debug` за `--verbose`.
|
||||
- `maxFileBytes`: максимальний розмір файла журналу в байтах, після якого записи припиняються (додатне ціле число; за замовчуванням: `524288000` = 500 MB). Для production-розгортань використовуйте зовнішню ротацію журналів.
|
||||
- `consoleLevel` підвищується до `debug` із `--verbose`.
|
||||
- `maxFileBytes`: максимальний розмір файла журналу в байтах, після якого запис припиняється (додатне ціле число; типово: `524288000` = 500 MB). Для production-розгортань використовуйте зовнішню ротацію логів.
|
||||
|
||||
---
|
||||
|
||||
@ -902,22 +907,22 @@ Hook token у query string відхиляються.
|
||||
}
|
||||
```
|
||||
|
||||
- `enabled`: головний перемикач для виводу інструментування (за замовчуванням: `true`).
|
||||
- `flags`: масив рядків-прапорців, що вмикають цільовий вивід журналів (підтримує шаблони з wildcard, як-от `"telegram.*"` або `"*"`).
|
||||
- `stuckSessionWarnMs`: поріг віку в мс для виводу попереджень про завислу сесію, поки сесія лишається у стані обробки.
|
||||
- `otel.enabled`: вмикає конвеєр експорту OpenTelemetry (за замовчуванням: `false`).
|
||||
- `enabled`: головний перемикач для виведення інструментування (типово: `true`).
|
||||
- `flags`: масив рядків-прапорців, які вмикають цільове виведення логів (підтримує шаблони з wildcard, як-от `"telegram.*"` або `"*"`).
|
||||
- `stuckSessionWarnMs`: поріг віку в мс для виведення попереджень про завислі сесії, поки сесія залишається в стані обробки.
|
||||
- `otel.enabled`: вмикає конвеєр експорту OpenTelemetry (типово: `false`).
|
||||
- `otel.endpoint`: URL колектора для експорту OTel.
|
||||
- `otel.protocol`: `"http/protobuf"` (за замовчуванням) або `"grpc"`.
|
||||
- `otel.protocol`: `"http/protobuf"` (типово) або `"grpc"`.
|
||||
- `otel.headers`: додаткові заголовки метаданих HTTP/gRPC, що надсилаються із запитами експорту OTel.
|
||||
- `otel.serviceName`: назва сервісу для атрибутів ресурсу.
|
||||
- `otel.traces` / `otel.metrics` / `otel.logs`: увімкнути експорт трасувань, метрик або журналів.
|
||||
- `otel.sampleRate`: коефіцієнт семплювання трасувань `0`–`1`.
|
||||
- `otel.serviceName`: ім’я сервісу для атрибутів ресурсу.
|
||||
- `otel.traces` / `otel.metrics` / `otel.logs`: вмикають експорт trace, metrics або logs.
|
||||
- `otel.sampleRate`: частота вибірки trace `0`–`1`.
|
||||
- `otel.flushIntervalMs`: інтервал періодичного скидання телеметрії в мс.
|
||||
- `otel.captureContent`: opt-in захоплення необробленого вмісту для атрибутів span OTEL. За замовчуванням вимкнено. Булеве значення `true` захоплює вміст повідомлень/інструментів, крім system; форма об’єкта дає змогу явно ввімкнути `inputMessages`, `outputMessages`, `toolInputs`, `toolOutputs` і `systemPrompt`.
|
||||
- `OPENCLAW_OTEL_PRELOADED=1`: перемикач середовища для хостів, які вже зареєстрували глобальний SDK OpenTelemetry. Тоді OpenClaw пропускає запуск/завершення SDK, що належить Plugin, зберігаючи активними діагностичні слухачі.
|
||||
- `cacheTrace.enabled`: журналювати знімки trace кешу для вбудованих запусків (за замовчуванням: `false`).
|
||||
- `cacheTrace.filePath`: шлях виводу для JSONL trace кешу (за замовчуванням: `$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl`).
|
||||
- `cacheTrace.includeMessages` / `includePrompt` / `includeSystem`: керують тим, що включається у вивід trace кешу (усі за замовчуванням: `true`).
|
||||
- `otel.captureContent`: opt-in захоплення сирого вмісту для атрибутів span OTEL. Типово вимкнено. Булеве значення `true` захоплює вміст не-system повідомлень/інструментів; форма об’єкта дає змогу явно ввімкнути `inputMessages`, `outputMessages`, `toolInputs`, `toolOutputs` і `systemPrompt`.
|
||||
- `OPENCLAW_OTEL_PRELOADED=1`: прапорець середовища для хостів, які вже зареєстрували глобальний OpenTelemetry SDK. Тоді OpenClaw пропускає запуск/завершення SDK, що належить плагіну, зберігаючи активними діагностичні слухачі.
|
||||
- `cacheTrace.enabled`: журналювати знімки trace кешу для вбудованих запусків (типово: `false`).
|
||||
- `cacheTrace.filePath`: шлях виводу для cache trace JSONL (типово: `$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl`).
|
||||
- `cacheTrace.includeMessages` / `includePrompt` / `includeSystem`: керують тим, що включається у вивід cache trace (усі типово: `true`).
|
||||
|
||||
---
|
||||
|
||||
@ -939,12 +944,12 @@ Hook token у query string відхиляються.
|
||||
}
|
||||
```
|
||||
|
||||
- `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`: увімкнути фонове автооновлення для package-встановлень (типово: `false`).
|
||||
- `auto.stableDelayHours`: мінімальна затримка в годинах перед автозастосуванням stable-каналу (типово: `6`; максимум: `168`).
|
||||
- `auto.stableJitterHours`: додаткове вікно розподілу розгортання stable-каналу в годинах (типово: `12`; максимум: `168`).
|
||||
- `auto.betaCheckIntervalHours`: як часто виконуються перевірки beta-каналу, у годинах (типово: `1`; максимум: `24`).
|
||||
|
||||
---
|
||||
|
||||
@ -977,22 +982,22 @@ Hook token у query string відхиляються.
|
||||
}
|
||||
```
|
||||
|
||||
- `enabled`: глобальний feature gate ACP (за замовчуванням: `false`).
|
||||
- `dispatch.enabled`: незалежний перемикач для dispatch ходів сесії ACP (за замовчуванням: `true`). Установіть `false`, щоб залишити команди ACP доступними, але заблокувати виконання.
|
||||
- `backend`: ID стандартного runtime-backend ACP (має збігатися із зареєстрованим Plugin runtime ACP).
|
||||
- `defaultAgent`: резервний ID цільового агента ACP, коли spawn не задає явну ціль.
|
||||
- `allowedAgents`: allowlist ID агентів, дозволених для runtime-сесій ACP; порожнє значення означає відсутність додаткових обмежень.
|
||||
- `enabled`: глобальний feature gate ACP (типово: `false`).
|
||||
- `dispatch.enabled`: незалежний gate для диспетчеризації ходів сесії ACP (типово: `true`). Установіть `false`, щоб команди ACP залишалися доступними, але виконання блокувалося.
|
||||
- `backend`: id типового backend середовища виконання ACP (має збігатися із зареєстрованим плагіном runtime ACP).
|
||||
- `defaultAgent`: резервний id цільового агента ACP, коли spawn не задає явну ціль.
|
||||
- `allowedAgents`: список дозволу id агентів, дозволених для сесій runtime ACP; порожнє значення означає відсутність додаткових обмежень.
|
||||
- `maxConcurrentSessions`: максимальна кількість одночасно активних сесій ACP.
|
||||
- `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`: TTL простою в хвилинах для працівників сесії ACP до моменту, коли їх можна очищати.
|
||||
- `runtime.installCommand`: необов’язкова команда встановлення для запуску під час початкового налаштування середовища runtime ACP.
|
||||
- `stream.maxChunkChars`: максимальний розмір фрагмента перед розбиттям проєкції потокового блока.
|
||||
- `stream.repeatSuppression`: придушувати повторювані рядки статусу/інструментів на хід (типово: `true`).
|
||||
- `stream.deliveryMode`: `"live"` передає потік поступово; `"final_only"` буферизує до термінальних подій ходу.
|
||||
- `stream.hiddenBoundarySeparator`: роздільник перед видимим текстом після прихованих подій інструментів (типово: `"paragraph"`).
|
||||
- `stream.maxOutputChars`: максимальна кількість символів виводу помічника, проєктованих на хід ACP.
|
||||
- `stream.maxSessionUpdateChars`: максимальна кількість символів для проєктованих рядків статусу/оновлень ACP.
|
||||
- `stream.tagVisibility`: запис імен тегів до булевих перевизначень видимості для потокових подій.
|
||||
- `runtime.ttlMinutes`: TTL простою в хвилинах для worker сесій ACP перед допустимим очищенням.
|
||||
- `runtime.installCommand`: необов’язкова команда встановлення, яку слід запустити під час bootstrap середовища runtime ACP.
|
||||
|
||||
---
|
||||
|
||||
@ -1009,16 +1014,16 @@ Hook token у query string відхиляються.
|
||||
```
|
||||
|
||||
- `cli.banner.taglineMode` керує стилем слогана банера:
|
||||
- `"random"` (за замовчуванням): ротація кумедних/сезонних слоганів.
|
||||
- `"random"` (типово): змінні кумедні/сезонні слогани.
|
||||
- `"default"`: фіксований нейтральний слоган (`All your chats, one OpenClaw.`).
|
||||
- `"off"`: без тексту слогана (заголовок/версія банера все одно показуються).
|
||||
- Щоб приховати весь банер (а не лише слогани), установіть env `OPENCLAW_HIDE_BANNER=1`.
|
||||
- Щоб приховати весь банер (а не лише слогани), задайте env `OPENCLAW_HIDE_BANNER=1`.
|
||||
|
||||
---
|
||||
|
||||
## Wizard
|
||||
|
||||
Метадані, які записуються потоками покрокового налаштування CLI (`onboard`, `configure`, `doctor`):
|
||||
Метадані, які записуються потоками керованого налаштування CLI (`onboard`, `configure`, `doctor`):
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -1034,17 +1039,17 @@ Hook token у query string відхиляються.
|
||||
|
||||
---
|
||||
|
||||
## Ідентичність
|
||||
## Identity
|
||||
|
||||
Див. поля ідентичності `agents.list` у [Agent defaults](/uk/gateway/config-agents#agent-defaults).
|
||||
Див. поля identity у `agents.list` у розділі [Agent defaults](/uk/gateway/config-agents#agent-defaults).
|
||||
|
||||
---
|
||||
|
||||
## Bridge (legacy, вилучено)
|
||||
## Bridge (застарілий, видалено)
|
||||
|
||||
Поточні збірки більше не містять TCP bridge. Nodes підключаються через Gateway WebSocket. Ключі `bridge.*` більше не входять до схеми конфігурації (валідація завершується помилкою, доки їх не буде вилучено; `openclaw doctor --fix` може прибрати невідомі ключі).
|
||||
Поточні збірки більше не містять TCP bridge. Node підключаються через Gateway WebSocket. Ключі `bridge.*` більше не є частиною схеми конфігурації (валідація завершується помилкою, доки їх не буде видалено; `openclaw doctor --fix` може прибрати невідомі ключі).
|
||||
|
||||
<Accordion title="Конфігурація legacy bridge (історична довідка)">
|
||||
<Accordion title="Застаріла конфігурація bridge (історична довідка)">
|
||||
|
||||
```json
|
||||
{
|
||||
@ -1082,11 +1087,11 @@ Hook token у query string відхиляються.
|
||||
}
|
||||
```
|
||||
|
||||
- `sessionRetention`: як довго зберігати завершені ізольовані сесії запуску cron перед обрізанням із `sessions.json`. Також керує очищенням архівованих видалених транскриптів cron. За замовчуванням: `24h`; установіть `false`, щоб вимкнути.
|
||||
- `runLog.maxBytes`: максимальний розмір файла журналу для одного запуску (`cron/runs/<jobId>.jsonl`) перед обрізанням. За замовчуванням: `2_000_000` байтів.
|
||||
- `runLog.keepLines`: кількість найновіших рядків, що зберігаються під час обрізання журналу запуску. За замовчуванням: `2000`.
|
||||
- `webhookToken`: bearer token, що використовується для доставлення POST у Webhook cron (`delivery.mode = "webhook"`); якщо не задано, заголовок auth не надсилається.
|
||||
- `webhook`: застарілий legacy fallback URL Webhook (http/https), що використовується лише для збережених завдань, які все ще мають `notify: true`.
|
||||
- `sessionRetention`: як довго зберігати завершені ізольовані сесії запусків cron перед очищенням із `sessions.json`. Також керує очищенням архівованих видалених транскриптів cron. Типово: `24h`; установіть `false`, щоб вимкнути.
|
||||
- `runLog.maxBytes`: максимальний розмір файла журналу на запуск (`cron/runs/<jobId>.jsonl`) перед очищенням. Типово: `2_000_000` байтів.
|
||||
- `runLog.keepLines`: найновіші рядки, що зберігаються при запуску очищення run-log. Типово: `2000`.
|
||||
- `webhookToken`: bearer token, що використовується для доставки cron Webhook POST (`delivery.mode = "webhook"`); якщо не задано, заголовок auth не надсилається.
|
||||
- `webhook`: застарілий резервний URL Webhook (http/https), який використовується лише для збережених завдань, що все ще мають `notify: true`.
|
||||
|
||||
### `cron.retry`
|
||||
|
||||
@ -1102,11 +1107,11 @@ Hook token у query string відхиляються.
|
||||
}
|
||||
```
|
||||
|
||||
- `maxAttempts`: максимальна кількість повторних спроб для одноразових завдань при тимчасових помилках (за замовчуванням: `3`; діапазон: `0`–`10`).
|
||||
- `backoffMs`: масив затримок backoff у мс для кожної повторної спроби (за замовчуванням: `[30000, 60000, 300000]`; 1–10 елементів).
|
||||
- `retryOn`: типи помилок, які запускають повторні спроби — `"rate_limit"`, `"overloaded"`, `"network"`, `"timeout"`, `"server_error"`. Не вказуйте, щоб повторювати для всіх тимчасових типів.
|
||||
- `maxAttempts`: максимальна кількість повторних спроб для одноразових завдань при тимчасових помилках (типово: `3`; діапазон: `0`–`10`).
|
||||
- `backoffMs`: масив затримок backoff у мс для кожної повторної спроби (типово: `[30000, 60000, 300000]`; 1–10 записів).
|
||||
- `retryOn`: типи помилок, що запускають повторні спроби — `"rate_limit"`, `"overloaded"`, `"network"`, `"timeout"`, `"server_error"`. Пропустіть, щоб повторювати всі тимчасові типи.
|
||||
|
||||
Застосовується лише до одноразових cron-завдань. Для повторюваних завдань обробка помилок окрема.
|
||||
Застосовується лише до одноразових cron-завдань. Повторювані завдання використовують окрему обробку помилок.
|
||||
|
||||
### `cron.failureAlert`
|
||||
|
||||
@ -1124,11 +1129,11 @@ Hook token у query string відхиляються.
|
||||
}
|
||||
```
|
||||
|
||||
- `enabled`: увімкнути сповіщення про збої для cron-завдань (за замовчуванням: `false`).
|
||||
- `after`: кількість послідовних збоїв перед спрацюванням сповіщення (додатне ціле число, мін.: `1`).
|
||||
- `enabled`: увімкнути сповіщення про збої для cron-завдань (типово: `false`).
|
||||
- `after`: кількість послідовних збоїв перед спрацюванням сповіщення (додатне ціле число, мінімум: `1`).
|
||||
- `cooldownMs`: мінімальна кількість мілісекунд між повторними сповіщеннями для того самого завдання (невід’ємне ціле число).
|
||||
- `mode`: режим доставлення — `"announce"` надсилає через повідомлення каналу; `"webhook"` надсилає POST на налаштований Webhook.
|
||||
- `accountId`: необов’язковий ID облікового запису або каналу для обмеження області доставлення сповіщень.
|
||||
- `mode`: режим доставки — `"announce"` надсилає через повідомлення каналу; `"webhook"` виконує POST на налаштований Webhook.
|
||||
- `accountId`: необов’язковий id облікового запису або каналу для області доставки сповіщення.
|
||||
|
||||
### `cron.failureDestination`
|
||||
|
||||
@ -1145,13 +1150,13 @@ Hook token у query string відхиляються.
|
||||
}
|
||||
```
|
||||
|
||||
- Стандартне місце призначення для сповіщень про збої cron для всіх завдань.
|
||||
- `mode`: `"announce"` або `"webhook"`; за замовчуванням `"announce"`, коли є достатньо даних про ціль.
|
||||
- `channel`: перевизначення каналу для доставлення announce. `"last"` повторно використовує останній відомий канал доставлення.
|
||||
- Типова ціль для сповіщень про збої cron для всіх завдань.
|
||||
- `mode`: `"announce"` або `"webhook"`; типово `"announce"`, коли є достатньо даних про ціль.
|
||||
- `channel`: перевизначення каналу для доставки announce. `"last"` повторно використовує останній відомий канал доставки.
|
||||
- `to`: явна ціль announce або URL Webhook. Обов’язкове для режиму webhook.
|
||||
- `accountId`: необов’язкове перевизначення облікового запису для доставлення.
|
||||
- `delivery.failureDestination` для окремого завдання перевизначає це глобальне значення.
|
||||
- Коли не задано ні глобальне, ні значення призначення збою для окремого завдання, завдання, які вже доставляють через `announce`, у разі збою використовують цю основну announce-ціль як резервну.
|
||||
- `accountId`: необов’язкове перевизначення облікового запису для доставки.
|
||||
- `delivery.failureDestination` на рівні завдання перевизначає це глобальне типове значення.
|
||||
- Якщо не задано ні глобальної, ні окремої цілі збою для завдання, завдання, які вже доставляють через `announce`, у разі збою повертаються до цієї основної announce-цілі.
|
||||
- `delivery.failureDestination` підтримується лише для завдань `sessionTarget="isolated"`, якщо тільки основний `delivery.mode` завдання не дорівнює `"webhook"`.
|
||||
|
||||
Див. [Cron Jobs](/uk/automation/cron-jobs). Ізольовані виконання cron відстежуються як [background tasks](/uk/automation/tasks).
|
||||
@ -1160,36 +1165,36 @@ Hook token у query string відхиляються.
|
||||
|
||||
## Змінні шаблону моделі медіа
|
||||
|
||||
Заповнювачі шаблону, що розгортаються в `tools.media.models[].args`:
|
||||
Заповнювачі шаблонів, що розгортаються в `tools.media.models[].args`:
|
||||
|
||||
| Змінна | Опис |
|
||||
| ----------------- | --------------------------------------------------- |
|
||||
| `{{Body}}` | Повний текст вхідного повідомлення |
|
||||
| `{{RawBody}}` | Необроблений текст (без обгорток історії/відправника) |
|
||||
| `{{BodyStripped}}`| Текст без згадувань у групі |
|
||||
| `{{From}}` | Ідентифікатор відправника |
|
||||
| `{{To}}` | Ідентифікатор призначення |
|
||||
| `{{MessageSid}}` | ID повідомлення каналу |
|
||||
| `{{SessionId}}` | UUID поточної сесії |
|
||||
| `{{IsNewSession}}`| `"true"`, коли створено нову сесію |
|
||||
| `{{MediaUrl}}` | Псевдо-URL вхідного медіа |
|
||||
| `{{MediaPath}}` | Локальний шлях до медіа |
|
||||
| `{{MediaType}}` | Тип медіа (image/audio/document/…) |
|
||||
| `{{Transcript}}` | Транскрипт аудіо |
|
||||
| `{{Prompt}}` | Розв’язаний медіа-промпт для записів CLI |
|
||||
| Змінна | Опис |
|
||||
| ----------------- | ------------------------------------------------- |
|
||||
| `{{Body}}` | Повний текст вхідного повідомлення |
|
||||
| `{{RawBody}}` | Сирий текст (без обгорток історії/відправника) |
|
||||
| `{{BodyStripped}}`| Текст без згадок у групі |
|
||||
| `{{From}}` | Ідентифікатор відправника |
|
||||
| `{{To}}` | Ідентифікатор призначення |
|
||||
| `{{MessageSid}}` | id повідомлення каналу |
|
||||
| `{{SessionId}}` | UUID поточної сесії |
|
||||
| `{{IsNewSession}}`| `"true"`, коли створено нову сесію |
|
||||
| `{{MediaUrl}}` | Псевдо-URL вхідного медіа |
|
||||
| `{{MediaPath}}` | Локальний шлях до медіа |
|
||||
| `{{MediaType}}` | Тип медіа (image/audio/document/…) |
|
||||
| `{{Transcript}}` | Транскрипт аудіо |
|
||||
| `{{Prompt}}` | Розв’язаний медіа-prompt для записів CLI |
|
||||
| `{{MaxChars}}` | Розв’язана максимальна кількість символів виводу для записів CLI |
|
||||
| `{{ChatType}}` | `"direct"` або `"group"` |
|
||||
| `{{GroupSubject}}`| Тема групи (best effort) |
|
||||
| `{{GroupMembers}}`| Попередній список учасників групи (best effort) |
|
||||
| `{{SenderName}}` | Відображуване ім’я відправника (best effort) |
|
||||
| `{{SenderE164}}` | Номер телефону відправника (best effort) |
|
||||
| `{{ChatType}}` | `"direct"` або `"group"` |
|
||||
| `{{GroupSubject}}`| Тема групи (best effort) |
|
||||
| `{{GroupMembers}}`| Попередній перегляд учасників групи (best effort) |
|
||||
| `{{SenderName}}` | Відображуване ім’я відправника (best effort) |
|
||||
| `{{SenderE164}}` | Номер телефону відправника (best effort) |
|
||||
| `{{Provider}}` | Підказка провайдера (whatsapp, telegram, discord тощо) |
|
||||
|
||||
---
|
||||
|
||||
## Include конфігурації (`$include`)
|
||||
|
||||
Розділяйте конфігурацію на кілька файлів:
|
||||
Розділіть конфігурацію на кілька файлів:
|
||||
|
||||
```json5
|
||||
// ~/.openclaw/openclaw.json
|
||||
@ -1205,13 +1210,13 @@ Hook token у query string відхиляються.
|
||||
**Поведінка злиття:**
|
||||
|
||||
- Один файл: замінює об’єкт-контейнер.
|
||||
- Масив файлів: deep merge у заданому порядку (пізніші перевизначають попередні).
|
||||
- Масив файлів: deep-merge у вказаному порядку (пізніші значення перевизначають попередні).
|
||||
- Сусідні ключі: зливаються після 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.
|
||||
- Шляхи: розв’язуються відносно файлу, який містить include, але мають залишатися в межах каталогу конфігурації верхнього рівня (`dirname` від `openclaw.json`). Абсолютні форми/`../` дозволені лише тоді, коли після розв’язання вони все одно залишаються в межах цього кордону.
|
||||
- Записи, якими керує OpenClaw і які змінюють лише один розділ верхнього рівня, підкріплений include одного файлу, записуються безпосередньо в цей включений файл. Наприклад, `plugins install` оновлює `plugins: { $include: "./plugins.json5" }` у `plugins.json5` і залишає `openclaw.json` незмінним.
|
||||
- Кореневі include, масиви include та include із сусідніми перевизначеннями доступні лише для читання для записів, якими керує OpenClaw; такі записи завершуються fail-closed замість сплощення конфігурації.
|
||||
- Помилки: зрозумілі повідомлення про відсутні файли, помилки парсингу та циклічні include.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@ -1,15 +1,15 @@
|
||||
---
|
||||
read_when:
|
||||
- Вам потрібен зрозумілий для початківців огляд журналювання
|
||||
- Вам потрібен огляд журналювання, зрозумілий для початківців
|
||||
- Ви хочете налаштувати рівні журналювання або формати
|
||||
- Ви усуваєте неполадки й хочете швидко знайти журнали
|
||||
summary: 'Огляд журналювання: журнали у файлах, вивід у консолі, відстеження через CLI та Control UI'
|
||||
- Ви усуваєте несправності й хочете швидко знайти журнали
|
||||
summary: 'Огляд журналювання: журнали файлів, виведення в консоль, перегляд журналів у CLI та інтерфейс Control UI'
|
||||
title: Огляд журналювання
|
||||
x-i18n:
|
||||
generated_at: "2026-04-25T08:32:08Z"
|
||||
generated_at: "2026-04-25T18:41:27Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: e16a8aa487616c338c625c55fdfcc604759ee7b1e235b0b318b36d7a6fb07ab8
|
||||
source_hash: 745c14ef9ca008d43a0f4f2d5c051ec6bafbe5249e1a1753448182fff72afd6e
|
||||
source_path: logging.md
|
||||
workflow: 15
|
||||
---
|
||||
@ -18,14 +18,14 @@ x-i18n:
|
||||
|
||||
OpenClaw має дві основні поверхні журналювання:
|
||||
|
||||
- **Журнали у файлах** (рядки JSON), які записує Gateway.
|
||||
- **Вивід у консоль**, що показується в терміналах і в Gateway Debug UI.
|
||||
- **Файлові журнали** (рядки JSON), які записує Gateway.
|
||||
- **Виведення в консоль**, яке показується в терміналах і в інтерфейсі Gateway Debug UI.
|
||||
|
||||
Вкладка **Logs** у Control UI відстежує журнал файлу gateway. На цій сторінці пояснюється, де зберігаються журнали, як їх читати та як налаштовувати рівні журналювання і формати.
|
||||
Вкладка **Logs** в Control UI відстежує файловий журнал gateway. На цій сторінці пояснюється, де зберігаються журнали, як їх читати та як налаштовувати рівні й формати журналювання.
|
||||
|
||||
## Де зберігаються журнали
|
||||
|
||||
Типово Gateway записує ротаційний файл журналу в:
|
||||
За замовчуванням Gateway записує циклічний файл журналу в:
|
||||
|
||||
`/tmp/openclaw/openclaw-YYYY-MM-DD.log`
|
||||
|
||||
@ -43,7 +43,7 @@ OpenClaw має дві основні поверхні журналювання:
|
||||
|
||||
## Як читати журнали
|
||||
|
||||
### CLI: відстеження в реальному часі (рекомендовано)
|
||||
### CLI: перегляд у реальному часі (рекомендовано)
|
||||
|
||||
Використовуйте CLI, щоб відстежувати файл журналу gateway через RPC:
|
||||
|
||||
@ -51,30 +51,30 @@ OpenClaw має дві основні поверхні журналювання:
|
||||
openclaw logs --follow
|
||||
```
|
||||
|
||||
Корисні актуальні параметри:
|
||||
Корисні поточні параметри:
|
||||
|
||||
- `--local-time`: відображати часові мітки у вашому локальному часовому поясі
|
||||
- `--url <url>` / `--token <token>` / `--timeout <ms>`: стандартні прапорці Gateway RPC
|
||||
- `--expect-final`: прапорець очікування фінальної відповіді для RPC на основі агентів (підтримується тут через спільний клієнтський шар)
|
||||
- `--expect-final`: прапорець очікування фінальної відповіді для RPC на базі агента (приймається тут через спільний клієнтський шар)
|
||||
|
||||
Режими виводу:
|
||||
Режими виведення:
|
||||
|
||||
- **TTY-сеанси**: гарні, кольорові, структуровані рядки журналу.
|
||||
- **Не-TTY-сеанси**: звичайний текст.
|
||||
- `--json`: JSON з розділенням по рядках (одна подія журналу на рядок).
|
||||
- `--plain`: примусово використовувати звичайний текст у TTY-сеансах.
|
||||
- **Сеанси TTY**: зручні для читання, кольорові, структуровані рядки журналу.
|
||||
- **Сеанси без TTY**: звичайний текст.
|
||||
- `--json`: JSON із розділенням по рядках (одна подія журналу на рядок).
|
||||
- `--plain`: примусово використовувати звичайний текст у сеансах TTY.
|
||||
- `--no-color`: вимкнути кольори ANSI.
|
||||
|
||||
Коли ви передаєте явний `--url`, CLI не застосовує автоматично облікові дані з конфігурації або середовища; додайте `--token` самостійно, якщо цільовий Gateway вимагає автентифікації.
|
||||
Коли ви передаєте явний `--url`, CLI не застосовує автоматично облікові дані з конфігурації або середовища; якщо цільовий Gateway вимагає автентифікації, додайте `--token` самостійно.
|
||||
|
||||
У режимі JSON CLI виводить об’єкти з міткою `type`:
|
||||
У режимі JSON CLI виводить об’єкти з тегом `type`:
|
||||
|
||||
- `meta`: метадані потоку (файл, курсор, розмір)
|
||||
- `log`: розібраний запис журналу
|
||||
- `notice`: підказки щодо обрізання / ротації
|
||||
- `notice`: підказки про обрізання / ротацію
|
||||
- `raw`: нерозібраний рядок журналу
|
||||
|
||||
Якщо Gateway на local loopback запитує сполучення, `openclaw logs` автоматично переключається на налаштований локальний файл журналу. Явні цілі `--url` цей резервний механізм не використовують.
|
||||
Якщо локальний loopback Gateway запитує сполучення, `openclaw logs` автоматично переходить до налаштованого локального файлу журналу. Явні цілі `--url` не використовують цей резервний механізм.
|
||||
|
||||
Якщо Gateway недоступний, CLI виводить коротку підказку виконати:
|
||||
|
||||
@ -84,12 +84,12 @@ openclaw doctor
|
||||
|
||||
### Control UI (веб)
|
||||
|
||||
Вкладка **Logs** у Control UI відстежує той самий файл через `logs.tail`.
|
||||
Вкладка **Logs** у Control UI відстежує той самий файл за допомогою `logs.tail`.
|
||||
Див. [/web/control-ui](/uk/web/control-ui), щоб дізнатися, як її відкрити.
|
||||
|
||||
### Журнали лише каналів
|
||||
|
||||
Щоб відфільтрувати активність каналу (WhatsApp/Telegram/тощо), використовуйте:
|
||||
Щоб фільтрувати активність каналів (WhatsApp/Telegram/etc), використовуйте:
|
||||
|
||||
```bash
|
||||
openclaw channels logs --channel whatsapp
|
||||
@ -97,20 +97,19 @@ openclaw channels logs --channel whatsapp
|
||||
|
||||
## Формати журналів
|
||||
|
||||
### Журнали у файлах (JSONL)
|
||||
### Файлові журнали (JSONL)
|
||||
|
||||
Кожен рядок у файлі журналу — це об’єкт JSON. CLI і Control UI розбирають ці
|
||||
записи, щоб відображати структурований вивід (час, рівень, підсистема, повідомлення).
|
||||
Кожен рядок у файлі журналу — це об’єкт JSON. CLI і Control UI розбирають ці записи, щоб відображати структуроване виведення (час, рівень, підсистема, повідомлення).
|
||||
|
||||
### Вивід у консоль
|
||||
### Виведення в консоль
|
||||
|
||||
Журнали в консолі **враховують TTY** і форматуються для зручності читання:
|
||||
Журнали консолі **враховують TTY** і форматуються для зручності читання:
|
||||
|
||||
- Префікси підсистем (наприклад, `gateway/channels/whatsapp`)
|
||||
- Кольорове виділення рівнів (info/warn/error)
|
||||
- Кольори рівнів (info/warn/error)
|
||||
- Необов’язковий компактний або JSON-режим
|
||||
|
||||
Форматування консолі керується через `logging.consoleStyle`.
|
||||
Форматування консолі керується `logging.consoleStyle`.
|
||||
|
||||
### Журнали WebSocket Gateway
|
||||
|
||||
@ -131,7 +130,7 @@ openclaw gateway --verbose --ws-log full
|
||||
|
||||
## Налаштування журналювання
|
||||
|
||||
Усі налаштування журналювання знаходяться в `logging` у `~/.openclaw/openclaw.json`.
|
||||
Усі налаштування журналювання розміщені в розділі `logging` у `~/.openclaw/openclaw.json`.
|
||||
|
||||
```json
|
||||
{
|
||||
@ -148,52 +147,48 @@ openclaw gateway --verbose --ws-log full
|
||||
|
||||
### Рівні журналювання
|
||||
|
||||
- `logging.level`: рівень для **журналів у файлах** (JSONL).
|
||||
- `logging.consoleLevel`: рівень деталізації для **консолі**.
|
||||
- `logging.level`: рівень **файлових журналів** (JSONL).
|
||||
- `logging.consoleLevel`: рівень докладності **консолі**.
|
||||
|
||||
Обидва параметри можна перевизначити через змінну середовища **`OPENCLAW_LOG_LEVEL`** (наприклад, `OPENCLAW_LOG_LEVEL=debug`). Змінна середовища має вищий пріоритет, ніж файл конфігурації, тож ви можете підвищити деталізацію для одного запуску без редагування `openclaw.json`. Ви також можете передати глобальний параметр CLI **`--log-level <level>`** (наприклад, `openclaw --log-level debug gateway run`), який перевизначає змінну середовища для цієї команди.
|
||||
Ви можете перевизначити обидва через змінну середовища **`OPENCLAW_LOG_LEVEL`** (наприклад, `OPENCLAW_LOG_LEVEL=debug`). Змінна середовища має вищий пріоритет за файл конфігурації, тож ви можете підвищити докладність для одного запуску без редагування `openclaw.json`. Ви також можете передати глобальний параметр CLI **`--log-level <level>`** (наприклад, `openclaw --log-level debug gateway run`), який перевизначає змінну середовища для цієї команди.
|
||||
|
||||
`--verbose` впливає лише на вивід у консоль і деталізацію журналів WS; він не змінює
|
||||
рівні журналів у файлах.
|
||||
`--verbose` впливає лише на виведення в консоль і докладність журналу WS; він не змінює рівні файлового журналу.
|
||||
|
||||
### Стилі консолі
|
||||
|
||||
`logging.consoleStyle`:
|
||||
|
||||
- `pretty`: зручний для людей, кольоровий, із часовими мітками.
|
||||
- `compact`: щільніший вивід (найкраще для довгих сеансів).
|
||||
- `compact`: більш стислий вивід (найкраще для довгих сеансів).
|
||||
- `json`: JSON у кожному рядку (для обробників журналів).
|
||||
|
||||
### Редагування
|
||||
### Редагування чутливих даних
|
||||
|
||||
Зведення інструментів можуть редагувати чутливі токени перед потраплянням у консоль:
|
||||
Підсумки інструментів можуть редагувати чутливі токени до того, як вони потраплять у консоль:
|
||||
|
||||
- `logging.redactSensitive`: `off` | `tools` (типово: `tools`)
|
||||
- `logging.redactPatterns`: список рядків regex для перевизначення типового набору
|
||||
|
||||
Редагування впливає **лише на вивід у консоль** і не змінює журнали у файлах.
|
||||
Редагування впливає **лише на виведення в консоль** і не змінює файлові журнали.
|
||||
|
||||
## Діагностика + OpenTelemetry
|
||||
|
||||
Діагностика — це структуровані, машинозчитувані події для запусків моделей **і**
|
||||
телеметрії потоку повідомлень (webhooks, постановка в чергу, стан сеансу). Вони **не**
|
||||
замінюють журнали; вони існують, щоб передавати дані в метрики, трасування та інші експортери.
|
||||
Діагностика — це структуровані, машиночитні події для запусків моделей **і**
|
||||
телеметрії потоку повідомлень (webhooks, постановка в чергу, стан сеансу). Вони **не** замінюють журнали; вони існують для подачі метрик, трасувань та інших експортерів.
|
||||
|
||||
Події діагностики генеруються в процесі, але експортери підключаються лише тоді, коли
|
||||
ввімкнено діагностику та Plugin експортера.
|
||||
Події діагностики створюються всередині процесу, але експортери підключаються лише тоді, коли ввімкнено діагностику та plugin експортера.
|
||||
|
||||
### OpenTelemetry проти OTLP
|
||||
|
||||
- **OpenTelemetry (OTel)**: модель даних і SDK для трасувань, метрик і журналів.
|
||||
- **OTLP**: протокол передавання, який використовується для експорту даних OTel до колектора/бекенда.
|
||||
- OpenClaw сьогодні експортує через **OTLP/HTTP (protobuf)**.
|
||||
- **OTLP**: мережевий протокол, який використовується для експорту даних OTel у collector/backend.
|
||||
- OpenClaw наразі експортує через **OTLP/HTTP (protobuf)**.
|
||||
|
||||
### Експортовані сигнали
|
||||
|
||||
- **Метрики**: лічильники та гістограми (використання токенів, потік повідомлень, черги).
|
||||
- **Метрики**: лічильники та гістограми (використання токенів, потік повідомлень, постановка в чергу).
|
||||
- **Трасування**: spans для використання моделей і обробки webhook/повідомлень.
|
||||
- **Журнали**: експортуються через OTLP, коли ввімкнено `diagnostics.otel.logs`. Обсяг
|
||||
журналів може бути великим; враховуйте `logging.level` і фільтри експортера.
|
||||
- **Журнали**: експортуються через OTLP, коли ввімкнено `diagnostics.otel.logs`. Обсяг журналів може бути великим; зважайте на `logging.level` і фільтри експортера.
|
||||
|
||||
### Каталог подій діагностики
|
||||
|
||||
@ -203,33 +198,33 @@ openclaw gateway --verbose --ws-log full
|
||||
|
||||
Потік повідомлень:
|
||||
|
||||
- `webhook.received`: вхід webhook для кожного каналу.
|
||||
- `webhook.received`: вхідний webhook для кожного каналу.
|
||||
- `webhook.processed`: оброблений webhook + тривалість.
|
||||
- `webhook.error`: помилки обробника webhook.
|
||||
- `message.queued`: повідомлення поставлено в чергу на обробку.
|
||||
- `message.queued`: повідомлення поставлено в чергу для обробки.
|
||||
- `message.processed`: результат + тривалість + необов’язкова помилка.
|
||||
- `message.delivery.started`: розпочато спробу вихідної доставки.
|
||||
- `message.delivery.completed`: завершено спробу вихідної доставки + тривалість/кількість результатів.
|
||||
- `message.delivery.error`: спроба вихідної доставки завершилася помилкою + тривалість/обмежена категорія помилки.
|
||||
- `message.delivery.error`: помилка спроби вихідної доставки + тривалість/обмежена категорія помилки.
|
||||
|
||||
Черга + сеанс:
|
||||
|
||||
- `queue.lane.enqueue`: додавання в lane черги команд + глибина.
|
||||
- `queue.lane.dequeue`: видалення з lane черги команд + час очікування.
|
||||
- `queue.lane.dequeue`: вилучення з lane черги команд + час очікування.
|
||||
- `session.state`: перехід стану сеансу + причина.
|
||||
- `session.stuck`: попередження про зависання сеансу + вік.
|
||||
- `session.stuck`: попередження про завислий сеанс + вік.
|
||||
- `run.attempt`: метадані повторної спроби/спроби запуску.
|
||||
- `diagnostic.heartbeat`: агреговані лічильники (webhooks/черга/сеанс).
|
||||
|
||||
Виконання:
|
||||
Exec:
|
||||
|
||||
- `exec.process.completed`: результат процесу terminal exec, тривалість, ціль, режим,
|
||||
код виходу та тип збою. Текст команди й робочі каталоги не
|
||||
код завершення та тип збою. Текст команди й робочі каталоги не
|
||||
включаються.
|
||||
|
||||
### Увімкнення діагностики (без експортера)
|
||||
|
||||
Використовуйте це, якщо хочете, щоб події діагностики були доступні Plugins або власним приймачам:
|
||||
Використовуйте це, якщо хочете, щоб події діагностики були доступні plugin-ам або користувацьким sinks:
|
||||
|
||||
```json
|
||||
{
|
||||
@ -241,8 +236,8 @@ openclaw gateway --verbose --ws-log full
|
||||
|
||||
### Прапорці діагностики (цільові журнали)
|
||||
|
||||
Використовуйте прапорці, щоб увімкнути додаткові цільові журнали налагодження без підвищення `logging.level`.
|
||||
Прапорці нечутливі до регістру та підтримують шаблони (наприклад, `telegram.*` або `*`).
|
||||
Використовуйте прапорці, щоб увімкнути додаткові, цільові журнали налагодження без підвищення `logging.level`.
|
||||
Прапорці нечутливі до регістру та підтримують wildcard-шаблони (наприклад, `telegram.*` або `*`).
|
||||
|
||||
```json
|
||||
{
|
||||
@ -252,7 +247,7 @@ openclaw gateway --verbose --ws-log full
|
||||
}
|
||||
```
|
||||
|
||||
Перевизначення через змінну середовища (одноразово):
|
||||
Перевизначення через змінну середовища (разово):
|
||||
|
||||
```
|
||||
OPENCLAW_DIAGNOSTICS=telegram.http,telegram.payload
|
||||
@ -260,14 +255,14 @@ OPENCLAW_DIAGNOSTICS=telegram.http,telegram.payload
|
||||
|
||||
Примітки:
|
||||
|
||||
- Журнали прапорців записуються у стандартний файл журналу (той самий, що й `logging.file`).
|
||||
- Вивід усе ще редагується відповідно до `logging.redactSensitive`.
|
||||
- Журнали за прапорцями записуються у стандартний файл журналу (той самий, що й `logging.file`).
|
||||
- Виведення все одно редагується відповідно до `logging.redactSensitive`.
|
||||
- Повний посібник: [/diagnostics/flags](/uk/diagnostics/flags).
|
||||
|
||||
### Експорт до OpenTelemetry
|
||||
|
||||
Діагностику можна експортувати через Plugin `diagnostics-otel` (OTLP/HTTP). Це
|
||||
працює з будь-яким колектором/бекендом OpenTelemetry, який приймає OTLP/HTTP.
|
||||
Діагностику можна експортувати через plugin `diagnostics-otel` (OTLP/HTTP). Це
|
||||
працює з будь-яким collector/backend OpenTelemetry, який приймає OTLP/HTTP.
|
||||
|
||||
```json
|
||||
{
|
||||
@ -306,72 +301,84 @@ OPENCLAW_DIAGNOSTICS=telegram.http,telegram.payload
|
||||
|
||||
Примітки:
|
||||
|
||||
- Ви також можете ввімкнути Plugin за допомогою `openclaw plugins enable diagnostics-otel`.
|
||||
- Ви також можете ввімкнути plugin за допомогою `openclaw plugins enable diagnostics-otel`.
|
||||
- `protocol` наразі підтримує лише `http/protobuf`. `grpc` ігнорується.
|
||||
- Метрики включають використання токенів, вартість, розмір контексту, тривалість запуску та лічильники/гістограми потоку повідомлень (webhooks, черги, стан сеансу, глибина/очікування черги).
|
||||
- Трасування/метрики можна перемикати через `traces` / `metrics` (типово: увімкнено). Трасування
|
||||
включають spans використання моделей, а також spans обробки webhook/повідомлень, коли це ввімкнено.
|
||||
- Сирий вміст моделей/інструментів типово не експортується. Використовуйте
|
||||
`diagnostics.otel.captureContent` лише тоді, коли ваш колектор і політика зберігання
|
||||
схвалені для тексту підказок, відповідей, інструментів або системних підказок.
|
||||
- Установіть `headers`, якщо ваш колектор вимагає автентифікації.
|
||||
- Метрики включають використання токенів, вартість, розмір контексту, тривалість запуску та лічильники/гістограми потоку повідомлень (webhooks, постановка в чергу, стан сеансу, глибина/очікування черги).
|
||||
- Трасування/метрики можна перемикати через `traces` / `metrics` (типово: увімкнено). Трасування включають spans використання моделей, а також spans обробки webhook/повідомлень, коли це ввімкнено.
|
||||
- Необроблений вміст моделей/інструментів типово не експортується. Використовуйте
|
||||
`diagnostics.otel.captureContent` лише тоді, коли ваші правила щодо collector і зберігання
|
||||
схвалюють текст підказок, відповідей, інструментів або системних підказок.
|
||||
- Установіть `headers`, якщо ваш collector вимагає автентифікації.
|
||||
- Підтримувані змінні середовища: `OTEL_EXPORTER_OTLP_ENDPOINT`,
|
||||
`OTEL_SERVICE_NAME`, `OTEL_EXPORTER_OTLP_PROTOCOL`.
|
||||
- Установіть `OPENCLAW_OTEL_PRELOADED=1`, якщо інше попереднє завантаження або хост-процес уже
|
||||
зареєстрував глобальний SDK OpenTelemetry. У цьому режимі Plugin не запускає
|
||||
і не завершує роботу власного SDK, але все одно підключає слухачі діагностики OpenClaw і
|
||||
враховує `diagnostics.otel.traces`, `metrics` і `logs`.
|
||||
- Установіть `OPENCLAW_OTEL_PRELOADED=1`, коли інше попереднє завантаження або хост-процес уже
|
||||
зареєстрували глобальний SDK OpenTelemetry. У цьому режимі plugin не запускає
|
||||
і не завершує власний SDK, але все одно підключає слухачі діагностики OpenClaw і
|
||||
дотримується `diagnostics.otel.traces`, `metrics` і `logs`.
|
||||
|
||||
### Експортовані метрики (назви + типи)
|
||||
|
||||
Використання моделей:
|
||||
|
||||
- `openclaw.tokens` (лічильник, атрибути: `openclaw.token`, `openclaw.channel`,
|
||||
- `openclaw.tokens` (counter, attrs: `openclaw.token`, `openclaw.channel`,
|
||||
`openclaw.provider`, `openclaw.model`)
|
||||
- `openclaw.cost.usd` (лічильник, атрибути: `openclaw.channel`, `openclaw.provider`,
|
||||
- `openclaw.cost.usd` (counter, attrs: `openclaw.channel`, `openclaw.provider`,
|
||||
`openclaw.model`)
|
||||
- `openclaw.run.duration_ms` (гістограма, атрибути: `openclaw.channel`,
|
||||
- `openclaw.run.duration_ms` (histogram, attrs: `openclaw.channel`,
|
||||
`openclaw.provider`, `openclaw.model`)
|
||||
- `openclaw.context.tokens` (гістограма, атрибути: `openclaw.context`,
|
||||
- `openclaw.context.tokens` (histogram, attrs: `openclaw.context`,
|
||||
`openclaw.channel`, `openclaw.provider`, `openclaw.model`)
|
||||
- `gen_ai.client.token.usage` (histogram, метрика семантичних конвенцій GenAI,
|
||||
attrs: `gen_ai.token.type` = `input`/`output`, `gen_ai.system`,
|
||||
`gen_ai.operation.name`, `gen_ai.request.model`)
|
||||
|
||||
Потік повідомлень:
|
||||
|
||||
- `openclaw.webhook.received` (лічильник, атрибути: `openclaw.channel`,
|
||||
- `openclaw.webhook.received` (counter, attrs: `openclaw.channel`,
|
||||
`openclaw.webhook`)
|
||||
- `openclaw.webhook.error` (лічильник, атрибути: `openclaw.channel`,
|
||||
- `openclaw.webhook.error` (counter, attrs: `openclaw.channel`,
|
||||
`openclaw.webhook`)
|
||||
- `openclaw.webhook.duration_ms` (гістограма, атрибути: `openclaw.channel`,
|
||||
- `openclaw.webhook.duration_ms` (histogram, attrs: `openclaw.channel`,
|
||||
`openclaw.webhook`)
|
||||
- `openclaw.message.queued` (лічильник, атрибути: `openclaw.channel`,
|
||||
- `openclaw.message.queued` (counter, attrs: `openclaw.channel`,
|
||||
`openclaw.source`)
|
||||
- `openclaw.message.processed` (лічильник, атрибути: `openclaw.channel`,
|
||||
- `openclaw.message.processed` (counter, attrs: `openclaw.channel`,
|
||||
`openclaw.outcome`)
|
||||
- `openclaw.message.duration_ms` (гістограма, атрибути: `openclaw.channel`,
|
||||
- `openclaw.message.duration_ms` (histogram, attrs: `openclaw.channel`,
|
||||
`openclaw.outcome`)
|
||||
- `openclaw.message.delivery.started` (лічильник, атрибути: `openclaw.channel`,
|
||||
- `openclaw.message.delivery.started` (counter, attrs: `openclaw.channel`,
|
||||
`openclaw.delivery.kind`)
|
||||
- `openclaw.message.delivery.duration_ms` (гістограма, атрибути:
|
||||
- `openclaw.message.delivery.duration_ms` (histogram, attrs:
|
||||
`openclaw.channel`, `openclaw.delivery.kind`, `openclaw.outcome`,
|
||||
`openclaw.errorCategory`)
|
||||
|
||||
Черги + сеанси:
|
||||
|
||||
- `openclaw.queue.lane.enqueue` (лічильник, атрибути: `openclaw.lane`)
|
||||
- `openclaw.queue.lane.dequeue` (лічильник, атрибути: `openclaw.lane`)
|
||||
- `openclaw.queue.depth` (гістограма, атрибути: `openclaw.lane` або
|
||||
- `openclaw.queue.lane.enqueue` (counter, attrs: `openclaw.lane`)
|
||||
- `openclaw.queue.lane.dequeue` (counter, attrs: `openclaw.lane`)
|
||||
- `openclaw.queue.depth` (histogram, attrs: `openclaw.lane` або
|
||||
`openclaw.channel=heartbeat`)
|
||||
- `openclaw.queue.wait_ms` (гістограма, атрибути: `openclaw.lane`)
|
||||
- `openclaw.session.state` (лічильник, атрибути: `openclaw.state`, `openclaw.reason`)
|
||||
- `openclaw.session.stuck` (лічильник, атрибути: `openclaw.state`)
|
||||
- `openclaw.session.stuck_age_ms` (гістограма, атрибути: `openclaw.state`)
|
||||
- `openclaw.run.attempt` (лічильник, атрибути: `openclaw.attempt`)
|
||||
- `openclaw.queue.wait_ms` (histogram, attrs: `openclaw.lane`)
|
||||
- `openclaw.session.state` (counter, attrs: `openclaw.state`, `openclaw.reason`)
|
||||
- `openclaw.session.stuck` (counter, attrs: `openclaw.state`)
|
||||
- `openclaw.session.stuck_age_ms` (histogram, attrs: `openclaw.state`)
|
||||
- `openclaw.run.attempt` (counter, attrs: `openclaw.attempt`)
|
||||
|
||||
Виконання:
|
||||
Exec:
|
||||
|
||||
- `openclaw.exec.duration_ms` (гістограма, атрибути: `openclaw.exec.target`,
|
||||
- `openclaw.exec.duration_ms` (histogram, attrs: `openclaw.exec.target`,
|
||||
`openclaw.exec.mode`, `openclaw.outcome`, `openclaw.failureKind`)
|
||||
|
||||
Внутрішні компоненти діагностики (пам’ять + цикл інструментів):
|
||||
|
||||
- `openclaw.memory.heap_used_bytes` (histogram, attrs: `openclaw.memory.kind`)
|
||||
- `openclaw.memory.rss_bytes` (histogram)
|
||||
- `openclaw.memory.pressure` (counter, attrs: `openclaw.memory.level`)
|
||||
- `openclaw.tool.loop.iterations` (counter, attrs: `openclaw.toolName`,
|
||||
`openclaw.outcome`)
|
||||
- `openclaw.tool.loop.duration_ms` (histogram, attrs: `openclaw.toolName`,
|
||||
`openclaw.outcome`)
|
||||
|
||||
### Експортовані spans (назви + ключові атрибути)
|
||||
|
||||
- `openclaw.model.usage`
|
||||
@ -383,7 +390,9 @@ OPENCLAW_DIAGNOSTICS=telegram.http,telegram.payload
|
||||
- `openclaw.model.call`
|
||||
- `gen_ai.system`, `gen_ai.request.model`, `gen_ai.operation.name`,
|
||||
`openclaw.provider`, `openclaw.model`, `openclaw.api`,
|
||||
`openclaw.transport`
|
||||
`openclaw.transport`, `openclaw.provider.request_id_hash` (обмежений
|
||||
SHA-хеш ідентифікатора запиту до висхідного provider; необроблені id не
|
||||
експортуються)
|
||||
- `openclaw.tool.execution`
|
||||
- `gen_ai.tool.name`, `openclaw.toolName`, `openclaw.errorCategory`,
|
||||
`openclaw.tool.params.*`
|
||||
@ -404,6 +413,16 @@ OPENCLAW_DIAGNOSTICS=telegram.http,telegram.payload
|
||||
`openclaw.errorCategory`, `openclaw.delivery.result_count`
|
||||
- `openclaw.session.stuck`
|
||||
- `openclaw.state`, `openclaw.ageMs`, `openclaw.queueDepth`
|
||||
- `openclaw.context.assembled`
|
||||
- `openclaw.prompt.size`, `openclaw.history.size`,
|
||||
`openclaw.context.tokens`, `openclaw.errorCategory` (без вмісту prompt,
|
||||
history, response або ключа сеансу)
|
||||
- `openclaw.tool.loop`
|
||||
- `openclaw.toolName`, `openclaw.outcome`, `openclaw.iterations`,
|
||||
`openclaw.errorCategory` (без повідомлень циклу, параметрів або виводу інструмента)
|
||||
- `openclaw.memory.pressure`
|
||||
- `openclaw.memory.level`, `openclaw.memory.heap_used_bytes`,
|
||||
`openclaw.memory.rss_bytes`
|
||||
|
||||
Коли захоплення вмісту явно ввімкнено, spans моделей/інструментів також можуть містити
|
||||
обмежені, відредаговані атрибути `openclaw.content.*` для конкретних класів вмісту,
|
||||
@ -411,34 +430,34 @@ OPENCLAW_DIAGNOSTICS=telegram.http,telegram.payload
|
||||
|
||||
### Семплювання + скидання
|
||||
|
||||
- Семплювання трасувань: `diagnostics.otel.sampleRate` (0.0–1.0, лише кореневі spans).
|
||||
- Семплювання трасувань: `diagnostics.otel.sampleRate` (0.0–1.0, лише root spans).
|
||||
- Інтервал експорту метрик: `diagnostics.otel.flushIntervalMs` (мінімум 1000 мс).
|
||||
|
||||
### Примітки щодо протоколу
|
||||
|
||||
- Кінцеві точки OTLP/HTTP можна встановити через `diagnostics.otel.endpoint` або
|
||||
- Кінцеві точки OTLP/HTTP можна задавати через `diagnostics.otel.endpoint` або
|
||||
`OTEL_EXPORTER_OTLP_ENDPOINT`.
|
||||
- Якщо кінцева точка вже містить `/v1/traces` або `/v1/metrics`, вона використовується як є.
|
||||
- Якщо кінцева точка вже містить `/v1/logs`, вона використовується як є для журналів.
|
||||
- `OPENCLAW_OTEL_PRELOADED=1` повторно використовує зовнішньо зареєстрований SDK OpenTelemetry
|
||||
для трасувань/метрик замість запуску NodeSDK, яким керує Plugin.
|
||||
- `diagnostics.otel.logs` вмикає експорт журналів OTLP для виводу основного журналювальника.
|
||||
для трасувань/метрик замість запуску NodeSDK, що належить plugin-у.
|
||||
- `diagnostics.otel.logs` вмикає експорт журналів OTLP для виведення основного логера.
|
||||
|
||||
### Поведінка експорту журналів
|
||||
|
||||
- Журнали OTLP використовують ті самі структуровані записи, що записуються в `logging.file`.
|
||||
- Враховується `logging.level` (рівень журналів у файлах). Редагування консолі **не** застосовується
|
||||
- Дотримуються `logging.level` (рівень файлового журналу). Редагування консолі **не** застосовується
|
||||
до журналів OTLP.
|
||||
- Для інсталяцій із великим обсягом даних слід віддавати перевагу семплюванню/фільтрації на боці колектора OTLP.
|
||||
- Для інсталяцій із великим обсягом даних краще використовувати семплювання/фільтрацію на рівні OTLP collector.
|
||||
|
||||
## Поради з усунення неполадок
|
||||
## Поради з усунення несправностей
|
||||
|
||||
- **Gateway недоступний?** Спочатку запустіть `openclaw doctor`.
|
||||
- **Журнали порожні?** Перевірте, що Gateway запущений і записує у шлях файлу,
|
||||
указаний у `logging.file`.
|
||||
- **Потрібно більше деталей?** Установіть `logging.level` на `debug` або `trace` і повторіть спробу.
|
||||
- **Gateway недоступний?** Спочатку виконайте `openclaw doctor`.
|
||||
- **Журнали порожні?** Перевірте, що Gateway запущений і записує у шлях до файлу,
|
||||
вказаний у `logging.file`.
|
||||
- **Потрібно більше деталей?** Установіть `logging.level` у `debug` або `trace` і повторіть спробу.
|
||||
|
||||
## Пов’язані матеріали
|
||||
## Пов’язане
|
||||
|
||||
- [Внутрішня реалізація журналювання Gateway](/uk/gateway/logging) — стилі журналів WS, префікси підсистем і захоплення консолі
|
||||
- [Внутрішня будова журналювання Gateway](/uk/gateway/logging) — стилі журналів WS, префікси підсистем і захоплення консолі
|
||||
- [Діагностика](/uk/gateway/configuration-reference#diagnostics) — експорт OpenTelemetry і конфігурація трасування кешу
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user