From 265134ef86b55201bbaef9b49f01bfc1608808c3 Mon Sep 17 00:00:00 2001 From: "openclaw-docs-i18n[bot]" Date: Sun, 5 Apr 2026 20:48:22 +0000 Subject: [PATCH] chore(i18n): refresh uk translations --- docs/uk/channels/slack.md | 356 +++--- docs/uk/gateway/configuration-reference.md | 1266 +++++++++++--------- 2 files changed, 855 insertions(+), 767 deletions(-) diff --git a/docs/uk/channels/slack.md b/docs/uk/channels/slack.md index 1d7a2f300..ef79a4e98 100644 --- a/docs/uk/channels/slack.md +++ b/docs/uk/channels/slack.md @@ -1,29 +1,29 @@ --- read_when: - Налаштування Slack або налагодження режиму socket/HTTP у Slack -summary: Налаштування Slack і поведінка під час виконання (Socket Mode + HTTP Events API) +summary: Налаштування Slack і поведінка під час роботи (Socket Mode + HTTP Events API) title: Slack x-i18n: - generated_at: "2026-04-05T17:59:56Z" + generated_at: "2026-04-05T20:43:34Z" model: gpt-5.4 provider: openai - source_hash: efb37e1f04e1ac8ac3786c36ffc20013dacdc654bfa61e7f6e8df89c4902d2ab + source_hash: 7e4ff2ce7d92276d62f4f3d3693ddb56ca163d5fdc2f1082ff7ba3421fada69c source_path: channels/slack.md workflow: 15 --- # Slack -Статус: готово до використання у виробничому середовищі для DM і каналів через інтеграції застосунку Slack. Типовий режим — Socket Mode; також підтримується режим HTTP Events API. +Статус: готовий до використання у production для особистих повідомлень і каналів через інтеграції застосунку Slack. Типовий режим — Socket Mode; режим HTTP Events API також підтримується. - - Для DM у Slack типовим є режим pairing. + + Особисті повідомлення Slack типово використовують режим сполучення. - - Нативна поведінка команд і каталог команд. + + Вбудована поведінка команд і каталог команд. - + Міжканальна діагностика та сценарії відновлення. @@ -56,7 +56,7 @@ x-i18n: } ``` - Резервний варіант через змінні середовища (лише для типового облікового запису): + Резервне значення з env (лише для облікового запису за замовчуванням): ```bash SLACK_APP_TOKEN=xapp-... @@ -65,7 +65,7 @@ SLACK_BOT_TOKEN=xoxb-... - + Підпишіть події бота для: - `app_mention` @@ -75,10 +75,10 @@ SLACK_BOT_TOKEN=xoxb-... - `channel_rename` - `pin_added`, `pin_removed` - Також увімкніть вкладку App Home **Messages Tab** для DM. + Також увімкніть **Messages Tab** у App Home для особистих повідомлень. - + ```bash openclaw gateway @@ -95,11 +95,11 @@ openclaw gateway - установіть режим HTTP (`channels.slack.mode="http"`) - скопіюйте **Signing Secret** Slack - - установіть Request URL для Event Subscriptions + Interactivity + Slash command на той самий шлях webhook (типово `/slack/events`) + - установіть однаковий Request URL для Event Subscriptions, Interactivity і Slash command на той самий шлях webhook (типово `/slack/events`) - + ```json5 { @@ -118,16 +118,16 @@ openclaw gateway - Підтримується режим HTTP для окремих облікових записів. + Режим HTTP для кількох облікових записів підтримується. - Призначте кожному обліковому запису окремий `webhookPath`, щоб реєстрації не конфліктували. + Надайте кожному обліковому запису окремий `webhookPath`, щоб реєстрації не конфліктували. -## Контрольний список маніфесту і scopes +## Контрольний список маніфесту та scope @@ -207,8 +207,8 @@ openclaw gateway - - Якщо ви налаштовуєте `channels.slack.userToken`, типовими scopes читання є: + + Якщо ви налаштовуєте `channels.slack.userToken`, типовими scope для читання є: - `channels:history`, `groups:history`, `im:history`, `mpim:history` - `channels:read`, `groups:read`, `im:read`, `mpim:read` @@ -216,178 +216,178 @@ openclaw gateway - `reactions:read` - `pins:read` - `emoji:read` - - `search:read` (якщо ви покладаєтеся на читання пошуку Slack) + - `search:read` (якщо ви залежите від читання пошуку Slack) ## Модель токенів -- Для Socket Mode потрібні `botToken` + `appToken`. -- Для режиму HTTP потрібні `botToken` + `signingSecret`. -- `botToken`, `appToken`, `signingSecret` і `userToken` приймають текстові - рядки або об’єкти SecretRef. -- Токени з конфігурації мають пріоритет над резервним варіантом із середовища. -- Резервний варіант через змінні середовища `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` застосовується лише до типового облікового запису. -- `userToken` (`xoxp-...`) задається лише в конфігурації (без резервного варіанта через середовище) і типово працює в режимі лише для читання (`userTokenReadOnly: true`). -- Необов’язково: додайте `chat:write.customize`, якщо хочете, щоб вихідні повідомлення використовували активну ідентичність агента (власні `username` та іконку). `icon_emoji` використовує синтаксис `:emoji_name:`. +- `botToken` + `appToken` обов'язкові для Socket Mode. +- HTTP-режим потребує `botToken` + `signingSecret`. +- `botToken`, `appToken`, `signingSecret` і `userToken` приймають звичайні рядки + або об'єкти SecretRef. +- Токени з конфігурації мають пріоритет над резервними значеннями з env. +- Резервні значення з env `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` застосовуються лише до облікового запису за замовчуванням. +- `userToken` (`xoxp-...`) доступний лише в конфігурації (без резервного значення з env) і типово працює в режимі лише для читання (`userTokenReadOnly: true`). +- Необов'язково: додайте `chat:write.customize`, якщо хочете, щоб вихідні повідомлення використовували ідентичність активного агента (власні `username` та icon). Для `icon_emoji` використовується синтаксис `:emoji_name:`. -Поведінка знімка статусу: +Поведінка знімка стану: - Перевірка облікового запису Slack відстежує поля `*Source` і `*Status` - для кожного облікового запису (`botToken`, `appToken`, `signingSecret`, `userToken`). + для кожних облікових даних (`botToken`, `appToken`, `signingSecret`, `userToken`). - Статус може бути `available`, `configured_unavailable` або `missing`. - `configured_unavailable` означає, що обліковий запис налаштовано через SecretRef - або інше неінлайнове джерело секретів, але поточний шлях команди/виконання + або інше не-inline джерело секретів, але поточний шлях команди/виконання не зміг визначити фактичне значення. -- У режимі HTTP включається `signingSecretStatus`; у Socket Mode - потрібною парою є `botTokenStatus` + `appTokenStatus`. +- У HTTP-режимі включається `signingSecretStatus`; у Socket Mode + обов'язковою парою є `botTokenStatus` + `appTokenStatus`. -Для дій/читання каталогу за наявності налаштування може надаватися перевага токену користувача. Для запису пріоритетним залишається токен бота; запис через токен користувача дозволено лише коли `userTokenReadOnly: false` і токен бота недоступний. +Для дій/читання каталогів за наявності налаштування може надаватися перевага токену користувача. Для запису пріоритетним лишається токен бота; запис через токен користувача дозволено лише коли `userTokenReadOnly: false` і токен бота недоступний. ## Дії та обмеження -Дії Slack керуються через `channels.slack.actions.*`. +Дії Slack контролюються через `channels.slack.actions.*`. -Доступні групи дій у поточному наборі інструментів Slack: +Доступні групи дій у поточному інструментарії Slack: -| Група | Типово | -| ---------- | -------- | +| Група | Типово | +| ---------- | ------- | | messages | увімкнено | | reactions | увімкнено | | pins | увімкнено | | memberInfo | увімкнено | | emojiList | увімкнено | -Поточні дії для повідомлень Slack включають `send`, `upload-file`, `download-file`, `read`, `edit`, `delete`, `pin`, `unpin`, `list-pins`, `member-info` і `emoji-list`. +Поточні дії з повідомленнями Slack включають `send`, `upload-file`, `download-file`, `read`, `edit`, `delete`, `pin`, `unpin`, `list-pins`, `member-info` та `emoji-list`. -## Контроль доступу і маршрутизація +## Контроль доступу та маршрутизація - - `channels.slack.dmPolicy` керує доступом через DM (застаріле: `channels.slack.dm.policy`): + + `channels.slack.dmPolicy` контролює доступ до особистих повідомлень (застаріле: `channels.slack.dm.policy`): - `pairing` (типово) - `allowlist` - - `open` (вимагає, щоб `channels.slack.allowFrom` містив `"*"`; застаріле: `channels.slack.dm.allowFrom`) + - `open` (потребує, щоб `channels.slack.allowFrom` містив `"*"`; застаріле: `channels.slack.dm.allowFrom`) - `disabled` - Параметри DM: + Прапорці особистих повідомлень: - `dm.enabled` (типово true) - `channels.slack.allowFrom` (рекомендовано) - `dm.allowFrom` (застаріле) - - `dm.groupEnabled` (групові DM типово false) - - `dm.groupChannels` (необов’язковий список дозволу MPIM) + - `dm.groupEnabled` (групові особисті повідомлення типово false) + - `dm.groupChannels` (необов'язковий allowlist MPIM) Пріоритет для кількох облікових записів: - `channels.slack.accounts.default.allowFrom` застосовується лише до облікового запису `default`. - - Іменовані облікові записи успадковують `channels.slack.allowFrom`, якщо в них не задано власний `allowFrom`. + - Іменовані облікові записи успадковують `channels.slack.allowFrom`, якщо їхній власний `allowFrom` не задано. - Іменовані облікові записи не успадковують `channels.slack.accounts.default.allowFrom`. - Pairing у DM використовує `openclaw pairing approve slack `. + Сполучення в особистих повідомленнях використовує `openclaw pairing approve slack `. - `channels.slack.groupPolicy` керує обробкою каналів: + `channels.slack.groupPolicy` контролює обробку каналів: - `open` - `allowlist` - `disabled` - Список дозволу каналів розміщується в `channels.slack.channels` і має використовувати стабільні ID каналів. + Allowlist каналів міститься в `channels.slack.channels` і має використовувати стабільні ідентифікатори каналів. - Примітка під час виконання: якщо `channels.slack` повністю відсутній (налаштування лише через середовище), під час виконання використовується резервне значення `groupPolicy="allowlist"` і записується попередження в журнал (навіть якщо задано `channels.defaults.groupPolicy`). + Примітка щодо виконання: якщо `channels.slack` повністю відсутній (налаштування лише через env), під час виконання використовується `groupPolicy="allowlist"` і записується попередження в журнал (навіть якщо задано `channels.defaults.groupPolicy`). - Визначення імен/ID: + Визначення імен/ідентифікаторів: - - записи списку дозволу каналів і списку дозволу DM визначаються під час запуску, якщо доступ токена це дозволяє - - нерозпізнані записи з іменами каналів зберігаються як налаштовані, але типово ігноруються під час маршрутизації - - авторизація вхідних повідомлень і маршрутизація каналів типово виконуються за ID; пряме зіставлення за username/slug потребує `channels.slack.dangerouslyAllowNameMatching: true` + - записи allowlist каналів і записи allowlist особистих повідомлень визначаються під час запуску, якщо доступ токена це дозволяє + - нерозв'язані записи з іменами каналів зберігаються як налаштовані, але типово ігноруються для маршрутизації + - вхідна авторизація та маршрутизація каналів типово працюють за ідентифікаторами; пряме зіставлення за username/slug потребує `channels.slack.dangerouslyAllowNameMatching: true` - - Повідомлення в каналах типово вимагають згадування. + + Повідомлення в каналах типово обмежуються згадками. - Джерела згадувань: + Джерела згадок: - - явне згадування застосунку (`<@botId>`) - - regex-шаблони згадувань (`agents.list[].groupChat.mentionPatterns`, резервно `messages.groupChat.mentionPatterns`) - - неявна поведінка відповіді в треді на повідомлення бота + - явна згадка застосунку (`<@botId>`) + - шаблони regex для згадок (`agents.list[].groupChat.mentionPatterns`, резервне значення `messages.groupChat.mentionPatterns`) + - неявна поведінка reply-to-bot у треді - Керування для окремого каналу (`channels.slack.channels.`; імена лише через визначення під час запуску або `dangerouslyAllowNameMatching`): + Керування для кожного каналу (`channels.slack.channels.`; імена лише через визначення під час запуску або `dangerouslyAllowNameMatching`): - `requireMention` - - `users` (список дозволу) + - `users` (allowlist) - `allowBots` - `skills` - `systemPrompt` - `tools`, `toolsBySender` - - формат ключів `toolsBySender`: `id:`, `e164:`, `username:`, `name:` або wildcard `"*"` - (застарілі ключі без префікса все ще зіставляються лише як `id:`) + - формат ключів `toolsBySender`: `id:`, `e164:`, `username:`, `name:` або підстановочний знак `"*"` + (застарілі ключі без префікса все ще зіставляються лише з `id:`) -## Треди, сесії і теги відповіді +## Треди, сесії та теги відповідей -- DM маршрутизуються як `direct`; канали — як `channel`; MPIM — як `group`. -- За типового `session.dmScope=main` DM у Slack згортаються в основну сесію агента. +- Особисті повідомлення маршрутизуються як `direct`; канали — як `channel`; MPIM — як `group`. +- Із типовим `session.dmScope=main` особисті повідомлення Slack згортаються до основної сесії агента. - Сесії каналів: `agent::slack:channel:`. -- Відповіді в тредах можуть створювати суфікси сесій тредів (`:thread:`) там, де це доречно. +- Відповіді в треді можуть створювати суфікси сесій тредів (`:thread:`), якщо це застосовно. - Типове значення `channels.slack.thread.historyScope` — `thread`; типове значення `thread.inheritParent` — `false`. -- `channels.slack.thread.initialHistoryLimit` визначає, скільки наявних повідомлень треду буде отримано під час початку нової сесії треду (типово `20`; установіть `0`, щоб вимкнути). +- `channels.slack.thread.initialHistoryLimit` визначає, скільки наявних повідомлень треду буде отримано під час запуску нової сесії треду (типово `20`; установіть `0`, щоб вимкнути). -Керування відповідями в тредах: +Параметри тредів відповідей: -- `channels.slack.replyToMode`: `off|first|all` (типово `off`) +- `channels.slack.replyToMode`: `off|first|all|batched` (типово `off`) - `channels.slack.replyToModeByChatType`: для `direct|group|channel` -- застарілий резервний варіант для прямих чатів: `channels.slack.dm.replyToMode` +- застаріле резервне значення для прямих чатів: `channels.slack.dm.replyToMode` -Підтримуються ручні теги відповіді: +Підтримуються ручні теги відповідей: - `[[reply_to_current]]` - `[[reply_to:]]` -Примітка: `replyToMode="off"` вимикає **всі** відповіді в тредах у Slack, включно з явними тегами `[[reply_to_*]]`. Це відрізняється від Telegram, де явні теги все ще враховуються в режимі `"off"`. Відмінність відображає моделі тредів платформ: у Slack треди приховують повідомлення від каналу, тоді як у Telegram відповіді залишаються видимими в основному потоці чату. +Примітка: `replyToMode="off"` вимикає **усі** треди відповідей у Slack, включно з явними тегами `[[reply_to_*]]`. Це відрізняється від Telegram, де явні теги все ще враховуються в режимі `"off"`. Різниця відображає моделі тредів на цих платформах: у Slack треди приховують повідомлення з каналу, тоді як у Telegram відповіді лишаються видимими в основному потоці чату. -## Реакції підтвердження +## Реакції-підтвердження -`ackReaction` надсилає емодзі-підтвердження, поки OpenClaw обробляє вхідне повідомлення. +`ackReaction` надсилає emoji-підтвердження, поки OpenClaw обробляє вхідне повідомлення. Порядок визначення: - `channels.slack.accounts..ackReaction` - `channels.slack.ackReaction` - `messages.ackReaction` -- резервний emoji з ідентичності агента (`agents.list[].identity.emoji`, інакше `"👀"`) +- резервне значення emoji ідентичності агента (`agents.list[].identity.emoji`, інакше "👀") Примітки: -- Slack очікує shortcodes (наприклад, `"eyes"`). +- Slack очікує короткі коди (наприклад, `"eyes"`). - Використовуйте `""`, щоб вимкнути реакцію для облікового запису Slack або глобально. ## Потокова передача тексту -`channels.slack.streaming` керує поведінкою live preview: +`channels.slack.streaming` контролює поведінку попереднього перегляду в реальному часі: -- `off`: вимкнути потокове попереднє відображення. -- `partial` (типово): замінювати текст попереднього перегляду останнім частковим виводом. -- `block`: додавати оновлення попереднього перегляду блоками. -- `progress`: показувати текст статусу поступу під час генерації, а потім надсилати фінальний текст. +- `off`: вимкнути потоковий попередній перегляд у реальному часі. +- `partial` (типово): замінювати текст попереднього перегляду останнім частковим результатом. +- `block`: додавати фрагментовані оновлення попереднього перегляду. +- `progress`: показувати текст стану прогресу під час генерації, а потім надсилати фінальний текст. -`channels.slack.nativeStreaming` керує нативною потоковою передачею тексту Slack, коли `streaming` має значення `partial` (типово: `true`). +`channels.slack.nativeStreaming` контролює вбудовану потокову передачу тексту Slack, коли `streaming` має значення `partial` (типово: `true`). -- Щоб відображалась нативна потокова передача тексту, має бути доступний тред відповіді. Вибір треду, як і раніше, визначається `replyToMode`. Без нього використовується звичайний чернетковий попередній перегляд. -- Медіа й нетекстові пейлоади переходять на звичайну доставку. -- Якщо потокова передача перерветься посеред відповіді, OpenClaw перейде на звичайну доставку для решти пейлоадів. +- Щоб з'явилася вбудована потокова передача тексту, має бути доступний тред відповіді. Вибір треду й далі визначається `replyToMode`. Без нього використовується звичайний чернетковий попередній перегляд. +- Для медіа та нетекстових payload використовується звичайна доставка. +- Якщо потокова передача переривається посеред відповіді, OpenClaw повертається до звичайної доставки для решти payload. -Використовуйте чернетковий попередній перегляд замість нативної потокової передачі тексту Slack: +Використовуйте чернетковий попередній перегляд замість вбудованої потокової передачі тексту Slack: ```json5 { @@ -402,12 +402,12 @@ openclaw gateway Застарілі ключі: -- `channels.slack.streamMode` (`replace | status_final | append`) автоматично мігрує в `channels.slack.streaming`. -- булеве `channels.slack.streaming` автоматично мігрує в `channels.slack.nativeStreaming`. +- `channels.slack.streamMode` (`replace | status_final | append`) автоматично мігрується до `channels.slack.streaming`. +- булеве значення `channels.slack.streaming` автоматично мігрується до `channels.slack.nativeStreaming`. -## Резервна реакція набору +## Резервна реакція друку -`typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки OpenClaw обробляє відповідь, а потім видаляє її після завершення запуску. Це найкорисніше поза відповідями в тредах, де типово використовується індикатор статусу "is typing...". +`typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки OpenClaw обробляє відповідь, а потім видаляє її після завершення виконання. Це особливо корисно поза відповідями в тредах, де використовується типовий індикатор стану "друкує...". Порядок визначення: @@ -416,14 +416,14 @@ openclaw gateway Примітки: -- Slack очікує shortcodes (наприклад, `"hourglass_flowing_sand"`). -- Реакція застосовується за принципом best-effort, а очищення автоматично намагається виконатися після відповіді або завершення шляху помилки. +- Slack очікує короткі коди (наприклад, `"hourglass_flowing_sand"`). +- Реакція виконується за принципом best-effort, а очищення автоматично намагається завершитися після відповіді або завершення шляху помилки. -## Медіа, розбиття на частини і доставка +## Медіа, розбиття на частини та доставка - Вкладення файлів Slack завантажуються з приватних URL, розміщених у Slack (потік запитів з автентифікацією токеном), і записуються до сховища медіа, якщо отримання успішне й обмеження розміру це дозволяють. + Вкладення файлів Slack завантажуються з приватних URL, розміщених у Slack (потік запитів з автентифікацією токеном), і записуються до сховища медіа, якщо отримання успішне та дозволяють обмеження за розміром. Типове обмеження розміру вхідних даних під час виконання — `20MB`, якщо його не перевизначено через `channels.slack.mediaMaxMb`. @@ -431,35 +431,35 @@ openclaw gateway - текстові частини використовують `channels.slack.textChunkLimit` (типово 4000) - - `channels.slack.chunkMode="newline"` вмикає розбиття спочатку за абзацами + - `channels.slack.chunkMode="newline"` вмикає розбиття спершу за абзацами - надсилання файлів використовує API завантаження Slack і може включати відповіді в тредах (`thread_ts`) - - обмеження вихідних медіа визначається `channels.slack.mediaMaxMb`, якщо задано; інакше надсилання в каналі використовує типові значення MIME-kind з медіаконвеєра + - обмеження вихідних медіа визначається через `channels.slack.mediaMaxMb`, якщо налаштовано; інакше надсилання в канали використовує типові MIME-обмеження з медіаконвеєра Рекомендовані явні цілі: - - `user:` для DM + - `user:` для особистих повідомлень - `channel:` для каналів - DM у Slack відкриваються через API розмов Slack під час надсилання до цілей користувачів. + Особисті повідомлення Slack відкриваються через API розмов Slack під час надсилання до цілей користувача. -## Команди і поведінка slash +## Команди та поведінка slash-команд -- Нативний автоматичний режим команд у Slack **вимкнено** (`commands.native: "auto"` не вмикає нативні команди Slack). -- Увімкніть нативні обробники команд Slack через `channels.slack.commands.native: true` (або глобально `commands.native: true`). -- Коли нативні команди ввімкнено, зареєструйте відповідні slash-команди в Slack (імена `/`), з одним винятком: - - зареєструйте `/agentstatus` для команди status (Slack резервує `/status`) -- Якщо нативні команди не ввімкнено, ви можете запускати одну налаштовану slash-команду через `channels.slack.slashCommand`. -- Меню нативних аргументів тепер адаптують свою стратегію відображення: - - до 5 варіантів: кнопкові блоки +- Вбудований автоматичний режим команд для Slack **вимкнено** (`commands.native: "auto"` не вмикає вбудовані команди Slack). +- Увімкніть вбудовані обробники команд Slack через `channels.slack.commands.native: true` (або глобально `commands.native: true`). +- Коли вбудовані команди ввімкнено, зареєструйте відповідні slash-команди в Slack (імена `/`), з одним винятком: + - зареєструйте `/agentstatus` для команди стану (Slack резервує `/status`) +- Якщо вбудовані команди не ввімкнено, ви можете виконувати одну налаштовану slash-команду через `channels.slack.slashCommand`. +- Вбудовані меню аргументів тепер адаптують свою стратегію відображення: + - до 5 варіантів: блоки кнопок - 6-100 варіантів: статичне меню вибору - - понад 100 варіантів: зовнішній вибір з асинхронною фільтрацією варіантів, якщо доступні обробники параметрів interactivity - - якщо закодовані значення варіантів перевищують обмеження Slack, потік переходить на кнопки -- Для довгих пейлоадів варіантів меню аргументів slash-команд використовують діалог підтвердження перед надсиланням вибраного значення. + - більше 100 варіантів: зовнішній вибір з асинхронною фільтрацією варіантів, якщо доступні обробники параметрів interactivity + - якщо закодовані значення варіантів перевищують ліміти Slack, потік повертається до кнопок +- Для довгих payload варіантів меню аргументів slash-команд використовують діалог підтвердження перед передачею вибраного значення. Типові параметри slash-команд: @@ -468,15 +468,15 @@ openclaw gateway - `sessionPrefix: "slack:slash"` - `ephemeral: true` -Для slash-сесій використовуються ізольовані ключі: +Сесії slash-команд використовують ізольовані ключі: - `agent::slack:slash:` -і виконання команд усе одно маршрутизується щодо сесії цільової розмови (`CommandTargetSessionKey`). +і все одно спрямовують виконання команд до сесії цільової розмови (`CommandTargetSessionKey`). ## Інтерактивні відповіді -Slack може відображати інтерактивні елементи керування відповідями, створеними агентом, але цю можливість типово вимкнено. +Slack може відображати інтерактивні елементи відповідей, створених агентом, але ця функція типово вимкнена. Увімкніть її глобально: @@ -492,7 +492,7 @@ Slack може відображати інтерактивні елементи } ``` -Або ввімкніть лише для одного облікового запису Slack: +Або увімкніть лише для одного облікового запису Slack: ```json5 { @@ -510,43 +510,43 @@ Slack може відображати інтерактивні елементи } ``` -Коли можливість увімкнено, агенти можуть виводити директиви відповіді лише для Slack: +Коли функцію ввімкнено, агенти можуть виводити директиви відповідей лише для Slack: - `[[slack_buttons: Approve:approve, Reject:reject]]` - `[[slack_select: Choose a target | Canary:canary, Production:production]]` -Ці директиви компілюються в Slack Block Kit і маршрутизують натискання чи вибір назад через наявний шлях подій взаємодії Slack. +Ці директиви компілюються в Slack Block Kit і повертають натискання або вибір назад через наявний шлях подій взаємодії Slack. Примітки: - Це UI, специфічний для Slack. Інші канали не перекладають директиви Slack Block Kit у власні системи кнопок. -- Значення інтерактивних callback — це непрозорі токени, згенеровані OpenClaw, а не необроблені значення, створені агентом. -- Якщо згенеровані інтерактивні блоки перевищать обмеження Slack Block Kit, OpenClaw повернеться до початкової текстової відповіді замість надсилання недійсного пейлоада blocks. +- Значення інтерактивних callback — це непрозорі токени, згенеровані OpenClaw, а не сирі значення, створені агентом. +- Якщо згенеровані інтерактивні блоки перевищують обмеження Slack Block Kit, OpenClaw повертається до початкової текстової відповіді замість надсилання невалідного payload blocks. ## Підтвердження exec у Slack -Slack може виступати як нативний клієнт підтвердження з інтерактивними кнопками і взаємодіями замість резервного переходу до Web UI або термінала. +Slack може виступати як вбудований клієнт підтвердження з інтерактивними кнопками та взаємодіями замість повернення до Web UI або термінала. -- Підтвердження exec використовують `channels.slack.execApprovals.*` для нативної маршрутизації DM/каналу. -- Підтвердження плагінів усе ще можуть визначатися через ту саму нативну поверхню кнопок Slack, коли запит уже надходить у Slack, а тип ідентифікатора підтвердження — `plugin:`. -- Авторизація тих, хто підтверджує, як і раніше, примусово застосовується: лише користувачі, визначені як approvers, можуть схвалювати або відхиляти запити через Slack. +- Підтвердження exec використовують `channels.slack.execApprovals.*` для вбудованої маршрутизації в особисті повідомлення/канали. +- Підтвердження plugin також можуть визначатися через ту саму вбудовану поверхню кнопок Slack, коли запит уже надходить у Slack, а тип ідентифікатора підтвердження — `plugin:`. +- Авторизація затверджувачів і далі примусово застосовується: лише користувачі, визначені як затверджувачі, можуть схвалювати або відхиляти запити через Slack. -Для цього використовується та сама спільна поверхня кнопок підтвердження, що й для інших каналів. Якщо у ваших налаштуваннях застосунку Slack увімкнено `interactivity`, запити на підтвердження відображаються як кнопки Block Kit безпосередньо в розмові. +Для цього використовується та сама спільна поверхня кнопок підтвердження, що й для інших каналів. Коли у налаштуваннях застосунку Slack увімкнено `interactivity`, запити на підтвердження відображаються як кнопки Block Kit безпосередньо в розмові. Коли ці кнопки присутні, вони є основним UX підтвердження; OpenClaw -повинен включати ручну команду `/approve` лише тоді, коли результат інструмента вказує, що підтвердження в чаті недоступні або ручне підтвердження — єдиний шлях. +має включати ручну команду `/approve` лише тоді, коли результат інструмента вказує, що підтвердження в чаті недоступні або ручне підтвердження є єдиним шляхом. Шлях конфігурації: - `channels.slack.execApprovals.enabled` -- `channels.slack.execApprovals.approvers` (необов’язково; за можливості використовується резервний варіант `commands.ownerAllowFrom`) +- `channels.slack.execApprovals.approvers` (необов'язково; за можливості використовується резервне значення `commands.ownerAllowFrom`) - `channels.slack.execApprovals.target` (`dm` | `channel` | `both`, типово: `dm`) - `agentFilter`, `sessionFilter` -Slack автоматично вмикає нативні підтвердження exec, коли `enabled` не задано або має значення `"auto"`, і визначається принаймні один -approver. Установіть `enabled: false`, щоб явно вимкнути Slack як нативний клієнт підтвердження. -Установіть `enabled: true`, щоб примусово ввімкнути нативні підтвердження, коли визначаються approvers. +Slack автоматично вмикає вбудовані підтвердження exec, коли `enabled` не задано або має значення `"auto"` і визначається принаймні один +затверджувач. Установіть `enabled: false`, щоб явно вимкнути Slack як вбудований клієнт підтвердження. +Установіть `enabled: true`, щоб примусово ввімкнути вбудовані підтвердження, коли затверджувачі визначаються. -Типова поведінка без явної конфігурації підтверджень exec у Slack: +Типова поведінка без явної конфігурації підтверджень exec для Slack: ```json5 { @@ -556,8 +556,8 @@ approver. Установіть `enabled: false`, щоб явно вимкнут } ``` -Явна нативна конфігурація Slack потрібна лише тоді, коли ви хочете перевизначити approvers, додати фільтри або -вибрати доставку в чат походження: +Явна вбудована конфігурація Slack потрібна лише тоді, коли ви хочете перевизначити затверджувачів, додати фільтри або +використовувати доставку в початковий чат: ```json5 { @@ -573,50 +573,50 @@ approver. Установіть `enabled: false`, щоб явно вимкнут } ``` -Спільне переспрямування `approvals.exec` налаштовується окремо. Використовуйте його лише тоді, коли запити на підтвердження exec також мають -маршрутизуватися до інших чатів або явних позасмугових цілей. Спільне переспрямування `approvals.plugin` також -налаштовується окремо; нативні кнопки Slack все одно можуть визначати підтвердження плагінів, коли ці запити вже надходять +Спільне переспрямування `approvals.exec` є окремим. Використовуйте його лише тоді, коли запити на підтвердження exec також мають +маршрутизуватися до інших чатів або явно позасмугових цілей. Спільне переспрямування `approvals.plugin` також є +окремим; вбудовані кнопки Slack все одно можуть визначати підтвердження plugin, коли ці запити вже надходять у Slack. -Команда `/approve` у тому самому чаті також працює в каналах і DM Slack, які вже підтримують команди. Повну модель переспрямування підтверджень див. в [Підтвердження exec](/tools/exec-approvals). +У Slack-каналах і особистих повідомленнях, які вже підтримують команди, також працює `/approve` у тому самому чаті. Повну модель переспрямування підтверджень див. у [Підтвердження exec](/uk/tools/exec-approvals). -## Події та робоча поведінка +## Події та поведінка під час роботи -- Редагування/видалення повідомлень/розсилання тредів зіставляються із системними подіями. -- Події додавання/видалення реакцій зіставляються із системними подіями. -- Події приєднання/виходу учасників, створення/перейменування каналу та додавання/видалення pin зіставляються із системними подіями. -- `channel_id_changed` може мігрувати ключі конфігурації каналу, коли ввімкнено `configWrites`. -- Метадані теми/призначення каналу вважаються недовіреним контекстом і можуть додаватися до контексту маршрутизації. -- Початкове повідомлення треду та початкове заповнення контексту історії треду фільтруються за налаштованими списками дозволу відправників там, де це застосовно. -- Дії блоків і взаємодії з modal створюють структуровані системні події `Slack interaction: ...` з розширеними полями пейлоада: - - дії блоків: вибрані значення, мітки, значення вибору та метадані `workflow_*` - - події modal `view_submission` і `view_closed` з маршрутизованими метаданими каналу та введеними даними форми +- Редагування/видалення повідомлень і thread broadcast відображаються в системні події. +- Події додавання/видалення реакцій відображаються в системні події. +- Події входу/виходу учасників, створення/перейменування каналу та додавання/видалення закріплень відображаються в системні події. +- `channel_id_changed` може мігрувати ключі конфігурації каналу, якщо ввімкнено `configWrites`. +- Метадані topic/purpose каналу вважаються недовіреним контекстом і можуть бути впроваджені в контекст маршрутизації. +- Початкове повідомлення треду та початкове заповнення контексту історії треду фільтруються за налаштованими allowlist відправників, якщо це застосовно. +- Дії блоків і взаємодії модальних вікон створюють структуровані системні події `Slack interaction: ...` із розширеними полями payload: + - дії блоків: вибрані значення, мітки, значення picker і метадані `workflow_*` + - події модальних вікон `view_submission` і `view_closed` з маршрутованими метаданими каналу та полями форм ## Вказівники на довідник конфігурації Основний довідник: -- [Довідник конфігурації - Slack](/gateway/configuration-reference#slack) +- [Довідник конфігурації - Slack](/uk/gateway/configuration-reference#slack) - Основні поля Slack: - - режим/автентифікація: `mode`, `botToken`, `appToken`, `signingSecret`, `webhookPath`, `accounts.*` - - доступ до DM: `dm.enabled`, `dmPolicy`, `allowFrom` (застаріле: `dm.policy`, `dm.allowFrom`), `dm.groupEnabled`, `dm.groupChannels` - - перемикач сумісності: `dangerouslyAllowNameMatching` (аварійний варіант; залишайте вимкненим, якщо немає потреби) + Найважливіші поля Slack: + - mode/auth: `mode`, `botToken`, `appToken`, `signingSecret`, `webhookPath`, `accounts.*` + - доступ до особистих повідомлень: `dm.enabled`, `dmPolicy`, `allowFrom` (застаріле: `dm.policy`, `dm.allowFrom`), `dm.groupEnabled`, `dm.groupChannels` + - перемикач сумісності: `dangerouslyAllowNameMatching` (аварійний режим; тримайте вимкненим, якщо не потрібно) - доступ до каналів: `groupPolicy`, `channels.*`, `channels.*.users`, `channels.*.requireMention` - треди/історія: `replyToMode`, `replyToModeByChatType`, `thread.*`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit` - доставка: `textChunkLimit`, `chunkMode`, `mediaMaxMb`, `streaming`, `nativeStreaming` - операції/можливості: `configWrites`, `commands.native`, `slashCommand.*`, `actions.*`, `userToken`, `userTokenReadOnly` -## Усунення несправностей +## Усунення проблем Перевірте в такому порядку: - `groupPolicy` - - список дозволу каналів (`channels.slack.channels`) + - allowlist каналів (`channels.slack.channels`) - `requireMention` - - список дозволу `users` для окремого каналу + - allowlist `users` для конкретного каналу Корисні команди: @@ -628,12 +628,12 @@ openclaw doctor - + Перевірте: - `channels.slack.dm.enabled` - `channels.slack.dmPolicy` (або застаріле `channels.slack.dm.policy`) - - схвалення pairing / записи списку дозволу + - підтвердження сполучення / записи allowlist ```bash openclaw pairing list slack @@ -642,46 +642,46 @@ openclaw pairing list slack - Перевірте токени бота й застосунку та ввімкнення Socket Mode в налаштуваннях застосунку Slack. + Перевірте токени бота й застосунку та увімкнення Socket Mode в налаштуваннях застосунку Slack. Якщо `openclaw channels status --probe --json` показує `botTokenStatus` або `appTokenStatus: "configured_unavailable"`, обліковий запис Slack - налаштовано, але поточне виконання не змогло визначити значення, - що підтримується SecretRef. + налаштовано, але поточне середовище виконання не змогло визначити значення, + що зберігається через SecretRef. - + Перевірте: - signing secret - шлях webhook - - Request URL Slack (Events + Interactivity + Slash Commands) + - Slack Request URL (Events + Interactivity + Slash Commands) - унікальний `webhookPath` для кожного HTTP-облікового запису - Якщо `signingSecretStatus: "configured_unavailable"` з’являється в знімках - облікового запису, обліковий запис HTTP налаштовано, але поточне виконання не змогло - визначити signing secret, що підтримується SecretRef. + Якщо `signingSecretStatus: "configured_unavailable"` з'являється у знімках + облікового запису, HTTP-обліковий запис налаштовано, але поточне середовище виконання не змогло + визначити signing secret, що зберігається через SecretRef. - - Перевірте, чи ви мали на увазі: + + Перевірте, що саме ви мали на увазі: - - режим нативних команд (`channels.slack.commands.native: true`) із відповідними slash-командами, зареєстрованими в Slack + - режим вбудованих команд (`channels.slack.commands.native: true`) з відповідними зареєстрованими в Slack slash-командами - або режим однієї slash-команди (`channels.slack.slashCommand.enabled: true`) - Також перевірте `commands.useAccessGroups` і списки дозволу каналу/користувачів. + Також перевірте `commands.useAccessGroups` і allowlist каналів/користувачів. -## Пов’язане +## Пов'язане -- [Pairing](/channels/pairing) -- [Групи](/channels/groups) -- [Безпека](/gateway/security) -- [Маршрутизація каналів](/channels/channel-routing) -- [Усунення несправностей](/channels/troubleshooting) -- [Конфігурація](/gateway/configuration) -- [Slash commands](/tools/slash-commands) +- [Сполучення](/uk/channels/pairing) +- [Групи](/uk/channels/groups) +- [Безпека](/uk/gateway/security) +- [Маршрутизація каналів](/uk/channels/channel-routing) +- [Усунення проблем](/uk/channels/troubleshooting) +- [Конфігурація](/uk/gateway/configuration) +- [Slash-команди](/uk/tools/slash-commands) diff --git a/docs/uk/gateway/configuration-reference.md b/docs/uk/gateway/configuration-reference.md index 752d835c0..62dcd6474 100644 --- a/docs/uk/gateway/configuration-reference.md +++ b/docs/uk/gateway/configuration-reference.md @@ -1,56 +1,56 @@ --- read_when: - - Вам потрібні точні семантики або значення за замовчуванням конфігурації на рівні полів - - Ви перевіряєте блоки конфігурації каналів, моделей, шлюзу або інструментів + - Вам потрібна точна семантика полів конфігурації або значення за замовчуванням + - Ви перевіряєте блоки конфігурації каналів, моделей, gateway або інструментів summary: Повний довідник для кожного ключа конфігурації OpenClaw, значень за замовчуванням і налаштувань каналів title: Довідник з конфігурації x-i18n: - generated_at: "2026-04-05T19:23:06Z" + generated_at: "2026-04-05T20:48:22Z" model: gpt-5.4 provider: openai - source_hash: b2ac0b26762d642cd3667b3f18b11938947968e79d9cd363e86e31312ce7e981 + source_hash: 46c05fdae14b9cb5a4baadd6d906145c3d875356ec5d728b483e85ee12c04b44 source_path: gateway/configuration-reference.md workflow: 15 --- # Довідник з конфігурації -Кожне поле, доступне в `~/.openclaw/openclaw.json`. Для огляду, орієнтованого на завдання, див. [Configuration](/uk/gateway/configuration). +Усі поля, доступні в `~/.openclaw/openclaw.json`. Для огляду, орієнтованого на завдання, див. [Configuration](/uk/gateway/configuration). -Формат конфігурації — **JSON5** (дозволені коментарі та кінцеві коми). Усі поля необов'язкові — OpenClaw використовує безпечні значення за замовчуванням, якщо їх не вказано. +Формат конфігурації — **JSON5** (дозволені коментарі + кінцеві коми). Усі поля необов’язкові — OpenClaw використовує безпечні значення за замовчуванням, якщо їх не вказано. --- ## Канали -Кожен канал запускається автоматично, коли існує його розділ конфігурації (якщо не вказано `enabled: false`). +Кожен канал запускається автоматично, коли існує його секція конфігурації (якщо не вказано `enabled: false`). -### Доступ до особистих і групових чатів +### Доступ до DM і груп -Усі канали підтримують політики для особистих повідомлень і політики для груп: +Усі канали підтримують політики DM і політики груп: -| Політика особистих повідомлень | Поведінка | -| ------------------------------ | --------------------------------------------------------------- | -| `pairing` (за замовчуванням) | Невідомі відправники отримують одноразовий код сполучення; власник має схвалити | -| `allowlist` | Лише відправники з `allowFrom` (або зі сховища дозволів для сполучених) | -| `open` | Дозволити всі вхідні особисті повідомлення (потрібно `allowFrom: ["*"]`) | -| `disabled` | Ігнорувати всі вхідні особисті повідомлення | +| Політика DM | Поведінка | +| ------------------- | -------------------------------------------------------------- | +| `pairing` (default) | Невідомі відправники отримують одноразовий код pairing; власник має підтвердити | +| `allowlist` | Лише відправники з `allowFrom` (або зі сховища paired allow) | +| `open` | Дозволити всі вхідні DM (потрібно `allowFrom: ["*"]`) | +| `disabled` | Ігнорувати всі вхідні DM | -| Політика груп | Поведінка | -| -------------------- | ------------------------------------------------------- | -| `allowlist` (за замовчуванням) | Лише групи, що відповідають налаштованому списку дозволів | -| `open` | Обходити списки дозволів для груп (обмеження за згадками все одно застосовується) | -| `disabled` | Блокувати всі повідомлення груп/кімнат | +| Політика груп | Поведінка | +| --------------------- | ------------------------------------------------------ | +| `allowlist` (default) | Лише групи, що відповідають налаштованому allowlist | +| `open` | Обійти allowlist груп (гейтінг згадок усе ще діє) | +| `disabled` | Блокувати всі повідомлення груп/кімнат | -`channels.defaults.groupPolicy` задає значення за замовчуванням, коли `groupPolicy` постачальника не встановлено. -Коди сполучення закінчують дію через 1 годину. Кількість очікуваних запитів на сполучення для особистих повідомлень обмежена **3 на канал**. -Якщо блок постачальника повністю відсутній (`channels.` відсутній), політика груп під час виконання повертається до `allowlist` (fail-closed) із попередженням під час запуску. +`channels.defaults.groupPolicy` задає значення за замовчуванням, якщо `groupPolicy` постачальника не встановлено. +Коди pairing спливають через 1 годину. Кількість очікуваних запитів на pairing DM обмежена **3 на канал**. +Якщо блок постачальника повністю відсутній (`channels.` відсутній), політика груп під час виконання повертається до `allowlist` (fail-closed) з попередженням під час запуску. -### Перевизначення моделей для каналів +### Перевизначення моделі для каналів -Використовуйте `channels.modelByChannel`, щоб прив'язати конкретні ідентифікатори каналів до моделі. Значення приймають `provider/model` або налаштовані псевдоніми моделей. Відображення каналу застосовується, коли для сесії ще не встановлено перевизначення моделі (наприклад, через `/model`). +Використовуйте `channels.modelByChannel`, щоб закріпити конкретні ID каналів за моделлю. Значення приймають `provider/model` або налаштовані псевдоніми моделей. Відображення каналу застосовується, коли для сесії ще не встановлено перевизначення моделі (наприклад, через `/model`). ```json5 { @@ -73,7 +73,7 @@ x-i18n: ### Значення каналів за замовчуванням і heartbeat -Використовуйте `channels.defaults` для спільної поведінки політики груп і heartbeat у різних постачальників: +Використовуйте `channels.defaults` для спільної політики груп і поведінки heartbeat для всіх постачальників: ```json5 { @@ -91,15 +91,15 @@ x-i18n: } ``` -- `channels.defaults.groupPolicy`: резервна політика груп, коли `groupPolicy` на рівні постачальника не встановлено. -- `channels.defaults.contextVisibility`: режим видимості додаткового контексту за замовчуванням для всіх каналів. Значення: `all` (за замовчуванням, включати весь процитований/потоковий/історичний контекст), `allowlist` (включати контекст лише від відправників зі списку дозволів), `allowlist_quote` (як allowlist, але зберігати явний контекст цитування/відповіді). Перевизначення для каналу: `channels..contextVisibility`. -- `channels.defaults.heartbeat.showOk`: включати статуси справних каналів у вивід heartbeat. +- `channels.defaults.groupPolicy`: резервна політика груп, якщо `groupPolicy` на рівні постачальника не встановлено. +- `channels.defaults.contextVisibility`: режим видимості додаткового контексту за замовчуванням для всіх каналів. Значення: `all` (default, включати весь процитований/потоковий/історичний контекст), `allowlist` (включати контекст лише від відправників з allowlist), `allowlist_quote` (те саме, що allowlist, але зберігати явний контекст цитати/відповіді). Перевизначення на рівні каналу: `channels..contextVisibility`. +- `channels.defaults.heartbeat.showOk`: включати здорові статуси каналів у вивід heartbeat. - `channels.defaults.heartbeat.showAlerts`: включати деградовані/помилкові статуси у вивід heartbeat. - `channels.defaults.heartbeat.useIndicator`: відображати компактний heartbeat у стилі індикатора. ### WhatsApp -WhatsApp працює через вебканал шлюзу (Baileys Web). Він запускається автоматично, коли існує прив'язана сесія. +WhatsApp працює через web channel gateway (Baileys Web). Він запускається автоматично, коли існує пов’язана сесія. ```json5 { @@ -110,7 +110,7 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві textChunkLimit: 4000, chunkMode: "length", // length | newline mediaMaxMb: 50, - sendReadReceipts: true, // сині галочки (false у режимі self-chat) + sendReadReceipts: true, // blue ticks (false у режимі self-chat) groups: { "*": { requireMention: true }, }, @@ -132,7 +132,7 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві } ``` - + ```json5 { @@ -150,10 +150,10 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві } ``` -- Вихідні команди за замовчуванням використовують обліковий запис `default`, якщо він є; інакше — перший налаштований `accountId` (відсортовано). -- Необов'язковий `channels.whatsapp.defaultAccount` перевизначає цей резервний вибір облікового запису за замовчуванням, якщо він відповідає налаштованому `accountId`. -- Застарілий каталог автентифікації Baileys для одного облікового запису переноситься командою `openclaw doctor` до `whatsapp/default`. -- Перевизначення для облікового запису: `channels.whatsapp.accounts..sendReadReceipts`, `channels.whatsapp.accounts..dmPolicy`, `channels.whatsapp.accounts..allowFrom`. +- Вихідні команди за замовчуванням використовують акаунт `default`, якщо він є; інакше — перший налаштований ID акаунта (відсортований). +- Необов’язковий `channels.whatsapp.defaultAccount` перевизначає цей резервний вибір акаунта за замовчуванням, якщо він збігається з налаштованим ID акаунта. +- Застарілий каталог автентифікації Baileys для одного акаунта мігрується командою `openclaw doctor` у `whatsapp/default`. +- Перевизначення на рівні акаунта: `channels.whatsapp.accounts..sendReadReceipts`, `channels.whatsapp.accounts..dmPolicy`, `channels.whatsapp.accounts..allowFrom`. @@ -171,24 +171,24 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві "*": { requireMention: true }, "-1001234567890": { allowFrom: ["@admin"], - systemPrompt: "Відповідай коротко.", + systemPrompt: "Залишай відповіді короткими.", topics: { "99": { requireMention: false, skills: ["search"], - systemPrompt: "Тримайся теми.", + systemPrompt: "Дотримуйся теми.", }, }, }, }, customCommands: [ - { command: "backup", description: "Резервна копія Git" }, + { command: "backup", description: "Git backup" }, { command: "generate", description: "Створити зображення" }, ], historyLimit: 50, - replyToMode: "first", // off | first | all + replyToMode: "first", // off | first | all | batched linkPreview: true, - streaming: "partial", // off | partial | block | progress (за замовчуванням: off; вмикайте явно, щоб уникнути обмежень на частоту редагування попереднього перегляду) + streaming: "partial", // off | partial | block | progress (default: off; явно вмикайте, щоб уникнути rate limits на preview-edit) actions: { reactions: true, sendMessage: true }, reactionNotifications: "own", // off | own | all mediaMaxMb: 100, @@ -211,13 +211,13 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві } ``` -- Токен бота: `channels.telegram.botToken` або `channels.telegram.tokenFile` (лише звичайний файл; символьні посилання відхиляються), з `TELEGRAM_BOT_TOKEN` як резервним варіантом для облікового запису за замовчуванням. -- Необов'язковий `channels.telegram.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він відповідає налаштованому `accountId`. -- У багатьох облікових записах (2+ `accountId`) установіть явний типово вибраний обліковий запис (`channels.telegram.defaultAccount` або `channels.telegram.accounts.default`), щоб уникнути резервної маршрутизації; `openclaw doctor` попереджає, якщо його немає або він недійсний. -- `configWrites: false` блокує ініційовані з Telegram записи конфігурації (міграції ID супергруп, `/config set|unset`). -- Записи верхнього рівня `bindings[]` із `type: "acp"` налаштовують постійні ACP-прив'язки для тем форуму (використовуйте канонічний `chatId:topic:topicId` у `match.peer.id`). Семантика полів спільна з [ACP Agents](/uk/tools/acp-agents#channel-specific-settings). -- Попередній перегляд потоків Telegram використовує `sendMessage` + `editMessageText` (працює в особистих і групових чатах). -- Політика повторних спроб: див. [Retry policy](/uk/concepts/retry). +- Токен бота: `channels.telegram.botToken` або `channels.telegram.tokenFile` (лише звичайний файл; symlink відхиляються), з `TELEGRAM_BOT_TOKEN` як резервним варіантом для акаунта default. +- Необов’язковий `channels.telegram.defaultAccount` перевизначає вибір акаунта за замовчуванням, якщо він збігається з налаштованим ID акаунта. +- У багатоакаунтних конфігураціях (2+ ID акаунтів) установіть явний default (`channels.telegram.defaultAccount` або `channels.telegram.accounts.default`), щоб уникнути резервної маршрутизації; `openclaw doctor` попереджає, якщо цього бракує або значення невалідне. +- `configWrites: false` блокує записи конфігурації, ініційовані з Telegram (міграції ID supergroup, `/config set|unset`). +- Записи верхнього рівня `bindings[]` з `type: "acp"` налаштовують сталі ACP-прив’язки для тем форумів (використовуйте канонічний `chatId:topic:topicId` у `match.peer.id`). Семантика полів спільна з [ACP Agents](/uk/tools/acp-agents#channel-specific-settings). +- Прев’ю потоку Telegram використовують `sendMessage` + `editMessageText` (працює в прямих і групових чатах). +- Політика retry: див. [Retry policy](/uk/concepts/retry). ### Discord @@ -246,7 +246,7 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві events: true, moderation: false, }, - replyToMode: "off", // off | first | all + replyToMode: "off", // off | first | all | batched dmPolicy: "pairing", allowFrom: ["1234567890", "123456789012345678"], dm: { enabled: true, groupEnabled: false, groupChannels: ["openclaw-dm"] }, @@ -272,7 +272,7 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві historyLimit: 20, textChunkLimit: 2000, chunkMode: "length", // length | newline - streaming: "off", // off | partial | block | progress (progress відображається як partial у Discord) + streaming: "off", // off | partial | block | progress (progress зіставляється з partial у Discord) maxLinesPerMessage: 17, ui: { components: { @@ -319,36 +319,36 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві } ``` -- Токен: `channels.discord.token`, з `DISCORD_BOT_TOKEN` як резервним варіантом для облікового запису за замовчуванням. -- Прямі вихідні виклики, які передають явний Discord `token`, використовують цей токен для виклику; налаштування повторних спроб/політики облікового запису все одно беруться з вибраного облікового запису в активному знімку середовища виконання. -- Необов'язковий `channels.discord.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він відповідає налаштованому `accountId`. -- Використовуйте `user:` (особисті повідомлення) або `channel:` (канал гільдії) як цілі доставки; прості числові ID відхиляються. -- Slug-и гільдій містять лише малі літери, а пробіли замінюються на `-`; ключі каналів використовують slug-ім'я (без `#`). Віддавайте перевагу ID гільдій. -- Повідомлення, створені ботом, типово ігноруються. `allowBots: true` вмикає їх; використовуйте `allowBots: "mentions"`, щоб приймати лише повідомлення ботів, які згадують бота (власні повідомлення все одно відфільтровуються). -- `channels.discord.guilds..ignoreOtherMentions` (і перевизначення каналів) відкидає повідомлення, які згадують іншого користувача або роль, але не бота (без урахування @everyone/@here). -- `maxLinesPerMessage` (за замовчуванням 17) розбиває високі повідомлення, навіть якщо вони коротші за 2000 символів. -- `channels.discord.threadBindings` керує маршрутизацією, прив'язаною до потоків Discord: - - `enabled`: перевизначення Discord для функцій сесій, прив'язаних до потоку (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age` і прив'язана доставка/маршрутизація) - - `idleHours`: перевизначення Discord для авто-скасування фокусу через неактивність у годинах (`0` вимикає) +- Токен: `channels.discord.token`, з `DISCORD_BOT_TOKEN` як резервним варіантом для акаунта default. +- Прямі вихідні виклики, що передають явний Discord `token`, використовують цей токен для виклику; налаштування retry/політики акаунта все одно беруться з вибраного акаунта в активному знімку runtime. +- Необов’язковий `channels.discord.defaultAccount` перевизначає вибір акаунта за замовчуванням, якщо він збігається з налаштованим ID акаунта. +- Використовуйте `user:` (DM) або `channel:` (канал guild) як цілі доставки; прості числові ID відхиляються. +- Slug guild — у нижньому регістрі, пробіли замінено на `-`; ключі каналів використовують slug-ім’я (без `#`). Віддавайте перевагу ID guild. +- Повідомлення, створені ботом, за замовчуванням ігноруються. `allowBots: true` вмикає їх; використовуйте `allowBots: "mentions"`, щоб приймати лише повідомлення ботів, які згадують бота (власні повідомлення все одно фільтруються). +- `channels.discord.guilds..ignoreOtherMentions` (і перевизначення каналів) відкидає повідомлення, які згадують іншого користувача або роль, але не бота (за винятком @everyone/@here). +- `maxLinesPerMessage` (default 17) розбиває довгі повідомлення, навіть якщо вони коротші за 2000 символів. +- `channels.discord.threadBindings` керує маршрутизацією, прив’язаною до thread у Discord: + - `enabled`: перевизначення Discord для функцій сесій, прив’язаних до thread (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age` та прив’язана доставка/маршрутизація) + - `idleHours`: перевизначення Discord для автоматичного unfocus через неактивність у годинах (`0` вимикає) - `maxAgeHours`: перевизначення Discord для жорсткого максимального віку в годинах (`0` вимикає) - - `spawnSubagentSessions`: перемикач opt-in для автоматичного створення/прив'язки потоків через `sessions_spawn({ thread: true })` -- Записи верхнього рівня `bindings[]` із `type: "acp"` налаштовують постійні ACP-прив'язки для каналів і потоків (використовуйте ID каналу/потоку в `match.peer.id`). Семантика полів спільна з [ACP Agents](/uk/tools/acp-agents#channel-specific-settings). + - `spawnSubagentSessions`: opt-in перемикач для автоматичного створення/прив’язки thread у `sessions_spawn({ thread: true })` +- Записи верхнього рівня `bindings[]` з `type: "acp"` налаштовують сталі ACP-прив’язки для каналів і thread (використовуйте ID каналу/thread у `match.peer.id`). Семантика полів спільна з [ACP Agents](/uk/tools/acp-agents#channel-specific-settings). - `channels.discord.ui.components.accentColor` задає колір акценту для контейнерів Discord components v2. -- `channels.discord.voice` вмикає розмови в голосових каналах Discord і необов'язкові перевизначення auto-join + TTS. +- `channels.discord.voice` вмикає розмови у voice channel Discord і необов’язкові auto-join + перевизначення TTS. - `channels.discord.voice.daveEncryption` і `channels.discord.voice.decryptionFailureTolerance` напряму передаються в параметри DAVE `@discordjs/voice` (`true` і `24` за замовчуванням). -- OpenClaw також намагається відновити прийом голосу, виходячи та повторно входячи в голосову сесію після повторних помилок дешифрування. -- `channels.discord.streaming` — канонічний ключ режиму потоку. Застарілі `streamMode` і булеві значення `streaming` автоматично переносяться. -- `channels.discord.autoPresence` відображає доступність середовища виконання у присутність бота (healthy => online, degraded => idle, exhausted => dnd) і дозволяє необов'язкові перевизначення тексту статусу. -- `channels.discord.dangerouslyAllowNameMatching` знову вмикає зіставлення за змінюваними іменами/тегами (режим сумісності break-glass). -- `channels.discord.execApprovals`: доставка схвалень exec у стилі Discord і авторизація схвалювачів. - - `enabled`: `true`, `false` або `"auto"` (за замовчуванням). В автоматичному режимі схвалення exec активуються, коли схвалювачів можна визначити через `approvers` або `commands.ownerAllowFrom`. - - `approvers`: ID користувачів Discord, яким дозволено схвалювати запити exec. Якщо не вказано, використовується `commands.ownerAllowFrom`. - - `agentFilter`: необов'язковий список дозволених ID агентів. Якщо опустити, пересилаються схвалення для всіх агентів. - - `sessionFilter`: необов'язкові шаблони ключів сесій (підрядок або regex). - - `target`: куди надсилати запити на схвалення. `"dm"` (за замовчуванням) надсилає в особисті повідомлення схвалювачів, `"channel"` — у канал походження, `"both"` — в обидва місця. Коли target містить `"channel"`, кнопки можуть використовувати лише визначені схвалювачі. - - `cleanupAfterResolve`: коли `true`, видаляє особисті повідомлення зі схваленням після схвалення, відмови або тайм-ауту. +- OpenClaw також намагається відновити voice receive, виходячи й повторно приєднуючись до voice session після повторюваних помилок дешифрування. +- `channels.discord.streaming` — канонічний ключ режиму потоку. Застарілі `streamMode` і булеві значення `streaming` мігруються автоматично. +- `channels.discord.autoPresence` зіставляє доступність runtime зі статусом бота (healthy => online, degraded => idle, exhausted => dnd) і дозволяє необов’язкові перевизначення тексту статусу. +- `channels.discord.dangerouslyAllowNameMatching` знову вмикає зіставлення за змінюваним ім’ям/tag (режим break-glass для сумісності). +- `channels.discord.execApprovals`: доставка native exec approval у Discord і авторизація погоджувачів. + - `enabled`: `true`, `false` або `"auto"` (default). У режимі auto exec approvals активуються, коли погоджувачів можна визначити з `approvers` або `commands.ownerAllowFrom`. + - `approvers`: ID користувачів Discord, яким дозволено схвалювати exec requests. Якщо не вказано, використовується `commands.ownerAllowFrom`. + - `agentFilter`: необов’язковий allowlist ID агентів. Якщо пропустити, approvals пересилаються для всіх агентів. + - `sessionFilter`: необов’язкові шаблони ключів сесій (підрядок або regex). + - `target`: куди надсилати запити на схвалення. `"dm"` (default) надсилає в DM погоджувачів, `"channel"` — у вихідний канал, `"both"` — в обидва місця. Коли target включає `"channel"`, кнопки можуть використовувати лише визначені погоджувачі. + - `cleanupAfterResolve`: якщо `true`, видаляє approval DM після схвалення, відхилення або timeout. -**Режими сповіщень про реакції:** `off` (немає), `own` (повідомлення бота, за замовчуванням), `all` (усі повідомлення), `allowlist` (від `guilds..users` для всіх повідомлень). +**Режими сповіщень про реакції:** `off` (немає), `own` (повідомлення бота, default), `all` (усі повідомлення), `allowlist` (із `guilds..users` для всіх повідомлень). ### Google Chat @@ -379,11 +379,11 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві } ``` -- JSON облікового запису служби: вбудований (`serviceAccount`) або з файлу (`serviceAccountFile`). -- Також підтримується SecretRef для облікового запису служби (`serviceAccountRef`). -- Резервні значення з env: `GOOGLE_CHAT_SERVICE_ACCOUNT` або `GOOGLE_CHAT_SERVICE_ACCOUNT_FILE`. +- JSON service account: вбудовано (`serviceAccount`) або з файла (`serviceAccountFile`). +- Також підтримується Service account SecretRef (`serviceAccountRef`). +- Резервні env: `GOOGLE_CHAT_SERVICE_ACCOUNT` або `GOOGLE_CHAT_SERVICE_ACCOUNT_FILE`. - Використовуйте `spaces/` або `users/` як цілі доставки. -- `channels.googlechat.dangerouslyAllowNameMatching` знову вмикає зіставлення за змінюваним email principal (режим сумісності break-glass). +- `channels.googlechat.dangerouslyAllowNameMatching` знову вмикає зіставлення за змінюваним email principal (режим break-glass для сумісності). ### Slack @@ -412,7 +412,7 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві allowBots: false, reactionNotifications: "own", reactionAllowlist: ["U123"], - replyToMode: "off", // off | first | all + replyToMode: "off", // off | first | all | batched thread: { historyScope: "thread", // thread | channel inheritParent: false, @@ -433,8 +433,8 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві typingReaction: "hourglass_flowing_sand", textChunkLimit: 4000, chunkMode: "length", - streaming: "partial", // off | partial | block | progress (режим попереднього перегляду) - nativeStreaming: true, // використовувати нативний API потокової передачі Slack, коли streaming=partial + streaming: "partial", // off | partial | block | progress (режим прев’ю) + nativeStreaming: true, // використовувати native streaming API Slack, коли streaming=partial mediaMaxMb: 20, execApprovals: { enabled: "auto", // true | false | "auto" @@ -448,34 +448,34 @@ WhatsApp працює через вебканал шлюзу (Baileys Web). Ві } ``` -- **Режим Socket** потребує і `botToken`, і `appToken` (`SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` як резервне значення env для облікового запису за замовчуванням). -- **HTTP-режим** потребує `botToken` плюс `signingSecret` (на кореневому рівні або для окремого облікового запису). +- **Socket mode** потребує і `botToken`, і `appToken` (`SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` як резерв через env для акаунта default). +- **HTTP mode** потребує `botToken` плюс `signingSecret` (у корені або для кожного акаунта). - `botToken`, `appToken`, `signingSecret` і `userToken` приймають прості текстові - рядки або об'єкти SecretRef. -- Знімки облікових записів Slack показують поля джерела/стану для кожного облікового даного, такі як - `botTokenSource`, `botTokenStatus`, `appTokenStatus` і, в HTTP-режимі, - `signingSecretStatus`. `configured_unavailable` означає, що обліковий запис - налаштований через SecretRef, але поточний шлях команди/середовища виконання не зміг - отримати значення секрету. -- `configWrites: false` блокує ініційовані зі Slack записи конфігурації. -- Необов'язковий `channels.slack.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він відповідає налаштованому `accountId`. -- `channels.slack.streaming` — канонічний ключ режиму потоку. Застарілі `streamMode` і булеві значення `streaming` автоматично переносяться. -- Використовуйте `user:` (особисті повідомлення) або `channel:` як цілі доставки. + рядки або об’єкти SecretRef. +- Знімки акаунтів Slack показують поля джерела/статусу для кожного облікового + даного, наприклад `botTokenSource`, `botTokenStatus`, `appTokenStatus`, а в HTTP mode — + `signingSecretStatus`. `configured_unavailable` означає, що акаунт + налаштований через SecretRef, але поточний шлях command/runtime не зміг + розв’язати значення секрету. +- `configWrites: false` блокує записи конфігурації, ініційовані зі Slack. +- Необов’язковий `channels.slack.defaultAccount` перевизначає вибір акаунта за замовчуванням, якщо він збігається з налаштованим ID акаунта. +- `channels.slack.streaming` — канонічний ключ режиму потоку. Застарілі `streamMode` і булеві значення `streaming` мігруються автоматично. +- Використовуйте `user:` (DM) або `channel:` як цілі доставки. -**Режими сповіщень про реакції:** `off`, `own` (за замовчуванням), `all`, `allowlist` (із `reactionAllowlist`). +**Режими сповіщень про реакції:** `off`, `own` (default), `all`, `allowlist` (із `reactionAllowlist`). -**Ізоляція сесій потоків:** `thread.historyScope` — для кожного потоку окремо (за замовчуванням) або спільно в межах каналу. `thread.inheritParent` копіює транскрипт батьківського каналу в нові потоки. +**Ізоляція thread session:** `thread.historyScope` — для кожного thread окремо (default) або спільний для каналу. `thread.inheritParent` копіює transcript батьківського каналу в нові threads. -- `typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки виконується відповідь, а потім прибирає її після завершення. Використовуйте скорочений код емодзі Slack, наприклад `"hourglass_flowing_sand"`. -- `channels.slack.execApprovals`: доставка схвалень exec у стилі Slack і авторизація схвалювачів. Та сама схема, що і для Discord: `enabled` (`true`/`false`/`"auto"`), `approvers` (ID користувачів Slack), `agentFilter`, `sessionFilter` і `target` (`"dm"`, `"channel"` або `"both"`). +- `typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки виконується відповідь, а після завершення прибирає її. Використовуйте shortcode emoji Slack, наприклад `"hourglass_flowing_sand"`. +- `channels.slack.execApprovals`: доставка native exec approval у Slack і авторизація погоджувачів. Та сама схема, що й у Discord: `enabled` (`true`/`false`/`"auto"`), `approvers` (ID користувачів Slack), `agentFilter`, `sessionFilter` і `target` (`"dm"`, `"channel"` або `"both"`). -| Група дій | За замовчуванням | Примітки | -| ----------- | ---------------- | ---------------------- | -| reactions | увімкнено | Реакції + список реакцій | -| messages | увімкнено | Читання/надсилання/редагування/видалення | -| pins | увімкнено | Закріпити/відкріпити/перелік | -| memberInfo | увімкнено | Інформація про учасника | -| emojiList | увімкнено | Список власних емодзі | +| Група дій | Default | Примітки | +| ----------- | ------- | ----------------------- | +| reactions | увімкнено | Реагування + список реакцій | +| messages | увімкнено | Читання/надсилання/редагування/видалення | +| pins | увімкнено | Закріпити/відкріпити/список | +| memberInfo | увімкнено | Інформація про учасника | +| emojiList | увімкнено | Список користувацьких emoji | ### Mattermost @@ -499,7 +499,7 @@ Mattermost постачається як plugin: `openclaw plugins install @open native: true, // opt-in nativeSkills: true, callbackPath: "/api/channels/mattermost/command", - // Необов'язковий явний URL для reverse-proxy/публічних розгортань + // Необов’язкова явна URL-адреса для reverse-proxy/public deployments callbackUrl: "https://gateway.example.com/api/channels/mattermost/command", }, textChunkLimit: 4000, @@ -509,23 +509,23 @@ Mattermost постачається як plugin: `openclaw plugins install @open } ``` -Режими чату: `oncall` (відповідати на @-згадку, за замовчуванням), `onmessage` (на кожне повідомлення), `onchar` (повідомлення, що починаються з префікса-тригера). +Режими чату: `oncall` (відповідати на @-згадку, default), `onmessage` (на кожне повідомлення), `onchar` (повідомлення, що починаються з префікса trigger). -Коли увімкнено нативні команди Mattermost: +Коли native commands Mattermost увімкнено: -- `commands.callbackPath` має бути шляхом (наприклад `/api/channels/mattermost/command`), а не повним URL. -- `commands.callbackUrl` має вказувати на кінцеву точку шлюзу OpenClaw і бути доступним із сервера Mattermost. -- Нативні зворотні виклики slash-команд автентифікуються за токенами - для кожної команди, які Mattermost повертає під час реєстрації slash-команд. Якщо реєстрація не вдається або жодну - команду не активовано, OpenClaw відхиляє зворотні виклики з +- `commands.callbackPath` має бути шляхом (наприклад `/api/channels/mattermost/command`), а не повною URL-адресою. +- `commands.callbackUrl` має вказувати на endpoint gateway OpenClaw і бути досяжним із сервера Mattermost. +- Native slash callbacks автентифікуються токенами кожної команди, + які Mattermost повертає під час реєстрації slash command. Якщо реєстрація не вдалася або + не активовано жодної команди, OpenClaw відхиляє callbacks із `Unauthorized: invalid command token.` -- Для приватних/tailnet/внутрішніх хостів зворотного виклику Mattermost може вимагати, - щоб `ServiceSettings.AllowedUntrustedInternalConnections` містив хост/домен зворотного виклику. - Використовуйте значення хоста/домену, а не повні URL. -- `channels.mattermost.configWrites`: дозволити або заборонити ініційовані з Mattermost записи конфігурації. +- Для private/tailnet/internal callback hosts Mattermost може вимагати, + щоб `ServiceSettings.AllowedUntrustedInternalConnections` містив callback host/domain. + Використовуйте значення host/domain, а не повні URL. +- `channels.mattermost.configWrites`: дозволити або заборонити записи конфігурації, ініційовані з Mattermost. - `channels.mattermost.requireMention`: вимагати `@mention` перед відповіддю в каналах. -- `channels.mattermost.groups..requireMention`: перевизначення обмеження за згадками для окремого каналу (`"*"` для значення за замовчуванням). -- Необов'язковий `channels.mattermost.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він відповідає налаштованому `accountId`. +- `channels.mattermost.groups..requireMention`: перевизначення mention-gating для окремого каналу (`"*"` для default). +- Необов’язковий `channels.mattermost.defaultAccount` перевизначає вибір акаунта за замовчуванням, якщо він збігається з налаштованим ID акаунта. ### Signal @@ -534,7 +534,7 @@ Mattermost постачається як plugin: `openclaw plugins install @open channels: { signal: { enabled: true, - account: "+15555550123", // необов'язкова прив'язка облікового запису + account: "+15555550123", // необов’язкова прив’язка акаунта dmPolicy: "pairing", allowFrom: ["+15551234567", "uuid:123e4567-e89b-12d3-a456-426614174000"], configWrites: true, @@ -546,15 +546,15 @@ Mattermost постачається як plugin: `openclaw plugins install @open } ``` -**Режими сповіщень про реакції:** `off`, `own` (за замовчуванням), `all`, `allowlist` (із `reactionAllowlist`). +**Режими сповіщень про реакції:** `off`, `own` (default), `all`, `allowlist` (із `reactionAllowlist`). -- `channels.signal.account`: прив'язати запуск каналу до конкретної ідентичності облікового запису Signal. -- `channels.signal.configWrites`: дозволити або заборонити ініційовані з Signal записи конфігурації. -- Необов'язковий `channels.signal.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він відповідає налаштованому `accountId`. +- `channels.signal.account`: закріпити запуск каналу за конкретною ідентичністю акаунта Signal. +- `channels.signal.configWrites`: дозволити або заборонити записи конфігурації, ініційовані із Signal. +- Необов’язковий `channels.signal.defaultAccount` перевизначає вибір акаунта за замовчуванням, якщо він збігається з налаштованим ID акаунта. ### BlueBubbles -BlueBubbles — рекомендований шлях для iMessage (на основі plugin, налаштовується в `channels.bluebubbles`). +BlueBubbles — рекомендований шлях для iMessage (підтримується plugin, налаштовується в `channels.bluebubbles`). ```json5 { @@ -562,21 +562,21 @@ BlueBubbles — рекомендований шлях для iMessage (на ос bluebubbles: { enabled: true, dmPolicy: "pairing", - // serverUrl, password, webhookPath, елементи керування групами та розширені дії: + // serverUrl, password, webhookPath, керування групами та розширені дії: // див. /channels/bluebubbles }, }, } ``` -- Тут охоплено основні шляхи ключів: `channels.bluebubbles`, `channels.bluebubbles.dmPolicy`. -- Необов'язковий `channels.bluebubbles.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він відповідає налаштованому `accountId`. -- Записи верхнього рівня `bindings[]` із `type: "acp"` можуть прив'язувати розмови BlueBubbles до постійних ACP-сесій. Використовуйте BlueBubbles handle або цільовий рядок (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) у `match.peer.id`. Спільна семантика полів: [ACP Agents](/uk/tools/acp-agents#channel-specific-settings). -- Повну конфігурацію каналу BlueBubbles описано в [BlueBubbles](/uk/channels/bluebubbles). +- Основні шляхи ключів, описані тут: `channels.bluebubbles`, `channels.bluebubbles.dmPolicy`. +- Необов’язковий `channels.bluebubbles.defaultAccount` перевизначає вибір акаунта за замовчуванням, якщо він збігається з налаштованим ID акаунта. +- Записи верхнього рівня `bindings[]` з `type: "acp"` можуть прив’язувати розмови BlueBubbles до сталих ACP session. Використовуйте BlueBubbles handle або target string (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) у `match.peer.id`. Спільна семантика полів: [ACP Agents](/uk/tools/acp-agents#channel-specific-settings). +- Повну конфігурацію каналу BlueBubbles задокументовано в [BlueBubbles](/uk/channels/bluebubbles). ### iMessage -OpenClaw запускає `imsg rpc` (JSON-RPC через stdio). Демон або порт не потрібні. +OpenClaw запускає `imsg rpc` (JSON-RPC через stdio). Daemon або порт не потрібні. ```json5 { @@ -600,17 +600,17 @@ OpenClaw запускає `imsg rpc` (JSON-RPC через stdio). Демон а } ``` -- Необов'язковий `channels.imessage.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він відповідає налаштованому `accountId`. +- Необов’язковий `channels.imessage.defaultAccount` перевизначає вибір акаунта за замовчуванням, якщо він збігається з налаштованим ID акаунта. - Потрібен Full Disk Access до БД Messages. - Віддавайте перевагу цілям `chat_id:`. Використовуйте `imsg chats --limit 20`, щоб переглянути список чатів. -- `cliPath` може вказувати на SSH-обгортку; установіть `remoteHost` (`host` або `user@host`) для отримання вкладень через SCP. -- `attachmentRoots` і `remoteAttachmentRoots` обмежують шляхи вхідних вкладень (за замовчуванням: `/Users/*/Library/Messages/Attachments`). -- SCP використовує сувору перевірку ключа хоста, тому переконайтеся, що ключ хоста ретранслятора вже є в `~/.ssh/known_hosts`. -- `channels.imessage.configWrites`: дозволити або заборонити ініційовані з iMessage записи конфігурації. -- Записи верхнього рівня `bindings[]` із `type: "acp"` можуть прив'язувати розмови iMessage до постійних ACP-сесій. Використовуйте нормалізований handle або явну ціль чату (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) у `match.peer.id`. Спільна семантика полів: [ACP Agents](/uk/tools/acp-agents#channel-specific-settings). +- `cliPath` може вказувати на SSH wrapper; установіть `remoteHost` (`host` або `user@host`) для отримання вкладень через SCP. +- `attachmentRoots` і `remoteAttachmentRoots` обмежують шляхи вхідних вкладень (default: `/Users/*/Library/Messages/Attachments`). +- SCP використовує сувору перевірку host key, тому переконайтеся, що host key relay уже є в `~/.ssh/known_hosts`. +- `channels.imessage.configWrites`: дозволити або заборонити записи конфігурації, ініційовані з iMessage. +- Записи верхнього рівня `bindings[]` з `type: "acp"` можуть прив’язувати розмови iMessage до сталих ACP session. Використовуйте нормалізований handle або явну ціль чату (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) у `match.peer.id`. Спільна семантика полів: [ACP Agents](/uk/tools/acp-agents#channel-specific-settings). - + ```bash #!/usr/bin/env bash @@ -621,7 +621,7 @@ exec ssh -T gateway-host imsg "$@" ### Matrix -Matrix підтримується розширенням і налаштовується в `channels.matrix`. +Matrix підтримується extension і налаштовується в `channels.matrix`. ```json5 { @@ -651,24 +651,24 @@ Matrix підтримується розширенням і налаштовує } ``` -- Автентифікація токеном використовує `accessToken`; автентифікація паролем використовує `userId` + `password`. -- `channels.matrix.proxy` спрямовує HTTP-трафік Matrix через явний HTTP(S)-проксі. Іменовані облікові записи можуть перевизначати його через `channels.matrix.accounts..proxy`. -- `channels.matrix.allowPrivateNetwork` дозволяє приватні/внутрішні homeserver-и. `proxy` і `allowPrivateNetwork` — незалежні елементи керування. -- `channels.matrix.defaultAccount` вибирає бажаний обліковий запис у багатьох облікових записах. -- `channels.matrix.execApprovals`: доставка схвалень exec у стилі Matrix і авторизація схвалювачів. - - `enabled`: `true`, `false` або `"auto"` (за замовчуванням). В автоматичному режимі схвалення exec активуються, коли схвалювачів можна визначити через `approvers` або `commands.ownerAllowFrom`. - - `approvers`: ID користувачів Matrix (наприклад `@owner:example.org`), яким дозволено схвалювати запити exec. - - `agentFilter`: необов'язковий список дозволених ID агентів. Якщо опустити, пересилаються схвалення для всіх агентів. - - `sessionFilter`: необов'язкові шаблони ключів сесій (підрядок або regex). - - `target`: куди надсилати запити на схвалення. `"dm"` (за замовчуванням), `"channel"` (кімната походження) або `"both"`. - - Перевизначення для облікового запису: `channels.matrix.accounts..execApprovals`. -- `channels.matrix.dm.sessionScope` керує тим, як особисті повідомлення Matrix групуються в сесії: `per-user` (за замовчуванням) ділиться за маршрутизованим співрозмовником, а `per-room` ізолює кожну кімнату особистих повідомлень. -- Перевірки статусу Matrix і пошук у live directory використовують ту саму політику проксі, що й трафік середовища виконання. -- Повну конфігурацію Matrix, правила цільового спрямування та приклади налаштування описано в [Matrix](/uk/channels/matrix). +- Автентифікація токеном використовує `accessToken`; автентифікація паролем — `userId` + `password`. +- `channels.matrix.proxy` спрямовує HTTP-трафік Matrix через явний HTTP(S) proxy. Іменовані акаунти можуть перевизначати це через `channels.matrix.accounts..proxy`. +- `channels.matrix.allowPrivateNetwork` дозволяє private/internal homeservers. `proxy` і `allowPrivateNetwork` — незалежні елементи керування. +- `channels.matrix.defaultAccount` вибирає бажаний акаунт у багатоакаунтних конфігураціях. +- `channels.matrix.execApprovals`: доставка native exec approval у Matrix і авторизація погоджувачів. + - `enabled`: `true`, `false` або `"auto"` (default). У режимі auto exec approvals активуються, коли погоджувачів можна визначити з `approvers` або `commands.ownerAllowFrom`. + - `approvers`: ID користувачів Matrix (наприклад `@owner:example.org`), яким дозволено схвалювати exec requests. + - `agentFilter`: необов’язковий allowlist ID агентів. Якщо пропустити, approvals пересилаються для всіх агентів. + - `sessionFilter`: необов’язкові шаблони ключів сесій (підрядок або regex). + - `target`: куди надсилати запити на схвалення. `"dm"` (default), `"channel"` (вихідна кімната) або `"both"`. + - Перевизначення на рівні акаунта: `channels.matrix.accounts..execApprovals`. +- `channels.matrix.dm.sessionScope` керує тим, як DM Matrix групуються в session: `per-user` (default) ділить за маршрутизованим peer, а `per-room` ізолює кожну DM room. +- Matrix status probes і live directory lookups використовують ту саму політику proxy, що й трафік runtime. +- Повну конфігурацію Matrix, правила targeting і приклади налаштування задокументовано в [Matrix](/uk/channels/matrix). ### Microsoft Teams -Microsoft Teams підтримується розширенням і налаштовується в `channels.msteams`. +Microsoft Teams підтримується extension і налаштовується в `channels.msteams`. ```json5 { @@ -676,19 +676,19 @@ Microsoft Teams підтримується розширенням і налаш msteams: { enabled: true, configWrites: true, - // appId, appPassword, tenantId, webhook, політики команд/каналів: + // appId, appPassword, tenantId, webhook, політики team/channel: // див. /channels/msteams }, }, } ``` -- Тут охоплено основні шляхи ключів: `channels.msteams`, `channels.msteams.configWrites`. -- Повну конфігурацію Teams (облікові дані, webhook, політика особистих/групових чатів, перевизначення для окремих команд/каналів) описано в [Microsoft Teams](/uk/channels/msteams). +- Основні шляхи ключів, описані тут: `channels.msteams`, `channels.msteams.configWrites`. +- Повну конфігурацію Teams (облікові дані, webhook, політика DM/груп, перевизначення для кожної team/channel) задокументовано в [Microsoft Teams](/uk/channels/msteams). ### IRC -IRC підтримується розширенням і налаштовується в `channels.irc`. +IRC підтримується extension і налаштовується в `channels.irc`. ```json5 { @@ -709,13 +709,13 @@ IRC підтримується розширенням і налаштовуєт } ``` -- Тут охоплено основні шляхи ключів: `channels.irc`, `channels.irc.dmPolicy`, `channels.irc.configWrites`, `channels.irc.nickserv.*`. -- Необов'язковий `channels.irc.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він відповідає налаштованому `accountId`. -- Повну конфігурацію IRC-каналу (host/port/TLS/channels/allowlists/обмеження за згадками) описано в [IRC](/uk/channels/irc). +- Основні шляхи ключів, описані тут: `channels.irc`, `channels.irc.dmPolicy`, `channels.irc.configWrites`, `channels.irc.nickserv.*`. +- Необов’язковий `channels.irc.defaultAccount` перевизначає вибір акаунта за замовчуванням, якщо він збігається з налаштованим ID акаунта. +- Повну конфігурацію каналу IRC (host/port/TLS/channels/allowlists/mention gating) задокументовано в [IRC](/uk/channels/irc). -### Багато облікових записів (усі канали) +### Багато акаунтів (усі канали) -Запускайте кілька облікових записів на канал (кожен із власним `accountId`): +Запускайте кілька акаунтів на канал (кожен зі своїм `accountId`): ```json5 { @@ -736,28 +736,28 @@ IRC підтримується розширенням і налаштовуєт } ``` -- `default` використовується, коли `accountId` опущено (CLI + маршрутизація). -- Токени з env застосовуються лише до облікового запису **default**. -- Базові налаштування каналу застосовуються до всіх облікових записів, якщо їх не перевизначено окремо. -- Використовуйте `bindings[].match.accountId`, щоб спрямувати кожен обліковий запис до іншого агента. -- Якщо ви додаєте не-default обліковий запис через `openclaw channels add` (або онбординг каналу), поки все ще використовуєте конфігурацію верхнього рівня для одного облікового запису, OpenClaw спочатку переносить значення верхнього рівня, прив'язані до одного облікового запису, у карту облікових записів каналу, щоб початковий обліковий запис і далі працював. Для більшості каналів вони переміщуються в `channels..accounts.default`; Matrix натомість може зберегти наявну відповідну іменовану/default-ціль. -- Наявні прив'язки лише для каналу (без `accountId`) продовжують відповідати обліковому запису за замовчуванням; прив'язки з областю облікового запису залишаються необов'язковими. -- `openclaw doctor --fix` також виправляє змішані форми, переміщуючи значення верхнього рівня для одного облікового запису в просунутий обліковий запис, вибраний для цього каналу. Для більшості каналів використовується `accounts.default`; Matrix може зберегти наявну відповідну іменовану/default-ціль. +- `default` використовується, коли `accountId` не вказано (CLI + routing). +- Токени env застосовуються лише до акаунта **default**. +- Базові налаштування каналу застосовуються до всіх акаунтів, якщо не перевизначено на рівні акаунта. +- Використовуйте `bindings[].match.accountId`, щоб маршрутизувати кожен акаунт до іншого агента. +- Якщо ви додаєте не-default акаунт через `openclaw channels add` (або onboarding каналу), поки ще використовуєте конфігурацію каналу верхнього рівня для одного акаунта, OpenClaw спочатку піднімає акаунт-орієнтовані значення верхнього рівня до мапи акаунтів каналу, щоб початковий акаунт продовжував працювати. Більшість каналів переміщують їх у `channels..accounts.default`; Matrix може зберегти наявну відповідну іменовану/default ціль. +- Наявні channel-only bindings (без `accountId`) і далі відповідатимуть акаунту default; bindings з прив’язкою до акаунта залишаються необов’язковими. +- `openclaw doctor --fix` також виправляє змішані форми, переміщуючи акаунт-орієнтовані значення верхнього рівня для одного акаунта в підвищений акаунт, вибраний для цього каналу. Більшість каналів використовують `accounts.default`; Matrix може зберегти наявну відповідну іменовану/default ціль. -### Інші канали розширень +### Інші extension channels -Багато каналів розширень налаштовуються як `channels.` і описані на окремих сторінках каналів (наприклад Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat і Twitch). -Див. повний індекс каналів: [Channels](/uk/channels). +Багато extension channels налаштовуються як `channels.` і задокументовані на окремих сторінках каналів (наприклад Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat і Twitch). +Дивіться повний індекс каналів: [Channels](/uk/channels). -### Обмеження за згадками в групових чатах +### Гейтінг згадок у групових чатах -Для групових повідомлень за замовчуванням **потрібна згадка** (метадані згадки або безпечні regex-шаблони). Застосовується до групових чатів WhatsApp, Telegram, Discord, Google Chat та iMessage. +Для групових повідомлень за замовчуванням **потрібна згадка** (метадані згадки або безпечні regex-шаблони). Це стосується групових чатів WhatsApp, Telegram, Discord, Google Chat та iMessage. **Типи згадок:** -- **Згадки в метаданих**: нативні @-згадки платформи. Ігноруються в режимі self-chat у WhatsApp. -- **Текстові шаблони**: безпечні regex-шаблони в `agents.list[].groupChat.mentionPatterns`. Недійсні шаблони та небезпечні вкладені повторення ігноруються. -- Обмеження за згадками застосовується лише тоді, коли виявлення можливе (нативні згадки або принаймні один шаблон). +- **Metadata mentions**: native @-згадки платформи. Ігноруються в режимі self-chat WhatsApp. +- **Text patterns**: безпечні regex-шаблони в `agents.list[].groupChat.mentionPatterns`. Невалідні шаблони і небезпечні вкладені повторення ігноруються. +- Mention gating застосовується лише тоді, коли виявлення можливе (native mentions або принаймні один pattern). ```json5 { @@ -770,9 +770,9 @@ IRC підтримується розширенням і налаштовуєт } ``` -`messages.groupChat.historyLimit` задає глобальне значення за замовчуванням. Канали можуть перевизначити його через `channels..historyLimit` (або для окремого облікового запису). Установіть `0`, щоб вимкнути. +`messages.groupChat.historyLimit` задає глобальне default. Канали можуть перевизначити його через `channels..historyLimit` (або на рівні акаунта). Установіть `0`, щоб вимкнути. -#### Ліміти історії особистих повідомлень +#### Ліміти історії DM ```json5 { @@ -787,13 +787,13 @@ IRC підтримується розширенням і налаштовуєт } ``` -Порядок визначення: перевизначення для конкретного DM → значення постачальника за замовчуванням → без обмеження (зберігається все). +Розв’язання: перевизначення для окремого DM → default постачальника → без ліміту (зберігається все). -Підтримуються: `telegram`, `whatsapp`, `discord`, `slack`, `signal`, `imessage`, `msteams`. +Підтримується: `telegram`, `whatsapp`, `discord`, `slack`, `signal`, `imessage`, `msteams`. #### Режим self-chat -Додайте власний номер до `allowFrom`, щоб увімкнути режим self-chat (ігнорує нативні @-згадки, відповідає лише на текстові шаблони): +Додайте свій номер до `allowFrom`, щоб увімкнути режим self-chat (ігнорує native @-згадки, відповідає лише на text patterns): ```json5 { @@ -814,18 +814,18 @@ IRC підтримується розширенням і налаштовуєт } ``` -### Команди (обробка команд у чаті) +### Commands (обробка chat command) ```json5 { commands: { - native: "auto", // реєструвати нативні команди, коли підтримується - text: true, // розбирати /commands у повідомленнях чату - bash: false, // дозволити ! (псевдонім: /bash) + native: "auto", // реєструвати native commands, коли підтримується + text: true, // розбирати /commands у chat messages + bash: false, // дозволити ! (аліас: /bash) bashForegroundMs: 2000, config: false, // дозволити /config debug: false, // дозволити /debug - restart: false, // дозволити /restart + інструмент перезапуску шлюзу + restart: false, // дозволити /restart + інструмент restart gateway allowFrom: { "*": ["user1"], discord: ["user:123"], @@ -835,18 +835,18 @@ IRC підтримується розширенням і налаштовуєт } ``` - + -- Текстові команди мають бути **окремими** повідомленнями з початковим `/`. -- `native: "auto"` вмикає нативні команди для Discord/Telegram, залишає Slack вимкненим. -- Перевизначення для каналу: `channels.discord.commands.native` (bool або `"auto"`). `false` очищає раніше зареєстровані команди. -- `channels.telegram.customCommands` додає додаткові записи в меню бота Telegram. -- `bash: true` вмикає `! ` для shell хоста. Потрібно `tools.elevated.enabled` і відправник у `tools.elevated.allowFrom.`. -- `config: true` вмикає `/config` (читання/запис `openclaw.json`). Для клієнтів шлюзу `chat.send` постійні записи `/config set|unset` також вимагають `operator.admin`; режим лише читання `/config show` залишається доступним для звичайних операторських клієнтів із правом запису. -- `channels..configWrites` керує мутаціями конфігурації для каналу (за замовчуванням: true). -- Для каналів із багатьма обліковими записами `channels..accounts..configWrites` також керує записами, які стосуються цього облікового запису (наприклад `/allowlist --config --account ` або `/config set channels..accounts....`). -- `allowFrom` задається окремо для постачальника. Якщо встановлено, це **єдине** джерело авторизації (списки дозволів/сполучення каналу і `useAccessGroups` ігноруються). -- `useAccessGroups: false` дозволяє командам обходити політики груп доступу, коли `allowFrom` не встановлено. +- Text commands мають бути **окремими** повідомленнями з початковим `/`. +- `native: "auto"` вмикає native commands для Discord/Telegram, залишає Slack вимкненим. +- Перевизначення для каналу: `channels.discord.commands.native` (bool або `"auto"`). `false` очищує раніше зареєстровані commands. +- `channels.telegram.customCommands` додає додаткові записи меню бота Telegram. +- `bash: true` вмикає `! ` для shell хоста. Потребує `tools.elevated.enabled` і щоб відправник був у `tools.elevated.allowFrom.`. +- `config: true` вмикає `/config` (читає/записує `openclaw.json`). Для клієнтів gateway `chat.send` сталі записи `/config set|unset` також потребують `operator.admin`; read-only `/config show` залишається доступним для звичайних операторських клієнтів із правом запису. +- `channels..configWrites` контролює мутації конфігурації для кожного каналу (default: true). +- Для багатоакаунтних каналів `channels..accounts..configWrites` також контролює записи, що націлені на цей акаунт (наприклад `/allowlist --config --account ` або `/config set channels..accounts....`). +- `allowFrom` задається для кожного постачальника. Якщо встановлено, це **єдине** джерело авторизації (allowlist/pairing каналу та `useAccessGroups` ігноруються). +- `useAccessGroups: false` дозволяє commands обходити політики access-group, коли `allowFrom` не задано. @@ -856,7 +856,7 @@ IRC підтримується розширенням і налаштовуєт ### `agents.defaults.workspace` -За замовчуванням: `~/.openclaw/workspace`. +Default: `~/.openclaw/workspace`. ```json5 { @@ -866,7 +866,7 @@ IRC підтримується розширенням і налаштовуєт ### `agents.defaults.repoRoot` -Необов'язковий корінь репозиторію, який показується в рядку Runtime системного prompt-а. Якщо не встановлено, OpenClaw автоматично визначає його, рухаючись угору від workspace. +Необов’язковий корінь репозиторію, який показується в рядку Runtime системного prompt. Якщо не задано, OpenClaw визначає його автоматично, підіймаючись вгору від workspace. ```json5 { @@ -876,7 +876,7 @@ IRC підтримується розширенням і налаштовуєт ### `agents.defaults.skills` -Необов'язковий список дозволених Skills за замовчуванням для агентів, які не задають +Необов’язковий default allowlist для Skills для агентів, які не задають `agents.list[].skills`. ```json5 @@ -885,18 +885,18 @@ IRC підтримується розширенням і налаштовуєт defaults: { skills: ["github", "weather"] }, list: [ { id: "writer" }, // успадковує github, weather - { id: "docs", skills: ["docs-search"] }, // замінює значення за замовчуванням - { id: "locked-down", skills: [] }, // без Skills + { id: "docs", skills: ["docs-search"] }, // замінює defaults + { id: "locked-down", skills: [] }, // без skills ], }, } ``` -- Опустіть `agents.defaults.skills`, щоб за замовчуванням Skills не обмежувалися. -- Опустіть `agents.list[].skills`, щоб успадкувати значення за замовчуванням. -- Установіть `agents.list[].skills: []`, щоб не мати Skills. -- Непорожній список `agents.list[].skills` є фінальним набором для цього агента; - він не об'єднується зі значеннями за замовчуванням. +- Пропустіть `agents.defaults.skills`, щоб за замовчуванням Skills не обмежувалися. +- Пропустіть `agents.list[].skills`, щоб успадкувати defaults. +- Установіть `agents.list[].skills: []`, щоб не було жодних Skills. +- Непорожній список `agents.list[].skills` — це фінальний набір для агента; він + не зливається з defaults. ### `agents.defaults.skipBootstrap` @@ -910,7 +910,7 @@ IRC підтримується розширенням і налаштовуєт ### `agents.defaults.bootstrapMaxChars` -Максимум символів на один bootstrap-файл workspace перед обрізанням. За замовчуванням: `20000`. +Максимальна кількість символів у кожному bootstrap-файлі workspace перед обрізанням. Default: `20000`. ```json5 { @@ -920,7 +920,7 @@ IRC підтримується розширенням і налаштовуєт ### `agents.defaults.bootstrapTotalMaxChars` -Максимальна загальна кількість символів, що вставляються з усіх bootstrap-файлів workspace. За замовчуванням: `150000`. +Максимальна загальна кількість символів, що інжектуються в усі bootstrap-файли workspace. Default: `150000`. ```json5 { @@ -930,12 +930,12 @@ IRC підтримується розширенням і налаштовуєт ### `agents.defaults.bootstrapPromptTruncationWarning` -Керує текстом попередження, видимим агенту, коли bootstrap-контекст обрізається. -За замовчуванням: `"once"`. +Керує видимим для агента текстом попередження, коли bootstrap-контекст обрізано. +Default: `"once"`. -- `"off"`: ніколи не вставляти текст попередження в системний prompt. -- `"once"`: вставляти попередження один раз для кожного унікального підпису обрізання (рекомендовано). -- `"always"`: вставляти попередження на кожному запуску, якщо є обрізання. +- `"off"`: ніколи не інжектувати текст попередження в system prompt. +- `"once"`: інжектувати попередження один раз для кожного унікального сигнатурного обрізання (рекомендовано). +- `"always"`: інжектувати попередження під час кожного запуску, якщо обрізання існує. ```json5 { @@ -945,10 +945,10 @@ IRC підтримується розширенням і налаштовуєт ### `agents.defaults.imageMaxDimensionPx` -Максимальний розмір у пікселях для довшої сторони зображення в блоках зображень transcript/tool перед викликами постачальника. -За замовчуванням: `1200`. +Максимальний розмір у пікселях для найдовшої сторони зображення в блоках image transcript/tool перед викликами постачальника. +Default: `1200`. -Нижчі значення зазвичай зменшують використання vision-токенів і розмір payload запиту для сценаріїв із великою кількістю знімків екрана. +Нижчі значення зазвичай зменшують використання vision-token і розмір payload запиту для сценаріїв із великою кількістю скриншотів. Вищі значення зберігають більше візуальних деталей. ```json5 @@ -959,7 +959,7 @@ IRC підтримується розширенням і налаштовуєт ### `agents.defaults.userTimezone` -Часовий пояс для контексту системного prompt-а (не для часових позначок повідомлень). Якщо не вказано, використовується часовий пояс хоста. +Часовий пояс для контексту system prompt (не для timestamp повідомлень). Якщо не задано, використовується часовий пояс хоста. ```json5 { @@ -969,7 +969,7 @@ IRC підтримується розширенням і налаштовуєт ### `agents.defaults.timeFormat` -Формат часу в системному prompt-і. За замовчуванням: `auto` (налаштування ОС). +Формат часу в system prompt. Default: `auto` (налаштування ОС). ```json5 { @@ -1007,7 +1007,7 @@ IRC підтримується розширенням і налаштовуєт primary: "anthropic/claude-opus-4-6", fallbacks: ["openai/gpt-5.4-mini"], }, - params: { cacheRetention: "long" }, // глобальні параметри постачальника за замовчуванням + params: { cacheRetention: "long" }, // глобальні default provider params pdfMaxBytesMb: 10, pdfMaxPages: 20, thinkingDefault: "low", @@ -1022,40 +1022,40 @@ IRC підтримується розширенням і налаштовуєт } ``` -- `model`: приймає або рядок (`"provider/model"`), або об'єкт (`{ primary, fallbacks }`). - - Форма рядка задає лише основну модель. - - Форма об'єкта задає основну модель плюс упорядковані failover-моделі. -- `imageModel`: приймає або рядок (`"provider/model"`), або об'єкт (`{ primary, fallbacks }`). - - Використовується шляхом інструмента `image` як конфігурація vision-моделі. - - Також використовується як резервна маршрутизація, коли вибрана/типова модель не може приймати зображення. -- `imageGenerationModel`: приймає або рядок (`"provider/model"`), або об'єкт (`{ primary, fallbacks }`). - - Використовується спільною можливістю генерації зображень і будь-якою майбутньою поверхнею інструмента/plugin, що генерує зображення. - - Типові значення: `google/gemini-3.1-flash-image-preview` для нативної генерації зображень Gemini, `fal/fal-ai/flux/dev` для fal або `openai/gpt-image-1` для OpenAI Images. - - Якщо ви вибираєте конкретно постачальника/модель, також налаштуйте відповідну автентифікацію/API-ключ постачальника (наприклад `GEMINI_API_KEY` або `GOOGLE_API_KEY` для `google/*`, `OPENAI_API_KEY` для `openai/*`, `FAL_KEY` для `fal/*`). - - Якщо опущено, `image_generate` усе одно може вивести типове значення постачальника з автентифікацією. Спочатку він пробує поточного типового постачальника, потім решту зареєстрованих постачальників генерації зображень у порядку provider-id. -- `videoGenerationModel`: приймає або рядок (`"provider/model"`), або об'єкт (`{ primary, fallbacks }`). +- `model`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`). + - Рядкова форма задає лише primary model. + - Форма об’єкта задає primary плюс впорядковані failover models. +- `imageModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`). + - Використовується шляхом інструмента `image` як конфігурація vision model. + - Також використовується як резервна маршрутизація, коли вибрана/default model не може приймати image input. +- `imageGenerationModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`). + - Використовується спільною можливістю генерації зображень і будь-якою майбутньою поверхнею tool/plugin, що генерує зображення. + - Типові значення: `google/gemini-3.1-flash-image-preview` для native Gemini image generation, `fal/fal-ai/flux/dev` для fal або `openai/gpt-image-1` для OpenAI Images. + - Якщо ви вибираєте конкретний provider/model, також налаштуйте відповідну автентифікацію/API key постачальника (наприклад `GEMINI_API_KEY` або `GOOGLE_API_KEY` для `google/*`, `OPENAI_API_KEY` для `openai/*`, `FAL_KEY` для `fal/*`). + - Якщо параметр пропущено, `image_generate` все одно може вивести default постачальника з автентифікацією. Спочатку він пробує поточного default provider, а потім решту зареєстрованих постачальників image generation у порядку provider-id. +- `videoGenerationModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`). - Використовується спільною можливістю генерації відео та вбудованим інструментом `video_generate`. - Типові значення: `qwen/wan2.6-t2v`, `qwen/wan2.6-i2v`, `qwen/wan2.6-r2v`, `qwen/wan2.6-r2v-flash` або `qwen/wan2.7-r2v`. - - Якщо опущено, `video_generate` усе одно може вивести типове значення постачальника з автентифікацією. Спочатку він пробує поточного типового постачальника, потім решту зареєстрованих постачальників генерації відео в порядку provider-id. - - Якщо ви вибираєте конкретно постачальника/модель, також налаштуйте відповідну автентифікацію/API-ключ постачальника. - - Зараз комплектний постачальник генерації відео Qwen підтримує до 1 вихідного відео, 1 вхідного зображення, 4 вхідних відео, тривалість 10 секунд і параметри рівня постачальника `size`, `aspectRatio`, `resolution`, `audio` та `watermark`. -- `pdfModel`: приймає або рядок (`"provider/model"`), або об'єкт (`{ primary, fallbacks }`). + - Якщо параметр пропущено, `video_generate` усе одно може вивести default постачальника з автентифікацією. Спочатку він пробує поточного default provider, а потім решту зареєстрованих постачальників генерації відео в порядку provider-id. + - Якщо ви вибираєте конкретний provider/model, також налаштуйте відповідну автентифікацію/API key постачальника. + - Вбудований постачальник генерації відео Qwen наразі підтримує до 1 вихідного відео, 1 вхідного зображення, 4 вхідних відео, тривалість 10 секунд і параметри постачальника `size`, `aspectRatio`, `resolution`, `audio` та `watermark`. +- `pdfModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`). - Використовується інструментом `pdf` для маршрутизації моделі. - - Якщо опущено, інструмент PDF повертається до `imageModel`, а потім до визначеної моделі сесії/типової моделі. -- `pdfMaxBytesMb`: ліміт розміру PDF за замовчуванням для інструмента `pdf`, якщо `maxBytesMb` не передано під час виклику. -- `pdfMaxPages`: максимальна кількість сторінок за замовчуванням, що враховується в режимі резервного витягування інструмента `pdf`. -- `verboseDefault`: типовий рівень verbose для агентів. Значення: `"off"`, `"on"`, `"full"`. За замовчуванням: `"off"`. -- `elevatedDefault`: типовий рівень elevated-output для агентів. Значення: `"off"`, `"on"`, `"ask"`, `"full"`. За замовчуванням: `"on"`. -- `model.primary`: формат `provider/model` (наприклад `openai/gpt-5.4`). Якщо опустити постачальника, OpenClaw спочатку пробує alias, потім унікальний збіг серед налаштованих постачальників для цього exact model id і лише потім повертається до налаштованого типового постачальника (застаріла сумісна поведінка, тож краще явно вказувати `provider/model`). Якщо цей постачальник більше не надає налаштовану типову модель, OpenClaw переходить до першого налаштованого постачальника/моделі замість того, щоб показувати застаріле типове значення від вилученого постачальника. -- `models`: налаштований каталог моделей і список дозволів для `/model`. Кожен запис може містити `alias` (скорочення) і `params` (специфічні для постачальника, наприклад `temperature`, `maxTokens`, `cacheRetention`, `context1m`). -- `params`: глобальні параметри постачальника за замовчуванням, які застосовуються до всіх моделей. Задаються в `agents.defaults.params` (наприклад `{ cacheRetention: "long" }`). -- Порядок злиття `params` (конфігурація): `agents.defaults.params` (глобальна база) перевизначається `agents.defaults.models["provider/model"].params` (для окремої моделі), потім `agents.list[].params` (для відповідного ID агента) перевизначає по ключах. Докладніше див. [Prompt Caching](/uk/reference/prompt-caching). -- Писальники конфігурації, які змінюють ці поля (наприклад `/models set`, `/models set-image` і команди додавання/видалення резервних моделей), зберігають канонічну форму об'єкта та за можливості зберігають наявні списки fallback. -- `maxConcurrent`: максимальна кількість паралельних запусків агентів між сесіями (кожна сесія все одно серіалізується). За замовчуванням: 4. + - Якщо параметр пропущено, PDF tool повертається до `imageModel`, а потім — до визначеної model session/default. +- `pdfMaxBytesMb`: default обмеження розміру PDF для інструмента `pdf`, коли `maxBytesMb` не передано під час виклику. +- `pdfMaxPages`: default максимальна кількість сторінок, які враховуються режимом fallback extraction в інструменті `pdf`. +- `verboseDefault`: default рівень verbose для агентів. Значення: `"off"`, `"on"`, `"full"`. Default: `"off"`. +- `elevatedDefault`: default рівень elevated-output для агентів. Значення: `"off"`, `"on"`, `"ask"`, `"full"`. Default: `"on"`. +- `model.primary`: формат `provider/model` (наприклад `openai/gpt-5.4`). Якщо пропустити provider, OpenClaw спочатку пробує alias, потім — унікальний match серед налаштованих providers для цього exact model id, і лише потім повертається до налаштованого default provider (застаріла сумісна поведінка, тому краще явно вказувати `provider/model`). Якщо цей provider більше не пропонує налаштовану default model, OpenClaw повертається до першого налаштованого provider/model, а не показує застарілий default видаленого provider. +- `models`: налаштований каталог моделей і allowlist для `/model`. Кожен запис може містити `alias` (скорочення) і `params` (специфічні для provider, наприклад `temperature`, `maxTokens`, `cacheRetention`, `context1m`). +- `params`: глобальні default provider parameters, застосовувані до всіх моделей. Задається через `agents.defaults.params` (наприклад `{ cacheRetention: "long" }`). +- Пріоритет злиття `params` (конфігурація): `agents.defaults.params` (глобальна база) перевизначається `agents.defaults.models["provider/model"].params` (для моделі), потім `agents.list[].params` (для відповідного agent id) перевизначає по ключах. Докладніше див. [Prompt Caching](/uk/reference/prompt-caching). +- Записувачі конфігурації, які змінюють ці поля (наприклад `/models set`, `/models set-image` і команди додавання/видалення fallback), зберігають канонічну форму об’єкта й по можливості зберігають наявні списки fallback. +- `maxConcurrent`: максимальна кількість паралельних запусків агентів між сесіями (кожна session усе одно серіалізується). Default: 4. -**Вбудовані скорочені alias-и** (застосовуються лише тоді, коли модель є в `agents.defaults.models`): +**Вбудовані shorthand aliases** (застосовуються лише тоді, коли модель є в `agents.defaults.models`): -| Alias | Модель | +| Псевдонім | Модель | | ------------------- | -------------------------------------- | | `opus` | `anthropic/claude-opus-4-6` | | `sonnet` | `anthropic/claude-sonnet-4-6` | @@ -1066,14 +1066,14 @@ IRC підтримується розширенням і налаштовуєт | `gemini-flash` | `google/gemini-3-flash-preview` | | `gemini-flash-lite` | `google/gemini-3.1-flash-lite-preview` | -Ваші налаштовані alias-и завжди мають пріоритет над типовими. +Ваші налаштовані aliases завжди мають пріоритет над defaults. -Для моделей Z.AI GLM-4.x автоматично вмикається режим thinking, якщо ви не задасте `--thinking off` або самостійно не визначите `agents.defaults.models["zai/"].params.thinking`. -Моделі Z.AI типово вмикають `tool_stream` для потокової передачі викликів інструментів. Установіть `agents.defaults.models["zai/"].params.tool_stream` у `false`, щоб вимкнути це. -Для моделей Anthropic Claude 4.6 типовим є `adaptive` thinking, коли явний рівень thinking не встановлено. +Моделі Z.AI GLM-4.x автоматично вмикають thinking mode, якщо ви не встановите `--thinking off` або самі не задасте `agents.defaults.models["zai/"].params.thinking`. +Моделі Z.AI за замовчуванням вмикають `tool_stream` для потокової передачі tool call. Щоб вимкнути це, установіть `agents.defaults.models["zai/"].params.tool_stream` у `false`. +Для моделей Anthropic Claude 4.6 за замовчуванням використовується `adaptive` thinking, коли не задано явний рівень thinking. -- Підтримка сесій доступна, коли встановлено `sessionArg`. -- Передача зображень підтримується, коли `imageArg` приймає шляхи до файлів. +- Sessions підтримуються, коли встановлено `sessionArg`. +- Пряме передавання image підтримується, коли `imageArg` приймає file paths. ### `agents.defaults.heartbeat` @@ -1087,12 +1087,12 @@ IRC підтримується розширенням і налаштовуєт every: "30m", // 0m вимикає model: "openai/gpt-5.4-mini", includeReasoning: false, - lightContext: false, // за замовчуванням: false; true залишає лише HEARTBEAT.md з bootstrap-файлів workspace - isolatedSession: false, // за замовчуванням: false; true запускає кожен heartbeat у новій сесії (без історії розмови) + lightContext: false, // default: false; true зберігає лише HEARTBEAT.md із bootstrap-файлів workspace + isolatedSession: false, // default: false; true запускає кожен heartbeat у свіжій session (без історії розмови) session: "main", to: "+15555550123", - directPolicy: "allow", // allow (за замовчуванням) | block - target: "none", // за замовчуванням: none | варіанти: last | whatsapp | telegram | discord | ... + directPolicy: "allow", // allow (default) | block + target: "none", // default: none | options: last | whatsapp | telegram | discord | ... prompt: "Прочитай HEARTBEAT.md, якщо він існує...", ackMaxChars: 300, suppressToolErrorWarnings: false, @@ -1102,13 +1102,13 @@ IRC підтримується розширенням і налаштовуєт } ``` -- `every`: рядок тривалості (ms/s/m/h). За замовчуванням: `30m` (автентифікація API-ключем) або `1h` (OAuth-автентифікація). Установіть `0m`, щоб вимкнути. -- `suppressToolErrorWarnings`: якщо true, придушує payload-и попереджень про помилки інструментів під час heartbeat. -- `directPolicy`: політика прямої/особистої доставки. `allow` (за замовчуванням) дозволяє доставку на пряму ціль. `block` пригнічує доставку на пряму ціль і видає `reason=dm-blocked`. -- `lightContext`: якщо true, heartbeat використовує полегшений bootstrap-контекст і зберігає лише `HEARTBEAT.md` із bootstrap-файлів workspace. -- `isolatedSession`: якщо true, кожен heartbeat запускається в новій сесії без попередньої історії розмови. Такий самий шаблон ізоляції, як у cron `sessionTarget: "isolated"`. Зменшує вартість токенів на heartbeat приблизно зі 100K до 2–5K токенів. -- Для окремого агента: встановіть `agents.list[].heartbeat`. Якщо будь-який агент визначає `heartbeat`, heartbeat запускаються **лише для цих агентів**. -- Heartbeat виконує повні ходи агента — коротші інтервали спалюють більше токенів. +- `every`: рядок тривалості (ms/s/m/h). Default: `30m` (автентифікація API key) або `1h` (автентифікація OAuth). Установіть `0m`, щоб вимкнути. +- `suppressToolErrorWarnings`: якщо true, пригнічує payload попереджень про помилки інструментів під час heartbeat runs. +- `directPolicy`: політика доставки direct/DM. `allow` (default) дозволяє доставку в direct targets. `block` пригнічує доставку в direct target і генерує `reason=dm-blocked`. +- `lightContext`: якщо true, heartbeat runs використовують полегшений bootstrap-контекст і зберігають лише `HEARTBEAT.md` із bootstrap-файлів workspace. +- `isolatedSession`: якщо true, кожен heartbeat run відбувається в новій session без попередньої історії розмов. Той самий шаблон ізоляції, що й у cron `sessionTarget: "isolated"`. Зменшує вартість токенів на heartbeat приблизно зі ~100K до ~2-5K токенів. +- Для агента: задайте `agents.list[].heartbeat`. Якщо будь-який агент визначає `heartbeat`, heartbeat запускаються **лише для цих агентів**. +- Heartbeat виконують повні agent turns — коротші інтервали спалюють більше токенів. ### `agents.defaults.compaction` @@ -1121,15 +1121,15 @@ IRC підтримується розширенням і налаштовуєт timeoutSeconds: 900, reserveTokensFloor: 24000, identifierPolicy: "strict", // strict | off | custom - identifierInstructions: "Точно зберігай deployment ID, ticket ID і пари host:port.", // використовується, коли identifierPolicy=custom - postCompactionSections: ["Session Startup", "Red Lines"], // [] вимикає повторне вставлення - model: "openrouter/anthropic/claude-sonnet-4-6", // необов'язкове перевизначення моделі лише для compaction - notifyUser: true, // надсилати коротке сповіщення, коли починається compaction (за замовчуванням: false) + identifierInstructions: "Точно зберігай deployment IDs, ticket IDs і пари host:port.", // використовується, коли identifierPolicy=custom + postCompactionSections: ["Session Startup", "Red Lines"], // [] вимикає повторне інжектування + model: "openrouter/anthropic/claude-sonnet-4-6", // необов’язкове перевизначення моделі лише для compaction + notifyUser: true, // надсилати коротке повідомлення, коли починається compaction (default: false) memoryFlush: { enabled: true, softThresholdTokens: 6000, - systemPrompt: "Сесія наближається до compaction. Збережи стійкі спогади зараз.", - prompt: "Запиши всі довготривалі нотатки в memory/YYYY-MM-DD.md; відповідай точним тихим токеном NO_REPLY, якщо нічого зберігати.", + systemPrompt: "Session наближається до compaction. Збережіть сталі спогади зараз.", + prompt: "Запиши будь-які тривалі нотатки в memory/YYYY-MM-DD.md; відповідай точним silent token NO_REPLY, якщо зберігати нічого.", }, }, }, @@ -1137,18 +1137,18 @@ IRC підтримується розширенням і налаштовуєт } ``` -- `mode`: `default` або `safeguard` (узагальнення довгих історій частинами). Див. [Compaction](/uk/concepts/compaction). -- `timeoutSeconds`: максимальна кількість секунд для однієї операції compaction, після якої OpenClaw її перериває. За замовчуванням: `900`. -- `identifierPolicy`: `strict` (за замовчуванням), `off` або `custom`. `strict` додає вбудовану інструкцію зі збереження непрозорих ідентифікаторів під час узагальнення compaction. -- `identifierInstructions`: необов'язковий власний текст про збереження ідентифікаторів, який використовується, коли `identifierPolicy=custom`. -- `postCompactionSections`: необов'язкові назви розділів H2/H3 з AGENTS.md, які потрібно повторно вставити після compaction. За замовчуванням `["Session Startup", "Red Lines"]`; установіть `[]`, щоб вимкнути повторне вставлення. Якщо не встановлено або явно встановлено цю типову пару, старіші заголовки `Every Session`/`Safety` теж приймаються як застарілий резервний варіант. -- `model`: необов'язкове перевизначення `provider/model-id` лише для узагальнення compaction. Використовуйте це, коли основна сесія має залишатися на одній моделі, а compaction summaries — виконуватися на іншій; якщо не встановлено, compaction використовує основну модель сесії. -- `notifyUser`: коли `true`, надсилає користувачеві коротке повідомлення, коли починається compaction (наприклад, "Compacting context..."). За замовчуванням вимкнено, щоб compaction була безшумною. -- `memoryFlush`: тихий агентний хід перед auto-compaction для збереження довготривалих спогадів. Пропускається, коли workspace доступний лише для читання. +- `mode`: `default` або `safeguard` (узагальнення шматками для довгих історій). Див. [Compaction](/uk/concepts/compaction). +- `timeoutSeconds`: максимальна кількість секунд для однієї операції compaction, після чого OpenClaw її скасовує. Default: `900`. +- `identifierPolicy`: `strict` (default), `off` або `custom`. `strict` додає вбудовані інструкції щодо збереження непрозорих ідентифікаторів під час summarization у compaction. +- `identifierInstructions`: необов’язковий власний текст для збереження ідентифікаторів, який використовується, коли `identifierPolicy=custom`. +- `postCompactionSections`: необов’язкові назви секцій AGENTS.md рівня H2/H3 для повторного інжектування після compaction. Default: `["Session Startup", "Red Lines"]`; установіть `[]`, щоб вимкнути повторне інжектування. Коли не задано або явно встановлено цю пару за замовчуванням, старіші заголовки `Every Session`/`Safety` також приймаються як legacy fallback. +- `model`: необов’язкове перевизначення `provider/model-id` лише для summarization у compaction. Використовуйте це, коли основна session має залишатися на одній моделі, а summaries compaction повинні виконуватися на іншій; якщо не задано, compaction використовує primary model session. +- `notifyUser`: якщо `true`, надсилає коротке повідомлення користувачу, коли починається compaction (наприклад, "Compacting context..."). За замовчуванням вимкнено, щоб compaction відбувався безшумно. +- `memoryFlush`: тихий agentic turn перед auto-compaction для збереження тривалих спогадів. Пропускається, якщо workspace тільки для читання. ### `agents.defaults.contextPruning` -Обрізає **старі результати інструментів** з контексту в пам'яті перед надсиланням до LLM. **Не** змінює історію сесії на диску. +Обрізає **старі результати інструментів** з in-memory контексту перед надсиланням до LLM. **Не** змінює історію session на диску. ```json5 { @@ -1172,25 +1172,25 @@ IRC підтримується розширенням і налаштовуєт -- `mode: "cache-ttl"` вмикає проходи обрізання. -- `ttl` контролює, як часто обрізання може запускатися знову (після останнього торкання кешу). -- Спочатку обрізання м'яко скорочує завеликі результати інструментів, а потім жорстко очищує старіші результати інструментів, якщо потрібно. +- `mode: "cache-ttl"` вмикає проходи pruning. +- `ttl` визначає, як часто pruning може запускатися знову (після останнього cache touch). +- Pruning спочатку soft-trim обрізає завеликі результати інструментів, а потім hard-clear очищає старіші результати інструментів, якщо потрібно. -**М'яке обрізання** зберігає початок і кінець та вставляє `...` посередині. +**Soft-trim** зберігає початок + кінець і вставляє `...` посередині. -**Жорстке очищення** замінює весь результат інструмента на placeholder. +**Hard-clear** замінює весь результат інструмента на placeholder. Примітки: -- Блоки зображень ніколи не обрізаються і не очищуються. -- Співвідношення базуються на кількості символів (приблизно), а не на точній кількості токенів. -- Якщо існує менше ніж `keepLastAssistants` повідомлень assistant, обрізання пропускається. +- Блоки image ніколи не обрізаються/не очищаються. +- Співвідношення базуються на символах (приблизно), а не на точній кількості токенів. +- Якщо існує менше ніж `keepLastAssistants` assistant messages, pruning пропускається. -Докладніше про поведінку див. [Session Pruning](/uk/concepts/session-pruning). +Докладніше про поведінку див. у [Session Pruning](/uk/concepts/session-pruning). -### Блокова потокова передача +### Block streaming ```json5 { @@ -1206,11 +1206,11 @@ IRC підтримується розширенням і налаштовуєт } ``` -- Для каналів, відмінних від Telegram, потрібен явний `*.blockStreaming: true`, щоб увімкнути блокові відповіді. -- Перевизначення для каналу: `channels..blockStreamingCoalesce` (і варіанти для окремих облікових записів). Для Signal/Slack/Discord/Google Chat за замовчуванням `minChars: 1500`. -- `humanDelay`: випадкова пауза між блоковими відповідями. `natural` = 800–2500 мс. Перевизначення для окремого агента: `agents.list[].humanDelay`. +- Канали, крім Telegram, потребують явного `*.blockStreaming: true`, щоб увімкнути block replies. +- Перевизначення на рівні каналу: `channels..blockStreamingCoalesce` (і варіанти для кожного акаунта). Для Signal/Slack/Discord/Google Chat default `minChars: 1500`. +- `humanDelay`: випадкова пауза між block replies. `natural` = 800–2500ms. Перевизначення для агента: `agents.list[].humanDelay`. -Див. [Streaming](/uk/concepts/streaming) для деталей поведінки та розбиття на чанки. +Докладніше про поведінку та chunking див. у [Streaming](/uk/concepts/streaming). ### Індикатори набору @@ -1225,8 +1225,8 @@ IRC підтримується розширенням і налаштовуєт } ``` -- За замовчуванням: `instant` для особистих чатів/згадок, `message` для групових чатів без згадки. -- Перевизначення для сесії: `session.typingMode`, `session.typingIntervalSeconds`. +- Defaults: `instant` для direct chats/mentions, `message` для групових чатів без згадки. +- Перевизначення для session: `session.typingMode`, `session.typingIntervalSeconds`. Див. [Typing Indicators](/uk/concepts/typing-indicators). @@ -1234,7 +1234,7 @@ IRC підтримується розширенням і налаштовуєт ### `agents.defaults.sandbox` -Необов'язкове sandbox-ізолювання для вбудованого агента. Повний посібник див. у [Sandboxing](/uk/gateway/sandboxing). +Необов’язковий sandboxing для вбудованого агента. Повний посібник див. у [Sandboxing](/uk/gateway/sandboxing). ```json5 { @@ -1280,7 +1280,7 @@ IRC підтримується розширенням і налаштовуєт identityFile: "~/.ssh/id_ed25519", certificateFile: "~/.ssh/id_ed25519-cert.pub", knownHostsFile: "~/.ssh/known_hosts", - // SecretRef / вбудований вміст також підтримуються: + // Також підтримуються SecretRefs / вбудований вміст: // identityData: { source: "env", provider: "default", id: "SSH_IDENTITY" }, // certificateData: { source: "env", provider: "default", id: "SSH_CERTIFICATE" }, // knownHostsData: { source: "env", provider: "default", id: "SSH_KNOWN_HOSTS" }, @@ -1333,48 +1333,48 @@ IRC підтримується розширенням і налаштовуєт **Backend:** -- `docker`: локальне середовище виконання Docker (за замовчуванням) -- `ssh`: універсальне віддалене середовище виконання на основі SSH -- `openshell`: середовище виконання OpenShell +- `docker`: локальний runtime Docker (default) +- `ssh`: універсальний remote runtime на основі SSH +- `openshell`: runtime OpenShell -Коли вибрано `backend: "openshell"`, налаштування, специфічні для середовища виконання, переміщуються до +Коли вибрано `backend: "openshell"`, налаштування, специфічні для runtime, переносяться до `plugins.entries.openshell.config`. -**Конфігурація SSH backend:** +**Конфігурація backend SSH:** -- `target`: SSH-ціль у форматі `user@host[:port]` -- `command`: команда SSH-клієнта (за замовчуванням: `ssh`) -- `workspaceRoot`: абсолютний віддалений корінь, який використовується для workspace у межах scope -- `identityFile` / `certificateFile` / `knownHostsFile`: наявні локальні файли, що передаються в OpenSSH -- `identityData` / `certificateData` / `knownHostsData`: вбудований вміст або SecretRef, який OpenClaw матеріалізує в тимчасові файли під час виконання -- `strictHostKeyChecking` / `updateHostKeys`: параметри політики ключів хоста OpenSSH +- `target`: ціль SSH у форматі `user@host[:port]` +- `command`: команда SSH client (default: `ssh`) +- `workspaceRoot`: абсолютний remote root, що використовується для workspace кожного scope +- `identityFile` / `certificateFile` / `knownHostsFile`: наявні локальні файли, передані до OpenSSH +- `identityData` / `certificateData` / `knownHostsData`: вбудований вміст або SecretRefs, які OpenClaw матеріалізує у тимчасові файли під час runtime +- `strictHostKeyChecking` / `updateHostKeys`: параметри політики host-key OpenSSH **Пріоритет автентифікації SSH:** - `identityData` має пріоритет над `identityFile` - `certificateData` має пріоритет над `certificateFile` - `knownHostsData` має пріоритет над `knownHostsFile` -- Значення `*Data`, підкріплені SecretRef, визначаються з активного знімка secrets runtime перед початком sandbox-сесії +- Значення `*Data`, що використовують SecretRef, розв’язуються з активного знімка secrets runtime до старту sandbox session -**Поведінка SSH backend:** +**Поведінка backend SSH:** -- один раз ініціалізує віддалений workspace після створення або повторного створення -- потім зберігає віддалений SSH-workspace як канонічний -- маршрутизує `exec`, файлові інструменти та шляхи медіа через SSH -- не синхронізує автоматично віддалені зміни назад на хост -- не підтримує браузерні контейнери sandbox +- засіває remote workspace один раз після create або recreate +- після цього зберігає remote SSH workspace як канонічний +- маршрутизує `exec`, file tools і media paths через SSH +- не синхронізує remote changes назад на хост автоматично +- не підтримує sandbox browser containers **Доступ до workspace:** -- `none`: workspace sandbox у межах scope під `~/.openclaw/sandboxes` -- `ro`: workspace sandbox у `/workspace`, workspace агента монтується лише для читання в `/agent` -- `rw`: workspace агента монтується для читання/запису в `/workspace` +- `none`: workspace sandbox для кожного scope у `~/.openclaw/sandboxes` +- `ro`: workspace sandbox у `/workspace`, workspace агента монтується read-only у `/agent` +- `rw`: workspace агента монтується read/write у `/workspace` **Scope:** -- `session`: контейнер + workspace для кожної сесії -- `agent`: один контейнер + workspace на агента (за замовчуванням) -- `shared`: спільний контейнер і workspace (без ізоляції між сесіями) +- `session`: окремий container + workspace для кожної session +- `agent`: один container + workspace на агента (default) +- `shared`: спільний container і workspace (без ізоляції між session) **Конфігурація plugin OpenShell:** @@ -1389,10 +1389,10 @@ IRC підтримується розширенням і налаштовуєт from: "openclaw", remoteWorkspaceDir: "/sandbox", remoteAgentWorkspaceDir: "/agent", - gateway: "lab", // необов'язково - gatewayEndpoint: "https://lab.example", // необов'язково - policy: "strict", // необов'язковий ID політики OpenShell - providers: ["openai"], // необов'язково + gateway: "lab", // необов’язково + gatewayEndpoint: "https://lab.example", // необов’язково + policy: "strict", // необов’язковий id політики OpenShell + providers: ["openai"], // необов’язково autoProviders: true, timeoutSeconds: 120, }, @@ -1404,30 +1404,30 @@ IRC підтримується розширенням і налаштовуєт **Режим OpenShell:** -- `mirror`: перед `exec` ініціалізувати віддалене середовище з локального, після `exec` синхронізувати назад; локальний workspace залишається канонічним -- `remote`: один раз ініціалізувати віддалене середовище при створенні sandbox, потім зберігати віддалений workspace як канонічний +- `mirror`: засіяти remote із local перед exec, синхронізувати назад після exec; local workspace залишається канонічним +- `remote`: засіяти remote один раз під час створення sandbox, після цього remote workspace залишається канонічним -У режимі `remote` редагування на локальному хості, виконані поза OpenClaw, не синхронізуються в sandbox автоматично після кроку ініціалізації. -Транспортом є SSH до sandbox OpenShell, але plugin володіє життєвим циклом sandbox і необов'язковою синхронізацією mirror. +У режимі `remote` зміни на локальному хості, зроблені поза OpenClaw, не синхронізуються в sandbox автоматично після кроку seed. +Транспортом є SSH у sandbox OpenShell, але plugin володіє життєвим циклом sandbox і необов’язковою mirror sync. -**`setupCommand`** запускається один раз після створення контейнера (через `sh -lc`). Потрібні мережевий вихід, записуваний root і root-користувач. +**`setupCommand`** виконується один раз після створення container (через `sh -lc`). Потребує network egress, writable root, root user. -**Для контейнерів типовим є `network: "none"`** — установіть `"bridge"` (або власну bridge-мережу), якщо агенту потрібен вихід назовні. -`"host"` блокується. `"container:"` блокується за замовчуванням, якщо ви явно не встановите +**Для containers за замовчуванням використовується `network: "none"`** — установіть `"bridge"` (або власну bridge network), якщо агенту потрібен вихідний доступ. +`"host"` заблоковано. `"container:"` також заблоковано за замовчуванням, якщо ви явно не встановите `sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true` (break-glass). -**Вхідні вкладення** тимчасово розміщуються в `media/inbound/*` активного workspace. +**Вхідні вкладення** розміщуються у `media/inbound/*` в активному workspace. -**`docker.binds`** монтує додаткові каталоги хоста; глобальні binds і binds для окремого агента об'єднуються. +**`docker.binds`** монтує додаткові каталоги хоста; глобальні binds і binds для конкретного агента зливаються. -**Браузер у sandbox** (`sandbox.browser.enabled`): Chromium + CDP у контейнері. URL noVNC вставляється в системний prompt. Не потребує `browser.enabled` у `openclaw.json`. -Доступ спостерігача до noVNC за замовчуванням використовує автентифікацію VNC, і OpenClaw видає короткоживучий token URL (замість того, щоб розкривати пароль у спільному URL). +**Sandboxed browser** (`sandbox.browser.enabled`): Chromium + CDP у container. URL noVNC інжектується в system prompt. Не потребує `browser.enabled` у `openclaw.json`. +Доступ спостерігача noVNC за замовчуванням використовує VNC auth, а OpenClaw видає short-lived token URL (замість того щоб показувати пароль у спільному URL). -- `allowHostControl: false` (за замовчуванням) блокує сесіям у sandbox націлювання на браузер хоста. -- `network` за замовчуванням дорівнює `openclaw-sandbox-browser` (виділена bridge-мережа). Установлюйте `bridge` лише тоді, коли вам явно потрібне глобальне bridge-з'єднання. -- `cdpSourceRange` за бажанням обмежує вхід CDP на межі контейнера до діапазону CIDR (наприклад `172.21.0.1/32`). -- `sandbox.browser.binds` монтує додаткові каталоги хоста лише в контейнер браузера sandbox. Якщо встановлено (включно з `[]`), замінює `docker.binds` для контейнера браузера. -- Значення запуску за замовчуванням визначено в `scripts/sandbox-browser-entrypoint.sh` і налаштовано для контейнерних хостів: +- `allowHostControl: false` (default) блокує націлювання sandboxed sessions на browser хоста. +- `network` за замовчуванням — `openclaw-sandbox-browser` (виділена bridge network). Установлюйте `bridge` лише тоді, коли вам справді потрібна глобальна bridge connectivity. +- `cdpSourceRange` необов’язково обмежує вхідний CDP на межі container до діапазону CIDR (наприклад `172.21.0.1/32`). +- `sandbox.browser.binds` монтує додаткові каталоги хоста лише в container sandbox browser. Якщо встановлено (включно з `[]`), це замінює `docker.binds` для browser container. +- Значення запуску за замовчуванням визначено в `scripts/sandbox-browser-entrypoint.sh` і налаштовано для container hosts: - `--remote-debugging-address=127.0.0.1` - `--remote-debugging-port=` - `--user-data-dir=${HOME}/.chrome` @@ -1444,31 +1444,31 @@ IRC підтримується розширенням і налаштовуєт - `--renderer-process-limit=2` - `--no-zygote` - `--metrics-recording-only` - - `--disable-extensions` (типово увімкнено) + - `--disable-extensions` (увімкнено за замовчуванням) - `--disable-3d-apis`, `--disable-software-rasterizer` і `--disable-gpu` - типово увімкнено, і їх можна вимкнути через + увімкнені за замовчуванням і можуть бути вимкнені через `OPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0`, якщо для WebGL/3D це потрібно. - - `OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0` знову вмикає розширення, якщо ваш робочий процес - залежить від них. + - `OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0` знову вмикає extensions, якщо від них + залежить ваш workflow. - `--renderer-process-limit=2` можна змінити через `OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=`; установіть `0`, щоб використовувати - типове обмеження процесів Chromium. + стандартне обмеження процесів Chromium. - плюс `--no-sandbox` і `--disable-setuid-sandbox`, коли увімкнено `noSandbox`. - - Значення за замовчуванням є базовими для образу контейнера; використовуйте власний образ браузера з власним - entrypoint, щоб змінити типові значення контейнера. + - Defaults — це базовий рівень container image; щоб змінити defaults container, + використовуйте власний browser image із власним entrypoint. -Browser sandboxing і `sandbox.docker.binds` зараз підтримуються лише для Docker. +Browser sandboxing і `sandbox.docker.binds` наразі працюють лише з Docker. -Збірка образів: +Створення images: ```bash -scripts/sandbox-setup.sh # основний образ sandbox -scripts/sandbox-browser-setup.sh # необов'язковий образ браузера +scripts/sandbox-setup.sh # основний sandbox image +scripts/sandbox-browser-setup.sh # необов’язковий browser image ``` -### `agents.list` (перевизначення для окремого агента) +### `agents.list` (перевизначення для агента) ```json5 { @@ -1477,18 +1477,18 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр { id: "main", default: true, - name: "Головний агент", + name: "Main Agent", workspace: "~/.openclaw/workspace", agentDir: "~/.openclaw/agents/main/agent", model: "anthropic/claude-opus-4-6", // або { primary, fallbacks } - thinkingDefault: "high", // перевизначення рівня thinking для окремого агента - reasoningDefault: "on", // перевизначення видимості reasoning для окремого агента - fastModeDefault: false, // перевизначення fast mode для окремого агента + thinkingDefault: "high", // перевизначення рівня thinking для агента + reasoningDefault: "on", // перевизначення видимості reasoning для агента + fastModeDefault: false, // перевизначення fast mode для агента params: { cacheRetention: "none" }, // перевизначає matching defaults.models params за ключем - skills: ["docs-search"], // замінює agents.defaults.skills, якщо задано + skills: ["docs-search"], // замінює agents.defaults.skills, якщо встановлено identity: { name: "Samantha", - theme: "корисливий лінивець", + theme: "helpful sloth", emoji: "🦥", avatar: "avatars/samantha.png", }, @@ -1516,24 +1516,24 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр } ``` -- `id`: стабільний ID агента (обов'язково). -- `default`: якщо встановлено в кількох місцях, перший перемагає (логуються попередження). Якщо не встановлено ніде, типовим стає перший запис у списку. -- `model`: форма рядка перевизначає лише `primary`; форма об'єкта `{ primary, fallbacks }` перевизначає обидва (`[]` вимикає глобальні fallback-и). Cron jobs, які перевизначають лише `primary`, усе одно успадковують типові fallback-и, якщо ви не встановите `fallbacks: []`. -- `params`: параметри потоку для окремого агента, злиті поверх вибраного запису моделі в `agents.defaults.models`. Використовуйте це для перевизначень, специфічних для агента, як-от `cacheRetention`, `temperature` або `maxTokens`, не дублюючи весь каталог моделей. -- `skills`: необов'язковий список дозволених Skills для окремого агента. Якщо опущено, агент успадковує `agents.defaults.skills`, якщо його встановлено; явний список замінює типові значення замість злиття, а `[]` означає відсутність Skills. -- `thinkingDefault`: необов'язковий типовий рівень thinking для окремого агента (`off | minimal | low | medium | high | xhigh | adaptive`). Перевизначає `agents.defaults.thinkingDefault` для цього агента, якщо не встановлено перевизначення для повідомлення або сесії. -- `reasoningDefault`: необов'язкове типове значення видимості reasoning для окремого агента (`on | off | stream`). Застосовується, якщо не встановлено перевизначення reasoning для повідомлення або сесії. -- `fastModeDefault`: необов'язкове типове значення fast mode для окремого агента (`true | false`). Застосовується, якщо не встановлено перевизначення fast-mode для повідомлення або сесії. -- `runtime`: необов'язковий дескриптор середовища виконання для окремого агента. Використовуйте `type: "acp"` із типовими значеннями `runtime.acp` (`agent`, `backend`, `mode`, `cwd`), коли агент має за замовчуванням працювати в ACP harness sessions. -- `identity.avatar`: шлях відносно workspace, URL `http(s)` або URI `data:`. -- `identity` виводить типові значення: `ackReaction` з `emoji`, `mentionPatterns` з `name`/`emoji`. -- `subagents.allowAgents`: список дозволених ID агентів для `sessions_spawn` (`["*"]` = будь-який; за замовчуванням: лише той самий агент). -- Захист успадкування sandbox: якщо сесія ініціатора працює в sandbox, `sessions_spawn` відхиляє цілі, які запускалися б без sandbox. -- `subagents.requireAgentId`: якщо true, блокує виклики `sessions_spawn`, які не містять `agentId` (вимагає явного вибору профілю; за замовчуванням: false). +- `id`: стабільний id агента (обов’язково). +- `default`: коли їх кілька, перший має пріоритет (логуються warnings). Якщо не вказано жодного, default — перший елемент списку. +- `model`: рядкова форма перевизначає лише `primary`; форма об’єкта `{ primary, fallbacks }` перевизначає обидва (`[]` вимикає глобальні fallbacks). Cron jobs, які перевизначають лише `primary`, усе одно успадковують default fallbacks, якщо ви не встановите `fallbacks: []`. +- `params`: stream params для агента, що зливаються поверх вибраного запису моделі в `agents.defaults.models`. Використовуйте це для специфічних перевизначень агента, таких як `cacheRetention`, `temperature` або `maxTokens`, без дублювання всього каталогу моделей. +- `skills`: необов’язковий allowlist Skills для агента. Якщо не задано, агент успадковує `agents.defaults.skills`, якщо вони задані; явний список замінює defaults замість злиття, а `[]` означає відсутність Skills. +- `thinkingDefault`: необов’язковий default рівень thinking для агента (`off | minimal | low | medium | high | xhigh | adaptive`). Перевизначає `agents.defaults.thinkingDefault` для цього агента, якщо не встановлено перевизначення для повідомлення або session. +- `reasoningDefault`: необов’язкове default перевизначення видимості reasoning для агента (`on | off | stream`). Застосовується, коли не встановлено перевизначення reasoning для повідомлення або session. +- `fastModeDefault`: необов’язкове default перевизначення fast mode (`true | false`). Застосовується, коли не встановлено перевизначення fast mode для повідомлення або session. +- `runtime`: необов’язковий дескриптор runtime для агента. Використовуйте `type: "acp"` з defaults `runtime.acp` (`agent`, `backend`, `mode`, `cwd`), коли агент повинен за замовчуванням використовувати sessions harness ACP. +- `identity.avatar`: шлях відносно workspace, `http(s)` URL або `data:` URI. +- `identity` виводить defaults: `ackReaction` з `emoji`, `mentionPatterns` з `name`/`emoji`. +- `subagents.allowAgents`: allowlist id агентів для `sessions_spawn` (`["*"]` = будь-який; default: лише той самий агент). +- Sandbox inheritance guard: якщо session запитувача працює в sandbox, `sessions_spawn` відхиляє цілі, які працювали б без sandbox. +- `subagents.requireAgentId`: якщо true, блокує виклики `sessions_spawn`, у яких пропущено `agentId` (примушує до явного вибору профілю; default: false). --- -## Маршрутизація між агентами +## Маршрутизація кількох агентів Запускайте кілька ізольованих агентів в одному Gateway. Див. [Multi-Agent](/uk/concepts/multi-agent). @@ -1552,29 +1552,29 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр } ``` -### Поля збігу прив'язок +### Поля match для binding -- `type` (необов'язково): `route` для звичайної маршрутизації (відсутній `type` за замовчуванням означає route), `acp` для постійних ACP-прив'язок розмов. -- `match.channel` (обов'язково) -- `match.accountId` (необов'язково; `*` = будь-який обліковий запис; якщо опущено = обліковий запис за замовчуванням) -- `match.peer` (необов'язково; `{ kind: direct|group|channel, id }`) -- `match.guildId` / `match.teamId` (необов'язково; залежить від каналу) -- `acp` (необов'язково; лише для `type: "acp"`): `{ mode, label, cwd, backend }` +- `type` (необов’язково): `route` для звичайної маршрутизації (відсутній type означає route), `acp` для сталих ACP bindings розмов. +- `match.channel` (обов’язково) +- `match.accountId` (необов’язково; `*` = будь-який акаунт; пропущено = default акаунт) +- `match.peer` (необов’язково; `{ kind: direct|group|channel, id }`) +- `match.guildId` / `match.teamId` (необов’язково; залежить від каналу) +- `acp` (необов’язково; лише для `type: "acp"`): `{ mode, label, cwd, backend }` -**Детермінований порядок збігів:** +**Детермінований порядок match:** 1. `match.peer` 2. `match.guildId` 3. `match.teamId` 4. `match.accountId` (точний, без peer/guild/team) -5. `match.accountId: "*"` (у межах каналу) +5. `match.accountId: "*"` (на весь канал) 6. Агент за замовчуванням -У межах кожного рівня перемагає перший відповідний запис у `bindings`. +У межах кожного рівня перший відповідний запис `bindings` має пріоритет. -Для записів `type: "acp"` OpenClaw визначає відповідність за точною ідентичністю розмови (`match.channel` + account + `match.peer.id`) і не використовує наведений вище порядок рівнів route-прив'язок. +Для записів `type: "acp"` OpenClaw визначає відповідність за точною ідентичністю розмови (`match.channel` + акаунт + `match.peer.id`) і не використовує порядок рівнів route binding, описаний вище. -### Профілі доступу для окремих агентів +### Профілі доступу для кожного агента @@ -1594,7 +1594,7 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр - + ```json5 { @@ -1669,7 +1669,7 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр -Докладніше про пріоритети див. [Multi-Agent Sandbox & Tools](/uk/tools/multi-agent-sandbox-tools). +Докладніше про пріоритети див. у [Multi-Agent Sandbox & Tools](/uk/tools/multi-agent-sandbox-tools). --- @@ -1695,22 +1695,22 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр }, resetTriggers: ["/new", "/reset"], store: "~/.openclaw/agents/{agentId}/sessions/sessions.json", - parentForkMaxTokens: 100000, // пропустити форк батьківського потоку вище цього ліміту токенів (0 вимикає) + parentForkMaxTokens: 100000, // пропускати fork батьківського thread вище за цю кількість токенів (0 вимикає) maintenance: { mode: "warn", // warn | enforce pruneAfter: "30d", maxEntries: 500, rotateBytes: "10mb", resetArchiveRetention: "30d", // тривалість або false - maxDiskBytes: "500mb", // необов'язковий жорсткий бюджет - highWaterBytes: "400mb", // необов'язкова ціль очищення + maxDiskBytes: "500mb", // необов’язковий жорсткий бюджет + highWaterBytes: "400mb", // необов’язкова ціль очищення }, threadBindings: { enabled: true, - idleHours: 24, // типове авто-скасування фокусу через неактивність у годинах (`0` вимикає) - maxAgeHours: 0, // типовий жорсткий максимальний вік у годинах (`0` вимикає) + idleHours: 24, // default auto-unfocus через неактивність у годинах (`0` вимикає) + maxAgeHours: 0, // default жорсткий максимум віку в годинах (`0` вимикає) }, - mainKey: "main", // застаріле (runtime завжди використовує "main") + mainKey: "main", // legacy (runtime завжди використовує "main") agentToAgent: { maxPingPongTurns: 5 }, sendPolicy: { rules: [{ action: "deny", match: { channel: "discord", chatType: "group" } }], @@ -1722,35 +1722,35 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр -- **`scope`**: базова стратегія групування сесій для контекстів групових чатів. - - `per-sender` (за замовчуванням): кожен відправник отримує ізольовану сесію в межах контексту каналу. - - `global`: усі учасники в контексті каналу ділять одну спільну сесію (використовуйте лише тоді, коли спільний контекст дійсно потрібний). -- **`dmScope`**: як групуються особисті повідомлення. - - `main`: усі особисті повідомлення ділять основну сесію. - - `per-peer`: ізоляція за ID відправника між каналами. - - `per-channel-peer`: ізоляція за каналом + відправником (рекомендовано для inbox із багатьма користувачами). - - `per-account-channel-peer`: ізоляція за обліковим записом + каналом + відправником (рекомендовано для багатьох облікових записів). -- **`identityLinks`**: зіставлення канонічних ID із peer-ами з префіксом постачальника для спільного використання сесій між каналами. -- **`reset`**: основна політика скидання. `daily` скидає о `atHour` за місцевим часом; `idle` скидає після `idleMinutes`. Якщо налаштовано обидва, спрацьовує те, що закінчиться раніше. -- **`resetByType`**: перевизначення за типом (`direct`, `group`, `thread`). Застарілий `dm` приймається як alias для `direct`. -- **`parentForkMaxTokens`**: максимальне `totalTokens` батьківської сесії, дозволене при створенні сесії форкнутого потоку (за замовчуванням `100000`). - - Якщо батьківське `totalTokens` перевищує це значення, OpenClaw починає нову сесію потоку замість успадкування історії транскрипту батьківської сесії. - - Установіть `0`, щоб вимкнути цей захист і завжди дозволяти форк батьківської сесії. -- **`mainKey`**: застаріле поле. Runtime тепер завжди використовує `"main"` для основного кошика особистих чатів. -- **`agentToAgent.maxPingPongTurns`**: максимальна кількість відповідей назад між агентами під час обміну агент-до-агента (ціле число, діапазон: `0`–`5`). `0` вимикає ланцюжки ping-pong. -- **`sendPolicy`**: збіг за `channel`, `chatType` (`direct|group|channel`, із застарілим alias `dm`), `keyPrefix` або `rawKeyPrefix`. Перший deny перемагає. -- **`maintenance`**: очищення сховища сесій + елементи керування збереженням. - - `mode`: `warn` лише видає попередження; `enforce` застосовує очищення. - - `pruneAfter`: віковий поріг для застарілих записів (за замовчуванням `30d`). - - `maxEntries`: максимальна кількість записів у `sessions.json` (за замовчуванням `500`). - - `rotateBytes`: ротація `sessions.json`, коли його розмір перевищує це значення (за замовчуванням `10mb`). - - `resetArchiveRetention`: час збереження архівів транскриптів `*.reset.`. За замовчуванням дорівнює `pruneAfter`; установіть `false`, щоб вимкнути. - - `maxDiskBytes`: необов'язковий бюджет диска для каталогу сесій. У режимі `warn` лише логує попередження; у режимі `enforce` спочатку видаляє найстаріші артефакти/сесії. - - `highWaterBytes`: необов'язкова ціль після очищення за бюджетом. За замовчуванням `80%` від `maxDiskBytes`. -- **`threadBindings`**: глобальні типові значення для функцій сесій, прив'язаних до потоків. - - `enabled`: головний перемикач за замовчуванням (постачальники можуть перевизначати; Discord використовує `channels.discord.threadBindings.enabled`) - - `idleHours`: типове авто-скасування фокусу через неактивність у годинах (`0` вимикає; постачальники можуть перевизначати) - - `maxAgeHours`: типовий жорсткий максимальний вік у годинах (`0` вимикає; постачальники можуть перевизначати) +- **`scope`**: базова стратегія групування session для контекстів group chat. + - `per-sender` (default): кожен відправник отримує ізольовану session в межах контексту каналу. + - `global`: усі учасники в контексті каналу спільно використовують одну session (використовуйте лише коли справді потрібен спільний контекст). +- **`dmScope`**: як групуються DM. + - `main`: усі DM спільно використовують main session. + - `per-peer`: ізоляція за sender id між каналами. + - `per-channel-peer`: ізоляція за каналом + sender (рекомендовано для inbox із кількома користувачами). + - `per-account-channel-peer`: ізоляція за акаунтом + каналом + sender (рекомендовано для багатоакаунтних конфігурацій). +- **`identityLinks`**: мапа канонічних id до peer із префіксами постачальника для спільного використання session між каналами. +- **`reset`**: основна політика reset. `daily` скидає о `atHour` за локальним часом; `idle` скидає після `idleMinutes`. Якщо налаштовано обидва, спрацьовує той, у якого раніше настає строк. +- **`resetByType`**: перевизначення для типів (`direct`, `group`, `thread`). Legacy `dm` приймається як alias для `direct`. +- **`parentForkMaxTokens`**: максимальна кількість `totalTokens` у батьківській session, дозволена під час створення forked thread session (default `100000`). + - Якщо `totalTokens` батьківської session перевищує це значення, OpenClaw починає нову thread session замість успадкування історії transcript батьківської session. + - Установіть `0`, щоб вимкнути цей захист і завжди дозволяти parent forking. +- **`mainKey`**: legacy field. Runtime тепер завжди використовує `"main"` для основного bucket direct-chat. +- **`agentToAgent.maxPingPongTurns`**: максимальна кількість reply-back turns між агентами під час обміну agent-to-agent (ціле число, діапазон: `0`–`5`). `0` вимикає ping-pong chaining. +- **`sendPolicy`**: match за `channel`, `chatType` (`direct|group|channel`, з legacy alias `dm`), `keyPrefix` або `rawKeyPrefix`. Перший deny має пріоритет. +- **`maintenance`**: очищення сховища session + керування зберіганням. + - `mode`: `warn` лише показує попередження; `enforce` застосовує очищення. + - `pruneAfter`: поріг віку для застарілих записів (default `30d`). + - `maxEntries`: максимальна кількість записів у `sessions.json` (default `500`). + - `rotateBytes`: ротує `sessions.json`, коли його розмір перевищує це значення (default `10mb`). + - `resetArchiveRetention`: зберігання для архівів transcript `*.reset.`. За замовчуванням дорівнює `pruneAfter`; установіть `false`, щоб вимкнути. + - `maxDiskBytes`: необов’язковий дисковий бюджет для каталогу sessions. У режимі `warn` логуються попередження; у режимі `enforce` спочатку видаляються найстаріші artifacts/sessions. + - `highWaterBytes`: необов’язкова ціль після очищення бюджету. За замовчуванням `80%` від `maxDiskBytes`. +- **`threadBindings`**: глобальні defaults для функцій session, прив’язаних до thread. + - `enabled`: основний default-перемикач (providers можуть перевизначати; Discord використовує `channels.discord.threadBindings.enabled`) + - `idleHours`: default auto-unfocus через неактивність у годинах (`0` вимикає; providers можуть перевизначати) + - `maxAgeHours`: default жорсткий максимум віку в годинах (`0` вимикає; providers можуть перевизначати) @@ -1788,36 +1788,36 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр ### Префікс відповіді -Перевизначення для каналу/облікового запису: `channels..responsePrefix`, `channels..accounts..responsePrefix`. +Перевизначення для каналу/акаунта: `channels..responsePrefix`, `channels..accounts..responsePrefix`. -Порядок визначення (найспецифічніше перемагає): account → channel → global. `""` вимикає та зупиняє каскад. `"auto"` виводиться як `[{identity.name}]`. +Розв’язання (найбільш специфічне перемагає): акаунт → канал → глобальний. `""` вимикає й зупиняє cascade. `"auto"` виводить `[{identity.name}]`. **Змінні шаблону:** -| Змінна | Опис | Приклад | -| ---------------- | ----------------------- | --------------------------- | -| `{model}` | Коротка назва моделі | `claude-opus-4-6` | -| `{modelFull}` | Повний ідентифікатор моделі | `anthropic/claude-opus-4-6` | -| `{provider}` | Назва постачальника | `anthropic` | -| `{thinkingLevel}`| Поточний рівень thinking | `high`, `low`, `off` | -| `{identity.name}`| Ім'я identity агента | (те саме, що `"auto"`) | +| Змінна | Опис | Приклад | +| ----------------- | ---------------------- | --------------------------- | +| `{model}` | Коротка назва моделі | `claude-opus-4-6` | +| `{modelFull}` | Повний ідентифікатор моделі | `anthropic/claude-opus-4-6` | +| `{provider}` | Назва постачальника | `anthropic` | +| `{thinkingLevel}` | Поточний рівень thinking | `high`, `low`, `off` | +| `{identity.name}` | Ім’я ідентичності агента | (те саме, що `"auto"`) | Змінні нечутливі до регістру. `{think}` — alias для `{thinkingLevel}`. ### Ack reaction -- За замовчуванням дорівнює `identity.emoji` активного агента, інакше `"👀"`. Установіть `""`, щоб вимкнути. +- За замовчуванням використовується `identity.emoji` активного агента, інакше `"👀"`. Установіть `""`, щоб вимкнути. - Перевизначення для каналу: `channels..ackReaction`, `channels..accounts..ackReaction`. -- Порядок визначення: account → channel → `messages.ackReaction` → fallback від identity. -- Scope: `group-mentions` (за замовчуванням), `group-all`, `direct`, `all`. -- `removeAckAfterReply`: прибирає ack після відповіді в Slack, Discord і Telegram. -- `messages.statusReactions.enabled`: вмикає реакції статусу життєвого циклу в Slack, Discord і Telegram. - У Slack і Discord відсутнє значення зберігає реакції статусу увімкненими, коли активні ack reactions. - У Telegram встановіть його явно в `true`, щоб увімкнути реакції статусу життєвого циклу. +- Порядок розв’язання: акаунт → канал → `messages.ackReaction` → fallback ідентичності. +- Scope: `group-mentions` (default), `group-all`, `direct`, `all`. +- `removeAckAfterReply`: видаляє ack після reply у Slack, Discord і Telegram. +- `messages.statusReactions.enabled`: вмикає lifecycle status reactions у Slack, Discord і Telegram. + У Slack і Discord, якщо параметр не встановлено, status reactions залишаються увімкненими, коли активні ack reactions. + У Telegram задайте його явно як `true`, щоб увімкнути lifecycle status reactions. ### Inbound debounce -Об'єднує швидкі текстові повідомлення від того самого відправника в один хід агента. Медіа/вкладення скидають буфер одразу. Керівні команди обходять debounce. +Об’єднує швидкі текстові повідомлення від того самого відправника в один agent turn. Media/attachments скидаються негайно. Control commands обходять debouncing. ### TTS (text-to-speech) @@ -1860,18 +1860,18 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр } ``` -- `auto` керує auto-TTS. `/tts off|always|inbound|tagged` перевизначає це для сесії. +- `auto` керує auto-TTS. `/tts off|always|inbound|tagged` перевизначає значення для кожної session. - `summaryModel` перевизначає `agents.defaults.model.primary` для auto-summary. -- `modelOverrides` увімкнено за замовчуванням; `modelOverrides.allowProvider` за замовчуванням дорівнює `false` (opt-in). -- API-ключі використовують резервні значення `ELEVENLABS_API_KEY`/`XI_API_KEY` і `OPENAI_API_KEY`. -- `openai.baseUrl` перевизначає endpoint OpenAI TTS. Порядок визначення: конфігурація, потім `OPENAI_TTS_BASE_URL`, потім `https://api.openai.com/v1`. -- Коли `openai.baseUrl` вказує на endpoint, відмінний від OpenAI, OpenClaw трактує його як OpenAI-сумісний TTS-сервер і послаблює перевірку моделі/голосу. +- `modelOverrides` увімкнено за замовчуванням; `modelOverrides.allowProvider` за замовчуванням дорівнює `false` (потрібне явне вмикання). +- API keys використовують fallback до `ELEVENLABS_API_KEY`/`XI_API_KEY` і `OPENAI_API_KEY`. +- `openai.baseUrl` перевизначає endpoint OpenAI TTS. Порядок розв’язання: конфігурація, потім `OPENAI_TTS_BASE_URL`, потім `https://api.openai.com/v1`. +- Коли `openai.baseUrl` вказує на endpoint, що не належить OpenAI, OpenClaw трактує його як OpenAI-compatible TTS server і послаблює перевірку model/voice. --- ## Talk -Типові значення для режиму Talk (macOS/iOS/Android). +Defaults для режиму Talk (macOS/iOS/Android). ```json5 { @@ -1895,13 +1895,13 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр } ``` -- `talk.provider` має відповідати ключу в `talk.providers`, коли налаштовано кілька постачальників Talk. -- Застарілі плоскі ключі Talk (`talk.voiceId`, `talk.voiceAliases`, `talk.modelId`, `talk.outputFormat`, `talk.apiKey`) сумісні лише для сумісності та автоматично переносяться в `talk.providers.`. -- Voice ID використовують резервні значення `ELEVENLABS_VOICE_ID` або `SAG_VOICE_ID`. -- `providers.*.apiKey` приймає прості текстові рядки або об'єкти SecretRef. -- Резервне значення `ELEVENLABS_API_KEY` застосовується лише тоді, коли API-ключ Talk не налаштовано. +- `talk.provider` має збігатися з ключем у `talk.providers`, коли налаштовано кілька Talk providers. +- Legacy flat ключі Talk (`talk.voiceId`, `talk.voiceAliases`, `talk.modelId`, `talk.outputFormat`, `talk.apiKey`) підтримуються лише для сумісності й автоматично мігруються в `talk.providers.`. +- Для Voice ID fallback — `ELEVENLABS_VOICE_ID` або `SAG_VOICE_ID`. +- `providers.*.apiKey` приймає прості текстові рядки або об’єкти SecretRef. +- Fallback `ELEVENLABS_API_KEY` застосовується лише коли не налаштовано API key для Talk. - `providers.*.voiceAliases` дозволяє директивам Talk використовувати дружні імена. -- `silenceTimeoutMs` керує тим, скільки Talk mode чекає після тиші користувача перед надсиланням транскрипту. Якщо не встановлено, зберігається типове вікно паузи платформи (`700 мс на macOS і Android, 900 мс на iOS`). +- `silenceTimeoutMs` визначає, скільки режим Talk чекатиме після тиші користувача перед надсиланням transcript. Якщо не встановлено, зберігається стандартне вікно паузи для платформи (`700 ms на macOS і Android, 900 ms на iOS`). --- @@ -1909,37 +1909,37 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр ### Профілі інструментів -`tools.profile` задає базовий список дозволів перед `tools.allow`/`tools.deny`: +`tools.profile` задає базовий allowlist перед `tools.allow`/`tools.deny`: -Локальний онбординг за замовчуванням встановлює новим локальним конфігураціям `tools.profile: "coding"`, якщо значення не задано (наявні явні профілі зберігаються). +Локальний onboarding за замовчуванням встановлює `tools.profile: "coding"` для нових локальних конфігурацій, якщо значення не задано (наявні явні профілі зберігаються). -| Профіль | Включає | -| ------------ | ------------------------------------------------------------------------------------------------------------------------------- | -| `minimal` | лише `session_status` | -| `coding` | `group:fs`, `group:runtime`, `group:web`, `group:sessions`, `group:memory`, `cron`, `image`, `image_generate`, `video_generate` | -| `messaging` | `group:messaging`, `sessions_list`, `sessions_history`, `sessions_send`, `session_status` | -| `full` | Без обмежень (те саме, що не встановлено) | +| Профіль | Містить | +| ----------- | ------------------------------------------------------------------------------------------------------------------------------- | +| `minimal` | лише `session_status` | +| `coding` | `group:fs`, `group:runtime`, `group:web`, `group:sessions`, `group:memory`, `cron`, `image`, `image_generate`, `video_generate` | +| `messaging` | `group:messaging`, `sessions_list`, `sessions_history`, `sessions_send`, `session_status` | +| `full` | Без обмежень (те саме, що не задано) | ### Групи інструментів -| Група | Інструменти | -| ------------------ | ---------------------------------------------------------------------------------------------------------------------- | -| `group:runtime` | `exec`, `process`, `code_execution` (`bash` приймається як alias для `exec`) | -| `group:fs` | `read`, `write`, `edit`, `apply_patch` | -| `group:sessions` | `sessions_list`, `sessions_history`, `sessions_send`, `sessions_spawn`, `sessions_yield`, `subagents`, `session_status` | -| `group:memory` | `memory_search`, `memory_get` | -| `group:web` | `web_search`, `x_search`, `web_fetch` | -| `group:ui` | `browser`, `canvas` | -| `group:automation` | `cron`, `gateway` | -| `group:messaging` | `message` | -| `group:nodes` | `nodes` | -| `group:agents` | `agents_list` | -| `group:media` | `image`, `image_generate`, `video_generate`, `tts` | -| `group:openclaw` | Усі вбудовані інструменти (без provider plugins) | +| Група | Інструменти | +| ------------------ | ---------------------------------------------------------------------------------------------------------------------------- | +| `group:runtime` | `exec`, `process`, `code_execution` (`bash` приймається як alias для `exec`) | +| `group:fs` | `read`, `write`, `edit`, `apply_patch` | +| `group:sessions` | `sessions_list`, `sessions_history`, `sessions_send`, `sessions_spawn`, `sessions_yield`, `subagents`, `session_status` | +| `group:memory` | `memory_search`, `memory_get` | +| `group:web` | `web_search`, `x_search`, `web_fetch` | +| `group:ui` | `browser`, `canvas` | +| `group:automation` | `cron`, `gateway` | +| `group:messaging` | `message` | +| `group:nodes` | `nodes` | +| `group:agents` | `agents_list` | +| `group:media` | `image`, `image_generate`, `video_generate`, `tts` | +| `group:openclaw` | Усі вбудовані інструменти (не включає provider plugins) | ### `tools.allow` / `tools.deny` -Глобальна політика allow/deny для інструментів (deny перемагає). Нечутлива до регістру, підтримує wildcard-и `*`. Застосовується навіть тоді, коли Docker sandbox вимкнений. +Глобальна політика allow/deny для інструментів (deny має пріоритет). Нечутлива до регістру, підтримує wildcard `*`. Застосовується, навіть коли sandbox Docker вимкнено. ```json5 { @@ -1949,7 +1949,7 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр ### `tools.byProvider` -Додатково обмежує інструменти для певних постачальників або моделей. Порядок: базовий профіль → профіль постачальника → allow/deny. +Додатково обмежує інструменти для конкретних providers або моделей. Порядок: базовий профіль → профіль provider → allow/deny. ```json5 { @@ -1965,7 +1965,7 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр ### `tools.elevated` -Керує elevated-доступом до exec поза sandbox: +Керує підвищеним доступом exec поза sandbox: ```json5 { @@ -1981,9 +1981,9 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр } ``` -- Перевизначення для окремого агента (`agents.list[].tools.elevated`) може лише додатково обмежувати. -- `/elevated on|off|ask|full` зберігає стан для кожної сесії; вбудовані директиви застосовуються лише до одного повідомлення. -- Elevated `exec` обходить sandbox і використовує налаштований шлях виходу (`gateway` за замовчуванням або `node`, коли ціль exec — `node`). +- Перевизначення для агента (`agents.list[].tools.elevated`) може лише ще більше обмежити. +- `/elevated on|off|ask|full` зберігає стан для кожної session; inline directives застосовуються до одного повідомлення. +- Elevated `exec` обходить sandboxing і використовує налаштований шлях escape (`gateway` за замовчуванням або `node`, коли exec target — `node`). ### `tools.exec` @@ -2007,8 +2007,8 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр ### `tools.loopDetection` -Перевірки безпеки для циклів інструментів **типово вимкнені**. Установіть `enabled: true`, щоб увімкнути виявлення. -Налаштування можна визначити глобально в `tools.loopDetection` і перевизначити для окремого агента в `agents.list[].tools.loopDetection`. +Перевірки безпеки циклів інструментів **вимкнені за замовчуванням**. Щоб увімкнути виявлення, задайте `enabled: true`. +Налаштування можна визначати глобально в `tools.loopDetection` і перевизначати для кожного агента в `agents.list[].tools.loopDetection`. ```json5 { @@ -2029,14 +2029,14 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр } ``` -- `historySize`: максимальний обсяг історії викликів інструментів, що зберігається для аналізу циклів. +- `historySize`: максимальна історія tool-call, що зберігається для аналізу циклів. - `warningThreshold`: поріг повторюваного шаблону без прогресу для попереджень. - `criticalThreshold`: вищий поріг повторення для блокування критичних циклів. - `globalCircuitBreakerThreshold`: жорсткий поріг зупинки для будь-якого запуску без прогресу. - `detectors.genericRepeat`: попереджати про повторні виклики того самого інструмента з тими самими аргументами. -- `detectors.knownPollNoProgress`: попереджати/блокувати відомі poll-інструменти (`process.poll`, `command_status` тощо). -- `detectors.pingPong`: попереджати/блокувати чергування пар без прогресу. -- Якщо `warningThreshold >= criticalThreshold` або `criticalThreshold >= globalCircuitBreakerThreshold`, перевірка не проходить. +- `detectors.knownPollNoProgress`: попереджати/блокувати відомі poll tools без прогресу (`process.poll`, `command_status` тощо). +- `detectors.pingPong`: попереджати/блокувати шаблони чергування пар без прогресу. +- Якщо `warningThreshold >= criticalThreshold` або `criticalThreshold >= globalCircuitBreakerThreshold`, перевірка валідації завершується помилкою. ### `tools.web` @@ -2046,14 +2046,14 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр web: { search: { enabled: true, - apiKey: "brave_api_key", // або BRAVE_API_KEY з env + apiKey: "brave_api_key", // або BRAVE_API_KEY env maxResults: 5, timeoutSeconds: 30, cacheTtlMinutes: 15, }, fetch: { enabled: true, - provider: "firecrawl", // необов'язково; опустіть для auto-detect + provider: "firecrawl", // необов’язково; пропустіть для auto-detect maxChars: 50000, maxCharsCap: 50000, maxResponseBytes: 2000000, @@ -2070,7 +2070,7 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр ### `tools.media` -Налаштовує розуміння вхідних медіа (зображення/аудіо/відео): +Налаштовує розуміння вхідних media (image/audio/video): ```json5 { @@ -2099,26 +2099,26 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр } ``` - + -**Запис постачальника** (`type: "provider"` або опущено): +**Запис provider** (`type: "provider"` або пропущено): -- `provider`: ID API-постачальника (`openai`, `anthropic`, `google`/`gemini`, `groq` тощо) -- `model`: перевизначення ID моделі +- `provider`: API provider id (`openai`, `anthropic`, `google`/`gemini`, `groq` тощо) +- `model`: перевизначення id моделі - `profile` / `preferredProfile`: вибір профілю `auth-profiles.json` -**CLI-запис** (`type: "cli"`): +**Запис CLI** (`type: "cli"`): - `command`: виконуваний файл -- `args`: шаблонізовані аргументи (підтримуються `{{MediaPath}}`, `{{Prompt}}`, `{{MaxChars}}` тощо) +- `args`: параметризовані args (підтримує `{{MediaPath}}`, `{{Prompt}}`, `{{MaxChars}}` тощо) **Спільні поля:** -- `capabilities`: необов'язковий список (`image`, `audio`, `video`). За замовчуванням: `openai`/`anthropic`/`minimax` → image, `google` → image+audio+video, `groq` → audio. -- `prompt`, `maxChars`, `maxBytes`, `timeoutSeconds`, `language`: перевизначення для окремого запису. -- У разі помилки використовується наступний запис. +- `capabilities`: необов’язковий список (`image`, `audio`, `video`). Defaults: `openai`/`anthropic`/`minimax` → image, `google` → image+audio+video, `groq` → audio. +- `prompt`, `maxChars`, `maxBytes`, `timeoutSeconds`, `language`: перевизначення для конкретного запису. +- У разі помилок використовується наступний запис. -Автентифікація постачальника йде стандартним порядком: `auth-profiles.json` → env vars → `models.providers.*.apiKey`. +Автентифікація provider follows standard order: `auth-profiles.json` → env vars → `models.providers.*.apiKey`. @@ -2137,9 +2137,9 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр ### `tools.sessions` -Керує тим, які сесії можна вибирати через session tools (`sessions_list`, `sessions_history`, `sessions_send`). +Керує тим, які sessions можуть бути цілями для session tools (`sessions_list`, `sessions_history`, `sessions_send`). -За замовчуванням: `tree` (поточна сесія + сесії, породжені нею, наприклад subagents). +Default: `tree` (поточна session + sessions, породжені нею, наприклад subagents). ```json5 { @@ -2154,26 +2154,26 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр Примітки: -- `self`: лише поточний ключ сесії. -- `tree`: поточна сесія + сесії, породжені поточною сесією (subagents). -- `agent`: будь-яка сесія, що належить поточному ID агента (може включати інших користувачів, якщо ви використовуєте per-sender sessions під одним ID агента). -- `all`: будь-яка сесія. Для націлювання між агентами все ще потрібен `tools.agentToAgent`. -- Притискання sandbox: коли поточна сесія працює в sandbox і `agents.defaults.sandbox.sessionToolsVisibility="spawned"`, видимість примусово встановлюється в `tree`, навіть якщо `tools.sessions.visibility="all"`. +- `self`: лише поточний session key. +- `tree`: поточна session + sessions, породжені поточною session (subagents). +- `agent`: будь-яка session, що належить поточному agent id (може включати інших користувачів, якщо ви запускаєте per-sender sessions під тим самим agent id). +- `all`: будь-яка session. Націлення між агентами все одно потребує `tools.agentToAgent`. +- Sandbox clamp: коли поточна session працює в sandbox і `agents.defaults.sandbox.sessionToolsVisibility="spawned"`, видимість примусово встановлюється в `tree`, навіть якщо `tools.sessions.visibility="all"`. ### `tools.sessions_spawn` -Керує підтримкою вбудованих вкладень для `sessions_spawn`. +Керує підтримкою inline attachments для `sessions_spawn`. ```json5 { tools: { sessions_spawn: { attachments: { - enabled: false, // opt-in: установіть true, щоб дозволити вбудовані файлові вкладення - maxTotalBytes: 5242880, // 5 МБ сумарно для всіх файлів + enabled: false, // opt-in: установіть true, щоб дозволити inline file attachments + maxTotalBytes: 5242880, // 5 MB сумарно для всіх файлів maxFiles: 50, - maxFileBytes: 1048576, // 1 МБ на файл - retainOnSessionKeep: false, // зберігати вкладення, коли cleanup="keep" + maxFileBytes: 1048576, // 1 MB на файл + retainOnSessionKeep: false, // зберігати attachments, коли cleanup="keep" }, }, }, @@ -2182,16 +2182,16 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр Примітки: -- Вкладення підтримуються лише для `runtime: "subagent"`. ACP runtime їх відхиляє. -- Файли матеріалізуються в дочірньому workspace у `.openclaw/attachments//` з `.manifest.json`. -- Вміст вкладень автоматично редагується під час збереження transcript. -- Входи Base64 перевіряються за строгими правилами алфавіту/вирівнювання та попереднім захистом розміру до декодування. +- Attachments підтримуються лише для `runtime: "subagent"`. Runtime ACP відхиляє їх. +- Файли матеріалізуються в child workspace у `.openclaw/attachments//` разом із `.manifest.json`. +- Вміст attachment автоматично редагується з transcript persistence. +- Base64 inputs проходять перевірку за суворими правилами alphabet/padding і з перевіркою розміру до декодування. - Права файлів: `0700` для каталогів і `0600` для файлів. -- Очищення слідує політиці `cleanup`: `delete` завжди видаляє вкладення; `keep` зберігає їх лише тоді, коли `retainOnSessionKeep: true`. +- Очищення дотримується політики `cleanup`: `delete` завжди видаляє attachments; `keep` зберігає їх лише коли `retainOnSessionKeep: true`. ### `tools.experimental` -Експериментальні прапори вбудованих інструментів. Типово вимкнені, якщо не застосовується правило auto-enable, специфічне для runtime. +Експериментальні прапори вбудованих інструментів. За замовчуванням вимкнені, якщо не діє auto-enable rule, специфічне для runtime. ```json5 { @@ -2206,8 +2206,8 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр Примітки: - `planTool`: вмикає структурований інструмент `update_plan` для відстеження нетривіальної багатокрокової роботи. -- За замовчуванням: `false` для постачальників, відмінних від OpenAI. OpenAI і OpenAI Codex автоматично вмикають його. -- Коли він увімкнений, системний prompt також додає інструкції щодо використання, щоб модель застосовувала його лише для суттєвої роботи й підтримувала не більше одного кроку `in_progress`. +- Default: `false` для не-OpenAI providers. OpenAI і OpenAI Codex runs вмикають його автоматично. +- Коли інструмент увімкнено, system prompt також додає підказки щодо використання, щоб модель застосовувала його лише для суттєвої роботи й підтримувала не більше одного кроку `in_progress`. ### `agents.defaults.subagents` @@ -2227,21 +2227,21 @@ scripts/sandbox-browser-setup.sh # необов'язковий образ бр } ``` -- `model`: типова модель для породжених sub-agent. Якщо не вказано, sub-agent успадковують модель викликача. -- `allowAgents`: типовий список дозволених ID цільових агентів для `sessions_spawn`, коли агент-запитувач не задає власний `subagents.allowAgents` (`["*"]` = будь-який; за замовчуванням: лише той самий агент). -- `runTimeoutSeconds`: типовий тайм-аут (секунди) для `sessions_spawn`, коли виклик інструмента не передає `runTimeoutSeconds`. `0` означає без тайм-ауту. +- `model`: default model для spawned sub-agents. Якщо параметр пропущено, sub-agents успадковують model викликача. +- `allowAgents`: default allowlist цільових agent ids для `sessions_spawn`, коли агент-запитувач не задає власний `subagents.allowAgents` (`["*"]` = будь-який; default: лише той самий агент). +- `runTimeoutSeconds`: default timeout (секунди) для `sessions_spawn`, коли у виклику інструмента пропущено `runTimeoutSeconds`. `0` означає без timeout. - Політика інструментів для subagent: `tools.subagents.tools.allow` / `tools.subagents.tools.deny`. --- -## Власні постачальники та base URL +## Користувацькі providers і base URLs -OpenClaw використовує вбудований каталог моделей. Додавайте власних постачальників через `models.providers` у конфігурації або `~/.openclaw/agents//agent/models.json`. +OpenClaw використовує вбудований каталог моделей. Додавайте користувацьких providers через `models.providers` у конфігурації або `~/.openclaw/agents//agent/models.json`. ```json5 { models: { - mode: "merge", // merge (за замовчуванням) | replace + mode: "merge", // merge (default) | replace providers: { "custom-proxy": { baseUrl: "http://localhost:4000/v1", @@ -2265,48 +2265,48 @@ OpenClaw використовує вбудований каталог модел } ``` -- Використовуйте `authHeader: true` + `headers` для нестандартних потреб автентифікації. -- Перевизначайте корінь конфігурації агента через `OPENCLAW_AGENT_DIR` (або `PI_CODING_AGENT_DIR`, застарілий alias env variable). -- Пріоритет злиття для відповідних ID постачальників: - - Непорожні значення `baseUrl` в `models.json` агента мають пріоритет. - - Непорожні значення `apiKey` агента мають пріоритет лише тоді, коли цей постачальник не керується через SecretRef у поточному контексті config/auth-profile. - - Значення `apiKey` постачальника, керовані через SecretRef, оновлюються з маркерів джерела (`ENV_VAR_NAME` для env refs, `secretref-managed` для file/exec refs) замість збереження визначених секретів. - - Значення заголовків постачальника, керовані через SecretRef, оновлюються з маркерів джерела (`secretref-env:ENV_VAR_NAME` для env refs, `secretref-managed` для file/exec refs). - - Порожні або відсутні `apiKey`/`baseUrl` агента повертаються до `models.providers` у конфігурації. - - Для відповідних моделей `contextWindow`/`maxTokens` використовують більше значення між явною конфігурацією та неявними значеннями каталогу. - - Для відповідних моделей `contextTokens` зберігає явний runtime cap, якщо він заданий; використовуйте це, щоб обмежити ефективний контекст без зміни нативних метаданих моделі. +- Використовуйте `authHeader: true` + `headers` для нестандартних вимог автентифікації. +- Перевизначте корінь конфігурації агента через `OPENCLAW_AGENT_DIR` (або `PI_CODING_AGENT_DIR`, застарілий alias environment variable). +- Пріоритет злиття для відповідних provider IDs: + - Непорожні значення `baseUrl` в agent `models.json` мають пріоритет. + - Непорожні значення `apiKey` агента мають пріоритет лише тоді, коли цей provider не керується через SecretRef у поточному контексті config/auth-profile. + - Для provider `apiKey`, керованих SecretRef, значення оновлюються з source markers (`ENV_VAR_NAME` для env refs, `secretref-managed` для file/exec refs), а не шляхом збереження розв’язаних секретів. + - Для значень заголовків provider, керованих SecretRef, оновлення також відбувається з source markers (`secretref-env:ENV_VAR_NAME` для env refs, `secretref-managed` для file/exec refs). + - Порожні або відсутні `apiKey`/`baseUrl` в agent використовують fallback до `models.providers` у конфігурації. + - Для matching models `contextWindow`/`maxTokens` використовується вище значення між явною конфігурацією та неявними значеннями каталогу. + - Для matching model `contextTokens` зберігається явне runtime cap, якщо воно задане; використовуйте його, щоб обмежити ефективний контекст без зміни native metadata моделі. - Використовуйте `models.mode: "replace"`, коли хочете, щоб конфігурація повністю переписала `models.json`. - - Збереження маркерів визначається джерелом: маркери записуються з активного знімка конфігурації джерела (до визначення), а не з визначених секретних значень середовища виконання. + - Збереження marker є source-authoritative: markers записуються з активного source config snapshot (до розв’язання), а не з розв’язаних runtime secret values. -### Деталі полів постачальника +### Деталі полів provider -- `models.mode`: поведінка каталогу постачальників (`merge` або `replace`). -- `models.providers`: карта власних постачальників, ключем якої є ID постачальника. -- `models.providers.*.api`: адаптер запитів (`openai-completions`, `openai-responses`, `anthropic-messages`, `google-generative-ai` тощо). -- `models.providers.*.apiKey`: облікові дані постачальника (краще через SecretRef/env substitution). +- `models.mode`: поведінка каталогу provider (`merge` або `replace`). +- `models.providers`: мапа користувацьких providers, ключована за provider id. +- `models.providers.*.api`: adapter запиту (`openai-completions`, `openai-responses`, `anthropic-messages`, `google-generative-ai` тощо). +- `models.providers.*.apiKey`: credential постачальника (віддавайте перевагу SecretRef/env substitution). - `models.providers.*.auth`: стратегія автентифікації (`api-key`, `token`, `oauth`, `aws-sdk`). -- `models.providers.*.injectNumCtxForOpenAICompat`: для Ollama + `openai-completions` вставляє `options.num_ctx` у запити (за замовчуванням: `true`). -- `models.providers.*.authHeader`: примусово передавати облікові дані в заголовку `Authorization`, коли це потрібно. -- `models.providers.*.baseUrl`: базовий URL API upstream. +- `models.providers.*.injectNumCtxForOpenAICompat`: для Ollama + `openai-completions` інжектувати `options.num_ctx` у запити (default: `true`). +- `models.providers.*.authHeader`: примусово передавати credential у заголовку `Authorization`, коли це потрібно. +- `models.providers.*.baseUrl`: базова URL-адреса upstream API. - `models.providers.*.headers`: додаткові статичні заголовки для proxy/tenant routing. -- `models.providers.*.request`: транспортні перевизначення для HTTP-запитів model-provider. - - `request.headers`: додаткові заголовки (зливаються з типовими значеннями постачальника). Значення приймають SecretRef. - - `request.auth`: перевизначення стратегії автентифікації. Режими: `"provider-default"` (використовувати вбудовану автентифікацію постачальника), `"authorization-bearer"` (з `token`), `"header"` (з `headerName`, `value`, необов'язковим `prefix`). - - `request.proxy`: перевизначення HTTP-проксі. Режими: `"env-proxy"` (використовувати env vars `HTTP_PROXY`/`HTTPS_PROXY`), `"explicit-proxy"` (з `url`). Обидва режими приймають необов'язковий підоб'єкт `tls`. - - `request.tls`: перевизначення TLS для прямих з'єднань. Поля: `ca`, `cert`, `key`, `passphrase` (усі приймають SecretRef), `serverName`, `insecureSkipVerify`. +- `models.providers.*.request`: перевизначення transport для HTTP-запитів model-provider. + - `request.headers`: додаткові заголовки (зливаються з defaults provider). Значення приймають SecretRef. + - `request.auth`: перевизначення стратегії auth. Режими: `"provider-default"` (використовувати вбудовану auth постачальника), `"authorization-bearer"` (з `token`), `"header"` (з `headerName`, `value`, необов’язковим `prefix`). + - `request.proxy`: перевизначення HTTP proxy. Режими: `"env-proxy"` (використовувати env vars `HTTP_PROXY`/`HTTPS_PROXY`), `"explicit-proxy"` (з `url`). Обидва режими приймають необов’язковий підоб’єкт `tls`. + - `request.tls`: перевизначення TLS для прямих з’єднань. Поля: `ca`, `cert`, `key`, `passphrase` (усі приймають SecretRef), `serverName`, `insecureSkipVerify`. - `models.providers.*.models`: явні записи каталогу моделей постачальника. -- `models.providers.*.models.*.contextWindow`: метадані нативного контекстного вікна моделі. -- `models.providers.*.models.*.contextTokens`: необов'язковий runtime cap для контексту. Використовуйте, якщо вам потрібен менший ефективний бюджет контексту, ніж нативне `contextWindow` моделі. -- `models.providers.*.models.*.compat.supportsDeveloperRole`: необов'язкова підказка сумісності. Для `api: "openai-completions"` з непорожнім ненативним `baseUrl` (хост не `api.openai.com`) OpenClaw примусово встановлює це значення в `false` під час виконання. Порожній/відсутній `baseUrl` зберігає типову поведінку OpenAI. -- `plugins.entries.amazon-bedrock.config.discovery`: корінь налаштувань auto-discovery для Bedrock. -- `plugins.entries.amazon-bedrock.config.discovery.enabled`: увімкнути/вимкнути неявне виявлення. -- `plugins.entries.amazon-bedrock.config.discovery.region`: регіон AWS для виявлення. -- `plugins.entries.amazon-bedrock.config.discovery.providerFilter`: необов'язковий фільтр provider-id для цільового виявлення. -- `plugins.entries.amazon-bedrock.config.discovery.refreshInterval`: інтервал опитування для оновлення виявлення. -- `plugins.entries.amazon-bedrock.config.discovery.defaultContextWindow`: резервне контекстне вікно для виявлених моделей. -- `plugins.entries.amazon-bedrock.config.discovery.defaultMaxTokens`: резервна максимальна кількість вихідних токенів для виявлених моделей. +- `models.providers.*.models.*.contextWindow`: metadata native context window моделі. +- `models.providers.*.models.*.contextTokens`: необов’язкова runtime cap для контексту. Використовуйте це, коли хочете менший ефективний бюджет контексту, ніж native `contextWindow` моделі. +- `models.providers.*.models.*.compat.supportsDeveloperRole`: необов’язкова compatibility hint. Для `api: "openai-completions"` із непорожнім ненативним `baseUrl` (host не `api.openai.com`) OpenClaw примусово встановлює це в `false` під час runtime. Порожній/пропущений `baseUrl` зберігає стандартну поведінку OpenAI. +- `plugins.entries.amazon-bedrock.config.discovery`: кореневі налаштування auto-discovery Bedrock. +- `plugins.entries.amazon-bedrock.config.discovery.enabled`: увімкнути/вимкнути неявне discovery. +- `plugins.entries.amazon-bedrock.config.discovery.region`: регіон AWS для discovery. +- `plugins.entries.amazon-bedrock.config.discovery.providerFilter`: необов’язковий фільтр provider-id для цільового discovery. +- `plugins.entries.amazon-bedrock.config.discovery.refreshInterval`: інтервал опитування для оновлення discovery. +- `plugins.entries.amazon-bedrock.config.discovery.defaultContextWindow`: fallback context window для виявлених моделей. +- `plugins.entries.amazon-bedrock.config.discovery.defaultMaxTokens`: fallback max output tokens для виявлених моделей. -### Приклади постачальників +### Приклади provider @@ -2342,7 +2342,7 @@ OpenClaw використовує вбудований каталог модел } ``` -Використовуйте `cerebras/zai-glm-4.7` для Cerebras; `zai/glm-4.7` для прямого Z.AI. +Використовуйте `cerebras/zai-glm-4.7` для Cerebras; `zai/glm-4.7` — для прямого Z.AI. @@ -2376,11 +2376,11 @@ OpenClaw використовує вбудований каталог модел } ``` -Установіть `ZAI_API_KEY`. `z.ai/*` і `z-ai/*` приймаються як alias-и. Скорочення: `openclaw onboard --auth-choice zai-api-key`. +Установіть `ZAI_API_KEY`. `z.ai/*` і `z-ai/*` приймаються як aliases. Скорочення: `openclaw onboard --auth-choice zai-api-key`. - Загальний endpoint: `https://api.z.ai/api/paas/v4` -- Endpoint для кодування (за замовчуванням): `https://api.z.ai/api/coding/paas/v4` -- Для загального endpoint визначте власного постачальника з перевизначенням base URL. +- Endpoint для кодування (default): `https://api.z.ai/api/coding/paas/v4` +- Для загального endpoint визначте користувацького provider із перевизначенням base URL. @@ -2419,11 +2419,11 @@ OpenClaw використовує вбудований каталог модел } ``` -Для китайського endpoint: `baseUrl: "https://api.moonshot.cn/v1"` або `openclaw onboard --auth-choice moonshot-api-key-cn`. +Для endpoint у Китаї: `baseUrl: "https://api.moonshot.cn/v1"` або `openclaw onboard --auth-choice moonshot-api-key-cn`. -Нативні endpoints Moonshot рекламують сумісність використання streaming на спільному -транспорті `openai-completions`, і OpenClaw тепер визначає це за можливостями endpoint-а, -а не лише за вбудованим provider id. +Native endpoints Moonshot заявляють сумісність із використанням streaming на спільному +транспорті `openai-completions`, і OpenClaw тепер визначає це за +можливостями endpoint, а не лише за id вбудованого provider. @@ -2441,11 +2441,11 @@ OpenClaw використовує вбудований каталог модел } ``` -Anthropic-сумісний, вбудований постачальник. Скорочення: `openclaw onboard --auth-choice kimi-code-api-key`. +Сумісний з Anthropic, вбудований provider. Скорочення: `openclaw onboard --auth-choice kimi-code-api-key`. - + ```json5 { @@ -2480,11 +2480,11 @@ Anthropic-сумісний, вбудований постачальник. Ск } ``` -Base URL має не містити `/v1` (клієнт Anthropic додає його сам). Скорочення: `openclaw onboard --auth-choice synthetic-api-key`. +Base URL має бути без `/v1` (клієнт Anthropic додає його сам). Скорочення: `openclaw onboard --auth-choice synthetic-api-key`. - + ```json5 { @@ -2523,9 +2523,9 @@ Base URL має не містити `/v1` (клієнт Anthropic додає й Установіть `MINIMAX_API_KEY`. Скорочення: `openclaw onboard --auth-choice minimax-global-api` або `openclaw onboard --auth-choice minimax-cn-api`. -Каталог моделей тепер за замовчуванням містить лише M2.7. -На Anthropic-сумісному шляху streaming OpenClaw типово вимикає thinking MiniMax, -якщо ви явно самі не встановите `thinking`. `/fast on` або +Тепер каталог моделей за замовчуванням використовує лише M2.7. +На Anthropic-compatible streaming path OpenClaw вимикає thinking MiniMax +за замовчуванням, якщо ви самі явно не встановите `thinking`. `/fast on` або `params.fastMode: true` переписує `MiniMax-M2.7` на `MiniMax-M2.7-highspeed`. @@ -2533,7 +2533,7 @@ Base URL має не містити `/v1` (клієнт Anthropic додає й -Див. [Local Models](/uk/gateway/local-models). Коротко: запускайте велику локальну модель через LM Studio Responses API на серйозному обладнанні; залишайте хостовані моделі об'єднаними як резервний варіант. +Див. [Local Models](/uk/gateway/local-models). Коротко: запускайте велику локальну модель через LM Studio Responses API на потужному обладнанні; залишайте hosted models злитими для fallback. @@ -2564,14 +2564,14 @@ Base URL має не містити `/v1` (клієнт Anthropic додає й } ``` -- `allowBundled`: необов'язковий список дозволених лише для комплектних Skills (керовані/workspace Skills не зачіпаються). +- `allowBundled`: необов’язковий allowlist лише для bundled Skills (керовані/workspace Skills не зачіпає). - `load.extraDirs`: додаткові спільні корені Skills (найнижчий пріоритет). -- `install.preferBrew`: якщо true, надавати перевагу інсталяторам Homebrew, коли - `brew` доступний, перед переходом до інших типів інсталяторів. -- `install.nodeManager`: пріоритет Node-інсталятора для специфікацій `metadata.openclaw.install` +- `install.preferBrew`: коли true, віддає перевагу інсталяторам Homebrew, якщо + `brew` доступний, перш ніж переходити до інших типів інсталяторів. +- `install.nodeManager`: бажаний менеджер інсталяції node для специфікацій `metadata.openclaw.install` (`npm` | `pnpm` | `yarn` | `bun`). -- `entries..enabled: false` вимикає Skill, навіть якщо він комплектний/встановлений. -- `entries..apiKey`: зручне поле API-ключа для Skills, що оголошують основну env variable (простий текстовий рядок або об'єкт SecretRef). +- `entries..enabled: false` вимикає Skill, навіть якщо він bundled/installed. +- `entries..apiKey`: спрощене поле API key для Skills, які оголошують основну env variable (простий текстовий рядок або об’єкт SecretRef). --- @@ -2600,5 +2600,93 @@ Base URL має не містити `/v1` (клієнт Anthropic додає й ``` - Завантажуються з `~/.openclaw/extensions`, `/.openclaw/extensions` і `plugins.load.paths`. -- Виявлення приймає нативні plugins OpenClaw, а також сумісні пакети Codex і Claude, включно з пакетами Claude стандартного макета без manifest. -- **З \ No newline at end of file +- Discovery приймає native plugins OpenClaw, а також сумісні bundles Codex і Claude, включно з bundle Claude без manifest у стандартному layout. +- **Зміни конфігурації потребують restart gateway.** +- `allow`: необов’язковий allowlist (завантажуються лише вказані plugins). `deny` має пріоритет. +- `plugins.entries..apiKey`: спрощене plugin-level поле API key (коли це підтримується plugin). +- `plugins.entries..env`: мапа env vars у межах plugin. +- `plugins.entries..hooks.allowPromptInjection`: коли `false`, core блокує `before_prompt_build` і ігнорує поля зі зміною prompt із legacy `before_agent_start`, зберігаючи legacy `modelOverride` і `providerOverride`. Застосовується до native plugin hooks і підтримуваних директорій hooks, наданих bundles. +- `plugins.entries..subagent.allowModelOverride`: явно довіряти цьому plugin запитувати перевизначення `provider` і `model` для кожного запуску background subagent. +- `plugins.entries..subagent.allowedModels`: необов’язковий allowlist канонічних цілей `provider/model` для довірених перевизначень subagent. Використовуйте `"*"` лише тоді, коли свідомо хочете дозволити будь-яку модель. +- `plugins.entries..config`: об’єкт конфігурації, визначений plugin (валідується native OpenClaw plugin schema, коли вона доступна). +- `plugins.entries.firecrawl.config.webFetch`: налаштування постачальника web-fetch Firecrawl. + - `apiKey`: API key Firecrawl (приймає SecretRef). Використовує fallback до `plugins.entries.firecrawl.config.webSearch.apiKey`, legacy `tools.web.fetch.firecrawl.apiKey` або env var `FIRECRAWL_API_KEY`. + - `baseUrl`: базова URL-адреса API Firecrawl (default: `https://api.firecrawl.dev`). + - `onlyMainContent`: витягувати лише основний вміст сторінок (default: `true`). + - `maxAgeMs`: максимальний вік кешу в мілісекундах (default: `172800000` / 2 дні). + - `timeoutSeconds`: timeout запиту scrape у секундах (default: `60`). +- `plugins.entries.xai.config.xSearch`: налаштування xAI X Search (вебпошук Grok). + - `enabled`: увімкнути постачальника X Search. + - `model`: модель Grok для пошуку (наприклад `"grok-4-1-fast"`). +- `plugins.entries.memory-core.config.dreaming`: налаштування dreaming пам’яті (експериментально). Режими і пороги див. у [Dreaming](/uk/concepts/dreaming). + - `mode`: preset cadence для dreaming (`"off"`, `"core"`, `"rem"`, `"deep"`). Default: `"off"`. + - `cron`: необов’язкове перевизначення cron expression для розкладу dreaming. + - `timezone`: часовий пояс для оцінки розкладу (fallback до `agents.defaults.userTimezone`). + - `limit`: максимальна кількість кандидатів на просування за цикл. + - `minScore`: мінімальний поріг зваженого score для просування. + - `minRecallCount`: мінімальний поріг кількості recall. + - `minUniqueQueries`: мінімальна кількість різних запитів. + - `recencyHalfLifeDays`: кількість днів, за які recency score зменшується вдвічі. Default: `14`. + - `maxAgeDays`: необов’язковий максимальний вік daily note у днях, дозволений для просування. + - `verboseLogging`: виводити детальні dreaming logs для кожного запуску у звичайний потік log gateway. +- Увімкнені Claude bundle plugins також можуть додавати вбудовані Pi defaults із `settings.json`; OpenClaw застосовує їх як санітизовані agent settings, а не як сирі patches конфігурації OpenClaw. +- `plugins.slots.memory`: виберіть id активного plugin пам’яті або `"none"`, щоб вимкнути memory plugins. +- `plugins.slots.contextEngine`: виберіть id активного plugin context engine; default — `"legacy"`, якщо ви не встановили й не вибрали інший engine. +- `plugins.installs`: метадані інсталяції, керовані CLI, які використовує `openclaw plugins update`. + - Містить `source`, `spec`, `sourcePath`, `installPath`, `version`, `resolvedName`, `resolvedVersion`, `resolvedSpec`, `integrity`, `shasum`, `resolvedAt`, `installedAt`. + - Розглядайте `plugins.installs.*` як керований стан; віддавайте перевагу командам CLI, а не ручному редагуванню. + +Див. [Plugins](/uk/tools/plugin). + +--- + +## Browser + +```json5 +{ + browser: { + enabled: true, + evaluateEnabled: true, + defaultProfile: "user", + ssrfPolicy: { + dangerouslyAllowPrivateNetwork: true, // default trusted-network mode + // allowPrivateNetwork: true, // legacy alias + // hostnameAllowlist: ["*.example.com", "example.com"], + // allowedHostnames: ["localhost"], + }, + profiles: { + openclaw: { cdpPort: 18800, color: "#FF4500" }, + work: { cdpPort: 18801, color: "#0066CC" }, + user: { driver: "existing-session", attachOnly: true, color: "#00AA00" }, + brave: { + driver: "existing-session", + attachOnly: true, + userDataDir: "~/Library/Application Support/BraveSoftware/Brave-Browser", + color: "#FB542B", + }, + remote: { cdpUrl: "http://10.0.0.42:9222", color: "#00AA00" }, + }, + color: "#FF4500", + // headless: false, + // noSandbox: false, + // extraArgs: [], + // executablePath: "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser", + // attachOnly: false, + }, +} +``` + +- `evaluateEnabled: false` вимикає `act:evaluate` і `wait --fn`. +- `ssrfPolicy.dangerouslyAllowPrivateNetwork` за замовчуванням дорівнює `true`, якщо не встановлено (модель довіреної мережі). +- Установіть `ssrfPolicy.dangerouslyAllowPrivateNetwork: false` для суворої навігації browser лише по public endpoints. +- У суворому режимі endpoints remote CDP profile (`profiles.*.cdpUrl`) підпадають під ті самі обмеження private-network під час reachability/discovery checks. +- `ssrfPolicy.allowPrivateNetwork` залишається підтримуваним як legacy alias. +- У суворому режимі використовуйте `ssrfPolicy.hostnameAllowlist` і `ssrfPolicy.allowedHostnames` для явних винятків. +- Remote profiles доступні лише для attach (start/stop/reset вимкнено). +- `profiles.*.cdpUrl` приймає `http://`, `https://`, `ws://` і `wss://`. + Використовуйте HTTP(S), коли хочете, щоб OpenClaw виявив `/json/version`; використовуйте WS(S), + коли ваш provider дає вам прямий DevTools WebSocket URL. +- Профілі `existing-session` працюють лише на хості та використовують Chrome MCP замість CDP. +- Профілі `existing-session` можуть задавати `userDataDir`, щоб націлюватися на конкретний + профіль Chromium-based browser, наприклад Brave або Edge. +- Проф \ No newline at end of file