diff --git a/docs/uk/channels/slack.md b/docs/uk/channels/slack.md
index 1d7a2f300..ef79a4e98 100644
--- a/docs/uk/channels/slack.md
+++ b/docs/uk/channels/slack.md
@@ -1,29 +1,29 @@
---
read_when:
- Налаштування Slack або налагодження режиму socket/HTTP у Slack
-summary: Налаштування Slack і поведінка під час виконання (Socket Mode + HTTP Events API)
+summary: Налаштування Slack і поведінка під час роботи (Socket Mode + HTTP Events API)
title: Slack
x-i18n:
- generated_at: "2026-04-05T17:59:56Z"
+ generated_at: "2026-04-05T20:43:34Z"
model: gpt-5.4
provider: openai
- source_hash: efb37e1f04e1ac8ac3786c36ffc20013dacdc654bfa61e7f6e8df89c4902d2ab
+ source_hash: 7e4ff2ce7d92276d62f4f3d3693ddb56ca163d5fdc2f1082ff7ba3421fada69c
source_path: channels/slack.md
workflow: 15
---
# Slack
-Статус: готово до використання у виробничому середовищі для DM і каналів через інтеграції застосунку Slack. Типовий режим — Socket Mode; також підтримується режим HTTP Events API.
+Статус: готовий до використання у production для особистих повідомлень і каналів через інтеграції застосунку Slack. Типовий режим — Socket Mode; режим HTTP Events API також підтримується.
-
- Для DM у Slack типовим є режим pairing.
+
+ Особисті повідомлення Slack типово використовують режим сполучення.
-
- Нативна поведінка команд і каталог команд.
+
+ Вбудована поведінка команд і каталог команд.
-
+
Міжканальна діагностика та сценарії відновлення.
@@ -56,7 +56,7 @@ x-i18n:
}
```
- Резервний варіант через змінні середовища (лише для типового облікового запису):
+ Резервне значення з env (лише для облікового запису за замовчуванням):
```bash
SLACK_APP_TOKEN=xapp-...
@@ -65,7 +65,7 @@ SLACK_BOT_TOKEN=xoxb-...
-
+
Підпишіть події бота для:
- `app_mention`
@@ -75,10 +75,10 @@ SLACK_BOT_TOKEN=xoxb-...
- `channel_rename`
- `pin_added`, `pin_removed`
- Також увімкніть вкладку App Home **Messages Tab** для DM.
+ Також увімкніть **Messages Tab** у App Home для особистих повідомлень.
-
+
```bash
openclaw gateway
@@ -95,11 +95,11 @@ openclaw gateway
- установіть режим HTTP (`channels.slack.mode="http"`)
- скопіюйте **Signing Secret** Slack
- - установіть Request URL для Event Subscriptions + Interactivity + Slash command на той самий шлях webhook (типово `/slack/events`)
+ - установіть однаковий Request URL для Event Subscriptions, Interactivity і Slash command на той самий шлях webhook (типово `/slack/events`)
-
+
```json5
{
@@ -118,16 +118,16 @@ openclaw gateway
- Підтримується режим HTTP для окремих облікових записів.
+ Режим HTTP для кількох облікових записів підтримується.
- Призначте кожному обліковому запису окремий `webhookPath`, щоб реєстрації не конфліктували.
+ Надайте кожному обліковому запису окремий `webhookPath`, щоб реєстрації не конфліктували.
-## Контрольний список маніфесту і scopes
+## Контрольний список маніфесту та scope
@@ -207,8 +207,8 @@ openclaw gateway
-
- Якщо ви налаштовуєте `channels.slack.userToken`, типовими scopes читання є:
+
+ Якщо ви налаштовуєте `channels.slack.userToken`, типовими scope для читання є:
- `channels:history`, `groups:history`, `im:history`, `mpim:history`
- `channels:read`, `groups:read`, `im:read`, `mpim:read`
@@ -216,178 +216,178 @@ openclaw gateway
- `reactions:read`
- `pins:read`
- `emoji:read`
- - `search:read` (якщо ви покладаєтеся на читання пошуку Slack)
+ - `search:read` (якщо ви залежите від читання пошуку Slack)
## Модель токенів
-- Для Socket Mode потрібні `botToken` + `appToken`.
-- Для режиму HTTP потрібні `botToken` + `signingSecret`.
-- `botToken`, `appToken`, `signingSecret` і `userToken` приймають текстові
- рядки або об’єкти SecretRef.
-- Токени з конфігурації мають пріоритет над резервним варіантом із середовища.
-- Резервний варіант через змінні середовища `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` застосовується лише до типового облікового запису.
-- `userToken` (`xoxp-...`) задається лише в конфігурації (без резервного варіанта через середовище) і типово працює в режимі лише для читання (`userTokenReadOnly: true`).
-- Необов’язково: додайте `chat:write.customize`, якщо хочете, щоб вихідні повідомлення використовували активну ідентичність агента (власні `username` та іконку). `icon_emoji` використовує синтаксис `:emoji_name:`.
+- `botToken` + `appToken` обов'язкові для Socket Mode.
+- HTTP-режим потребує `botToken` + `signingSecret`.
+- `botToken`, `appToken`, `signingSecret` і `userToken` приймають звичайні рядки
+ або об'єкти SecretRef.
+- Токени з конфігурації мають пріоритет над резервними значеннями з env.
+- Резервні значення з env `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` застосовуються лише до облікового запису за замовчуванням.
+- `userToken` (`xoxp-...`) доступний лише в конфігурації (без резервного значення з env) і типово працює в режимі лише для читання (`userTokenReadOnly: true`).
+- Необов'язково: додайте `chat:write.customize`, якщо хочете, щоб вихідні повідомлення використовували ідентичність активного агента (власні `username` та icon). Для `icon_emoji` використовується синтаксис `:emoji_name:`.
-Поведінка знімка статусу:
+Поведінка знімка стану:
- Перевірка облікового запису Slack відстежує поля `*Source` і `*Status`
- для кожного облікового запису (`botToken`, `appToken`, `signingSecret`, `userToken`).
+ для кожних облікових даних (`botToken`, `appToken`, `signingSecret`, `userToken`).
- Статус може бути `available`, `configured_unavailable` або `missing`.
- `configured_unavailable` означає, що обліковий запис налаштовано через SecretRef
- або інше неінлайнове джерело секретів, але поточний шлях команди/виконання
+ або інше не-inline джерело секретів, але поточний шлях команди/виконання
не зміг визначити фактичне значення.
-- У режимі HTTP включається `signingSecretStatus`; у Socket Mode
- потрібною парою є `botTokenStatus` + `appTokenStatus`.
+- У HTTP-режимі включається `signingSecretStatus`; у Socket Mode
+ обов'язковою парою є `botTokenStatus` + `appTokenStatus`.
-Для дій/читання каталогу за наявності налаштування може надаватися перевага токену користувача. Для запису пріоритетним залишається токен бота; запис через токен користувача дозволено лише коли `userTokenReadOnly: false` і токен бота недоступний.
+Для дій/читання каталогів за наявності налаштування може надаватися перевага токену користувача. Для запису пріоритетним лишається токен бота; запис через токен користувача дозволено лише коли `userTokenReadOnly: false` і токен бота недоступний.
## Дії та обмеження
-Дії Slack керуються через `channels.slack.actions.*`.
+Дії Slack контролюються через `channels.slack.actions.*`.
-Доступні групи дій у поточному наборі інструментів Slack:
+Доступні групи дій у поточному інструментарії Slack:
-| Група | Типово |
-| ---------- | -------- |
+| Група | Типово |
+| ---------- | ------- |
| messages | увімкнено |
| reactions | увімкнено |
| pins | увімкнено |
| memberInfo | увімкнено |
| emojiList | увімкнено |
-Поточні дії для повідомлень Slack включають `send`, `upload-file`, `download-file`, `read`, `edit`, `delete`, `pin`, `unpin`, `list-pins`, `member-info` і `emoji-list`.
+Поточні дії з повідомленнями Slack включають `send`, `upload-file`, `download-file`, `read`, `edit`, `delete`, `pin`, `unpin`, `list-pins`, `member-info` та `emoji-list`.
-## Контроль доступу і маршрутизація
+## Контроль доступу та маршрутизація
-
- `channels.slack.dmPolicy` керує доступом через DM (застаріле: `channels.slack.dm.policy`):
+
+ `channels.slack.dmPolicy` контролює доступ до особистих повідомлень (застаріле: `channels.slack.dm.policy`):
- `pairing` (типово)
- `allowlist`
- - `open` (вимагає, щоб `channels.slack.allowFrom` містив `"*"`; застаріле: `channels.slack.dm.allowFrom`)
+ - `open` (потребує, щоб `channels.slack.allowFrom` містив `"*"`; застаріле: `channels.slack.dm.allowFrom`)
- `disabled`
- Параметри DM:
+ Прапорці особистих повідомлень:
- `dm.enabled` (типово true)
- `channels.slack.allowFrom` (рекомендовано)
- `dm.allowFrom` (застаріле)
- - `dm.groupEnabled` (групові DM типово false)
- - `dm.groupChannels` (необов’язковий список дозволу MPIM)
+ - `dm.groupEnabled` (групові особисті повідомлення типово false)
+ - `dm.groupChannels` (необов'язковий allowlist MPIM)
Пріоритет для кількох облікових записів:
- `channels.slack.accounts.default.allowFrom` застосовується лише до облікового запису `default`.
- - Іменовані облікові записи успадковують `channels.slack.allowFrom`, якщо в них не задано власний `allowFrom`.
+ - Іменовані облікові записи успадковують `channels.slack.allowFrom`, якщо їхній власний `allowFrom` не задано.
- Іменовані облікові записи не успадковують `channels.slack.accounts.default.allowFrom`.
- Pairing у DM використовує `openclaw pairing approve slack `.
+ Сполучення в особистих повідомленнях використовує `openclaw pairing approve slack `.
- `channels.slack.groupPolicy` керує обробкою каналів:
+ `channels.slack.groupPolicy` контролює обробку каналів:
- `open`
- `allowlist`
- `disabled`
- Список дозволу каналів розміщується в `channels.slack.channels` і має використовувати стабільні ID каналів.
+ Allowlist каналів міститься в `channels.slack.channels` і має використовувати стабільні ідентифікатори каналів.
- Примітка під час виконання: якщо `channels.slack` повністю відсутній (налаштування лише через середовище), під час виконання використовується резервне значення `groupPolicy="allowlist"` і записується попередження в журнал (навіть якщо задано `channels.defaults.groupPolicy`).
+ Примітка щодо виконання: якщо `channels.slack` повністю відсутній (налаштування лише через env), під час виконання використовується `groupPolicy="allowlist"` і записується попередження в журнал (навіть якщо задано `channels.defaults.groupPolicy`).
- Визначення імен/ID:
+ Визначення імен/ідентифікаторів:
- - записи списку дозволу каналів і списку дозволу DM визначаються під час запуску, якщо доступ токена це дозволяє
- - нерозпізнані записи з іменами каналів зберігаються як налаштовані, але типово ігноруються під час маршрутизації
- - авторизація вхідних повідомлень і маршрутизація каналів типово виконуються за ID; пряме зіставлення за username/slug потребує `channels.slack.dangerouslyAllowNameMatching: true`
+ - записи allowlist каналів і записи allowlist особистих повідомлень визначаються під час запуску, якщо доступ токена це дозволяє
+ - нерозв'язані записи з іменами каналів зберігаються як налаштовані, але типово ігноруються для маршрутизації
+ - вхідна авторизація та маршрутизація каналів типово працюють за ідентифікаторами; пряме зіставлення за username/slug потребує `channels.slack.dangerouslyAllowNameMatching: true`
-
- Повідомлення в каналах типово вимагають згадування.
+
+ Повідомлення в каналах типово обмежуються згадками.
- Джерела згадувань:
+ Джерела згадок:
- - явне згадування застосунку (`<@botId>`)
- - regex-шаблони згадувань (`agents.list[].groupChat.mentionPatterns`, резервно `messages.groupChat.mentionPatterns`)
- - неявна поведінка відповіді в треді на повідомлення бота
+ - явна згадка застосунку (`<@botId>`)
+ - шаблони regex для згадок (`agents.list[].groupChat.mentionPatterns`, резервне значення `messages.groupChat.mentionPatterns`)
+ - неявна поведінка reply-to-bot у треді
- Керування для окремого каналу (`channels.slack.channels.`; імена лише через визначення під час запуску або `dangerouslyAllowNameMatching`):
+ Керування для кожного каналу (`channels.slack.channels.`; імена лише через визначення під час запуску або `dangerouslyAllowNameMatching`):
- `requireMention`
- - `users` (список дозволу)
+ - `users` (allowlist)
- `allowBots`
- `skills`
- `systemPrompt`
- `tools`, `toolsBySender`
- - формат ключів `toolsBySender`: `id:`, `e164:`, `username:`, `name:` або wildcard `"*"`
- (застарілі ключі без префікса все ще зіставляються лише як `id:`)
+ - формат ключів `toolsBySender`: `id:`, `e164:`, `username:`, `name:` або підстановочний знак `"*"`
+ (застарілі ключі без префікса все ще зіставляються лише з `id:`)
-## Треди, сесії і теги відповіді
+## Треди, сесії та теги відповідей
-- DM маршрутизуються як `direct`; канали — як `channel`; MPIM — як `group`.
-- За типового `session.dmScope=main` DM у Slack згортаються в основну сесію агента.
+- Особисті повідомлення маршрутизуються як `direct`; канали — як `channel`; MPIM — як `group`.
+- Із типовим `session.dmScope=main` особисті повідомлення Slack згортаються до основної сесії агента.
- Сесії каналів: `agent::slack:channel:`.
-- Відповіді в тредах можуть створювати суфікси сесій тредів (`:thread:`) там, де це доречно.
+- Відповіді в треді можуть створювати суфікси сесій тредів (`:thread:`), якщо це застосовно.
- Типове значення `channels.slack.thread.historyScope` — `thread`; типове значення `thread.inheritParent` — `false`.
-- `channels.slack.thread.initialHistoryLimit` визначає, скільки наявних повідомлень треду буде отримано під час початку нової сесії треду (типово `20`; установіть `0`, щоб вимкнути).
+- `channels.slack.thread.initialHistoryLimit` визначає, скільки наявних повідомлень треду буде отримано під час запуску нової сесії треду (типово `20`; установіть `0`, щоб вимкнути).
-Керування відповідями в тредах:
+Параметри тредів відповідей:
-- `channels.slack.replyToMode`: `off|first|all` (типово `off`)
+- `channels.slack.replyToMode`: `off|first|all|batched` (типово `off`)
- `channels.slack.replyToModeByChatType`: для `direct|group|channel`
-- застарілий резервний варіант для прямих чатів: `channels.slack.dm.replyToMode`
+- застаріле резервне значення для прямих чатів: `channels.slack.dm.replyToMode`
-Підтримуються ручні теги відповіді:
+Підтримуються ручні теги відповідей:
- `[[reply_to_current]]`
- `[[reply_to:]]`
-Примітка: `replyToMode="off"` вимикає **всі** відповіді в тредах у Slack, включно з явними тегами `[[reply_to_*]]`. Це відрізняється від Telegram, де явні теги все ще враховуються в режимі `"off"`. Відмінність відображає моделі тредів платформ: у Slack треди приховують повідомлення від каналу, тоді як у Telegram відповіді залишаються видимими в основному потоці чату.
+Примітка: `replyToMode="off"` вимикає **усі** треди відповідей у Slack, включно з явними тегами `[[reply_to_*]]`. Це відрізняється від Telegram, де явні теги все ще враховуються в режимі `"off"`. Різниця відображає моделі тредів на цих платформах: у Slack треди приховують повідомлення з каналу, тоді як у Telegram відповіді лишаються видимими в основному потоці чату.
-## Реакції підтвердження
+## Реакції-підтвердження
-`ackReaction` надсилає емодзі-підтвердження, поки OpenClaw обробляє вхідне повідомлення.
+`ackReaction` надсилає emoji-підтвердження, поки OpenClaw обробляє вхідне повідомлення.
Порядок визначення:
- `channels.slack.accounts..ackReaction`
- `channels.slack.ackReaction`
- `messages.ackReaction`
-- резервний emoji з ідентичності агента (`agents.list[].identity.emoji`, інакше `"👀"`)
+- резервне значення emoji ідентичності агента (`agents.list[].identity.emoji`, інакше "👀")
Примітки:
-- Slack очікує shortcodes (наприклад, `"eyes"`).
+- Slack очікує короткі коди (наприклад, `"eyes"`).
- Використовуйте `""`, щоб вимкнути реакцію для облікового запису Slack або глобально.
## Потокова передача тексту
-`channels.slack.streaming` керує поведінкою live preview:
+`channels.slack.streaming` контролює поведінку попереднього перегляду в реальному часі:
-- `off`: вимкнути потокове попереднє відображення.
-- `partial` (типово): замінювати текст попереднього перегляду останнім частковим виводом.
-- `block`: додавати оновлення попереднього перегляду блоками.
-- `progress`: показувати текст статусу поступу під час генерації, а потім надсилати фінальний текст.
+- `off`: вимкнути потоковий попередній перегляд у реальному часі.
+- `partial` (типово): замінювати текст попереднього перегляду останнім частковим результатом.
+- `block`: додавати фрагментовані оновлення попереднього перегляду.
+- `progress`: показувати текст стану прогресу під час генерації, а потім надсилати фінальний текст.
-`channels.slack.nativeStreaming` керує нативною потоковою передачею тексту Slack, коли `streaming` має значення `partial` (типово: `true`).
+`channels.slack.nativeStreaming` контролює вбудовану потокову передачу тексту Slack, коли `streaming` має значення `partial` (типово: `true`).
-- Щоб відображалась нативна потокова передача тексту, має бути доступний тред відповіді. Вибір треду, як і раніше, визначається `replyToMode`. Без нього використовується звичайний чернетковий попередній перегляд.
-- Медіа й нетекстові пейлоади переходять на звичайну доставку.
-- Якщо потокова передача перерветься посеред відповіді, OpenClaw перейде на звичайну доставку для решти пейлоадів.
+- Щоб з'явилася вбудована потокова передача тексту, має бути доступний тред відповіді. Вибір треду й далі визначається `replyToMode`. Без нього використовується звичайний чернетковий попередній перегляд.
+- Для медіа та нетекстових payload використовується звичайна доставка.
+- Якщо потокова передача переривається посеред відповіді, OpenClaw повертається до звичайної доставки для решти payload.
-Використовуйте чернетковий попередній перегляд замість нативної потокової передачі тексту Slack:
+Використовуйте чернетковий попередній перегляд замість вбудованої потокової передачі тексту Slack:
```json5
{
@@ -402,12 +402,12 @@ openclaw gateway
Застарілі ключі:
-- `channels.slack.streamMode` (`replace | status_final | append`) автоматично мігрує в `channels.slack.streaming`.
-- булеве `channels.slack.streaming` автоматично мігрує в `channels.slack.nativeStreaming`.
+- `channels.slack.streamMode` (`replace | status_final | append`) автоматично мігрується до `channels.slack.streaming`.
+- булеве значення `channels.slack.streaming` автоматично мігрується до `channels.slack.nativeStreaming`.
-## Резервна реакція набору
+## Резервна реакція друку
-`typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки OpenClaw обробляє відповідь, а потім видаляє її після завершення запуску. Це найкорисніше поза відповідями в тредах, де типово використовується індикатор статусу "is typing...".
+`typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки OpenClaw обробляє відповідь, а потім видаляє її після завершення виконання. Це особливо корисно поза відповідями в тредах, де використовується типовий індикатор стану "друкує...".
Порядок визначення:
@@ -416,14 +416,14 @@ openclaw gateway
Примітки:
-- Slack очікує shortcodes (наприклад, `"hourglass_flowing_sand"`).
-- Реакція застосовується за принципом best-effort, а очищення автоматично намагається виконатися після відповіді або завершення шляху помилки.
+- Slack очікує короткі коди (наприклад, `"hourglass_flowing_sand"`).
+- Реакція виконується за принципом best-effort, а очищення автоматично намагається завершитися після відповіді або завершення шляху помилки.
-## Медіа, розбиття на частини і доставка
+## Медіа, розбиття на частини та доставка
- Вкладення файлів Slack завантажуються з приватних URL, розміщених у Slack (потік запитів з автентифікацією токеном), і записуються до сховища медіа, якщо отримання успішне й обмеження розміру це дозволяють.
+ Вкладення файлів Slack завантажуються з приватних URL, розміщених у Slack (потік запитів з автентифікацією токеном), і записуються до сховища медіа, якщо отримання успішне та дозволяють обмеження за розміром.
Типове обмеження розміру вхідних даних під час виконання — `20MB`, якщо його не перевизначено через `channels.slack.mediaMaxMb`.
@@ -431,35 +431,35 @@ openclaw gateway
- текстові частини використовують `channels.slack.textChunkLimit` (типово 4000)
- - `channels.slack.chunkMode="newline"` вмикає розбиття спочатку за абзацами
+ - `channels.slack.chunkMode="newline"` вмикає розбиття спершу за абзацами
- надсилання файлів використовує API завантаження Slack і може включати відповіді в тредах (`thread_ts`)
- - обмеження вихідних медіа визначається `channels.slack.mediaMaxMb`, якщо задано; інакше надсилання в каналі використовує типові значення MIME-kind з медіаконвеєра
+ - обмеження вихідних медіа визначається через `channels.slack.mediaMaxMb`, якщо налаштовано; інакше надсилання в канали використовує типові MIME-обмеження з медіаконвеєра
Рекомендовані явні цілі:
- - `user:` для DM
+ - `user:` для особистих повідомлень
- `channel:` для каналів
- DM у Slack відкриваються через API розмов Slack під час надсилання до цілей користувачів.
+ Особисті повідомлення Slack відкриваються через API розмов Slack під час надсилання до цілей користувача.
-## Команди і поведінка slash
+## Команди та поведінка slash-команд
-- Нативний автоматичний режим команд у Slack **вимкнено** (`commands.native: "auto"` не вмикає нативні команди Slack).
-- Увімкніть нативні обробники команд Slack через `channels.slack.commands.native: true` (або глобально `commands.native: true`).
-- Коли нативні команди ввімкнено, зареєструйте відповідні slash-команди в Slack (імена `/`), з одним винятком:
- - зареєструйте `/agentstatus` для команди status (Slack резервує `/status`)
-- Якщо нативні команди не ввімкнено, ви можете запускати одну налаштовану slash-команду через `channels.slack.slashCommand`.
-- Меню нативних аргументів тепер адаптують свою стратегію відображення:
- - до 5 варіантів: кнопкові блоки
+- Вбудований автоматичний режим команд для Slack **вимкнено** (`commands.native: "auto"` не вмикає вбудовані команди Slack).
+- Увімкніть вбудовані обробники команд Slack через `channels.slack.commands.native: true` (або глобально `commands.native: true`).
+- Коли вбудовані команди ввімкнено, зареєструйте відповідні slash-команди в Slack (імена `/`), з одним винятком:
+ - зареєструйте `/agentstatus` для команди стану (Slack резервує `/status`)
+- Якщо вбудовані команди не ввімкнено, ви можете виконувати одну налаштовану slash-команду через `channels.slack.slashCommand`.
+- Вбудовані меню аргументів тепер адаптують свою стратегію відображення:
+ - до 5 варіантів: блоки кнопок
- 6-100 варіантів: статичне меню вибору
- - понад 100 варіантів: зовнішній вибір з асинхронною фільтрацією варіантів, якщо доступні обробники параметрів interactivity
- - якщо закодовані значення варіантів перевищують обмеження Slack, потік переходить на кнопки
-- Для довгих пейлоадів варіантів меню аргументів slash-команд використовують діалог підтвердження перед надсиланням вибраного значення.
+ - більше 100 варіантів: зовнішній вибір з асинхронною фільтрацією варіантів, якщо доступні обробники параметрів interactivity
+ - якщо закодовані значення варіантів перевищують ліміти Slack, потік повертається до кнопок
+- Для довгих payload варіантів меню аргументів slash-команд використовують діалог підтвердження перед передачею вибраного значення.
Типові параметри slash-команд:
@@ -468,15 +468,15 @@ openclaw gateway
- `sessionPrefix: "slack:slash"`
- `ephemeral: true`
-Для slash-сесій використовуються ізольовані ключі:
+Сесії slash-команд використовують ізольовані ключі:
- `agent::slack:slash:`
-і виконання команд усе одно маршрутизується щодо сесії цільової розмови (`CommandTargetSessionKey`).
+і все одно спрямовують виконання команд до сесії цільової розмови (`CommandTargetSessionKey`).
## Інтерактивні відповіді
-Slack може відображати інтерактивні елементи керування відповідями, створеними агентом, але цю можливість типово вимкнено.
+Slack може відображати інтерактивні елементи відповідей, створених агентом, але ця функція типово вимкнена.
Увімкніть її глобально:
@@ -492,7 +492,7 @@ Slack може відображати інтерактивні елементи
}
```
-Або ввімкніть лише для одного облікового запису Slack:
+Або увімкніть лише для одного облікового запису Slack:
```json5
{
@@ -510,43 +510,43 @@ Slack може відображати інтерактивні елементи
}
```
-Коли можливість увімкнено, агенти можуть виводити директиви відповіді лише для Slack:
+Коли функцію ввімкнено, агенти можуть виводити директиви відповідей лише для Slack:
- `[[slack_buttons: Approve:approve, Reject:reject]]`
- `[[slack_select: Choose a target | Canary:canary, Production:production]]`
-Ці директиви компілюються в Slack Block Kit і маршрутизують натискання чи вибір назад через наявний шлях подій взаємодії Slack.
+Ці директиви компілюються в Slack Block Kit і повертають натискання або вибір назад через наявний шлях подій взаємодії Slack.
Примітки:
- Це UI, специфічний для Slack. Інші канали не перекладають директиви Slack Block Kit у власні системи кнопок.
-- Значення інтерактивних callback — це непрозорі токени, згенеровані OpenClaw, а не необроблені значення, створені агентом.
-- Якщо згенеровані інтерактивні блоки перевищать обмеження Slack Block Kit, OpenClaw повернеться до початкової текстової відповіді замість надсилання недійсного пейлоада blocks.
+- Значення інтерактивних callback — це непрозорі токени, згенеровані OpenClaw, а не сирі значення, створені агентом.
+- Якщо згенеровані інтерактивні блоки перевищують обмеження Slack Block Kit, OpenClaw повертається до початкової текстової відповіді замість надсилання невалідного payload blocks.
## Підтвердження exec у Slack
-Slack може виступати як нативний клієнт підтвердження з інтерактивними кнопками і взаємодіями замість резервного переходу до Web UI або термінала.
+Slack може виступати як вбудований клієнт підтвердження з інтерактивними кнопками та взаємодіями замість повернення до Web UI або термінала.
-- Підтвердження exec використовують `channels.slack.execApprovals.*` для нативної маршрутизації DM/каналу.
-- Підтвердження плагінів усе ще можуть визначатися через ту саму нативну поверхню кнопок Slack, коли запит уже надходить у Slack, а тип ідентифікатора підтвердження — `plugin:`.
-- Авторизація тих, хто підтверджує, як і раніше, примусово застосовується: лише користувачі, визначені як approvers, можуть схвалювати або відхиляти запити через Slack.
+- Підтвердження exec використовують `channels.slack.execApprovals.*` для вбудованої маршрутизації в особисті повідомлення/канали.
+- Підтвердження plugin також можуть визначатися через ту саму вбудовану поверхню кнопок Slack, коли запит уже надходить у Slack, а тип ідентифікатора підтвердження — `plugin:`.
+- Авторизація затверджувачів і далі примусово застосовується: лише користувачі, визначені як затверджувачі, можуть схвалювати або відхиляти запити через Slack.
-Для цього використовується та сама спільна поверхня кнопок підтвердження, що й для інших каналів. Якщо у ваших налаштуваннях застосунку Slack увімкнено `interactivity`, запити на підтвердження відображаються як кнопки Block Kit безпосередньо в розмові.
+Для цього використовується та сама спільна поверхня кнопок підтвердження, що й для інших каналів. Коли у налаштуваннях застосунку Slack увімкнено `interactivity`, запити на підтвердження відображаються як кнопки Block Kit безпосередньо в розмові.
Коли ці кнопки присутні, вони є основним UX підтвердження; OpenClaw
-повинен включати ручну команду `/approve` лише тоді, коли результат інструмента вказує, що підтвердження в чаті недоступні або ручне підтвердження — єдиний шлях.
+має включати ручну команду `/approve` лише тоді, коли результат інструмента вказує, що підтвердження в чаті недоступні або ручне підтвердження є єдиним шляхом.
Шлях конфігурації:
- `channels.slack.execApprovals.enabled`
-- `channels.slack.execApprovals.approvers` (необов’язково; за можливості використовується резервний варіант `commands.ownerAllowFrom`)
+- `channels.slack.execApprovals.approvers` (необов'язково; за можливості використовується резервне значення `commands.ownerAllowFrom`)
- `channels.slack.execApprovals.target` (`dm` | `channel` | `both`, типово: `dm`)
- `agentFilter`, `sessionFilter`
-Slack автоматично вмикає нативні підтвердження exec, коли `enabled` не задано або має значення `"auto"`, і визначається принаймні один
-approver. Установіть `enabled: false`, щоб явно вимкнути Slack як нативний клієнт підтвердження.
-Установіть `enabled: true`, щоб примусово ввімкнути нативні підтвердження, коли визначаються approvers.
+Slack автоматично вмикає вбудовані підтвердження exec, коли `enabled` не задано або має значення `"auto"` і визначається принаймні один
+затверджувач. Установіть `enabled: false`, щоб явно вимкнути Slack як вбудований клієнт підтвердження.
+Установіть `enabled: true`, щоб примусово ввімкнути вбудовані підтвердження, коли затверджувачі визначаються.
-Типова поведінка без явної конфігурації підтверджень exec у Slack:
+Типова поведінка без явної конфігурації підтверджень exec для Slack:
```json5
{
@@ -556,8 +556,8 @@ approver. Установіть `enabled: false`, щоб явно вимкнут
}
```
-Явна нативна конфігурація Slack потрібна лише тоді, коли ви хочете перевизначити approvers, додати фільтри або
-вибрати доставку в чат походження:
+Явна вбудована конфігурація Slack потрібна лише тоді, коли ви хочете перевизначити затверджувачів, додати фільтри або
+використовувати доставку в початковий чат:
```json5
{
@@ -573,50 +573,50 @@ approver. Установіть `enabled: false`, щоб явно вимкнут
}
```
-Спільне переспрямування `approvals.exec` налаштовується окремо. Використовуйте його лише тоді, коли запити на підтвердження exec також мають
-маршрутизуватися до інших чатів або явних позасмугових цілей. Спільне переспрямування `approvals.plugin` також
-налаштовується окремо; нативні кнопки Slack все одно можуть визначати підтвердження плагінів, коли ці запити вже надходять
+Спільне переспрямування `approvals.exec` є окремим. Використовуйте його лише тоді, коли запити на підтвердження exec також мають
+маршрутизуватися до інших чатів або явно позасмугових цілей. Спільне переспрямування `approvals.plugin` також є
+окремим; вбудовані кнопки Slack все одно можуть визначати підтвердження plugin, коли ці запити вже надходять
у Slack.
-Команда `/approve` у тому самому чаті також працює в каналах і DM Slack, які вже підтримують команди. Повну модель переспрямування підтверджень див. в [Підтвердження exec](/tools/exec-approvals).
+У Slack-каналах і особистих повідомленнях, які вже підтримують команди, також працює `/approve` у тому самому чаті. Повну модель переспрямування підтверджень див. у [Підтвердження exec](/uk/tools/exec-approvals).
-## Події та робоча поведінка
+## Події та поведінка під час роботи
-- Редагування/видалення повідомлень/розсилання тредів зіставляються із системними подіями.
-- Події додавання/видалення реакцій зіставляються із системними подіями.
-- Події приєднання/виходу учасників, створення/перейменування каналу та додавання/видалення pin зіставляються із системними подіями.
-- `channel_id_changed` може мігрувати ключі конфігурації каналу, коли ввімкнено `configWrites`.
-- Метадані теми/призначення каналу вважаються недовіреним контекстом і можуть додаватися до контексту маршрутизації.
-- Початкове повідомлення треду та початкове заповнення контексту історії треду фільтруються за налаштованими списками дозволу відправників там, де це застосовно.
-- Дії блоків і взаємодії з modal створюють структуровані системні події `Slack interaction: ...` з розширеними полями пейлоада:
- - дії блоків: вибрані значення, мітки, значення вибору та метадані `workflow_*`
- - події modal `view_submission` і `view_closed` з маршрутизованими метаданими каналу та введеними даними форми
+- Редагування/видалення повідомлень і thread broadcast відображаються в системні події.
+- Події додавання/видалення реакцій відображаються в системні події.
+- Події входу/виходу учасників, створення/перейменування каналу та додавання/видалення закріплень відображаються в системні події.
+- `channel_id_changed` може мігрувати ключі конфігурації каналу, якщо ввімкнено `configWrites`.
+- Метадані topic/purpose каналу вважаються недовіреним контекстом і можуть бути впроваджені в контекст маршрутизації.
+- Початкове повідомлення треду та початкове заповнення контексту історії треду фільтруються за налаштованими allowlist відправників, якщо це застосовно.
+- Дії блоків і взаємодії модальних вікон створюють структуровані системні події `Slack interaction: ...` із розширеними полями payload:
+ - дії блоків: вибрані значення, мітки, значення picker і метадані `workflow_*`
+ - події модальних вікон `view_submission` і `view_closed` з маршрутованими метаданими каналу та полями форм
## Вказівники на довідник конфігурації
Основний довідник:
-- [Довідник конфігурації - Slack](/gateway/configuration-reference#slack)
+- [Довідник конфігурації - Slack](/uk/gateway/configuration-reference#slack)
- Основні поля Slack:
- - режим/автентифікація: `mode`, `botToken`, `appToken`, `signingSecret`, `webhookPath`, `accounts.*`
- - доступ до DM: `dm.enabled`, `dmPolicy`, `allowFrom` (застаріле: `dm.policy`, `dm.allowFrom`), `dm.groupEnabled`, `dm.groupChannels`
- - перемикач сумісності: `dangerouslyAllowNameMatching` (аварійний варіант; залишайте вимкненим, якщо немає потреби)
+ Найважливіші поля Slack:
+ - mode/auth: `mode`, `botToken`, `appToken`, `signingSecret`, `webhookPath`, `accounts.*`
+ - доступ до особистих повідомлень: `dm.enabled`, `dmPolicy`, `allowFrom` (застаріле: `dm.policy`, `dm.allowFrom`), `dm.groupEnabled`, `dm.groupChannels`
+ - перемикач сумісності: `dangerouslyAllowNameMatching` (аварійний режим; тримайте вимкненим, якщо не потрібно)
- доступ до каналів: `groupPolicy`, `channels.*`, `channels.*.users`, `channels.*.requireMention`
- треди/історія: `replyToMode`, `replyToModeByChatType`, `thread.*`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit`
- доставка: `textChunkLimit`, `chunkMode`, `mediaMaxMb`, `streaming`, `nativeStreaming`
- операції/можливості: `configWrites`, `commands.native`, `slashCommand.*`, `actions.*`, `userToken`, `userTokenReadOnly`
-## Усунення несправностей
+## Усунення проблем
Перевірте в такому порядку:
- `groupPolicy`
- - список дозволу каналів (`channels.slack.channels`)
+ - allowlist каналів (`channels.slack.channels`)
- `requireMention`
- - список дозволу `users` для окремого каналу
+ - allowlist `users` для конкретного каналу
Корисні команди:
@@ -628,12 +628,12 @@ openclaw doctor
-
+
Перевірте:
- `channels.slack.dm.enabled`
- `channels.slack.dmPolicy` (або застаріле `channels.slack.dm.policy`)
- - схвалення pairing / записи списку дозволу
+ - підтвердження сполучення / записи allowlist
```bash
openclaw pairing list slack
@@ -642,46 +642,46 @@ openclaw pairing list slack
- Перевірте токени бота й застосунку та ввімкнення Socket Mode в налаштуваннях застосунку Slack.
+ Перевірте токени бота й застосунку та увімкнення Socket Mode в налаштуваннях застосунку Slack.
Якщо `openclaw channels status --probe --json` показує `botTokenStatus` або
`appTokenStatus: "configured_unavailable"`, обліковий запис Slack
- налаштовано, але поточне виконання не змогло визначити значення,
- що підтримується SecretRef.
+ налаштовано, але поточне середовище виконання не змогло визначити значення,
+ що зберігається через SecretRef.
-
+
Перевірте:
- signing secret
- шлях webhook
- - Request URL Slack (Events + Interactivity + Slash Commands)
+ - Slack Request URL (Events + Interactivity + Slash Commands)
- унікальний `webhookPath` для кожного HTTP-облікового запису
- Якщо `signingSecretStatus: "configured_unavailable"` з’являється в знімках
- облікового запису, обліковий запис HTTP налаштовано, але поточне виконання не змогло
- визначити signing secret, що підтримується SecretRef.
+ Якщо `signingSecretStatus: "configured_unavailable"` з'являється у знімках
+ облікового запису, HTTP-обліковий запис налаштовано, але поточне середовище виконання не змогло
+ визначити signing secret, що зберігається через SecretRef.
-
- Перевірте, чи ви мали на увазі:
+
+ Перевірте, що саме ви мали на увазі:
- - режим нативних команд (`channels.slack.commands.native: true`) із відповідними slash-командами, зареєстрованими в Slack
+ - режим вбудованих команд (`channels.slack.commands.native: true`) з відповідними зареєстрованими в Slack slash-командами
- або режим однієї slash-команди (`channels.slack.slashCommand.enabled: true`)
- Також перевірте `commands.useAccessGroups` і списки дозволу каналу/користувачів.
+ Також перевірте `commands.useAccessGroups` і allowlist каналів/користувачів.
-## Пов’язане
+## Пов'язане
-- [Pairing](/channels/pairing)
-- [Групи](/channels/groups)
-- [Безпека](/gateway/security)
-- [Маршрутизація каналів](/channels/channel-routing)
-- [Усунення несправностей](/channels/troubleshooting)
-- [Конфігурація](/gateway/configuration)
-- [Slash commands](/tools/slash-commands)
+- [Сполучення](/uk/channels/pairing)
+- [Групи](/uk/channels/groups)
+- [Безпека](/uk/gateway/security)
+- [Маршрутизація каналів](/uk/channels/channel-routing)
+- [Усунення проблем](/uk/channels/troubleshooting)
+- [Конфігурація](/uk/gateway/configuration)
+- [Slash-команди](/uk/tools/slash-commands)
diff --git a/docs/uk/gateway/configuration-reference.md b/docs/uk/gateway/configuration-reference.md
index 752d835c0..62dcd6474 100644
--- a/docs/uk/gateway/configuration-reference.md
+++ b/docs/uk/gateway/configuration-reference.md
@@ -1,56 +1,56 @@
---
read_when:
- - Вам потрібні точні семантики або значення за замовчуванням конфігурації на рівні полів
- - Ви перевіряєте блоки конфігурації каналів, моделей, шлюзу або інструментів
+ - Вам потрібна точна семантика полів конфігурації або значення за замовчуванням
+ - Ви перевіряєте блоки конфігурації каналів, моделей, gateway або інструментів
summary: Повний довідник для кожного ключа конфігурації OpenClaw, значень за замовчуванням і налаштувань каналів
title: Довідник з конфігурації
x-i18n:
- generated_at: "2026-04-05T19:23:06Z"
+ generated_at: "2026-04-05T20:48:22Z"
model: gpt-5.4
provider: openai
- source_hash: b2ac0b26762d642cd3667b3f18b11938947968e79d9cd363e86e31312ce7e981
+ source_hash: 46c05fdae14b9cb5a4baadd6d906145c3d875356ec5d728b483e85ee12c04b44
source_path: gateway/configuration-reference.md
workflow: 15
---
# Довідник з конфігурації
-Кожне поле, доступне в `~/.openclaw/openclaw.json`. Для огляду, орієнтованого на завдання, див. [Configuration](/uk/gateway/configuration).
+Усі поля, доступні в `~/.openclaw/openclaw.json`. Для огляду, орієнтованого на завдання, див. [Configuration](/uk/gateway/configuration).
-Формат конфігурації — **JSON5** (дозволені коментарі та кінцеві коми). Усі поля необов'язкові — OpenClaw використовує безпечні значення за замовчуванням, якщо їх не вказано.
+Формат конфігурації — **JSON5** (дозволені коментарі + кінцеві коми). Усі поля необов’язкові — OpenClaw використовує безпечні значення за замовчуванням, якщо їх не вказано.
---
## Канали
-Кожен канал запускається автоматично, коли існує його розділ конфігурації (якщо не вказано `enabled: false`).
+Кожен канал запускається автоматично, коли існує його секція конфігурації (якщо не вказано `enabled: false`).
-### Доступ до особистих і групових чатів
+### Доступ до DM і груп
-Усі канали підтримують політики для особистих повідомлень і політики для груп:
+Усі канали підтримують політики DM і політики груп:
-| Політика особистих повідомлень | Поведінка |
-| ------------------------------ | --------------------------------------------------------------- |
-| `pairing` (за замовчуванням) | Невідомі відправники отримують одноразовий код сполучення; власник має схвалити |
-| `allowlist` | Лише відправники з `allowFrom` (або зі сховища дозволів для сполучених) |
-| `open` | Дозволити всі вхідні особисті повідомлення (потрібно `allowFrom: ["*"]`) |
-| `disabled` | Ігнорувати всі вхідні особисті повідомлення |
+| Політика DM | Поведінка |
+| ------------------- | -------------------------------------------------------------- |
+| `pairing` (default) | Невідомі відправники отримують одноразовий код pairing; власник має підтвердити |
+| `allowlist` | Лише відправники з `allowFrom` (або зі сховища paired allow) |
+| `open` | Дозволити всі вхідні DM (потрібно `allowFrom: ["*"]`) |
+| `disabled` | Ігнорувати всі вхідні DM |
-| Політика груп | Поведінка |
-| -------------------- | ------------------------------------------------------- |
-| `allowlist` (за замовчуванням) | Лише групи, що відповідають налаштованому списку дозволів |
-| `open` | Обходити списки дозволів для груп (обмеження за згадками все одно застосовується) |
-| `disabled` | Блокувати всі повідомлення груп/кімнат |
+| Політика груп | Поведінка |
+| --------------------- | ------------------------------------------------------ |
+| `allowlist` (default) | Лише групи, що відповідають налаштованому allowlist |
+| `open` | Обійти allowlist груп (гейтінг згадок усе ще діє) |
+| `disabled` | Блокувати всі повідомлення груп/кімнат |
-`channels.defaults.groupPolicy` задає значення за замовчуванням, коли `groupPolicy` постачальника не встановлено.
-Коди сполучення закінчують дію через 1 годину. Кількість очікуваних запитів на сполучення для особистих повідомлень обмежена **3 на канал**.
-Якщо блок постачальника повністю відсутній (`channels.` відсутній), політика груп під час виконання повертається до `allowlist` (fail-closed) із попередженням під час запуску.
+`channels.defaults.groupPolicy` задає значення за замовчуванням, якщо `groupPolicy` постачальника не встановлено.
+Коди pairing спливають через 1 годину. Кількість очікуваних запитів на pairing DM обмежена **3 на канал**.
+Якщо блок постачальника повністю відсутній (`channels.` відсутній), політика груп під час виконання повертається до `allowlist` (fail-closed) з попередженням під час запуску.
-### Перевизначення моделей для каналів
+### Перевизначення моделі для каналів
-Використовуйте `channels.modelByChannel`, щоб прив'язати конкретні ідентифікатори каналів до моделі. Значення приймають `provider/model` або налаштовані псевдоніми моделей. Відображення каналу застосовується, коли для сесії ще не встановлено перевизначення моделі (наприклад, через `/model`).
+Використовуйте `channels.modelByChannel`, щоб закріпити конкретні ID каналів за моделлю. Значення приймають `provider/model` або налаштовані псевдоніми моделей. Відображення каналу застосовується, коли для сесії ще не встановлено перевизначення моделі (наприклад, через `/model`).
```json5
{
@@ -73,7 +73,7 @@ x-i18n:
### Значення каналів за замовчуванням і heartbeat
-Використовуйте `channels.defaults` для спільної поведінки політики груп і heartbeat у різних постачальників:
+Використовуйте `channels.defaults` для спільної політики груп і поведінки heartbeat для всіх постачальників:
```json5
{
@@ -91,15 +91,15 @@ x-i18n:
}
```
-- `channels.defaults.groupPolicy`: резервна політика груп, коли `groupPolicy` на рівні постачальника не встановлено.
-- `channels.defaults.contextVisibility`: режим видимості додаткового контексту за замовчуванням для всіх каналів. Значення: `all` (за замовчуванням, включати весь процитований/потоковий/історичний контекст), `allowlist` (включати контекст лише від відправників зі списку дозволів), `allowlist_quote` (як allowlist, але зберігати явний контекст цитування/відповіді). Перевизначення для каналу: `channels..contextVisibility`.
-- `channels.defaults.heartbeat.showOk`: включати статуси справних каналів у вивід heartbeat.
+- `channels.defaults.groupPolicy`: резервна політика груп, якщо `groupPolicy` на рівні постачальника не встановлено.
+- `channels.defaults.contextVisibility`: режим видимості додаткового контексту за замовчуванням для всіх каналів. Значення: `all` (default, включати весь процитований/потоковий/історичний контекст), `allowlist` (включати контекст лише від відправників з allowlist), `allowlist_quote` (те саме, що allowlist, але зберігати явний контекст цитати/відповіді). Перевизначення на рівні каналу: `channels..contextVisibility`.
+- `channels.defaults.heartbeat.showOk`: включати здорові статуси каналів у вивід heartbeat.
- `channels.defaults.heartbeat.showAlerts`: включати деградовані/помилкові статуси у вивід heartbeat.
- `channels.defaults.heartbeat.useIndicator`: відображати компактний heartbeat у стилі індикатора.
### WhatsApp
-WhatsApp працює через вебканал шлюзу (Baileys Web). Він запускається автоматично, коли існує прив'язана сесія.
+WhatsApp працює через web channel gateway (Baileys Web). Він запускається автоматично, коли існує пов’язана сесія.
```json5
{
@@ -110,7 +110,7 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві
textChunkLimit: 4000,
chunkMode: "length", // length | newline
mediaMaxMb: 50,
- sendReadReceipts: true, // сині галочки (false у режимі self-chat)
+ sendReadReceipts: true, // blue ticks (false у режимі self-chat)
groups: {
"*": { requireMention: true },
},
@@ -132,7 +132,7 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві
}
```
-
+
```json5
{
@@ -150,10 +150,10 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві
}
```
-- Вихідні команди за замовчуванням використовують обліковий запис `default`, якщо він є; інакше — перший налаштований `accountId` (відсортовано).
-- Необов'язковий `channels.whatsapp.defaultAccount` перевизначає цей резервний вибір облікового запису за замовчуванням, якщо він відповідає налаштованому `accountId`.
-- Застарілий каталог автентифікації Baileys для одного облікового запису переноситься командою `openclaw doctor` до `whatsapp/default`.
-- Перевизначення для облікового запису: `channels.whatsapp.accounts..sendReadReceipts`, `channels.whatsapp.accounts..dmPolicy`, `channels.whatsapp.accounts..allowFrom`.
+- Вихідні команди за замовчуванням використовують акаунт `default`, якщо він є; інакше — перший налаштований ID акаунта (відсортований).
+- Необов’язковий `channels.whatsapp.defaultAccount` перевизначає цей резервний вибір акаунта за замовчуванням, якщо він збігається з налаштованим ID акаунта.
+- Застарілий каталог автентифікації Baileys для одного акаунта мігрується командою `openclaw doctor` у `whatsapp/default`.
+- Перевизначення на рівні акаунта: `channels.whatsapp.accounts..sendReadReceipts`, `channels.whatsapp.accounts..dmPolicy`, `channels.whatsapp.accounts..allowFrom`.
@@ -171,24 +171,24 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві
"*": { requireMention: true },
"-1001234567890": {
allowFrom: ["@admin"],
- systemPrompt: "Відповідай коротко.",
+ systemPrompt: "Залишай відповіді короткими.",
topics: {
"99": {
requireMention: false,
skills: ["search"],
- systemPrompt: "Тримайся теми.",
+ systemPrompt: "Дотримуйся теми.",
},
},
},
},
customCommands: [
- { command: "backup", description: "Резервна копія Git" },
+ { command: "backup", description: "Git backup" },
{ command: "generate", description: "Створити зображення" },
],
historyLimit: 50,
- replyToMode: "first", // off | first | all
+ replyToMode: "first", // off | first | all | batched
linkPreview: true,
- streaming: "partial", // off | partial | block | progress (за замовчуванням: off; вмикайте явно, щоб уникнути обмежень на частоту редагування попереднього перегляду)
+ streaming: "partial", // off | partial | block | progress (default: off; явно вмикайте, щоб уникнути rate limits на preview-edit)
actions: { reactions: true, sendMessage: true },
reactionNotifications: "own", // off | own | all
mediaMaxMb: 100,
@@ -211,13 +211,13 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві
}
```
-- Токен бота: `channels.telegram.botToken` або `channels.telegram.tokenFile` (лише звичайний файл; символьні посилання відхиляються), з `TELEGRAM_BOT_TOKEN` як резервним варіантом для облікового запису за замовчуванням.
-- Необов'язковий `channels.telegram.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він відповідає налаштованому `accountId`.
-- У багатьох облікових записах (2+ `accountId`) установіть явний типово вибраний обліковий запис (`channels.telegram.defaultAccount` або `channels.telegram.accounts.default`), щоб уникнути резервної маршрутизації; `openclaw doctor` попереджає, якщо його немає або він недійсний.
-- `configWrites: false` блокує ініційовані з Telegram записи конфігурації (міграції ID супергруп, `/config set|unset`).
-- Записи верхнього рівня `bindings[]` із `type: "acp"` налаштовують постійні ACP-прив'язки для тем форуму (використовуйте канонічний `chatId:topic:topicId` у `match.peer.id`). Семантика полів спільна з [ACP Agents](/uk/tools/acp-agents#channel-specific-settings).
-- Попередній перегляд потоків Telegram використовує `sendMessage` + `editMessageText` (працює в особистих і групових чатах).
-- Політика повторних спроб: див. [Retry policy](/uk/concepts/retry).
+- Токен бота: `channels.telegram.botToken` або `channels.telegram.tokenFile` (лише звичайний файл; symlink відхиляються), з `TELEGRAM_BOT_TOKEN` як резервним варіантом для акаунта default.
+- Необов’язковий `channels.telegram.defaultAccount` перевизначає вибір акаунта за замовчуванням, якщо він збігається з налаштованим ID акаунта.
+- У багатоакаунтних конфігураціях (2+ ID акаунтів) установіть явний default (`channels.telegram.defaultAccount` або `channels.telegram.accounts.default`), щоб уникнути резервної маршрутизації; `openclaw doctor` попереджає, якщо цього бракує або значення невалідне.
+- `configWrites: false` блокує записи конфігурації, ініційовані з Telegram (міграції ID supergroup, `/config set|unset`).
+- Записи верхнього рівня `bindings[]` з `type: "acp"` налаштовують сталі ACP-прив’язки для тем форумів (використовуйте канонічний `chatId:topic:topicId` у `match.peer.id`). Семантика полів спільна з [ACP Agents](/uk/tools/acp-agents#channel-specific-settings).
+- Прев’ю потоку Telegram використовують `sendMessage` + `editMessageText` (працює в прямих і групових чатах).
+- Політика retry: див. [Retry policy](/uk/concepts/retry).
### Discord
@@ -246,7 +246,7 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві
events: true,
moderation: false,
},
- replyToMode: "off", // off | first | all
+ replyToMode: "off", // off | first | all | batched
dmPolicy: "pairing",
allowFrom: ["1234567890", "123456789012345678"],
dm: { enabled: true, groupEnabled: false, groupChannels: ["openclaw-dm"] },
@@ -272,7 +272,7 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві
historyLimit: 20,
textChunkLimit: 2000,
chunkMode: "length", // length | newline
- streaming: "off", // off | partial | block | progress (progress відображається як partial у Discord)
+ streaming: "off", // off | partial | block | progress (progress зіставляється з partial у Discord)
maxLinesPerMessage: 17,
ui: {
components: {
@@ -319,36 +319,36 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві
}
```
-- Токен: `channels.discord.token`, з `DISCORD_BOT_TOKEN` як резервним варіантом для облікового запису за замовчуванням.
-- Прямі вихідні виклики, які передають явний Discord `token`, використовують цей токен для виклику; налаштування повторних спроб/політики облікового запису все одно беруться з вибраного облікового запису в активному знімку середовища виконання.
-- Необов'язковий `channels.discord.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він відповідає налаштованому `accountId`.
-- Використовуйте `user:` (особисті повідомлення) або `channel:` (канал гільдії) як цілі доставки; прості числові ID відхиляються.
-- Slug-и гільдій містять лише малі літери, а пробіли замінюються на `-`; ключі каналів використовують slug-ім'я (без `#`). Віддавайте перевагу ID гільдій.
-- Повідомлення, створені ботом, типово ігноруються. `allowBots: true` вмикає їх; використовуйте `allowBots: "mentions"`, щоб приймати лише повідомлення ботів, які згадують бота (власні повідомлення все одно відфільтровуються).
-- `channels.discord.guilds..ignoreOtherMentions` (і перевизначення каналів) відкидає повідомлення, які згадують іншого користувача або роль, але не бота (без урахування @everyone/@here).
-- `maxLinesPerMessage` (за замовчуванням 17) розбиває високі повідомлення, навіть якщо вони коротші за 2000 символів.
-- `channels.discord.threadBindings` керує маршрутизацією, прив'язаною до потоків Discord:
- - `enabled`: перевизначення Discord для функцій сесій, прив'язаних до потоку (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age` і прив'язана доставка/маршрутизація)
- - `idleHours`: перевизначення Discord для авто-скасування фокусу через неактивність у годинах (`0` вимикає)
+- Токен: `channels.discord.token`, з `DISCORD_BOT_TOKEN` як резервним варіантом для акаунта default.
+- Прямі вихідні виклики, що передають явний Discord `token`, використовують цей токен для виклику; налаштування retry/політики акаунта все одно беруться з вибраного акаунта в активному знімку runtime.
+- Необов’язковий `channels.discord.defaultAccount` перевизначає вибір акаунта за замовчуванням, якщо він збігається з налаштованим ID акаунта.
+- Використовуйте `user:` (DM) або `channel:` (канал guild) як цілі доставки; прості числові ID відхиляються.
+- Slug guild — у нижньому регістрі, пробіли замінено на `-`; ключі каналів використовують slug-ім’я (без `#`). Віддавайте перевагу ID guild.
+- Повідомлення, створені ботом, за замовчуванням ігноруються. `allowBots: true` вмикає їх; використовуйте `allowBots: "mentions"`, щоб приймати лише повідомлення ботів, які згадують бота (власні повідомлення все одно фільтруються).
+- `channels.discord.guilds..ignoreOtherMentions` (і перевизначення каналів) відкидає повідомлення, які згадують іншого користувача або роль, але не бота (за винятком @everyone/@here).
+- `maxLinesPerMessage` (default 17) розбиває довгі повідомлення, навіть якщо вони коротші за 2000 символів.
+- `channels.discord.threadBindings` керує маршрутизацією, прив’язаною до thread у Discord:
+ - `enabled`: перевизначення Discord для функцій сесій, прив’язаних до thread (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age` та прив’язана доставка/маршрутизація)
+ - `idleHours`: перевизначення Discord для автоматичного unfocus через неактивність у годинах (`0` вимикає)
- `maxAgeHours`: перевизначення Discord для жорсткого максимального віку в годинах (`0` вимикає)
- - `spawnSubagentSessions`: перемикач opt-in для автоматичного створення/прив'язки потоків через `sessions_spawn({ thread: true })`
-- Записи верхнього рівня `bindings[]` із `type: "acp"` налаштовують постійні ACP-прив'язки для каналів і потоків (використовуйте ID каналу/потоку в `match.peer.id`). Семантика полів спільна з [ACP Agents](/uk/tools/acp-agents#channel-specific-settings).
+ - `spawnSubagentSessions`: opt-in перемикач для автоматичного створення/прив’язки thread у `sessions_spawn({ thread: true })`
+- Записи верхнього рівня `bindings[]` з `type: "acp"` налаштовують сталі ACP-прив’язки для каналів і thread (використовуйте ID каналу/thread у `match.peer.id`). Семантика полів спільна з [ACP Agents](/uk/tools/acp-agents#channel-specific-settings).
- `channels.discord.ui.components.accentColor` задає колір акценту для контейнерів Discord components v2.
-- `channels.discord.voice` вмикає розмови в голосових каналах Discord і необов'язкові перевизначення auto-join + TTS.
+- `channels.discord.voice` вмикає розмови у voice channel Discord і необов’язкові auto-join + перевизначення TTS.
- `channels.discord.voice.daveEncryption` і `channels.discord.voice.decryptionFailureTolerance` напряму передаються в параметри DAVE `@discordjs/voice` (`true` і `24` за замовчуванням).
-- OpenClaw також намагається відновити прийом голосу, виходячи та повторно входячи в голосову сесію після повторних помилок дешифрування.
-- `channels.discord.streaming` — канонічний ключ режиму потоку. Застарілі `streamMode` і булеві значення `streaming` автоматично переносяться.
-- `channels.discord.autoPresence` відображає доступність середовища виконання у присутність бота (healthy => online, degraded => idle, exhausted => dnd) і дозволяє необов'язкові перевизначення тексту статусу.
-- `channels.discord.dangerouslyAllowNameMatching` знову вмикає зіставлення за змінюваними іменами/тегами (режим сумісності break-glass).
-- `channels.discord.execApprovals`: доставка схвалень exec у стилі Discord і авторизація схвалювачів.
- - `enabled`: `true`, `false` або `"auto"` (за замовчуванням). В автоматичному режимі схвалення exec активуються, коли схвалювачів можна визначити через `approvers` або `commands.ownerAllowFrom`.
- - `approvers`: ID користувачів Discord, яким дозволено схвалювати запити exec. Якщо не вказано, використовується `commands.ownerAllowFrom`.
- - `agentFilter`: необов'язковий список дозволених ID агентів. Якщо опустити, пересилаються схвалення для всіх агентів.
- - `sessionFilter`: необов'язкові шаблони ключів сесій (підрядок або regex).
- - `target`: куди надсилати запити на схвалення. `"dm"` (за замовчуванням) надсилає в особисті повідомлення схвалювачів, `"channel"` — у канал походження, `"both"` — в обидва місця. Коли target містить `"channel"`, кнопки можуть використовувати лише визначені схвалювачі.
- - `cleanupAfterResolve`: коли `true`, видаляє особисті повідомлення зі схваленням після схвалення, відмови або тайм-ауту.
+- OpenClaw також намагається відновити voice receive, виходячи й повторно приєднуючись до voice session після повторюваних помилок дешифрування.
+- `channels.discord.streaming` — канонічний ключ режиму потоку. Застарілі `streamMode` і булеві значення `streaming` мігруються автоматично.
+- `channels.discord.autoPresence` зіставляє доступність runtime зі статусом бота (healthy => online, degraded => idle, exhausted => dnd) і дозволяє необов’язкові перевизначення тексту статусу.
+- `channels.discord.dangerouslyAllowNameMatching` знову вмикає зіставлення за змінюваним ім’ям/tag (режим break-glass для сумісності).
+- `channels.discord.execApprovals`: доставка native exec approval у Discord і авторизація погоджувачів.
+ - `enabled`: `true`, `false` або `"auto"` (default). У режимі auto exec approvals активуються, коли погоджувачів можна визначити з `approvers` або `commands.ownerAllowFrom`.
+ - `approvers`: ID користувачів Discord, яким дозволено схвалювати exec requests. Якщо не вказано, використовується `commands.ownerAllowFrom`.
+ - `agentFilter`: необов’язковий allowlist ID агентів. Якщо пропустити, approvals пересилаються для всіх агентів.
+ - `sessionFilter`: необов’язкові шаблони ключів сесій (підрядок або regex).
+ - `target`: куди надсилати запити на схвалення. `"dm"` (default) надсилає в DM погоджувачів, `"channel"` — у вихідний канал, `"both"` — в обидва місця. Коли target включає `"channel"`, кнопки можуть використовувати лише визначені погоджувачі.
+ - `cleanupAfterResolve`: якщо `true`, видаляє approval DM після схвалення, відхилення або timeout.
-**Режими сповіщень про реакції:** `off` (немає), `own` (повідомлення бота, за замовчуванням), `all` (усі повідомлення), `allowlist` (від `guilds..users` для всіх повідомлень).
+**Режими сповіщень про реакції:** `off` (немає), `own` (повідомлення бота, default), `all` (усі повідомлення), `allowlist` (із `guilds..users` для всіх повідомлень).
### Google Chat
@@ -379,11 +379,11 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві
}
```
-- JSON облікового запису служби: вбудований (`serviceAccount`) або з файлу (`serviceAccountFile`).
-- Також підтримується SecretRef для облікового запису служби (`serviceAccountRef`).
-- Резервні значення з env: `GOOGLE_CHAT_SERVICE_ACCOUNT` або `GOOGLE_CHAT_SERVICE_ACCOUNT_FILE`.
+- JSON service account: вбудовано (`serviceAccount`) або з файла (`serviceAccountFile`).
+- Також підтримується Service account SecretRef (`serviceAccountRef`).
+- Резервні env: `GOOGLE_CHAT_SERVICE_ACCOUNT` або `GOOGLE_CHAT_SERVICE_ACCOUNT_FILE`.
- Використовуйте `spaces/` або `users/` як цілі доставки.
-- `channels.googlechat.dangerouslyAllowNameMatching` знову вмикає зіставлення за змінюваним email principal (режим сумісності break-glass).
+- `channels.googlechat.dangerouslyAllowNameMatching` знову вмикає зіставлення за змінюваним email principal (режим break-glass для сумісності).
### Slack
@@ -412,7 +412,7 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві
allowBots: false,
reactionNotifications: "own",
reactionAllowlist: ["U123"],
- replyToMode: "off", // off | first | all
+ replyToMode: "off", // off | first | all | batched
thread: {
historyScope: "thread", // thread | channel
inheritParent: false,
@@ -433,8 +433,8 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві
typingReaction: "hourglass_flowing_sand",
textChunkLimit: 4000,
chunkMode: "length",
- streaming: "partial", // off | partial | block | progress (режим попереднього перегляду)
- nativeStreaming: true, // використовувати нативний API потокової передачі Slack, коли streaming=partial
+ streaming: "partial", // off | partial | block | progress (режим прев’ю)
+ nativeStreaming: true, // використовувати native streaming API Slack, коли streaming=partial
mediaMaxMb: 20,
execApprovals: {
enabled: "auto", // true | false | "auto"
@@ -448,34 +448,34 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві
}
```
-- **Режим Socket** потребує і `botToken`, і `appToken` (`SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` як резервне значення env для облікового запису за замовчуванням).
-- **HTTP-режим** потребує `botToken` плюс `signingSecret` (на кореневому рівні або для окремого облікового запису).
+- **Socket mode** потребує і `botToken`, і `appToken` (`SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` як резерв через env для акаунта default).
+- **HTTP mode** потребує `botToken` плюс `signingSecret` (у корені або для кожного акаунта).
- `botToken`, `appToken`, `signingSecret` і `userToken` приймають прості текстові
- рядки або об'єкти SecretRef.
-- Знімки облікових записів Slack показують поля джерела/стану для кожного облікового даного, такі як
- `botTokenSource`, `botTokenStatus`, `appTokenStatus` і, в HTTP-режимі,
- `signingSecretStatus`. `configured_unavailable` означає, що обліковий запис
- налаштований через SecretRef, але поточний шлях команди/середовища виконання не зміг
- отримати значення секрету.
-- `configWrites: false` блокує ініційовані зі Slack записи конфігурації.
-- Необов'язковий `channels.slack.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він відповідає налаштованому `accountId`.
-- `channels.slack.streaming` — канонічний ключ режиму потоку. Застарілі `streamMode` і булеві значення `streaming` автоматично переносяться.
-- Використовуйте `user:` (особисті повідомлення) або `channel:` як цілі доставки.
+ рядки або об’єкти SecretRef.
+- Знімки акаунтів Slack показують поля джерела/статусу для кожного облікового
+ даного, наприклад `botTokenSource`, `botTokenStatus`, `appTokenStatus`, а в HTTP mode —
+ `signingSecretStatus`. `configured_unavailable` означає, що акаунт
+ налаштований через SecretRef, але поточний шлях command/runtime не зміг
+ розв’язати значення секрету.
+- `configWrites: false` блокує записи конфігурації, ініційовані зі Slack.
+- Необов’язковий `channels.slack.defaultAccount` перевизначає вибір акаунта за замовчуванням, якщо він збігається з налаштованим ID акаунта.
+- `channels.slack.streaming` — канонічний ключ режиму потоку. Застарілі `streamMode` і булеві значення `streaming` мігруються автоматично.
+- Використовуйте `user:` (DM) або `channel:` як цілі доставки.
-**Режими сповіщень про реакції:** `off`, `own` (за замовчуванням), `all`, `allowlist` (із `reactionAllowlist`).
+**Режими сповіщень про реакції:** `off`, `own` (default), `all`, `allowlist` (із `reactionAllowlist`).
-**Ізоляція сесій потоків:** `thread.historyScope` — для кожного потоку окремо (за замовчуванням) або спільно в межах каналу. `thread.inheritParent` копіює транскрипт батьківського каналу в нові потоки.
+**Ізоляція thread session:** `thread.historyScope` — для кожного thread окремо (default) або спільний для каналу. `thread.inheritParent` копіює transcript батьківського каналу в нові threads.
-- `typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки виконується відповідь, а потім прибирає її після завершення. Використовуйте скорочений код емодзі Slack, наприклад `"hourglass_flowing_sand"`.
-- `channels.slack.execApprovals`: доставка схвалень exec у стилі Slack і авторизація схвалювачів. Та сама схема, що і для Discord: `enabled` (`true`/`false`/`"auto"`), `approvers` (ID користувачів Slack), `agentFilter`, `sessionFilter` і `target` (`"dm"`, `"channel"` або `"both"`).
+- `typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки виконується відповідь, а після завершення прибирає її. Використовуйте shortcode emoji Slack, наприклад `"hourglass_flowing_sand"`.
+- `channels.slack.execApprovals`: доставка native exec approval у Slack і авторизація погоджувачів. Та сама схема, що й у Discord: `enabled` (`true`/`false`/`"auto"`), `approvers` (ID користувачів Slack), `agentFilter`, `sessionFilter` і `target` (`"dm"`, `"channel"` або `"both"`).
-| Група дій | За замовчуванням | Примітки |
-| ----------- | ---------------- | ---------------------- |
-| reactions | увімкнено | Реакції + список реакцій |
-| messages | увімкнено | Читання/надсилання/редагування/видалення |
-| pins | увімкнено | Закріпити/відкріпити/перелік |
-| memberInfo | увімкнено | Інформація про учасника |
-| emojiList | увімкнено | Список власних емодзі |
+| Група дій | Default | Примітки |
+| ----------- | ------- | ----------------------- |
+| reactions | увімкнено | Реагування + список реакцій |
+| messages | увімкнено | Читання/надсилання/редагування/видалення |
+| pins | увімкнено | Закріпити/відкріпити/список |
+| memberInfo | увімкнено | Інформація про учасника |
+| emojiList | увімкнено | Список користувацьких emoji |
### Mattermost
@@ -499,7 +499,7 @@ Mattermost постачається як plugin: `openclaw plugins install @open
native: true, // opt-in
nativeSkills: true,
callbackPath: "/api/channels/mattermost/command",
- // Необов'язковий явний URL для reverse-proxy/публічних розгортань
+ // Необов’язкова явна URL-адреса для reverse-proxy/public deployments
callbackUrl: "https://gateway.example.com/api/channels/mattermost/command",
},
textChunkLimit: 4000,
@@ -509,23 +509,23 @@ Mattermost постачається як plugin: `openclaw plugins install @open
}
```
-Режими чату: `oncall` (відповідати на @-згадку, за замовчуванням), `onmessage` (на кожне повідомлення), `onchar` (повідомлення, що починаються з префікса-тригера).
+Режими чату: `oncall` (відповідати на @-згадку, default), `onmessage` (на кожне повідомлення), `onchar` (повідомлення, що починаються з префікса trigger).
-Коли увімкнено нативні команди Mattermost:
+Коли native commands Mattermost увімкнено:
-- `commands.callbackPath` має бути шляхом (наприклад `/api/channels/mattermost/command`), а не повним URL.
-- `commands.callbackUrl` має вказувати на кінцеву точку шлюзу OpenClaw і бути доступним із сервера Mattermost.
-- Нативні зворотні виклики slash-команд автентифікуються за токенами
- для кожної команди, які Mattermost повертає під час реєстрації slash-команд. Якщо реєстрація не вдається або жодну
- команду не активовано, OpenClaw відхиляє зворотні виклики з
+- `commands.callbackPath` має бути шляхом (наприклад `/api/channels/mattermost/command`), а не повною URL-адресою.
+- `commands.callbackUrl` має вказувати на endpoint gateway OpenClaw і бути досяжним із сервера Mattermost.
+- Native slash callbacks автентифікуються токенами кожної команди,
+ які Mattermost повертає під час реєстрації slash command. Якщо реєстрація не вдалася або
+ не активовано жодної команди, OpenClaw відхиляє callbacks із
`Unauthorized: invalid command token.`
-- Для приватних/tailnet/внутрішніх хостів зворотного виклику Mattermost може вимагати,
- щоб `ServiceSettings.AllowedUntrustedInternalConnections` містив хост/домен зворотного виклику.
- Використовуйте значення хоста/домену, а не повні URL.
-- `channels.mattermost.configWrites`: дозволити або заборонити ініційовані з Mattermost записи конфігурації.
+- Для private/tailnet/internal callback hosts Mattermost може вимагати,
+ щоб `ServiceSettings.AllowedUntrustedInternalConnections` містив callback host/domain.
+ Використовуйте значення host/domain, а не повні URL.
+- `channels.mattermost.configWrites`: дозволити або заборонити записи конфігурації, ініційовані з Mattermost.
- `channels.mattermost.requireMention`: вимагати `@mention` перед відповіддю в каналах.
-- `channels.mattermost.groups..requireMention`: перевизначення обмеження за згадками для окремого каналу (`"*"` для значення за замовчуванням).
-- Необов'язковий `channels.mattermost.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він відповідає налаштованому `accountId`.
+- `channels.mattermost.groups..requireMention`: перевизначення mention-gating для окремого каналу (`"*"` для default).
+- Необов’язковий `channels.mattermost.defaultAccount` перевизначає вибір акаунта за замовчуванням, якщо він збігається з налаштованим ID акаунта.
### Signal
@@ -534,7 +534,7 @@ Mattermost постачається як plugin: `openclaw plugins install @open
channels: {
signal: {
enabled: true,
- account: "+15555550123", // необов'язкова прив'язка облікового запису
+ account: "+15555550123", // необов’язкова прив’язка акаунта
dmPolicy: "pairing",
allowFrom: ["+15551234567", "uuid:123e4567-e89b-12d3-a456-426614174000"],
configWrites: true,
@@ -546,15 +546,15 @@ Mattermost постачається як plugin: `openclaw plugins install @open
}
```
-**Режими сповіщень про реакції:** `off`, `own` (за замовчуванням), `all`, `allowlist` (із `reactionAllowlist`).
+**Режими сповіщень про реакції:** `off`, `own` (default), `all`, `allowlist` (із `reactionAllowlist`).
-- `channels.signal.account`: прив'язати запуск каналу до конкретної ідентичності облікового запису Signal.
-- `channels.signal.configWrites`: дозволити або заборонити ініційовані з Signal записи конфігурації.
-- Необов'язковий `channels.signal.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він відповідає налаштованому `accountId`.
+- `channels.signal.account`: закріпити запуск каналу за конкретною ідентичністю акаунта Signal.
+- `channels.signal.configWrites`: дозволити або заборонити записи конфігурації, ініційовані із Signal.
+- Необов’язковий `channels.signal.defaultAccount` перевизначає вибір акаунта за замовчуванням, якщо він збігається з налаштованим ID акаунта.
### BlueBubbles
-BlueBubbles — рекомендований шлях для iMessage (на основі plugin, налаштовується в `channels.bluebubbles`).
+BlueBubbles — рекомендований шлях для iMessage (підтримується plugin, налаштовується в `channels.bluebubbles`).
```json5
{
@@ -562,21 +562,21 @@ BlueBubbles — рекомендований шлях для iMessage (на ос
bluebubbles: {
enabled: true,
dmPolicy: "pairing",
- // serverUrl, password, webhookPath, елементи керування групами та розширені дії:
+ // serverUrl, password, webhookPath, керування групами та розширені дії:
// див. /channels/bluebubbles
},
},
}
```
-- Тут охоплено основні шляхи ключів: `channels.bluebubbles`, `channels.bluebubbles.dmPolicy`.
-- Необов'язковий `channels.bluebubbles.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він відповідає налаштованому `accountId`.
-- Записи верхнього рівня `bindings[]` із `type: "acp"` можуть прив'язувати розмови BlueBubbles до постійних ACP-сесій. Використовуйте BlueBubbles handle або цільовий рядок (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) у `match.peer.id`. Спільна семантика полів: [ACP Agents](/uk/tools/acp-agents#channel-specific-settings).
-- Повну конфігурацію каналу BlueBubbles описано в [BlueBubbles](/uk/channels/bluebubbles).
+- Основні шляхи ключів, описані тут: `channels.bluebubbles`, `channels.bluebubbles.dmPolicy`.
+- Необов’язковий `channels.bluebubbles.defaultAccount` перевизначає вибір акаунта за замовчуванням, якщо він збігається з налаштованим ID акаунта.
+- Записи верхнього рівня `bindings[]` з `type: "acp"` можуть прив’язувати розмови BlueBubbles до сталих ACP session. Використовуйте BlueBubbles handle або target string (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) у `match.peer.id`. Спільна семантика полів: [ACP Agents](/uk/tools/acp-agents#channel-specific-settings).
+- Повну конфігурацію каналу BlueBubbles задокументовано в [BlueBubbles](/uk/channels/bluebubbles).
### iMessage
-OpenClaw запускає `imsg rpc` (JSON-RPC через stdio). Демон або порт не потрібні.
+OpenClaw запускає `imsg rpc` (JSON-RPC через stdio). Daemon або порт не потрібні.
```json5
{
@@ -600,17 +600,17 @@ OpenClaw запускає `imsg rpc` (JSON-RPC через stdio). Демон а
}
```
-- Необов'язковий `channels.imessage.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він відповідає налаштованому `accountId`.
+- Необов’язковий `channels.imessage.defaultAccount` перевизначає вибір акаунта за замовчуванням, якщо він збігається з налаштованим ID акаунта.
- Потрібен Full Disk Access до БД Messages.
- Віддавайте перевагу цілям `chat_id:`. Використовуйте `imsg chats --limit 20`, щоб переглянути список чатів.
-- `cliPath` може вказувати на SSH-обгортку; установіть `remoteHost` (`host` або `user@host`) для отримання вкладень через SCP.
-- `attachmentRoots` і `remoteAttachmentRoots` обмежують шляхи вхідних вкладень (за замовчуванням: `/Users/*/Library/Messages/Attachments`).
-- SCP використовує сувору перевірку ключа хоста, тому переконайтеся, що ключ хоста ретранслятора вже є в `~/.ssh/known_hosts`.
-- `channels.imessage.configWrites`: дозволити або заборонити ініційовані з iMessage записи конфігурації.
-- Записи верхнього рівня `bindings[]` із `type: "acp"` можуть прив'язувати розмови iMessage до постійних ACP-сесій. Використовуйте нормалізований handle або явну ціль чату (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) у `match.peer.id`. Спільна семантика полів: [ACP Agents](/uk/tools/acp-agents#channel-specific-settings).
+- `cliPath` може вказувати на SSH wrapper; установіть `remoteHost` (`host` або `user@host`) для отримання вкладень через SCP.
+- `attachmentRoots` і `remoteAttachmentRoots` обмежують шляхи вхідних вкладень (default: `/Users/*/Library/Messages/Attachments`).
+- SCP використовує сувору перевірку host key, тому переконайтеся, що host key relay уже є в `~/.ssh/known_hosts`.
+- `channels.imessage.configWrites`: дозволити або заборонити записи конфігурації, ініційовані з iMessage.
+- Записи верхнього рівня `bindings[]` з `type: "acp"` можуть прив’язувати розмови iMessage до сталих ACP session. Використовуйте нормалізований handle або явну ціль чату (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) у `match.peer.id`. Спільна семантика полів: [ACP Agents](/uk/tools/acp-agents#channel-specific-settings).
-
+
```bash
#!/usr/bin/env bash
@@ -621,7 +621,7 @@ exec ssh -T gateway-host imsg "$@"
### Matrix
-Matrix підтримується розширенням і налаштовується в `channels.matrix`.
+Matrix підтримується extension і налаштовується в `channels.matrix`.
```json5
{
@@ -651,24 +651,24 @@ Matrix підтримується розширенням і налаштовує
}
```
-- Автентифікація токеном використовує `accessToken`; автентифікація паролем використовує `userId` + `password`.
-- `channels.matrix.proxy` спрямовує HTTP-трафік Matrix через явний HTTP(S)-проксі. Іменовані облікові записи можуть перевизначати його через `channels.matrix.accounts..proxy`.
-- `channels.matrix.allowPrivateNetwork` дозволяє приватні/внутрішні homeserver-и. `proxy` і `allowPrivateNetwork` — незалежні елементи керування.
-- `channels.matrix.defaultAccount` вибирає бажаний обліковий запис у багатьох облікових записах.
-- `channels.matrix.execApprovals`: доставка схвалень exec у стилі Matrix і авторизація схвалювачів.
- - `enabled`: `true`, `false` або `"auto"` (за замовчуванням). В автоматичному режимі схвалення exec активуються, коли схвалювачів можна визначити через `approvers` або `commands.ownerAllowFrom`.
- - `approvers`: ID користувачів Matrix (наприклад `@owner:example.org`), яким дозволено схвалювати запити exec.
- - `agentFilter`: необов'язковий список дозволених ID агентів. Якщо опустити, пересилаються схвалення для всіх агентів.
- - `sessionFilter`: необов'язкові шаблони ключів сесій (підрядок або regex).
- - `target`: куди надсилати запити на схвалення. `"dm"` (за замовчуванням), `"channel"` (кімната походження) або `"both"`.
- - Перевизначення для облікового запису: `channels.matrix.accounts..execApprovals`.
-- `channels.matrix.dm.sessionScope` керує тим, як особисті повідомлення Matrix групуються в сесії: `per-user` (за замовчуванням) ділиться за маршрутизованим співрозмовником, а `per-room` ізолює кожну кімнату особистих повідомлень.
-- Перевірки статусу Matrix і пошук у live directory використовують ту саму політику проксі, що й трафік середовища виконання.
-- Повну конфігурацію Matrix, правила цільового спрямування та приклади налаштування описано в [Matrix](/uk/channels/matrix).
+- Автентифікація токеном використовує `accessToken`; автентифікація паролем — `userId` + `password`.
+- `channels.matrix.proxy` спрямовує HTTP-трафік Matrix через явний HTTP(S) proxy. Іменовані акаунти можуть перевизначати це через `channels.matrix.accounts..proxy`.
+- `channels.matrix.allowPrivateNetwork` дозволяє private/internal homeservers. `proxy` і `allowPrivateNetwork` — незалежні елементи керування.
+- `channels.matrix.defaultAccount` вибирає бажаний акаунт у багатоакаунтних конфігураціях.
+- `channels.matrix.execApprovals`: доставка native exec approval у Matrix і авторизація погоджувачів.
+ - `enabled`: `true`, `false` або `"auto"` (default). У режимі auto exec approvals активуються, коли погоджувачів можна визначити з `approvers` або `commands.ownerAllowFrom`.
+ - `approvers`: ID користувачів Matrix (наприклад `@owner:example.org`), яким дозволено схвалювати exec requests.
+ - `agentFilter`: необов’язковий allowlist ID агентів. Якщо пропустити, approvals пересилаються для всіх агентів.
+ - `sessionFilter`: необов’язкові шаблони ключів сесій (підрядок або regex).
+ - `target`: куди надсилати запити на схвалення. `"dm"` (default), `"channel"` (вихідна кімната) або `"both"`.
+ - Перевизначення на рівні акаунта: `channels.matrix.accounts..execApprovals`.
+- `channels.matrix.dm.sessionScope` керує тим, як DM Matrix групуються в session: `per-user` (default) ділить за маршрутизованим peer, а `per-room` ізолює кожну DM room.
+- Matrix status probes і live directory lookups використовують ту саму політику proxy, що й трафік runtime.
+- Повну конфігурацію Matrix, правила targeting і приклади налаштування задокументовано в [Matrix](/uk/channels/matrix).
### Microsoft Teams
-Microsoft Teams підтримується розширенням і налаштовується в `channels.msteams`.
+Microsoft Teams підтримується extension і налаштовується в `channels.msteams`.
```json5
{
@@ -676,19 +676,19 @@ Microsoft Teams підтримується розширенням і налаш
msteams: {
enabled: true,
configWrites: true,
- // appId, appPassword, tenantId, webhook, політики команд/каналів:
+ // appId, appPassword, tenantId, webhook, політики team/channel:
// див. /channels/msteams
},
},
}
```
-- Тут охоплено основні шляхи ключів: `channels.msteams`, `channels.msteams.configWrites`.
-- Повну конфігурацію Teams (облікові дані, webhook, політика особистих/групових чатів, перевизначення для окремих команд/каналів) описано в [Microsoft Teams](/uk/channels/msteams).
+- Основні шляхи ключів, описані тут: `channels.msteams`, `channels.msteams.configWrites`.
+- Повну конфігурацію Teams (облікові дані, webhook, політика DM/груп, перевизначення для кожної team/channel) задокументовано в [Microsoft Teams](/uk/channels/msteams).
### IRC
-IRC підтримується розширенням і налаштовується в `channels.irc`.
+IRC підтримується extension і налаштовується в `channels.irc`.
```json5
{
@@ -709,13 +709,13 @@ IRC підтримується розширенням і налаштовуєт
}
```
-- Тут охоплено основні шляхи ключів: `channels.irc`, `channels.irc.dmPolicy`, `channels.irc.configWrites`, `channels.irc.nickserv.*`.
-- Необов'язковий `channels.irc.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він відповідає налаштованому `accountId`.
-- Повну конфігурацію IRC-каналу (host/port/TLS/channels/allowlists/обмеження за згадками) описано в [IRC](/uk/channels/irc).
+- Основні шляхи ключів, описані тут: `channels.irc`, `channels.irc.dmPolicy`, `channels.irc.configWrites`, `channels.irc.nickserv.*`.
+- Необов’язковий `channels.irc.defaultAccount` перевизначає вибір акаунта за замовчуванням, якщо він збігається з налаштованим ID акаунта.
+- Повну конфігурацію каналу IRC (host/port/TLS/channels/allowlists/mention gating) задокументовано в [IRC](/uk/channels/irc).
-### Багато облікових записів (усі канали)
+### Багато акаунтів (усі канали)
-Запускайте кілька облікових записів на канал (кожен із власним `accountId`):
+Запускайте кілька акаунтів на канал (кожен зі своїм `accountId`):
```json5
{
@@ -736,28 +736,28 @@ IRC підтримується розширенням і налаштовуєт
}
```
-- `default` використовується, коли `accountId` опущено (CLI + маршрутизація).
-- Токени з env застосовуються лише до облікового запису **default**.
-- Базові налаштування каналу застосовуються до всіх облікових записів, якщо їх не перевизначено окремо.
-- Використовуйте `bindings[].match.accountId`, щоб спрямувати кожен обліковий запис до іншого агента.
-- Якщо ви додаєте не-default обліковий запис через `openclaw channels add` (або онбординг каналу), поки все ще використовуєте конфігурацію верхнього рівня для одного облікового запису, OpenClaw спочатку переносить значення верхнього рівня, прив'язані до одного облікового запису, у карту облікових записів каналу, щоб початковий обліковий запис і далі працював. Для більшості каналів вони переміщуються в `channels..accounts.default`; Matrix натомість може зберегти наявну відповідну іменовану/default-ціль.
-- Наявні прив'язки лише для каналу (без `accountId`) продовжують відповідати обліковому запису за замовчуванням; прив'язки з областю облікового запису залишаються необов'язковими.
-- `openclaw doctor --fix` також виправляє змішані форми, переміщуючи значення верхнього рівня для одного облікового запису в просунутий обліковий запис, вибраний для цього каналу. Для більшості каналів використовується `accounts.default`; Matrix може зберегти наявну відповідну іменовану/default-ціль.
+- `default` використовується, коли `accountId` не вказано (CLI + routing).
+- Токени env застосовуються лише до акаунта **default**.
+- Базові налаштування каналу застосовуються до всіх акаунтів, якщо не перевизначено на рівні акаунта.
+- Використовуйте `bindings[].match.accountId`, щоб маршрутизувати кожен акаунт до іншого агента.
+- Якщо ви додаєте не-default акаунт через `openclaw channels add` (або onboarding каналу), поки ще використовуєте конфігурацію каналу верхнього рівня для одного акаунта, OpenClaw спочатку піднімає акаунт-орієнтовані значення верхнього рівня до мапи акаунтів каналу, щоб початковий акаунт продовжував працювати. Більшість каналів переміщують їх у `channels..accounts.default`; Matrix може зберегти наявну відповідну іменовану/default ціль.
+- Наявні channel-only bindings (без `accountId`) і далі відповідатимуть акаунту default; bindings з прив’язкою до акаунта залишаються необов’язковими.
+- `openclaw doctor --fix` також виправляє змішані форми, переміщуючи акаунт-орієнтовані значення верхнього рівня для одного акаунта в підвищений акаунт, вибраний для цього каналу. Більшість каналів використовують `accounts.default`; Matrix може зберегти наявну відповідну іменовану/default ціль.
-### Інші канали розширень
+### Інші extension channels
-Багато каналів розширень налаштовуються як `channels.` і описані на окремих сторінках каналів (наприклад Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat і Twitch).
-Див. повний індекс каналів: [Channels](/uk/channels).
+Багато extension channels налаштовуються як `channels.` і задокументовані на окремих сторінках каналів (наприклад Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat і Twitch).
+Дивіться повний індекс каналів: [Channels](/uk/channels).
-### Обмеження за згадками в групових чатах
+### Гейтінг згадок у групових чатах
-Для групових повідомлень за замовчуванням **потрібна згадка** (метадані згадки або безпечні regex-шаблони). Застосовується до групових чатів WhatsApp, Telegram, Discord, Google Chat та iMessage.
+Для групових повідомлень за замовчуванням **потрібна згадка** (метадані згадки або безпечні regex-шаблони). Це стосується групових чатів WhatsApp, Telegram, Discord, Google Chat та iMessage.
**Типи згадок:**
-- **Згадки в метаданих**: нативні @-згадки платформи. Ігноруються в режимі self-chat у WhatsApp.
-- **Текстові шаблони**: безпечні regex-шаблони в `agents.list[].groupChat.mentionPatterns`. Недійсні шаблони та небезпечні вкладені повторення ігноруються.
-- Обмеження за згадками застосовується лише тоді, коли виявлення можливе (нативні згадки або принаймні один шаблон).
+- **Metadata mentions**: native @-згадки платформи. Ігноруються в режимі self-chat WhatsApp.
+- **Text patterns**: безпечні regex-шаблони в `agents.list[].groupChat.mentionPatterns`. Невалідні шаблони і небезпечні вкладені повторення ігноруються.
+- Mention gating застосовується лише тоді, коли виявлення можливе (native mentions або принаймні один pattern).
```json5
{
@@ -770,9 +770,9 @@ IRC підтримується розширенням і налаштовуєт
}
```
-`messages.groupChat.historyLimit` задає глобальне значення за замовчуванням. Канали можуть перевизначити його через `channels..historyLimit` (або для окремого облікового запису). Установіть `0`, щоб вимкнути.
+`messages.groupChat.historyLimit` задає глобальне default. Канали можуть перевизначити його через `channels..historyLimit` (або на рівні акаунта). Установіть `0`, щоб вимкнути.
-#### Ліміти історії особистих повідомлень
+#### Ліміти історії DM
```json5
{
@@ -787,13 +787,13 @@ IRC підтримується розширенням і налаштовуєт
}
```
-Порядок визначення: перевизначення для конкретного DM → значення постачальника за замовчуванням → без обмеження (зберігається все).
+Розв’язання: перевизначення для окремого DM → default постачальника → без ліміту (зберігається все).
-Підтримуються: `telegram`, `whatsapp`, `discord`, `slack`, `signal`, `imessage`, `msteams`.
+Підтримується: `telegram`, `whatsapp`, `discord`, `slack`, `signal`, `imessage`, `msteams`.
#### Режим self-chat
-Додайте власний номер до `allowFrom`, щоб увімкнути режим self-chat (ігнорує нативні @-згадки, відповідає лише на текстові шаблони):
+Додайте свій номер до `allowFrom`, щоб увімкнути режим self-chat (ігнорує native @-згадки, відповідає лише на text patterns):
```json5
{
@@ -814,18 +814,18 @@ IRC підтримується розширенням і налаштовуєт
}
```
-### Команди (обробка команд у чаті)
+### Commands (обробка chat command)
```json5
{
commands: {
- native: "auto", // реєструвати нативні команди, коли підтримується
- text: true, // розбирати /commands у повідомленнях чату
- bash: false, // дозволити ! (псевдонім: /bash)
+ native: "auto", // реєструвати native commands, коли підтримується
+ text: true, // розбирати /commands у chat messages
+ bash: false, // дозволити ! (аліас: /bash)
bashForegroundMs: 2000,
config: false, // дозволити /config
debug: false, // дозволити /debug
- restart: false, // дозволити /restart + інструмент перезапуску шлюзу
+ restart: false, // дозволити /restart + інструмент restart gateway
allowFrom: {
"*": ["user1"],
discord: ["user:123"],
@@ -835,18 +835,18 @@ IRC підтримується розширенням і налаштовуєт
}
```
-
+
-- Текстові команди мають бути **окремими** повідомленнями з початковим `/`.
-- `native: "auto"` вмикає нативні команди для Discord/Telegram, залишає Slack вимкненим.
-- Перевизначення для каналу: `channels.discord.commands.native` (bool або `"auto"`). `false` очищає раніше зареєстровані команди.
-- `channels.telegram.customCommands` додає додаткові записи в меню бота Telegram.
-- `bash: true` вмикає `! ` для shell хоста. Потрібно `tools.elevated.enabled` і відправник у `tools.elevated.allowFrom.`.
-- `config: true` вмикає `/config` (читання/запис `openclaw.json`). Для клієнтів шлюзу `chat.send` постійні записи `/config set|unset` також вимагають `operator.admin`; режим лише читання `/config show` залишається доступним для звичайних операторських клієнтів із правом запису.
-- `channels..configWrites` керує мутаціями конфігурації для каналу (за замовчуванням: true).
-- Для каналів із багатьма обліковими записами `channels..accounts..configWrites` також керує записами, які стосуються цього облікового запису (наприклад `/allowlist --config --account ` або `/config set channels..accounts....`).
-- `allowFrom` задається окремо для постачальника. Якщо встановлено, це **єдине** джерело авторизації (списки дозволів/сполучення каналу і `useAccessGroups` ігноруються).
-- `useAccessGroups: false` дозволяє командам обходити політики груп доступу, коли `allowFrom` не встановлено.
+- Text commands мають бути **окремими** повідомленнями з початковим `/`.
+- `native: "auto"` вмикає native commands для Discord/Telegram, залишає Slack вимкненим.
+- Перевизначення для каналу: `channels.discord.commands.native` (bool або `"auto"`). `false` очищує раніше зареєстровані commands.
+- `channels.telegram.customCommands` додає додаткові записи меню бота Telegram.
+- `bash: true` вмикає `! ` для shell хоста. Потребує `tools.elevated.enabled` і щоб відправник був у `tools.elevated.allowFrom.`.
+- `config: true` вмикає `/config` (читає/записує `openclaw.json`). Для клієнтів gateway `chat.send` сталі записи `/config set|unset` також потребують `operator.admin`; read-only `/config show` залишається доступним для звичайних операторських клієнтів із правом запису.
+- `channels..configWrites` контролює мутації конфігурації для кожного каналу (default: true).
+- Для багатоакаунтних каналів `channels..accounts..configWrites` також контролює записи, що націлені на цей акаунт (наприклад `/allowlist --config --account ` або `/config set channels..accounts....`).
+- `allowFrom` задається для кожного постачальника. Якщо встановлено, це **єдине** джерело авторизації (allowlist/pairing каналу та `useAccessGroups` ігноруються).
+- `useAccessGroups: false` дозволяє commands обходити політики access-group, коли `allowFrom` не задано.
@@ -856,7 +856,7 @@ IRC підтримується розширенням і налаштовуєт
### `agents.defaults.workspace`
-За замовчуванням: `~/.openclaw/workspace`.
+Default: `~/.openclaw/workspace`.
```json5
{
@@ -866,7 +866,7 @@ IRC підтримується розширенням і налаштовуєт
### `agents.defaults.repoRoot`
-Необов'язковий корінь репозиторію, який показується в рядку Runtime системного prompt-а. Якщо не встановлено, OpenClaw автоматично визначає його, рухаючись угору від workspace.
+Необов’язковий корінь репозиторію, який показується в рядку Runtime системного prompt. Якщо не задано, OpenClaw визначає його автоматично, підіймаючись вгору від workspace.
```json5
{
@@ -876,7 +876,7 @@ IRC підтримується розширенням і налаштовуєт
### `agents.defaults.skills`
-Необов'язковий список дозволених Skills за замовчуванням для агентів, які не задають
+Необов’язковий default allowlist для Skills для агентів, які не задають
`agents.list[].skills`.
```json5
@@ -885,18 +885,18 @@ IRC підтримується розширенням і налаштовуєт
defaults: { skills: ["github", "weather"] },
list: [
{ id: "writer" }, // успадковує github, weather
- { id: "docs", skills: ["docs-search"] }, // замінює значення за замовчуванням
- { id: "locked-down", skills: [] }, // без Skills
+ { id: "docs", skills: ["docs-search"] }, // замінює defaults
+ { id: "locked-down", skills: [] }, // без skills
],
},
}
```
-- Опустіть `agents.defaults.skills`, щоб за замовчуванням Skills не обмежувалися.
-- Опустіть `agents.list[].skills`, щоб успадкувати значення за замовчуванням.
-- Установіть `agents.list[].skills: []`, щоб не мати Skills.
-- Непорожній список `agents.list[].skills` є фінальним набором для цього агента;
- він не об'єднується зі значеннями за замовчуванням.
+- Пропустіть `agents.defaults.skills`, щоб за замовчуванням Skills не обмежувалися.
+- Пропустіть `agents.list[].skills`, щоб успадкувати defaults.
+- Установіть `agents.list[].skills: []`, щоб не було жодних Skills.
+- Непорожній список `agents.list[].skills` — це фінальний набір для агента; він
+ не зливається з defaults.
### `agents.defaults.skipBootstrap`
@@ -910,7 +910,7 @@ IRC підтримується розширенням і налаштовуєт
### `agents.defaults.bootstrapMaxChars`
-Максимум символів на один bootstrap-файл workspace перед обрізанням. За замовчуванням: `20000`.
+Максимальна кількість символів у кожному bootstrap-файлі workspace перед обрізанням. Default: `20000`.
```json5
{
@@ -920,7 +920,7 @@ IRC підтримується розширенням і налаштовуєт
### `agents.defaults.bootstrapTotalMaxChars`
-Максимальна загальна кількість символів, що вставляються з усіх bootstrap-файлів workspace. За замовчуванням: `150000`.
+Максимальна загальна кількість символів, що інжектуються в усі bootstrap-файли workspace. Default: `150000`.
```json5
{
@@ -930,12 +930,12 @@ IRC підтримується розширенням і налаштовуєт
### `agents.defaults.bootstrapPromptTruncationWarning`
-Керує текстом попередження, видимим агенту, коли bootstrap-контекст обрізається.
-За замовчуванням: `"once"`.
+Керує видимим для агента текстом попередження, коли bootstrap-контекст обрізано.
+Default: `"once"`.
-- `"off"`: ніколи не вставляти текст попередження в системний prompt.
-- `"once"`: вставляти попередження один раз для кожного унікального підпису обрізання (рекомендовано).
-- `"always"`: вставляти попередження на кожному запуску, якщо є обрізання.
+- `"off"`: ніколи не інжектувати текст попередження в system prompt.
+- `"once"`: інжектувати попередження один раз для кожного унікального сигнатурного обрізання (рекомендовано).
+- `"always"`: інжектувати попередження під час кожного запуску, якщо обрізання існує.
```json5
{
@@ -945,10 +945,10 @@ IRC підтримується розширенням і налаштовуєт
### `agents.defaults.imageMaxDimensionPx`
-Максимальний розмір у пікселях для довшої сторони зображення в блоках зображень transcript/tool перед викликами постачальника.
-За замовчуванням: `1200`.
+Максимальний розмір у пікселях для найдовшої сторони зображення в блоках image transcript/tool перед викликами постачальника.
+Default: `1200`.
-Нижчі значення зазвичай зменшують використання vision-токенів і розмір payload запиту для сценаріїв із великою кількістю знімків екрана.
+Нижчі значення зазвичай зменшують використання vision-token і розмір payload запиту для сценаріїв із великою кількістю скриншотів.
Вищі значення зберігають більше візуальних деталей.
```json5
@@ -959,7 +959,7 @@ IRC підтримується розширенням і налаштовуєт
### `agents.defaults.userTimezone`
-Часовий пояс для контексту системного prompt-а (не для часових позначок повідомлень). Якщо не вказано, використовується часовий пояс хоста.
+Часовий пояс для контексту system prompt (не для timestamp повідомлень). Якщо не задано, використовується часовий пояс хоста.
```json5
{
@@ -969,7 +969,7 @@ IRC підтримується розширенням і налаштовуєт
### `agents.defaults.timeFormat`
-Формат часу в системному prompt-і. За замовчуванням: `auto` (налаштування ОС).
+Формат часу в system prompt. Default: `auto` (налаштування ОС).
```json5
{
@@ -1007,7 +1007,7 @@ IRC підтримується розширенням і налаштовуєт
primary: "anthropic/claude-opus-4-6",
fallbacks: ["openai/gpt-5.4-mini"],
},
- params: { cacheRetention: "long" }, // глобальні параметри постачальника за замовчуванням
+ params: { cacheRetention: "long" }, // глобальні default provider params
pdfMaxBytesMb: 10,
pdfMaxPages: 20,
thinkingDefault: "low",
@@ -1022,40 +1022,40 @@ IRC підтримується розширенням і налаштовуєт
}
```
-- `model`: приймає або рядок (`"provider/model"`), або об'єкт (`{ primary, fallbacks }`).
- - Форма рядка задає лише основну модель.
- - Форма об'єкта задає основну модель плюс упорядковані failover-моделі.
-- `imageModel`: приймає або рядок (`"provider/model"`), або об'єкт (`{ primary, fallbacks }`).
- - Використовується шляхом інструмента `image` як конфігурація vision-моделі.
- - Також використовується як резервна маршрутизація, коли вибрана/типова модель не може приймати зображення.
-- `imageGenerationModel`: приймає або рядок (`"provider/model"`), або об'єкт (`{ primary, fallbacks }`).
- - Використовується спільною можливістю генерації зображень і будь-якою майбутньою поверхнею інструмента/plugin, що генерує зображення.
- - Типові значення: `google/gemini-3.1-flash-image-preview` для нативної генерації зображень Gemini, `fal/fal-ai/flux/dev` для fal або `openai/gpt-image-1` для OpenAI Images.
- - Якщо ви вибираєте конкретно постачальника/модель, також налаштуйте відповідну автентифікацію/API-ключ постачальника (наприклад `GEMINI_API_KEY` або `GOOGLE_API_KEY` для `google/*`, `OPENAI_API_KEY` для `openai/*`, `FAL_KEY` для `fal/*`).
- - Якщо опущено, `image_generate` усе одно може вивести типове значення постачальника з автентифікацією. Спочатку він пробує поточного типового постачальника, потім решту зареєстрованих постачальників генерації зображень у порядку provider-id.
-- `videoGenerationModel`: приймає або рядок (`"provider/model"`), або об'єкт (`{ primary, fallbacks }`).
+- `model`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`).
+ - Рядкова форма задає лише primary model.
+ - Форма об’єкта задає primary плюс впорядковані failover models.
+- `imageModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`).
+ - Використовується шляхом інструмента `image` як конфігурація vision model.
+ - Також використовується як резервна маршрутизація, коли вибрана/default model не може приймати image input.
+- `imageGenerationModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`).
+ - Використовується спільною можливістю генерації зображень і будь-якою майбутньою поверхнею tool/plugin, що генерує зображення.
+ - Типові значення: `google/gemini-3.1-flash-image-preview` для native Gemini image generation, `fal/fal-ai/flux/dev` для fal або `openai/gpt-image-1` для OpenAI Images.
+ - Якщо ви вибираєте конкретний provider/model, також налаштуйте відповідну автентифікацію/API key постачальника (наприклад `GEMINI_API_KEY` або `GOOGLE_API_KEY` для `google/*`, `OPENAI_API_KEY` для `openai/*`, `FAL_KEY` для `fal/*`).
+ - Якщо параметр пропущено, `image_generate` все одно може вивести default постачальника з автентифікацією. Спочатку він пробує поточного default provider, а потім решту зареєстрованих постачальників image generation у порядку provider-id.
+- `videoGenerationModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`).
- Використовується спільною можливістю генерації відео та вбудованим інструментом `video_generate`.
- Типові значення: `qwen/wan2.6-t2v`, `qwen/wan2.6-i2v`, `qwen/wan2.6-r2v`, `qwen/wan2.6-r2v-flash` або `qwen/wan2.7-r2v`.
- - Якщо опущено, `video_generate` усе одно може вивести типове значення постачальника з автентифікацією. Спочатку він пробує поточного типового постачальника, потім решту зареєстрованих постачальників генерації відео в порядку provider-id.
- - Якщо ви вибираєте конкретно постачальника/модель, також налаштуйте відповідну автентифікацію/API-ключ постачальника.
- - Зараз комплектний постачальник генерації відео Qwen підтримує до 1 вихідного відео, 1 вхідного зображення, 4 вхідних відео, тривалість 10 секунд і параметри рівня постачальника `size`, `aspectRatio`, `resolution`, `audio` та `watermark`.
-- `pdfModel`: приймає або рядок (`"provider/model"`), або об'єкт (`{ primary, fallbacks }`).
+ - Якщо параметр пропущено, `video_generate` усе одно може вивести default постачальника з автентифікацією. Спочатку він пробує поточного default provider, а потім решту зареєстрованих постачальників генерації відео в порядку provider-id.
+ - Якщо ви вибираєте конкретний provider/model, також налаштуйте відповідну автентифікацію/API key постачальника.
+ - Вбудований постачальник генерації відео Qwen наразі підтримує до 1 вихідного відео, 1 вхідного зображення, 4 вхідних відео, тривалість 10 секунд і параметри постачальника `size`, `aspectRatio`, `resolution`, `audio` та `watermark`.
+- `pdfModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`).
- Використовується інструментом `pdf` для маршрутизації моделі.
- - Якщо опущено, інструмент PDF повертається до `imageModel`, а потім до визначеної моделі сесії/типової моделі.
-- `pdfMaxBytesMb`: ліміт розміру PDF за замовчуванням для інструмента `pdf`, якщо `maxBytesMb` не передано під час виклику.
-- `pdfMaxPages`: максимальна кількість сторінок за замовчуванням, що враховується в режимі резервного витягування інструмента `pdf`.
-- `verboseDefault`: типовий рівень verbose для агентів. Значення: `"off"`, `"on"`, `"full"`. За замовчуванням: `"off"`.
-- `elevatedDefault`: типовий рівень elevated-output для агентів. Значення: `"off"`, `"on"`, `"ask"`, `"full"`. За замовчуванням: `"on"`.
-- `model.primary`: формат `provider/model` (наприклад `openai/gpt-5.4`). Якщо опустити постачальника, OpenClaw спочатку пробує alias, потім унікальний збіг серед налаштованих постачальників для цього exact model id і лише потім повертається до налаштованого типового постачальника (застаріла сумісна поведінка, тож краще явно вказувати `provider/model`). Якщо цей постачальник більше не надає налаштовану типову модель, OpenClaw переходить до першого налаштованого постачальника/моделі замість того, щоб показувати застаріле типове значення від вилученого постачальника.
-- `models`: налаштований каталог моделей і список дозволів для `/model`. Кожен запис може містити `alias` (скорочення) і `params` (специфічні для постачальника, наприклад `temperature`, `maxTokens`, `cacheRetention`, `context1m`).
-- `params`: глобальні параметри постачальника за замовчуванням, які застосовуються до всіх моделей. Задаються в `agents.defaults.params` (наприклад `{ cacheRetention: "long" }`).
-- Порядок злиття `params` (конфігурація): `agents.defaults.params` (глобальна база) перевизначається `agents.defaults.models["provider/model"].params` (для окремої моделі), потім `agents.list[].params` (для відповідного ID агента) перевизначає по ключах. Докладніше див. [Prompt Caching](/uk/reference/prompt-caching).
-- Писальники конфігурації, які змінюють ці поля (наприклад `/models set`, `/models set-image` і команди додавання/видалення резервних моделей), зберігають канонічну форму об'єкта та за можливості зберігають наявні списки fallback.
-- `maxConcurrent`: максимальна кількість паралельних запусків агентів між сесіями (кожна сесія все одно серіалізується). За замовчуванням: 4.
+ - Якщо параметр пропущено, PDF tool повертається до `imageModel`, а потім — до визначеної model session/default.
+- `pdfMaxBytesMb`: default обмеження розміру PDF для інструмента `pdf`, коли `maxBytesMb` не передано під час виклику.
+- `pdfMaxPages`: default максимальна кількість сторінок, які враховуються режимом fallback extraction в інструменті `pdf`.
+- `verboseDefault`: default рівень verbose для агентів. Значення: `"off"`, `"on"`, `"full"`. Default: `"off"`.
+- `elevatedDefault`: default рівень elevated-output для агентів. Значення: `"off"`, `"on"`, `"ask"`, `"full"`. Default: `"on"`.
+- `model.primary`: формат `provider/model` (наприклад `openai/gpt-5.4`). Якщо пропустити provider, OpenClaw спочатку пробує alias, потім — унікальний match серед налаштованих providers для цього exact model id, і лише потім повертається до налаштованого default provider (застаріла сумісна поведінка, тому краще явно вказувати `provider/model`). Якщо цей provider більше не пропонує налаштовану default model, OpenClaw повертається до першого налаштованого provider/model, а не показує застарілий default видаленого provider.
+- `models`: налаштований каталог моделей і allowlist для `/model`. Кожен запис може містити `alias` (скорочення) і `params` (специфічні для provider, наприклад `temperature`, `maxTokens`, `cacheRetention`, `context1m`).
+- `params`: глобальні default provider parameters, застосовувані до всіх моделей. Задається через `agents.defaults.params` (наприклад `{ cacheRetention: "long" }`).
+- Пріоритет злиття `params` (конфігурація): `agents.defaults.params` (глобальна база) перевизначається `agents.defaults.models["provider/model"].params` (для моделі), потім `agents.list[].params` (для відповідного agent id) перевизначає по ключах. Докладніше див. [Prompt Caching](/uk/reference/prompt-caching).
+- Записувачі конфігурації, які змінюють ці поля (наприклад `/models set`, `/models set-image` і команди додавання/видалення fallback), зберігають канонічну форму об’єкта й по можливості зберігають наявні списки fallback.
+- `maxConcurrent`: максимальна кількість паралельних запусків агентів між сесіями (кожна session усе одно серіалізується). Default: 4.
-**Вбудовані скорочені alias-и** (застосовуються лише тоді, коли модель є в `agents.defaults.models`):
+**Вбудовані shorthand aliases** (застосовуються лише тоді, коли модель є в `agents.defaults.models`):
-| Alias | Модель |
+| Псевдонім | Модель |
| ------------------- | -------------------------------------- |
| `opus` | `anthropic/claude-opus-4-6` |
| `sonnet` | `anthropic/claude-sonnet-4-6` |
@@ -1066,14 +1066,14 @@ IRC підтримується розширенням і налаштовуєт
| `gemini-flash` | `google/gemini-3-flash-preview` |
| `gemini-flash-lite` | `google/gemini-3.1-flash-lite-preview` |
-Ваші налаштовані alias-и завжди мають пріоритет над типовими.
+Ваші налаштовані aliases завжди мають пріоритет над defaults.
-Для моделей Z.AI GLM-4.x автоматично вмикається режим thinking, якщо ви не задасте `--thinking off` або самостійно не визначите `agents.defaults.models["zai/"].params.thinking`.
-Моделі Z.AI типово вмикають `tool_stream` для потокової передачі викликів інструментів. Установіть `agents.defaults.models["zai/"].params.tool_stream` у `false`, щоб вимкнути це.
-Для моделей Anthropic Claude 4.6 типовим є `adaptive` thinking, коли явний рівень thinking не встановлено.
+Моделі Z.AI GLM-4.x автоматично вмикають thinking mode, якщо ви не встановите `--thinking off` або самі не задасте `agents.defaults.models["zai/"].params.thinking`.
+Моделі Z.AI за замовчуванням вмикають `tool_stream` для потокової передачі tool call. Щоб вимкнути це, установіть `agents.defaults.models["zai/"].params.tool_stream` у `false`.
+Для моделей Anthropic Claude 4.6 за замовчуванням використовується `adaptive` thinking, коли не задано явний рівень thinking.
-- Підтримка сесій доступна, коли встановлено `sessionArg`.
-- Передача зображень підтримується, коли `imageArg` приймає шляхи до файлів.
+- Sessions підтримуються, коли встановлено `sessionArg`.
+- Пряме передавання image підтримується, коли `imageArg` приймає file paths.
### `agents.defaults.heartbeat`
@@ -1087,12 +1087,12 @@ IRC підтримується розширенням і налаштовуєт
every: "30m", // 0m вимикає
model: "openai/gpt-5.4-mini",
includeReasoning: false,
- lightContext: false, // за замовчуванням: false; true залишає лише HEARTBEAT.md з bootstrap-файлів workspace
- isolatedSession: false, // за замовчуванням: false; true запускає кожен heartbeat у новій сесії (без історії розмови)
+ lightContext: false, // default: false; true зберігає лише HEARTBEAT.md із bootstrap-файлів workspace
+ isolatedSession: false, // default: false; true запускає кожен heartbeat у свіжій session (без історії розмови)
session: "main",
to: "+15555550123",
- directPolicy: "allow", // allow (за замовчуванням) | block
- target: "none", // за замовчуванням: none | варіанти: last | whatsapp | telegram | discord | ...
+ directPolicy: "allow", // allow (default) | block
+ target: "none", // default: none | options: last | whatsapp | telegram | discord | ...
prompt: "Прочитай HEARTBEAT.md, якщо він існує...",
ackMaxChars: 300,
suppressToolErrorWarnings: false,
@@ -1102,13 +1102,13 @@ IRC підтримується розширенням і налаштовуєт
}
```
-- `every`: рядок тривалості (ms/s/m/h). За замовчуванням: `30m` (автентифікація API-ключем) або `1h` (OAuth-автентифікація). Установіть `0m`, щоб вимкнути.
-- `suppressToolErrorWarnings`: якщо true, придушує payload-и попереджень про помилки інструментів під час heartbeat.
-- `directPolicy`: політика прямої/особистої доставки. `allow` (за замовчуванням) дозволяє доставку на пряму ціль. `block` пригнічує доставку на пряму ціль і видає `reason=dm-blocked`.
-- `lightContext`: якщо true, heartbeat використовує полегшений bootstrap-контекст і зберігає лише `HEARTBEAT.md` із bootstrap-файлів workspace.
-- `isolatedSession`: якщо true, кожен heartbeat запускається в новій сесії без попередньої історії розмови. Такий самий шаблон ізоляції, як у cron `sessionTarget: "isolated"`. Зменшує вартість токенів на heartbeat приблизно зі 100K до 2–5K токенів.
-- Для окремого агента: встановіть `agents.list[].heartbeat`. Якщо будь-який агент визначає `heartbeat`, heartbeat запускаються **лише для цих агентів**.
-- Heartbeat виконує повні ходи агента — коротші інтервали спалюють більше токенів.
+- `every`: рядок тривалості (ms/s/m/h). Default: `30m` (автентифікація API key) або `1h` (автентифікація OAuth). Установіть `0m`, щоб вимкнути.
+- `suppressToolErrorWarnings`: якщо true, пригнічує payload попереджень про помилки інструментів під час heartbeat runs.
+- `directPolicy`: політика доставки direct/DM. `allow` (default) дозволяє доставку в direct targets. `block` пригнічує доставку в direct target і генерує `reason=dm-blocked`.
+- `lightContext`: якщо true, heartbeat runs використовують полегшений bootstrap-контекст і зберігають лише `HEARTBEAT.md` із bootstrap-файлів workspace.
+- `isolatedSession`: якщо true, кожен heartbeat run відбувається в новій session без попередньої історії розмов. Той самий шаблон ізоляції, що й у cron `sessionTarget: "isolated"`. Зменшує вартість токенів на heartbeat приблизно зі ~100K до ~2-5K токенів.
+- Для агента: задайте `agents.list[].heartbeat`. Якщо будь-який агент визначає `heartbeat`, heartbeat запускаються **лише для цих агентів**.
+- Heartbeat виконують повні agent turns — коротші інтервали спалюють більше токенів.
### `agents.defaults.compaction`
@@ -1121,15 +1121,15 @@ IRC підтримується розширенням і налаштовуєт
timeoutSeconds: 900,
reserveTokensFloor: 24000,
identifierPolicy: "strict", // strict | off | custom
- identifierInstructions: "Точно зберігай deployment ID, ticket ID і пари host:port.", // використовується, коли identifierPolicy=custom
- postCompactionSections: ["Session Startup", "Red Lines"], // [] вимикає повторне вставлення
- model: "openrouter/anthropic/claude-sonnet-4-6", // необов'язкове перевизначення моделі лише для compaction
- notifyUser: true, // надсилати коротке сповіщення, коли починається compaction (за замовчуванням: false)
+ identifierInstructions: "Точно зберігай deployment IDs, ticket IDs і пари host:port.", // використовується, коли identifierPolicy=custom
+ postCompactionSections: ["Session Startup", "Red Lines"], // [] вимикає повторне інжектування
+ model: "openrouter/anthropic/claude-sonnet-4-6", // необов’язкове перевизначення моделі лише для compaction
+ notifyUser: true, // надсилати коротке повідомлення, коли починається compaction (default: false)
memoryFlush: {
enabled: true,
softThresholdTokens: 6000,
- systemPrompt: "Сесія наближається до compaction. Збережи стійкі спогади зараз.",
- prompt: "Запиши всі довготривалі нотатки в memory/YYYY-MM-DD.md; відповідай точним тихим токеном NO_REPLY, якщо нічого зберігати.",
+ systemPrompt: "Session наближається до compaction. Збережіть сталі спогади зараз.",
+ prompt: "Запиши будь-які тривалі нотатки в memory/YYYY-MM-DD.md; відповідай точним silent token NO_REPLY, якщо зберігати нічого.",
},
},
},
@@ -1137,18 +1137,18 @@ IRC підтримується розширенням і налаштовуєт
}
```
-- `mode`: `default` або `safeguard` (узагальнення довгих історій частинами). Див. [Compaction](/uk/concepts/compaction).
-- `timeoutSeconds`: максимальна кількість секунд для однієї операції compaction, після якої OpenClaw її перериває. За замовчуванням: `900`.
-- `identifierPolicy`: `strict` (за замовчуванням), `off` або `custom`. `strict` додає вбудовану інструкцію зі збереження непрозорих ідентифікаторів під час узагальнення compaction.
-- `identifierInstructions`: необов'язковий власний текст про збереження ідентифікаторів, який використовується, коли `identifierPolicy=custom`.
-- `postCompactionSections`: необов'язкові назви розділів H2/H3 з AGENTS.md, які потрібно повторно вставити після compaction. За замовчуванням `["Session Startup", "Red Lines"]`; установіть `[]`, щоб вимкнути повторне вставлення. Якщо не встановлено або явно встановлено цю типову пару, старіші заголовки `Every Session`/`Safety` теж приймаються як застарілий резервний варіант.
-- `model`: необов'язкове перевизначення `provider/model-id` лише для узагальнення compaction. Використовуйте це, коли основна сесія має залишатися на одній моделі, а compaction summaries — виконуватися на іншій; якщо не встановлено, compaction використовує основну модель сесії.
-- `notifyUser`: коли `true`, надсилає користувачеві коротке повідомлення, коли починається compaction (наприклад, "Compacting context..."). За замовчуванням вимкнено, щоб compaction була безшумною.
-- `memoryFlush`: тихий агентний хід перед auto-compaction для збереження довготривалих спогадів. Пропускається, коли workspace доступний лише для читання.
+- `mode`: `default` або `safeguard` (узагальнення шматками для довгих історій). Див. [Compaction](/uk/concepts/compaction).
+- `timeoutSeconds`: максимальна кількість секунд для однієї операції compaction, після чого OpenClaw її скасовує. Default: `900`.
+- `identifierPolicy`: `strict` (default), `off` або `custom`. `strict` додає вбудовані інструкції щодо збереження непрозорих ідентифікаторів під час summarization у compaction.
+- `identifierInstructions`: необов’язковий власний текст для збереження ідентифікаторів, який використовується, коли `identifierPolicy=custom`.
+- `postCompactionSections`: необов’язкові назви секцій AGENTS.md рівня H2/H3 для повторного інжектування після compaction. Default: `["Session Startup", "Red Lines"]`; установіть `[]`, щоб вимкнути повторне інжектування. Коли не задано або явно встановлено цю пару за замовчуванням, старіші заголовки `Every Session`/`Safety` також приймаються як legacy fallback.
+- `model`: необов’язкове перевизначення `provider/model-id` лише для summarization у compaction. Використовуйте це, коли основна session має залишатися на одній моделі, а summaries compaction повинні виконуватися на іншій; якщо не задано, compaction використовує primary model session.
+- `notifyUser`: якщо `true`, надсилає коротке повідомлення користувачу, коли починається compaction (наприклад, "Compacting context..."). За замовчуванням вимкнено, щоб compaction відбувався безшумно.
+- `memoryFlush`: тихий agentic turn перед auto-compaction для збереження тривалих спогадів. Пропускається, якщо workspace тільки для читання.
### `agents.defaults.contextPruning`
-Обрізає **старі результати інструментів** з контексту в пам'яті перед надсиланням до LLM. **Не** змінює історію сесії на диску.
+Обрізає **старі результати інструментів** з in-memory контексту перед надсиланням до LLM. **Не** змінює історію session на диску.
```json5
{
@@ -1172,25 +1172,25 @@ IRC підтримується розширенням і налаштовуєт
-- `mode: "cache-ttl"` вмикає проходи обрізання.
-- `ttl` контролює, як часто обрізання може запускатися знову (після останнього торкання кешу).
-- Спочатку обрізання м'яко скорочує завеликі результати інструментів, а потім жорстко очищує старіші результати інструментів, якщо потрібно.
+- `mode: "cache-ttl"` вмикає проходи pruning.
+- `ttl` визначає, як часто pruning може запускатися знову (після останнього cache touch).
+- Pruning спочатку soft-trim обрізає завеликі результати інструментів, а потім hard-clear очищає старіші результати інструментів, якщо потрібно.
-**М'яке обрізання** зберігає початок і кінець та вставляє `...` посередині.
+**Soft-trim** зберігає початок + кінець і вставляє `...` посередині.
-**Жорстке очищення** замінює весь результат інструмента на placeholder.
+**Hard-clear** замінює весь результат інструмента на placeholder.
Примітки:
-- Блоки зображень ніколи не обрізаються і не очищуються.
-- Співвідношення базуються на кількості символів (приблизно), а не на точній кількості токенів.
-- Якщо існує менше ніж `keepLastAssistants` повідомлень assistant, обрізання пропускається.
+- Блоки image ніколи не обрізаються/не очищаються.
+- Співвідношення базуються на символах (приблизно), а не на точній кількості токенів.
+- Якщо існує менше ніж `keepLastAssistants` assistant messages, pruning пропускається.
-Докладніше про поведінку див. [Session Pruning](/uk/concepts/session-pruning).
+Докладніше про поведінку див. у [Session Pruning](/uk/concepts/session-pruning).
-### Блокова потокова передача
+### Block streaming
```json5
{
@@ -1206,11 +1206,11 @@ IRC підтримується розширенням і налаштовуєт
}
```
-- Для каналів, відмінних від Telegram, потрібен явний `*.blockStreaming: true`, щоб увімкнути блокові відповіді.
-- Перевизначення для каналу: `channels..blockStreamingCoalesce` (і варіанти для окремих облікових записів). Для Signal/Slack/Discord/Google Chat за замовчуванням `minChars: 1500`.
-- `humanDelay`: випадкова пауза між блоковими відповідями. `natural` = 800–2500 мс. Перевизначення для окремого агента: `agents.list[].humanDelay`.
+- Канали, крім Telegram, потребують явного `*.blockStreaming: true`, щоб увімкнути block replies.
+- Перевизначення на рівні каналу: `channels..blockStreamingCoalesce` (і варіанти для кожного акаунта). Для Signal/Slack/Discord/Google Chat default `minChars: 1500`.
+- `humanDelay`: випадкова пауза між block replies. `natural` = 800–2500ms. Перевизначення для агента: `agents.list[].humanDelay`.
-Див. [Streaming](/uk/concepts/streaming) для деталей поведінки та розбиття на чанки.
+Докладніше про поведінку та chunking див. у [Streaming](/uk/concepts/streaming).
### Індикатори набору
@@ -1225,8 +1225,8 @@ IRC підтримується розширенням і налаштовуєт
}
```
-- За замовчуванням: `instant` для особистих чатів/згадок, `message` для групових чатів без згадки.
-- Перевизначення для сесії: `session.typingMode`, `session.typingIntervalSeconds`.
+- Defaults: `instant` для direct chats/mentions, `message` для групових чатів без згадки.
+- Перевизначення для session: `session.typingMode`, `session.typingIntervalSeconds`.
Див. [Typing Indicators](/uk/concepts/typing-indicators).
@@ -1234,7 +1234,7 @@ IRC підтримується розширенням і налаштовуєт
### `agents.defaults.sandbox`
-Необов'язкове sandbox-ізолювання для вбудованого агента. Повний посібник див. у [Sandboxing](/uk/gateway/sandboxing).
+Необов’язковий sandboxing для вбудованого агента. Повний посібник див. у [Sandboxing](/uk/gateway/sandboxing).
```json5
{
@@ -1280,7 +1280,7 @@ IRC підтримується розширенням і налаштовуєт
identityFile: "~/.ssh/id_ed25519",
certificateFile: "~/.ssh/id_ed25519-cert.pub",
knownHostsFile: "~/.ssh/known_hosts",
- // SecretRef / вбудований вміст також підтримуються:
+ // Також підтримуються SecretRefs / вбудований вміст:
// identityData: { source: "env", provider: "default", id: "SSH_IDENTITY" },
// certificateData: { source: "env", provider: "default", id: "SSH_CERTIFICATE" },
// knownHostsData: { source: "env", provider: "default", id: "SSH_KNOWN_HOSTS" },
@@ -1333,48 +1333,48 @@ IRC підтримується розширенням і налаштовуєт
**Backend:**
-- `docker`: локальне середовище виконання Docker (за замовчуванням)
-- `ssh`: універсальне віддалене середовище виконання на основі SSH
-- `openshell`: середовище виконання OpenShell
+- `docker`: локальний runtime Docker (default)
+- `ssh`: універсальний remote runtime на основі SSH
+- `openshell`: runtime OpenShell
-Коли вибрано `backend: "openshell"`, налаштування, специфічні для середовища виконання, переміщуються до
+Коли вибрано `backend: "openshell"`, налаштування, специфічні для runtime, переносяться до
`plugins.entries.openshell.config`.
-**Конфігурація SSH backend:**
+**Конфігурація backend SSH:**
-- `target`: SSH-ціль у форматі `user@host[:port]`
-- `command`: команда SSH-клієнта (за замовчуванням: `ssh`)
-- `workspaceRoot`: абсолютний віддалений корінь, який використовується для workspace у межах scope
-- `identityFile` / `certificateFile` / `knownHostsFile`: наявні локальні файли, що передаються в OpenSSH
-- `identityData` / `certificateData` / `knownHostsData`: вбудований вміст або SecretRef, який OpenClaw матеріалізує в тимчасові файли під час виконання
-- `strictHostKeyChecking` / `updateHostKeys`: параметри політики ключів хоста OpenSSH
+- `target`: ціль SSH у форматі `user@host[:port]`
+- `command`: команда SSH client (default: `ssh`)
+- `workspaceRoot`: абсолютний remote root, що використовується для workspace кожного scope
+- `identityFile` / `certificateFile` / `knownHostsFile`: наявні локальні файли, передані до OpenSSH
+- `identityData` / `certificateData` / `knownHostsData`: вбудований вміст або SecretRefs, які OpenClaw матеріалізує у тимчасові файли під час runtime
+- `strictHostKeyChecking` / `updateHostKeys`: параметри політики host-key OpenSSH
**Пріоритет автентифікації SSH:**
- `identityData` має пріоритет над `identityFile`
- `certificateData` має пріоритет над `certificateFile`
- `knownHostsData` має пріоритет над `knownHostsFile`
-- Значення `*Data`, підкріплені SecretRef, визначаються з активного знімка secrets runtime перед початком sandbox-сесії
+- Значення `*Data`, що використовують SecretRef, розв’язуються з активного знімка secrets runtime до старту sandbox session
-**Поведінка SSH backend:**
+**Поведінка backend SSH:**
-- один раз ініціалізує віддалений workspace після створення або повторного створення
-- потім зберігає віддалений SSH-workspace як канонічний
-- маршрутизує `exec`, файлові інструменти та шляхи медіа через SSH
-- не синхронізує автоматично віддалені зміни назад на хост
-- не підтримує браузерні контейнери sandbox
+- засіває remote workspace один раз після create або recreate
+- після цього зберігає remote SSH workspace як канонічний
+- маршрутизує `exec`, file tools і media paths через SSH
+- не синхронізує remote changes назад на хост автоматично
+- не підтримує sandbox browser containers
**Доступ до workspace:**
-- `none`: workspace sandbox у межах scope під `~/.openclaw/sandboxes`
-- `ro`: workspace sandbox у `/workspace`, workspace агента монтується лише для читання в `/agent`
-- `rw`: workspace агента монтується для читання/запису в `/workspace`
+- `none`: workspace sandbox для кожного scope у `~/.openclaw/sandboxes`
+- `ro`: workspace sandbox у `/workspace`, workspace агента монтується read-only у `/agent`
+- `rw`: workspace агента монтується read/write у `/workspace`
**Scope:**
-- `session`: контейнер + workspace для кожної сесії
-- `agent`: один контейнер + workspace на агента (за замовчуванням)
-- `shared`: спільний контейнер і workspace (без ізоляції між сесіями)
+- `session`: окремий container + workspace для кожної session
+- `agent`: один container + workspace на агента (default)
+- `shared`: спільний container і workspace (без ізоляції між session)
**Конфігурація plugin OpenShell:**
@@ -1389,10 +1389,10 @@ IRC підтримується розширенням і налаштовуєт
from: "openclaw",
remoteWorkspaceDir: "/sandbox",
remoteAgentWorkspaceDir: "/agent",
- gateway: "lab", // необов'язково
- gatewayEndpoint: "https://lab.example", // необов'язково
- policy: "strict", // необов'язковий ID політики OpenShell
- providers: ["openai"], // необов'язково
+ gateway: "lab", // необов’язково
+ gatewayEndpoint: "https://lab.example", // необов’язково
+ policy: "strict", // необов’язковий id політики OpenShell
+ providers: ["openai"], // необов’язково
autoProviders: true,
timeoutSeconds: 120,
},
@@ -1404,30 +1404,30 @@ IRC підтримується розширенням і налаштовуєт
**Режим OpenShell:**
-- `mirror`: перед `exec` ініціалізувати віддалене середовище з локального, після `exec` синхронізувати назад; локальний workspace залишається канонічним
-- `remote`: один раз ініціалізувати віддалене середовище при створенні sandbox, потім зберігати віддалений workspace як канонічний
+- `mirror`: засіяти remote із local перед exec, синхронізувати назад після exec; local workspace залишається канонічним
+- `remote`: засіяти remote один раз під час створення sandbox, після цього remote workspace залишається канонічним
-У режимі `remote` редагування на локальному хості, виконані поза OpenClaw, не синхронізуються в sandbox автоматично після кроку ініціалізації.
-Транспортом є SSH до sandbox OpenShell, але plugin володіє життєвим циклом sandbox і необов'язковою синхронізацією mirror.
+У режимі `remote` зміни на локальному хості, зроблені поза OpenClaw, не синхронізуються в sandbox автоматично після кроку seed.
+Транспортом є SSH у sandbox OpenShell, але plugin володіє життєвим циклом sandbox і необов’язковою mirror sync.
-**`setupCommand`** запускається один раз після створення контейнера (через `sh -lc`). Потрібні мережевий вихід, записуваний root і root-користувач.
+**`setupCommand`** виконується один раз після створення container (через `sh -lc`). Потребує network egress, writable root, root user.
-**Для контейнерів типовим є `network: "none"`** — установіть `"bridge"` (або власну bridge-мережу), якщо агенту потрібен вихід назовні.
-`"host"` блокується. `"container:"` блокується за замовчуванням, якщо ви явно не встановите
+**Для containers за замовчуванням використовується `network: "none"`** — установіть `"bridge"` (або власну bridge network), якщо агенту потрібен вихідний доступ.
+`"host"` заблоковано. `"container:"` також заблоковано за замовчуванням, якщо ви явно не встановите
`sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true` (break-glass).
-**Вхідні вкладення** тимчасово розміщуються в `media/inbound/*` активного workspace.
+**Вхідні вкладення** розміщуються у `media/inbound/*` в активному workspace.
-**`docker.binds`** монтує додаткові каталоги хоста; глобальні binds і binds для окремого агента об'єднуються.
+**`docker.binds`** монтує додаткові каталоги хоста; глобальні binds і binds для конкретного агента зливаються.
-**Браузер у sandbox** (`sandbox.browser.enabled`): Chromium + CDP у контейнері. URL noVNC вставляється в системний prompt. Не потребує `browser.enabled` у `openclaw.json`.
-Доступ спостерігача до noVNC за замовчуванням використовує автентифікацію VNC, і OpenClaw видає короткоживучий token URL (замість того, щоб розкривати пароль у спільному URL).
+**Sandboxed browser** (`sandbox.browser.enabled`): Chromium + CDP у container. URL noVNC інжектується в system prompt. Не потребує `browser.enabled` у `openclaw.json`.
+Доступ спостерігача noVNC за замовчуванням використовує VNC auth, а OpenClaw видає short-lived token URL (замість того щоб показувати пароль у спільному URL).
-- `allowHostControl: false` (за замовчуванням) блокує сесіям у sandbox націлювання на браузер хоста.
-- `network` за замовчуванням дорівнює `openclaw-sandbox-browser` (виділена bridge-мережа). Установлюйте `bridge` лише тоді, коли вам явно потрібне глобальне bridge-з'єднання.
-- `cdpSourceRange` за бажанням обмежує вхід CDP на межі контейнера до діапазону CIDR (наприклад `172.21.0.1/32`).
-- `sandbox.browser.binds` монтує додаткові каталоги хоста лише в контейнер браузера sandbox. Якщо встановлено (включно з `[]`), замінює `docker.binds` для контейнера браузера.
-- Значення запуску за замовчуванням визначено в `scripts/sandbox-browser-entrypoint.sh` і налаштовано для контейнерних хостів:
+- `allowHostControl: false` (default) блокує націлювання sandboxed sessions на browser хоста.
+- `network` за замовчуванням — `openclaw-sandbox-browser` (виділена bridge network). Установлюйте `bridge` лише тоді, коли вам справді потрібна глобальна bridge connectivity.
+- `cdpSourceRange` необов’язково обмежує вхідний CDP на межі container до діапазону CIDR (наприклад `172.21.0.1/32`).
+- `sandbox.browser.binds` монтує додаткові каталоги хоста лише в container sandbox browser. Якщо встановлено (включно з `[]`), це замінює `docker.binds` для browser container.
+- Значення запуску за замовчуванням визначено в `scripts/sandbox-browser-entrypoint.sh` і налаштовано для container hosts:
- `--remote-debugging-address=127.0.0.1`
- `--remote-debugging-port=`
- `--user-data-dir=${HOME}/.chrome`
@@ -1444,31 +1444,31 @@ IRC підтримується розширенням і налаштовуєт
- `--renderer-process-limit=2`
- `--no-zygote`
- `--metrics-recording-only`
- - `--disable-extensions` (типово увімкнено)
+ - `--disable-extensions` (увімкнено за замовчуванням)
- `--disable-3d-apis`, `--disable-software-rasterizer` і `--disable-gpu`
- типово увімкнено, і їх можна вимкнути через
+ увімкнені за замовчуванням і можуть бути вимкнені через
`OPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0`, якщо для WebGL/3D це потрібно.
- - `OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0` знову вмикає розширення, якщо ваш робочий процес
- залежить від них.
+ - `OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0` знову вмикає extensions, якщо від них
+ залежить ваш workflow.
- `--renderer-process-limit=2` можна змінити через
`OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=`; установіть `0`, щоб використовувати
- типове обмеження процесів Chromium.
+ стандартне обмеження процесів Chromium.
- плюс `--no-sandbox` і `--disable-setuid-sandbox`, коли увімкнено `noSandbox`.
- - Значення за замовчуванням є базовими для образу контейнера; використовуйте власний образ браузера з власним
- entrypoint, щоб змінити типові значення контейнера.
+ - Defaults — це базовий рівень container image; щоб змінити defaults container,
+ використовуйте власний browser image із власним entrypoint.
-Browser sandboxing і `sandbox.docker.binds` зараз підтримуються лише для Docker.
+Browser sandboxing і `sandbox.docker.binds` наразі працюють лише з Docker.
-Збірка образів:
+Створення images:
```bash
-scripts/sandbox-setup.sh # основний образ sandbox
-scripts/sandbox-browser-setup.sh # необов'язковий образ браузера
+scripts/sandbox-setup.sh # основний sandbox image
+scripts/sandbox-browser-setup.sh # необов’язковий browser image
```
-### `agents.list` (перевизначення для окремого агента)
+### `agents.list` (перевизначення для агента)
```json5
{
@@ -1477,18 +1477,18 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр
{
id: "main",
default: true,
- name: "Головний агент",
+ name: "Main Agent",
workspace: "~/.openclaw/workspace",
agentDir: "~/.openclaw/agents/main/agent",
model: "anthropic/claude-opus-4-6", // або { primary, fallbacks }
- thinkingDefault: "high", // перевизначення рівня thinking для окремого агента
- reasoningDefault: "on", // перевизначення видимості reasoning для окремого агента
- fastModeDefault: false, // перевизначення fast mode для окремого агента
+ thinkingDefault: "high", // перевизначення рівня thinking для агента
+ reasoningDefault: "on", // перевизначення видимості reasoning для агента
+ fastModeDefault: false, // перевизначення fast mode для агента
params: { cacheRetention: "none" }, // перевизначає matching defaults.models params за ключем
- skills: ["docs-search"], // замінює agents.defaults.skills, якщо задано
+ skills: ["docs-search"], // замінює agents.defaults.skills, якщо встановлено
identity: {
name: "Samantha",
- theme: "корисливий лінивець",
+ theme: "helpful sloth",
emoji: "🦥",
avatar: "avatars/samantha.png",
},
@@ -1516,24 +1516,24 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр
}
```
-- `id`: стабільний ID агента (обов'язково).
-- `default`: якщо встановлено в кількох місцях, перший перемагає (логуються попередження). Якщо не встановлено ніде, типовим стає перший запис у списку.
-- `model`: форма рядка перевизначає лише `primary`; форма об'єкта `{ primary, fallbacks }` перевизначає обидва (`[]` вимикає глобальні fallback-и). Cron jobs, які перевизначають лише `primary`, усе одно успадковують типові fallback-и, якщо ви не встановите `fallbacks: []`.
-- `params`: параметри потоку для окремого агента, злиті поверх вибраного запису моделі в `agents.defaults.models`. Використовуйте це для перевизначень, специфічних для агента, як-от `cacheRetention`, `temperature` або `maxTokens`, не дублюючи весь каталог моделей.
-- `skills`: необов'язковий список дозволених Skills для окремого агента. Якщо опущено, агент успадковує `agents.defaults.skills`, якщо його встановлено; явний список замінює типові значення замість злиття, а `[]` означає відсутність Skills.
-- `thinkingDefault`: необов'язковий типовий рівень thinking для окремого агента (`off | minimal | low | medium | high | xhigh | adaptive`). Перевизначає `agents.defaults.thinkingDefault` для цього агента, якщо не встановлено перевизначення для повідомлення або сесії.
-- `reasoningDefault`: необов'язкове типове значення видимості reasoning для окремого агента (`on | off | stream`). Застосовується, якщо не встановлено перевизначення reasoning для повідомлення або сесії.
-- `fastModeDefault`: необов'язкове типове значення fast mode для окремого агента (`true | false`). Застосовується, якщо не встановлено перевизначення fast-mode для повідомлення або сесії.
-- `runtime`: необов'язковий дескриптор середовища виконання для окремого агента. Використовуйте `type: "acp"` із типовими значеннями `runtime.acp` (`agent`, `backend`, `mode`, `cwd`), коли агент має за замовчуванням працювати в ACP harness sessions.
-- `identity.avatar`: шлях відносно workspace, URL `http(s)` або URI `data:`.
-- `identity` виводить типові значення: `ackReaction` з `emoji`, `mentionPatterns` з `name`/`emoji`.
-- `subagents.allowAgents`: список дозволених ID агентів для `sessions_spawn` (`["*"]` = будь-який; за замовчуванням: лише той самий агент).
-- Захист успадкування sandbox: якщо сесія ініціатора працює в sandbox, `sessions_spawn` відхиляє цілі, які запускалися б без sandbox.
-- `subagents.requireAgentId`: якщо true, блокує виклики `sessions_spawn`, які не містять `agentId` (вимагає явного вибору профілю; за замовчуванням: false).
+- `id`: стабільний id агента (обов’язково).
+- `default`: коли їх кілька, перший має пріоритет (логуються warnings). Якщо не вказано жодного, default — перший елемент списку.
+- `model`: рядкова форма перевизначає лише `primary`; форма об’єкта `{ primary, fallbacks }` перевизначає обидва (`[]` вимикає глобальні fallbacks). Cron jobs, які перевизначають лише `primary`, усе одно успадковують default fallbacks, якщо ви не встановите `fallbacks: []`.
+- `params`: stream params для агента, що зливаються поверх вибраного запису моделі в `agents.defaults.models`. Використовуйте це для специфічних перевизначень агента, таких як `cacheRetention`, `temperature` або `maxTokens`, без дублювання всього каталогу моделей.
+- `skills`: необов’язковий allowlist Skills для агента. Якщо не задано, агент успадковує `agents.defaults.skills`, якщо вони задані; явний список замінює defaults замість злиття, а `[]` означає відсутність Skills.
+- `thinkingDefault`: необов’язковий default рівень thinking для агента (`off | minimal | low | medium | high | xhigh | adaptive`). Перевизначає `agents.defaults.thinkingDefault` для цього агента, якщо не встановлено перевизначення для повідомлення або session.
+- `reasoningDefault`: необов’язкове default перевизначення видимості reasoning для агента (`on | off | stream`). Застосовується, коли не встановлено перевизначення reasoning для повідомлення або session.
+- `fastModeDefault`: необов’язкове default перевизначення fast mode (`true | false`). Застосовується, коли не встановлено перевизначення fast mode для повідомлення або session.
+- `runtime`: необов’язковий дескриптор runtime для агента. Використовуйте `type: "acp"` з defaults `runtime.acp` (`agent`, `backend`, `mode`, `cwd`), коли агент повинен за замовчуванням використовувати sessions harness ACP.
+- `identity.avatar`: шлях відносно workspace, `http(s)` URL або `data:` URI.
+- `identity` виводить defaults: `ackReaction` з `emoji`, `mentionPatterns` з `name`/`emoji`.
+- `subagents.allowAgents`: allowlist id агентів для `sessions_spawn` (`["*"]` = будь-який; default: лише той самий агент).
+- Sandbox inheritance guard: якщо session запитувача працює в sandbox, `sessions_spawn` відхиляє цілі, які працювали б без sandbox.
+- `subagents.requireAgentId`: якщо true, блокує виклики `sessions_spawn`, у яких пропущено `agentId` (примушує до явного вибору профілю; default: false).
---
-## Маршрутизація між агентами
+## Маршрутизація кількох агентів
Запускайте кілька ізольованих агентів в одному Gateway. Див. [Multi-Agent](/uk/concepts/multi-agent).
@@ -1552,29 +1552,29 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр
}
```
-### Поля збігу прив'язок
+### Поля match для binding
-- `type` (необов'язково): `route` для звичайної маршрутизації (відсутній `type` за замовчуванням означає route), `acp` для постійних ACP-прив'язок розмов.
-- `match.channel` (обов'язково)
-- `match.accountId` (необов'язково; `*` = будь-який обліковий запис; якщо опущено = обліковий запис за замовчуванням)
-- `match.peer` (необов'язково; `{ kind: direct|group|channel, id }`)
-- `match.guildId` / `match.teamId` (необов'язково; залежить від каналу)
-- `acp` (необов'язково; лише для `type: "acp"`): `{ mode, label, cwd, backend }`
+- `type` (необов’язково): `route` для звичайної маршрутизації (відсутній type означає route), `acp` для сталих ACP bindings розмов.
+- `match.channel` (обов’язково)
+- `match.accountId` (необов’язково; `*` = будь-який акаунт; пропущено = default акаунт)
+- `match.peer` (необов’язково; `{ kind: direct|group|channel, id }`)
+- `match.guildId` / `match.teamId` (необов’язково; залежить від каналу)
+- `acp` (необов’язково; лише для `type: "acp"`): `{ mode, label, cwd, backend }`
-**Детермінований порядок збігів:**
+**Детермінований порядок match:**
1. `match.peer`
2. `match.guildId`
3. `match.teamId`
4. `match.accountId` (точний, без peer/guild/team)
-5. `match.accountId: "*"` (у межах каналу)
+5. `match.accountId: "*"` (на весь канал)
6. Агент за замовчуванням
-У межах кожного рівня перемагає перший відповідний запис у `bindings`.
+У межах кожного рівня перший відповідний запис `bindings` має пріоритет.
-Для записів `type: "acp"` OpenClaw визначає відповідність за точною ідентичністю розмови (`match.channel` + account + `match.peer.id`) і не використовує наведений вище порядок рівнів route-прив'язок.
+Для записів `type: "acp"` OpenClaw визначає відповідність за точною ідентичністю розмови (`match.channel` + акаунт + `match.peer.id`) і не використовує порядок рівнів route binding, описаний вище.
-### Профілі доступу для окремих агентів
+### Профілі доступу для кожного агента
@@ -1594,7 +1594,7 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр
-
+
```json5
{
@@ -1669,7 +1669,7 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр
-Докладніше про пріоритети див. [Multi-Agent Sandbox & Tools](/uk/tools/multi-agent-sandbox-tools).
+Докладніше про пріоритети див. у [Multi-Agent Sandbox & Tools](/uk/tools/multi-agent-sandbox-tools).
---
@@ -1695,22 +1695,22 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр
},
resetTriggers: ["/new", "/reset"],
store: "~/.openclaw/agents/{agentId}/sessions/sessions.json",
- parentForkMaxTokens: 100000, // пропустити форк батьківського потоку вище цього ліміту токенів (0 вимикає)
+ parentForkMaxTokens: 100000, // пропускати fork батьківського thread вище за цю кількість токенів (0 вимикає)
maintenance: {
mode: "warn", // warn | enforce
pruneAfter: "30d",
maxEntries: 500,
rotateBytes: "10mb",
resetArchiveRetention: "30d", // тривалість або false
- maxDiskBytes: "500mb", // необов'язковий жорсткий бюджет
- highWaterBytes: "400mb", // необов'язкова ціль очищення
+ maxDiskBytes: "500mb", // необов’язковий жорсткий бюджет
+ highWaterBytes: "400mb", // необов’язкова ціль очищення
},
threadBindings: {
enabled: true,
- idleHours: 24, // типове авто-скасування фокусу через неактивність у годинах (`0` вимикає)
- maxAgeHours: 0, // типовий жорсткий максимальний вік у годинах (`0` вимикає)
+ idleHours: 24, // default auto-unfocus через неактивність у годинах (`0` вимикає)
+ maxAgeHours: 0, // default жорсткий максимум віку в годинах (`0` вимикає)
},
- mainKey: "main", // застаріле (runtime завжди використовує "main")
+ mainKey: "main", // legacy (runtime завжди використовує "main")
agentToAgent: { maxPingPongTurns: 5 },
sendPolicy: {
rules: [{ action: "deny", match: { channel: "discord", chatType: "group" } }],
@@ -1722,35 +1722,35 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр
-- **`scope`**: базова стратегія групування сесій для контекстів групових чатів.
- - `per-sender` (за замовчуванням): кожен відправник отримує ізольовану сесію в межах контексту каналу.
- - `global`: усі учасники в контексті каналу ділять одну спільну сесію (використовуйте лише тоді, коли спільний контекст дійсно потрібний).
-- **`dmScope`**: як групуються особисті повідомлення.
- - `main`: усі особисті повідомлення ділять основну сесію.
- - `per-peer`: ізоляція за ID відправника між каналами.
- - `per-channel-peer`: ізоляція за каналом + відправником (рекомендовано для inbox із багатьма користувачами).
- - `per-account-channel-peer`: ізоляція за обліковим записом + каналом + відправником (рекомендовано для багатьох облікових записів).
-- **`identityLinks`**: зіставлення канонічних ID із peer-ами з префіксом постачальника для спільного використання сесій між каналами.
-- **`reset`**: основна політика скидання. `daily` скидає о `atHour` за місцевим часом; `idle` скидає після `idleMinutes`. Якщо налаштовано обидва, спрацьовує те, що закінчиться раніше.
-- **`resetByType`**: перевизначення за типом (`direct`, `group`, `thread`). Застарілий `dm` приймається як alias для `direct`.
-- **`parentForkMaxTokens`**: максимальне `totalTokens` батьківської сесії, дозволене при створенні сесії форкнутого потоку (за замовчуванням `100000`).
- - Якщо батьківське `totalTokens` перевищує це значення, OpenClaw починає нову сесію потоку замість успадкування історії транскрипту батьківської сесії.
- - Установіть `0`, щоб вимкнути цей захист і завжди дозволяти форк батьківської сесії.
-- **`mainKey`**: застаріле поле. Runtime тепер завжди використовує `"main"` для основного кошика особистих чатів.
-- **`agentToAgent.maxPingPongTurns`**: максимальна кількість відповідей назад між агентами під час обміну агент-до-агента (ціле число, діапазон: `0`–`5`). `0` вимикає ланцюжки ping-pong.
-- **`sendPolicy`**: збіг за `channel`, `chatType` (`direct|group|channel`, із застарілим alias `dm`), `keyPrefix` або `rawKeyPrefix`. Перший deny перемагає.
-- **`maintenance`**: очищення сховища сесій + елементи керування збереженням.
- - `mode`: `warn` лише видає попередження; `enforce` застосовує очищення.
- - `pruneAfter`: віковий поріг для застарілих записів (за замовчуванням `30d`).
- - `maxEntries`: максимальна кількість записів у `sessions.json` (за замовчуванням `500`).
- - `rotateBytes`: ротація `sessions.json`, коли його розмір перевищує це значення (за замовчуванням `10mb`).
- - `resetArchiveRetention`: час збереження архівів транскриптів `*.reset.`. За замовчуванням дорівнює `pruneAfter`; установіть `false`, щоб вимкнути.
- - `maxDiskBytes`: необов'язковий бюджет диска для каталогу сесій. У режимі `warn` лише логує попередження; у режимі `enforce` спочатку видаляє найстаріші артефакти/сесії.
- - `highWaterBytes`: необов'язкова ціль після очищення за бюджетом. За замовчуванням `80%` від `maxDiskBytes`.
-- **`threadBindings`**: глобальні типові значення для функцій сесій, прив'язаних до потоків.
- - `enabled`: головний перемикач за замовчуванням (постачальники можуть перевизначати; Discord використовує `channels.discord.threadBindings.enabled`)
- - `idleHours`: типове авто-скасування фокусу через неактивність у годинах (`0` вимикає; постачальники можуть перевизначати)
- - `maxAgeHours`: типовий жорсткий максимальний вік у годинах (`0` вимикає; постачальники можуть перевизначати)
+- **`scope`**: базова стратегія групування session для контекстів group chat.
+ - `per-sender` (default): кожен відправник отримує ізольовану session в межах контексту каналу.
+ - `global`: усі учасники в контексті каналу спільно використовують одну session (використовуйте лише коли справді потрібен спільний контекст).
+- **`dmScope`**: як групуються DM.
+ - `main`: усі DM спільно використовують main session.
+ - `per-peer`: ізоляція за sender id між каналами.
+ - `per-channel-peer`: ізоляція за каналом + sender (рекомендовано для inbox із кількома користувачами).
+ - `per-account-channel-peer`: ізоляція за акаунтом + каналом + sender (рекомендовано для багатоакаунтних конфігурацій).
+- **`identityLinks`**: мапа канонічних id до peer із префіксами постачальника для спільного використання session між каналами.
+- **`reset`**: основна політика reset. `daily` скидає о `atHour` за локальним часом; `idle` скидає після `idleMinutes`. Якщо налаштовано обидва, спрацьовує той, у якого раніше настає строк.
+- **`resetByType`**: перевизначення для типів (`direct`, `group`, `thread`). Legacy `dm` приймається як alias для `direct`.
+- **`parentForkMaxTokens`**: максимальна кількість `totalTokens` у батьківській session, дозволена під час створення forked thread session (default `100000`).
+ - Якщо `totalTokens` батьківської session перевищує це значення, OpenClaw починає нову thread session замість успадкування історії transcript батьківської session.
+ - Установіть `0`, щоб вимкнути цей захист і завжди дозволяти parent forking.
+- **`mainKey`**: legacy field. Runtime тепер завжди використовує `"main"` для основного bucket direct-chat.
+- **`agentToAgent.maxPingPongTurns`**: максимальна кількість reply-back turns між агентами під час обміну agent-to-agent (ціле число, діапазон: `0`–`5`). `0` вимикає ping-pong chaining.
+- **`sendPolicy`**: match за `channel`, `chatType` (`direct|group|channel`, з legacy alias `dm`), `keyPrefix` або `rawKeyPrefix`. Перший deny має пріоритет.
+- **`maintenance`**: очищення сховища session + керування зберіганням.
+ - `mode`: `warn` лише показує попередження; `enforce` застосовує очищення.
+ - `pruneAfter`: поріг віку для застарілих записів (default `30d`).
+ - `maxEntries`: максимальна кількість записів у `sessions.json` (default `500`).
+ - `rotateBytes`: ротує `sessions.json`, коли його розмір перевищує це значення (default `10mb`).
+ - `resetArchiveRetention`: зберігання для архівів transcript `*.reset.`. За замовчуванням дорівнює `pruneAfter`; установіть `false`, щоб вимкнути.
+ - `maxDiskBytes`: необов’язковий дисковий бюджет для каталогу sessions. У режимі `warn` логуються попередження; у режимі `enforce` спочатку видаляються найстаріші artifacts/sessions.
+ - `highWaterBytes`: необов’язкова ціль після очищення бюджету. За замовчуванням `80%` від `maxDiskBytes`.
+- **`threadBindings`**: глобальні defaults для функцій session, прив’язаних до thread.
+ - `enabled`: основний default-перемикач (providers можуть перевизначати; Discord використовує `channels.discord.threadBindings.enabled`)
+ - `idleHours`: default auto-unfocus через неактивність у годинах (`0` вимикає; providers можуть перевизначати)
+ - `maxAgeHours`: default жорсткий максимум віку в годинах (`0` вимикає; providers можуть перевизначати)
@@ -1788,36 +1788,36 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр
### Префікс відповіді
-Перевизначення для каналу/облікового запису: `channels..responsePrefix`, `channels..accounts..responsePrefix`.
+Перевизначення для каналу/акаунта: `channels..responsePrefix`, `channels..accounts..responsePrefix`.
-Порядок визначення (найспецифічніше перемагає): account → channel → global. `""` вимикає та зупиняє каскад. `"auto"` виводиться як `[{identity.name}]`.
+Розв’язання (найбільш специфічне перемагає): акаунт → канал → глобальний. `""` вимикає й зупиняє cascade. `"auto"` виводить `[{identity.name}]`.
**Змінні шаблону:**
-| Змінна | Опис | Приклад |
-| ---------------- | ----------------------- | --------------------------- |
-| `{model}` | Коротка назва моделі | `claude-opus-4-6` |
-| `{modelFull}` | Повний ідентифікатор моделі | `anthropic/claude-opus-4-6` |
-| `{provider}` | Назва постачальника | `anthropic` |
-| `{thinkingLevel}`| Поточний рівень thinking | `high`, `low`, `off` |
-| `{identity.name}`| Ім'я identity агента | (те саме, що `"auto"`) |
+| Змінна | Опис | Приклад |
+| ----------------- | ---------------------- | --------------------------- |
+| `{model}` | Коротка назва моделі | `claude-opus-4-6` |
+| `{modelFull}` | Повний ідентифікатор моделі | `anthropic/claude-opus-4-6` |
+| `{provider}` | Назва постачальника | `anthropic` |
+| `{thinkingLevel}` | Поточний рівень thinking | `high`, `low`, `off` |
+| `{identity.name}` | Ім’я ідентичності агента | (те саме, що `"auto"`) |
Змінні нечутливі до регістру. `{think}` — alias для `{thinkingLevel}`.
### Ack reaction
-- За замовчуванням дорівнює `identity.emoji` активного агента, інакше `"👀"`. Установіть `""`, щоб вимкнути.
+- За замовчуванням використовується `identity.emoji` активного агента, інакше `"👀"`. Установіть `""`, щоб вимкнути.
- Перевизначення для каналу: `channels..ackReaction`, `channels..accounts..ackReaction`.
-- Порядок визначення: account → channel → `messages.ackReaction` → fallback від identity.
-- Scope: `group-mentions` (за замовчуванням), `group-all`, `direct`, `all`.
-- `removeAckAfterReply`: прибирає ack після відповіді в Slack, Discord і Telegram.
-- `messages.statusReactions.enabled`: вмикає реакції статусу життєвого циклу в Slack, Discord і Telegram.
- У Slack і Discord відсутнє значення зберігає реакції статусу увімкненими, коли активні ack reactions.
- У Telegram встановіть його явно в `true`, щоб увімкнути реакції статусу життєвого циклу.
+- Порядок розв’язання: акаунт → канал → `messages.ackReaction` → fallback ідентичності.
+- Scope: `group-mentions` (default), `group-all`, `direct`, `all`.
+- `removeAckAfterReply`: видаляє ack після reply у Slack, Discord і Telegram.
+- `messages.statusReactions.enabled`: вмикає lifecycle status reactions у Slack, Discord і Telegram.
+ У Slack і Discord, якщо параметр не встановлено, status reactions залишаються увімкненими, коли активні ack reactions.
+ У Telegram задайте його явно як `true`, щоб увімкнути lifecycle status reactions.
### Inbound debounce
-Об'єднує швидкі текстові повідомлення від того самого відправника в один хід агента. Медіа/вкладення скидають буфер одразу. Керівні команди обходять debounce.
+Об’єднує швидкі текстові повідомлення від того самого відправника в один agent turn. Media/attachments скидаються негайно. Control commands обходять debouncing.
### TTS (text-to-speech)
@@ -1860,18 +1860,18 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр
}
```
-- `auto` керує auto-TTS. `/tts off|always|inbound|tagged` перевизначає це для сесії.
+- `auto` керує auto-TTS. `/tts off|always|inbound|tagged` перевизначає значення для кожної session.
- `summaryModel` перевизначає `agents.defaults.model.primary` для auto-summary.
-- `modelOverrides` увімкнено за замовчуванням; `modelOverrides.allowProvider` за замовчуванням дорівнює `false` (opt-in).
-- API-ключі використовують резервні значення `ELEVENLABS_API_KEY`/`XI_API_KEY` і `OPENAI_API_KEY`.
-- `openai.baseUrl` перевизначає endpoint OpenAI TTS. Порядок визначення: конфігурація, потім `OPENAI_TTS_BASE_URL`, потім `https://api.openai.com/v1`.
-- Коли `openai.baseUrl` вказує на endpoint, відмінний від OpenAI, OpenClaw трактує його як OpenAI-сумісний TTS-сервер і послаблює перевірку моделі/голосу.
+- `modelOverrides` увімкнено за замовчуванням; `modelOverrides.allowProvider` за замовчуванням дорівнює `false` (потрібне явне вмикання).
+- API keys використовують fallback до `ELEVENLABS_API_KEY`/`XI_API_KEY` і `OPENAI_API_KEY`.
+- `openai.baseUrl` перевизначає endpoint OpenAI TTS. Порядок розв’язання: конфігурація, потім `OPENAI_TTS_BASE_URL`, потім `https://api.openai.com/v1`.
+- Коли `openai.baseUrl` вказує на endpoint, що не належить OpenAI, OpenClaw трактує його як OpenAI-compatible TTS server і послаблює перевірку model/voice.
---
## Talk
-Типові значення для режиму Talk (macOS/iOS/Android).
+Defaults для режиму Talk (macOS/iOS/Android).
```json5
{
@@ -1895,13 +1895,13 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр
}
```
-- `talk.provider` має відповідати ключу в `talk.providers`, коли налаштовано кілька постачальників Talk.
-- Застарілі плоскі ключі Talk (`talk.voiceId`, `talk.voiceAliases`, `talk.modelId`, `talk.outputFormat`, `talk.apiKey`) сумісні лише для сумісності та автоматично переносяться в `talk.providers.`.
-- Voice ID використовують резервні значення `ELEVENLABS_VOICE_ID` або `SAG_VOICE_ID`.
-- `providers.*.apiKey` приймає прості текстові рядки або об'єкти SecretRef.
-- Резервне значення `ELEVENLABS_API_KEY` застосовується лише тоді, коли API-ключ Talk не налаштовано.
+- `talk.provider` має збігатися з ключем у `talk.providers`, коли налаштовано кілька Talk providers.
+- Legacy flat ключі Talk (`talk.voiceId`, `talk.voiceAliases`, `talk.modelId`, `talk.outputFormat`, `talk.apiKey`) підтримуються лише для сумісності й автоматично мігруються в `talk.providers.`.
+- Для Voice ID fallback — `ELEVENLABS_VOICE_ID` або `SAG_VOICE_ID`.
+- `providers.*.apiKey` приймає прості текстові рядки або об’єкти SecretRef.
+- Fallback `ELEVENLABS_API_KEY` застосовується лише коли не налаштовано API key для Talk.
- `providers.*.voiceAliases` дозволяє директивам Talk використовувати дружні імена.
-- `silenceTimeoutMs` керує тим, скільки Talk mode чекає після тиші користувача перед надсиланням транскрипту. Якщо не встановлено, зберігається типове вікно паузи платформи (`700 мс на macOS і Android, 900 мс на iOS`).
+- `silenceTimeoutMs` визначає, скільки режим Talk чекатиме після тиші користувача перед надсиланням transcript. Якщо не встановлено, зберігається стандартне вікно паузи для платформи (`700 ms на macOS і Android, 900 ms на iOS`).
---
@@ -1909,37 +1909,37 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр
### Профілі інструментів
-`tools.profile` задає базовий список дозволів перед `tools.allow`/`tools.deny`:
+`tools.profile` задає базовий allowlist перед `tools.allow`/`tools.deny`:
-Локальний онбординг за замовчуванням встановлює новим локальним конфігураціям `tools.profile: "coding"`, якщо значення не задано (наявні явні профілі зберігаються).
+Локальний onboarding за замовчуванням встановлює `tools.profile: "coding"` для нових локальних конфігурацій, якщо значення не задано (наявні явні профілі зберігаються).
-| Профіль | Включає |
-| ------------ | ------------------------------------------------------------------------------------------------------------------------------- |
-| `minimal` | лише `session_status` |
-| `coding` | `group:fs`, `group:runtime`, `group:web`, `group:sessions`, `group:memory`, `cron`, `image`, `image_generate`, `video_generate` |
-| `messaging` | `group:messaging`, `sessions_list`, `sessions_history`, `sessions_send`, `session_status` |
-| `full` | Без обмежень (те саме, що не встановлено) |
+| Профіль | Містить |
+| ----------- | ------------------------------------------------------------------------------------------------------------------------------- |
+| `minimal` | лише `session_status` |
+| `coding` | `group:fs`, `group:runtime`, `group:web`, `group:sessions`, `group:memory`, `cron`, `image`, `image_generate`, `video_generate` |
+| `messaging` | `group:messaging`, `sessions_list`, `sessions_history`, `sessions_send`, `session_status` |
+| `full` | Без обмежень (те саме, що не задано) |
### Групи інструментів
-| Група | Інструменти |
-| ------------------ | ---------------------------------------------------------------------------------------------------------------------- |
-| `group:runtime` | `exec`, `process`, `code_execution` (`bash` приймається як alias для `exec`) |
-| `group:fs` | `read`, `write`, `edit`, `apply_patch` |
-| `group:sessions` | `sessions_list`, `sessions_history`, `sessions_send`, `sessions_spawn`, `sessions_yield`, `subagents`, `session_status` |
-| `group:memory` | `memory_search`, `memory_get` |
-| `group:web` | `web_search`, `x_search`, `web_fetch` |
-| `group:ui` | `browser`, `canvas` |
-| `group:automation` | `cron`, `gateway` |
-| `group:messaging` | `message` |
-| `group:nodes` | `nodes` |
-| `group:agents` | `agents_list` |
-| `group:media` | `image`, `image_generate`, `video_generate`, `tts` |
-| `group:openclaw` | Усі вбудовані інструменти (без provider plugins) |
+| Група | Інструменти |
+| ------------------ | ---------------------------------------------------------------------------------------------------------------------------- |
+| `group:runtime` | `exec`, `process`, `code_execution` (`bash` приймається як alias для `exec`) |
+| `group:fs` | `read`, `write`, `edit`, `apply_patch` |
+| `group:sessions` | `sessions_list`, `sessions_history`, `sessions_send`, `sessions_spawn`, `sessions_yield`, `subagents`, `session_status` |
+| `group:memory` | `memory_search`, `memory_get` |
+| `group:web` | `web_search`, `x_search`, `web_fetch` |
+| `group:ui` | `browser`, `canvas` |
+| `group:automation` | `cron`, `gateway` |
+| `group:messaging` | `message` |
+| `group:nodes` | `nodes` |
+| `group:agents` | `agents_list` |
+| `group:media` | `image`, `image_generate`, `video_generate`, `tts` |
+| `group:openclaw` | Усі вбудовані інструменти (не включає provider plugins) |
### `tools.allow` / `tools.deny`
-Глобальна політика allow/deny для інструментів (deny перемагає). Нечутлива до регістру, підтримує wildcard-и `*`. Застосовується навіть тоді, коли Docker sandbox вимкнений.
+Глобальна політика allow/deny для інструментів (deny має пріоритет). Нечутлива до регістру, підтримує wildcard `*`. Застосовується, навіть коли sandbox Docker вимкнено.
```json5
{
@@ -1949,7 +1949,7 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр
### `tools.byProvider`
-Додатково обмежує інструменти для певних постачальників або моделей. Порядок: базовий профіль → профіль постачальника → allow/deny.
+Додатково обмежує інструменти для конкретних providers або моделей. Порядок: базовий профіль → профіль provider → allow/deny.
```json5
{
@@ -1965,7 +1965,7 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр
### `tools.elevated`
-Керує elevated-доступом до exec поза sandbox:
+Керує підвищеним доступом exec поза sandbox:
```json5
{
@@ -1981,9 +1981,9 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр
}
```
-- Перевизначення для окремого агента (`agents.list[].tools.elevated`) може лише додатково обмежувати.
-- `/elevated on|off|ask|full` зберігає стан для кожної сесії; вбудовані директиви застосовуються лише до одного повідомлення.
-- Elevated `exec` обходить sandbox і використовує налаштований шлях виходу (`gateway` за замовчуванням або `node`, коли ціль exec — `node`).
+- Перевизначення для агента (`agents.list[].tools.elevated`) може лише ще більше обмежити.
+- `/elevated on|off|ask|full` зберігає стан для кожної session; inline directives застосовуються до одного повідомлення.
+- Elevated `exec` обходить sandboxing і використовує налаштований шлях escape (`gateway` за замовчуванням або `node`, коли exec target — `node`).
### `tools.exec`
@@ -2007,8 +2007,8 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр
### `tools.loopDetection`
-Перевірки безпеки для циклів інструментів **типово вимкнені**. Установіть `enabled: true`, щоб увімкнути виявлення.
-Налаштування можна визначити глобально в `tools.loopDetection` і перевизначити для окремого агента в `agents.list[].tools.loopDetection`.
+Перевірки безпеки циклів інструментів **вимкнені за замовчуванням**. Щоб увімкнути виявлення, задайте `enabled: true`.
+Налаштування можна визначати глобально в `tools.loopDetection` і перевизначати для кожного агента в `agents.list[].tools.loopDetection`.
```json5
{
@@ -2029,14 +2029,14 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр
}
```
-- `historySize`: максимальний обсяг історії викликів інструментів, що зберігається для аналізу циклів.
+- `historySize`: максимальна історія tool-call, що зберігається для аналізу циклів.
- `warningThreshold`: поріг повторюваного шаблону без прогресу для попереджень.
- `criticalThreshold`: вищий поріг повторення для блокування критичних циклів.
- `globalCircuitBreakerThreshold`: жорсткий поріг зупинки для будь-якого запуску без прогресу.
- `detectors.genericRepeat`: попереджати про повторні виклики того самого інструмента з тими самими аргументами.
-- `detectors.knownPollNoProgress`: попереджати/блокувати відомі poll-інструменти (`process.poll`, `command_status` тощо).
-- `detectors.pingPong`: попереджати/блокувати чергування пар без прогресу.
-- Якщо `warningThreshold >= criticalThreshold` або `criticalThreshold >= globalCircuitBreakerThreshold`, перевірка не проходить.
+- `detectors.knownPollNoProgress`: попереджати/блокувати відомі poll tools без прогресу (`process.poll`, `command_status` тощо).
+- `detectors.pingPong`: попереджати/блокувати шаблони чергування пар без прогресу.
+- Якщо `warningThreshold >= criticalThreshold` або `criticalThreshold >= globalCircuitBreakerThreshold`, перевірка валідації завершується помилкою.
### `tools.web`
@@ -2046,14 +2046,14 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр
web: {
search: {
enabled: true,
- apiKey: "brave_api_key", // або BRAVE_API_KEY з env
+ apiKey: "brave_api_key", // або BRAVE_API_KEY env
maxResults: 5,
timeoutSeconds: 30,
cacheTtlMinutes: 15,
},
fetch: {
enabled: true,
- provider: "firecrawl", // необов'язково; опустіть для auto-detect
+ provider: "firecrawl", // необов’язково; пропустіть для auto-detect
maxChars: 50000,
maxCharsCap: 50000,
maxResponseBytes: 2000000,
@@ -2070,7 +2070,7 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр
### `tools.media`
-Налаштовує розуміння вхідних медіа (зображення/аудіо/відео):
+Налаштовує розуміння вхідних media (image/audio/video):
```json5
{
@@ -2099,26 +2099,26 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр
}
```
-
+
-**Запис постачальника** (`type: "provider"` або опущено):
+**Запис provider** (`type: "provider"` або пропущено):
-- `provider`: ID API-постачальника (`openai`, `anthropic`, `google`/`gemini`, `groq` тощо)
-- `model`: перевизначення ID моделі
+- `provider`: API provider id (`openai`, `anthropic`, `google`/`gemini`, `groq` тощо)
+- `model`: перевизначення id моделі
- `profile` / `preferredProfile`: вибір профілю `auth-profiles.json`
-**CLI-запис** (`type: "cli"`):
+**Запис CLI** (`type: "cli"`):
- `command`: виконуваний файл
-- `args`: шаблонізовані аргументи (підтримуються `{{MediaPath}}`, `{{Prompt}}`, `{{MaxChars}}` тощо)
+- `args`: параметризовані args (підтримує `{{MediaPath}}`, `{{Prompt}}`, `{{MaxChars}}` тощо)
**Спільні поля:**
-- `capabilities`: необов'язковий список (`image`, `audio`, `video`). За замовчуванням: `openai`/`anthropic`/`minimax` → image, `google` → image+audio+video, `groq` → audio.
-- `prompt`, `maxChars`, `maxBytes`, `timeoutSeconds`, `language`: перевизначення для окремого запису.
-- У разі помилки використовується наступний запис.
+- `capabilities`: необов’язковий список (`image`, `audio`, `video`). Defaults: `openai`/`anthropic`/`minimax` → image, `google` → image+audio+video, `groq` → audio.
+- `prompt`, `maxChars`, `maxBytes`, `timeoutSeconds`, `language`: перевизначення для конкретного запису.
+- У разі помилок використовується наступний запис.
-Автентифікація постачальника йде стандартним порядком: `auth-profiles.json` → env vars → `models.providers.*.apiKey`.
+Автентифікація provider follows standard order: `auth-profiles.json` → env vars → `models.providers.*.apiKey`.
@@ -2137,9 +2137,9 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр
### `tools.sessions`
-Керує тим, які сесії можна вибирати через session tools (`sessions_list`, `sessions_history`, `sessions_send`).
+Керує тим, які sessions можуть бути цілями для session tools (`sessions_list`, `sessions_history`, `sessions_send`).
-За замовчуванням: `tree` (поточна сесія + сесії, породжені нею, наприклад subagents).
+Default: `tree` (поточна session + sessions, породжені нею, наприклад subagents).
```json5
{
@@ -2154,26 +2154,26 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр
Примітки:
-- `self`: лише поточний ключ сесії.
-- `tree`: поточна сесія + сесії, породжені поточною сесією (subagents).
-- `agent`: будь-яка сесія, що належить поточному ID агента (може включати інших користувачів, якщо ви використовуєте per-sender sessions під одним ID агента).
-- `all`: будь-яка сесія. Для націлювання між агентами все ще потрібен `tools.agentToAgent`.
-- Притискання sandbox: коли поточна сесія працює в sandbox і `agents.defaults.sandbox.sessionToolsVisibility="spawned"`, видимість примусово встановлюється в `tree`, навіть якщо `tools.sessions.visibility="all"`.
+- `self`: лише поточний session key.
+- `tree`: поточна session + sessions, породжені поточною session (subagents).
+- `agent`: будь-яка session, що належить поточному agent id (може включати інших користувачів, якщо ви запускаєте per-sender sessions під тим самим agent id).
+- `all`: будь-яка session. Націлення між агентами все одно потребує `tools.agentToAgent`.
+- Sandbox clamp: коли поточна session працює в sandbox і `agents.defaults.sandbox.sessionToolsVisibility="spawned"`, видимість примусово встановлюється в `tree`, навіть якщо `tools.sessions.visibility="all"`.
### `tools.sessions_spawn`
-Керує підтримкою вбудованих вкладень для `sessions_spawn`.
+Керує підтримкою inline attachments для `sessions_spawn`.
```json5
{
tools: {
sessions_spawn: {
attachments: {
- enabled: false, // opt-in: установіть true, щоб дозволити вбудовані файлові вкладення
- maxTotalBytes: 5242880, // 5 МБ сумарно для всіх файлів
+ enabled: false, // opt-in: установіть true, щоб дозволити inline file attachments
+ maxTotalBytes: 5242880, // 5 MB сумарно для всіх файлів
maxFiles: 50,
- maxFileBytes: 1048576, // 1 МБ на файл
- retainOnSessionKeep: false, // зберігати вкладення, коли cleanup="keep"
+ maxFileBytes: 1048576, // 1 MB на файл
+ retainOnSessionKeep: false, // зберігати attachments, коли cleanup="keep"
},
},
},
@@ -2182,16 +2182,16 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр
Примітки:
-- Вкладення підтримуються лише для `runtime: "subagent"`. ACP runtime їх відхиляє.
-- Файли матеріалізуються в дочірньому workspace у `.openclaw/attachments//` з `.manifest.json`.
-- Вміст вкладень автоматично редагується під час збереження transcript.
-- Входи Base64 перевіряються за строгими правилами алфавіту/вирівнювання та попереднім захистом розміру до декодування.
+- Attachments підтримуються лише для `runtime: "subagent"`. Runtime ACP відхиляє їх.
+- Файли матеріалізуються в child workspace у `.openclaw/attachments//` разом із `.manifest.json`.
+- Вміст attachment автоматично редагується з transcript persistence.
+- Base64 inputs проходять перевірку за суворими правилами alphabet/padding і з перевіркою розміру до декодування.
- Права файлів: `0700` для каталогів і `0600` для файлів.
-- Очищення слідує політиці `cleanup`: `delete` завжди видаляє вкладення; `keep` зберігає їх лише тоді, коли `retainOnSessionKeep: true`.
+- Очищення дотримується політики `cleanup`: `delete` завжди видаляє attachments; `keep` зберігає їх лише коли `retainOnSessionKeep: true`.
### `tools.experimental`
-Експериментальні прапори вбудованих інструментів. Типово вимкнені, якщо не застосовується правило auto-enable, специфічне для runtime.
+Експериментальні прапори вбудованих інструментів. За замовчуванням вимкнені, якщо не діє auto-enable rule, специфічне для runtime.
```json5
{
@@ -2206,8 +2206,8 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр
Примітки:
- `planTool`: вмикає структурований інструмент `update_plan` для відстеження нетривіальної багатокрокової роботи.
-- За замовчуванням: `false` для постачальників, відмінних від OpenAI. OpenAI і OpenAI Codex автоматично вмикають його.
-- Коли він увімкнений, системний prompt також додає інструкції щодо використання, щоб модель застосовувала його лише для суттєвої роботи й підтримувала не більше одного кроку `in_progress`.
+- Default: `false` для не-OpenAI providers. OpenAI і OpenAI Codex runs вмикають його автоматично.
+- Коли інструмент увімкнено, system prompt також додає підказки щодо використання, щоб модель застосовувала його лише для суттєвої роботи й підтримувала не більше одного кроку `in_progress`.
### `agents.defaults.subagents`
@@ -2227,21 +2227,21 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр
}
```
-- `model`: типова модель для породжених sub-agent. Якщо не вказано, sub-agent успадковують модель викликача.
-- `allowAgents`: типовий список дозволених ID цільових агентів для `sessions_spawn`, коли агент-запитувач не задає власний `subagents.allowAgents` (`["*"]` = будь-який; за замовчуванням: лише той самий агент).
-- `runTimeoutSeconds`: типовий тайм-аут (секунди) для `sessions_spawn`, коли виклик інструмента не передає `runTimeoutSeconds`. `0` означає без тайм-ауту.
+- `model`: default model для spawned sub-agents. Якщо параметр пропущено, sub-agents успадковують model викликача.
+- `allowAgents`: default allowlist цільових agent ids для `sessions_spawn`, коли агент-запитувач не задає власний `subagents.allowAgents` (`["*"]` = будь-який; default: лише той самий агент).
+- `runTimeoutSeconds`: default timeout (секунди) для `sessions_spawn`, коли у виклику інструмента пропущено `runTimeoutSeconds`. `0` означає без timeout.
- Політика інструментів для subagent: `tools.subagents.tools.allow` / `tools.subagents.tools.deny`.
---
-## Власні постачальники та base URL
+## Користувацькі providers і base URLs
-OpenClaw використовує вбудований каталог моделей. Додавайте власних постачальників через `models.providers` у конфігурації або `~/.openclaw/agents//agent/models.json`.
+OpenClaw використовує вбудований каталог моделей. Додавайте користувацьких providers через `models.providers` у конфігурації або `~/.openclaw/agents//agent/models.json`.
```json5
{
models: {
- mode: "merge", // merge (за замовчуванням) | replace
+ mode: "merge", // merge (default) | replace
providers: {
"custom-proxy": {
baseUrl: "http://localhost:4000/v1",
@@ -2265,48 +2265,48 @@ OpenClaw використовує вбудований каталог модел
}
```
-- Використовуйте `authHeader: true` + `headers` для нестандартних потреб автентифікації.
-- Перевизначайте корінь конфігурації агента через `OPENCLAW_AGENT_DIR` (або `PI_CODING_AGENT_DIR`, застарілий alias env variable).
-- Пріоритет злиття для відповідних ID постачальників:
- - Непорожні значення `baseUrl` в `models.json` агента мають пріоритет.
- - Непорожні значення `apiKey` агента мають пріоритет лише тоді, коли цей постачальник не керується через SecretRef у поточному контексті config/auth-profile.
- - Значення `apiKey` постачальника, керовані через SecretRef, оновлюються з маркерів джерела (`ENV_VAR_NAME` для env refs, `secretref-managed` для file/exec refs) замість збереження визначених секретів.
- - Значення заголовків постачальника, керовані через SecretRef, оновлюються з маркерів джерела (`secretref-env:ENV_VAR_NAME` для env refs, `secretref-managed` для file/exec refs).
- - Порожні або відсутні `apiKey`/`baseUrl` агента повертаються до `models.providers` у конфігурації.
- - Для відповідних моделей `contextWindow`/`maxTokens` використовують більше значення між явною конфігурацією та неявними значеннями каталогу.
- - Для відповідних моделей `contextTokens` зберігає явний runtime cap, якщо він заданий; використовуйте це, щоб обмежити ефективний контекст без зміни нативних метаданих моделі.
+- Використовуйте `authHeader: true` + `headers` для нестандартних вимог автентифікації.
+- Перевизначте корінь конфігурації агента через `OPENCLAW_AGENT_DIR` (або `PI_CODING_AGENT_DIR`, застарілий alias environment variable).
+- Пріоритет злиття для відповідних provider IDs:
+ - Непорожні значення `baseUrl` в agent `models.json` мають пріоритет.
+ - Непорожні значення `apiKey` агента мають пріоритет лише тоді, коли цей provider не керується через SecretRef у поточному контексті config/auth-profile.
+ - Для provider `apiKey`, керованих SecretRef, значення оновлюються з source markers (`ENV_VAR_NAME` для env refs, `secretref-managed` для file/exec refs), а не шляхом збереження розв’язаних секретів.
+ - Для значень заголовків provider, керованих SecretRef, оновлення також відбувається з source markers (`secretref-env:ENV_VAR_NAME` для env refs, `secretref-managed` для file/exec refs).
+ - Порожні або відсутні `apiKey`/`baseUrl` в agent використовують fallback до `models.providers` у конфігурації.
+ - Для matching models `contextWindow`/`maxTokens` використовується вище значення між явною конфігурацією та неявними значеннями каталогу.
+ - Для matching model `contextTokens` зберігається явне runtime cap, якщо воно задане; використовуйте його, щоб обмежити ефективний контекст без зміни native metadata моделі.
- Використовуйте `models.mode: "replace"`, коли хочете, щоб конфігурація повністю переписала `models.json`.
- - Збереження маркерів визначається джерелом: маркери записуються з активного знімка конфігурації джерела (до визначення), а не з визначених секретних значень середовища виконання.
+ - Збереження marker є source-authoritative: markers записуються з активного source config snapshot (до розв’язання), а не з розв’язаних runtime secret values.
-### Деталі полів постачальника
+### Деталі полів provider
-- `models.mode`: поведінка каталогу постачальників (`merge` або `replace`).
-- `models.providers`: карта власних постачальників, ключем якої є ID постачальника.
-- `models.providers.*.api`: адаптер запитів (`openai-completions`, `openai-responses`, `anthropic-messages`, `google-generative-ai` тощо).
-- `models.providers.*.apiKey`: облікові дані постачальника (краще через SecretRef/env substitution).
+- `models.mode`: поведінка каталогу provider (`merge` або `replace`).
+- `models.providers`: мапа користувацьких providers, ключована за provider id.
+- `models.providers.*.api`: adapter запиту (`openai-completions`, `openai-responses`, `anthropic-messages`, `google-generative-ai` тощо).
+- `models.providers.*.apiKey`: credential постачальника (віддавайте перевагу SecretRef/env substitution).
- `models.providers.*.auth`: стратегія автентифікації (`api-key`, `token`, `oauth`, `aws-sdk`).
-- `models.providers.*.injectNumCtxForOpenAICompat`: для Ollama + `openai-completions` вставляє `options.num_ctx` у запити (за замовчуванням: `true`).
-- `models.providers.*.authHeader`: примусово передавати облікові дані в заголовку `Authorization`, коли це потрібно.
-- `models.providers.*.baseUrl`: базовий URL API upstream.
+- `models.providers.*.injectNumCtxForOpenAICompat`: для Ollama + `openai-completions` інжектувати `options.num_ctx` у запити (default: `true`).
+- `models.providers.*.authHeader`: примусово передавати credential у заголовку `Authorization`, коли це потрібно.
+- `models.providers.*.baseUrl`: базова URL-адреса upstream API.
- `models.providers.*.headers`: додаткові статичні заголовки для proxy/tenant routing.
-- `models.providers.*.request`: транспортні перевизначення для HTTP-запитів model-provider.
- - `request.headers`: додаткові заголовки (зливаються з типовими значеннями постачальника). Значення приймають SecretRef.
- - `request.auth`: перевизначення стратегії автентифікації. Режими: `"provider-default"` (використовувати вбудовану автентифікацію постачальника), `"authorization-bearer"` (з `token`), `"header"` (з `headerName`, `value`, необов'язковим `prefix`).
- - `request.proxy`: перевизначення HTTP-проксі. Режими: `"env-proxy"` (використовувати env vars `HTTP_PROXY`/`HTTPS_PROXY`), `"explicit-proxy"` (з `url`). Обидва режими приймають необов'язковий підоб'єкт `tls`.
- - `request.tls`: перевизначення TLS для прямих з'єднань. Поля: `ca`, `cert`, `key`, `passphrase` (усі приймають SecretRef), `serverName`, `insecureSkipVerify`.
+- `models.providers.*.request`: перевизначення transport для HTTP-запитів model-provider.
+ - `request.headers`: додаткові заголовки (зливаються з defaults provider). Значення приймають SecretRef.
+ - `request.auth`: перевизначення стратегії auth. Режими: `"provider-default"` (використовувати вбудовану auth постачальника), `"authorization-bearer"` (з `token`), `"header"` (з `headerName`, `value`, необов’язковим `prefix`).
+ - `request.proxy`: перевизначення HTTP proxy. Режими: `"env-proxy"` (використовувати env vars `HTTP_PROXY`/`HTTPS_PROXY`), `"explicit-proxy"` (з `url`). Обидва режими приймають необов’язковий підоб’єкт `tls`.
+ - `request.tls`: перевизначення TLS для прямих з’єднань. Поля: `ca`, `cert`, `key`, `passphrase` (усі приймають SecretRef), `serverName`, `insecureSkipVerify`.
- `models.providers.*.models`: явні записи каталогу моделей постачальника.
-- `models.providers.*.models.*.contextWindow`: метадані нативного контекстного вікна моделі.
-- `models.providers.*.models.*.contextTokens`: необов'язковий runtime cap для контексту. Використовуйте, якщо вам потрібен менший ефективний бюджет контексту, ніж нативне `contextWindow` моделі.
-- `models.providers.*.models.*.compat.supportsDeveloperRole`: необов'язкова підказка сумісності. Для `api: "openai-completions"` з непорожнім ненативним `baseUrl` (хост не `api.openai.com`) OpenClaw примусово встановлює це значення в `false` під час виконання. Порожній/відсутній `baseUrl` зберігає типову поведінку OpenAI.
-- `plugins.entries.amazon-bedrock.config.discovery`: корінь налаштувань auto-discovery для Bedrock.
-- `plugins.entries.amazon-bedrock.config.discovery.enabled`: увімкнути/вимкнути неявне виявлення.
-- `plugins.entries.amazon-bedrock.config.discovery.region`: регіон AWS для виявлення.
-- `plugins.entries.amazon-bedrock.config.discovery.providerFilter`: необов'язковий фільтр provider-id для цільового виявлення.
-- `plugins.entries.amazon-bedrock.config.discovery.refreshInterval`: інтервал опитування для оновлення виявлення.
-- `plugins.entries.amazon-bedrock.config.discovery.defaultContextWindow`: резервне контекстне вікно для виявлених моделей.
-- `plugins.entries.amazon-bedrock.config.discovery.defaultMaxTokens`: резервна максимальна кількість вихідних токенів для виявлених моделей.
+- `models.providers.*.models.*.contextWindow`: metadata native context window моделі.
+- `models.providers.*.models.*.contextTokens`: необов’язкова runtime cap для контексту. Використовуйте це, коли хочете менший ефективний бюджет контексту, ніж native `contextWindow` моделі.
+- `models.providers.*.models.*.compat.supportsDeveloperRole`: необов’язкова compatibility hint. Для `api: "openai-completions"` із непорожнім ненативним `baseUrl` (host не `api.openai.com`) OpenClaw примусово встановлює це в `false` під час runtime. Порожній/пропущений `baseUrl` зберігає стандартну поведінку OpenAI.
+- `plugins.entries.amazon-bedrock.config.discovery`: кореневі налаштування auto-discovery Bedrock.
+- `plugins.entries.amazon-bedrock.config.discovery.enabled`: увімкнути/вимкнути неявне discovery.
+- `plugins.entries.amazon-bedrock.config.discovery.region`: регіон AWS для discovery.
+- `plugins.entries.amazon-bedrock.config.discovery.providerFilter`: необов’язковий фільтр provider-id для цільового discovery.
+- `plugins.entries.amazon-bedrock.config.discovery.refreshInterval`: інтервал опитування для оновлення discovery.
+- `plugins.entries.amazon-bedrock.config.discovery.defaultContextWindow`: fallback context window для виявлених моделей.
+- `plugins.entries.amazon-bedrock.config.discovery.defaultMaxTokens`: fallback max output tokens для виявлених моделей.
-### Приклади постачальників
+### Приклади provider
@@ -2342,7 +2342,7 @@ OpenClaw використовує вбудований каталог модел
}
```
-Використовуйте `cerebras/zai-glm-4.7` для Cerebras; `zai/glm-4.7` для прямого Z.AI.
+Використовуйте `cerebras/zai-glm-4.7` для Cerebras; `zai/glm-4.7` — для прямого Z.AI.
@@ -2376,11 +2376,11 @@ OpenClaw використовує вбудований каталог модел
}
```
-Установіть `ZAI_API_KEY`. `z.ai/*` і `z-ai/*` приймаються як alias-и. Скорочення: `openclaw onboard --auth-choice zai-api-key`.
+Установіть `ZAI_API_KEY`. `z.ai/*` і `z-ai/*` приймаються як aliases. Скорочення: `openclaw onboard --auth-choice zai-api-key`.
- Загальний endpoint: `https://api.z.ai/api/paas/v4`
-- Endpoint для кодування (за замовчуванням): `https://api.z.ai/api/coding/paas/v4`
-- Для загального endpoint визначте власного постачальника з перевизначенням base URL.
+- Endpoint для кодування (default): `https://api.z.ai/api/coding/paas/v4`
+- Для загального endpoint визначте користувацького provider із перевизначенням base URL.
@@ -2419,11 +2419,11 @@ OpenClaw використовує вбудований каталог модел
}
```
-Для китайського endpoint: `baseUrl: "https://api.moonshot.cn/v1"` або `openclaw onboard --auth-choice moonshot-api-key-cn`.
+Для endpoint у Китаї: `baseUrl: "https://api.moonshot.cn/v1"` або `openclaw onboard --auth-choice moonshot-api-key-cn`.
-Нативні endpoints Moonshot рекламують сумісність використання streaming на спільному
-транспорті `openai-completions`, і OpenClaw тепер визначає це за можливостями endpoint-а,
-а не лише за вбудованим provider id.
+Native endpoints Moonshot заявляють сумісність із використанням streaming на спільному
+транспорті `openai-completions`, і OpenClaw тепер визначає це за
+можливостями endpoint, а не лише за id вбудованого provider.
@@ -2441,11 +2441,11 @@ OpenClaw використовує вбудований каталог модел
}
```
-Anthropic-сумісний, вбудований постачальник. Скорочення: `openclaw onboard --auth-choice kimi-code-api-key`.
+Сумісний з Anthropic, вбудований provider. Скорочення: `openclaw onboard --auth-choice kimi-code-api-key`.
-
+
```json5
{
@@ -2480,11 +2480,11 @@ Anthropic-сумісний, вбудований постачальник. Ск
}
```
-Base URL має не містити `/v1` (клієнт Anthropic додає його сам). Скорочення: `openclaw onboard --auth-choice synthetic-api-key`.
+Base URL має бути без `/v1` (клієнт Anthropic додає його сам). Скорочення: `openclaw onboard --auth-choice synthetic-api-key`.
-
+
```json5
{
@@ -2523,9 +2523,9 @@ Base URL має не містити `/v1` (клієнт Anthropic додає й
Установіть `MINIMAX_API_KEY`. Скорочення:
`openclaw onboard --auth-choice minimax-global-api` або
`openclaw onboard --auth-choice minimax-cn-api`.
-Каталог моделей тепер за замовчуванням містить лише M2.7.
-На Anthropic-сумісному шляху streaming OpenClaw типово вимикає thinking MiniMax,
-якщо ви явно самі не встановите `thinking`. `/fast on` або
+Тепер каталог моделей за замовчуванням використовує лише M2.7.
+На Anthropic-compatible streaming path OpenClaw вимикає thinking MiniMax
+за замовчуванням, якщо ви самі явно не встановите `thinking`. `/fast on` або
`params.fastMode: true` переписує `MiniMax-M2.7` на
`MiniMax-M2.7-highspeed`.
@@ -2533,7 +2533,7 @@ Base URL має не містити `/v1` (клієнт Anthropic додає й
-Див. [Local Models](/uk/gateway/local-models). Коротко: запускайте велику локальну модель через LM Studio Responses API на серйозному обладнанні; залишайте хостовані моделі об'єднаними як резервний варіант.
+Див. [Local Models](/uk/gateway/local-models). Коротко: запускайте велику локальну модель через LM Studio Responses API на потужному обладнанні; залишайте hosted models злитими для fallback.
@@ -2564,14 +2564,14 @@ Base URL має не містити `/v1` (клієнт Anthropic додає й
}
```
-- `allowBundled`: необов'язковий список дозволених лише для комплектних Skills (керовані/workspace Skills не зачіпаються).
+- `allowBundled`: необов’язковий allowlist лише для bundled Skills (керовані/workspace Skills не зачіпає).
- `load.extraDirs`: додаткові спільні корені Skills (найнижчий пріоритет).
-- `install.preferBrew`: якщо true, надавати перевагу інсталяторам Homebrew, коли
- `brew` доступний, перед переходом до інших типів інсталяторів.
-- `install.nodeManager`: пріоритет Node-інсталятора для специфікацій `metadata.openclaw.install`
+- `install.preferBrew`: коли true, віддає перевагу інсталяторам Homebrew, якщо
+ `brew` доступний, перш ніж переходити до інших типів інсталяторів.
+- `install.nodeManager`: бажаний менеджер інсталяції node для специфікацій `metadata.openclaw.install`
(`npm` | `pnpm` | `yarn` | `bun`).
-- `entries..enabled: false` вимикає Skill, навіть якщо він комплектний/встановлений.
-- `entries..apiKey`: зручне поле API-ключа для Skills, що оголошують основну env variable (простий текстовий рядок або об'єкт SecretRef).
+- `entries..enabled: false` вимикає Skill, навіть якщо він bundled/installed.
+- `entries..apiKey`: спрощене поле API key для Skills, які оголошують основну env variable (простий текстовий рядок або об’єкт SecretRef).
---
@@ -2600,5 +2600,93 @@ Base URL має не містити `/v1` (клієнт Anthropic додає й
```
- Завантажуються з `~/.openclaw/extensions`, `/.openclaw/extensions` і `plugins.load.paths`.
-- Виявлення приймає нативні plugins OpenClaw, а також сумісні пакети Codex і Claude, включно з пакетами Claude стандартного макета без manifest.
-- **З
\ No newline at end of file
+- Discovery приймає native plugins OpenClaw, а також сумісні bundles Codex і Claude, включно з bundle Claude без manifest у стандартному layout.
+- **Зміни конфігурації потребують restart gateway.**
+- `allow`: необов’язковий allowlist (завантажуються лише вказані plugins). `deny` має пріоритет.
+- `plugins.entries..apiKey`: спрощене plugin-level поле API key (коли це підтримується plugin).
+- `plugins.entries..env`: мапа env vars у межах plugin.
+- `plugins.entries..hooks.allowPromptInjection`: коли `false`, core блокує `before_prompt_build` і ігнорує поля зі зміною prompt із legacy `before_agent_start`, зберігаючи legacy `modelOverride` і `providerOverride`. Застосовується до native plugin hooks і підтримуваних директорій hooks, наданих bundles.
+- `plugins.entries..subagent.allowModelOverride`: явно довіряти цьому plugin запитувати перевизначення `provider` і `model` для кожного запуску background subagent.
+- `plugins.entries..subagent.allowedModels`: необов’язковий allowlist канонічних цілей `provider/model` для довірених перевизначень subagent. Використовуйте `"*"` лише тоді, коли свідомо хочете дозволити будь-яку модель.
+- `plugins.entries..config`: об’єкт конфігурації, визначений plugin (валідується native OpenClaw plugin schema, коли вона доступна).
+- `plugins.entries.firecrawl.config.webFetch`: налаштування постачальника web-fetch Firecrawl.
+ - `apiKey`: API key Firecrawl (приймає SecretRef). Використовує fallback до `plugins.entries.firecrawl.config.webSearch.apiKey`, legacy `tools.web.fetch.firecrawl.apiKey` або env var `FIRECRAWL_API_KEY`.
+ - `baseUrl`: базова URL-адреса API Firecrawl (default: `https://api.firecrawl.dev`).
+ - `onlyMainContent`: витягувати лише основний вміст сторінок (default: `true`).
+ - `maxAgeMs`: максимальний вік кешу в мілісекундах (default: `172800000` / 2 дні).
+ - `timeoutSeconds`: timeout запиту scrape у секундах (default: `60`).
+- `plugins.entries.xai.config.xSearch`: налаштування xAI X Search (вебпошук Grok).
+ - `enabled`: увімкнути постачальника X Search.
+ - `model`: модель Grok для пошуку (наприклад `"grok-4-1-fast"`).
+- `plugins.entries.memory-core.config.dreaming`: налаштування dreaming пам’яті (експериментально). Режими і пороги див. у [Dreaming](/uk/concepts/dreaming).
+ - `mode`: preset cadence для dreaming (`"off"`, `"core"`, `"rem"`, `"deep"`). Default: `"off"`.
+ - `cron`: необов’язкове перевизначення cron expression для розкладу dreaming.
+ - `timezone`: часовий пояс для оцінки розкладу (fallback до `agents.defaults.userTimezone`).
+ - `limit`: максимальна кількість кандидатів на просування за цикл.
+ - `minScore`: мінімальний поріг зваженого score для просування.
+ - `minRecallCount`: мінімальний поріг кількості recall.
+ - `minUniqueQueries`: мінімальна кількість різних запитів.
+ - `recencyHalfLifeDays`: кількість днів, за які recency score зменшується вдвічі. Default: `14`.
+ - `maxAgeDays`: необов’язковий максимальний вік daily note у днях, дозволений для просування.
+ - `verboseLogging`: виводити детальні dreaming logs для кожного запуску у звичайний потік log gateway.
+- Увімкнені Claude bundle plugins також можуть додавати вбудовані Pi defaults із `settings.json`; OpenClaw застосовує їх як санітизовані agent settings, а не як сирі patches конфігурації OpenClaw.
+- `plugins.slots.memory`: виберіть id активного plugin пам’яті або `"none"`, щоб вимкнути memory plugins.
+- `plugins.slots.contextEngine`: виберіть id активного plugin context engine; default — `"legacy"`, якщо ви не встановили й не вибрали інший engine.
+- `plugins.installs`: метадані інсталяції, керовані CLI, які використовує `openclaw plugins update`.
+ - Містить `source`, `spec`, `sourcePath`, `installPath`, `version`, `resolvedName`, `resolvedVersion`, `resolvedSpec`, `integrity`, `shasum`, `resolvedAt`, `installedAt`.
+ - Розглядайте `plugins.installs.*` як керований стан; віддавайте перевагу командам CLI, а не ручному редагуванню.
+
+Див. [Plugins](/uk/tools/plugin).
+
+---
+
+## Browser
+
+```json5
+{
+ browser: {
+ enabled: true,
+ evaluateEnabled: true,
+ defaultProfile: "user",
+ ssrfPolicy: {
+ dangerouslyAllowPrivateNetwork: true, // default trusted-network mode
+ // allowPrivateNetwork: true, // legacy alias
+ // hostnameAllowlist: ["*.example.com", "example.com"],
+ // allowedHostnames: ["localhost"],
+ },
+ profiles: {
+ openclaw: { cdpPort: 18800, color: "#FF4500" },
+ work: { cdpPort: 18801, color: "#0066CC" },
+ user: { driver: "existing-session", attachOnly: true, color: "#00AA00" },
+ brave: {
+ driver: "existing-session",
+ attachOnly: true,
+ userDataDir: "~/Library/Application Support/BraveSoftware/Brave-Browser",
+ color: "#FB542B",
+ },
+ remote: { cdpUrl: "http://10.0.0.42:9222", color: "#00AA00" },
+ },
+ color: "#FF4500",
+ // headless: false,
+ // noSandbox: false,
+ // extraArgs: [],
+ // executablePath: "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser",
+ // attachOnly: false,
+ },
+}
+```
+
+- `evaluateEnabled: false` вимикає `act:evaluate` і `wait --fn`.
+- `ssrfPolicy.dangerouslyAllowPrivateNetwork` за замовчуванням дорівнює `true`, якщо не встановлено (модель довіреної мережі).
+- Установіть `ssrfPolicy.dangerouslyAllowPrivateNetwork: false` для суворої навігації browser лише по public endpoints.
+- У суворому режимі endpoints remote CDP profile (`profiles.*.cdpUrl`) підпадають під ті самі обмеження private-network під час reachability/discovery checks.
+- `ssrfPolicy.allowPrivateNetwork` залишається підтримуваним як legacy alias.
+- У суворому режимі використовуйте `ssrfPolicy.hostnameAllowlist` і `ssrfPolicy.allowedHostnames` для явних винятків.
+- Remote profiles доступні лише для attach (start/stop/reset вимкнено).
+- `profiles.*.cdpUrl` приймає `http://`, `https://`, `ws://` і `wss://`.
+ Використовуйте HTTP(S), коли хочете, щоб OpenClaw виявив `/json/version`; використовуйте WS(S),
+ коли ваш provider дає вам прямий DevTools WebSocket URL.
+- Профілі `existing-session` працюють лише на хості та використовують Chrome MCP замість CDP.
+- Профілі `existing-session` можуть задавати `userDataDir`, щоб націлюватися на конкретний
+ профіль Chromium-based browser, наприклад Brave або Edge.
+- Проф
\ No newline at end of file