diff --git a/docs/uk/channels/slack.md b/docs/uk/channels/slack.md
index 2a94a8bf4..3828b1d8f 100644
--- a/docs/uk/channels/slack.md
+++ b/docs/uk/channels/slack.md
@@ -1,29 +1,29 @@
---
read_when:
- - Налаштування Slack або налагодження режиму Slack socket/HTTP
+ - Налаштування Slack або налагодження режиму socket/HTTP у Slack
summary: Налаштування Slack і поведінка під час виконання (Socket Mode + HTTP Request URLs)
title: Slack
x-i18n:
- generated_at: "2026-04-07T00:08:10Z"
+ generated_at: "2026-04-08T05:00:50Z"
model: gpt-5.4
provider: openai
- source_hash: 2b8fd2cc6c638ee82069f0af2c2b6f6f49c87da709b941433a0343724a9907ea
+ source_hash: cad132131ddce688517def7c14703ad314441c67aacc4cc2a2a721e1d1c01942
source_path: channels/slack.md
workflow: 15
---
# Slack
-Статус: готово до продакшну для приватних повідомлень і каналів через інтеграції застосунку Slack. Типовий режим — Socket Mode; HTTP Request URLs також підтримуються.
+Статус: готовий до production для DM + каналів через інтеграції застосунку Slack. Режим за замовчуванням — Socket Mode; HTTP Request URLs також підтримуються.
- Приватні повідомлення Slack типово працюють у режимі сполучення.
+ Для Slack DM за замовчуванням використовується режим сполучення.
- Нативна поведінка команд і каталог команд.
+ Власна поведінка команд і каталог команд.
-
+
Міжканальна діагностика та сценарії відновлення.
@@ -31,15 +31,15 @@ x-i18n:
## Швидке налаштування
-
+
У налаштуваннях застосунку Slack натисніть кнопку **[Create New App](https://api.slack.com/apps/new)**:
- - виберіть **from a manifest** і виберіть робочий простір для вашого застосунку
+ - виберіть **from a manifest** і виберіть workspace для вашого застосунку
- вставте [приклад manifest](#manifest-and-scope-checklist) нижче та продовжте створення
- згенеруйте **App-Level Token** (`xapp-...`) з `connections:write`
- - установіть застосунок і скопіюйте показаний **Bot Token** (`xoxb-...`)
+ - встановіть застосунок і скопіюйте показаний **Bot Token** (`xoxb-...`)
@@ -57,7 +57,7 @@ x-i18n:
}
```
- Резервне джерело через env (лише для типового облікового запису):
+ Резервне значення env (лише для облікового запису за замовчуванням):
```bash
SLACK_APP_TOKEN=xapp-...
@@ -82,10 +82,10 @@ openclaw gateway
У налаштуваннях застосунку Slack натисніть кнопку **[Create New App](https://api.slack.com/apps/new)**:
- - виберіть **from a manifest** і виберіть робочий простір для вашого застосунку
+ - виберіть **from a manifest** і виберіть workspace для вашого застосунку
- вставте [приклад manifest](#manifest-and-scope-checklist) і оновіть URL-адреси перед створенням
- збережіть **Signing Secret** для перевірки запитів
- - установіть застосунок і скопіюйте показаний **Bot Token** (`xoxb-...`)
+ - встановіть застосунок і скопіюйте показаний **Bot Token** (`xoxb-...`)
@@ -106,9 +106,9 @@ openclaw gateway
```
- Використовуйте унікальні шляхи webhook для багатьох HTTP-облікових записів
+ Використовуйте унікальні webhook path для багатьох HTTP-облікових записів
- Надайте кожному обліковому запису окремий `webhookPath` (типово `/slack/events`), щоб реєстрації не конфліктували.
+ Надайте кожному обліковому запису окремий `webhookPath` (за замовчуванням `/slack/events`), щоб реєстрації не конфліктували.
@@ -128,7 +128,7 @@ openclaw gateway
## Контрольний список manifest і scope
-
+
```json
{
@@ -291,12 +291,12 @@ openclaw gateway
- Додайте bot scope `chat:write.customize`, якщо хочете, щоб вихідні повідомлення використовували ідентичність активного агента (власне ім’я користувача та значок) замість типової ідентичності застосунку Slack.
+ Додайте bot scope `chat:write.customize`, якщо хочете, щоб вихідні повідомлення використовували ідентичність активного агента (власне ім’я користувача та піктограму) замість стандартної ідентичності застосунку Slack.
- Якщо ви використовуєте значок emoji, Slack очікує синтаксис `:emoji_name:`.
+ Якщо ви використовуєте піктограму emoji, Slack очікує синтаксис `:emoji_name:`.
-
- Якщо ви налаштовуєте `channels.slack.userToken`, типовими scopes для читання є:
+
+ Якщо ви налаштували `channels.slack.userToken`, типовими scopes читання є:
- `channels:history`, `groups:history`, `im:history`, `mpim:history`
- `channels:read`, `groups:read`, `im:read`, `mpim:read`
@@ -304,44 +304,45 @@ openclaw gateway
- `reactions:read`
- `pins:read`
- `emoji:read`
- - `search:read` (якщо ви залежите від читання через Slack search)
+ - `search:read` (якщо ви залежите від читання пошуку Slack)
## Модель токенів
-- `botToken` + `appToken` обов’язкові для Socket Mode.
-- Для режиму HTTP потрібні `botToken` + `signingSecret`.
-- `botToken`, `appToken`, `signingSecret` і `userToken` приймають відкриті
+- `botToken` + `appToken` потрібні для Socket Mode.
+- Для HTTP mode потрібні `botToken` + `signingSecret`.
+- `botToken`, `appToken`, `signingSecret` і `userToken` приймають звичайні
рядки або об’єкти SecretRef.
-- Токени в конфігурації мають пріоритет над резервним джерелом через env.
-- Резервне джерело через env `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` застосовується лише до типового облікового запису.
-- `userToken` (`xoxp-...`) доступний лише в конфігурації (без резервного джерела через env) і типово працює в режимі лише для читання (`userTokenReadOnly: true`).
+- Токени конфігурації мають пріоритет над резервними значеннями env.
+- Резервні значення env `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` застосовуються лише до облікового запису за замовчуванням.
+- `userToken` (`xoxp-...`) доступний лише в конфігурації (без резервного значення env) і за замовчуванням працює в режимі лише для читання (`userTokenReadOnly: true`).
-Поведінка знімка статусу:
+Поведінка знімка стану:
-- Перевірка облікового запису Slack відстежує поля `*Source` і `*Status`
- для кожного облікового запису (`botToken`, `appToken`, `signingSecret`, `userToken`).
+- Перевірка облікового запису Slack відстежує для кожного облікового
+ даного поля `*Source` і `*Status`
+ (`botToken`, `appToken`, `signingSecret`, `userToken`).
- Статус може бути `available`, `configured_unavailable` або `missing`.
-- `configured_unavailable` означає, що обліковий запис налаштовано через SecretRef
- або інше не вбудоване джерело секрету, але поточна команда/шлях виконання
+- `configured_unavailable` означає, що обліковий запис налаштований через SecretRef
+ або інше не-inline джерело секретів, але поточний шлях команди/виконання
не зміг визначити фактичне значення.
-- У режимі HTTP включається `signingSecretStatus`; у Socket Mode
- обов’язковою парою є `botTokenStatus` + `appTokenStatus`.
+- У HTTP mode додається `signingSecretStatus`; у Socket Mode
+ потрібною парою є `botTokenStatus` + `appTokenStatus`.
-Для дій/читання каталогу user token може мати пріоритет, якщо його налаштовано. Для запису bot token залишається пріоритетним; запис через user token дозволено лише коли `userTokenReadOnly: false` і bot token недоступний.
+Для дій/читання каталогу може надаватися перевага user token, якщо його налаштовано. Для запису перевага зберігається за bot token; запис через user token дозволений лише коли `userTokenReadOnly: false`, а bot token недоступний.
## Дії та обмеження
-Дії Slack контролюються через `channels.slack.actions.*`.
+Дії Slack керуються через `channels.slack.actions.*`.
Доступні групи дій у поточному інструментарії Slack:
-| Група | Типово |
-| ---------- | ------- |
+| Група | За замовчуванням |
+| ---------- | ---------------- |
| messages | увімкнено |
| reactions | увімкнено |
| pins | увімкнено |
@@ -350,32 +351,32 @@ openclaw gateway
Поточні дії з повідомленнями Slack включають `send`, `upload-file`, `download-file`, `read`, `edit`, `delete`, `pin`, `unpin`, `list-pins`, `member-info` і `emoji-list`.
-## Керування доступом і маршрутизація
+## Контроль доступу та маршрутизація
-
- `channels.slack.dmPolicy` керує доступом до приватних повідомлень (застаріле: `channels.slack.dm.policy`):
+
+ `channels.slack.dmPolicy` керує доступом до DM (застаріле: `channels.slack.dm.policy`):
- - `pairing` (типово)
+ - `pairing` (за замовчуванням)
- `allowlist`
- - `open` (потрібно, щоб `channels.slack.allowFrom` містив `"*"`; застаріле: `channels.slack.dm.allowFrom`)
+ - `open` (потребує, щоб `channels.slack.allowFrom` містив `"*"`; застаріле: `channels.slack.dm.allowFrom`)
- `disabled`
- Прапорці для приватних повідомлень:
+ Прапорці DM:
- - `dm.enabled` (типово true)
+ - `dm.enabled` (за замовчуванням true)
- `channels.slack.allowFrom` (рекомендовано)
- `dm.allowFrom` (застаріле)
- - `dm.groupEnabled` (групові приватні повідомлення типово false)
+ - `dm.groupEnabled` (групові DM за замовчуванням false)
- `dm.groupChannels` (необов’язковий allowlist MPIM)
- Пріоритет для кількох облікових записів:
+ Пріоритет для багатьох облікових записів:
- `channels.slack.accounts.default.allowFrom` застосовується лише до облікового запису `default`.
- Іменовані облікові записи успадковують `channels.slack.allowFrom`, якщо їхній власний `allowFrom` не задано.
- Іменовані облікові записи не успадковують `channels.slack.accounts.default.allowFrom`.
- Для сполучення в приватних повідомленнях використовується `openclaw pairing approve slack `.
+ Для сполучення в DM використовується `openclaw pairing approve slack `.
@@ -388,26 +389,26 @@ openclaw gateway
Allowlist каналів розміщується в `channels.slack.channels` і має використовувати стабільні ID каналів.
- Примітка щодо виконання: якщо `channels.slack` повністю відсутній (налаштування лише через env), під час виконання використовується резервне значення `groupPolicy="allowlist"` і записується попередження в журнал (навіть якщо встановлено `channels.defaults.groupPolicy`).
+ Примітка щодо виконання: якщо `channels.slack` повністю відсутній (налаштування лише через env), під час виконання використовується резервне значення `groupPolicy="allowlist"` і записується попередження в журнал (навіть якщо задано `channels.defaults.groupPolicy`).
Визначення імен/ID:
- - записи allowlist каналів і allowlist приватних повідомлень визначаються під час запуску, якщо доступ токена це дозволяє
- - записи з невизначеними іменами каналів зберігаються як налаштовані, але типово ігноруються для маршрутизації
- - вхідна авторизація та маршрутизація каналів типово орієнтовані на ID; пряме зіставлення за ім’ям користувача/slug потребує `channels.slack.dangerouslyAllowNameMatching: true`
+ - записи allowlist каналів і DM allowlist визначаються під час запуску, якщо доступ токена це дозволяє
+ - нерозв’язані записи назв каналів зберігаються як налаштовані, але за замовчуванням ігноруються для маршрутизації
+ - вхідна авторизація та маршрутизація каналів за замовчуванням орієнтуються на ID; пряме зіставлення імені користувача/slug потребує `channels.slack.dangerouslyAllowNameMatching: true`
-
- Повідомлення в каналах типово обмежуються згадками.
+
+ Повідомлення в каналах за замовчуванням обмежуються згадками.
Джерела згадок:
- явна згадка застосунку (`<@botId>`)
- - шаблони regex для згадок (`agents.list[].groupChat.mentionPatterns`, резервно `messages.groupChat.mentionPatterns`)
- - неявна поведінка reply-to-bot у тредах (вимикається, коли `thread.requireExplicitMention` має значення `true`)
+ - шаблони regex для згадок (`agents.list[].groupChat.mentionPatterns`, резервне значення `messages.groupChat.mentionPatterns`)
+ - неявна поведінка відповіді в треді на бота (вимикається, коли `thread.requireExplicitMention` має значення `true`)
- Елементи керування для кожного каналу (`channels.slack.channels.`; імена лише через визначення під час запуску або `dangerouslyAllowNameMatching`):
+ Керування для кожного каналу (`channels.slack.channels.`; імена лише через визначення під час запуску або `dangerouslyAllowNameMatching`):
- `requireMention`
- `users` (allowlist)
@@ -415,36 +416,36 @@ openclaw gateway
- `skills`
- `systemPrompt`
- `tools`, `toolsBySender`
- - формат ключів `toolsBySender`: `id:`, `e164:`, `username:`, `name:` або шаблон `"*"`
+ - формат ключа `toolsBySender`: `id:`, `e164:`, `username:`, `name:` або шаблон `"*"`
(застарілі ключі без префікса все ще зіставляються лише з `id:`)
-## Треди, сесії та теги reply
+## Треди, сесії та теги відповіді
-- Приватні повідомлення маршрутизуються як `direct`; канали — як `channel`; MPIM — як `group`.
-- Із типовим `session.dmScope=main` приватні повідомлення Slack згортаються в основну сесію агента.
+- DM маршрутизуються як `direct`; канали — як `channel`; MPIM — як `group`.
+- Із типовим `session.dmScope=main` Slack DM згортаються до основної сесії агента.
- Сесії каналів: `agent::slack:channel:`.
-- Відповіді в тредах можуть створювати суфікси сесій тредів (`:thread:`), де це застосовно.
-- Типове значення `channels.slack.thread.historyScope` — `thread`; типове значення `thread.inheritParent` — `false`.
-- `channels.slack.thread.initialHistoryLimit` керує кількістю наявних повідомлень треду, які отримуються під час запуску нової сесії треду (типово `20`; установіть `0`, щоб вимкнути).
-- `channels.slack.thread.requireExplicitMention` (типово `false`): коли має значення `true`, пригнічує неявні згадки в тредах, тож бот відповідає лише на явні згадки `@bot` усередині тредів, навіть якщо бот уже брав участь у треді. Без цього відповіді в треді, де брав участь бот, обходять обмеження `requireMention`.
+- Відповіді в треді можуть створювати суфікси сесії треду (`:thread:`), коли це застосовно.
+- Для `channels.slack.thread.historyScope` значення за замовчуванням — `thread`; для `thread.inheritParent` — `false`.
+- `channels.slack.thread.initialHistoryLimit` керує кількістю наявних повідомлень треду, які отримуються під час запуску нової сесії треду (за замовчуванням `20`; задайте `0`, щоб вимкнути).
+- `channels.slack.thread.requireExplicitMention` (за замовчуванням `false`): коли має значення `true`, неявні згадки в треді пригнічуються, тому бот відповідає лише на явні згадки `@bot` усередині тредів, навіть якщо бот уже брав участь у треді. Без цього відповіді в треді, де брав участь бот, обходять обмеження `requireMention`.
-Елементи керування тредами відповідей:
+Керування тредами відповідей:
-- `channels.slack.replyToMode`: `off|first|all|batched` (типово `off`)
+- `channels.slack.replyToMode`: `off|first|all|batched` (за замовчуванням `off`)
- `channels.slack.replyToModeByChatType`: для кожного `direct|group|channel`
- застаріле резервне значення для прямих чатів: `channels.slack.dm.replyToMode`
-Підтримуються ручні теги reply:
+Підтримуються ручні теги відповіді:
- `[[reply_to_current]]`
- `[[reply_to:]]`
-Примітка: `replyToMode="off"` вимикає **усі** треди відповідей у Slack, включно з явними тегами `[[reply_to_*]]`. Це відрізняється від Telegram, де явні теги все одно враховуються в режимі `"off"`. Різниця відображає моделі тредів платформ: у Slack треди приховують повідомлення з каналу, тоді як у Telegram replies залишаються видимими в основному потоці чату.
+Примітка: `replyToMode="off"` вимикає **усі** треди відповідей у Slack, включно з явними тегами `[[reply_to_*]]`. Це відрізняється від Telegram, де явні теги все одно враховуються в режимі `"off"`. Різниця відображає моделі тредів на цих платформах: у Slack треди приховують повідомлення з каналу, тоді як у Telegram відповіді залишаються видимими в основному потоці чату.
-## Ack-реакції
+## Реакції підтвердження
`ackReaction` надсилає emoji-підтвердження, поки OpenClaw обробляє вхідне повідомлення.
@@ -453,36 +454,40 @@ openclaw gateway
- `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:
-- `off`: вимкнути live preview streaming.
-- `partial` (типово): замінювати текст попереднього перегляду останнім частковим виводом.
+- `off`: вимкнути потокову live preview.
+- `partial` (за замовчуванням): замінювати текст попереднього перегляду останнім частковим виводом.
- `block`: додавати фрагментовані оновлення попереднього перегляду.
-- `progress`: показувати текст стану прогресу під час генерації, а потім надсилати фінальний текст.
+- `progress`: показувати текст статусу прогресу під час генерації, а потім надсилати остаточний текст.
-`channels.slack.nativeStreaming` керує нативною потоковою передачею тексту Slack, коли `streaming` має значення `partial` (типово: `true`).
+`channels.slack.streaming.nativeTransport` керує нативною потоковою передачею тексту Slack, коли `channels.slack.streaming.mode` має значення `partial` (за замовчуванням: `true`).
-- Щоб з’явилася нативна потокова передача тексту, має бути доступний тред відповіді. Вибір треду, як і раніше, підпорядковується `replyToMode`. Без нього використовується звичайний чернетковий попередній перегляд.
-- Медіа та нетекстові корисні навантаження повертаються до звичайної доставки.
-- Якщо потокова передача зламається посеред відповіді, OpenClaw повернеться до звичайної доставки для решти корисних навантажень.
+- Для нативної потокової передачі тексту та відображення статусу треду Slack assistant має бути доступний тред відповіді. Вибір треду все одно підпорядковується `replyToMode`.
+- Кореневі повідомлення каналів і групових чатів усе ще можуть використовувати звичайний чернетковий preview, коли нативна потокова передача недоступна.
+- DM у Slack верхнього рівня за замовчуванням залишаються поза тредом, тому не показують preview у стилі треду; використовуйте відповіді в треді або `typingReaction`, якщо хочете бачити прогрес там.
+- Для медіа та не текстових payload використовується звичайна доставка.
+- Якщо потокова передача зламається посеред відповіді, OpenClaw повернеться до звичайної доставки для решти payload.
-Використовуйте чернетковий попередній перегляд замість нативної потокової передачі тексту Slack:
+Використовуйте чернетковий preview замість нативної потокової передачі тексту Slack:
```json5
{
channels: {
slack: {
- streaming: "partial",
- nativeStreaming: false,
+ streaming: {
+ mode: "partial",
+ nativeTransport: false,
+ },
},
},
}
@@ -490,12 +495,13 @@ 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.mode`.
+- булеве `channels.slack.streaming` автоматично мігрується до `channels.slack.streaming.mode` і `channels.slack.streaming.nativeTransport`.
+- застаріле `channels.slack.nativeStreaming` автоматично мігрується до `channels.slack.streaming.nativeTransport`.
-## Резервний варіант з typing reaction
+## Резервна реакція введення
-`typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки OpenClaw обробляє відповідь, а потім видаляє її після завершення виконання. Це найкорисніше поза відповідями в тредах, де використовується типовий індикатор стану "is typing...".
+`typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки OpenClaw обробляє відповідь, а потім видаляє її, коли виконання завершується. Це особливо корисно поза відповідями в тредах, які використовують типовий індикатор статусу "is typing...".
Порядок визначення:
@@ -504,50 +510,50 @@ 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`.
+ Обмеження розміру вхідних даних під час виконання за замовчуванням становить `20MB`, якщо не перевизначено через `channels.slack.mediaMaxMb`.
- - текстові фрагменти використовують `channels.slack.textChunkLimit` (типово 4000)
+ - текстові частини використовують `channels.slack.textChunkLimit` (за замовчуванням 4000)
- `channels.slack.chunkMode="newline"` вмикає розбиття спочатку за абзацами
- - надсилання файлів використовує API завантаження Slack і може включати відповіді в тредах (`thread_ts`)
- - обмеження вихідних медіа дотримується `channels.slack.mediaMaxMb`, якщо налаштовано; інакше надсилання в канали використовують типові значення MIME-kind із конвеєра медіа
+ - надсилання файлів використовує API завантаження Slack і може включати відповіді в треді (`thread_ts`)
+ - обмеження вихідних медіа визначається `channels.slack.mediaMaxMb`, якщо налаштовано; інакше надсилання в канали використовує стандартні значення MIME-kind з media pipeline
- Бажані явні цілі:
+ Рекомендовані явні цілі:
- - `user:` для приватних повідомлень
+ - `user:` для DM
- `channel:` для каналів
- Приватні повідомлення Slack відкриваються через API бесід Slack під час надсилання до цілей користувача.
+ Slack DM відкриваються через API розмов Slack під час надсилання до цілей користувача.
## Команди та поведінка slash
-- Нативний автоматичний режим команд для Slack **вимкнено** (`commands.native: "auto"` не вмикає нативні команди Slack).
+- Автоматичний режим нативних команд **вимкнено** для Slack (`commands.native: "auto"` не вмикає нативні команди Slack).
- Увімкніть нативні обробники команд Slack через `channels.slack.commands.native: true` (або глобально `commands.native: true`).
-- Коли нативні команди ввімкнено, зареєструйте відповідні slash-команди у Slack (імена `/`), з одним винятком:
- - зареєструйте `/agentstatus` для команди status (Slack резервує `/status`)
-- Якщо нативні команди не ввімкнено, можна запускати одну налаштовану slash-команду через `channels.slack.slashCommand`.
-- Нативні меню аргументів тепер адаптують свою стратегію відображення:
+- Коли нативні команди ввімкнено, зареєструйте відповідні slash-команди у Slack (імена `/`), за одним винятком:
+ - зареєструйте `/agentstatus` для команди статусу (Slack резервує `/status`)
+- Якщо нативні команди не ввімкнено, ви можете запускати одну налаштовану slash-команду через `channels.slack.slashCommand`.
+- Нативні меню аргументів тепер адаптують свою стратегію рендерингу:
- до 5 варіантів: блоки кнопок
- 6-100 варіантів: статичне меню вибору
- - понад 100 варіантів: зовнішній вибір з асинхронною фільтрацією варіантів, якщо доступні обробники параметрів interactivity
+ - понад 100 варіантів: зовнішній вибір з асинхронною фільтрацією варіантів, коли доступні обробники параметрів interactivity
- якщо закодовані значення варіантів перевищують обмеження Slack, потік повертається до кнопок
-- Для довгих корисних навантажень варіантів меню аргументів slash-команд використовують діалог підтвердження перед відправленням вибраного значення.
+- Для довгих payload варіантів меню аргументів slash-команд використовують діалог підтвердження перед відправленням вибраного значення.
Типові параметри slash-команд:
@@ -560,11 +566,11 @@ openclaw gateway
- `agent::slack:slash:`
-і все ще маршрутизують виконання команд відносно сесії цільової бесіди (`CommandTargetSessionKey`).
+і все одно маршрутизують виконання команд до сесії цільової розмови (`CommandTargetSessionKey`).
## Інтерактивні відповіді
-Slack може відображати інтерактивні елементи керування відповідями, створеними агентом, але цю функцію типово вимкнено.
+Slack може відображати інтерактивні елементи відповіді, створені агентом, але ця можливість за замовчуванням вимкнена.
Увімкніть її глобально:
@@ -580,7 +586,7 @@ Slack може відображати інтерактивні елементи
}
```
-Або ввімкніть її лише для одного облікового запису Slack:
+Або увімкніть її лише для одного облікового запису Slack:
```json5
{
@@ -598,7 +604,7 @@ Slack може відображати інтерактивні елементи
}
```
-Коли функцію ввімкнено, агенти можуть надсилати директиви відповідей лише для Slack:
+Коли можливість увімкнено, агенти можуть виводити директиви відповіді лише для Slack:
- `[[slack_buttons: Approve:approve, Reject:reject]]`
- `[[slack_select: Choose a target | Canary:canary, Production:production]]`
@@ -609,33 +615,32 @@ Slack може відображати інтерактивні елементи
- Це UI, специфічний для Slack. Інші канали не перекладають директиви Slack Block Kit у власні системи кнопок.
- Значення інтерактивних callback — це непрозорі токени, згенеровані OpenClaw, а не необроблені значення, створені агентом.
-- Якщо згенеровані інтерактивні блоки перевищать обмеження Slack Block Kit, OpenClaw повернеться до початкової текстової відповіді замість надсилання недійсного корисного навантаження blocks.
+- Якщо згенеровані інтерактивні блоки перевищують обмеження Slack Block Kit, OpenClaw повертається до початкової текстової відповіді замість надсилання невалідного payload блоків.
-## Погодження exec у Slack
+## Exec approvals у Slack
-Slack може діяти як нативний клієнт погодження з інтерактивними кнопками та взаємодіями замість повернення до Web UI або термінала.
+Slack може діяти як нативний клієнт схвалення з інтерактивними кнопками та взаємодіями замість повернення до Web UI або термінала.
-- Погодження exec використовують `channels.slack.execApprovals.*` для нативної маршрутизації до приватних повідомлень/каналів.
-- Погодження plugin також можуть визначатися через ту саму поверхню нативних кнопок Slack, коли запит уже надходить у Slack, а тип ID погодження — `plugin:`.
-- Авторизація того, хто погоджує, як і раніше, примусово застосовується: лише користувачі, визначені як approvers, можуть погоджувати або відхиляти запити через Slack.
+- Для нативної маршрутизації в DM/каналах exec approvals використовують `channels.slack.execApprovals.*`.
+- Схвалення плагінів усе ще можуть визначатися через ту саму поверхню нативних кнопок Slack, коли запит уже надходить у Slack і вид ID схвалення є `plugin:`.
+- Авторизація того, хто схвалює, усе ще примусово застосовується: лише користувачі, визначені як approvers, можуть схвалювати або відхиляти запити через Slack.
-Це використовує ту саму спільну поверхню кнопок погодження, що й інші канали. Коли `interactivity` увімкнено в налаштуваннях вашого застосунку Slack, запити на погодження відображаються як кнопки Block Kit безпосередньо в бесіді.
-Коли ці кнопки присутні, вони є основним UX погодження; OpenClaw
-має включати ручну команду `/approve` лише тоді, коли результат інструмента вказує, що
-погодження в чаті недоступні або ручне погодження є єдиним шляхом.
+Це використовує ту саму спільну поверхню кнопок схвалення, що й інші канали. Коли у налаштуваннях застосунку Slack увімкнено `interactivity`, запити на схвалення відображаються як кнопки Block Kit безпосередньо в розмові.
+Коли ці кнопки присутні, вони є основним UX схвалення; OpenClaw
+має включати ручну команду `/approve` лише тоді, коли результат інструмента вказує, що схвалення в чаті недоступні або ручне схвалення є єдиним шляхом.
Шлях конфігурації:
- `channels.slack.execApprovals.enabled`
-- `channels.slack.execApprovals.approvers` (необов’язково; за можливості повертається до `commands.ownerAllowFrom`)
-- `channels.slack.execApprovals.target` (`dm` | `channel` | `both`, типово: `dm`)
+- `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 approvals, коли `enabled` не задано або має значення `"auto"` і визначається принаймні один
+approver. Встановіть `enabled: false`, щоб явно вимкнути Slack як нативний клієнт схвалення.
+Встановіть `enabled: true`, щоб примусово ввімкнути нативні схвалення, коли визначаються approvers.
-Типова поведінка без явної конфігурації погодження exec для Slack:
+Поведінка за замовчуванням без явної конфігурації Slack exec approval:
```json5
{
@@ -646,7 +651,7 @@ approver. Установіть `enabled: false`, щоб явно вимкнут
```
Явна нативна конфігурація Slack потрібна лише тоді, коли ви хочете перевизначити approvers, додати фільтри або
-вибрати доставку в чат походження:
+використовувати доставку до чату-джерела:
```json5
{
@@ -662,38 +667,38 @@ approver. Установіть `enabled: false`, щоб явно вимкнут
}
```
-Спільне переспрямування `approvals.exec` є окремим. Використовуйте його лише тоді, коли запити на погодження exec також мають
-маршрутизуватися до інших чатів або явних цілей поза основним каналом. Спільне переспрямування `approvals.plugin` також є
-окремим; нативні кнопки Slack усе ще можуть визначати погодження plugin, коли ці запити вже надходять
+Спільне пересилання `approvals.exec` є окремим. Використовуйте його лише тоді, коли запити на exec approval також мають
+маршрутизуватися до інших чатів або явних цілей поза основним каналом. Спільне пересилання `approvals.plugin` також є
+окремим; нативні кнопки Slack усе ще можуть визначати схвалення плагінів, коли ці запити вже надходять
у Slack.
-Команда `/approve` у тому самому чаті також працює в каналах і приватних повідомленнях Slack, які вже підтримують команди. Див. [Погодження exec](/uk/tools/exec-approvals), щоб ознайомитися з повною моделлю переспрямування погоджень.
+Така сама `/approve` у тому самому чаті також працює в каналах і DM Slack, які вже підтримують команди. Див. [Exec approvals](/uk/tools/exec-approvals), щоб ознайомитися з повною моделлю пересилання схвалень.
## Події та операційна поведінка
-- Редагування/видалення повідомлень і трансляції тредів зіставляються із системними подіями.
+- Редагування/видалення повідомлень і thread broadcast зіставляються із системними подіями.
- Події додавання/видалення реакцій зіставляються із системними подіями.
-- Події входу/виходу учасників, створення/перейменування каналів і додавання/видалення закріплень зіставляються із системними подіями.
+- Події приєднання/виходу учасника, створення/перейменування каналу та додавання/видалення pin зіставляються із системними подіями.
- `channel_id_changed` може мігрувати ключі конфігурації каналу, коли ввімкнено `configWrites`.
-- Метадані теми/призначення каналу вважаються недовіреним контекстом і можуть бути ін’єктовані в контекст маршрутизації.
-- Початкове повідомлення треду та початкове заповнення контексту історії треду фільтруються відповідно до налаштованих allowlist відправників, де це застосовно.
-- Дії block і взаємодії modal створюють структуровані системні події `Slack interaction: ...` із насиченими полями корисного навантаження:
+- Метадані topic/purpose каналу вважаються ненадійним контекстом і можуть бути впроваджені в контекст маршрутизації.
+- Початок треду й початкове заповнення контексту історії треду фільтруються відповідно до налаштованих allowlist відправників, якщо це застосовно.
+- Дії block і взаємодії modal створюють структуровані системні події `Slack interaction: ...` з насиченими полями payload:
- дії block: вибрані значення, мітки, значення picker і метадані `workflow_*`
- - події modal `view_submission` і `view_closed` з маршрутизованими метаданими каналу та введеними значеннями форми
+ - події modal `view_submission` і `view_closed` з маршрутизованими метаданими каналу та введеними даними форми
-## Вказівники на довідкову конфігурацію
+## Вказівники на довідник конфігурації
-Основне посилання:
+Основний довідник:
- [Довідник конфігурації - Slack](/uk/gateway/configuration-reference#slack)
- Високосигнальні поля Slack:
+ Основні поля Slack:
- mode/auth: `mode`, `botToken`, `appToken`, `signingSecret`, `webhookPath`, `accounts.*`
- - доступ до приватних повідомлень: `dm.enabled`, `dmPolicy`, `allowFrom` (застаріле: `dm.policy`, `dm.allowFrom`), `dm.groupEnabled`, `dm.groupChannels`
- - перемикач сумісності: `dangerouslyAllowNameMatching` (аварійний варіант; тримайте вимкненим, якщо не потрібно)
+ - доступ до DM: `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`
+ - доставка: `textChunkLimit`, `chunkMode`, `mediaMaxMb`, `streaming`, `streaming.nativeTransport`
- операції/можливості: `configWrites`, `commands.native`, `slashCommand.*`, `actions.*`, `userToken`, `userTokenReadOnly`
## Усунення проблем
@@ -705,7 +710,7 @@ approver. Установіть `enabled: false`, щоб явно вимкнут
- `groupPolicy`
- allowlist каналів (`channels.slack.channels`)
- `requireMention`
- - allowlist `users` для конкретного каналу
+ - allowlist `users` для кожного каналу
Корисні команди:
@@ -717,12 +722,12 @@ openclaw doctor
-
+
Перевірте:
- `channels.slack.dm.enabled`
- `channels.slack.dmPolicy` (або застаріле `channels.slack.dm.policy`)
- - дозволи сполучення / записи allowlist
+ - схвалення сполучення / записи allowlist
```bash
openclaw pairing list slack
@@ -730,32 +735,32 @@ openclaw pairing list slack
-
+
Перевірте bot token + app token і ввімкнення Socket Mode в налаштуваннях застосунку Slack.
Якщо `openclaw channels status --probe --json` показує `botTokenStatus` або
`appTokenStatus: "configured_unavailable"`, обліковий запис Slack
налаштовано, але поточне середовище виконання не змогло визначити значення,
- що підтримується SecretRef.
+ що використовує SecretRef.
-
+
Перевірте:
- signing secret
- - шлях webhook
+ - webhook path
- Slack Request URLs (Events + Interactivity + Slash Commands)
- унікальний `webhookPath` для кожного HTTP-облікового запису
Якщо `signingSecretStatus: "configured_unavailable"` з’являється у знімках
облікового запису, HTTP-обліковий запис налаштовано, але поточне середовище виконання не змогло
- визначити signing secret, що підтримується SecretRef.
+ визначити signing secret, що використовує SecretRef.
- Перевірте, чи ви справді мали на увазі:
+ Перевірте, який режим ви мали на увазі:
- режим нативних команд (`channels.slack.commands.native: true`) з відповідними slash-командами, зареєстрованими у Slack
- або режим однієї slash-команди (`channels.slack.slashCommand.enabled: true`)
@@ -765,7 +770,7 @@ openclaw pairing list slack
-## Пов’язані розділи
+## Пов’язане
- [Сполучення](/uk/channels/pairing)
- [Групи](/uk/channels/groups)
diff --git a/docs/uk/concepts/streaming.md b/docs/uk/concepts/streaming.md
index 5badf1c09..5d1bfb7c2 100644
--- a/docs/uk/concepts/streaming.md
+++ b/docs/uk/concepts/streaming.md
@@ -1,34 +1,34 @@
---
read_when:
- - Пояснення того, як працює streaming або chunking у каналах
- - Зміна поведінки block streaming або channel chunking
- - Налагодження дубльованих/передчасних блокових відповідей або preview streaming у каналах
-summary: Поведінка streaming + chunking (блокові відповіді, preview-streaming у каналах, зіставлення режимів)
-title: Streaming і chunking
+ - Пояснення того, як потокове передавання або розбиття на частини працює в каналах
+ - Зміна поведінки потокового передавання блоків або розбиття на частини в каналах
+ - Налагодження дубльованих/передчасних блокових відповідей або потокового передавання попереднього перегляду в каналах
+summary: Поведінка потокового передавання та розбиття на частини (блокові відповіді, потокове передавання попереднього перегляду в каналах, зіставлення режимів)
+title: Потокове передавання та розбиття на частини
x-i18n:
- generated_at: "2026-04-05T18:02:19Z"
+ generated_at: "2026-04-08T04:59:57Z"
model: gpt-5.4
provider: openai
- source_hash: 44b0d08c7eafcb32030ef7c8d5719c2ea2d34e4bac5fdad8cc8b3f4e9e9fad97
+ source_hash: a8e847bb7da890818cd79dec7777f6ae488e6d6c0468e948e56b6b6c598e0000
source_path: concepts/streaming.md
workflow: 15
---
-# Streaming + chunking
+# Потокове передавання та розбиття на частини
-OpenClaw має два окремі шари streaming:
+OpenClaw має два окремі шари потокового передавання:
-- **Block streaming (канали):** надсилає завершені **блоки**, поки асистент пише. Це звичайні повідомлення каналу (не дельти токенів).
-- **Preview streaming (Telegram/Discord/Slack):** оновлює тимчасове **preview message** під час генерації.
+- **Потокове передавання блоків (канали):** надсилає завершені **блоки**, поки помічник пише. Це звичайні повідомлення каналу (не дельти токенів).
+- **Потокове передавання попереднього перегляду (Telegram/Discord/Slack):** оновлює тимчасове **повідомлення попереднього перегляду** під час генерації.
-Справжнього streaming дельт токенів до повідомлень каналу сьогодні **немає**. Preview streaming працює на рівні повідомлень (надсилання + редагування/додавання).
+Справжнього **потокового передавання дельт токенів** у повідомлення каналів наразі **немає**. Потокове передавання попереднього перегляду є повідомлень-орієнтованим (надсилання + редагування/додавання).
-## Block streaming (повідомлення каналу)
+## Потокове передавання блоків (повідомлення каналів)
-Block streaming надсилає вихід асистента грубими фрагментами в міру його появи.
+Потокове передавання блоків надсилає вивід помічника великими частинами в міру його появи.
```
-Model output
+Вивід моделі
└─ text_delta/events
├─ (blockStreamingBreak=text_end)
│ └─ chunker emits blocks as buffer grows
@@ -39,130 +39,131 @@ Model output
Легенда:
-- `text_delta/events`: події потоку моделі (можуть бути рідкісними для моделей без streaming).
-- `chunker`: `EmbeddedBlockChunker`, який застосовує мінімальні/максимальні межі + пріоритет розриву.
+- `text_delta/events`: події потоку моделі (можуть бути рідкісними для моделей без потокового передавання).
+- `chunker`: `EmbeddedBlockChunker`, що застосовує мінімальні/максимальні межі + пріоритет розриву.
- `channel send`: фактичні вихідні повідомлення (блокові відповіді).
**Керування:**
- `agents.defaults.blockStreamingDefault`: `"on"`/`"off"` (типово вимкнено).
-- Перевизначення для каналів: `*.blockStreaming` (і варіанти для окремих облікових записів), щоб примусово задати `"on"`/`"off"` для кожного каналу.
+- Перевизначення для каналів: `*.blockStreaming` (і варіанти для окремих облікових записів), щоб примусово встановити `"on"`/`"off"` для кожного каналу.
- `agents.defaults.blockStreamingBreak`: `"text_end"` або `"message_end"`.
- `agents.defaults.blockStreamingChunk`: `{ minChars, maxChars, breakPreference? }`.
-- `agents.defaults.blockStreamingCoalesce`: `{ minChars?, maxChars?, idleMs? }` (об’єднання блоків streaming перед надсиланням).
+- `agents.defaults.blockStreamingCoalesce`: `{ minChars?, maxChars?, idleMs? }` (об’єднання потокових блоків перед надсиланням).
- Жорстке обмеження каналу: `*.textChunkLimit` (наприклад, `channels.whatsapp.textChunkLimit`).
-- Режим chunking каналу: `*.chunkMode` (`length` типово, `newline` ділить за порожніми рядками (межами абзаців) перед chunking за довжиною).
-- М’яке обмеження Discord: `channels.discord.maxLinesPerMessage` (типово 17) ділить високі відповіді, щоб уникнути обрізання в UI.
+- Режим розбиття на частини для каналу: `*.chunkMode` (`length` типово, `newline` розбиває за порожніми рядками (межами абзаців) перед розбиттям за довжиною).
+- М’яке обмеження Discord: `channels.discord.maxLinesPerMessage` (типово 17) розбиває високі відповіді, щоб уникнути обрізання в інтерфейсі.
**Семантика меж:**
-- `text_end`: передавати блоки в потоці, щойно їх видає chunker; flush на кожному `text_end`.
-- `message_end`: чекати, доки повідомлення асистента завершиться, а потім flush буферизований вихід.
+- `text_end`: передавати блоки потоком щойно `chunker` їх видає; скидати буфер на кожному `text_end`.
+- `message_end`: чекати, доки повідомлення помічника завершиться, а потім скидати буферизований вивід.
-`message_end` усе одно використовує chunker, якщо буферизований текст перевищує `maxChars`, тому наприкінці він може видати кілька chunk.
+`message_end` усе одно використовує `chunker`, якщо буферизований текст перевищує `maxChars`, тому наприкінці він може видати кілька частин.
-## Алгоритм chunking (нижня/верхня межі)
+## Алгоритм розбиття на частини (нижня/верхня межа)
-Block chunking реалізовано через `EmbeddedBlockChunker`:
+Розбиття блоків на частини реалізовано в `EmbeddedBlockChunker`:
-- **Нижня межа:** не видавати, доки буфер не досягне `minChars` (якщо не примусово).
-- **Верхня межа:** намагатися розривати до `maxChars`; якщо примусово, розривати на `maxChars`.
+- **Нижня межа:** не видавати нічого, доки буфер не стане >= `minChars` (якщо не примусово).
+- **Верхня межа:** намагатися розбивати до `maxChars`; якщо примусово, розбивати на `maxChars`.
- **Пріоритет розриву:** `paragraph` → `newline` → `sentence` → `whitespace` → жорсткий розрив.
-- **Code fences:** ніколи не розривати всередині fence; якщо розрив на `maxChars` примусовий, fence закривається й знову відкривається, щоб Markdown залишався коректним.
+- **Огородження коду:** ніколи не розбивати всередині огороджень; у разі примусового розриву на `maxChars` огородження закривається й знову відкривається, щоб Markdown залишався коректним.
-`maxChars` обмежується значенням `textChunkLimit` каналу, тому перевищити ліміти каналу не можна.
+`maxChars` обмежується значенням `textChunkLimit` каналу, тому перевищити обмеження для конкретного каналу неможливо.
-## Coalescing (об’єднання блоків streaming)
+## Об’єднання (злиття потокових блоків)
-Коли block streaming увімкнено, OpenClaw може **об’єднувати послідовні блокові chunk**
-перед їх надсиланням. Це зменшує «спам з однорядкових повідомлень», водночас
-зберігаючи поступовий вивід.
+Коли потокове передавання блоків увімкнене, OpenClaw може **об’єднувати послідовні блокові частини**
+перед їх надсиланням. Це зменшує «спам з одного рядка», водночас зберігаючи
+поступовий вивід.
-- Coalescing чекає **пауз без активності** (`idleMs`) перед flush.
-- Буфери обмежені `maxChars` і будуть скинуті, якщо перевищать його.
-- `minChars` не дає надсилати крихітні фрагменти, доки не накопичиться достатньо тексту
- (під час фінального flush залишковий текст надсилається завжди).
-- Joiner виводиться з `blockStreamingChunk.breakPreference`
+- Об’єднання чекає на **паузи бездіяльності** (`idleMs`) перед скиданням.
+- Буфери обмежуються значенням `maxChars` і буде виконано скидання, якщо їх перевищено.
+- `minChars` не дає надсилати дрібні фрагменти, доки не накопичиться достатньо тексту
+ (підсумкове скидання завжди надсилає решту тексту).
+- Роздільник визначається з `blockStreamingChunk.breakPreference`
(`paragraph` → `\n\n`, `newline` → `\n`, `sentence` → пробіл).
-- Для каналів доступні перевизначення через `*.blockStreamingCoalesce` (зокрема у конфігураціях для окремих облікових записів).
+- Перевизначення для каналів доступні через `*.blockStreamingCoalesce` (зокрема в конфігураціях окремих облікових записів).
- Типове значення coalesce `minChars` підвищується до 1500 для Signal/Slack/Discord, якщо не перевизначено.
## Людиноподібний темп між блоками
-Коли block streaming увімкнено, ви можете додати **випадкову паузу** між
-блоковими відповідями (після першого блока). Це робить багатобульбашкові відповіді
+Коли потокове передавання блоків увімкнене, можна додати **випадкову паузу** між
+блоковими відповідями (після першого блоку). Це робить відповіді з кількох бульбашок
природнішими.
-- Конфігурація: `agents.defaults.humanDelay` (можна перевизначити для окремого агента через `agents.list[].humanDelay`).
-- Режими: `off` (типово), `natural` (800–2500 мс), `custom` (`minMs`/`maxMs`).
+- Конфігурація: `agents.defaults.humanDelay` (перевизначення для агента через `agents.list[].humanDelay`).
+- Режими: `off` (типово), `natural` (800–2500ms), `custom` (`minMs`/`maxMs`).
- Застосовується лише до **блокових відповідей**, а не до фінальних відповідей чи підсумків інструментів.
-## "Передавати chunk-и чи все одразу"
+## «Передавати частинами чи все одразу»
Це зіставляється так:
-- **Передавати chunk-и:** `blockStreamingDefault: "on"` + `blockStreamingBreak: "text_end"` (видавати під час генерації). Для каналів, окрім Telegram, також потрібно `*.blockStreaming: true`.
-- **Передати все наприкінці:** `blockStreamingBreak: "message_end"` (одноразовий flush, можливо з кількома chunk, якщо текст дуже довгий).
-- **Без block streaming:** `blockStreamingDefault: "off"` (лише фінальна відповідь).
+- **Передавати частинами:** `blockStreamingDefault: "on"` + `blockStreamingBreak: "text_end"` (передавання в міру надходження). Для каналів, крім Telegram, також потрібно `*.blockStreaming: true`.
+- **Передати все наприкінці:** `blockStreamingBreak: "message_end"` (одноразове скидання, можливо кількома частинами, якщо відповідь дуже довга).
+- **Без потокового передавання блоків:** `blockStreamingDefault: "off"` (лише фінальна відповідь).
-**Примітка про канал:** Block streaming **вимкнено, якщо тільки**
-`*.blockStreaming` явно не задано як `true`. Канали можуть вести live preview streaming
+**Примітка щодо каналів:** Потокове передавання блоків **вимкнене, доки**
+`*.blockStreaming` явно не встановлено в `true`. Канали можуть передавати живий попередній перегляд
(`channels..streaming`) без блокових відповідей.
-Нагадування про місце конфігурації: типові значення `blockStreaming*` розміщуються в
+Нагадування про розташування конфігурації: типові параметри `blockStreaming*` знаходяться в
`agents.defaults`, а не в корені конфігурації.
-## Режими preview streaming
+## Режими потокового передавання попереднього перегляду
Канонічний ключ: `channels..streaming`
Режими:
-- `off`: вимкнути preview streaming.
-- `partial`: одне preview, яке замінюється найновішим текстом.
-- `block`: preview оновлюється chunk-ами/додаваннями.
-- `progress`: preview прогресу/статусу під час генерації, фінальна відповідь після завершення.
+- `off`: вимкнути потокове передавання попереднього перегляду.
+- `partial`: один попередній перегляд, який замінюється найновішим текстом.
+- `block`: оновлення попереднього перегляду поетапно, частинами/додаванням.
+- `progress`: попередній перегляд прогресу/стану під час генерації, фінальна відповідь після завершення.
### Зіставлення каналів
-| Канал | `off` | `partial` | `block` | `progress` |
-| -------- | ----- | --------- | ------- | ----------------- |
+| Канал | `off` | `partial` | `block` | `progress` |
+| ------- | ----- | --------- | ------- | ----------------- |
| Telegram | ✅ | ✅ | ✅ | зіставляється з `partial` |
| Discord | ✅ | ✅ | ✅ | зіставляється з `partial` |
| Slack | ✅ | ✅ | ✅ | ✅ |
Лише для Slack:
-- `channels.slack.nativeStreaming` перемикає нативні виклики API streaming Slack, коли `streaming=partial` (типово: `true`).
+- `channels.slack.streaming.nativeTransport` перемикає виклики нативного API потокового передавання Slack, коли `channels.slack.streaming.mode="partial"` (типово: `true`).
+- Нативне потокове передавання Slack і статус у потоці помічника Slack вимагають цільового потоку відповіді; DM верхнього рівня не показують такий попередній перегляд у стилі потоку.
Міграція застарілих ключів:
-- Telegram: `streamMode` + булевий `streaming` автоматично мігрують до enum `streaming`.
-- Discord: `streamMode` + булевий `streaming` автоматично мігрують до enum `streaming`.
-- Slack: `streamMode` автоматично мігрує до enum `streaming`; булевий `streaming` автоматично мігрує до `nativeStreaming`.
+- Telegram: `streamMode` і булеве `streaming` автоматично мігрують у enum `streaming`.
+- Discord: `streamMode` і булеве `streaming` автоматично мігрують у enum `streaming`.
+- Slack: `streamMode` автоматично мігрує до `streaming.mode`; булеве `streaming` автоматично мігрує до `streaming.mode` плюс `streaming.nativeTransport`; застаріле `nativeStreaming` автоматично мігрує до `streaming.nativeTransport`.
-### Поведінка runtime
+### Поведінка під час виконання
Telegram:
-- Використовує `sendMessage` + `editMessageText` для оновлення preview у DM і групах/темах.
-- Preview streaming пропускається, якщо block streaming Telegram явно увімкнено (щоб уникнути подвійного streaming).
-- `/reasoning stream` може записувати міркування в preview.
+- Використовує оновлення попереднього перегляду через `sendMessage` + `editMessageText` у DM та групах/темах.
+- Потокове передавання попереднього перегляду пропускається, якщо для Telegram явно ввімкнено потокове передавання блоків (щоб уникнути подвійного потокового передавання).
+- `/reasoning stream` може записувати міркування в попередній перегляд.
Discord:
-- Використовує надсилання + редагування preview message.
-- Режим `block` використовує chunking чернетки (`draftChunk`).
-- Preview streaming пропускається, якщо block streaming Discord явно увімкнено.
+- Використовує надсилання + редагування повідомлень попереднього перегляду.
+- Режим `block` використовує чернеткове розбиття на частини (`draftChunk`).
+- Потокове передавання попереднього перегляду пропускається, якщо для Discord явно ввімкнено потокове передавання блоків.
Slack:
-- `partial` може використовувати нативний streaming Slack (`chat.startStream`/`append`/`stop`), коли доступно.
-- `block` використовує preview чернетки у стилі append.
-- `progress` використовує preview тексту статусу, а потім фінальну відповідь.
+- `partial` може використовувати нативне потокове передавання Slack (`chat.startStream`/`append`/`stop`), коли воно доступне.
+- `block` використовує попередні перегляди чернеток у стилі додавання.
+- `progress` використовує текст попереднього перегляду стану, а потім фінальну відповідь.
## Пов’язане
-- [Повідомлення](/concepts/messages) — життєвий цикл і доставка повідомлень
-- [Повторні спроби](/concepts/retry) — поведінка повторних спроб у разі збою доставки
-- [Канали](/channels) — підтримка streaming для окремих каналів
+- [Повідомлення](/uk/concepts/messages) — життєвий цикл і доставка повідомлень
+- [Повторна спроба](/uk/concepts/retry) — поведінка повторних спроб у разі помилки доставки
+- [Канали](/uk/channels) — підтримка потокового передавання для кожного каналу
diff --git a/docs/uk/gateway/configuration-reference.md b/docs/uk/gateway/configuration-reference.md
index d2c1e5c39..485936650 100644
--- a/docs/uk/gateway/configuration-reference.md
+++ b/docs/uk/gateway/configuration-reference.md
@@ -1,29 +1,43 @@
---
read_when:
- - Вам потрібні точні семантики конфігурації або значення за замовчуванням на рівні полів
+ - Вам потрібна точна семантика полів конфігурації або значення за замовчуванням
- Ви перевіряєте блоки конфігурації каналів, моделей, шлюзу або інструментів
-summary: Повний довідник для кожного ключа конфігурації OpenClaw, значень за замовчуванням і налаштувань каналів
+summary: Довідник з конфігурації шлюзу для основних ключів OpenClaw, значень за замовчуванням і посилань на окремі довідники підсистем
title: Довідник з конфігурації
x-i18n:
- generated_at: "2026-04-08T03:51:43Z"
+ generated_at: "2026-04-08T05:05:30Z"
model: gpt-5.4
provider: openai
- source_hash: a22899b8f43a7819a2e27fae1bddbe67b29b314bce5a9844fc276482bda9156c
+ source_hash: 2f9ab34fb56897a77cb038d95bea21e8530d8f0402b66d1ee97c73822a1e8fd4
source_path: gateway/configuration-reference.md
workflow: 15
---
# Довідник з конфігурації
-Кожне поле, доступне в `~/.openclaw/openclaw.json`. Для огляду, орієнтованого на завдання, див. [Конфігурація](/uk/gateway/configuration).
+Основний довідник з конфігурації для `~/.openclaw/openclaw.json`. Для огляду, орієнтованого на завдання, див. [Конфігурація](/uk/gateway/configuration).
-Формат конфігурації — **JSON5** (дозволені коментарі та кінцеві коми). Усі поля необов’язкові — OpenClaw використовує безпечні значення за замовчуванням, якщо їх не вказано.
+Ця сторінка охоплює основні поверхні конфігурації OpenClaw і надає посилання назовні, коли підсистема має власний детальніший довідник. Вона **не** намагається вбудувати на одній сторінці кожен каталог команд, що належить каналу/плагіну, або кожен глибокий параметр memory/QMD.
+
+Джерело істини в коді:
+
+- `openclaw config schema` виводить актуальну JSON Schema, що використовується для валідації та Control UI, із доданими метаданими bundled/plugin/channel, коли вони доступні
+- `config.schema.lookup` повертає один вузол схеми, обмежений шляхом, для інструментів деталізації
+- `pnpm config:docs:check` / `pnpm config:docs:gen` перевіряють хеш базового стану документації конфігурації щодо поточної поверхні схеми
+
+Окремі поглиблені довідники:
+
+- [Довідник з конфігурації пам’яті](/uk/reference/memory-config) для `agents.defaults.memorySearch.*`, `memory.qmd.*`, `memory.citations` і конфігурації dreaming у `plugins.entries.memory-core.config.dreaming`
+- [Slash Commands](/uk/tools/slash-commands) для поточного каталогу вбудованих + bundled команд
+- сторінки відповідних каналів/плагінів для поверхонь команд, специфічних для каналів
+
+Формат конфігурації — **JSON5** (дозволені коментарі + кінцеві коми). Усі поля необов’язкові — OpenClaw використовує безпечні значення за замовчуванням, якщо їх пропущено.
---
## Канали
-Кожен канал запускається автоматично, коли існує його розділ конфігурації (якщо не вказано `enabled: false`).
+Кожен канал запускається автоматично, коли існує його розділ конфігурації (якщо не встановлено `enabled: false`).
### Доступ до DM і груп
@@ -31,26 +45,26 @@ x-i18n:
| Політика DM | Поведінка |
| ------------------- | -------------------------------------------------------------- |
-| `pairing` (типово) | Невідомі відправники отримують одноразовий код сполучення; власник має схвалити |
-| `allowlist` | Лише відправники в `allowFrom` (або в сховищі дозволених після сполучення) |
+| `pairing` (default) | Невідомі відправники отримують одноразовий код pairing; власник має схвалити |
+| `allowlist` | Лише відправники з `allowFrom` (або зі сховища paired allow) |
| `open` | Дозволити всі вхідні DM (потрібно `allowFrom: ["*"]`) |
| `disabled` | Ігнорувати всі вхідні DM |
-| Політика груп | Поведінка |
-| --------------------- | ------------------------------------------------------ |
-| `allowlist` (типово) | Лише групи, що відповідають налаштованому allowlist |
-| `open` | Обійти allowlist груп (обмеження за згадками все ще діє) |
-| `disabled` | Блокувати всі повідомлення груп/кімнат |
+| Політика груп | Поведінка |
+| --------------------- | ----------------------------------------------------- |
+| `allowlist` (default) | Лише групи, що відповідають налаштованому allowlist |
+| `open` | Обійти group allowlists (gating за згадками все ще застосовується) |
+| `disabled` | Блокувати всі повідомлення груп/кімнат |
-`channels.defaults.groupPolicy` встановлює значення за замовчуванням, коли `groupPolicy` провайдера не задано.
-Коди сполучення спливають через 1 годину. Кількість запитів на очікуване DM-сполучення обмежена **3 на канал**.
-Якщо блок провайдера повністю відсутній (`channels.` відсутній), політика груп під час виконання повертається до `allowlist` (fail-closed) із попередженням під час запуску.
+`channels.defaults.groupPolicy` задає значення за замовчуванням, коли `groupPolicy` постачальника не встановлено.
+Коди pairing закінчуються через 1 годину. Очікувані запити на DM pairing обмежені **3 на канал**.
+Якщо блок постачальника повністю відсутній (`channels.` відсутній), політика груп під час виконання повертається до `allowlist` (fail-closed) із попередженням під час запуску.
-### Перевизначення моделі для каналу
+### Перевизначення моделей каналів
-Використовуйте `channels.modelByChannel`, щоб прив’язати конкретні ідентифікатори каналів до моделі. Значення приймають `provider/model` або налаштовані псевдоніми моделей. Відображення каналу застосовується, коли сесія ще не має перевизначення моделі (наприклад, встановленого через `/model`).
+Використовуйте `channels.modelByChannel`, щоб закріпити конкретні ID каналів за моделлю. Значення приймають `provider/model` або налаштовані псевдоніми моделей. Прив’язка каналу застосовується, коли сесія ще не має власного перевизначення моделі (наприклад, встановленого через `/model`).
```json5
{
@@ -73,7 +87,7 @@ x-i18n:
### Значення за замовчуванням для каналів і heartbeat
-Використовуйте `channels.defaults` для спільної поведінки політики груп і heartbeat у різних провайдерів:
+Використовуйте `channels.defaults` для спільної поведінки group-policy і heartbeat у різних постачальників:
```json5
{
@@ -91,15 +105,15 @@ x-i18n:
}
```
-- `channels.defaults.groupPolicy`: резервна політика груп, коли `groupPolicy` на рівні провайдера не задано.
-- `channels.defaults.contextVisibility`: режим видимості додаткового контексту за замовчуванням для всіх каналів. Значення: `all` (типово, включати весь процитований/потоковий/історичний контекст), `allowlist` (включати контекст лише від дозволених відправників), `allowlist_quote` (те саме, що allowlist, але зберігати явний контекст цитати/відповіді). Перевизначення на рівні каналу: `channels..contextVisibility`.
-- `channels.defaults.heartbeat.showOk`: включати статуси справних каналів у вивід heartbeat.
-- `channels.defaults.heartbeat.showAlerts`: включати деградовані/помилкові статуси у вивід heartbeat.
-- `channels.defaults.heartbeat.useIndicator`: відображати компактний 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-канал шлюзу (Baileys Web). Він запускається автоматично, коли існує пов’язана сесія.
```json5
{
@@ -132,7 +146,7 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві
}
```
-
+
```json5
{
@@ -150,10 +164,10 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві
}
```
-- Вихідні команди за замовчуванням використовують акаунт `default`, якщо він є; інакше — перший налаштований ідентифікатор акаунта (відсортовано).
-- Необов’язковий `channels.whatsapp.defaultAccount` перевизначає цей резервний вибір акаунта за замовчуванням, якщо він збігається з налаштованим ідентифікатором акаунта.
-- Застарілий одноакаунтний auth dir 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 +185,24 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві
"*": { requireMention: true },
"-1001234567890": {
allowFrom: ["@admin"],
- systemPrompt: "Відповідай стисло.",
+ systemPrompt: "Keep answers brief.",
topics: {
"99": {
requireMention: false,
skills: ["search"],
- systemPrompt: "Дотримуйся теми.",
+ systemPrompt: "Stay on topic.",
},
},
},
},
customCommands: [
{ command: "backup", description: "Git backup" },
- { command: "generate", description: "Створити зображення" },
+ { command: "generate", description: "Create an image" },
],
historyLimit: 50,
replyToMode: "first", // off | first | all | batched
linkPreview: true,
- streaming: "partial", // off | partial | block | progress (типово: off; вмикайте явно, щоб уникнути обмежень частоти редагування попереднього перегляду)
+ streaming: "partial", // off | partial | block | progress (default: off; explicitly opt in to avoid preview-edit rate limits)
actions: { reactions: true, sendMessage: true },
reactionNotifications: "own", // off | own | all
mediaMaxMb: 100,
@@ -211,12 +225,12 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві
}
```
-- Токен бота: `channels.telegram.botToken` або `channels.telegram.tokenFile` (лише звичайний файл; symlink відхиляються), з `TELEGRAM_BOT_TOKEN` як резервним варіантом для акаунта за замовчуванням.
-- Необов’язковий `channels.telegram.defaultAccount` перевизначає вибір акаунта за замовчуванням, якщо він збігається з налаштованим ідентифікатором акаунта.
-- У багатоакаунтних конфігураціях (2+ ідентифікаторів акаунтів) установіть явний акаунт за замовчуванням (`channels.telegram.defaultAccount` або `channels.telegram.accounts.default`), щоб уникнути маршрутизації через резервний варіант; `openclaw doctor` попереджає, якщо цього бракує або значення невалідне.
-- `configWrites: false` блокує ініційовані Telegram записи конфігурації (міграції ID супергруп, `/config set|unset`).
+- Токен бота: `channels.telegram.botToken` або `channels.telegram.tokenFile` (лише звичайний файл; симлінки відхиляються), з `TELEGRAM_BOT_TOKEN` як резервним варіантом для облікового запису за замовчуванням.
+- Необов’язковий `channels.telegram.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він збігається з ID налаштованого облікового запису.
+- У багатооблікових конфігураціях (2+ ID облікових записів) установіть явний обліковий запис за замовчуванням (`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` (працює у приватних і групових чатах).
+- Попередній перегляд потоків Telegram використовує `sendMessage` + `editMessageText` (працює в прямих і групових чатах).
- Політика повторних спроб: див. [Політика повторних спроб](/uk/concepts/retry).
### Discord
@@ -264,7 +278,7 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві
requireMention: true,
users: ["987654321098765432"],
skills: ["docs"],
- systemPrompt: "Лише короткі відповіді.",
+ systemPrompt: "Short answers only.",
},
},
},
@@ -272,7 +286,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 maps to partial on Discord)
maxLinesPerMessage: 17,
ui: {
components: {
@@ -283,7 +297,7 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві
enabled: true,
idleHours: 24,
maxAgeHours: 0,
- spawnSubagentSessions: false, // opt-in для `sessions_spawn({ thread: true })`
+ spawnSubagentSessions: false, // opt-in for sessions_spawn({ thread: true })
},
voice: {
enabled: true,
@@ -319,36 +333,36 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві
}
```
-- Токен: `channels.discord.token`, з `DISCORD_BOT_TOKEN` як резервним варіантом для акаунта за замовчуванням.
-- Прямі вихідні виклики, які надають явний `token` Discord, використовують саме цей токен для виклику; налаштування повторних спроб/політик акаунта все одно беруться з вибраного акаунта в активному знімку runtime.
-- Необов’язковий `channels.discord.defaultAccount` перевизначає вибір акаунта за замовчуванням, якщо він збігається з налаштованим ідентифікатором акаунта.
-- Використовуйте `user:` (DM) або `channel:` (канал guild) як цілі доставки; голі числові ID відхиляються.
-- Slug guild — у нижньому регістрі, пробіли замінено на `-`; ключі каналів використовують slug-ім’я (без `#`). Надавайте перевагу ID guild.
-- Повідомлення, написані ботами, типово ігноруються. `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` як резервним варіантом для облікового запису за замовчуванням.
+- Прямі вихідні виклики, які передають явний Discord `token`, використовують цей токен для виклику; налаштування повторних спроб/політики облікового запису все одно беруться з вибраного облікового запису в активному знімку runtime.
+- Необов’язковий `channels.discord.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він збігається з ID налаштованого облікового запису.
+- Використовуйте `user:` (DM) або `channel:` (канал guild) для цілей доставки; голі числові ID відхиляються.
+- Slug-и guild — у нижньому регістрі з пробілами, заміненими на `-`; ключі каналів використовують slugged name (без `#`). Надавайте перевагу ID guild.
+- Повідомлення, створені ботом, ігноруються за замовчуванням. `allowBots: true` вмикає їх; використовуйте `allowBots: "mentions"`, щоб приймати лише повідомлення ботів, які згадують бота (власні повідомлення все одно фільтруються).
+- `channels.discord.guilds..ignoreOtherMentions` (і перевизначення каналів) відкидає повідомлення, які згадують іншого користувача або роль, але не бота (за винятком @everyone/@here).
+- `maxLinesPerMessage` (default 17) розбиває високі повідомлення, навіть якщо вони коротші за 2000 символів.
+- `channels.discord.threadBindings` керує маршрутизацією, прив’язаною до Discord thread:
+ - `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).
-- `channels.discord.ui.components.accentColor` задає акцентний колір для контейнерів Discord components v2.
-- `channels.discord.voice` вмикає розмови в голосових каналах 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` відображає доступність runtime у статус бота (healthy => online, degraded => idle, exhausted => dnd) і дозволяє необов’язкові перевизначення тексту статусу.
-- `channels.discord.dangerouslyAllowNameMatching` повторно вмикає зіставлення за змінюваними іменами/тегами (режим сумісності break-glass).
-- `channels.discord.execApprovals`: доставка схвалень exec, нативна для Discord, та авторизація затверджувачів.
- - `enabled`: `true`, `false` або `"auto"` (типово). В auto-режимі схвалення exec активуються, коли затверджувачів можна визначити з `approvers` або `commands.ownerAllowFrom`.
- - `approvers`: ID користувачів Discord, яким дозволено схвалювати exec-запити. Якщо не задано, резервно використовується `commands.ownerAllowFrom`.
- - `agentFilter`: необов’язковий allowlist ID агентів. Якщо опустити, схвалення передаватимуться для всіх агентів.
- - `sessionFilter`: необов’язкові шаблони ключів сесій (підрядок або regex).
- - `target`: куди надсилати запити на схвалення. `"dm"` (типово) надсилає в DM затверджувачам, `"channel"` — у вихідний канал, `"both"` — у обидва місця. Коли target включає `"channel"`, кнопки можуть використовувати лише визначені затверджувачі.
- - `cleanupAfterResolve`: якщо `true`, видаляє DM-схвалення після схвалення, відхилення або тайм-ауту.
+ - `spawnSubagentSessions`: перемикач opt-in для автоматичного створення/прив’язки thread через `sessions_spawn({ thread: true })`
+- Записи верхнього рівня `bindings[]` з `type: "acp"` налаштовують постійні ACP-прив’язки для каналів і threads (використовуйте id каналу/thread у `match.peer.id`). Семантика полів спільна з [ACP Agents](/uk/tools/acp-agents#channel-specific-settings).
+- `channels.discord.ui.components.accentColor` задає колір акценту для контейнерів компонентів Discord v2.
+- `channels.discord.voice` вмикає розмови в голосових каналах Discord та необов’язкові auto-join + перевизначення TTS.
+- `channels.discord.voice.daveEncryption` і `channels.discord.voice.decryptionFailureTolerance` передаються напряму в опції DAVE для `@discordjs/voice` (`true` і `24` за замовчуванням).
+- OpenClaw додатково намагається відновити voice receive, виходячи й повторно приєднуючись до голосової сесії після повторних помилок дешифрування.
+- `channels.discord.streaming` — канонічний ключ режиму потоку. Застарілі `streamMode` і булеві значення `streaming` мігруються автоматично.
+- `channels.discord.autoPresence` зіставляє доступність runtime із присутністю бота (healthy => online, degraded => idle, exhausted => dnd) і дозволяє необов’язкові перевизначення тексту статусу.
+- `channels.discord.dangerouslyAllowNameMatching` знову вмикає зіставлення за змінними іменами/тегами (режим сумісності break-glass).
+- `channels.discord.execApprovals`: нативна доставка схвалень exec для Discord та авторизація схвалювачів.
+ - `enabled`: `true`, `false` або `"auto"` (default). У режимі auto схвалення exec активуються, коли схвалювачів можна визначити з `approvers` або `commands.ownerAllowFrom`.
+ - `approvers`: ID користувачів Discord, яким дозволено схвалювати запити exec. Якщо не задано, використовується `commands.ownerAllowFrom`.
+ - `agentFilter`: необов’язковий allowlist ID агентів. Якщо пропущено, схвалення пересилаються для всіх агентів.
+ - `sessionFilter`: необов’язкові шаблони ключів сесій (substring або regex).
+ - `target`: куди надсилати запити на схвалення. `"dm"` (default) надсилає у DM схвалювачам, `"channel"` — у вихідний канал, `"both"` — в обидва місця. Коли target включає `"channel"`, кнопками можуть користуватися лише визначені схвалювачі.
+ - `cleanupAfterResolve`: якщо `true`, видаляє DM зі схваленням після схвалення, відхилення або тайм-ауту.
-**Режими сповіщень про реакції:** `off` (немає), `own` (повідомлення бота, типово), `all` (усі повідомлення), `allowlist` (з `guilds..users` для всіх повідомлень).
+**Режими сповіщень про реакції:** `off` (немає), `own` (повідомлення бота, default), `all` (усі повідомлення), `allowlist` (від `guilds..users` для всіх повідомлень).
### Google Chat
@@ -379,11 +393,11 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві
}
```
-- JSON service account: вбудовано (`serviceAccount`) або через файл (`serviceAccountFile`).
-- Також підтримується SecretRef для service account (`serviceAccountRef`).
-- Резервні змінні середовища: `GOOGLE_CHAT_SERVICE_ACCOUNT` або `GOOGLE_CHAT_SERVICE_ACCOUNT_FILE`.
-- Використовуйте `spaces/` або `users/` як цілі доставки.
-- `channels.googlechat.dangerouslyAllowNameMatching` повторно вмикає зіставлення за змінюваним email principal (режим сумісності break-glass).
+- JSON облікового запису служби: inline (`serviceAccount`) або через файл (`serviceAccountFile`).
+- Також підтримується SecretRef для облікового запису служби (`serviceAccountRef`).
+- Резервні env: `GOOGLE_CHAT_SERVICE_ACCOUNT` або `GOOGLE_CHAT_SERVICE_ACCOUNT_FILE`.
+- Використовуйте `spaces/` або `users/` для цілей доставки.
+- `channels.googlechat.dangerouslyAllowNameMatching` знову вмикає зіставлення за змінним email principal (режим сумісності break-glass).
### Slack
@@ -405,7 +419,7 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві
allowBots: false,
users: ["U123"],
skills: ["docs"],
- systemPrompt: "Лише короткі відповіді.",
+ systemPrompt: "Short answers only.",
},
},
historyLimit: 50,
@@ -433,8 +447,10 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві
typingReaction: "hourglass_flowing_sand",
textChunkLimit: 4000,
chunkMode: "length",
- streaming: "partial", // off | partial | block | progress (режим попереднього перегляду)
- nativeStreaming: true, // використовувати нативний API потокової передачі Slack, коли streaming=partial
+ streaming: {
+ mode: "partial", // off | partial | block | progress
+ nativeTransport: true, // use Slack native streaming API when mode=partial
+ },
mediaMaxMb: 20,
execApprovals: {
enabled: "auto", // true | false | "auto"
@@ -448,38 +464,39 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві
}
```
-- **Socket mode** вимагає і `botToken`, і `appToken` (`SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` як резервні змінні середовища для акаунта за замовчуванням).
-- **HTTP mode** вимагає `botToken` плюс `signingSecret` (на корені або для кожного акаунта).
-- `botToken`, `appToken`, `signingSecret` і `userToken` приймають звичайні
+- **Socket mode** потребує і `botToken`, і `appToken` (`SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` як резервне env для облікового запису за замовчуванням).
+- **HTTP mode** потребує `botToken` плюс `signingSecret` (у корені або для кожного облікового запису).
+- `botToken`, `appToken`, `signingSecret` і `userToken` приймають відкриті
рядки або об’єкти SecretRef.
-- Знімки акаунтів Slack показують поля джерела/статусу для кожного облікового
- даних, такі як `botTokenSource`, `botTokenStatus`, `appTokenStatus`, а в HTTP mode —
- `signingSecretStatus`. `configured_unavailable` означає, що акаунт
- налаштований через SecretRef, але поточний шлях команди/runtime не зміг
+- Знімки облікових записів Slack показують поля джерела/статусу облікових даних на рівні облікового запису, як-от
+ `botTokenSource`, `botTokenStatus`, `appTokenStatus` і, у режимі HTTP,
+ `signingSecretStatus`. `configured_unavailable` означає, що обліковий запис
+ налаштовано через SecretRef, але поточний шлях команди/runtime не зміг
визначити значення секрету.
-- `configWrites: false` блокує записи конфігурації, ініційовані Slack.
-- Необов’язковий `channels.slack.defaultAccount` перевизначає вибір акаунта за замовчуванням, якщо він збігається з налаштованим ідентифікатором акаунта.
-- `channels.slack.streaming` — канонічний ключ режиму потокової передачі. Застарілі `streamMode` і булеві значення `streaming` мігруються автоматично.
-- Використовуйте `user:` (DM) або `channel:` як цілі доставки.
+- `configWrites: false` блокує ініційовані Slack записи в конфігурацію.
+- Необов’язковий `channels.slack.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він збігається з ID налаштованого облікового запису.
+- `channels.slack.streaming.mode` — канонічний ключ режиму потоку для Slack. `channels.slack.streaming.nativeTransport` керує нативним потоковим транспортом Slack. Застарілі `streamMode`, булеві `streaming` і `nativeStreaming` мігруються автоматично.
+- Використовуйте `user:` (DM) або `channel:` для цілей доставки.
-**Режими сповіщень про реакції:** `off`, `own` (типово), `all`, `allowlist` (із `reactionAllowlist`).
+**Режими сповіщень про реакції:** `off`, `own` (default), `all`, `allowlist` (з `reactionAllowlist`).
-**Ізоляція сесій потоків:** `thread.historyScope` є або для кожного потоку окремо (типово), або спільним для каналу. `thread.inheritParent` копіює транскрипт батьківського каналу в нові потоки.
+**Ізоляція сесій у thread:** `thread.historyScope` — для кожного thread окремо (default) або спільно для каналу. `thread.inheritParent` копіює транскрипт батьківського каналу в нові threads.
-- `typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки виконується відповідь, а потім видаляє її після завершення. Використовуйте shortcode emoji Slack, наприклад `"hourglass_flowing_sand"`.
-- `channels.slack.execApprovals`: доставка схвалень exec, нативна для Slack, та авторизація затверджувачів. Та сама схема, що й у Discord: `enabled` (`true`/`false`/`"auto"`), `approvers` (ID користувачів Slack), `agentFilter`, `sessionFilter` і `target` (`"dm"`, `"channel"` або `"both"`).
+- Нативний стримінг Slack разом зі статусом thread у стилі асистента Slack "is typing..." вимагають ціль відповіді у thread. Верхньорівневі DM за замовчуванням залишаються поза thread, тож вони використовують `typingReaction` або звичайну доставку замість попереднього перегляду в стилі thread.
+- `typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack під час виконання відповіді, а після завершення видаляє її. Використовуйте shortcode емодзі Slack, наприклад `"hourglass_flowing_sand"`.
+- `channels.slack.execApprovals`: нативна доставка схвалень exec для Slack та авторизація схвалювачів. Та сама схема, що і в Discord: `enabled` (`true`/`false`/`"auto"`), `approvers` (ID користувачів Slack), `agentFilter`, `sessionFilter` і `target` (`"dm"`, `"channel"` або `"both"`).
-| Група дій | Типово | Примітки |
-| ------------ | ------- | ------------------------ |
-| reactions | увімкнено | Реагування + список реакцій |
-| messages | увімкнено | Читання/надсилання/редагування/видалення |
-| pins | увімкнено | Закріпити/відкріпити/перелік |
-| memberInfo | увімкнено | Інформація про учасника |
-| emojiList | увімкнено | Список власних emoji |
+| Група дій | За замовчуванням | Примітки |
+| ------------ | ---------------- | ------------------------ |
+| reactions | увімкнено | Реагувати + перелік реакцій |
+| messages | увімкнено | Читати/надсилати/редагувати/видаляти |
+| pins | увімкнено | Закріпити/відкріпити/перелік |
+| memberInfo | увімкнено | Інформація про учасника |
+| emojiList | увімкнено | Список кастомних емодзі |
### Mattermost
-Mattermost постачається як plugin: `openclaw plugins install @openclaw/mattermost`.
+Mattermost постачається як плагін: `openclaw plugins install @openclaw/mattermost`.
```json5
{
@@ -499,7 +516,7 @@ Mattermost постачається як plugin: `openclaw plugins install @open
native: true, // opt-in
nativeSkills: true,
callbackPath: "/api/channels/mattermost/command",
- // Необов’язковий явний URL для reverse-proxy/public розгортань
+ // Optional explicit URL for reverse-proxy/public deployments
callbackUrl: "https://gateway.example.com/api/channels/mattermost/command",
},
textChunkLimit: 4000,
@@ -509,23 +526,23 @@ Mattermost постачається як plugin: `openclaw plugins install @open
}
```
-Режими чату: `oncall` (відповідати на @-згадку, типово), `onmessage` (на кожне повідомлення), `onchar` (повідомлення, що починаються з префікса-тригера).
+Режими чату: `oncall` (відповідати на @-mention, default), `onmessage` (кожне повідомлення), `onchar` (повідомлення, що починаються з тригерного префікса).
Коли нативні команди Mattermost увімкнено:
- `commands.callbackPath` має бути шляхом (наприклад `/api/channels/mattermost/command`), а не повним URL.
-- `commands.callbackUrl` має вказувати на endpoint шлюзу OpenClaw і бути доступним із сервера Mattermost.
-- Нативні зворотні виклики slash-команд автентифікуються за допомогою токенів
- для кожної команди, які Mattermost повертає під час реєстрації slash-команд. Якщо реєстрація не вдається або жодна
- команда не активована, OpenClaw відхиляє callback із
+- `commands.callbackUrl` має вказувати на endpoint шлюзу OpenClaw і бути досяжним із сервера Mattermost.
+- Нативні slash callback-и автентифікуються за допомогою токенів для кожної команди, які Mattermost повертає
+ під час реєстрації slash command. Якщо реєстрація не вдається або жодну
+ команду не активовано, OpenClaw відхиляє callback-и з
`Unauthorized: invalid command token.`
-- Для приватних/tailnet/internal callback-хостів Mattermost може вимагати,
- щоб `ServiceSettings.AllowedUntrustedInternalConnections` включав callback host/domain.
+- Для приватних/tailnet/internal callback host-ів Mattermost може вимагати,
+ щоб `ServiceSettings.AllowedUntrustedInternalConnections` містив callback host/domain.
Використовуйте значення host/domain, а не повні URL.
-- `channels.mattermost.configWrites`: дозволити або заборонити записи конфігурації, ініційовані Mattermost.
+- `channels.mattermost.configWrites`: дозволити або заборонити записи в конфігурацію, ініційовані Mattermost.
- `channels.mattermost.requireMention`: вимагати `@mention` перед відповіддю в каналах.
-- `channels.mattermost.groups..requireMention`: перевизначення обмеження за згадками для конкретного каналу (`"*"` для значення за замовчуванням).
-- Необов’язковий `channels.mattermost.defaultAccount` перевизначає вибір акаунта за замовчуванням, якщо він збігається з налаштованим ідентифікатором акаунта.
+- `channels.mattermost.groups..requireMention`: перевизначення gating за згадкою для конкретного каналу (`"*"` для значення за замовчуванням).
+- Необов’язковий `channels.mattermost.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він збігається з ID налаштованого облікового запису.
### Signal
@@ -534,7 +551,7 @@ Mattermost постачається як plugin: `openclaw plugins install @open
channels: {
signal: {
enabled: true,
- account: "+15555550123", // необов’язкова прив’язка акаунта
+ account: "+15555550123", // optional account binding
dmPolicy: "pairing",
allowFrom: ["+15551234567", "uuid:123e4567-e89b-12d3-a456-426614174000"],
configWrites: true,
@@ -546,15 +563,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` перевизначає вибір акаунта за замовчуванням, якщо він збігається з налаштованим ідентифікатором акаунта.
+- `channels.signal.account`: закріпити запуск каналу за конкретною ідентичністю облікового запису Signal.
+- `channels.signal.configWrites`: дозволити або заборонити записи в конфігурацію, ініційовані Signal.
+- Необов’язковий `channels.signal.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він збігається з ID налаштованого облікового запису.
### BlueBubbles
-BlueBubbles — рекомендований шлях для iMessage (на основі plugin, налаштовується в `channels.bluebubbles`).
+BlueBubbles — рекомендований шлях для iMessage (на базі плагіна, налаштовується в `channels.bluebubbles`).
```json5
{
@@ -562,21 +579,21 @@ BlueBubbles — рекомендований шлях для iMessage (на ос
bluebubbles: {
enabled: true,
dmPolicy: "pairing",
- // serverUrl, password, webhookPath, керування групами та розширені дії:
- // див. /channels/bluebubbles
+ // serverUrl, password, webhookPath, group controls, and advanced actions:
+ // see /channels/bluebubbles
},
},
}
```
-- Основні шляхи ключів, описані тут: `channels.bluebubbles`, `channels.bluebubbles.dmPolicy`.
-- Необов’язковий `channels.bluebubbles.defaultAccount` перевизначає вибір акаунта за замовчуванням, якщо він збігається з налаштованим ідентифікатором акаунта.
-- Записи верхнього рівня `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).
+- Основні шляхи ключів, охоплені тут: `channels.bluebubbles`, `channels.bluebubbles.dmPolicy`.
+- Необов’язковий `channels.bluebubbles.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він збігається з ID налаштованого облікового запису.
+- Записи верхнього рівня `bindings[]` з `type: "acp"` можуть прив’язувати розмови BlueBubbles до постійних ACP-сесій. Використовуйте handle або target string BlueBubbles (`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,15 +617,15 @@ OpenClaw запускає `imsg rpc` (JSON-RPC через stdio). Не потр
}
```
-- Необов’язковий `channels.imessage.defaultAccount` перевизначає вибір акаунта за замовчуванням, якщо він збігається з налаштованим ідентифікатором акаунта.
+- Необов’язковий `channels.imessage.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він збігається з ID налаштованого облікового запису.
- Потрібен Full Disk Access до БД Messages.
-- Надавайте перевагу цілям `chat_id:`. Використовуйте `imsg chats --limit 20`, щоб переглянути список чатів.
-- `cliPath` може вказувати на SSH wrapper; установіть `remoteHost` (`host` або `user@host`) для отримання вкладень через SCP.
-- `attachmentRoots` і `remoteAttachmentRoots` обмежують шляхи вхідних вкладень (типово: `/Users/*/Library/Messages/Attachments`).
-- SCP використовує сувору перевірку ключа хоста, тому переконайтеся, що ключ relay-хоста вже існує в `~/.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).
+- Надавайте перевагу цілям `chat_id:`. Використовуйте `imsg chats --limit 20`, щоб перелічити чати.
+- `cliPath` може вказувати на SSH wrapper; встановіть `remoteHost` (`host` або `user@host`) для отримання вкладень через SCP.
+- `attachmentRoots` і `remoteAttachmentRoots` обмежують шляхи вхідних вкладень (default: `/Users/*/Library/Messages/Attachments`).
+- SCP використовує сувору перевірку host key, тому переконайтеся, що ключ relay host уже існує в `~/.ssh/known_hosts`.
+- `channels.imessage.configWrites`: дозволити або заборонити записи в конфігурацію, ініційовані iMessage.
+- Записи верхнього рівня `bindings[]` з `type: "acp"` можуть прив’язувати розмови iMessage до постійних ACP-сесій. Використовуйте нормалізований handle або явний target чату (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) у `match.peer.id`. Спільна семантика полів: [ACP Agents](/uk/tools/acp-agents#channel-specific-settings).
@@ -621,7 +638,7 @@ exec ssh -T gateway-host imsg "$@"
### Matrix
-Matrix працює через extension і налаштовується в `channels.matrix`.
+Matrix працює через розширення і налаштовується в `channels.matrix`.
```json5
{
@@ -651,25 +668,25 @@ Matrix працює через extension і налаштовується в `cha
}
```
-- Автентифікація токеном використовує `accessToken`; автентифікація паролем — `userId` + `password`.
-- `channels.matrix.proxy` маршрутизує HTTP-трафік Matrix через явний HTTP(S) proxy. Іменовані акаунти можуть перевизначати його через `channels.matrix.accounts..proxy`.
-- `channels.matrix.network.dangerouslyAllowPrivateNetwork` дозволяє приватні/internal homeserver. `proxy` і цей opt-in для мережі — незалежні засоби керування.
-- `channels.matrix.defaultAccount` вибирає пріоритетний акаунт у багатоакаунтних конфігураціях.
-- `channels.matrix.autoJoin` типово має значення `off`, тому запрошені кімнати та нові запрошення у стилі DM ігноруються, доки ви не встановите `autoJoin: "allowlist"` із `autoJoinAllowlist` або `autoJoin: "always"`.
-- `channels.matrix.execApprovals`: доставка схвалень exec, нативна для Matrix, та авторизація затверджувачів.
- - `enabled`: `true`, `false` або `"auto"` (типово). В auto-режимі схвалення exec активуються, коли затверджувачів можна визначити з `approvers` або `commands.ownerAllowFrom`.
- - `approvers`: ID користувачів Matrix (наприклад `@owner:example.org`), яким дозволено схвалювати exec-запити.
- - `agentFilter`: необов’язковий allowlist ID агентів. Якщо опустити, схвалення передаватимуться для всіх агентів.
- - `sessionFilter`: необов’язкові шаблони ключів сесій (підрядок або regex).
- - `target`: куди надсилати запити на схвалення. `"dm"` (типово), `"channel"` (вихідна кімната) або `"both"`.
- - Перевизначення на рівні акаунта: `channels.matrix.accounts..execApprovals`.
-- `channels.matrix.dm.sessionScope` керує тим, як DM Matrix групуються в сесії: `per-user` (типово) об’єднує за маршрутизованим peer, тоді як `per-room` ізолює кожну DM-кімнату.
-- Перевірки статусу Matrix і пошук у live directory використовують ту саму політику proxy, що й трафік runtime.
-- Повну конфігурацію Matrix, правила націлювання та приклади налаштування задокументовано в [Matrix](/uk/channels/matrix).
+- Токен-автентифікація використовує `accessToken`; парольна автентифікація використовує `userId` + `password`.
+- `channels.matrix.proxy` маршрутизує HTTP-трафік Matrix через явний HTTP(S) proxy. Іменовані облікові записи можуть перевизначати його через `channels.matrix.accounts..proxy`.
+- `channels.matrix.network.dangerouslyAllowPrivateNetwork` дозволяє приватні/internal homeserver-и. `proxy` і ця opt-in опція мережі — незалежні елементи керування.
+- `channels.matrix.defaultAccount` вибирає бажаний обліковий запис у багатооблікових конфігураціях.
+- `channels.matrix.autoJoin` за замовчуванням має значення `off`, тому запрошені кімнати та нові запрошення у стилі DM ігноруються, доки ви не встановите `autoJoin: "allowlist"` з `autoJoinAllowlist` або `autoJoin: "always"`.
+- `channels.matrix.execApprovals`: нативна доставка схвалень exec для Matrix та авторизація схвалювачів.
+ - `enabled`: `true`, `false` або `"auto"` (default). У режимі auto схвалення exec активуються, коли схвалювачів можна визначити з `approvers` або `commands.ownerAllowFrom`.
+ - `approvers`: ID користувачів Matrix (наприклад `@owner:example.org`), яким дозволено схвалювати запити exec.
+ - `agentFilter`: необов’язковий allowlist ID агентів. Якщо пропущено, схвалення пересилаються для всіх агентів.
+ - `sessionFilter`: необов’язкові шаблони ключів сесій (substring або regex).
+ - `target`: куди надсилати запити на схвалення. `"dm"` (default), `"channel"` (вихідна кімната) або `"both"`.
+ - Перевизначення для облікового запису: `channels.matrix.accounts..execApprovals`.
+- `channels.matrix.dm.sessionScope` керує тим, як DM Matrix групуються в сесії: `per-user` (default) спільний за маршрутизованим peer, тоді як `per-room` ізолює кожну DM room.
+- Статусні probe-и Matrix і пошук у live directory використовують ту саму політику proxy, що й runtime traffic.
+- Повну конфігурацію Matrix, правила націлювання і приклади налаштування задокументовано в [Matrix](/uk/channels/matrix).
### Microsoft Teams
-Microsoft Teams працює через extension і налаштовується в `channels.msteams`.
+Microsoft Teams працює через розширення і налаштовується в `channels.msteams`.
```json5
{
@@ -677,19 +694,19 @@ Microsoft Teams працює через extension і налаштовуєтьс
msteams: {
enabled: true,
configWrites: true,
- // appId, appPassword, tenantId, webhook, політики команд/каналів:
- // див. /channels/msteams
+ // appId, appPassword, tenantId, webhook, team/channel policies:
+ // see /channels/msteams
},
},
}
```
-- Основні шляхи ключів, описані тут: `channels.msteams`, `channels.msteams.configWrites`.
-- Повну конфігурацію Teams (облікові дані, webhook, політики DM/груп, перевизначення для команд/каналів) задокументовано в [Microsoft Teams](/uk/channels/msteams).
+- Основні шляхи ключів, охоплені тут: `channels.msteams`, `channels.msteams.configWrites`.
+- Повну конфігурацію Teams (облікові дані, webhook, DM/group policy, перевизначення для team/channel) задокументовано в [Microsoft Teams](/uk/channels/msteams).
### IRC
-IRC працює через extension і налаштовується в `channels.irc`.
+IRC працює через розширення і налаштовується в `channels.irc`.
```json5
{
@@ -710,13 +727,13 @@ IRC працює через extension і налаштовується в `channe
}
```
-- Основні шляхи ключів, описані тут: `channels.irc`, `channels.irc.dmPolicy`, `channels.irc.configWrites`, `channels.irc.nickserv.*`.
-- Необов’язковий `channels.irc.defaultAccount` перевизначає вибір акаунта за замовчуванням, якщо він збігається з налаштованим ідентифікатором акаунта.
-- Повну конфігурацію 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
{
@@ -724,11 +741,11 @@ IRC працює через extension і налаштовується в `channe
telegram: {
accounts: {
default: {
- name: "Основний бот",
+ name: "Primary bot",
botToken: "123456:ABC...",
},
alerts: {
- name: "Бот сповіщень",
+ name: "Alerts bot",
botToken: "987654:XYZ...",
},
},
@@ -737,28 +754,28 @@ IRC працює через extension і налаштовується в `channe
}
```
-- `default` використовується, коли `accountId` не вказано (CLI + маршрутизація).
-- Токени зі змінних середовища застосовуються лише до акаунта **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 спочатку підвищує account-scoped значення верхнього рівня для одного облікового запису в map облікових записів каналу, щоб початковий обліковий запис продовжував працювати. Більшість каналів переміщують їх у `channels..accounts.default`; Matrix натомість може зберегти наявну відповідну іменовану/default ціль.
+- Існуючі прив’язки лише до каналу (без `accountId`) і далі збігаються з default account; прив’язки на рівні облікового запису залишаються необов’язковими.
+- `openclaw doctor --fix` також виправляє змішані форми, переміщуючи account-scoped значення верхнього рівня для одного облікового запису в підвищений обліковий запис, обраний для цього каналу. Більшість каналів використовують `accounts.default`; Matrix може зберегти наявну відповідну іменовану/default ціль.
-### Інші канали extension
+### Інші канали-розширення
-Багато каналів extension налаштовуються як `channels.` і задокументовані на окремих сторінках каналів (наприклад Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat і Twitch).
+Багато каналів-розширень налаштовуються як `channels.` і задокументовані на власних сторінках каналів (наприклад Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat і Twitch).
Див. повний індекс каналів: [Канали](/uk/channels).
-### Обмеження за згадками в групових чатах
+### Gating за згадкою в груповому чаті
-Для групових повідомлень типово **потрібна згадка** (метадані згадки або безпечні шаблони regex). Застосовується до групових чатів WhatsApp, Telegram, Discord, Google Chat і iMessage.
+Повідомлення груп за замовчуванням **вимагають згадки** (метадані згадки або безпечні regex-шаблони). Застосовується до групових чатів WhatsApp, Telegram, Discord, Google Chat і iMessage.
**Типи згадок:**
-- **Згадки в метаданих**: нативні @-згадки платформи. Ігноруються в режимі self-chat WhatsApp.
-- **Текстові шаблони**: безпечні шаблони regex у `agents.list[].groupChat.mentionPatterns`. Невалідні шаблони та небезпечне вкладене повторення ігноруються.
-- Обмеження за згадками застосовується лише тоді, коли виявлення можливе (нативні згадки або принаймні один шаблон).
+- **Metadata mentions**: нативні @-згадки платформи. Ігноруються в режимі self-chat WhatsApp.
+- **Text patterns**: безпечні regex-шаблони в `agents.list[].groupChat.mentionPatterns`. Некоректні шаблони і небезпечне вкладене повторення ігноруються.
+- Gating за згадкою застосовується лише тоді, коли виявлення можливе (нативні згадки або принаймні один шаблон).
```json5
{
@@ -771,7 +788,7 @@ IRC працює через extension і налаштовується в `channe
}
```
-`messages.groupChat.historyLimit` задає глобальне значення за замовчуванням. Канали можуть перевизначати його через `channels..historyLimit` (або для кожного акаунта). Установіть `0`, щоб вимкнути.
+`messages.groupChat.historyLimit` задає глобальне значення за замовчуванням. Канали можуть перевизначати його через `channels..historyLimit` (або для кожного облікового запису). Встановіть `0`, щоб вимкнути.
#### Ліміти історії DM
@@ -788,13 +805,13 @@ IRC працює через extension і налаштовується в `channe
}
```
-Розв’язання: перевизначення для конкретного DM → значення за замовчуванням провайдера → без ліміту (зберігається все).
+Порядок розв’язання: перевизначення для конкретного DM → значення постачальника за замовчуванням → без обмеження (зберігається все).
Підтримується: `telegram`, `whatsapp`, `discord`, `slack`, `signal`, `imessage`, `msteams`.
#### Режим self-chat
-Додайте свій власний номер до `allowFrom`, щоб увімкнути режим self-chat (ігнорує нативні @-згадки, реагує лише на текстові шаблони):
+Додайте власний номер до `allowFrom`, щоб увімкнути режим self-chat (ігнорує нативні @-згадки, відповідає лише на текстові шаблони):
```json5
{
@@ -815,18 +832,24 @@ IRC працює через extension і налаштовується в `channe
}
```
-### Команди (обробка команд чату)
+### Команди (обробка команд у чаті)
```json5
{
commands: {
- native: "auto", // реєструвати нативні команди, коли це підтримується
- text: true, // розбирати /commands у повідомленнях чату
- bash: false, // дозволити ! (псевдонім: /bash)
+ native: "auto", // register native commands when supported
+ nativeSkills: "auto", // register native skill commands when supported
+ text: true, // parse /commands in chat messages
+ bash: false, // allow ! (alias: /bash)
bashForegroundMs: 2000,
- config: false, // дозволити /config
- debug: false, // дозволити /debug
- restart: false, // дозволити /restart + інструмент перезапуску gateway
+ config: false, // allow /config
+ mcp: false, // allow /mcp
+ plugins: false, // allow /plugins
+ debug: false, // allow /debug
+ restart: true, // allow /restart + gateway restart tool
+ ownerAllowFrom: ["discord:123456789012345678"],
+ ownerDisplay: "raw", // raw | hash
+ ownerDisplaySecret: "${OWNER_ID_HASH_SECRET}",
allowFrom: {
"*": ["user1"],
discord: ["user:123"],
@@ -838,16 +861,32 @@ IRC працює через extension і налаштовується в `channe
+- Цей блок налаштовує поверхні команд. Для поточного каталогу вбудованих + bundled команд див. [Slash Commands](/uk/tools/slash-commands).
+- Ця сторінка — **довідник за ключами конфігурації**, а не повний каталог команд. Команди, що належать каналу/плагіну, такі як QQ Bot `/bot-ping` `/bot-help` `/bot-logs`, LINE `/card`, device-pair `/pair`, memory `/dreaming`, phone-control `/phone` і Talk `/voice`, задокументовані на їхніх сторінках каналів/плагінів і в [Slash Commands](/uk/tools/slash-commands).
- Текстові команди мають бути **окремими** повідомленнями з початковим `/`.
- `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`). Для клієнтів gateway `chat.send` постійні записи `/config set|unset` також потребують `operator.admin`; доступний лише для читання `/config show` і далі доступний звичайним операторським клієнтам із правом запису.
-- `channels..configWrites` керує мутаціями конфігурації для кожного каналу (типово: true).
-- Для багатоакаунтних каналів `channels..accounts..configWrites` також керує записами, націленими на цей акаунт (наприклад `/allowlist --config --account ` або `/config set channels..accounts....`).
-- `allowFrom` задається для кожного провайдера. Якщо його встановлено, це **єдине** джерело авторизації (allowlist/сполучення каналу та `useAccessGroups` ігноруються).
-- `useAccessGroups: false` дозволяє командам обходити політики груп доступу, коли `allowFrom` не встановлено.
+- `nativeSkills: "auto"` вмикає нативні skill-команди для Discord/Telegram, залишає Slack вимкненим.
+- Перевизначення для каналу: `channels.discord.commands.native` (bool або `"auto"`). `false` очищає раніше зареєстровані команди.
+- Перевизначайте реєстрацію нативних skill-команд для каналу через `channels..commands.nativeSkills`.
+- `channels.telegram.customCommands` додає додаткові записи в меню бота Telegram.
+- `bash: true` вмикає `! ` для host shell. Потрібні `tools.elevated.enabled` і відправник у `tools.elevated.allowFrom.`.
+- `config: true` вмикає `/config` (читання/запис `openclaw.json`). Для клієнтів gateway `chat.send` постійні записи `/config set|unset` також вимагають `operator.admin`; доступний лише для читання `/config show` залишається доступним звичайним клієнтам з write scope.
+- `mcp: true` вмикає `/mcp` для конфігурації MCP server, керованої OpenClaw, у `mcp.servers`.
+- `plugins: true` вмикає `/plugins` для виявлення плагінів, встановлення та керування увімкненням/вимкненням.
+- `channels..configWrites` контролює мутації конфігурації для кожного каналу (default: true).
+- Для багатооблікових каналів `channels..accounts..configWrites` також контролює записи, що націлені на цей обліковий запис (наприклад `/allowlist --config --account ` або `/config set channels..accounts....`).
+- `restart: false` вимикає `/restart` і дії інструмента перезапуску шлюзу. За замовчуванням: `true`.
+- `ownerAllowFrom` — явний owner allowlist для команд/інструментів лише для власника. Він окремий від `allowFrom`.
+- `ownerDisplay: "hash"` хешує owner id у system prompt. Встановіть `ownerDisplaySecret`, щоб керувати хешуванням.
+- `allowFrom` — для кожного постачальника. Якщо встановлено, це **єдине** джерело авторизації (channel allowlists/pairing і `useAccessGroups` ігноруються).
+- `useAccessGroups: false` дозволяє командам обходити політики access group, коли `allowFrom` не встановлено.
+- Карта документації команд:
+ - вбудований + bundled каталог: [Slash Commands](/uk/tools/slash-commands)
+ - поверхні команд, специфічні для каналів: [Канали](/uk/channels)
+ - команди QQ Bot: [QQ Bot](/uk/channels/qqbot)
+ - команди pairing: [Pairing](/uk/channels/pairing)
+ - команда картки LINE: [LINE](/uk/channels/line)
+ - memory dreaming: [Dreaming](/uk/concepts/dreaming)
@@ -857,7 +896,7 @@ IRC працює через extension і налаштовується в `channe
### `agents.defaults.workspace`
-Типово: `~/.openclaw/workspace`.
+За замовчуванням: `~/.openclaw/workspace`.
```json5
{
@@ -867,7 +906,7 @@ IRC працює через extension і налаштовується в `channe
### `agents.defaults.repoRoot`
-Необов’язковий корінь репозиторію, що показується в рядку Runtime системного prompt. Якщо не задано, OpenClaw автоматично визначає його, піднімаючись вгору від workspace.
+Необов’язковий корінь репозиторію, що показується в рядку Runtime системного запиту. Якщо не встановлено, OpenClaw визначає його автоматично, піднімаючись вгору від workspace.
```json5
{
@@ -887,17 +926,17 @@ IRC працює через extension і налаштовується в `channe
list: [
{ id: "writer" }, // успадковує github, weather
{ id: "docs", skills: ["docs-search"] }, // замінює значення за замовчуванням
- { id: "locked-down", skills: [] }, // без Skills
+ { 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`, щоб успадкувати значення за замовчуванням.
+- Встановіть `agents.list[].skills: []`, щоб не мати skills.
+- Непорожній список `agents.list[].skills` є кінцевим набором для цього агента; він
+ не об’єднується зі значеннями за замовчуванням.
### `agents.defaults.skipBootstrap`
@@ -911,9 +950,9 @@ IRC працює через extension і налаштовується в `channe
### `agents.defaults.contextInjection`
-Керує тим, коли файли bootstrap workspace вбудовуються в системний prompt. Типово: `"always"`.
+Керує тим, коли bootstrap-файли workspace вбудовуються в system prompt. За замовчуванням: `"always"`.
-- `"continuation-skip"`: безпечні ходи продовження (після завершеної відповіді асистента) пропускають повторне вбудовування bootstrap workspace, зменшуючи розмір prompt. Запуски heartbeat і повторні спроби після ущільнення все одно перебудовують контекст.
+- `"continuation-skip"`: безпечні ходи продовження (після завершеної відповіді асистента) пропускають повторне вбудовування bootstrap workspace, зменшуючи розмір prompt. Виконання heartbeat і повторні спроби після ущільнення все одно перебудовують контекст.
```json5
{
@@ -923,7 +962,7 @@ IRC працює через extension і налаштовується в `channe
### `agents.defaults.bootstrapMaxChars`
-Максимальна кількість символів на файл bootstrap workspace до обрізання. Типово: `20000`.
+Максимальна кількість символів на файл bootstrap workspace перед обрізанням. За замовчуванням: `20000`.
```json5
{
@@ -933,7 +972,7 @@ IRC працює через extension і налаштовується в `channe
### `agents.defaults.bootstrapTotalMaxChars`
-Максимальна загальна кількість символів, що вбудовуються з усіх файлів bootstrap workspace. Типово: `150000`.
+Максимальна загальна кількість символів, що вбудовуються з усіх файлів bootstrap workspace. За замовчуванням: `150000`.
```json5
{
@@ -943,12 +982,12 @@ IRC працює через extension і налаштовується в `channe
### `agents.defaults.bootstrapPromptTruncationWarning`
-Керує видимим агенту текстом попередження, коли bootstrap-контекст обрізається.
-Типово: `"once"`.
+Керує видимим для агента текстом попередження, коли bootstrap-контекст обрізано.
+За замовчуванням: `"once"`.
-- `"off"`: ніколи не вбудовувати текст попередження в системний prompt.
+- `"off"`: ніколи не вбудовувати текст попередження в system prompt.
- `"once"`: вбудовувати попередження один раз для кожного унікального підпису обрізання (рекомендовано).
-- `"always"`: вбудовувати попередження під час кожного запуску, коли є обрізання.
+- `"always"`: вбудовувати попередження при кожному запуску, якщо обрізання існує.
```json5
{
@@ -958,11 +997,11 @@ IRC працює через extension і налаштовується в `channe
### `agents.defaults.imageMaxDimensionPx`
-Максимальний розмір у пікселях для довшої сторони зображення в блоках зображень транскрипту/інструментів перед викликами провайдера.
-Типово: `1200`.
+Максимальний розмір у пікселях для найдовшого боку зображення в блоках зображень transcript/tool перед викликами постачальника.
+За замовчуванням: `1200`.
-Менші значення зазвичай зменшують використання vision-токенів і розмір корисного навантаження запиту для сценаріїв із великою кількістю скриншотів.
-Більші значення зберігають більше візуальних деталей.
+Нижчі значення зазвичай зменшують використання vision-token і розмір payload запиту для запусків із великою кількістю скриншотів.
+Вищі значення зберігають більше візуальних деталей.
```json5
{
@@ -972,7 +1011,7 @@ IRC працює через extension і налаштовується в `channe
### `agents.defaults.userTimezone`
-Часовий пояс для контексту системного prompt (не для часових міток повідомлень). Якщо не вказано, використовується часовий пояс хоста.
+Часовий пояс для контексту system prompt (не для позначок часу повідомлень). Якщо не встановлено, використовується часовий пояс хоста.
```json5
{
@@ -982,7 +1021,7 @@ IRC працює через extension і налаштовується в `channe
### `agents.defaults.timeFormat`
-Формат часу в системному prompt. Типово: `auto` (налаштування ОС).
+Формат часу в system prompt. За замовчуванням: `auto` (налаштування ОС).
```json5
{
@@ -1020,7 +1059,7 @@ IRC працює через extension і налаштовується в `channe
primary: "anthropic/claude-opus-4-6",
fallbacks: ["openai/gpt-5.4-mini"],
},
- params: { cacheRetention: "long" }, // глобальні параметри провайдера за замовчуванням
+ params: { cacheRetention: "long" }, // global default provider params
pdfMaxBytesMb: 10,
pdfMaxPages: 20,
thinkingDefault: "low",
@@ -1036,44 +1075,44 @@ IRC працює через extension і налаштовується в `channe
```
- `model`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`).
- - Рядкова форма встановлює лише основну модель.
- - Об’єктна форма встановлює основну модель плюс впорядковані резервні моделі.
+ - Рядкова форма задає лише основну модель.
+ - Об’єктна форма задає основну модель плюс упорядковані failover-моделі.
- `imageModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`).
- - Використовується в шляху інструмента `image` як конфігурація vision-моделі.
- - Також використовується як резервна маршрутизація, коли вибрана/типова модель не може приймати зображення.
+ - Використовується шляхом інструмента `image` як конфігурація vision model.
+ - Також використовується як fallback routing, коли вибрана/default модель не може приймати вхідні зображення.
- `imageGenerationModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`).
- - Використовується спільною можливістю генерації зображень і будь-якою майбутньою поверхнею tool/plugin, яка генерує зображення.
+ - Використовується спільною можливістю генерації зображень і будь-якою майбутньою поверхнею tool/plugin, що генерує зображення.
- Типові значення: `google/gemini-3.1-flash-image-preview` для нативної генерації зображень Gemini, `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` усе ще може вивести типове значення провайдера на основі автентифікації. Спочатку він пробує поточного провайдера за замовчуванням, потім — інші зареєстровані провайдери генерації зображень у порядку provider-id.
+ - Якщо ви вибираєте provider/model напряму, також налаштуйте відповідну автентифікацію постачальника/API key (наприклад `GEMINI_API_KEY` або `GOOGLE_API_KEY` для `google/*`, `OPENAI_API_KEY` для `openai/*`, `FAL_KEY` для `fal/*`).
+ - Якщо пропущено, `image_generate` усе одно може визначити default постачальника з автентифікацією. Спочатку він пробує поточного default provider, а потім решту зареєстрованих постачальників генерації зображень у порядку provider-id.
- `musicGenerationModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`).
- - Використовується спільною можливістю генерації музики та вбудованим інструментом `music_generate`.
+ - Використовується спільною можливістю генерації музики і вбудованим інструментом `music_generate`.
- Типові значення: `google/lyria-3-clip-preview`, `google/lyria-3-pro-preview` або `minimax/music-2.5+`.
- - Якщо не задано, `music_generate` усе ще може вивести типове значення провайдера на основі автентифікації. Спочатку він пробує поточного провайдера за замовчуванням, потім — інші зареєстровані провайдери генерації музики у порядку provider-id.
- - Якщо ви прямо вибираєте provider/model, також налаштуйте відповідну автентифікацію провайдера/API key.
+ - Якщо пропущено, `music_generate` усе одно може визначити default постачальника з автентифікацією. Спочатку він пробує поточного default provider, а потім решту зареєстрованих постачальників генерації музики у порядку provider-id.
+ - Якщо ви вибираєте provider/model напряму, також налаштуйте відповідну автентифікацію постачальника/API key.
- `videoGenerationModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`).
- - Використовується спільною можливістю генерації відео та вбудованим інструментом `video_generate`.
+ - Використовується спільною можливістю генерації відео і вбудованим інструментом `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.
- - Якщо ви прямо вибираєте provider/model, також налаштуйте відповідну автентифікацію провайдера/API key.
- - Пакетний провайдер генерації відео Qwen наразі підтримує до 1 вихідного відео, 1 вхідного зображення, 4 вхідних відео, тривалість 10 секунд і параметри рівня провайдера `size`, `aspectRatio`, `resolution`, `audio` та `watermark`.
+ - Якщо пропущено, `video_generate` усе одно може визначити default постачальника з автентифікацією. Спочатку він пробує поточного default provider, а потім решту зареєстрованих постачальників генерації відео у порядку provider-id.
+ - Якщо ви вибираєте provider/model напряму, також налаштуйте відповідну автентифікацію постачальника/API key.
+ - Bundled постачальник генерації відео 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 спочатку пробує псевдонім, потім унікальний збіг налаштованого провайдера для точного id моделі, і лише після цього повертається до налаштованого провайдера за замовчуванням (застаріла поведінка сумісності, тому краще явно використовувати `provider/model`). Якщо цей провайдер більше не надає налаштовану модель за замовчуванням, OpenClaw повертається до першого налаштованого provider/model замість того, щоб показувати застаріле типове значення видаленого провайдера.
-- `models`: налаштований каталог моделей і allowlist для `/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` (відповідний agent id) перевизначає значення за ключами. Докладніше див. [Кешування prompt](/uk/reference/prompt-caching).
-- Засоби запису конфігурації, які змінюють ці поля (наприклад `/models set`, `/models set-image` і команди додавання/видалення резервних варіантів), зберігають канонічну об’єктну форму й за можливості зберігають наявні списки fallback.
-- `maxConcurrent`: максимальна кількість паралельних запусків агентів між сесіями (кожна сесія все одно серіалізується). Типово: 4.
+ - Використовується інструментом `pdf` для маршрутизації моделей.
+ - Якщо пропущено, PDF-інструмент повертається до `imageModel`, а потім — до розв’язаної моделі сесії/default.
+- `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 серед налаштованих постачальників, і лише після цього повертається до налаштованого default provider (застаріла поведінка сумісності, тому надавайте перевагу явному `provider/model`). Якщо цей постачальник більше не надає налаштовану default model, OpenClaw повертається до першої налаштованої provider/model замість показу застарілого default від видаленого постачальника.
+- `models`: налаштований каталог моделей і allowlist для `/model`. Кожен запис може включати `alias` (скорочення) і `params` (специфічні для постачальника, наприклад `temperature`, `maxTokens`, `cacheRetention`, `context1m`).
+- `params`: глобальні default provider params, що застосовуються до всіх моделей. Задаються в `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`: максимальна кількість паралельних запусків агентів між сесіями (кожна сесія все одно серіалізується). За замовчуванням: 4.
-**Вбудовані скорочені псевдоніми** (застосовуються лише тоді, коли модель є в `agents.defaults.models`):
+**Вбудовані скорочення alias** (застосовуються лише коли модель є в `agents.defaults.models`):
-| Псевдонім | Модель |
+| Alias | Модель |
| ------------------- | -------------------------------------- |
| `opus` | `anthropic/claude-opus-4-6` |
| `sonnet` | `anthropic/claude-sonnet-4-6` |
@@ -1084,15 +1123,15 @@ IRC працює через extension і налаштовується в `channe
| `gemini-flash` | `google/gemini-3-flash-preview` |
| `gemini-flash-lite` | `google/gemini-3.1-flash-lite-preview` |
-Ваші налаштовані псевдоніми завжди мають пріоритет над типовими.
+Ваші налаштовані aliases завжди мають пріоритет над значеннями за замовчуванням.
-Для моделей Z.AI GLM-4.x thinking mode увімкнено автоматично, якщо ви не задасте `--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` для потокового передавання викликів інструментів. Встановіть `agents.defaults.models["zai/"].params.tool_stream` у `false`, щоб вимкнути це.
+Моделі Anthropic Claude 4.6 за замовчуванням використовують `adaptive` thinking, коли явний рівень thinking не задано.
### `agents.defaults.cliBackends`
-Необов’язкові CLI backends для резервних текстових запусків (без викликів інструментів). Корисно як запасний варіант, коли API-провайдери не працюють.
+Необов’язкові CLI-бекенди для резервних запусків лише з текстом (без викликів інструментів). Корисно як запасний варіант, коли API-постачальники відмовляють.
```json5
{
@@ -1120,29 +1159,29 @@ IRC працює через extension і налаштовується в `channe
}
```
-- CLI backends орієнтовані насамперед на текст; інструменти завжди вимкнено.
-- Сесії підтримуються, коли задано `sessionArg`.
+- CLI-бекенди орієнтовані на текст; інструменти завжди вимкнено.
+- Сесії підтримуються, коли встановлено `sessionArg`.
- Передавання зображень підтримується, коли `imageArg` приймає шляхи до файлів.
### `agents.defaults.heartbeat`
-Періодичні запуски heartbeat.
+Періодичні heartbeat-запуски.
```json5
{
agents: {
defaults: {
heartbeat: {
- every: "30m", // 0m вимикає
+ every: "30m", // 0m disables
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 keeps only HEARTBEAT.md from workspace bootstrap files
+ isolatedSession: false, // default: false; true runs each heartbeat in a fresh session (no conversation history)
session: "main",
to: "+15555550123",
- directPolicy: "allow", // allow (типово) | block
- target: "none", // типово: none | варіанти: last | whatsapp | telegram | discord | ...
- prompt: "Прочитай HEARTBEAT.md, якщо він існує...",
+ directPolicy: "allow", // allow (default) | block
+ target: "none", // default: none | options: last | whatsapp | telegram | discord | ...
+ prompt: "Read HEARTBEAT.md if it exists...",
ackMaxChars: 300,
suppressToolErrorWarnings: false,
},
@@ -1151,12 +1190,12 @@ IRC працює через extension і налаштовується в `channe
}
```
-- `every`: рядок тривалості (ms/s/m/h). Типово: `30m` (автентифікація API-key) або `1h` (автентифікація OAuth). Установіть `0m`, щоб вимкнути.
-- `suppressToolErrorWarnings`: якщо true, приглушує payload-и попереджень про помилки інструментів під час запусків heartbeat.
-- `directPolicy`: політика прямої доставки/DM. `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 виконуються **лише для цих агентів**.
+- `every`: рядок тривалості (ms/s/m/h). За замовчуванням: `30m` (автентифікація через API key) або `1h` (автентифікація через OAuth). Установіть `0m`, щоб вимкнути.
+- `suppressToolErrorWarnings`: якщо true, приглушує payload-и попереджень про помилки інструментів під час heartbeat-запусків.
+- `directPolicy`: політика прямої/DM доставки. `allow` (default) дозволяє доставку за прямою ціллю. `block` приглушує доставку за прямою ціллю та генерує `reason=dm-blocked`.
+- `lightContext`: якщо true, heartbeat-запуски використовують полегшений bootstrap-контекст і зберігають із bootstrap-файлів workspace лише `HEARTBEAT.md`.
+- `isolatedSession`: якщо true, кожен heartbeat-запуск відбувається в новій сесії без попередньої історії розмови. Така сама схема ізоляції, як у cron `sessionTarget: "isolated"`. Зменшує витрати токенів на heartbeat приблизно зі ~100K до ~2-5K токенів.
+- Для кожного агента: установіть `agents.list[].heartbeat`. Якщо будь-який агент визначає `heartbeat`, heartbeat запускаються **лише для цих агентів**.
- Heartbeat виконують повні ходи агента — коротші інтервали спалюють більше токенів.
### `agents.defaults.compaction`
@@ -1167,19 +1206,19 @@ IRC працює через extension і налаштовується в `channe
defaults: {
compaction: {
mode: "safeguard", // default | safeguard
- provider: "my-provider", // id зареєстрованого plugin провайдера compaction (необов’язково)
+ provider: "my-provider", // id of a registered compaction provider plugin (optional)
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: "Preserve deployment IDs, ticket IDs, and host:port pairs exactly.", // used when identifierPolicy=custom
+ postCompactionSections: ["Session Startup", "Red Lines"], // [] disables reinjection
+ model: "openrouter/anthropic/claude-sonnet-4-6", // optional compaction-only model override
+ notifyUser: true, // send a brief notice when compaction starts (default: false)
memoryFlush: {
enabled: true,
softThresholdTokens: 6000,
- systemPrompt: "Сесія наближається до compaction. Збережіть тривалі спогади зараз.",
- prompt: "Запишіть будь-які тривалі нотатки в memory/YYYY-MM-DD.md; відповідайте точним тихим токеном NO_REPLY, якщо зберігати нічого.",
+ systemPrompt: "Session nearing compaction. Store durable memories now.",
+ prompt: "Write any lasting notes to memory/YYYY-MM-DD.md; reply with the exact silent token NO_REPLY if nothing to store.",
},
},
},
@@ -1187,15 +1226,15 @@ IRC працює через extension і налаштовується в `channe
}
```
-- `mode`: `default` або `safeguard` (узагальнення шматками для довгої історії). Див. [Compaction](/uk/concepts/compaction).
-- `provider`: id зареєстрованого plugin провайдера compaction. Якщо встановлено, замість вбудованого LLM-узагальнення викликається `summarize()` провайдера. У разі помилки резервно використовується вбудований механізм. Установлення провайдера примушує `mode: "safeguard"`. Див. [Compaction](/uk/concepts/compaction).
-- `timeoutSeconds`: максимальна кількість секунд, дозволена для однієї операції compaction, після чого OpenClaw її перериває. Типово: `900`.
-- `identifierPolicy`: `strict` (типово), `off` або `custom`. `strict` додає вбудовані вказівки щодо збереження непрозорих ідентифікаторів під час узагальнення compaction.
-- `identifierInstructions`: необов’язковий власний текст про збереження ідентифікаторів, який використовується, коли `identifierPolicy=custom`.
-- `postCompactionSections`: необов’язкові назви секцій AGENTS.md H2/H3, які слід повторно вбудувати після compaction. Типово `["Session Startup", "Red Lines"]`; установіть `[]`, щоб вимкнути повторне вбудовування. Якщо не задано або явно задано цю типову пару, старі заголовки `Every Session`/`Safety` також приймаються як застарілий резервний варіант.
-- `model`: необов’язкове перевизначення `provider/model-id` лише для узагальнення compaction. Використовуйте це, коли основна сесія має залишатися на одній моделі, а узагальнення compaction повинні виконуватися на іншій; якщо не задано, compaction використовує основну модель сесії.
-- `notifyUser`: коли `true`, надсилає коротке повідомлення користувачу, коли починається compaction (наприклад, «Ущільнення контексту...»). Типово вимкнено, щоб compaction була тихою.
-- `memoryFlush`: тихий агентний хід перед auto-compaction для збереження тривалих спогадів. Пропускається, коли workspace лише для читання.
+- `mode`: `default` або `safeguard` (ущільнення чанками для довгої історії). Див. [Compaction](/uk/concepts/compaction).
+- `provider`: id зареєстрованого plugin compaction provider. Якщо встановлено, замість вбудованого LLM summarization викликається `summarize()` постачальника. У разі помилки повертається до вбудованого механізму. Встановлення provider примусово задає `mode: "safeguard"`. Див. [Compaction](/uk/concepts/compaction).
+- `timeoutSeconds`: максимальна кількість секунд, дозволених для однієї операції compaction, після чого OpenClaw її перериває. За замовчуванням: `900`.
+- `identifierPolicy`: `strict` (default), `off` або `custom`. `strict` додає вбудовані інструкції щодо збереження непрозорих ідентифікаторів під час summarization compaction.
+- `identifierInstructions`: необов’язковий власний текст про збереження ідентифікаторів, що використовується, коли `identifierPolicy=custom`.
+- `postCompactionSections`: необов’язкові назви секцій AGENTS.md H2/H3 для повторного вбудовування після compaction. За замовчуванням `["Session Startup", "Red Lines"]`; встановіть `[]`, щоб вимкнути повторне вбудовування. Коли значення не встановлено або явно дорівнює цій парі за замовчуванням, старі заголовки `Every Session`/`Safety` також приймаються як застарілий резервний варіант.
+- `model`: необов’язкове перевизначення `provider/model-id` лише для summarization compaction. Використовуйте це, коли основна сесія має залишатися на одній моделі, а summary compaction мають виконуватися на іншій; якщо не встановлено, compaction використовує основну модель сесії.
+- `notifyUser`: коли `true`, надсилає коротке сповіщення користувачу, коли починається compaction (наприклад, "Compacting context..."). За замовчуванням вимкнено, щоб compaction була тихою.
+- `memoryFlush`: тиха агентна дія перед auto-compaction для збереження довготривалої пам’яті. Пропускається, коли workspace доступний лише для читання.
### `agents.defaults.contextPruning`
@@ -1207,13 +1246,13 @@ IRC працює через extension і налаштовується в `channe
defaults: {
contextPruning: {
mode: "cache-ttl", // off | cache-ttl
- ttl: "1h", // тривалість (ms/s/m/h), одиниця за замовчуванням: хвилини
+ ttl: "1h", // duration (ms/s/m/h), default unit: minutes
keepLastAssistants: 3,
softTrimRatio: 0.3,
hardClearRatio: 0.5,
minPrunableToolChars: 50000,
softTrim: { maxChars: 4000, headChars: 1500, tailChars: 1500 },
- hardClear: { enabled: true, placeholder: "[Вміст старого результату інструмента очищено]" },
+ hardClear: { enabled: true, placeholder: "[Old tool result content cleared]" },
tools: { deny: ["browser", "canvas"] },
},
},
@@ -1224,24 +1263,24 @@ IRC працює через extension і налаштовується в `channe
- `mode: "cache-ttl"` вмикає проходи обрізання.
-- `ttl` керує тим, як часто обрізання може запускатися знову (після останнього торкання кешу).
-- Обрізання спочатку м’яко скорочує завеликі результати інструментів, а потім за потреби повністю очищає старіші результати інструментів.
+- `ttl` керує тим, як часто обрізання може виконатися знову (після останнього торкання кешу).
+- Обрізання спочатку м’яко скорочує надто великі результати інструментів, а потім за потреби повністю очищає старіші результати інструментів.
-**М’яке обрізання** зберігає початок і кінець та вставляє `...` посередині.
+**Soft-trim** зберігає початок + кінець і вставляє `...` посередині.
-**Повне очищення** замінює весь результат інструмента заповнювачем.
+**Hard-clear** замінює весь результат інструмента на placeholder.
Примітки:
-- Блоки зображень ніколи не обрізаються й не очищаються.
-- Співвідношення базуються на символах (приблизно), а не на точній кількості токенів.
-- Якщо є менше ніж `keepLastAssistants` повідомлень асистента, обрізання пропускається.
+- Блоки зображень ніколи не обрізаються/очищаються.
+- Співвідношення базуються на символах (приблизно), а не на точних підрахунках токенів.
+- Якщо існує менше ніж `keepLastAssistants` повідомлень асистента, обрізання пропускається.
-Докладніше про поведінку див. у [Session Pruning](/uk/concepts/session-pruning).
+Подробиці поведінки див. у [Session Pruning](/uk/concepts/session-pruning).
-### Блокова потокова передача
+### Блоковий стримінг
```json5
{
@@ -1251,17 +1290,17 @@ IRC працює через extension і налаштовується в `channe
blockStreamingBreak: "text_end", // text_end | message_end
blockStreamingChunk: { minChars: 800, maxChars: 1200 },
blockStreamingCoalesce: { idleMs: 1000 },
- humanDelay: { mode: "natural" }, // off | natural | custom (використовуйте minMs/maxMs)
+ humanDelay: { mode: "natural" }, // off | natural | custom (use minMs/maxMs)
},
},
}
```
-- Для каналів, відмінних від Telegram, потрібен явний `*.blockStreaming: true`, щоб увімкнути блокові відповіді.
-- Перевизначення для каналу: `channels..blockStreamingCoalesce` (і варіанти для кожного акаунта). Signal/Slack/Discord/Google Chat типово мають `minChars: 1500`.
-- `humanDelay`: випадкова пауза між блоковими відповідями. `natural` = 800–2500 ms. Перевизначення для агента: `agents.list[].humanDelay`.
+- Канали, окрім Telegram, потребують явного `*.blockStreaming: true`, щоб увімкнути блокові відповіді.
+- Перевизначення каналів: `channels..blockStreamingCoalesce` (і варіанти для кожного облікового запису). За замовчуванням для Signal/Slack/Discord/Google Chat: `minChars: 1500`.
+- `humanDelay`: випадкова пауза між блоковими відповідями. `natural` = 800–2500ms. Перевизначення для агента: `agents.list[].humanDelay`.
-Докладніше про поведінку й розбиття див. у [Streaming](/uk/concepts/streaming).
+Подробиці поведінки і чанкування див. у [Streaming](/uk/concepts/streaming).
### Індикатори набору тексту
@@ -1276,7 +1315,7 @@ IRC працює через extension і налаштовується в `channe
}
```
-- Типові значення: `instant` для приватних чатів/згадок, `message` для групових чатів без згадки.
+- За замовчуванням: `instant` для прямих чатів/згадок, `message` для групових чатів без згадки.
- Перевизначення для сесії: `session.typingMode`, `session.typingIntervalSeconds`.
Див. [Typing Indicators](/uk/concepts/typing-indicators).
@@ -1285,7 +1324,7 @@ IRC працює через extension і налаштовується в `channe
### `agents.defaults.sandbox`
-Необов’язкове sandboxing для вбудованого агента. Повний посібник див. у [Sandboxing](/uk/gateway/sandboxing).
+Необов’язкова sandbox-ізоляція для вбудованого агента. Повний посібник див. у [Sandboxing](/uk/gateway/sandboxing).
```json5
{
@@ -1331,7 +1370,7 @@ IRC працює через extension і налаштовується в `channe
identityFile: "~/.ssh/id_ed25519",
certificateFile: "~/.ssh/id_ed25519-cert.pub",
knownHostsFile: "~/.ssh/known_hosts",
- // Також підтримуються SecretRef / inline вміст:
+ // SecretRefs / inline contents also supported:
// 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" },
@@ -1382,52 +1421,52 @@ IRC працює через extension і налаштовується в `channe
-**Backend:**
+**Бекенд:**
-- `docker`: локальний runtime Docker (типово)
-- `ssh`: загальний віддалений runtime на основі SSH
+- `docker`: локальний Docker runtime (default)
+- `ssh`: загальний віддалений runtime на базі SSH
- `openshell`: runtime OpenShell
-Коли вибрано `backend: "openshell"`, специфічні для runtime налаштування переносяться до
+Коли вибрано `backend: "openshell"`, специфічні для runtime налаштування переміщуються до
`plugins.entries.openshell.config`.
-**Конфігурація backend SSH:**
+**Конфігурація SSH-бекенда:**
- `target`: SSH-ціль у форматі `user@host[:port]`
-- `command`: команда SSH-клієнта (типово: `ssh`)
-- `workspaceRoot`: абсолютний віддалений корінь, який використовується для workspace за кожною областю
+- `command`: команда клієнта SSH (за замовчуванням: `ssh`)
+- `workspaceRoot`: абсолютний віддалений корінь, що використовується для workspace за scope
- `identityFile` / `certificateFile` / `knownHostsFile`: наявні локальні файли, передані в OpenSSH
-- `identityData` / `certificateData` / `knownHostsData`: inline вміст або SecretRef, який OpenClaw матеріалізує у тимчасові файли під час виконання
-- `strictHostKeyChecking` / `updateHostKeys`: параметри політики ключів хоста OpenSSH
+- `identityData` / `certificateData` / `knownHostsData`: inline-вміст або SecretRef, який OpenClaw матеріалізує у тимчасові файли під час виконання
+- `strictHostKeyChecking` / `updateHostKeys`: параметри політики host key для OpenSSH
**Пріоритет SSH auth:**
- `identityData` має пріоритет над `identityFile`
- `certificateData` має пріоритет над `certificateFile`
- `knownHostsData` має пріоритет над `knownHostsFile`
-- Значення `*Data` на основі SecretRef визначаються з активного знімка runtime secrets до початку sandbox-сесії
+- Значення `*Data` на базі SecretRef визначаються з активного знімка runtime secrets перед початком sandbox session
-**Поведінка backend SSH:**
+**Поведінка SSH-бекенда:**
-- один раз ініціалізує віддалений workspace після створення або повторного створення
+- один раз засіває віддалений workspace після create або recreate
- потім зберігає віддалений SSH workspace як канонічний
-- маршрутизує `exec`, файлові інструменти та шляхи медіа через SSH
+- маршрутизує `exec`, файлові інструменти й media paths через SSH
- не синхронізує віддалені зміни назад на хост автоматично
-- не підтримує браузерні контейнери sandbox
+- не підтримує sandbox browser containers
**Доступ до workspace:**
-- `none`: workspace sandbox за кожною областю під `~/.openclaw/sandboxes`
-- `ro`: workspace sandbox у `/workspace`, workspace агента монтується лише для читання в `/agent`
+- `none`: sandbox workspace за scope у `~/.openclaw/sandboxes`
+- `ro`: sandbox workspace в `/workspace`, workspace агента монтується лише для читання в `/agent`
- `rw`: workspace агента монтується для читання/запису в `/workspace`
**Scope:**
-- `session`: контейнер + workspace для кожної сесії
-- `agent`: один контейнер + workspace на агента (типово)
-- `shared`: спільний контейнер і workspace (без ізоляції між сесіями)
+- `session`: окремий container + workspace для кожної сесії
+- `agent`: один container + workspace на агента (default)
+- `shared`: спільний container і workspace (без міжсесійної ізоляції)
-**Конфігурація plugin OpenShell:**
+**Конфігурація плагіна OpenShell:**
```json5
{
@@ -1440,10 +1479,10 @@ IRC працює через extension і налаштовується в `channe
from: "openclaw",
remoteWorkspaceDir: "/sandbox",
remoteAgentWorkspaceDir: "/agent",
- gateway: "lab", // необов’язково
- gatewayEndpoint: "https://lab.example", // необов’язково
- policy: "strict", // необов’язковий policy id OpenShell
- providers: ["openai"], // необов’язково
+ gateway: "lab", // optional
+ gatewayEndpoint: "https://lab.example", // optional
+ policy: "strict", // optional OpenShell policy id
+ providers: ["openai"], // optional
autoProviders: true,
timeoutSeconds: 120,
},
@@ -1455,30 +1494,30 @@ IRC працює через extension і налаштовується в `channe
**Режим OpenShell:**
-- `mirror`: ініціалізувати віддалений простір з локального перед exec, синхронізувати назад після exec; локальний workspace залишається канонічним
-- `remote`: один раз ініціалізувати віддалений простір під час створення sandbox, а далі зберігати віддалений workspace як канонічний
+- `mirror`: засіяти віддалений із локального перед exec, синхронізувати назад після exec; локальний workspace залишається канонічним
+- `remote`: засіяти віддалений один раз при створенні sandbox, потім зберігати віддалений workspace канонічним
-У режимі `remote` локальні редагування хоста, зроблені поза OpenClaw, не синхронізуються в sandbox автоматично після кроку ініціалізації.
-Транспортом є SSH до sandbox OpenShell, але plugin володіє життєвим циклом sandbox і необов’язковою mirror-синхронізацією.
+У режимі `remote` локальні зміни хоста, зроблені поза OpenClaw, не синхронізуються автоматично в sandbox після кроку засівання.
+Транспорт — SSH у sandbox OpenShell, але життєвим циклом sandbox і необов’язковою mirror-синхронізацією володіє плагін.
-**`setupCommand`** виконується один раз після створення контейнера (через `sh -lc`). Потребує мережевого egress, доступного для запису root та користувача root.
+**`setupCommand`** запускається один раз після створення контейнера (через `sh -lc`). Потребує виходу в мережу, записуваного root і користувача root.
-**Для контейнерів типово `network: "none"`** — установіть `"bridge"` (або власну bridge-мережу), якщо агенту потрібен вихідний доступ.
-`"host"` заблоковано. `"container:"` типово заблоковано, якщо ви явно не встановите
+**Контейнери за замовчуванням мають `network: "none"`** — встановіть `"bridge"` (або власну bridge-мережу), якщо агенту потрібен вихід назовні.
+`"host"` заблоковано. `"container:"` заблоковано за замовчуванням, якщо ви явно не встановите
`sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true` (break-glass).
-**Вхідні вкладення** зберігаються в `media/inbound/*` в активному workspace.
+**Вхідні вкладення** staging-уються в `media/inbound/*` в активному workspace.
-**`docker.binds`** монтує додаткові каталоги хоста; глобальні прив’язки та прив’язки для кожного агента зливаються.
+**`docker.binds`** монтує додаткові каталоги хоста; глобальні й агентні binds об’єднуються.
-**Sandboxed browser** (`sandbox.browser.enabled`): Chromium + CDP у контейнері. URL noVNC вбудовується в системний prompt. Не потребує `browser.enabled` в `openclaw.json`.
-Доступ спостерігача noVNC за замовчуванням використовує VNC auth, а OpenClaw видає URL із короткочасним токеном (замість відкривати пароль у спільному URL).
+**Sandboxed browser** (`sandbox.browser.enabled`): Chromium + CDP у контейнері. URL noVNC вбудовується в system prompt. Не вимагає `browser.enabled` у `openclaw.json`.
+Доступ спостерігача noVNC за замовчуванням використовує VNC auth, а OpenClaw видає короткоживучий token URL (замість показу пароля у спільному URL).
-- `allowHostControl: false` (типово) блокує націлювання sandboxed-сесій на браузер хоста.
-- `network` типово має `openclaw-sandbox-browser` (виділена bridge-мережа). Установлюйте `bridge` лише тоді, коли вам явно потрібна глобальна bridge-зв’язність.
-- `cdpSourceRange` за потреби обмежує вхід CDP на межі контейнера до діапазону CIDR (наприклад `172.21.0.1/32`).
-- `sandbox.browser.binds` монтує додаткові каталоги хоста лише в контейнер sandbox browser. Якщо задано (включно з `[]`), воно замінює `docker.binds` для контейнера browser.
-- Типові параметри запуску визначено в `scripts/sandbox-browser-entrypoint.sh` і налаштовано для контейнерних хостів:
+- `allowHostControl: false` (default) блокує націлювання sandboxed session на browser хоста.
+- `network` за замовчуванням — `openclaw-sandbox-browser` (виділена bridge-мережа). Встановлюйте `bridge` лише тоді, коли вам свідомо потрібна глобальна bridge connectivity.
+- `cdpSourceRange` необов’язково обмежує вхід CDP на межі контейнера CIDR-діапазоном (наприклад `172.21.0.1/32`).
+- `sandbox.browser.binds` монтує додаткові каталоги хоста лише в контейнер sandbox browser. Якщо встановлено (включно з `[]`), воно замінює `docker.binds` для контейнера browser.
+- Значення запуску за замовчуванням визначено в `scripts/sandbox-browser-entrypoint.sh` і налаштовано для контейнерних хостів:
- `--remote-debugging-address=127.0.0.1`
- `--remote-debugging-port=`
- `--user-data-dir=${HOME}/.chrome`
@@ -1495,31 +1534,30 @@ IRC працює через extension і налаштовується в `channe
- `--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` знову вмикає extensions, якщо ваш робочий процес
- залежить від них.
+ увімкнені за замовчуванням і можуть бути вимкнені через
+ `OPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0`, якщо для використання WebGL/3D це потрібно.
+ - `OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0` знову вмикає extensions, якщо вони потрібні вашому workflow.
- `--renderer-process-limit=2` можна змінити за допомогою
- `OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=`; установіть `0`, щоб використовувати
- типове обмеження процесів Chromium.
- - плюс `--no-sandbox` і `--disable-setuid-sandbox`, коли ввімкнено `noSandbox`.
- - Типові значення — це базовий рівень контейнерного образу; використовуйте власний браузерний образ із власним
- entrypoint, щоб змінити типові значення контейнера.
+ `OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=`; встановіть `0`, щоб використовувати
+ стандартний ліміт процесів Chromium.
+ - а також `--no-sandbox` і `--disable-setuid-sandbox`, коли ввімкнено `noSandbox`.
+ - Значення за замовчуванням — це базовий стан контейнерного образу; використовуйте власний образ browser із власним
+ entrypoint, щоб змінити поведінку контейнера за замовчуванням.
-Browser sandboxing і `sandbox.docker.binds` наразі доступні лише для Docker.
+Browser sandboxing і `sandbox.docker.binds` наразі підтримуються лише для Docker.
Збірка образів:
```bash
-scripts/sandbox-setup.sh # основний sandbox-образ
-scripts/sandbox-browser-setup.sh # необов’язковий browser-образ
+scripts/sandbox-setup.sh # main sandbox image
+scripts/sandbox-browser-setup.sh # optional browser image
```
-### `agents.list` (перевизначення для кожного агента)
+### `agents.list` (перевизначення для окремих агентів)
```json5
{
@@ -1528,15 +1566,15 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об
{
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 для агента
- params: { cacheRetention: "none" }, // перевизначає params для відповідного defaults.models за ключами
- skills: ["docs-search"], // замінює agents.defaults.skills, якщо задано
+ model: "anthropic/claude-opus-4-6", // or { primary, fallbacks }
+ thinkingDefault: "high", // per-agent thinking level override
+ reasoningDefault: "on", // per-agent reasoning visibility override
+ fastModeDefault: false, // per-agent fast mode override
+ params: { cacheRetention: "none" }, // overrides matching defaults.models params by key
+ skills: ["docs-search"], // replaces agents.defaults.skills when set
identity: {
name: "Samantha",
theme: "helpful sloth",
@@ -1568,25 +1606,25 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об
```
- `id`: стабільний id агента (обов’язково).
-- `default`: якщо встановлено для кількох, перемагає перший (логуються попередження). Якщо не встановлено для жодного, типовим є перший запис у списку.
+- `default`: коли встановлено кілька, перший має пріоритет (журналюється попередження). Якщо не встановлено жодного, за замовчуванням використовується перший запис у списку.
- `model`: рядкова форма перевизначає лише `primary`; об’єктна форма `{ primary, fallbacks }` перевизначає обидва (`[]` вимикає глобальні fallback). Cron jobs, які перевизначають лише `primary`, усе одно успадковують fallback за замовчуванням, якщо ви не встановите `fallbacks: []`.
-- `params`: параметри потоку для агента, злиті поверх вибраного запису моделі в `agents.defaults.models`. Використовуйте це для перевизначень на рівні агента, таких як `cacheRetention`, `temperature` або `maxTokens`, не дублюючи весь каталог моделей.
-- `skills`: необов’язковий allowlist 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`: необов’язковий дескриптор runtime для агента. Використовуйте `type: "acp"` із типовими значеннями `runtime.acp` (`agent`, `backend`, `mode`, `cwd`), коли агент повинен типово використовувати сесії ACP harness.
+- `params`: параметри потоку для окремого агента, що зливаються поверх вибраного запису моделі в `agents.defaults.models`. Використовуйте це для перевизначень на рівні агента, таких як `cacheRetention`, `temperature` або `maxTokens`, без дублювання всього каталогу моделей.
+- `skills`: необов’язковий allowlist 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`: необов’язковий дескриптор runtime для окремого агента. Використовуйте `type: "acp"` із defaults `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`: allowlist id агентів для `sessions_spawn` (`["*"]` = будь-який; типово: лише той самий агент).
-- Захист успадкування sandbox: якщо сесія запитувача працює в sandbox, `sessions_spawn` відхиляє цілі, які працювали б без sandbox.
-- `subagents.requireAgentId`: якщо true, блокує виклики `sessions_spawn`, які не містять `agentId` (примушує до явного вибору профілю; типово: false).
+- `identity` виводить значення за замовчуванням: `ackReaction` з `emoji`, `mentionPatterns` з `name`/`emoji`.
+- `subagents.allowAgents`: allowlist id агентів для `sessions_spawn` (`["*"]` = будь-який; за замовчуванням: лише той самий агент).
+- Захист успадкування sandbox: якщо сесія-запитувач sandboxed, `sessions_spawn` відхиляє цілі, які виконувалися б без sandbox.
+- `subagents.requireAgentId`: коли true, блокує виклики `sessions_spawn`, які пропускають `agentId` (примушує до явного вибору профілю; за замовчуванням false).
---
-## Маршрутизація між кількома агентами
+## Багатоагентна маршрутизація
-Запускайте кілька ізольованих агентів в одному Gateway. Див. [Multi-Agent](/uk/concepts/multi-agent).
+Запускайте кілька ізольованих агентів в одному шлюзі. Див. [Multi-Agent](/uk/concepts/multi-agent).
```json5
{
@@ -1603,29 +1641,29 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об
}
```
-### Поля збігу прив’язок
+### Поля збігу binding
-- `type` (необов’язково): `route` для звичайної маршрутизації (відсутній type за замовчуванням означає route), `acp` для постійних прив’язок розмов ACP.
+- `type` (необов’язково): `route` для звичайної маршрутизації (відсутність type означає route), `acp` для постійних ACP-прив’язок розмов.
- `match.channel` (обов’язково)
-- `match.accountId` (необов’язково; `*` = будь-який акаунт; якщо опущено = акаунт за замовчуванням)
+- `match.accountId` (необов’язково; `*` = будь-який обліковий запис; пропущено = обліковий запис за замовчуванням)
- `match.peer` (необов’язково; `{ kind: direct|group|channel, id }`)
-- `match.guildId` / `match.teamId` (необов’язково; залежить від каналу)
+- `match.guildId` / `match.teamId` (необов’язково; специфічно для каналу)
- `acp` (необов’язково; лише для записів `type: "acp"`): `{ mode, label, cwd, backend }`
-**Детермінований порядок збігів:**
+**Детермінований порядок збігу:**
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` + акаунт + `match.peer.id`) і не використовує наведений вище порядок рівнів route-прив’язок.
+Для записів `type: "acp"` OpenClaw визначає збіг за точною ідентичністю розмови (`match.channel` + account + `match.peer.id`) і не використовує порядок рівнів route binding вище.
-### Профілі доступу для кожного агента
+### Профілі доступу для окремих агентів
@@ -1645,7 +1683,7 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об
-
+
```json5
{
@@ -1720,7 +1758,7 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об
-Докладніше про пріоритети див. у [Multi-Agent Sandbox & Tools](/uk/tools/multi-agent-sandbox-tools).
+Подробиці про пріоритети див. у [Multi-Agent Sandbox & Tools](/uk/tools/multi-agent-sandbox-tools).
---
@@ -1746,22 +1784,22 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об
},
resetTriggers: ["/new", "/reset"],
store: "~/.openclaw/agents/{agentId}/sessions/sessions.json",
- parentForkMaxTokens: 100000, // пропустити fork від батьківського потоку вище цього числа токенів (0 вимикає)
+ parentForkMaxTokens: 100000, // skip parent-thread fork above this token count (0 disables)
maintenance: {
mode: "warn", // warn | enforce
pruneAfter: "30d",
maxEntries: 500,
rotateBytes: "10mb",
- resetArchiveRetention: "30d", // рядок тривалості або false
- maxDiskBytes: "500mb", // необов’язковий жорсткий бюджет
- highWaterBytes: "400mb", // необов’язкова ціль очищення
+ resetArchiveRetention: "30d", // duration or false
+ maxDiskBytes: "500mb", // optional hard budget
+ highWaterBytes: "400mb", // optional cleanup target
},
threadBindings: {
enabled: true,
- idleHours: 24, // типове автозняття фокуса через неактивність у годинах (`0` вимикає)
- maxAgeHours: 0, // типовий жорсткий максимальний вік у годинах (`0` вимикає)
+ idleHours: 24, // default inactivity auto-unfocus in hours (`0` disables)
+ maxAgeHours: 0, // default hard max age in hours (`0` disables)
},
- mainKey: "main", // застаріле (runtime завжди використовує "main")
+ mainKey: "main", // legacy (runtime always uses "main")
agentToAgent: { maxPingPongTurns: 5 },
sendPolicy: {
rules: [{ action: "deny", match: { channel: "discord", chatType: "group" } }],
@@ -1774,45 +1812,45 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об
- **`scope`**: базова стратегія групування сесій для контекстів групового чату.
- - `per-sender` (типово): кожен відправник отримує ізольовану сесію в межах контексту каналу.
- - `global`: усі учасники в контексті каналу спільно використовують одну сесію (використовуйте лише тоді, коли спільний контекст справді потрібен).
+ - `per-sender` (default): кожен відправник отримує ізольовану сесію в межах контексту каналу.
+ - `global`: усі учасники в контексті каналу спільно використовують одну сесію (використовуйте лише тоді, коли спільний контекст справді задумано).
- **`dmScope`**: як групуються DM.
- `main`: усі DM спільно використовують основну сесію.
- `per-peer`: ізоляція за id відправника між каналами.
- `per-channel-peer`: ізоляція для кожного каналу + відправника (рекомендовано для багатокористувацьких inbox).
- - `per-account-channel-peer`: ізоляція для кожного акаунта + каналу + відправника (рекомендовано для багатоакаунтних конфігурацій).
-- **`identityLinks`**: мапа канонічних id до provider-prefixed peer для спільного використання сесій між каналами.
-- **`reset`**: основна політика скидання. `daily` скидає о `atHour` за місцевим часом; `idle` скидає після `idleMinutes`. Якщо налаштовано обидва варіанти, спрацьовує той, що спливає раніше.
-- **`resetByType`**: перевизначення за типом (`direct`, `group`, `thread`). Застарілий `dm` приймається як псевдонім для `direct`.
-- **`parentForkMaxTokens`**: максимальні `totalTokens` батьківської сесії, допустимі під час створення форкнутої сесії потоку (типово `100000`).
- - Якщо батьківський `totalTokens` перевищує це значення, OpenClaw запускає нову сесію потоку замість успадкування історії транскрипту батьківської сесії.
- - Установіть `0`, щоб вимкнути цей захист і завжди дозволяти fork від батьківської сесії.
-- **`mainKey`**: застаріле поле. Runtime тепер завжди використовує `"main"` для основного кошика прямих чатів.
-- **`agentToAgent.maxPingPongTurns`**: максимальна кількість зворотних ходів між агентами під час взаємодії агент-до-агента (ціле число, діапазон: `0`–`5`). `0` вимикає ланцюжки ping-pong.
-- **`sendPolicy`**: збіг за `channel`, `chatType` (`direct|group|channel`, із застарілим псевдонімом `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` вимикає; провайдери можуть перевизначати)
+ - `per-account-channel-peer`: ізоляція за account + channel + sender (рекомендовано для багатообліковості).
+- **`identityLinks`**: зіставляє канонічні id із peer-ами з префіксом постачальника для спільного використання сесій між каналами.
+- **`reset`**: основна політика reset. `daily` скидає о `atHour` за місцевим часом; `idle` скидає після `idleMinutes`. Коли налаштовано обидва, спрацьовує те, що закінчується першим.
+- **`resetByType`**: перевизначення для кожного типу (`direct`, `group`, `thread`). Застарілий `dm` приймається як alias для `direct`.
+- **`parentForkMaxTokens`**: максимальне значення `totalTokens` батьківської сесії, дозволене під час створення forked thread session (default `100000`).
+ - Якщо `totalTokens` батьківської сесії вище цього значення, OpenClaw запускає нову thread session замість успадкування історії транскрипту батька.
+ - Встановіть `0`, щоб вимкнути цей захист і завжди дозволяти fork від батька.
+- **`mainKey`**: застаріле поле. Runtime тепер завжди використовує `"main"` для основного бакета direct chat.
+- **`agentToAgent.maxPingPongTurns`**: максимальна кількість ходів відповіді назад між агентами під час обміну agent-to-agent (ціле число, діапазон: `0`–`5`). `0` вимикає ping-pong chaining.
+- **`sendPolicy`**: збіг за `channel`, `chatType` (`direct|group|channel`, із застарілим alias `dm`), `keyPrefix` або `rawKeyPrefix`. Перший deny має пріоритет.
+- **`maintenance`**: очищення сховища сесій + контроль retention.
+ - `mode`: `warn` лише виводить попередження; `enforce` застосовує очищення.
+ - `pruneAfter`: поріг віку для застарілих записів (default `30d`).
+ - `maxEntries`: максимальна кількість записів у `sessions.json` (default `500`).
+ - `rotateBytes`: ротує `sessions.json`, коли він перевищує цей розмір (default `10mb`).
+ - `resetArchiveRetention`: retention для архівів транскриптів `*.reset.`. За замовчуванням дорівнює `pruneAfter`; встановіть `false`, щоб вимкнути.
+ - `maxDiskBytes`: необов’язковий бюджет диска для каталогу sessions. У режимі `warn` журналює попередження; у режимі `enforce` спочатку видаляє найстаріші артефакти/сесії.
+ - `highWaterBytes`: необов’язкова ціль після очищення бюджету. За замовчуванням `80%` від `maxDiskBytes`.
+- **`threadBindings`**: глобальні значення за замовчуванням для функцій сесій, прив’язаних до thread.
+ - `enabled`: головний перемикач за замовчуванням (постачальники можуть перевизначати; Discord використовує `channels.discord.threadBindings.enabled`)
+ - `idleHours`: значення за замовчуванням для auto-unfocus через неактивність у годинах (`0` вимикає; постачальники можуть перевизначати)
+ - `maxAgeHours`: значення за замовчуванням для жорсткого максимального віку в годинах (`0` вимикає; постачальники можуть перевизначати)
---
-## Messages
+## Повідомлення
```json5
{
messages: {
- responsePrefix: "🦞", // або "auto"
+ responsePrefix: "🦞", // or "auto"
ackReaction: "👀",
ackReactionScope: "group-mentions", // group-mentions | group-all | direct | all
removeAckAfterReply: false,
@@ -1827,7 +1865,7 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об
},
},
inbound: {
- debounceMs: 2000, // 0 вимикає
+ debounceMs: 2000, // 0 disables
byChannel: {
whatsapp: 5000,
slack: 1500,
@@ -1839,36 +1877,36 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об
### Префікс відповіді
-Перевизначення для кожного каналу/акаунта: `channels..responsePrefix`, `channels..accounts..responsePrefix`.
+Перевизначення для каналу/облікового запису: `channels..responsePrefix`, `channels..accounts..responsePrefix`.
-Розв’язання (найспецифічніше перемагає): акаунт → канал → глобальне. `""` вимикає і зупиняє каскад. `"auto"` виводить `[{identity.name}]`.
+Порядок розв’язання (найспецифічніше має пріоритет): account → channel → global. `""` вимикає й зупиняє каскад. `"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}` — псевдонім для `{thinkingLevel}`.
+Змінні нечутливі до регістру. `{think}` є alias для `{thinkingLevel}`.
-### Реакція підтвердження
+### Ack reaction
-- Типово бере `identity.emoji` активного агента, інакше `"👀"`. Установіть `""`, щоб вимкнути.
+- За замовчуванням використовується `identity.emoji` активного агента, інакше `"👀"`. Встановіть `""`, щоб вимкнути.
- Перевизначення для каналу: `channels..ackReaction`, `channels..accounts..ackReaction`.
-- Порядок розв’язання: акаунт → канал → `messages.ackReaction` → резервне значення identity.
-- Scope: `group-mentions` (типово), `group-all`, `direct`, `all`.
-- `removeAckAfterReply`: видаляє ack після відповіді в Slack, Discord і Telegram.
-- `messages.statusReactions.enabled`: вмикає реакції статусу життєвого циклу в Slack, Discord і Telegram.
- У Slack і Discord, якщо не задано, статусні реакції залишаються увімкненими, коли активні ack-реакції.
- У Telegram установіть це явно в `true`, щоб увімкнути статусні реакції життєвого циклу.
+- Порядок розв’язання: account → channel → `messages.ackReaction` → резервна ідентичність.
+- Scope: `group-mentions` (default), `group-all`, `direct`, `all`.
+- `removeAckAfterReply`: видаляє ack після відповіді у Slack, Discord і Telegram.
+- `messages.statusReactions.enabled`: вмикає lifecycle status reactions у Slack, Discord і Telegram.
+ У Slack і Discord незадане значення залишає status reactions увімкненими, коли активні ack reactions.
+ У Telegram встановіть це явно в `true`, щоб увімкнути lifecycle status reactions.
### Debounce для вхідних повідомлень
-Об’єднує швидкі текстові повідомлення від одного відправника в один хід агента. Медіа/вкладення скидаються негайно. Керівні команди обходять debounce.
+Об’єднує швидкі текстові повідомлення від одного відправника в один хід агента. Медіа/вкладення змиваються негайно. Керувальні команди обходять debounce.
### TTS (text-to-speech)
@@ -1911,12 +1949,12 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об
}
```
-- `auto` керує auto-TTS. `/tts off|always|inbound|tagged` перевизначає це для кожної сесії.
+- `auto` керує режимом auto-TTS за замовчуванням: `off`, `always`, `inbound` або `tagged`. `/tts on|off` може перевизначити локальні налаштування, а `/tts status` показує фактичний стан.
- `summaryModel` перевизначає `agents.defaults.model.primary` для auto-summary.
-- `modelOverrides` типово увімкнено; `modelOverrides.allowProvider` типово має `false` (opt-in).
-- API keys резервно беруться з `ELEVENLABS_API_KEY`/`XI_API_KEY` і `OPENAI_API_KEY`.
+- `modelOverrides` увімкнено за замовчуванням; `modelOverrides.allowProvider` за замовчуванням має значення `false` (opt-in).
+- API keys повертаються до `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` вказує на не-OpenAI endpoint, OpenClaw розглядає його як OpenAI-сумісний TTS-сервер і послаблює валідацію model/voice.
+- Коли `openai.baseUrl` вказує на endpoint, відмінний від OpenAI, OpenClaw трактує його як OpenAI-compatible TTS server і послаблює валідацію model/voice.
---
@@ -1946,13 +1984,13 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об
}
```
-- `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 key Talk не налаштовано.
-- `providers.*.voiceAliases` дозволяє директивам Talk використовувати зручні назви.
-- `silenceTimeoutMs` визначає, скільки режим Talk чекає після того, як користувач замовкне, перш ніж надсилати транскрипт. Якщо не задано, зберігається типове для платформи вікно паузи (`700 ms на macOS і Android, 900 ms на iOS`).
+- `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` застосовується лише тоді, коли не налаштовано Talk API key.
+- `providers.*.voiceAliases` дозволяє директивам Talk використовувати дружні назви.
+- `silenceTimeoutMs` керує тим, скільки часу режим Talk чекає після тиші користувача, перш ніж надіслати транскрипт. Якщо не встановлено, зберігається вікно паузи платформи за замовчуванням (`700 ms на macOS і Android, 900 ms на iOS`).
---
@@ -1960,37 +1998,37 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об
### Профілі інструментів
-`tools.profile` встановлює базовий allowlist перед `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` | Без обмежень (те саме, що не задавати) |
+| `full` | Без обмежень (те саме, що не задано) |
### Групи інструментів
-| Група | Інструменти |
-| ------------------ | ------------------------------------------------------------------------------------------------------------------------ |
-| `group:runtime` | `exec`, `process`, `code_execution` (`bash` приймається як псевдонім для `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`
-Глобальна політика дозволу/заборони інструментів (deny перемагає). Нечутлива до регістру, підтримує wildcard `*`. Застосовується навіть тоді, коли Docker sandbox вимкнено.
+Глобальна політика allow/deny для інструментів (deny має пріоритет). Нечутлива до регістру, підтримує wildcard `*`. Застосовується навіть коли Docker sandbox вимкнено.
```json5
{
@@ -2000,7 +2038,7 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об
### `tools.byProvider`
-Додатково обмежує інструменти для конкретних провайдерів або моделей. Порядок: базовий профіль → профіль провайдера → allow/deny.
+Додатково обмежує інструменти для конкретних постачальників або моделей. Порядок: базовий профіль → профіль постачальника → allow/deny.
```json5
{
@@ -2033,8 +2071,8 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об
```
- Перевизначення для агента (`agents.list[].tools.elevated`) може лише додатково обмежувати.
-- `/elevated on|off|ask|full` зберігає стан для кожної сесії; inline-директиви застосовуються до одного повідомлення.
-- Elevated `exec` обходить sandboxing і використовує налаштований шлях виходу (`gateway` за замовчуванням або `node`, коли ціль exec — `node`).
+- `/elevated on|off|ask|full` зберігає стан для кожної сесії; inline directives застосовуються лише до одного повідомлення.
+- Elevated `exec` обходить sandboxing і використовує налаштований escape path (`gateway` за замовчуванням або `node`, коли exec target — `node`).
### `tools.exec`
@@ -2058,7 +2096,7 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об
### `tools.loopDetection`
-Перевірки безпеки циклів інструментів **типово вимкнені**. Установіть `enabled: true`, щоб увімкнути виявлення.
+Перевірки безпеки від циклів інструментів **вимкнені за замовчуванням**. Встановіть `enabled: true`, щоб увімкнути виявлення.
Налаштування можна визначати глобально в `tools.loopDetection` і перевизначати для кожного агента в `agents.list[].tools.loopDetection`.
```json5
@@ -2081,13 +2119,13 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об
```
- `historySize`: максимальна історія викликів інструментів, що зберігається для аналізу циклів.
-- `warningThreshold`: поріг для попереджень про повторюваний шаблон без прогресу.
-- `criticalThreshold`: вищий поріг для блокування критичних циклів.
+- `warningThreshold`: поріг повторюваного шаблону без прогресу для попереджень.
+- `criticalThreshold`: вищий поріг повторення для блокування критичних циклів.
- `globalCircuitBreakerThreshold`: поріг жорсткої зупинки для будь-якого запуску без прогресу.
- `detectors.genericRepeat`: попереджати про повторні виклики того самого інструмента з тими самими аргументами.
- `detectors.knownPollNoProgress`: попереджати/блокувати відомі poll-інструменти (`process.poll`, `command_status` тощо).
-- `detectors.pingPong`: попереджати/блокувати чергування пар шаблонів без прогресу.
-- Якщо `warningThreshold >= criticalThreshold` або `criticalThreshold >= globalCircuitBreakerThreshold`, валідація не проходить.
+- `detectors.pingPong`: попереджати/блокувати чергування парних шаблонів без прогресу.
+- Якщо `warningThreshold >= criticalThreshold` або `criticalThreshold >= globalCircuitBreakerThreshold`, валідація завершується помилкою.
### `tools.web`
@@ -2097,14 +2135,14 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об
web: {
search: {
enabled: true,
- apiKey: "brave_api_key", // або BRAVE_API_KEY env
+ apiKey: "brave_api_key", // or BRAVE_API_KEY env
maxResults: 5,
timeoutSeconds: 30,
cacheTtlMinutes: 15,
},
fetch: {
enabled: true,
- provider: "firecrawl", // необов’язково; опустіть для auto-detect
+ provider: "firecrawl", // optional; omit for auto-detect
maxChars: 50000,
maxCharsCap: 50000,
maxResponseBytes: 2000000,
@@ -2121,7 +2159,7 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об
### `tools.media`
-Налаштовує розуміння вхідних медіа (зображення/аудіо/відео):
+Налаштовує розуміння вхідних медіа (image/audio/video):
```json5
{
@@ -2129,7 +2167,7 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об
media: {
concurrency: 2,
asyncCompletion: {
- directSend: false, // opt-in: надсилати завершені асинхронні music/video безпосередньо в канал
+ directSend: false, // opt-in: send finished async music/video directly to the channel
},
audio: {
enabled: true,
@@ -2155,30 +2193,30 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об
-**Запис провайдера** (`type: "provider"` або опущено):
+**Запис постачальника** (`type: "provider"` або пропущено):
-- `provider`: id API-провайдера (`openai`, `anthropic`, `google`/`gemini`, `groq` тощо)
+- `provider`: id API-постачальника (`openai`, `anthropic`, `google`/`gemini`, `groq` тощо)
- `model`: перевизначення id моделі
-- `profile` / `preferredProfile`: вибір профілю `auth-profiles.json`
+- `profile` / `preferredProfile`: вибір профілю з `auth-profiles.json`
-**Запис CLI** (`type: "cli"`):
+**CLI-запис** (`type: "cli"`):
-- `command`: виконуваний файл
-- `args`: аргументи з шаблонами (підтримує `{{MediaPath}}`, `{{Prompt}}`, `{{MaxChars}}` тощо)
+- `command`: виконуваний файл для запуску
+- `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`). За замовчуванням: `openai`/`anthropic`/`minimax` → image, `google` → image+audio+video, `groq` → audio.
+- `prompt`, `maxChars`, `maxBytes`, `timeoutSeconds`, `language`: перевизначення для окремого запису.
+- У разі збою відбувається перехід до наступного запису.
-Автентифікація провайдера відбувається у стандартному порядку: `auth-profiles.json` → env vars → `models.providers.*.apiKey`.
+Provider auth follows standard order: `auth-profiles.json` → env vars → `models.providers.*.apiKey`.
**Поля async completion:**
- `asyncCompletion.directSend`: коли `true`, завершені асинхронні задачі `music_generate`
- і `video_generate` спочатку намагаються доставити результат безпосередньо в канал. Типово: `false`
- (застарілий шлях пробудження сесії запитувача/доставки моделі).
+ і `video_generate` спочатку намагаються доставлятися напряму в канал. За замовчуванням: `false`
+ (застарілий шлях requester-session wake/model-delivery).
@@ -2197,9 +2235,9 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об
### `tools.sessions`
-Керує тим, на які сесії можуть націлюватися інструменти сесій (`sessions_list`, `sessions_history`, `sessions_send`).
+Керує тим, які сесії можуть бути цілями для інструментів сесій (`sessions_list`, `sessions_history`, `sessions_send`).
-Типово: `tree` (поточна сесія + сесії, породжені нею, наприклад subagents).
+За замовчуванням: `tree` (поточна сесія + сесії, породжені нею, наприклад subagents).
```json5
{
@@ -2216,9 +2254,9 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об
- `self`: лише поточний ключ сесії.
- `tree`: поточна сесія + сесії, породжені поточною сесією (subagents).
-- `agent`: будь-яка сесія, що належить поточному agent id (може включати інших користувачів, якщо ви запускаєте сесії per-sender під тим самим agent id).
-- `all`: будь-яка сесія. Націлювання між агентами все одно потребує `tools.agentToAgent`.
-- Обмеження sandbox: коли поточна сесія працює в sandbox і `agents.defaults.sandbox.sessionToolsVisibility="spawned"`, видимість примусово встановлюється в `tree`, навіть якщо `tools.sessions.visibility="all"`.
+- `agent`: будь-яка сесія, що належить поточному agent id (може включати інших користувачів, якщо ви використовуєте per-sender sessions під тим самим agent id).
+- `all`: будь-яка сесія. Націлювання між агентами все ще вимагає `tools.agentToAgent`.
+- Sandbox clamp: коли поточна сесія sandboxed і `agents.defaults.sandbox.sessionToolsVisibility="spawned"`, visibility примусово встановлюється в `tree`, навіть якщо `tools.sessions.visibility="all"`.
### `tools.sessions_spawn`
@@ -2229,11 +2267,11 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об
tools: {
sessions_spawn: {
attachments: {
- enabled: false, // opt-in: установіть true, щоб дозволити inline file attachments
- maxTotalBytes: 5242880, // 5 MB загалом для всіх файлів
+ enabled: false, // opt-in: set true to allow inline file attachments
+ maxTotalBytes: 5242880, // 5 MB total across all files
maxFiles: 50,
- maxFileBytes: 1048576, // 1 MB на файл
- retainOnSessionKeep: false, // зберігати вкладення, коли cleanup="keep"
+ maxFileBytes: 1048576, // 1 MB per file
+ retainOnSessionKeep: false, // keep attachments when cleanup="keep"
},
},
},
@@ -2243,21 +2281,21 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об
Примітки:
- Вкладення підтримуються лише для `runtime: "subagent"`. Runtime ACP їх відхиляє.
-- Файли матеріалізуються в дочірньому workspace в `.openclaw/attachments//` із `.manifest.json`.
-- Вміст вкладень автоматично редагується під час збереження транскрипту.
-- Вхідні дані base64 перевіряються строгими перевірками алфавіту/падінгу та захистом розміру до декодування.
-- Дозволи файлів: `0700` для каталогів і `0600` для файлів.
-- Очищення слідує політиці `cleanup`: `delete` завжди видаляє вкладення; `keep` залишає їх лише тоді, коли `retainOnSessionKeep: true`.
+- Файли матеріалізуються в дочірньому workspace за шляхом `.openclaw/attachments//` з `.manifest.json`.
+- Вміст вкладень автоматично редагується під час збереження transcript.
+- Входи base64 перевіряються суворою валідацією алфавіту/padding і захистом розміру до декодування.
+- Права доступу до файлів: `0700` для каталогів і `0600` для файлів.
+- Очищення дотримується політики `cleanup`: `delete` завжди видаляє вкладення; `keep` зберігає їх лише коли `retainOnSessionKeep: true`.
### `tools.experimental`
-Експериментальні прапорці вбудованих інструментів. Типово вимкнені, якщо не діє правило auto-enable, специфічне для runtime.
+Експериментальні прапорці вбудованих інструментів. За замовчуванням вимкнено, якщо не спрацьовує правило auto-enable, специфічне для runtime.
```json5
{
tools: {
experimental: {
- planTool: true, // увімкнути експериментальний update_plan
+ planTool: true, // enable experimental update_plan
},
},
}
@@ -2266,8 +2304,8 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об
Примітки:
- `planTool`: вмикає структурований інструмент `update_plan` для відстеження нетривіальної багатокрокової роботи.
-- Типово: `false` для провайдерів, відмінних від OpenAI. Запуски OpenAI та OpenAI Codex автоматично вмикають його, якщо значення не задано; установіть `false`, щоб вимкнути це auto-enable.
-- Коли інструмент увімкнено, системний prompt також додає вказівки щодо використання, щоб модель застосовувала його лише для суттєвої роботи й тримала максимум один крок у стані `in_progress`.
+- За замовчуванням: `false` для не-OpenAI постачальників. Запуски OpenAI і OpenAI Codex автоматично вмикають його, якщо значення не встановлено; задайте `false`, щоб вимкнути це auto-enable.
+- Коли увімкнено, system prompt також додає інструкції щодо використання, щоб модель застосовувала його лише для суттєвої роботи і тримала не більш як один крок у стані `in_progress`.
### `agents.defaults.subagents`
@@ -2287,21 +2325,21 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser-об
}
```
-- `model`: типова модель для породжених sub-agents. Якщо не задано, sub-agents успадковують модель викликача.
-- `allowAgents`: типовий allowlist id цільових агентів для `sessions_spawn`, коли агент-запитувач не задає власний `subagents.allowAgents` (`["*"]` = будь-який; типово: лише той самий агент).
-- `runTimeoutSeconds`: типовий тайм-аут (у секундах) для `sessions_spawn`, коли виклик інструмента опускає `runTimeoutSeconds`. `0` означає відсутність тайм-ауту.
+- `model`: модель за замовчуванням для породжених sub-agents. Якщо пропущено, sub-agents успадковують модель викликувача.
+- `allowAgents`: allowlist id цільових агентів за замовчуванням для `sessions_spawn`, коли агент-запитувач не задає власний `subagents.allowAgents` (`["*"]` = будь-який; за замовчуванням: лише той самий агент).
+- `runTimeoutSeconds`: тайм-аут за замовчуванням (секунди) для `sessions_spawn`, коли виклик інструмента пропускає `runTimeoutSeconds`. `0` означає без тайм-ауту.
- Політика інструментів для subagent: `tools.subagents.tools.allow` / `tools.subagents.tools.deny`.
---
-## Власні провайдери та base URL
+## Користувацькі постачальники і base URL
-OpenClaw використовує вбудований каталог моделей. Додавайте власних провайдерів через `models.providers` у конфігурації або `~/.openclaw/agents//agent/models.json`.
+OpenClaw використовує вбудований каталог моделей. Додавайте користувацьких постачальників через `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",
@@ -2325,49 +2363,49 @@ OpenClaw використовує вбудований каталог модел
}
```
-- Використовуйте `authHeader: true` + `headers` для власних потреб автентифікації.
-- Перевизначте корінь конфігурації агента через `OPENCLAW_AGENT_DIR` (або `PI_CODING_AGENT_DIR`, застарілий псевдонім змінної середовища).
-- Пріоритет злиття для однакових ID провайдерів:
- - Непорожні значення `baseUrl` з `models.json` агента мають пріоритет.
- - Непорожні значення `apiKey` агента мають пріоритет лише тоді, коли цей провайдер не керується SecretRef у поточному контексті конфігурації/auth-profile.
- - Значення `apiKey` провайдера, якими керує SecretRef, оновлюються з маркерів джерела (`ENV_VAR_NAME` для env-ref, `secretref-managed` для file/exec ref) замість збереження розв’язаних секретів.
- - Значення header провайдера, якими керує SecretRef, оновлюються з маркерів джерела (`secretref-env:ENV_VAR_NAME` для env-ref, `secretref-managed` для file/exec ref).
- - Порожні або відсутні `apiKey`/`baseUrl` агента повертаються до `models.providers` у конфігурації.
- - Для однакових моделей `contextWindow`/`maxTokens` використовують більше значення з явної конфігурації або неявних значень каталогу.
- - Для однакових моделей `contextTokens` зберігає явне обмеження runtime, якщо воно задане; використовуйте його, щоб обмежити ефективний контекст без зміни рідних метаданих моделі.
- - Використовуйте `models.mode: "replace"`, якщо хочете, щоб конфігурація повністю переписувала `models.json`.
- - Збереження маркерів є авторитетним за джерелом: маркери записуються з активного знімка конфігурації джерела (до розв’язання), а не з розв’язаних значень секретів runtime.
+- Використовуйте `authHeader: true` + `headers` для нестандартних потреб автентифікації.
+- Перевизначайте корінь конфігурації агента через `OPENCLAW_AGENT_DIR` (або `PI_CODING_AGENT_DIR`, застарілий alias змінної середовища).
+- Пріоритет злиття для однакових ID постачальників:
+ - Непорожні значення `baseUrl` з agent `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, якщо воно присутнє; використовуйте це, щоб обмежити фактичний контекст без зміни нативних метаданих моделі.
+ - Використовуйте `models.mode: "replace"`, коли хочете, щоб конфігурація повністю переписала `models.json`.
+ - Збереження маркерів є source-authoritative: маркери записуються з активного знімка source config (до розв’язання), а не з розв’язаних значень секретів runtime.
-### Деталі полів провайдера
+### Деталі полів постачальника
-- `models.mode`: поведінка каталогу провайдерів (`merge` або `replace`).
-- `models.providers`: мапа власних провайдерів, ключем якої є id провайдера.
+- `models.mode`: поведінка каталогу постачальників (`merge` або `replace`).
+- `models.providers`: мапа користувацьких постачальників із ключем provider id.
- `models.providers.*.api`: адаптер запитів (`openai-completions`, `openai-responses`, `anthropic-messages`, `google-generative-ai` тощо).
-- `models.providers.*.apiKey`: облікові дані провайдера (краще використовувати SecretRef/env substitution).
+- `models.providers.*.apiKey`: облікові дані постачальника (надавайте перевагу 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.*.headers`: додаткові статичні заголовки для маршрутизації proxy/tenant.
-- `models.providers.*.request`: перевизначення транспорту для HTTP-запитів model-provider.
- - `request.headers`: додаткові заголовки (зливаються з типовими для провайдера). Значення приймають SecretRef.
- - `request.auth`: перевизначення стратегії автентифікації. Режими: `"provider-default"` (використовувати вбудовану auth провайдера), `"authorization-bearer"` (із `token`), `"header"` (із `headerName`, `value`, необов’язковим `prefix`).
- - `request.proxy`: перевизначення HTTP proxy. Режими: `"env-proxy"` (використовувати змінні середовища `HTTP_PROXY`/`HTTPS_PROXY`), `"explicit-proxy"` (із `url`). Обидва режими приймають необов’язковий підоб’єкт `tls`.
+- `models.providers.*.injectNumCtxForOpenAICompat`: для Ollama + `openai-completions` вставляє `options.num_ctx` у запити (default: `true`).
+- `models.providers.*.authHeader`: примусово передає облікові дані в заголовку `Authorization`, коли це потрібно.
+- `models.providers.*.baseUrl`: базовий URL upstream API.
+- `models.providers.*.headers`: додаткові статичні заголовки для proxy/tenant routing.
+- `models.providers.*.request`: перевизначення транспорту для HTTP-запитів model provider.
+ - `request.headers`: додаткові заголовки (зливаються зі стандартними заголовками постачальника). Значення приймають SecretRef.
+ - `request.auth`: перевизначення стратегії auth. Режими: `"provider-default"` (використовувати вбудовану auth постачальника), `"authorization-bearer"` (з `token`), `"header"` (з `headerName`, `value`, необов’язковим `prefix`).
+ - `request.proxy`: перевизначення HTTP proxy. Режими: `"env-proxy"` (використовувати env `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-обмеження контексту. Використовуйте це, коли вам потрібен менший ефективний бюджет контексту, ніж рідне `contextWindow` моделі.
-- `models.providers.*.models.*.compat.supportsDeveloperRole`: необов’язкова підказка сумісності. Для `api: "openai-completions"` із непорожнім нерідним `baseUrl` (host не `api.openai.com`) OpenClaw примусово встановлює це значення в `false` під час runtime. Порожній/відсутній `baseUrl` зберігає типову поведінку OpenAI.
-- `models.providers.*.models.*.compat.requiresStringContent`: необов’язкова підказка сумісності для OpenAI-сумісних chat-endpoint, які працюють лише з рядками. Коли `true`, OpenClaw сплющує чисто текстові масиви `messages[].content` у звичайні рядки перед надсиланням запиту.
+- `models.providers.*.models`: явні записи каталогу моделей постачальника.
+- `models.providers.*.models.*.contextWindow`: метадані нативного контекстного вікна моделі.
+- `models.providers.*.models.*.contextTokens`: необов’язкове runtime-обмеження контексту. Використовуйте це, коли хочете менший фактичний бюджет контексту, ніж нативне `contextWindow` моделі.
+- `models.providers.*.models.*.compat.supportsDeveloperRole`: необов’язкова підказка сумісності. Для `api: "openai-completions"` із непорожнім ненативним `baseUrl` (host не `api.openai.com`) OpenClaw під час runtime примусово встановлює це в `false`. Порожній/відсутній `baseUrl` зберігає стандартну поведінку OpenAI.
+- `models.providers.*.models.*.compat.requiresStringContent`: необов’язкова підказка сумісності для OpenAI-compatible chat endpoint-ів, які приймають лише рядки. Коли `true`, OpenClaw згладжує чисто текстові масиви `messages[].content` у звичайні рядки перед надсиланням запиту.
- `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`: резервні максимальні вихідні токени для виявлених моделей.
+- `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`: резервне context window для виявлених моделей.
+- `plugins.entries.amazon-bedrock.config.discovery.defaultMaxTokens`: резервне максимальне число output tokens для виявлених моделей.
-### Приклади провайдерів
+### Приклади постачальників
@@ -2420,7 +2458,7 @@ OpenClaw використовує вбудований каталог модел
}
```
-Установіть `OPENCODE_API_KEY` (або `OPENCODE_ZEN_API_KEY`). Використовуйте посилання `opencode/...` для каталогу Zen або `opencode-go/...` для каталогу Go. Скорочення: `openclaw onboard --auth-choice opencode-zen` або `openclaw onboard --auth-choice opencode-go`.
+Встановіть `OPENCODE_API_KEY` (або `OPENCODE_ZEN_API_KEY`). Використовуйте посилання `opencode/...` для каталогу Zen або `opencode-go/...` для каталогу Go. Скорочення: `openclaw onboard --auth-choice opencode-zen` або `openclaw onboard --auth-choice opencode-go`.
@@ -2437,11 +2475,11 @@ OpenClaw використовує вбудований каталог модел
}
```
-Установіть `ZAI_API_KEY`. Псевдоніми `z.ai/*` і `z-ai/*` приймаються. Скорочення: `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.
+- Coding endpoint (default): `https://api.z.ai/api/coding/paas/v4`
+- Для загального endpoint визначте користувацького постачальника з перевизначенням base URL.
@@ -2480,11 +2518,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`.
-Нативні endpoint Moonshot декларують сумісність із потоковим використанням на спільному
-транспорті `openai-completions`, і OpenClaw тепер визначає це за
-можливостями endpoint, а не лише за вбудованим provider id.
+Нативні endpoint-и Moonshot оголошують сумісність із потоковим використанням на спільному
+транспорті `openai-completions`, і тепер OpenClaw визначає це за можливостями endpoint-а,
+а не лише за вбудованим provider id.
@@ -2502,11 +2540,11 @@ OpenClaw використовує вбудований каталог модел
}
```
-Anthropic-сумісний, вбудований провайдер. Скорочення: `openclaw onboard --auth-choice kimi-code-api-key`.
+Anthropic-compatible, вбудований постачальник. Скорочення: `openclaw onboard --auth-choice kimi-code-api-key`.
-
+
```json5
{
@@ -2530,80 +2568,4 @@ Anthropic-сумісний, вбудований провайдер. Скоро
name: "MiniMax M2.5",
reasoning: true,
input: ["text"],
- cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
- contextWindow: 192000,
- maxTokens: 65536,
- },
- ],
- },
- },
- },
-}
-```
-
-Base URL має не містити `/v1` (клієнт Anthropic додає його сам). Скорочення: `openclaw onboard --auth-choice synthetic-api-key`.
-
-
-
-
-
-```json5
-{
- agents: {
- defaults: {
- model: { primary: "minimax/MiniMax-M2.7" },
- models: {
- "minimax/MiniMax-M2.7": { alias: "Minimax" },
- },
- },
- },
- models: {
- mode: "merge",
- providers: {
- minimax: {
- baseUrl: "https://api.minimax.io/anthropic",
- apiKey: "${MINIMAX_API_KEY}",
- api: "anthropic-messages",
- models: [
- {
- id: "MiniMax-M2.7",
- name: "MiniMax M2.7",
- reasoning: true,
- input: ["text", "image"],
- cost: { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0.375 },
- contextWindow: 204800,
- maxTokens: 131072,
- },
- ],
- },
- },
- },
-}
-```
-
-Установіть `MINIMAX_API_KEY`. Скорочення:
-`openclaw onboard --auth-choice minimax-global-api` або
-`openclaw onboard --auth-choice minimax-cn-api`.
-Тепер каталог моделей за замовчуванням містить лише M2.7.
-На Anthropic-сумісному шляху потокової передачі OpenClaw типово вимикає thinking MiniMax,
-якщо ви явно не задаєте `thinking` самостійно. `/fast on` або
-`params.fastMode: true` переписує `MiniMax-M2.7` на
-`MiniMax-M2.7-highspeed`.
-
-
-
-
-
-Див. [Локальні моделі](/uk/gateway/local-models). Коротко: запускайте велику локальну модель через LM Studio Responses API на серйозному обладнанні; залишайте розміщені моделі злитими для fallback.
-
-
-
----
-
-## Skills
-
-```json5
-{
- skills: {
- allowBundled: ["gemini", "peekaboo"],
- load: {
\ No newline at end of file
+ cost:
\ No newline at end of file