diff --git a/docs/uk/gateway/configuration-reference.md b/docs/uk/gateway/configuration-reference.md
index f63a0160d..937e71ba3 100644
--- a/docs/uk/gateway/configuration-reference.md
+++ b/docs/uk/gateway/configuration-reference.md
@@ -1,14 +1,14 @@
---
read_when:
- - Вам потрібна точна семантика полів конфігурації або значення за замовчуванням
+ - Вам потрібні точні семантики або значення за замовчуванням для конфігурації на рівні полів
- Ви перевіряєте блоки конфігурації каналу, моделі, gateway або інструментів
summary: Довідник конфігурації Gateway для основних ключів OpenClaw, значень за замовчуванням і посилань на окремі довідники підсистем
title: Довідник конфігурації
x-i18n:
- generated_at: "2026-04-08T06:34:59Z"
+ generated_at: "2026-04-08T19:05:31Z"
model: gpt-5.4
provider: openai
- source_hash: fd5f69050455e610fc7c825d95f546a16aa867b8a9c0d692a48de36419b0afc2
+ source_hash: a9d6d0c542b9874809491978fdcf8e1a7bb35a4873db56aa797963d03af4453c
source_path: gateway/configuration-reference.md
workflow: 15
---
@@ -17,19 +17,19 @@ x-i18n:
Основний довідник конфігурації для `~/.openclaw/openclaw.json`. Для огляду, орієнтованого на завдання, див. [Configuration](/uk/gateway/configuration).
-Ця сторінка охоплює основні поверхні конфігурації OpenClaw і містить посилання назовні, коли підсистема має власний глибший довідник. Вона **не** намагається вбудувати на одну сторінку кожен каталог команд, що належить каналу/плагіну, або кожен глибокий параметр memory/QMD.
+Ця сторінка охоплює основні поверхні конфігурації OpenClaw і містить посилання назовні, коли підсистема має власний глибший довідник. Вона **не** намагається вбудувати на одну сторінку кожен каталог команд, що належить каналу/плагіну, або кожен глибокий параметр пам’яті/QMD.
Джерело істини в коді:
-- `openclaw config schema` виводить актуальну JSON Schema, що використовується для валідації та Control UI, з об’єднаними метаданими bundled/plugin/channel, коли вони доступні
-- `config.schema.lookup` повертає один вузол схеми для шляху для інструментів детального перегляду
-- `pnpm config:docs:check` / `pnpm config:docs:gen` перевіряють хеш baseline конфігураційної документації щодо поточної поверхні схеми
+- `openclaw config schema` виводить актуальну JSON Schema, яка використовується для валідації та Control UI, із злитими метаданими bundled/plugin/channel, коли вони доступні
+- `config.schema.lookup` повертає один вузол схеми з областю шляху для інструментів деталізації
+- `pnpm config:docs:check` / `pnpm config:docs:gen` перевіряють baseline hash документації конфігурації відносно поточної поверхні схеми
Окремі глибокі довідники:
- [Memory configuration reference](/uk/reference/memory-config) для `agents.defaults.memorySearch.*`, `memory.qmd.*`, `memory.citations` і конфігурації dreaming у `plugins.entries.memory-core.config.dreaming`
-- [Slash Commands](/uk/tools/slash-commands) для поточного каталогу вбудованих + bundled команд
-- сторінки відповідних каналів/плагінів для командних поверхонь, специфічних для каналів
+- [Slash Commands](/uk/tools/slash-commands) для поточного каталогу built-in + bundled команд
+- сторінки власника каналу/плагіна для поверхонь команд, специфічних для каналу
Формат конфігурації — **JSON5** (дозволені коментарі + кінцеві коми). Усі поля необов’язкові — OpenClaw використовує безпечні значення за замовчуванням, якщо їх пропущено.
@@ -37,34 +37,34 @@ x-i18n:
## Канали
-Кожен канал запускається автоматично, коли існує його розділ конфігурації (якщо не задано `enabled: false`).
+Кожен канал запускається автоматично, коли існує його секція конфігурації (якщо не вказано `enabled: false`).
### Доступ до DM і груп
-Усі канали підтримують політики DM і політики груп:
+Усі канали підтримують політики DM і групові політики:
| Політика DM | Поведінка |
| ------------------- | -------------------------------------------------------------- |
-| `pairing` (типово) | Невідомі відправники отримують одноразовий код pairing; власник має схвалити |
-| `allowlist` | Лише відправники з `allowFrom` (або зі сховища paired allow) |
+| `pairing` (типово) | Невідомі відправники отримують одноразовий код pair; власник має схвалити |
+| `allowlist` | Лише відправники в `allowFrom` (або в paired allow store) |
| `open` | Дозволити всі вхідні DM (потрібно `allowFrom: ["*"]`) |
| `disabled` | Ігнорувати всі вхідні DM |
-| Політика груп | Поведінка |
+| Групова політика | Поведінка |
| --------------------- | ------------------------------------------------------ |
| `allowlist` (типово) | Лише групи, що відповідають налаштованому allowlist |
-| `open` | Обійти group allowlist-и (gating за згадкою все одно застосовується) |
-| `disabled` | Блокувати всі повідомлення груп/кімнат |
+| `open` | Обходить group allowlist-и (gating за згадками все ще застосовується) |
+| `disabled` | Блокує всі повідомлення груп/кімнат |
-`channels.defaults.groupPolicy` задає типове значення, коли `groupPolicy` постачальника не задано.
-Коди pairing діють 1 годину. Очікувальні запити DM pairing обмежені **3 на канал**.
-Якщо блок постачальника повністю відсутній (`channels.` відсутній), політика груп runtime повертається до `allowlist` (закрито за замовчуванням) із попередженням під час запуску.
+`channels.defaults.groupPolicy` задає значення за замовчуванням, коли `groupPolicy` провайдера не встановлено.
+Коди pair-ing спливають через 1 годину. Непідтверджені запити на DM pairing обмежені **3 на канал**.
+Якщо блок провайдера відсутній повністю (немає `channels.`), політика груп під час виконання повертається до `allowlist` (fail-closed) з попередженням під час запуску.
-### Перевизначення моделі для каналу
+### Перевизначення моделі для каналів
-Використовуйте `channels.modelByChannel`, щоб закріпити конкретні ідентифікатори каналів за моделлю. Значення приймають `provider/model` або налаштовані псевдоніми моделей. Відображення каналу застосовується, коли сеанс ще не має перевизначення моделі (наприклад, заданого через `/model`).
+Використовуйте `channels.modelByChannel`, щоб закріпити конкретні ID каналів за моделлю. Значення приймають `provider/model` або налаштовані псевдоніми моделей. Прив’язка каналу застосовується, коли в сесії ще немає перевизначення моделі (наприклад, встановленого через `/model`).
```json5
{
@@ -85,9 +85,9 @@ x-i18n:
}
```
-### Типові значення каналів і heartbeat
+### Значення каналів за замовчуванням і heartbeat
-Використовуйте `channels.defaults` для спільної політики груп і поведінки heartbeat у різних постачальників:
+Використовуйте `channels.defaults` для спільної поведінки group-policy і heartbeat між провайдерами:
```json5
{
@@ -105,15 +105,15 @@ x-i18n:
}
```
-- `channels.defaults.groupPolicy`: резервна політика груп, коли `groupPolicy` на рівні постачальника не задано.
-- `channels.defaults.contextVisibility`: типовий режим видимості додаткового контексту для всіх каналів. Значення: `all` (типово, включати весь контекст цитат/гілок/історії), `allowlist` (включати контекст лише від відправників з allowlist), `allowlist_quote` (як allowlist, але зберігати явний контекст цитати/відповіді). Перевизначення для каналу: `channels..contextVisibility`.
-- `channels.defaults.heartbeat.showOk`: включати статуси здорових каналів у вивід heartbeat.
-- `channels.defaults.heartbeat.showAlerts`: включати деградовані/помилкові статуси у вивід heartbeat.
-- `channels.defaults.heartbeat.useIndicator`: відображати компактний heartbeat у стилі індикатора.
+- `channels.defaults.groupPolicy`: запасна групова політика, коли `groupPolicy` на рівні провайдера не встановлено.
+- `channels.defaults.contextVisibility`: типовий режим видимості додаткового контексту для всіх каналів. Значення: `all` (типово, включати весь quoted/thread/history контекст), `allowlist` (включати контекст лише від allowlisted відправників), `allowlist_quote` (те саме, що allowlist, але зберігати явний контекст quote/reply). Перевизначення на рівні каналу: `channels..contextVisibility`.
+- `channels.defaults.heartbeat.showOk`: включати стани справних каналів у вивід heartbeat.
+- `channels.defaults.heartbeat.showAlerts`: включати стани з деградацією/помилками у вивід heartbeat.
+- `channels.defaults.heartbeat.useIndicator`: відображати компактний вивід heartbeat у стилі індикатора.
### WhatsApp
-WhatsApp працює через web channel gateway (Baileys Web). Він запускається автоматично, коли існує прив’язаний сеанс.
+WhatsApp працює через web channel gateway (`Baileys Web`). Він запускається автоматично, коли існує пов’язана сесія.
```json5
{
@@ -164,9 +164,9 @@ WhatsApp працює через web channel gateway (Baileys Web). Він за
}
```
-- Вихідні команди типово використовують обліковий запис `default`, якщо він є; інакше — перший налаштований account id (відсортовано).
-- Необов’язковий `channels.whatsapp.defaultAccount` перевизначає цей вибір типового облікового запису, якщо він збігається з налаштованим account id.
-- Застарілий single-account каталог автентифікації Baileys мігрується командою `openclaw doctor` до `whatsapp/default`.
+- Вихідні команди типово використовують обліковий запис `default`, якщо він є; інакше — перший налаштований id облікового запису (відсортований).
+- Необов’язковий `channels.whatsapp.defaultAccount` перевизначає цей вибір запасного облікового запису за замовчуванням, якщо він збігається з id налаштованого облікового запису.
+- Застарілий однообліковий Baileys auth dir мігрується `openclaw doctor` у `whatsapp/default`.
- Перевизначення на рівні облікового запису: `channels.whatsapp.accounts..sendReadReceipts`, `channels.whatsapp.accounts..dmPolicy`, `channels.whatsapp.accounts..allowFrom`.
@@ -185,24 +185,24 @@ WhatsApp працює через web channel gateway (Baileys Web). Він за
"*": { requireMention: true },
"-1001234567890": {
allowFrom: ["@admin"],
- systemPrompt: "Відповідай коротко.",
+ systemPrompt: "Keep answers brief.",
topics: {
"99": {
requireMention: false,
skills: ["search"],
- systemPrompt: "Тримайся теми.",
+ systemPrompt: "Stay on topic.",
},
},
},
},
customCommands: [
- { command: "backup", description: "Резервне копіювання Git" },
- { command: "generate", description: "Створити зображення" },
+ { command: "backup", description: "Git backup" },
+ { command: "generate", description: "Create an image" },
],
historyLimit: 50,
replyToMode: "first", // off | first | all | batched
linkPreview: true,
- streaming: "partial", // off | partial | block | progress (типово: off; явно вмикайте, щоб уникнути лімітів rate limit на preview-edit)
+ streaming: "partial", // off | partial | block | progress (типово: off; явно вмикайте, щоб уникати rate limits preview-edit)
actions: { reactions: true, sendMessage: true },
reactionNotifications: "own", // off | own | all
mediaMaxMb: 100,
@@ -225,12 +225,12 @@ WhatsApp працює через web channel gateway (Baileys Web). Він за
}
```
-- Токен бота: `channels.telegram.botToken` або `channels.telegram.tokenFile` (лише звичайний файл; symlink-и відхиляються), з `TELEGRAM_BOT_TOKEN` як резервним джерелом для типового облікового запису.
-- Необов’язковий `channels.telegram.defaultAccount` перевизначає вибір типового облікового запису, якщо він збігається з налаштованим account id.
-- У багатооблікових конфігураціях (2+ account id) задайте явне типове значення (`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).
-- Попередній перегляд stream у Telegram використовує `sendMessage` + `editMessageText` (працює в особистих і групових чатах).
+- Токен бота: `channels.telegram.botToken` або `channels.telegram.tokenFile` (лише звичайний файл; symlink відхиляються), з `TELEGRAM_BOT_TOKEN` як fallback для облікового запису за замовчуванням.
+- Необов’язковий `channels.telegram.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він збігається з id налаштованого облікового запису.
+- У багатооблікових конфігураціях (2+ id облікових записів) задайте явний обліковий запис за замовчуванням (`channels.telegram.defaultAccount` або `channels.telegram.accounts.default`), щоб уникнути запасної маршрутизації; `openclaw doctor` попереджає, якщо цього немає або це недійсно.
+- `configWrites: false` блокує записи конфігурації, ініційовані через Telegram (міграції ID supergroup, `/config set|unset`).
+- Елементи верхнього рівня `bindings[]` з `type: "acp"` налаштовують постійні ACP bindings для тем форуму (використовуйте канонічний `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
@@ -278,7 +278,7 @@ WhatsApp працює через web channel gateway (Baileys Web). Він за
requireMention: true,
users: ["987654321098765432"],
skills: ["docs"],
- systemPrompt: "Лише короткі відповіді.",
+ systemPrompt: "Short answers only.",
},
},
},
@@ -297,7 +297,7 @@ WhatsApp працює через web channel gateway (Baileys Web). Він за
enabled: true,
idleHours: 24,
maxAgeHours: 0,
- spawnSubagentSessions: false, // opt-in для sessions_spawn({ thread: true })
+ spawnSubagentSessions: false, // opt-in для `sessions_spawn({ thread: true })`
},
voice: {
enabled: true,
@@ -333,36 +333,36 @@ WhatsApp працює через web channel gateway (Baileys Web). Він за
}
```
-- Токен: `channels.discord.token`, з `DISCORD_BOT_TOKEN` як резервним джерелом для типового облікового запису.
-- Прямі вихідні виклики, які надають явний Discord `token`, використовують цей токен для виклику; параметри retry/політик облікового запису все одно беруться з вибраного облікового запису в активному runtime snapshot.
-- Необов’язковий `channels.discord.defaultAccount` перевизначає вибір типового облікового запису, якщо він збігається з налаштованим account id.
-- Використовуйте `user:` (DM) або `channel:` (канал guild) як цілі доставки; прості числові ID відхиляються.
-- Slug-и guild — у нижньому регістрі, пробіли замінюються на `-`; ключі каналів використовують slug-ім’я (без `#`). Надавайте перевагу ID guild.
-- Повідомлення, створені ботом, типово ігноруються. `allowBots: true` увімкне їх; використовуйте `allowBots: "mentions"`, щоб приймати лише повідомлення ботів, які згадують бота (власні повідомлення все одно відфільтровуються).
-- `channels.discord.guilds..ignoreOtherMentions` (і перевизначення каналу) відкидає повідомлення, які згадують іншого користувача або роль, але не бота (крім @everyone/@here).
+- Токен: `channels.discord.token`, з `DISCORD_BOT_TOKEN` як fallback для облікового запису за замовчуванням.
+- Прямі вихідні виклики, які надають явний Discord `token`, використовують цей токен для виклику; налаштування retry/policy облікового запису все одно беруться з вибраного облікового запису в активному runtime snapshot.
+- Необов’язковий `channels.discord.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він збігається з id налаштованого облікового запису.
+- Використовуйте `user:` (DM) або `channel:` (канал guild) для цілей доставки; прості числові ID відхиляються.
+- Slug guild-ів мають нижній регістр із пробілами, заміненими на `-`; ключі каналів використовують slugged name (без `#`). Надавайте перевагу ID guild.
+- Повідомлення, написані ботом, типово ігноруються. `allowBots: true` вмикає їх; використовуйте `allowBots: "mentions"`, щоб приймати лише повідомлення ботів, які згадують бота (власні повідомлення все одно фільтруються).
+- `channels.discord.guilds..ignoreOtherMentions` (і перевизначення каналу) відкидає повідомлення, які згадують іншого користувача чи роль, але не бота (за винятком @everyone/@here).
- `maxLinesPerMessage` (типово 17) розбиває високі повідомлення, навіть якщо вони коротші за 2000 символів.
-- `channels.discord.threadBindings` керує маршрутизацією, прив’язаною до гілок Discord:
- - `enabled`: перевизначення Discord для функцій сеансів, прив’язаних до гілок (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age` і доставка/маршрутизація з прив’язкою)
- - `idleHours`: перевизначення Discord для авто-unfocus через неактивність у годинах (`0` вимикає)
+- `channels.discord.threadBindings` керує маршрутизацією, прив’язаною до Discord thread:
+ - `enabled`: перевизначення Discord для можливостей сесій, прив’язаних до thread (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age`, а також bound delivery/routing)
+ - `idleHours`: перевизначення Discord для автоматичного unfocus через бездіяльність у годинах (`0` вимикає)
- `maxAgeHours`: перевизначення Discord для жорсткого максимального віку в годинах (`0` вимикає)
- - `spawnSubagentSessions`: перемикач opt-in для автоматичного створення/прив’язки гілок через `sessions_spawn({ thread: true })`
-- Записи верхнього рівня `bindings[]` з `type: "acp"` налаштовують сталі ACP-прив’язки для каналів і гілок (використовуйте id каналу/гілки в `match.peer.id`). Семантика полів спільна в [ACP Agents](/uk/tools/acp-agents#channel-specific-settings).
-- `channels.discord.ui.components.accentColor` задає колір акценту для контейнерів Discord components v2.
-- `channels.discord.voice` вмикає розмови у voice channel Discord і необов’язкові перевизначення auto-join + TTS.
-- `channels.discord.voice.daveEncryption` і `channels.discord.voice.decryptionFailureTolerance` напряму передаються в параметри DAVE `@discordjs/voice` (типово `true` і `24`).
-- OpenClaw додатково намагається відновити voice receive, виходячи/повторно входячи в voice session після повторних збоїв дешифрування.
+ - `spawnSubagentSessions`: opt-in перемикач для автоматичного створення/прив’язки thread у `sessions_spawn({ thread: true })`
+- Елементи верхнього рівня `bindings[]` з `type: "acp"` налаштовують постійні ACP bindings для каналів і thread-ів (використовуйте id каналу/thread у `match.peer.id`). Семантика полів спільна в [ACP Agents](/uk/tools/acp-agents#channel-specific-settings).
+- `channels.discord.ui.components.accentColor` задає accent color для контейнерів Discord components v2.
+- `channels.discord.voice` вмикає розмови в голосових каналах Discord і необов’язкові auto-join + TTS overrides.
+- `channels.discord.voice.daveEncryption` і `channels.discord.voice.decryptionFailureTolerance` напряму передаються до параметрів DAVE у `@discordjs/voice` (типово `true` і `24`).
+- OpenClaw додатково намагається відновити voice receive, залишаючи/повторно приєднуючись до voice session після повторних помилок дешифрування.
- `channels.discord.streaming` — канонічний ключ режиму stream. Застарілі `streamMode` і булеві значення `streaming` мігруються автоматично.
-- `channels.discord.autoPresence` відображає доступність runtime у присутність бота (healthy => online, degraded => idle, exhausted => dnd) і дозволяє необов’язкові перевизначення тексту статусу.
-- `channels.discord.dangerouslyAllowNameMatching` знову вмикає зіставлення за змінними ім’ям/тегом (режим сумісності аварійного використання).
-- `channels.discord.execApprovals`: нативна доставка Discord для схвалення exec і авторизація тих, хто схвалює.
- - `enabled`: `true`, `false` або `"auto"` (типово). У режимі auto схвалення exec активуються, коли схвалювачів можна визначити з `approvers` або `commands.ownerAllowFrom`.
- - `approvers`: ID користувачів Discord, яким дозволено схвалювати exec-запити. Якщо пропущено, використовується `commands.ownerAllowFrom`.
- - `agentFilter`: необов’язковий allowlist ID агентів. Якщо пропущено, схвалення передаються для всіх агентів.
- - `sessionFilter`: необов’язкові шаблони ключів сеансів (підрядок або regex).
- - `target`: куди надсилати запити на схвалення. `"dm"` (типово) надсилає у DM схвалювачів, `"channel"` — у вихідний канал, `"both"` — в обидва місця. Якщо ціль містить `"channel"`, кнопки доступні лише визначеним схвалювачам.
- - `cleanupAfterResolve`: якщо `true`, видаляє DM із запитом на схвалення після схвалення, відхилення або тайм-ауту.
+- `channels.discord.autoPresence` відображає доступність runtime у присутність бота (healthy => online, degraded => idle, exhausted => dnd) і дозволяє необов’язкові перевизначення status text.
+- `channels.discord.dangerouslyAllowNameMatching` знову вмикає зіставлення mutable name/tag (режим сумісності break-glass).
+- `channels.discord.execApprovals`: нативна доставка exec approval у Discord і авторизація approver.
+ - `enabled`: `true`, `false` або `"auto"` (типово). В auto mode exec approvals активуються, коли approver-ів можна визначити з `approvers` або `commands.ownerAllowFrom`.
+ - `approvers`: ID користувачів Discord, яким дозволено схвалювати запити exec. Якщо пропущено, fallback до `commands.ownerAllowFrom`.
+ - `agentFilter`: необов’язковий allowlist ID агентів. Пропустіть, щоб пересилати approvals для всіх агентів.
+ - `sessionFilter`: необов’язкові шаблони ключів сесій (substring або regex).
+ - `target`: куди надсилати запити на схвалення. `"dm"` (типово) надсилає в DM approver-ам, `"channel"` надсилає в початковий канал, `"both"` надсилає в обидва місця. Коли target включає `"channel"`, кнопки можуть використовувати лише визначені approver-и.
+ - `cleanupAfterResolve`: коли `true`, видаляє approval DM після схвалення, відхилення або тайм-ауту.
-**Режими сповіщень про реакції:** `off` (немає), `own` (повідомлення бота, типово), `all` (усі повідомлення), `allowlist` (з `guilds..users` для всіх повідомлень).
+**Режими сповіщень про реакції:** `off` (жодних), `own` (повідомлення бота, типово), `all` (усі повідомлення), `allowlist` (від `guilds..users` на всіх повідомленнях).
### Google Chat
@@ -393,11 +393,11 @@ WhatsApp працює через web channel gateway (Baileys Web). Він за
}
```
-- JSON service account: вбудовано (`serviceAccount`) або з файлу (`serviceAccountFile`).
+- 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 (режим аварійної сумісності).
+- Fallback-и середовища: `GOOGLE_CHAT_SERVICE_ACCOUNT` або `GOOGLE_CHAT_SERVICE_ACCOUNT_FILE`.
+- Використовуйте `spaces/` або `users/` для цілей доставки.
+- `channels.googlechat.dangerouslyAllowNameMatching` знову вмикає зіставлення mutable email principal (режим сумісності break-glass).
### Slack
@@ -419,7 +419,7 @@ WhatsApp працює через web channel gateway (Baileys Web). Він за
allowBots: false,
users: ["U123"],
skills: ["docs"],
- systemPrompt: "Лише короткі відповіді.",
+ systemPrompt: "Short answers only.",
},
},
historyLimit: 50,
@@ -449,7 +449,7 @@ WhatsApp працює через web channel gateway (Baileys Web). Він за
chunkMode: "length",
streaming: {
mode: "partial", // off | partial | block | progress
- nativeTransport: true, // використовувати нативний streaming API Slack, коли mode=partial
+ nativeTransport: true, // використовувати рідний streaming API Slack, коли mode=partial
},
mediaMaxMb: 20,
execApprovals: {
@@ -464,35 +464,35 @@ WhatsApp працює через web channel gateway (Baileys Web). Він за
}
```
-- **Socket mode** потребує і `botToken`, і `appToken` (`SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` як резервні env для типового облікового запису).
-- **HTTP mode** потребує `botToken` плюс `signingSecret` (у корені або на рівні облікового запису).
-- `botToken`, `appToken`, `signingSecret` і `userToken` приймають відкриті рядки
- або об’єкти SecretRef.
-- Snapshots облікових записів Slack відкривають поля джерела/стану облікових даних, такі як
- `botTokenSource`, `botTokenStatus`, `appTokenStatus`, а в режимі HTTP —
+- **Socket mode** потребує і `botToken`, і `appToken` (`SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` для env fallback облікового запису за замовчуванням).
+- **HTTP mode** потребує `botToken` плюс `signingSecret` (у корені або для конкретного облікового запису).
+- `botToken`, `appToken`, `signingSecret` і `userToken` приймають plaintext
+ рядки або об’єкти SecretRef.
+- Slack account snapshot-и надають поля джерела/стану для кожного credential, такі як
+ `botTokenSource`, `botTokenStatus`, `appTokenStatus`, а в HTTP mode —
`signingSecretStatus`. `configured_unavailable` означає, що обліковий запис
- налаштований через SecretRef, але поточний шлях команди/runtime не зміг
- визначити значення secret.
-- `configWrites: false` блокує записи конфігурації, ініційовані зі Slack.
-- Необов’язковий `channels.slack.defaultAccount` перевизначає вибір типового облікового запису, якщо він збігається з налаштованим account id.
-- `channels.slack.streaming.mode` — канонічний ключ режиму stream Slack. `channels.slack.streaming.nativeTransport` керує нативним транспортом stream у Slack. Застарілі `streamMode`, булеві `streaming` і `nativeStreaming` мігруються автоматично.
-- Використовуйте `user:` (DM) або `channel:` як цілі доставки.
+ налаштовано через SecretRef, але поточний шлях command/runtime не зміг
+ визначити значення секрету.
+- `configWrites: false` блокує записи конфігурації, ініційовані через Slack.
+- Необов’язковий `channels.slack.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він збігається з id налаштованого облікового запису.
+- `channels.slack.streaming.mode` — канонічний ключ режиму stream для Slack. `channels.slack.streaming.nativeTransport` керує рідним transport streaming у Slack. Застарілі `streamMode`, булеві `streaming` і `nativeStreaming` мігруються автоматично.
+- Використовуйте `user:` (DM) або `channel:` для цілей доставки.
**Режими сповіщень про реакції:** `off`, `own` (типово), `all`, `allowlist` (із `reactionAllowlist`).
-**Ізоляція сеансів гілок:** `thread.historyScope` — на рівні гілки (типово) або спільно для каналу. `thread.inheritParent` копіює стенограму батьківського каналу в нові гілки.
+**Ізоляція thread session:** `thread.historyScope` — окремо для thread (типово) або спільно в межах каналу. `thread.inheritParent` копіює transcript батьківського каналу в нові thread-и.
-- Нативний streaming Slack плюс assistant-style статус Slack «is typing...» у гілці вимагають цілі відповіді в гілці. DM верхнього рівня типово залишаються поза гілками, тому вони використовують `typingReaction` або звичайну доставку замість preview у стилі гілки.
-- `typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки виконується відповідь, а потім видаляє її після завершення. Використовуйте shortcode емодзі Slack, наприклад `"hourglass_flowing_sand"`.
-- `channels.slack.execApprovals`: нативна доставка Slack для схвалення exec і авторизація тих, хто схвалює. Та сама схема, що й у Discord: `enabled` (`true`/`false`/`"auto"`), `approvers` (ID користувачів Slack), `agentFilter`, `sessionFilter` і `target` (`"dm"`, `"channel"` або `"both"`).
+- Рідний streaming у Slack плюс статус thread у стилі Slack assistant "is typing..." потребують ціль reply thread. DM верхнього рівня типово залишаються поза thread, тому вони використовують `typingReaction` або звичайну доставку замість preview у стилі thread.
+- `typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки виконується відповідь, а потім прибирає її після завершення. Використовуйте shortcode emoji Slack, наприклад `"hourglass_flowing_sand"`.
+- `channels.slack.execApprovals`: нативна доставка exec approval у Slack і авторизація approver. Та сама схема, що й у Discord: `enabled` (`true`/`false`/`"auto"`), `approvers` (ID користувачів Slack), `agentFilter`, `sessionFilter` і `target` (`"dm"`, `"channel"` або `"both"`).
| Група дій | Типово | Примітки |
| ------------ | -------- | ------------------------ |
-| reactions | увімкнено | Реакції + список реакцій |
-| messages | увімкнено | Читання/надсилання/редагування/видалення |
-| pins | увімкнено | Закріпити/відкріпити/список |
-| memberInfo | увімкнено | Інформація про учасника |
-| emojiList | увімкнено | Список кастомних emoji |
+| reactions | enabled | Реакції + список реакцій |
+| messages | enabled | Читання/надсилання/редагування/видалення |
+| pins | enabled | Закріпити/відкріпити/список |
+| memberInfo | enabled | Інформація про учасника |
+| emojiList | enabled | Список користувацьких emoji |
### Mattermost
@@ -516,7 +516,7 @@ Mattermost постачається як плагін: `openclaw plugins install
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,
@@ -526,23 +526,23 @@ Mattermost постачається як плагін: `openclaw plugins install
}
```
-Режими чату: `oncall` (відповідати на @-згадку, типово), `onmessage` (на кожне повідомлення), `onchar` (повідомлення, що починаються з префікса тригера).
+Режими чату: `oncall` (відповідати на @-згадки, типово), `onmessage` (кожне повідомлення), `onchar` (повідомлення, що починаються з trigger prefix).
-Коли нативні команди Mattermost увімкнені:
+Коли рідні команди Mattermost увімкнено:
-- `commands.callbackPath` має бути шляхом (наприклад `/api/channels/mattermost/command`), а не повною URL-адресою.
-- `commands.callbackUrl` має вказувати на endpoint Gateway OpenClaw і бути досяжним із сервера Mattermost.
-- Нативні slash callback-и автентифікуються токенами окремих команд, які повертає
- Mattermost під час реєстрації slash command. Якщо реєстрація не вдається або
- жодна команда не активована, OpenClaw відхиляє callback-и з
+- `commands.callbackPath` має бути шляхом (наприклад `/api/channels/mattermost/command`), а не повним URL.
+- `commands.callbackUrl` має резолвитися до endpoint OpenClaw gateway і бути доступним із сервера Mattermost.
+- Native slash callbacks автентифікуються за допомогою токенів для кожної команди, які
+ Mattermost повертає під час реєстрації slash command. Якщо реєстрація не вдається або
+ не активовано жодної команди, OpenClaw відхиляє callbacks із
`Unauthorized: invalid command token.`
-- Для приватних/tailnet/internal callback-хостів Mattermost може вимагати,
+- Для private/tailnet/internal callback hosts Mattermost може вимагати,
щоб `ServiceSettings.AllowedUntrustedInternalConnections` містив callback host/domain.
Використовуйте значення host/domain, а не повні URL.
-- `channels.mattermost.configWrites`: дозволяти або забороняти записи конфігурації, ініційовані з Mattermost.
+- `channels.mattermost.configWrites`: дозволити або заборонити записи конфігурації, ініційовані через Mattermost.
- `channels.mattermost.requireMention`: вимагати `@mention` перед відповіддю в каналах.
-- `channels.mattermost.groups..requireMention`: перевизначення gating за згадкою для каналу (`"*"` для типового значення).
-- Необов’язковий `channels.mattermost.defaultAccount` перевизначає вибір типового облікового запису, якщо він збігається з налаштованим account id.
+- `channels.mattermost.groups..requireMention`: перевизначення mention-gating для окремого каналу (`"*"` для типового значення).
+- Необов’язковий `channels.mattermost.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він збігається з id налаштованого облікового запису.
### Signal
@@ -551,7 +551,7 @@ Mattermost постачається як плагін: `openclaw plugins install
channels: {
signal: {
enabled: true,
- account: "+15555550123", // необов’язкова прив’язка до облікового запису
+ account: "+15555550123", // необов’язкова прив’язка облікового запису
dmPolicy: "pairing",
allowFrom: ["+15551234567", "uuid:123e4567-e89b-12d3-a456-426614174000"],
configWrites: true,
@@ -566,12 +566,12 @@ Mattermost постачається як плагін: `openclaw plugins install
**Режими сповіщень про реакції:** `off`, `own` (типово), `all`, `allowlist` (із `reactionAllowlist`).
- `channels.signal.account`: закріпити запуск каналу за конкретною ідентичністю облікового запису Signal.
-- `channels.signal.configWrites`: дозволяти або забороняти записи конфігурації, ініційовані з Signal.
-- Необов’язковий `channels.signal.defaultAccount` перевизначає вибір типового облікового запису, якщо він збігається з налаштованим account id.
+- `channels.signal.configWrites`: дозволити або заборонити записи конфігурації, ініційовані через Signal.
+- Необов’язковий `channels.signal.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він збігається з id налаштованого облікового запису.
### BlueBubbles
-BlueBubbles — рекомендований шлях для iMessage (на основі плагіна, налаштовується в `channels.bluebubbles`).
+BlueBubbles — рекомендований шлях для iMessage (на базі плагіна, налаштовується в `channels.bluebubbles`).
```json5
{
@@ -587,13 +587,13 @@ BlueBubbles — рекомендований шлях для iMessage (на ос
```
- Основні шляхи ключів, охоплені тут: `channels.bluebubbles`, `channels.bluebubbles.dmPolicy`.
-- Необов’язковий `channels.bluebubbles.defaultAccount` перевизначає вибір типового облікового запису, якщо він збігається з налаштованим account id.
-- Записи верхнього рівня `bindings[]` з `type: "acp"` можуть прив’язувати розмови BlueBubbles до сталих ACP-сеансів. Використовуйте BlueBubbles handle або target string (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) у `match.peer.id`. Спільна семантика полів: [ACP Agents](/uk/tools/acp-agents#channel-specific-settings).
+- Необов’язковий `channels.bluebubbles.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він збігається з id налаштованого облікового запису.
+- Елементи верхнього рівня `bindings[]` з `type: "acp"` можуть прив’язувати розмови BlueBubbles до постійних ACP sessions. Використовуйте handle або target string BlueBubbles (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) у `match.peer.id`. Спільна семантика полів: [ACP Agents](/uk/tools/acp-agents#channel-specific-settings).
- Повну конфігурацію каналу BlueBubbles задокументовано в [BlueBubbles](/uk/channels/bluebubbles).
### iMessage
-OpenClaw запускає `imsg rpc` (JSON-RPC через stdio). Демон або порт не потрібні.
+OpenClaw запускає `imsg rpc` (JSON-RPC через stdio). Жоден daemon або port не потрібен.
```json5
{
@@ -617,15 +617,15 @@ OpenClaw запускає `imsg rpc` (JSON-RPC через stdio). Демон а
}
```
-- Необов’язковий `channels.imessage.defaultAccount` перевизначає вибір типового облікового запису, якщо він збігається з налаштованим account id.
+- Необов’язковий `channels.imessage.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він збігається з id налаштованого облікового запису.
-- Потрібен Full Disk Access до БД Messages.
+- Потрібен Full Disk Access до Messages DB.
- Надавайте перевагу цілям `chat_id:`. Використовуйте `imsg chats --limit 20`, щоб переглянути список чатів.
- `cliPath` може вказувати на SSH wrapper; задайте `remoteHost` (`host` або `user@host`) для отримання вкладень через SCP.
- `attachmentRoots` і `remoteAttachmentRoots` обмежують шляхи вхідних вкладень (типово: `/Users/*/Library/Messages/Attachments`).
-- SCP використовує сувору перевірку ключа хоста, тому переконайтеся, що ключ relay host уже є в `~/.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).
+- SCP використовує сувору перевірку host-key, тому переконайтеся, що ключ relay host уже існує в `~/.ssh/known_hosts`.
+- `channels.imessage.configWrites`: дозволити або заборонити записи конфігурації, ініційовані через iMessage.
+- Елементи верхнього рівня `bindings[]` з `type: "acp"` можуть прив’язувати розмови iMessage до постійних ACP sessions. Використовуйте нормалізований handle або явну chat target (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) у `match.peer.id`. Спільна семантика полів: [ACP Agents](/uk/tools/acp-agents#channel-specific-settings).
@@ -638,7 +638,7 @@ exec ssh -T gateway-host imsg "$@"
### Matrix
-Matrix підтримується розширенням і налаштовується в `channels.matrix`.
+Matrix працює через extension і налаштовується в `channels.matrix`.
```json5
{
@@ -669,24 +669,24 @@ Matrix підтримується розширенням і налаштовує
```
- Автентифікація токеном використовує `accessToken`; автентифікація паролем використовує `userId` + `password`.
-- `channels.matrix.proxy` маршрутизує HTTP-трафік Matrix через явний HTTP(S) proxy. Іменовані облікові записи можуть перевизначати його через `channels.matrix.accounts..proxy`.
-- `channels.matrix.network.dangerouslyAllowPrivateNetwork` дозволяє приватні/internal homeserver-и. `proxy` і це мережеве opt-in — незалежні елементи керування.
-- `channels.matrix.defaultAccount` вибирає бажаний обліковий запис у багатооблікових конфігураціях.
-- `channels.matrix.autoJoin` типово має значення `off`, тому запрошені кімнати та нові DM-style запрошення ігноруються, доки ви не задасте `autoJoin: "allowlist"` з `autoJoinAllowlist` або `autoJoin: "always"`.
-- `channels.matrix.execApprovals`: нативна доставка Matrix для схвалення exec і авторизація тих, хто схвалює.
- - `enabled`: `true`, `false` або `"auto"` (типово). У режимі auto схвалення exec активуються, коли схвалювачів можна визначити з `approvers` або `commands.ownerAllowFrom`.
- - `approvers`: ID користувачів Matrix (наприклад `@owner:example.org`), яким дозволено схвалювати exec-запити.
- - `agentFilter`: необов’язковий allowlist ID агентів. Якщо пропущено, схвалення передаються для всіх агентів.
- - `sessionFilter`: необов’язкові шаблони ключів сеансів (підрядок або regex).
- - `target`: куди надсилати запити на схвалення. `"dm"` (типово), `"channel"` (вихідна кімната) або `"both"`.
- - Перевизначення для облікових записів: `channels.matrix.accounts..execApprovals`.
-- `channels.matrix.dm.sessionScope` визначає, як DM Matrix групуються в сеанси: `per-user` (типово) об’єднує за routed peer, а `per-room` ізолює кожну DM room.
-- Перевірки статусу Matrix і живі пошуки в каталозі використовують ту саму політику proxy, що й runtime traffic.
+- `channels.matrix.proxy` маршрутизує HTTP-трафік Matrix через явний HTTP(S) proxy. Іменовані облікові записи можуть перевизначити його через `channels.matrix.accounts..proxy`.
+- `channels.matrix.network.dangerouslyAllowPrivateNetwork` дозволяє приватні/внутрішні homeserver-и. `proxy` і цей network opt-in — незалежні механізми.
+- `channels.matrix.defaultAccount` вибирає пріоритетний обліковий запис у багатооблікових конфігураціях.
+- `channels.matrix.autoJoin` типово має значення `off`, тому запрошені кімнати й нові DM-подібні запрошення ігноруються, доки ви не встановите `autoJoin: "allowlist"` з `autoJoinAllowlist` або `autoJoin: "always"`.
+- `channels.matrix.execApprovals`: нативна доставка exec approval у Matrix і авторизація approver.
+ - `enabled`: `true`, `false` або `"auto"` (типово). В auto mode exec approvals активуються, коли approver-ів можна визначити з `approvers` або `commands.ownerAllowFrom`.
+ - `approvers`: ID користувачів Matrix (наприклад `@owner:example.org`), яким дозволено схвалювати exec requests.
+ - `agentFilter`: необов’язковий allowlist ID агентів. Пропустіть, щоб пересилати approvals для всіх агентів.
+ - `sessionFilter`: необов’язкові шаблони ключів сесій (substring або regex).
+ - `target`: куди надсилати approval prompts. `"dm"` (типово), `"channel"` (початкова кімната) або `"both"`.
+ - Перевизначення на рівні облікового запису: `channels.matrix.accounts..execApprovals`.
+- `channels.matrix.dm.sessionScope` керує тим, як DM Matrix групуються в sessions: `per-user` (типово) спільно використовує routed peer, тоді як `per-room` ізолює кожну DM room.
+- Matrix status probes і live directory lookups використовують ту саму proxy policy, що й runtime traffic.
- Повну конфігурацію Matrix, правила targeting і приклади налаштування задокументовано в [Matrix](/uk/channels/matrix).
### Microsoft Teams
-Microsoft Teams підтримується розширенням і налаштовується в `channels.msteams`.
+Microsoft Teams працює через extension і налаштовується в `channels.msteams`.
```json5
{
@@ -702,11 +702,11 @@ Microsoft Teams підтримується розширенням і налаш
```
- Основні шляхи ключів, охоплені тут: `channels.msteams`, `channels.msteams.configWrites`.
-- Повну конфігурацію Teams (облікові дані, webhook, політика DM/груп, перевизначення для команд/каналів) задокументовано в [Microsoft Teams](/uk/channels/msteams).
+- Повну конфігурацію Teams (облікові дані, webhook, політика DM/group, перевизначення для окремих team/channel) задокументовано в [Microsoft Teams](/uk/channels/msteams).
### IRC
-IRC підтримується розширенням і налаштовується в `channels.irc`.
+IRC працює через extension і налаштовується в `channels.irc`.
```json5
{
@@ -728,12 +728,12 @@ IRC підтримується розширенням і налаштовуєт
```
- Основні шляхи ключів, охоплені тут: `channels.irc`, `channels.irc.dmPolicy`, `channels.irc.configWrites`, `channels.irc.nickserv.*`.
-- Необов’язковий `channels.irc.defaultAccount` перевизначає вибір типового облікового запису, якщо він збігається з налаштованим account id.
-- Повну конфігурацію каналу IRC (host/port/TLS/channels/allowlist-и/gating за згадкою) задокументовано в [IRC](/uk/channels/irc).
+- Необов’язковий `channels.irc.defaultAccount` перевизначає вибір облікового запису за замовчуванням, якщо він збігається з id налаштованого облікового запису.
+- Повну конфігурацію каналу IRC (host/port/TLS/channels/allowlists/mention gating) задокументовано в [IRC](/uk/channels/irc).
### Багатообліковість (усі канали)
-Запускайте кілька облікових записів на канал (кожен із власним `accountId`):
+Запускайте кілька облікових записів на канал (кожен зі своїм `accountId`):
```json5
{
@@ -741,11 +741,11 @@ IRC підтримується розширенням і налаштовуєт
telegram: {
accounts: {
default: {
- name: "Основний бот",
+ name: "Primary bot",
botToken: "123456:ABC...",
},
alerts: {
- name: "Бот сповіщень",
+ name: "Alerts bot",
botToken: "987654:XYZ...",
},
},
@@ -754,28 +754,28 @@ IRC підтримується розширенням і налаштовуєт
}
```
-- `default` використовується, коли `accountId` пропущено (CLI + маршрутизація).
-- Env-токени застосовуються лише до **типового** облікового запису.
-- Базові налаштування каналу застосовуються до всіх облікових записів, якщо не перевизначено на рівні облікового запису.
+- `default` використовується, коли `accountId` пропущено (CLI + routing).
+- Env tokens застосовуються лише до облікового запису **default**.
+- Базові налаштування каналу застосовуються до всіх облікових записів, якщо їх не перевизначено для конкретного облікового запису.
- Використовуйте `bindings[].match.accountId`, щоб маршрутизувати кожен обліковий запис до іншого агента.
-- Якщо ви додаєте нетиповий обліковий запис через `openclaw channels add` (або через онбординг каналу), поки ще маєте однооблікову конфігурацію каналу верхнього рівня, OpenClaw спочатку переносить значення верхнього рівня, що належать обліковому запису, до карти облікових записів каналу, щоб початковий обліковий запис і далі працював. Більшість каналів переносить їх у `channels..accounts.default`; Matrix може натомість зберегти наявну відповідну іменовану/типову ціль.
-- Існуючі прив’язки лише до каналу (без `accountId`) і далі відповідають типовому обліковому запису; прив’язки на рівні облікового запису залишаються необов’язковими.
-- `openclaw doctor --fix` також виправляє змішані форми, переміщуючи значення верхнього рівня однооблікової конфігурації, що належать обліковому запису, до promoted account, вибраного для цього каналу. Більшість каналів використовує `accounts.default`; Matrix може зберегти наявну відповідну іменовану/типову ціль.
+- Якщо ви додаєте не-default обліковий запис через `openclaw channels add` (або onboarding каналу), все ще перебуваючи в однообліковій top-level конфігурації каналу, OpenClaw спочатку переносить однооблікові top-level значення з областю облікового запису в map облікових записів каналу, щоб вихідний обліковий запис продовжив працювати. Для більшості каналів вони переходять у `channels..accounts.default`; Matrix може натомість зберегти наявну відповідну іменовану/default ціль.
+- Наявні bindings лише для каналу (без `accountId`) продовжують відповідати обліковому запису за замовчуванням; bindings з областю облікового запису залишаються необов’язковими.
+- `openclaw doctor --fix` також виправляє змішані форми, переміщуючи однооблікові top-level значення з областю облікового запису у promoted account, вибраний для цього каналу. Більшість каналів використовують `accounts.default`; Matrix може зберегти наявну відповідну іменовану/default ціль.
-### Інші канали розширень
+### Інші канали extension
-Багато каналів розширень налаштовуються як `channels.` і задокументовані на своїх окремих сторінках каналів (наприклад Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat і Twitch).
+Багато каналів extension налаштовуються як `channels.` і задокументовані на власних окремих сторінках каналів (наприклад, Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat і Twitch).
Див. повний індекс каналів: [Channels](/uk/channels).
-### Gating за згадкою в групових чатах
+### Mention gating у групових чатах
-Повідомлення в групах типово **вимагають згадки** (метадані згадки або безпечні regex-патерни). Це стосується групових чатів WhatsApp, Telegram, Discord, Google Chat та iMessage.
+Для групових повідомлень типово **потрібна згадка** (згадка в метаданих або безпечні regex patterns). Застосовується до групових чатів WhatsApp, Telegram, Discord, Google Chat та iMessage.
**Типи згадок:**
-- **Згадки в метаданих**: нативні @-згадки платформи. Ігноруються в режимі self-chat WhatsApp.
-- **Текстові патерни**: безпечні regex-патерни в `agents.list[].groupChat.mentionPatterns`. Невалідні патерни та небезпечне вкладене повторення ігноруються.
-- Gating за згадкою застосовується лише тоді, коли можливе виявлення (нативні згадки або принаймні один патерн).
+- **Metadata mentions**: рідні @-згадки платформи. Ігноруються в режимі self-chat WhatsApp.
+- **Text patterns**: безпечні regex patterns у `agents.list[].groupChat.mentionPatterns`. Недійсні patterns і небезпечні вкладені повторення ігноруються.
+- Mention gating застосовується лише тоді, коли виявлення можливе (рідні згадки або принаймні один pattern).
```json5
{
@@ -788,7 +788,7 @@ IRC підтримується розширенням і налаштовуєт
}
```
-`messages.groupChat.historyLimit` задає глобальне типове значення. Канали можуть перевизначати його через `channels..historyLimit` (або на рівні облікового запису). Установіть `0`, щоб вимкнути.
+`messages.groupChat.historyLimit` задає глобальне типове значення. Канали можуть перевизначати його через `channels..historyLimit` (або на рівні облікового запису). Встановіть `0`, щоб вимкнути.
#### Ліміти історії DM
@@ -805,13 +805,13 @@ IRC підтримується розширенням і налаштовуєт
}
```
-Розв’язання: перевизначення для конкретного DM → типове значення постачальника → без ліміту (зберігається все).
+Порядок визначення: перевизначення для окремого DM → значення провайдера за замовчуванням → без ліміту (зберігається все).
-Підтримується: `telegram`, `whatsapp`, `discord`, `slack`, `signal`, `imessage`, `msteams`.
+Підтримується для: `telegram`, `whatsapp`, `discord`, `slack`, `signal`, `imessage`, `msteams`.
#### Режим self-chat
-Додайте власний номер у `allowFrom`, щоб увімкнути режим self-chat (ігнорує нативні @-згадки, відповідає лише на текстові патерни):
+Додайте власний номер у `allowFrom`, щоб увімкнути режим self-chat (ігнорує рідні @-згадки, відповідає лише на text patterns):
```json5
{
@@ -832,21 +832,21 @@ IRC підтримується розширенням і налаштовуєт
}
```
-### Команди (обробка команд чату)
+### Commands (обробка chat command)
```json5
{
commands: {
- native: "auto", // реєструвати нативні команди, коли вони підтримуються
- nativeSkills: "auto", // реєструвати нативні skill-команди, коли вони підтримуються
- text: true, // розбирати /commands у повідомленнях чату
- bash: false, // дозволити ! (псевдонім: /bash)
+ native: "auto", // реєструвати native commands, коли підтримується
+ nativeSkills: "auto", // реєструвати native skill commands, коли підтримується
+ text: true, // розбирати /commands у chat messages
+ bash: false, // дозволити ! (alias: /bash)
bashForegroundMs: 2000,
config: false, // дозволити /config
mcp: false, // дозволити /mcp
plugins: false, // дозволити /plugins
debug: false, // дозволити /debug
- restart: true, // дозволити /restart + інструмент перезапуску gateway
+ restart: true, // дозволити /restart + інструмент restart gateway
ownerAllowFrom: ["discord:123456789012345678"],
ownerDisplay: "raw", // raw | hash
ownerDisplaySecret: "${OWNER_ID_HASH_SECRET}",
@@ -861,42 +861,42 @@ IRC підтримується розширенням і налаштовуєт
-- Цей блок налаштовує поверхні команд. Поточний каталог вбудованих + bundled команд див. у [Slash Commands](/uk/tools/slash-commands).
-- Ця сторінка — **довідник ключів конфігурації**, а не повний каталог команд. Команди, що належать каналу/плагіну, як-от QQ Bot `/bot-ping` `/bot-help` `/bot-logs`, LINE `/card`, device-pair `/pair`, memory `/dreaming`, phone-control `/phone` і Talk `/voice`, задокументовані на сторінках відповідних каналів/плагінів плюс у [Slash Commands](/uk/tools/slash-commands).
-- Текстові команди мають бути **окремими** повідомленнями з початковим `/`.
-- `native: "auto"` вмикає нативні команди для Discord/Telegram, залишає Slack вимкненим.
-- `nativeSkills: "auto"` вмикає нативні skill-команди для Discord/Telegram, залишає Slack вимкненим.
-- Перевизначення для каналу: `channels.discord.commands.native` (bool або `"auto"`). `false` очищає раніше зареєстровані команди.
-- Перевизначайте реєстрацію нативних skill-команд для каналу через `channels..commands.nativeSkills`.
-- `channels.telegram.customCommands` додає додаткові елементи меню бота Telegram.
-- `bash: true` вмикає `! ` для shell хоста. Потрібні `tools.elevated.enabled` і відправник у `tools.elevated.allowFrom.`.
-- `config: true` вмикає `/config` (читання/запис `openclaw.json`). Для клієнтів gateway `chat.send` сталі записи `/config set|unset` також потребують `operator.admin`; доступний лише для читання `/config show` залишається доступним для звичайних клієнтів із правом запису.
-- `mcp: true` вмикає `/mcp` для конфігурації MCP-серверів, керованих OpenClaw, у `mcp.servers`.
-- `plugins: true` вмикає `/plugins` для пошуку плагінів, встановлення та керування вмиканням/вимиканням.
-- `channels..configWrites` керує мутаціями конфігурації на рівні каналу (типово: true).
-- Для багатооблікових каналів `channels..accounts..configWrites` також керує записами, націленими на цей обліковий запис (наприклад `/allowlist --config --account ` або `/config set channels..accounts....`).
-- `restart: false` вимикає `/restart` і дії інструмента перезапуску gateway. Типово: `true`.
-- `ownerAllowFrom` — явний owner allowlist для owner-only команд/інструментів. Він відокремлений від `allowFrom`.
-- `ownerDisplay: "hash"` хешує ID власника в системному prompt. Задайте `ownerDisplaySecret`, щоб керувати хешуванням.
-- `allowFrom` — для кожного постачальника окремо. Якщо задано, це **єдине** джерело авторизації (allowlist-и каналу/pairing і `useAccessGroups` ігноруються).
-- `useAccessGroups: false` дозволяє командам обходити політики access-group, коли `allowFrom` не задано.
-- Карта документації команд:
- - каталог вбудованих + bundled: [Slash Commands](/uk/tools/slash-commands)
- - командні поверхні, специфічні для каналів: [Channels](/uk/channels)
+- Цей блок налаштовує поверхні команд. Для поточного каталогу built-in + bundled команд див. [Slash Commands](/uk/tools/slash-commands).
+- Ця сторінка — це **довідник ключів конфігурації**, а не повний каталог команд. Команди, що належать каналу/плагіну, такі як QQ Bot `/bot-ping` `/bot-help` `/bot-logs`, LINE `/card`, device-pair `/pair`, memory `/dreaming`, phone-control `/phone` і Talk `/voice`, задокументовані на сторінках відповідних каналів/плагінів та в [Slash Commands](/uk/tools/slash-commands).
+- Текстові команди мають бути **окремими** повідомленнями, що починаються з `/`.
+- `native: "auto"` вмикає native commands для Discord/Telegram, залишає Slack вимкненим.
+- `nativeSkills: "auto"` вмикає native skill commands для Discord/Telegram, залишає Slack вимкненим.
+- Перевизначення на рівні каналу: `channels.discord.commands.native` (bool або `"auto"`). `false` очищає раніше зареєстровані commands.
+- Перевизначайте native skill registration для каналу через `channels..commands.nativeSkills`.
+- `channels.telegram.customCommands` додає додаткові елементи меню Telegram bot.
+- `bash: true` вмикає `! ` для host shell. Потрібно `tools.elevated.enabled`, а відправник має бути в `tools.elevated.allowFrom.`.
+- `config: true` вмикає `/config` (читання/запис `openclaw.json`). Для клієнтів gateway `chat.send` постійні записи `/config set|unset` також потребують `operator.admin`; лише читання `/config show` залишається доступним для звичайних operator clients із правом запису.
+- `mcp: true` вмикає `/mcp` для конфігурації MCP server під керуванням OpenClaw у `mcp.servers`.
+- `plugins: true` вмикає `/plugins` для виявлення плагінів, встановлення та керування enable/disable.
+- `channels..configWrites` керує мутаціями конфігурації для кожного каналу (типово: true).
+- Для багатооблікових каналів `channels..accounts..configWrites` також керує записами, що націлені на цей обліковий запис (наприклад `/allowlist --config --account ` або `/config set channels..accounts....`).
+- `restart: false` вимикає `/restart` і дії інструмента restart gateway. Типове значення: `true`.
+- `ownerAllowFrom` — це явний owner allowlist для owner-only commands/tools. Він окремий від `allowFrom`.
+- `ownerDisplay: "hash"` хешує owner id у system prompt. Задайте `ownerDisplaySecret`, щоб керувати хешуванням.
+- `allowFrom` задається для кожного провайдера. Якщо його встановлено, це **єдине** джерело авторизації (channel allowlists/pairing і `useAccessGroups` ігноруються).
+- `useAccessGroups: false` дозволяє commands обходити політики access-group, коли `allowFrom` не встановлено.
+- Мапа документації команд:
+ - built-in + bundled каталог: [Slash Commands](/uk/tools/slash-commands)
+ - поверхні команд, специфічні для каналу: [Channels](/uk/channels)
- команди QQ Bot: [QQ Bot](/uk/channels/qqbot)
- команди pairing: [Pairing](/uk/channels/pairing)
- - команда карток LINE: [LINE](/uk/channels/line)
- - memory dreaming: [Dreaming](/uk/concepts/dreaming)
+ - команда картки LINE: [LINE](/uk/channels/line)
+ - dreaming пам’яті: [Dreaming](/uk/concepts/dreaming)
---
-## Типові налаштування агента
+## Типові значення агентів
### `agents.defaults.workspace`
-Типово: `~/.openclaw/workspace`.
+Типове значення: `~/.openclaw/workspace`.
```json5
{
@@ -906,7 +906,7 @@ IRC підтримується розширенням і налаштовуєт
### `agents.defaults.repoRoot`
-Необов’язковий корінь репозиторію, що показується в рядку Runtime системного prompt. Якщо не задано, OpenClaw визначає його автоматично, рухаючись вгору від workspace.
+Необов’язковий корінь репозиторію, який показується в рядку Runtime system prompt. Якщо не встановлено, OpenClaw автоматично визначає його, піднімаючись вгору від workspace.
```json5
{
@@ -916,7 +916,7 @@ IRC підтримується розширенням і налаштовуєт
### `agents.defaults.skills`
-Необов’язковий типовий allowlist skill-ів для агентів, які не задають
+Необов’язковий типовий allowlist Skills для агентів, які не задають
`agents.list[].skills`.
```json5
@@ -932,15 +932,15 @@ IRC підтримується розширенням і налаштовуєт
}
```
-- Пропустіть `agents.defaults.skills`, щоб типово skills були необмежені.
+- Пропустіть `agents.defaults.skills`, щоб типово не обмежувати Skills.
- Пропустіть `agents.list[].skills`, щоб успадкувати типові значення.
-- Задайте `agents.list[].skills: []`, щоб не було skill-ів.
-- Непорожній список `agents.list[].skills` — це фінальний набір для цього агента; він
- не об’єднується з типовими значеннями.
+- Встановіть `agents.list[].skills: []`, щоб не дозволити жодних Skills.
+- Непорожній список `agents.list[].skills` є фінальним набором для цього агента;
+ він не зливається з типовими значеннями.
### `agents.defaults.skipBootstrap`
-Вимикає автоматичне створення bootstrap-файлів workspace (`AGENTS.md`, `SOUL.md`, `TOOLS.md`, `IDENTITY.md`, `USER.md`, `HEARTBEAT.md`, `BOOTSTRAP.md`).
+Вимикає автоматичне створення файлів bootstrap workspace (`AGENTS.md`, `SOUL.md`, `TOOLS.md`, `IDENTITY.md`, `USER.md`, `HEARTBEAT.md`, `BOOTSTRAP.md`).
```json5
{
@@ -950,9 +950,9 @@ IRC підтримується розширенням і налаштовуєт
### `agents.defaults.contextInjection`
-Керує тим, коли bootstrap-файли workspace вбудовуються в системний prompt. Типово: `"always"`.
+Керує тим, коли файли bootstrap workspace вбудовуються в system prompt. Типове значення: `"always"`.
-- `"continuation-skip"`: на безпечних ходах продовження (після завершеної відповіді асистента) повторне вбудовування bootstrap workspace пропускається, що зменшує розмір prompt. Запуски heartbeat і повтори після compaction все одно перебудовують контекст.
+- `"continuation-skip"`: безпечні continuation turns (після завершеної відповіді assistant) пропускають повторне вбудовування bootstrap workspace, зменшуючи розмір prompt. Запуски heartbeat і повторні спроби після compaction усе одно перебудовують контекст.
```json5
{
@@ -962,7 +962,7 @@ IRC підтримується розширенням і налаштовуєт
### `agents.defaults.bootstrapMaxChars`
-Максимум символів на bootstrap-файл workspace до обрізання. Типово: `20000`.
+Максимальна кількість символів у файлі bootstrap workspace перед обрізанням. Типове значення: `20000`.
```json5
{
@@ -972,7 +972,7 @@ IRC підтримується розширенням і налаштовуєт
### `agents.defaults.bootstrapTotalMaxChars`
-Максимальна загальна кількість символів, вбудованих через усі bootstrap-файли workspace. Типово: `150000`.
+Максимальна загальна кількість символів, що вбудовуються з усіх файлів bootstrap workspace. Типове значення: `150000`.
```json5
{
@@ -982,12 +982,12 @@ IRC підтримується розширенням і налаштовуєт
### `agents.defaults.bootstrapPromptTruncationWarning`
-Керує видимим для агента текстом попередження, коли bootstrap-контекст обрізається.
-Типово: `"once"`.
+Керує текстом попередження, видимим агенту, коли bootstrap context обрізано.
+Типове значення: `"once"`.
-- `"off"`: ніколи не вбудовувати текст попередження в системний prompt.
+- `"off"`: ніколи не вбудовувати текст попередження в system prompt.
- `"once"`: вбудовувати попередження один раз для кожного унікального підпису обрізання (рекомендовано).
-- `"always"`: вбудовувати попередження під час кожного запуску, коли є обрізання.
+- `"always"`: вбудовувати попередження під час кожного запуску, якщо є обрізання.
```json5
{
@@ -997,10 +997,10 @@ IRC підтримується розширенням і налаштовуєт
### `agents.defaults.imageMaxDimensionPx`
-Максимальний розмір у пікселях для довшої сторони зображення в блоках transcript/tool перед викликами постачальника.
-Типово: `1200`.
+Максимальний розмір у пікселях для найдовшої сторони зображення в блоках image transcript/tool перед викликами провайдера.
+Типове значення: `1200`.
-Менші значення зазвичай зменшують використання vision-token і розмір payload запиту для сценаріїв з великою кількістю скриншотів.
+Менші значення зазвичай зменшують використання vision-token і розмір request payload для запусків із великою кількістю скриншотів.
Більші значення зберігають більше візуальних деталей.
```json5
@@ -1011,7 +1011,7 @@ IRC підтримується розширенням і налаштовуєт
### `agents.defaults.userTimezone`
-Часовий пояс для контексту системного prompt (не для міток часу повідомлень). Якщо не задано, використовується часовий пояс хоста.
+Часовий пояс для контексту system prompt (не для timestamps повідомлень). Якщо не задано, використовується часовий пояс хоста.
```json5
{
@@ -1021,7 +1021,7 @@ IRC підтримується розширенням і налаштовуєт
### `agents.defaults.timeFormat`
-Формат часу в системному prompt. Типово: `auto` (налаштування ОС).
+Формат часу в system prompt. Типове значення: `auto` (налаштування ОС).
```json5
{
@@ -1059,7 +1059,7 @@ IRC підтримується розширенням і налаштовуєт
primary: "anthropic/claude-opus-4-6",
fallbacks: ["openai/gpt-5.4-mini"],
},
- params: { cacheRetention: "long" }, // глобальні типові параметри постачальника
+ params: { cacheRetention: "long" }, // глобальні типові provider params
pdfMaxBytesMb: 10,
pdfMaxPages: 20,
thinkingDefault: "low",
@@ -1075,44 +1075,44 @@ IRC підтримується розширенням і налаштовуєт
```
- `model`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`).
- - Форма рядка задає лише основну модель.
- - Форма об’єкта задає основну модель плюс упорядковані резервні моделі.
+ - Рядкова форма задає лише primary model.
+ - Форма об’єкта задає primary плюс упорядковані failover models.
- `imageModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`).
- - Використовується шляхом інструмента `image` як конфігурація vision-model.
- - Також використовується для резервної маршрутизації, коли вибрана/типова модель не приймає зображення.
+ - Використовується шляхом інструмента `image` як конфігурація його vision-model.
+ - Також використовується як fallback routing, коли вибрана/типова модель не може приймати image input.
- `imageGenerationModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`).
- - Використовується спільною можливістю генерації зображень і будь-якою майбутньою поверхнею інструмента/плагіна, що генерує зображення.
- - Типові значення: `google/gemini-3.1-flash-image-preview` для нативної генерації зображень Gemini, `fal/fal-ai/flux/dev` для fal або `openai/gpt-image-1` для OpenAI Images.
- - Якщо ви вибираєте provider/model напряму, також налаштуйте відповідну автентифікацію/API key постачальника (наприклад `GEMINI_API_KEY` або `GOOGLE_API_KEY` для `google/*`, `OPENAI_API_KEY` для `openai/*`, `FAL_KEY` для `fal/*`).
- - Якщо пропущено, `image_generate` все одно може вивести типове значення постачальника з автентифікацією. Спочатку пробується поточний типовий постачальник, потім інші зареєстровані постачальники генерації зображень у порядку provider-id.
+ - Використовується спільною можливістю генерування зображень і будь-якою майбутньою поверхнею tool/plugin, що генерує зображення.
+ - Типові значення: `google/gemini-3.1-flash-image-preview` для нативного генерування зображень Gemini, `fal/fal-ai/flux/dev` для fal або `openai/gpt-image-1` для OpenAI Images.
+ - Якщо ви вибираєте provider/model напряму, також налаштуйте відповідну auth/API key провайдера (наприклад `GEMINI_API_KEY` або `GOOGLE_API_KEY` для `google/*`, `OPENAI_API_KEY` для `openai/*`, `FAL_KEY` для `fal/*`).
+ - Якщо пропущено, `image_generate` усе одно може вивести типове значення провайдера з auth. Спочатку він намагається використати поточного провайдера за замовчуванням, а потім інші зареєстровані провайдери image-generation у порядку provider-id.
- `musicGenerationModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`).
- - Використовується спільною можливістю генерації музики та вбудованим інструментом `music_generate`.
+ - Використовується спільною можливістю генерації музики та built-in інструментом `music_generate`.
- Типові значення: `google/lyria-3-clip-preview`, `google/lyria-3-pro-preview` або `minimax/music-2.5+`.
- - Якщо пропущено, `music_generate` усе одно може вивести типове значення постачальника з автентифікацією. Спочатку пробується поточний типовий постачальник, потім інші зареєстровані постачальники генерації музики в порядку provider-id.
- - Якщо ви вибираєте provider/model напряму, також налаштуйте відповідну автентифікацію/API key постачальника.
+ - Якщо пропущено, `music_generate` усе одно може вивести типове значення провайдера з auth. Спочатку він намагається використати поточного провайдера за замовчуванням, а потім інші зареєстровані провайдери music-generation у порядку provider-id.
+ - Якщо ви вибираєте provider/model напряму, також налаштуйте відповідну auth/API key провайдера.
- `videoGenerationModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`).
- - Використовується спільною можливістю генерації відео та вбудованим інструментом `video_generate`.
+ - Використовується спільною можливістю генерування відео та built-in інструментом `video_generate`.
- Типові значення: `qwen/wan2.6-t2v`, `qwen/wan2.6-i2v`, `qwen/wan2.6-r2v`, `qwen/wan2.6-r2v-flash` або `qwen/wan2.7-r2v`.
- - Якщо пропущено, `video_generate` усе одно може вивести типове значення постачальника з автентифікацією. Спочатку пробується поточний типовий постачальник, потім інші зареєстровані постачальники генерації відео в порядку provider-id.
- - Якщо ви вибираєте provider/model напряму, також налаштуйте відповідну автентифікацію/API key постачальника.
- - Зараз bundled постачальник генерації відео Qwen підтримує до 1 вихідного відео, 1 вхідного зображення, 4 вхідних відео, тривалість 10 секунд, а також параметри рівня постачальника `size`, `aspectRatio`, `resolution`, `audio` і `watermark`.
+ - Якщо пропущено, `video_generate` усе одно може вивести типове значення провайдера з auth. Спочатку він намагається використати поточного провайдера за замовчуванням, а потім інші зареєстровані провайдери video-generation у порядку provider-id.
+ - Якщо ви вибираєте provider/model напряму, також налаштуйте відповідну auth/API key провайдера.
+ - Bundled провайдер генерації відео Qwen підтримує до 1 вихідного відео, 1 вхідного зображення, 4 вхідних відео, тривалість 10 секунд і параметри рівня провайдера `size`, `aspectRatio`, `resolution`, `audio` і `watermark`.
- `pdfModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`).
- Використовується інструментом `pdf` для маршрутизації моделей.
- - Якщо пропущено, інструмент PDF повертається до `imageModel`, а потім до визначеної моделі сеансу/типової моделі.
-- `pdfMaxBytesMb`: типовий ліміт розміру PDF для інструмента `pdf`, коли `maxBytesMb` не передано під час виклику.
-- `pdfMaxPages`: типова максимальна кількість сторінок, яка враховується в режимі extraction fallback інструмента `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 повертається до першого налаштованого provider/model замість використання застарілого removed-provider default.
-- `models`: налаштований каталог моделей і allowlist для `/model`. Кожен запис може містити `alias` (скорочення) і `params` (специфічні для постачальника, наприклад `temperature`, `maxTokens`, `cacheRetention`, `context1m`).
-- `params`: глобальні типові параметри постачальника, що застосовуються до всіх моделей. Задаються в `agents.defaults.params` (наприклад `{ cacheRetention: "long" }`).
-- Пріоритет злиття `params` (конфігурація): `agents.defaults.params` (глобальна база) перевизначається `agents.defaults.models["provider/model"].params` (для конкретної моделі), потім `agents.list[].params` (для відповідного id агента) перевизначає за ключем. Докладніше див. [Prompt Caching](/uk/reference/prompt-caching).
-- Засоби запису конфігурації, які змінюють ці поля (наприклад `/models set`, `/models set-image` і команди додавання/видалення резервних моделей), зберігають канонічну форму об’єкта й по можливості зберігають наявні списки fallback.
-- `maxConcurrent`: максимальна кількість паралельних запусків агентів між сеансами (кожен сеанс усе одно серіалізований). Типово: 4.
+ - Якщо пропущено, інструмент PDF повертається до `imageModel`, а потім до визначеної session/default model.
+- `pdfMaxBytesMb`: типовий ліміт розміру PDF для інструмента `pdf`, коли `maxBytesMb` не передається під час виклику.
+- `pdfMaxPages`: типова максимальна кількість сторінок, що враховується режимом extraction fallback в інструменті `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, потім унікальний configured-provider match для точного model id, і лише після цього повертається до налаштованого default provider (застаріла поведінка сумісності, тому надавайте перевагу явному `provider/model`). Якщо цей провайдер більше не надає налаштовану модель за замовчуванням, OpenClaw повертається до першої налаштованої provider/model, а не показує застаріле типове значення видаленого провайдера.
+- `models`: налаштований каталог моделей і allowlist для `/model`. Кожен елемент може містити `alias` (скорочення) і `params` (специфічні для провайдера, наприклад `temperature`, `maxTokens`, `cacheRetention`, `context1m`).
+- `params`: глобальні типові параметри провайдера, що застосовуються до всіх моделей. Встановлюються в `agents.defaults.params` (наприклад `{ cacheRetention: "long" }`).
+- Пріоритет злиття `params` (config): `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 lists.
+- `maxConcurrent`: максимальна кількість паралельних запусків агентів між сесіями (кожна сесія все одно серіалізується). Типове значення: 4.
-**Вбудовані скорочення alias** (застосовуються лише тоді, коли модель є в `agents.defaults.models`):
+**Вбудовані shorthand-псевдоніми** (застосовуються лише тоді, коли модель є в `agents.defaults.models`):
-| Alias | Модель |
+| Alias | Model |
| ------------------- | -------------------------------------- |
| `opus` | `anthropic/claude-opus-4-6` |
| `sonnet` | `anthropic/claude-sonnet-4-6` |
@@ -1123,15 +1123,15 @@ IRC підтримується розширенням і налаштовуєт
| `gemini-flash` | `google/gemini-3-flash-preview` |
| `gemini-flash-lite` | `google/gemini-3.1-flash-lite-preview` |
-Ваші налаштовані alias завжди мають вищий пріоритет за типові.
+Ваші налаштовані alias-и завжди мають пріоритет над типовими.
-Моделі Z.AI GLM-4.x автоматично вмикають режим thinking, якщо ви не задасте `--thinking off` або самостійно не визначите `agents.defaults.models["zai/"].params.thinking`.
-Моделі Z.AI типово вмикають `tool_stream` для 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` для stream-ing викликів інструментів. Встановіть `agents.defaults.models["zai/"].params.tool_stream` у `false`, щоб вимкнути це.
+Для моделей Anthropic Claude 4.6 типово використовується thinking `adaptive`, коли явний рівень thinking не задано.
### `agents.defaults.cliBackends`
-Необов’язкові CLI backends для текстових fallback-запусків (без викликів інструментів). Корисно як резерв, коли API-постачальники недоступні.
+Необов’язкові CLI backends для резервних text-only запусків (без викликів інструментів). Корисно як backup, коли API providers зазнають невдачі.
```json5
{
@@ -1159,13 +1159,13 @@ IRC підтримується розширенням і налаштовуєт
}
```
-- CLI backends орієнтовані на текст; інструменти завжди вимкнені.
-- Сеанси підтримуються, коли задано `sessionArg`.
-- Наскрізна передача зображень підтримується, коли `imageArg` приймає шляхи до файлів.
+- CLI backends орієнтовані насамперед на текст; tools завжди вимкнені.
+- Sessions підтримуються, коли задано `sessionArg`.
+- Передавання зображень підтримується, коли `imageArg` приймає file paths.
### `agents.defaults.systemPromptOverride`
-Замінити весь системний prompt, зібраний OpenClaw, на фіксований рядок. Задається на типовому рівні (`agents.defaults.systemPromptOverride`) або для конкретного агента (`agents.list[].systemPromptOverride`). Значення для конкретного агента мають вищий пріоритет; порожнє або таке, що містить лише пробіли, значення ігнорується. Корисно для контрольованих експериментів із prompt.
+Замінює весь system prompt, зібраний OpenClaw, на фіксований рядок. Встановлюється на рівні default (`agents.defaults.systemPromptOverride`) або для окремого агента (`agents.list[].systemPromptOverride`). Значення для конкретного агента мають пріоритет; порожнє або таке, що складається лише з пробілів, значення ігнорується. Корисно для контрольованих експериментів із prompt.
```json5
{
@@ -1179,7 +1179,7 @@ IRC підтримується розширенням і налаштовуєт
### `agents.defaults.heartbeat`
-Періодичні запуски heartbeat.
+Періодичні heartbeat runs.
```json5
{
@@ -1189,14 +1189,14 @@ IRC підтримується розширенням і налаштовуєт
every: "30m", // 0m вимикає
model: "openai/gpt-5.4-mini",
includeReasoning: false,
- includeSystemPromptSection: true, // типово: true; false прибирає розділ Heartbeat із системного prompt
- lightContext: false, // типово: false; true залишає тільки HEARTBEAT.md з bootstrap-файлів workspace
- isolatedSession: false, // типово: false; true запускає кожен heartbeat у новому сеансі (без історії розмови)
+ includeSystemPromptSection: true, // типово: true; false прибирає секцію Heartbeat із system prompt
+ lightContext: false, // типово: false; true залишає лише HEARTBEAT.md з bootstrap files workspace
+ isolatedSession: false, // типово: false; true запускає кожен heartbeat у свіжій сесії (без історії розмови)
session: "main",
to: "+15555550123",
directPolicy: "allow", // allow (типово) | block
target: "none", // типово: none | варіанти: last | whatsapp | telegram | discord | ...
- prompt: "Прочитайте HEARTBEAT.md, якщо він існує...",
+ prompt: "Read HEARTBEAT.md if it exists...",
ackMaxChars: 300,
suppressToolErrorWarnings: false,
},
@@ -1205,14 +1205,14 @@ IRC підтримується розширенням і налаштовуєт
}
```
-- `every`: рядок тривалості (ms/s/m/h). Типово: `30m` (автентифікація API key) або `1h` (автентифікація OAuth). Задайте `0m`, щоб вимкнути.
-- `includeSystemPromptSection`: якщо false, прибирає розділ Heartbeat із системного prompt і пропускає вбудовування `HEARTBEAT.md` у bootstrap-контекст. Типово: `true`.
-- `suppressToolErrorWarnings`: якщо true, пригнічує payload-и попереджень про помилки інструментів під час запусків heartbeat.
-- `directPolicy`: політика прямої доставки/доставки в DM. `allow` (типово) дозволяє пряму доставку до цілі. `block` пригнічує пряму доставку до цілі й створює `reason=dm-blocked`.
-- `lightContext`: якщо true, запуски heartbeat використовують полегшений bootstrap-контекст і з bootstrap-файлів workspace залишають лише `HEARTBEAT.md`.
-- `isolatedSession`: якщо true, кожен heartbeat запускається в новому сеансі без попередньої історії розмови. Такий самий шаблон ізоляції, як і для cron `sessionTarget: "isolated"`. Зменшує вартість одного heartbeat із ~100K до ~2-5K токенів.
-- Для конкретного агента: задайте `agents.list[].heartbeat`. Якщо будь-який агент визначає `heartbeat`, heartbeat запускаються **лише для цих агентів**.
-- Heartbeat виконують повні ходи агента — менші інтервали витрачають більше токенів.
+- `every`: рядок тривалості (ms/s/m/h). Типове значення: `30m` (автентифікація API key) або `1h` (OAuth auth). Встановіть `0m`, щоб вимкнути.
+- `includeSystemPromptSection`: коли false, прибирає секцію Heartbeat із system prompt і пропускає вбудовування `HEARTBEAT.md` у bootstrap context. Типове значення: `true`.
+- `suppressToolErrorWarnings`: коли true, приглушує payload-и попереджень про помилки інструментів під час heartbeat runs.
+- `directPolicy`: політика direct/DM delivery. `allow` (типово) дозволяє direct-target delivery. `block` приглушує direct-target delivery і виводить `reason=dm-blocked`.
+- `lightContext`: коли true, heartbeat runs використовують полегшений bootstrap context і залишають лише `HEARTBEAT.md` із bootstrap files workspace.
+- `isolatedSession`: коли true, кожен heartbeat запускається в новій сесії без попередньої історії розмов. Та сама схема ізоляції, що й у cron `sessionTarget: "isolated"`. Зменшує вартість токенів одного heartbeat приблизно зі ~100K до ~2-5K токенів.
+- Для окремого агента: задайте `agents.list[].heartbeat`. Коли будь-який агент визначає `heartbeat`, heartbeat запускаються **лише для цих агентів**.
+- Heartbeat-и виконують повні ходи агента — коротші інтервали витрачають більше токенів.
### `agents.defaults.compaction`
@@ -1222,19 +1222,19 @@ IRC підтримується розширенням і налаштовуєт
defaults: {
compaction: {
mode: "safeguard", // default | safeguard
- provider: "my-provider", // id зареєстрованого плагіна постачальника compaction (необов’язково)
+ provider: "my-provider", // id зареєстрованого compaction provider plugin (необов’язково)
timeoutSeconds: 900,
reserveTokensFloor: 24000,
identifierPolicy: "strict", // strict | off | custom
- identifierInstructions: "Точно зберігайте deployment ID, ticket ID і пари host:port.", // використовується, коли identifierPolicy=custom
+ identifierInstructions: "Preserve deployment IDs, ticket IDs, and host:port pairs exactly.", // використовується, коли identifierPolicy=custom
postCompactionSections: ["Session Startup", "Red Lines"], // [] вимикає повторне вбудовування
model: "openrouter/anthropic/claude-sonnet-4-6", // необов’язкове перевизначення моделі лише для compaction
- notifyUser: true, // надіслати коротке повідомлення користувачу, коли починається compaction (типово: false)
+ notifyUser: true, // надсилати коротке повідомлення, коли починається compaction (типово: false)
memoryFlush: {
enabled: true,
softThresholdTokens: 6000,
- systemPrompt: "Сеанс наближається до compaction. Збережіть довготривалі спогади зараз.",
- prompt: "Запишіть усі стійкі нотатки до memory/YYYY-MM-DD.md; відповідайте точним silent token NO_REPLY, якщо нічого зберігати.",
+ systemPrompt: "Session nearing compaction. Store durable memories now.",
+ prompt: "Write any lasting notes to memory/YYYY-MM-DD.md; reply with the exact silent token NO_REPLY if nothing to store.",
},
},
},
@@ -1242,19 +1242,19 @@ IRC підтримується розширенням і налаштовуєт
}
```
-- `mode`: `default` або `safeguard` (покрокове підсумовування для довгих історій). Див. [Compaction](/uk/concepts/compaction).
-- `provider`: id зареєстрованого плагіна постачальника compaction. Коли задано, замість вбудованого LLM-підсумовування викликається `summarize()` постачальника. У разі помилки повертається до вбудованого механізму. Задання постачальника примусово встановлює `mode: "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` також приймаються як застарілий fallback.
-- `model`: необов’язкове перевизначення `provider/model-id` лише для підсумовування compaction. Використовуйте це, коли основний сеанс має залишатися на одній моделі, а підсумки compaction повинні виконуватися на іншій; якщо не задано, compaction використовує основну модель сеансу.
-- `notifyUser`: якщо `true`, надсилає користувачу коротке повідомлення, коли починається compaction (наприклад, "Compacting context..."). Типово вимкнено, щоб compaction залишався непомітним.
-- `memoryFlush`: тихий агентний хід перед auto-compaction для збереження довготривалих спогадів. Пропускається, якщо workspace доступний лише для читання.
+- `mode`: `default` або `safeguard` (узагальнення частинами для довгих історій). Див. [Compaction](/uk/concepts/compaction).
+- `provider`: id зареєстрованого compaction provider plugin. Якщо встановлено, викликається `summarize()` провайдера замість built-in LLM summarization. У разі помилки виконується fallback до built-in. Встановлення provider примушує `mode: "safeguard"`. Див. [Compaction](/uk/concepts/compaction).
+- `timeoutSeconds`: максимальна кількість секунд, дозволена для однієї операції compaction перед тим, як OpenClaw перерве її. Типове значення: `900`.
+- `identifierPolicy`: `strict` (типово), `off` або `custom`. `strict` додає built-in guidance для збереження opaque identifier перед compaction summarization.
+- `identifierInstructions`: необов’язковий користувацький текст для збереження identifier, який використовується, коли `identifierPolicy=custom`.
+- `postCompactionSections`: необов’язкові назви секцій H2/H3 з AGENTS.md, які треба повторно вбудувати після compaction. Типове значення — `["Session Startup", "Red Lines"]`; задайте `[]`, щоб вимкнути повторне вбудовування. Якщо значення не задано або явно встановлено саме цю типову пару, старі заголовки `Every Session`/`Safety` також приймаються як legacy fallback.
+- `model`: необов’язкове перевизначення `provider/model-id` лише для compaction summarization. Використовуйте це, коли основна сесія має залишатися на одній моделі, а compaction summaries повинні виконуватися на іншій; якщо не задано, compaction використовує primary model сесії.
+- `notifyUser`: коли `true`, надсилає користувачу коротке повідомлення, коли починається compaction (наприклад, "Compacting context..."). Типово вимкнено, щоб compaction був безшумним.
+- `memoryFlush`: тихий agentic turn перед auto-compaction для збереження довготривалої пам’яті. Пропускається, коли workspace доступний лише для читання.
### `agents.defaults.contextPruning`
-Обрізає **старі результати інструментів** з контексту в пам’яті перед надсиланням до LLM. **Не** змінює історію сеансу на диску.
+Обрізає **старі tool results** з in-memory context перед надсиланням до LLM. **Не** змінює історію сесії на диску.
```json5
{
@@ -1262,13 +1262,13 @@ IRC підтримується розширенням і налаштовуєт
defaults: {
contextPruning: {
mode: "cache-ttl", // off | cache-ttl
- ttl: "1h", // тривалість (ms/s/m/h), типова одиниця: хвилини
+ ttl: "1h", // тривалість (ms/s/m/h), одиниця за замовчуванням: хвилини
keepLastAssistants: 3,
softTrimRatio: 0.3,
hardClearRatio: 0.5,
minPrunableToolChars: 50000,
softTrim: { maxChars: 4000, headChars: 1500, tailChars: 1500 },
- hardClear: { enabled: true, placeholder: "[Вміст старого результату інструмента очищено]" },
+ hardClear: { enabled: true, placeholder: "[Old tool result content cleared]" },
tools: { deny: ["browser", "canvas"] },
},
},
@@ -1279,22 +1279,22 @@ IRC підтримується розширенням і налаштовуєт
- `mode: "cache-ttl"` вмикає проходи pruning.
-- `ttl` визначає, як часто pruning може запускатися повторно (після останнього дотику до cache).
-- Pruning спочатку м’яко обрізає завеликі результати інструментів, а потім жорстко очищає старіші результати інструментів, якщо потрібно.
+- `ttl` керує тим, як часто pruning може запускатися повторно (після останнього cache touch).
+- Pruning спочатку м’яко обрізає завеликі результати інструментів, а потім жорстко очищує старіші результати, якщо це потрібно.
-**Soft-trim** зберігає початок і кінець та вставляє `...` посередині.
+**Soft-trim** зберігає початок + кінець і вставляє `...` посередині.
**Hard-clear** замінює весь результат інструмента placeholder-ом.
Примітки:
-- Блоки зображень ніколи не обрізаються/очищаються.
-- Співвідношення базуються на символах (приблизно), а не на точних токенах.
-- Якщо існує менше ніж `keepLastAssistants` повідомлень асистента, pruning пропускається.
+- Image blocks ніколи не обрізаються/очищуються.
+- Співвідношення базуються на символах (приблизно), а не на точній кількості токенів.
+- Якщо є менше ніж `keepLastAssistants` assistant messages, pruning пропускається.
-Докладніше про поведінку див. [Session Pruning](/uk/concepts/session-pruning).
+Див. [Session Pruning](/uk/concepts/session-pruning) для подробиць поведінки.
### Block streaming
@@ -1312,13 +1312,13 @@ IRC підтримується розширенням і налаштовуєт
}
```
-- Канали, крім Telegram, потребують явного `*.blockStreaming: true`, щоб увімкнути block replies.
+- Канали, окрім Telegram, потребують явного `*.blockStreaming: true`, щоб увімкнути block replies.
- Перевизначення для каналу: `channels..blockStreamingCoalesce` (і варіанти для окремих облікових записів). Для Signal/Slack/Discord/Google Chat типово `minChars: 1500`.
- `humanDelay`: випадкова пауза між block replies. `natural` = 800–2500ms. Перевизначення для агента: `agents.list[].humanDelay`.
-Докладніше про поведінку та розбиття на частини див. [Streaming](/uk/concepts/streaming).
+Див. [Streaming](/uk/concepts/streaming) для поведінки та подробиць chunking.
-### Індикатори набору тексту
+### Typing indicators
```json5
{
@@ -1331,8 +1331,8 @@ IRC підтримується розширенням і налаштовуєт
}
```
-- Типові значення: `instant` для особистих чатів/згадок, `message` для групових чатів без згадки.
-- Перевизначення для сеансу: `session.typingMode`, `session.typingIntervalSeconds`.
+- Типові значення: `instant` для direct chats/mentions, `message` для group chats без згадки.
+- Перевизначення для сесії: `session.typingMode`, `session.typingIntervalSeconds`.
Див. [Typing Indicators](/uk/concepts/typing-indicators).
@@ -1340,7 +1340,7 @@ IRC підтримується розширенням і налаштовуєт
### `agents.defaults.sandbox`
-Необов’язковий sandboxing для вбудованого агента. Повний посібник див. у [Sandboxing](/uk/gateway/sandboxing).
+Необов’язкове sandboxing для вбудованого агента. Повний посібник див. в [Sandboxing](/uk/gateway/sandboxing).
```json5
{
@@ -1386,7 +1386,7 @@ IRC підтримується розширенням і налаштовуєт
identityFile: "~/.ssh/id_ed25519",
certificateFile: "~/.ssh/id_ed25519-cert.pub",
knownHostsFile: "~/.ssh/known_hosts",
- // Також підтримуються SecretRef / вбудований вміст:
+ // Також підтримуються SecretRef / inline contents:
// 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" },
@@ -1439,8 +1439,8 @@ IRC підтримується розширенням і налаштовуєт
**Backend:**
-- `docker`: локальний runtime Docker (типово)
-- `ssh`: універсальний віддалений runtime на основі SSH
+- `docker`: локальний Docker runtime (типово)
+- `ssh`: загальний віддалений runtime на базі SSH
- `openshell`: runtime OpenShell
Коли вибрано `backend: "openshell"`, налаштування, специфічні для runtime, переносяться до
@@ -1448,41 +1448,41 @@ IRC підтримується розширенням і налаштовуєт
**Конфігурація SSH backend:**
-- `target`: SSH-ціль у формі `user@host[:port]`
-- `command`: команда SSH-клієнта (типово: `ssh`)
-- `workspaceRoot`: абсолютний віддалений корінь, що використовується для workspace на кожен scope
-- `identityFile` / `certificateFile` / `knownHostsFile`: наявні локальні файли, що передаються в OpenSSH
-- `identityData` / `certificateData` / `knownHostsData`: вбудований вміст або SecretRef-и, які OpenClaw матеріалізує у тимчасові файли під час runtime
-- `strictHostKeyChecking` / `updateHostKeys`: параметри політики ключів хоста OpenSSH
+- `target`: SSH target у форматі `user@host[:port]`
+- `command`: команда SSH client (типово: `ssh`)
+- `workspaceRoot`: абсолютний віддалений root, що використовується для workspace-ів кожного scope
+- `identityFile` / `certificateFile` / `knownHostsFile`: наявні локальні файли, передані в OpenSSH
+- `identityData` / `certificateData` / `knownHostsData`: inline contents або SecretRef, які OpenClaw матеріалізує у temp files під час виконання
+- `strictHostKeyChecking` / `updateHostKeys`: параметри політики host-key OpenSSH
**Пріоритет SSH auth:**
- `identityData` має пріоритет над `identityFile`
- `certificateData` має пріоритет над `certificateFile`
- `knownHostsData` має пріоритет над `knownHostsFile`
-- Значення `*Data` на основі SecretRef визначаються з активного secrets runtime snapshot перед початком sandbox session
+- Значення `*Data` на базі SecretRef визначаються з активного secrets runtime snapshot перед запуском sandbox session
**Поведінка SSH backend:**
-- ініціалізує віддалений workspace один раз після створення або перевідтворення
-- потім зберігає віддалений SSH workspace канонічним
-- маршрутизує `exec`, файлові інструменти та шляхи до медіа через SSH
-- автоматично не синхронізує віддалені зміни назад на хост
+- ініціалізує remote workspace один раз після create або recreate
+- потім зберігає remote SSH workspace як канонічний
+- маршрутизує `exec`, file tools і media paths через SSH
+- не синхронізує remote changes назад на host автоматично
- не підтримує 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 агента монтується лише для читання в `/agent`
+- `rw`: workspace агента монтується для читання/запису в `/workspace`
**Scope:**
-- `session`: контейнер + workspace на сеанс
-- `agent`: один контейнер + workspace на агента (типово)
-- `shared`: спільний контейнер і workspace (без ізоляції між сеансами)
+- `session`: container + workspace для кожної сесії
+- `agent`: один container + workspace на агента (типово)
+- `shared`: спільний container і workspace (без ізоляції між сесіями)
-**Конфігурація плагіна OpenShell:**
+**Конфігурація plugin OpenShell:**
```json5
{
@@ -1510,30 +1510,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, але плагін володіє життєвим циклом sandbox і необов’язковою синхронізацією mirror.
+У режимі `remote` локальні зміни на host, зроблені поза OpenClaw, не синхронізуються в sandbox автоматично після етапу ініціалізації.
+Transport здійснюється через 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:"` типово заблоковано, якщо ви явно не встановите
-`sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true` (аварійний режим).
+**Типово containers використовують `network: "none"`** — встановіть `"bridge"` (або custom bridge network), якщо агенту потрібен вихід назовні.
+`"host"` блокується. `"container:"` типово блокується, якщо ви явно не встановите
+`sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true` (break-glass).
-**Вхідні вкладення** розміщуються у `media/inbound/*` в активному workspace.
+**Вхідні вкладення** staging-уються в `media/inbound/*` в активному workspace.
-**`docker.binds`** монтує додаткові каталоги хоста; глобальні та per-agent bind-и об’єднуються.
+**`docker.binds`** монтує додаткові каталоги host; global і per-agent binds зливаються.
-**Sandboxed browser** (`sandbox.browser.enabled`): Chromium + CDP у контейнері. URL noVNC вбудовується в системний prompt. Не потребує `browser.enabled` в `openclaw.json`.
-Доступ спостерігача noVNC типово використовує VNC auth, і OpenClaw видає короткоживучий token URL (замість відкриття пароля у спільному URL).
+**Sandboxed browser** (`sandbox.browser.enabled`): Chromium + CDP у container. URL noVNC вбудовується в system prompt. Не потребує `browser.enabled` в `openclaw.json`.
+Observer access через noVNC типово використовує VNC auth, а OpenClaw видає short-lived token URL (замість того, щоб показувати пароль у спільному URL).
-- `allowHostControl: false` (типово) блокує спроби sandboxed session-ів керувати браузером хоста.
-- `network` типово дорівнює `openclaw-sandbox-browser` (виділена bridge-мережа). Задавайте `bridge` лише тоді, коли вам явно потрібна глобальна bridge-зв’язність.
-- `cdpSourceRange` за потреби обмежує вхідний доступ CDP на межі контейнера до діапазону CIDR (наприклад `172.21.0.1/32`).
-- `sandbox.browser.binds` монтує додаткові каталоги хоста лише в контейнер sandbox browser. Коли його задано (включно з `[]`), він замінює `docker.binds` для контейнера браузера.
-- Типові параметри запуску визначені в `scripts/sandbox-browser-entrypoint.sh` і налаштовані для контейнерних хостів:
+- `allowHostControl: false` (типово) блокує націлення sandboxed sessions на browser host.
+- `network` типово дорівнює `openclaw-sandbox-browser` (виділена bridge network). Встановлюйте `bridge` лише тоді, коли вам явно потрібне глобальне bridge connectivity.
+- `cdpSourceRange` необов’язково обмежує CDP ingress на краю container до CIDR range (наприклад `172.21.0.1/32`).
+- `sandbox.browser.binds` монтує додаткові каталоги host лише в container sandbox browser. Якщо задано (включно з `[]`), він замінює `docker.binds` для container browser.
+- Типові параметри запуску визначені в `scripts/sandbox-browser-entrypoint.sh` і налаштовані для container hosts:
- `--remote-debugging-address=127.0.0.1`
- `--remote-debugging-port=`
- `--user-data-dir=${HOME}/.chrome`
@@ -1554,27 +1554,27 @@ IRC підтримується розширенням і налаштовуєт
- `--disable-3d-apis`, `--disable-software-rasterizer` і `--disable-gpu`
типово увімкнені й можуть бути вимкнені через
`OPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0`, якщо для WebGL/3D це потрібно.
- - `OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0` знову вмикає розширення, якщо ваш workflow
- від них залежить.
+ - `OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0` знову вмикає extensions, якщо вони
+ потрібні у вашому робочому процесі.
- `--renderer-process-limit=2` можна змінити через
- `OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=`; задайте `0`, щоб використовувати
- типове обмеження процесів Chromium.
- - плюс `--no-sandbox` і `--disable-setuid-sandbox`, коли ввімкнено `noSandbox`.
- - Типові значення є baseline образу контейнера; щоб змінити типові значення контейнера,
- використовуйте власний образ browser з власним entrypoint.
+ `OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=`; установіть `0`, щоб використовувати
+ типовий ліміт process Chromium.
+ - плюс `--no-sandbox` і `--disable-setuid-sandbox`, коли увімкнено `noSandbox`.
+ - Типові значення — це baseline container image; використовуйте custom browser image з custom
+ entrypoint, щоб змінити типові значення container.
-Browser sandboxing і `sandbox.docker.binds` наразі працюють лише з Docker.
+Browser sandboxing і `sandbox.docker.binds` доступні лише для Docker.
Збірка образів:
```bash
-scripts/sandbox-setup.sh # основний sandbox image
-scripts/sandbox-browser-setup.sh # необов’язковий browser image
+scripts/sandbox-setup.sh # основний образ sandbox
+scripts/sandbox-browser-setup.sh # необов’язковий образ browser
```
-### `agents.list` (перевизначення для конкретного агента)
+### `agents.list` (перевизначення для окремого агента)
```json5
{
@@ -1583,18 +1583,18 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser image
{
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 для агента
+ 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",
},
@@ -1623,25 +1623,25 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser image
```
- `id`: стабільний id агента (обов’язково).
-- `default`: якщо задано кілька, перемагає перший (логуватиметься попередження). Якщо не задано жодного, типовим є перший елемент списку.
-- `model`: форма рядка перевизначає лише `primary`; форма об’єкта `{ primary, fallbacks }` перевизначає обидва (`[]` вимикає глобальні fallback-и). Cron jobs, які перевизначають лише `primary`, усе одно успадковують типові fallback-и, якщо ви не задасте `fallbacks: []`.
-- `params`: параметри потоку для конкретного агента, які зливаються поверх вибраного запису моделі в `agents.defaults.models`. Використовуйте це для перевизначень на рівні агента, таких як `cacheRetention`, `temperature` або `maxTokens`, не дублюючи весь каталог моделей.
-- `skills`: необов’язковий allowlist skill-ів для конкретного агента. Якщо пропущено, агент успадковує `agents.defaults.skills`, коли воно задане; явний список замінює типові значення, а не зливається з ними, і `[]` означає відсутність skill-ів.
-- `thinkingDefault`: необов’язковий типовий рівень thinking для конкретного агента (`off | minimal | low | medium | high | xhigh | adaptive`). Перевизначає `agents.defaults.thinkingDefault` для цього агента, коли не задано перевизначення для повідомлення або сеансу.
-- `reasoningDefault`: необов’язкова типова видимість reasoning для конкретного агента (`on | off | stream`). Застосовується, коли не задано перевизначення reasoning для повідомлення або сеансу.
-- `fastModeDefault`: необов’язкове типове значення fast mode для конкретного агента (`true | false`). Застосовується, коли не задано перевизначення fast mode для повідомлення або сеансу.
-- `runtime`: необов’язковий дескриптор runtime для конкретного агента. Використовуйте `type: "acp"` з типовими значеннями `runtime.acp` (`agent`, `backend`, `mode`, `cwd`), коли агент має типово використовувати ACP harness sessions.
-- `identity.avatar`: шлях відносно workspace, `http(s)` URL або URI `data:`.
+- `default`: якщо встановлено для кількох, перший має пріоритет (реєструється попередження). Якщо не встановлено жодного, типовим є перший елемент списку.
+- `model`: рядкова форма перевизначає лише `primary`; форма об’єкта `{ primary, fallbacks }` перевизначає обидва (`[]` вимикає global fallbacks). Cron jobs, що перевизначають лише `primary`, усе ще успадковують default fallbacks, якщо ви не задасте `fallbacks: []`.
+- `params`: stream params для окремого агента, злиті поверх вибраного елемента моделі в `agents.defaults.models`. Використовуйте це для перевизначень на рівні агента, таких як `cacheRetention`, `temperature` або `maxTokens`, без дублювання всього каталогу моделей.
+- `skills`: необов’язковий allowlist Skills для окремого агента. Якщо пропущено, агент успадковує `agents.defaults.skills`, коли воно встановлено; явний список замінює типові значення, а не зливається з ними, а `[]` означає відсутність Skills.
+- `thinkingDefault`: необов’язковий типовий рівень thinking для агента (`off | minimal | low | medium | high | xhigh | adaptive`). Перевизначає `agents.defaults.thinkingDefault` для цього агента, коли не задано жодного перевизначення для повідомлення або сесії.
+- `reasoningDefault`: необов’язковий типовий рівень видимості reasoning (`on | off | stream`). Застосовується, коли не задано жодного перевизначення reasoning для повідомлення або сесії.
+- `fastModeDefault`: необов’язкове типове значення fast mode для агента (`true | false`). Застосовується, коли не задано жодного перевизначення fast-mode для повідомлення або сесії.
+- `runtime`: необов’язковий descriptor runtime для окремого агента. Використовуйте `type: "acp"` з defaults у `runtime.acp` (`agent`, `backend`, `mode`, `cwd`), коли агент має типово використовувати ACP harness sessions.
+- `identity.avatar`: шлях відносно workspace, `http(s)` URL або `data:` URI.
- `identity` виводить типові значення: `ackReaction` з `emoji`, `mentionPatterns` з `name`/`emoji`.
- `subagents.allowAgents`: allowlist id агентів для `sessions_spawn` (`["*"]` = будь-який; типово: лише той самий агент).
-- Захист успадкування sandbox: якщо сеанс-запитувач працює в sandbox, `sessions_spawn` відхиляє цілі, які працювали б без sandbox.
-- `subagents.requireAgentId`: коли true, блокує виклики `sessions_spawn`, у яких пропущено `agentId` (примушує явно вибирати профіль; типово false).
+- Захист успадкування sandbox: якщо requester session sandboxed, `sessions_spawn` відхиляє цілі, які працювали б без sandbox.
+- `subagents.requireAgentId`: коли true, блокує виклики `sessions_spawn`, у яких пропущено `agentId` (примушує явно вибирати profile; типово: false).
---
-## Маршрутизація багатьох агентів
+## Маршрутизація між кількома агентами
-Запускайте кілька ізольованих агентів в одному Gateway. Див. [Multi-Agent](/uk/concepts/multi-agent).
+Запускайте кількох ізольованих агентів в одному Gateway. Див. [Multi-Agent](/uk/concepts/multi-agent).
```json5
{
@@ -1658,13 +1658,13 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser image
}
```
-### Поля відповідності прив’язок
+### Поля відповідності binding
-- `type` (необов’язково): `route` для звичайної маршрутизації (якщо відсутній, типово route), `acp` для сталих ACP-прив’язок розмов.
+- `type` (необов’язково): `route` для звичайної маршрутизації (якщо type відсутній, типово використовується route), `acp` для постійних ACP conversation bindings.
- `match.channel` (обов’язково)
-- `match.accountId` (необов’язково; `*` = будь-який обліковий запис; пропущено = типовий обліковий запис)
+- `match.accountId` (необов’язково; `*` = будь-який обліковий запис; якщо пропущено = обліковий запис за замовчуванням)
- `match.peer` (необов’язково; `{ kind: direct|group|channel, id }`)
-- `match.guildId` / `match.teamId` (необов’язково; специфічно для каналу)
+- `match.guildId` / `match.teamId` (необов’язково; залежить від каналу)
- `acp` (необов’язково; лише для `type: "acp"`): `{ mode, label, cwd, backend }`
**Детермінований порядок відповідності:**
@@ -1673,14 +1673,14 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser image
2. `match.guildId`
3. `match.teamId`
4. `match.accountId` (точний, без peer/guild/team)
-5. `match.accountId: "*"` (для всього каналу)
-6. Типовий агент
+5. `match.accountId: "*"` (у межах усього каналу)
+6. Агент за замовчуванням
-У межах кожного рівня перемагає перший відповідний запис `bindings`.
+У межах кожного рівня перемагає перший запис `bindings`, що збігається.
-Для записів `type: "acp"` OpenClaw визначає збіг за точною ідентичністю розмови (`match.channel` + account + `match.peer.id`) і не використовує порядок рівнів route binding, описаний вище.
+Для записів `type: "acp"` OpenClaw виконує зіставлення за точною ідентичністю conversation (`match.channel` + account + `match.peer.id`) і не використовує наведену вище tier order для route binding.
-### Профілі доступу для конкретного агента
+### Профілі доступу для окремих агентів
@@ -1700,7 +1700,7 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser image
-
+
```json5
{
@@ -1729,7 +1729,7 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser image
-
+
```json5
{
@@ -1775,7 +1775,7 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser image
-Докладніше про пріоритети див. [Multi-Agent Sandbox & Tools](/uk/tools/multi-agent-sandbox-tools).
+Див. [Multi-Agent Sandbox & Tools](/uk/tools/multi-agent-sandbox-tools) для подробиць щодо пріоритетів.
---
@@ -1801,7 +1801,7 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser image
},
resetTriggers: ["/new", "/reset"],
store: "~/.openclaw/agents/{agentId}/sessions/sessions.json",
- parentForkMaxTokens: 100000, // пропустити fork батьківської гілки вище цього значення токенів (0 вимикає)
+ parentForkMaxTokens: 100000, // пропустити parent-thread fork вище цього ліміту токенів (0 вимикає)
maintenance: {
mode: "warn", // warn | enforce
pruneAfter: "30d",
@@ -1813,10 +1813,10 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser image
},
threadBindings: {
enabled: true,
- idleHours: 24, // типове auto-unfocus через неактивність у годинах (`0` вимикає)
+ idleHours: 24, // типове автоматичне unfocus через бездіяльність у годинах (`0` вимикає)
maxAgeHours: 0, // типовий жорсткий максимальний вік у годинах (`0` вимикає)
},
- mainKey: "main", // застаріле (runtime завжди використовує "main")
+ mainKey: "main", // legacy (runtime завжди використовує "main")
agentToAgent: { maxPingPongTurns: 5 },
sendPolicy: {
rules: [{ action: "deny", match: { channel: "discord", chatType: "group" } }],
@@ -1828,35 +1828,35 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser image
-- **`scope`**: базова стратегія групування сеансів для контекстів групових чатів.
- - `per-sender` (типово): кожен відправник отримує ізольований сеанс у межах контексту каналу.
- - `global`: усі учасники контексту каналу спільно використовують один сеанс (використовуйте лише тоді, коли потрібен спільний контекст).
+- **`scope`**: базова стратегія групування sessions для контекстів групового чату.
+ - `per-sender` (типово): кожен відправник отримує ізольовану session у межах контексту каналу.
+ - `global`: усі учасники контексту каналу поділяють одну session (використовуйте лише тоді, коли задумано спільний контекст).
- **`dmScope`**: як групуються DM.
- - `main`: усі DM використовують головний сеанс.
+ - `main`: усі DM використовують спільну main session.
- `per-peer`: ізоляція за id відправника між каналами.
- - `per-channel-peer`: ізоляція за каналом + відправником (рекомендовано для inbox з кількома користувачами).
+ - `per-channel-peer`: ізоляція за каналом + відправником (рекомендовано для inbox-ів із багатьма користувачами).
- `per-account-channel-peer`: ізоляція за обліковим записом + каналом + відправником (рекомендовано для багатообліковості).
-- **`identityLinks`**: зіставлення канонічних id з peer-ами з префіксом постачальника для спільного використання сеансу між каналами.
-- **`reset`**: основна політика reset. `daily` скидає о `atHour` за локальним часом; `idle` скидає після `idleMinutes`. Якщо налаштовано обидва, спрацьовує те, що закінчується раніше.
-- **`resetByType`**: перевизначення за типом (`direct`, `group`, `thread`). Застарілий `dm` приймається як псевдонім для `direct`.
-- **`parentForkMaxTokens`**: максимальне `totalTokens` батьківського сеансу, дозволене при створенні forked thread session (типово `100000`).
- - Якщо батьківський `totalTokens` перевищує це значення, OpenClaw запускає новий thread session замість успадкування історії transcript батьківського сеансу.
- - Задайте `0`, щоб вимкнути цей захист і завжди дозволяти fork батьківського сеансу.
-- **`mainKey`**: застаріле поле. Runtime тепер завжди використовує `"main"` для головного бакета direct chat.
-- **`agentToAgent.maxPingPongTurns`**: максимальна кількість reply-back ходів між агентами під час обміну agent-to-agent (ціле число, діапазон: `0`–`5`). `0` вимикає ping-pong chaining.
-- **`sendPolicy`**: збіг за `channel`, `chatType` (`direct|group|channel`, із застарілим псевдонімом `dm`), `keyPrefix` або `rawKeyPrefix`. Перший deny перемагає.
-- **`maintenance`**: очищення та контроль зберігання session-store.
- - `mode`: `warn` лише видає попередження; `enforce` застосовує очищення.
- - `pruneAfter`: віковий поріг для застарілих записів (типово `30d`).
+- **`identityLinks`**: мапа канонічних id до peer-ів із префіксом провайдера для спільного використання сесій між каналами.
+- **`reset`**: основна політика reset. `daily` скидає о `atHour` за місцевим часом; `idle` скидає після `idleMinutes`. Коли налаштовано обидва варіанти, перемагає той, чий термін настане раніше.
+- **`resetByType`**: перевизначення за типом (`direct`, `group`, `thread`). Застарілий `dm` приймається як alias для `direct`.
+- **`parentForkMaxTokens`**: максимальне значення `totalTokens` parent session, дозволене під час створення forked thread session (типово `100000`).
+ - Якщо `totalTokens` батьківської сесії перевищує це значення, OpenClaw запускає свіжу thread session замість успадкування parent transcript history.
+ - Встановіть `0`, щоб вимкнути цей захист і завжди дозволяти parent forking.
+- **`mainKey`**: застаріле поле. Runtime завжди використовує `"main"` для основного кошика direct-chat.
+- **`agentToAgent.maxPingPongTurns`**: максимальна кількість відповідей туди-сюди між агентами під час обміну agent-to-agent (ціле число, діапазон: `0`–`5`). `0` вимикає ping-pong chaining.
+- **`sendPolicy`**: зіставлення за `channel`, `chatType` (`direct|group|channel`, із legacy alias `dm`), `keyPrefix` або `rawKeyPrefix`. Перший deny має пріоритет.
+- **`maintenance`**: очищення + керування утриманням session-store.
+ - `mode`: `warn` лише генерує попередження; `enforce` застосовує очищення.
+ - `pruneAfter`: поріг віку для застарілих записів (типово `30d`).
- `maxEntries`: максимальна кількість записів у `sessions.json` (типово `500`).
- - `rotateBytes`: обертати `sessions.json`, коли він перевищує цей розмір (типово `10mb`).
- - `resetArchiveRetention`: строк зберігання архівів transcript `*.reset.`. Типово дорівнює `pruneAfter`; задайте `false`, щоб вимкнути.
- - `maxDiskBytes`: необов’язковий бюджет диска для каталогу сеансів. У режимі `warn` логуються попередження; у режимі `enforce` спочатку видаляються найстаріші артефакти/сеанси.
- - `highWaterBytes`: необов’язкова ціль після очищення бюджету. Типово `80%` від `maxDiskBytes`.
-- **`threadBindings`**: глобальні типові значення для функцій сеансів, прив’язаних до гілок.
- - `enabled`: головний типовий перемикач (постачальники можуть перевизначати; Discord використовує `channels.discord.threadBindings.enabled`)
- - `idleHours`: типове auto-unfocus через неактивність у годинах (`0` вимикає; постачальники можуть перевизначати)
- - `maxAgeHours`: типовий жорсткий максимальний вік у годинах (`0` вимикає; постачальники можуть перевизначати)
+ - `rotateBytes`: ротація `sessions.json`, коли він перевищує цей розмір (типово `10mb`).
+ - `resetArchiveRetention`: термін зберігання archive transcript `*.reset.`. Типово дорівнює `pruneAfter`; задайте `false`, щоб вимкнути.
+ - `maxDiskBytes`: необов’язковий дисковий бюджет для каталогу sessions. У режимі `warn` просто журналює попередження; у режимі `enforce` спочатку видаляє найстаріші artifacts/sessions.
+ - `highWaterBytes`: необов’язкова ціль після очищення за бюджетом. Типово `80%` від `maxDiskBytes`.
+- **`threadBindings`**: глобальні типові значення для можливостей сесій, прив’язаних до thread.
+ - `enabled`: основний типовий перемикач (провайдери можуть перевизначити; Discord використовує `channels.discord.threadBindings.enabled`)
+ - `idleHours`: типове автоматичне unfocus через бездіяльність у годинах (`0` вимикає; провайдери можуть перевизначити)
+ - `maxAgeHours`: типовий жорсткий максимальний вік у годинах (`0` вимикає; провайдери можуть перевизначити)
@@ -1894,36 +1894,36 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser image
### Префікс відповіді
-Перевизначення для каналу/облікового запису: `channels..responsePrefix`, `channels..accounts..responsePrefix`.
+Перевизначення на рівні каналу/облікового запису: `channels..responsePrefix`, `channels..accounts..responsePrefix`.
-Розв’язання (перемагає найспецифічніше): обліковий запис → канал → глобально. `""` вимикає та зупиняє каскад. `"auto"` виводить `[{identity.name}]`.
+Порядок визначення (найспецифічніше перемагає): account → channel → global. `""` вимикає й зупиняє 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}`| Назва identity агента | (те саме, що `"auto"`) |
-Змінні нечутливі до регістру. `{think}` — псевдонім для `{thinkingLevel}`.
+Змінні нечутливі до регістру. `{think}` — alias для `{thinkingLevel}`.
### Ack reaction
-- Типово береться з `identity.emoji` активного агента, інакше `"👀"`. Задайте `""`, щоб вимкнути.
-- Перевизначення для каналу: `channels..ackReaction`, `channels..accounts..ackReaction`.
-- Порядок розв’язання: обліковий запис → канал → `messages.ackReaction` → резервне значення identity.
+- Типово береться з `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 reaction.
- У Telegram задайте це явно в `true`, щоб увімкнути статусні реакції життєвого циклу.
+- `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.
-### Вхідний debounce
+### Inbound debounce
-Об’єднує швидкі текстові повідомлення від одного відправника в один хід агента. Media/attachments негайно скидаються. Команди керування обходять debounce.
+Об’єднує швидкі text-only messages від того самого відправника в один хід агента. Media/attachments скидаються негайно. Команди керування обходять debouncing.
### TTS (text-to-speech)
@@ -1966,12 +1966,12 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser image
}
```
-- `auto` керує типовим режимом auto-TTS: `off`, `always`, `inbound` або `tagged`. `/tts on|off` може перевизначати локальні налаштування, а `/tts status` показує ефективний стан.
+- `auto` керує типовим режимом auto-TTS: `off`, `always`, `inbound` або `tagged`. `/tts on|off` може перевизначити локальні prefs, а `/tts status` показує фактичний стан.
- `summaryModel` перевизначає `agents.defaults.model.primary` для auto-summary.
-- `modelOverrides` типово увімкнено; `modelOverrides.allowProvider` типово `false` (opt-in).
-- API key резервно беруться з `ELEVENLABS_API_KEY`/`XI_API_KEY` і `OPENAI_API_KEY`.
-- `openai.baseUrl` перевизначає endpoint TTS OpenAI. Порядок розв’язання: конфігурація, потім `OPENAI_TTS_BASE_URL`, потім `https://api.openai.com/v1`.
-- Коли `openai.baseUrl` вказує на endpoint, відмінний від OpenAI, OpenClaw обробляє його як OpenAI-compatible TTS server і послаблює валідацію model/voice.
+- `modelOverrides` типово увімкнено; `modelOverrides.allowProvider` типово має значення `false` (потрібне явне увімкнення).
+- API keys повертаються до `ELEVENLABS_API_KEY`/`XI_API_KEY` і `OPENAI_API_KEY`.
+- `openai.baseUrl` перевизначає endpoint TTS OpenAI. Порядок визначення: config, потім `OPENAI_TTS_BASE_URL`, потім `https://api.openai.com/v1`.
+- Коли `openai.baseUrl` вказує на не-OpenAI endpoint, OpenClaw розглядає його як OpenAI-compatible TTS server і послаблює перевірку model/voice.
---
@@ -2001,51 +2001,51 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser image
}
```
-- `talk.provider` має збігатися з ключем у `talk.providers`, коли налаштовано кілька постачальників Talk.
-- Застарілі плоскі ключі Talk (`talk.voiceId`, `talk.voiceAliases`, `talk.modelId`, `talk.outputFormat`, `talk.apiKey`) призначені лише для сумісності та автоматично мігруються в `talk.providers.`.
-- Voice ID резервно беруться з `ELEVENLABS_VOICE_ID` або `SAG_VOICE_ID`.
-- `providers.*.apiKey` приймає відкриті рядки або об’єкти SecretRef.
-- Резервне `ELEVENLABS_API_KEY` застосовується лише тоді, коли API key Talk не налаштований.
+- `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` приймає plaintext strings або об’єкти SecretRef.
+- Fallback `ELEVENLABS_API_KEY` застосовується лише тоді, коли не налаштовано Talk API key.
- `providers.*.voiceAliases` дозволяє директивам Talk використовувати дружні назви.
-- `silenceTimeoutMs` визначає, скільки режим Talk чекає після мовчання користувача, перш ніж надіслати transcript. Якщо не задано, зберігається типове платформне вікно паузи (`700 ms на macOS і Android, 900 ms на iOS`).
+- `silenceTimeoutMs` керує тим, скільки Talk mode чекає після тиші користувача перед надсиланням transcript. Якщо не встановлено, зберігається типове platform pause window (`700 ms на macOS і Android, 900 ms на iOS`).
---
-## Інструменти
+## Tools
### Профілі інструментів
`tools.profile` задає базовий allowlist перед `tools.allow`/`tools.deny`:
-Локальний onboarding типово встановлює `tools.profile: "coding"` для нових локальних конфігурацій, якщо значення не задано (наявні явні профілі зберігаються).
+Під час локального onboarding нові локальні конфігурації типово отримують `tools.profile: "coding"`, якщо значення не встановлено (наявні явні профілі зберігаються).
-| Профіль | Включає |
+| Профіль | Містить |
| ----------- | ------------------------------------------------------------------------------------------------------------------------------- |
| `minimal` | лише `session_status` |
| `coding` | `group:fs`, `group:runtime`, `group:web`, `group:sessions`, `group:memory`, `cron`, `image`, `image_generate`, `video_generate` |
| `messaging` | `group:messaging`, `sessions_list`, `sessions_history`, `sessions_send`, `session_status` |
-| `full` | Без обмежень (те саме, що не задавати) |
+| `full` | Без обмежень (так само, як і коли не задано) |
### Групи інструментів
-| Група | Інструменти |
-| ----------------- | ---------------------------------------------------------------------------------------------------------------------- |
-| `group:runtime` | `exec`, `process`, `code_execution` (`bash` приймається як псевдонім для `exec`) |
-| `group:fs` | `read`, `write`, `edit`, `apply_patch` |
+| Група | Інструменти |
+| ----------------- | -------------------------------------------------------------------------------------------------------------------------- |
+| `group: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 plugin-ів) |
+| `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` | Усі built-in tools (без provider plugins) |
### `tools.allow` / `tools.deny`
-Глобальна політика allow/deny для інструментів (deny має пріоритет). Нечутлива до регістру, підтримує `*` wildcard-и. Застосовується навіть коли sandbox Docker вимкнено.
+Глобальна політика allow/deny для інструментів (deny має пріоритет). Нечутлива до регістру, підтримує wildcard-и `*`. Застосовується, навіть коли Docker sandbox вимкнено.
```json5
{
@@ -2055,7 +2055,7 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser image
### `tools.byProvider`
-Додатково обмежує інструменти для конкретних постачальників або моделей. Порядок: базовий профіль → профіль постачальника → allow/deny.
+Додатково обмежує інструменти для конкретних провайдерів або моделей. Порядок: base profile → provider profile → allow/deny.
```json5
{
@@ -2071,7 +2071,7 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser image
### `tools.elevated`
-Керує elevated exec-доступом поза sandbox:
+Керує elevated exec access поза sandbox:
```json5
{
@@ -2087,9 +2087,9 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser image
}
```
-- Перевизначення для конкретного агента (`agents.list[].tools.elevated`) може лише додатково обмежувати.
-- `/elevated on|off|ask|full` зберігає стан для кожного сеансу; inline-директиви застосовуються до одного повідомлення.
-- Elevated `exec` обходить sandboxing і використовує налаштований escape path (`gateway` типово або `node`, коли ціллю exec є `node`).
+- Перевизначення на рівні агента (`agents.list[].tools.elevated`) може лише додатково обмежувати.
+- `/elevated on|off|ask|full` зберігає стан для кожної сесії; inline directives застосовуються до одного повідомлення.
+- Elevated `exec` обходить sandboxing і використовує налаштований escape path (`gateway` типово або `node`, коли exec target дорівнює `node`).
### `tools.exec`
@@ -2113,8 +2113,8 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser image
### `tools.loopDetection`
-Перевірки безпеки loop для інструментів **типово вимкнені**. Задайте `enabled: true`, щоб увімкнути виявлення.
-Налаштування можна визначити глобально в `tools.loopDetection` і перевизначати для конкретного агента в `agents.list[].tools.loopDetection`.
+Перевірки безпеки loop для інструментів **типово вимкнені**. Встановіть `enabled: true`, щоб активувати виявлення.
+Налаштування можна визначити глобально в `tools.loopDetection` і перевизначити для окремого агента в `agents.list[].tools.loopDetection`.
```json5
{
@@ -2135,14 +2135,14 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser image
}
```
-- `historySize`: максимальний розмір історії викликів інструментів, що зберігається для аналізу loop.
+- `historySize`: максимальна історія викликів інструментів, яка зберігається для аналізу loop.
- `warningThreshold`: поріг повторюваних шаблонів без прогресу для попереджень.
- `criticalThreshold`: вищий поріг повторень для блокування критичних loop.
- `globalCircuitBreakerThreshold`: жорсткий поріг зупинки для будь-якого запуску без прогресу.
-- `detectors.genericRepeat`: попереджати про повторні виклики того самого інструмента з тими самими аргументами.
-- `detectors.knownPollNoProgress`: попереджати/блокувати відомі polling tools (`process.poll`, `command_status` тощо).
+- `detectors.genericRepeat`: попереджати про повторні виклики одного й того самого інструмента з однаковими аргументами.
+- `detectors.knownPollNoProgress`: попереджати/блокувати відомі poll tools (`process.poll`, `command_status` тощо).
- `detectors.pingPong`: попереджати/блокувати чергування парних шаблонів без прогресу.
-- Якщо `warningThreshold >= criticalThreshold` або `criticalThreshold >= globalCircuitBreakerThreshold`, валідація не проходить.
+- Якщо `warningThreshold >= criticalThreshold` або `criticalThreshold >= globalCircuitBreakerThreshold`, валідація завершується помилкою.
### `tools.web`
@@ -2184,7 +2184,7 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser image
media: {
concurrency: 2,
asyncCompletion: {
- directSend: false, // opt-in: надсилати завершені async music/video безпосередньо в канал
+ directSend: false, // opt-in: надсилати завершені async music/video напряму в канал
},
audio: {
enabled: true,
@@ -2210,30 +2210,30 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser image
-**Запис постачальника** (`type: "provider"` або пропущено):
+**Запис провайдера** (`type: "provider"` або пропущено):
-- `provider`: id API-постачальника (`openai`, `anthropic`, `google`/`gemini`, `groq` тощо)
-- `model`: перевизначення id моделі
-- `profile` / `preferredProfile`: вибір профілю `auth-profiles.json`
+- `provider`: id API-провайдера (`openai`, `anthropic`, `google`/`gemini`, `groq` тощо)
+- `model`: перевизначення model id
+- `profile` / `preferredProfile`: вибір profile з `auth-profiles.json`
-**Запис CLI** (`type: "cli"`):
+**CLI entry** (`type: "cli"`):
-- `command`: виконуваний файл для запуску
+- `command`: executable для запуску
- `args`: шаблонізовані аргументи (підтримує `{{MediaPath}}`, `{{Prompt}}`, `{{MaxChars}}` тощо)
**Спільні поля:**
-- `capabilities`: необов’язковий список (`image`, `audio`, `video`). Типово: `openai`/`anthropic`/`minimax` → image, `google` → image+audio+video, `groq` → audio.
-- `prompt`, `maxChars`, `maxBytes`, `timeoutSeconds`, `language`: перевизначення для конкретного запису.
-- У разі помилки використовується наступний запис.
+- `capabilities`: необов’язковий список (`image`, `audio`, `video`). Типові значення: `openai`/`anthropic`/`minimax` → image, `google` → image+audio+video, `groq` → audio.
+- `prompt`, `maxChars`, `maxBytes`, `timeoutSeconds`, `language`: перевизначення для конкретного entry.
+- У разі помилки виконується fallback до наступного entry.
-Автентифікація постачальника виконується у стандартному порядку: `auth-profiles.json` → env vars → `models.providers.*.apiKey`.
+Provider auth дотримується стандартного порядку: `auth-profiles.json` → env vars → `models.providers.*.apiKey`.
**Поля async completion:**
-- `asyncCompletion.directSend`: коли `true`, завершені async-задачі `music_generate`
- і `video_generate` спочатку намагаються доставлятися безпосередньо в канал. Типово: `false`
- (застарілий шлях пробудження requester-session/model-delivery).
+- `asyncCompletion.directSend`: коли `true`, завершені async-завдання `music_generate`
+ і `video_generate` спочатку намагаються доставити результат напряму в канал. Типове значення: `false`
+ (legacy шлях requester-session wake/model-delivery).
@@ -2252,9 +2252,9 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser image
### `tools.sessions`
-Керує тим, які сеанси можуть бути ціллю для session tools (`sessions_list`, `sessions_history`, `sessions_send`).
+Керує тим, на які sessions можуть націлюватися session tools (`sessions_list`, `sessions_history`, `sessions_send`).
-Типово: `tree` (поточний сеанс + сеанси, породжені ним, наприклад subagents).
+Типове значення: `tree` (поточна session + sessions, породжені нею, наприклад subagents).
```json5
{
@@ -2269,26 +2269,26 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser image
Примітки:
-- `self`: лише поточний ключ сеансу.
-- `tree`: поточний сеанс + сеанси, породжені поточним сеансом (subagents).
-- `agent`: будь-який сеанс, що належить поточному id агента (може включати інших користувачів, якщо ви використовуєте сеанси per-sender під тим самим id агента).
-- `all`: будь-який сеанс. Націлення між агентами все одно потребує `tools.agentToAgent`.
-- Sandbox clamp: коли поточний сеанс працює в sandbox і `agents.defaults.sandbox.sessionToolsVisibility="spawned"`, visibility примусово стає `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 sandboxed і `agents.defaults.sandbox.sessionToolsVisibility="spawned"`, visibility примусово встановлюється в `tree`, навіть якщо `tools.sessions.visibility="all"`.
### `tools.sessions_spawn`
-Керує підтримкою inline-вкладень для `sessions_spawn`.
+Керує підтримкою inline attachments для `sessions_spawn`.
```json5
{
tools: {
sessions_spawn: {
attachments: {
- enabled: false, // opt-in: задайте true, щоб дозволити inline file attachments
+ enabled: false, // opt-in: встановіть true, щоб дозволити inline file attachments
maxTotalBytes: 5242880, // 5 MB загалом для всіх файлів
maxFiles: 50,
maxFileBytes: 1048576, // 1 MB на файл
- retainOnSessionKeep: false, // зберігати вкладення, коли cleanup="keep"
+ retainOnSessionKeep: false, // зберігати attachments, коли cleanup="keep"
},
},
},
@@ -2297,16 +2297,16 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser image
Примітки:
-- Вкладення підтримуються лише для `runtime: "subagent"`. Runtime ACP їх відхиляє.
-- Файли матеріалізуються в child workspace у `.openclaw/attachments//` із `.manifest.json`.
-- Вміст вкладень автоматично редагується в збереженні transcript.
-- Входи Base64 перевіряються з суворою перевіркою алфавіту/відступів і захистом розміру до декодування.
-- Права доступу до файлів: `0700` для каталогів і `0600` для файлів.
-- Очищення слідує політиці `cleanup`: `delete` завжди видаляє вкладення; `keep` зберігає їх лише коли `retainOnSessionKeep: true`.
+- Attachments підтримуються лише для `runtime: "subagent"`. Runtime ACP їх відхиляє.
+- Файли матеріалізуються в child workspace у `.openclaw/attachments//` з `.manifest.json`.
+- Вміст attachment автоматично редагується в transcript persistence.
+- Base64 inputs перевіряються за допомогою суворих перевірок alphabet/padding і guard-а розміру до декодування.
+- Дозволи на файли: `0700` для каталогів і `0600` для файлів.
+- Очищення дотримується політики `cleanup`: `delete` завжди видаляє attachments; `keep` зберігає їх лише тоді, коли `retainOnSessionKeep: true`.
### `tools.experimental`
-Експериментальні прапорці вбудованих інструментів. Типово вимкнено, якщо не діє правило авто-вмикання, специфічне для runtime.
+Експериментальні built-in flags для інструментів. Типово вимкнено, якщо не діє runtime-specific правило auto-enable.
```json5
{
@@ -2321,8 +2321,8 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser image
Примітки:
- `planTool`: вмикає структурований інструмент `update_plan` для відстеження нетривіальної багатокрокової роботи.
-- Типово: `false` для постачальників, відмінних від OpenAI. Запуски OpenAI і OpenAI Codex автоматично вмикають його, якщо значення не задано; задайте `false`, щоб вимкнути це авто-вмикання.
-- Коли увімкнено, системний prompt також додає інструкції з використання, щоб модель застосовувала його лише для суттєвої роботи й тримала щонайбільше один крок у стані `in_progress`.
+- Типове значення: `false` для не-OpenAI провайдерів. Запуски OpenAI і OpenAI Codex автоматично вмикають його, якщо значення не задано; встановіть `false`, щоб вимкнути це автоувімкнення.
+- Коли увімкнено, system prompt також додає guidance щодо використання, щоб модель використовувала його лише для суттєвої роботи й тримала не більше одного кроку в стані `in_progress`.
### `agents.defaults.subagents`
@@ -2342,16 +2342,16 @@ scripts/sandbox-browser-setup.sh # необов’язковий browser image
}
```
-- `model`: типова модель для spawned sub-agents. Якщо пропущено, sub-agents успадковують модель виклику.
-- `allowAgents`: типовий allowlist цільових id агентів для `sessions_spawn`, коли агент-запитувач не задає власний `subagents.allowAgents` (`["*"]` = будь-який; типово: лише той самий агент).
-- `runTimeoutSeconds`: типовий тайм-аут (секунди) для `sessions_spawn`, коли виклик інструмента не передає `runTimeoutSeconds`. `0` означає відсутність тайм-ауту.
+- `model`: типова модель для spawned sub-agents. Якщо пропущено, sub-agents успадковують модель викликача.
+- `allowAgents`: типовий allowlist target agent ids для `sessions_spawn`, коли requester agent не задає власний `subagents.allowAgents` (`["*"]` = будь-який; типово: лише той самий агент).
+- `runTimeoutSeconds`: типовий timeout (секунди) для `sessions_spawn`, коли виклик інструмента пропускає `runTimeoutSeconds`. `0` означає відсутність timeout.
- Політика інструментів для subagent: `tools.subagents.tools.allow` / `tools.subagents.tools.deny`.
---
-## Кастомні постачальники та base URL
+## Custom providers і base URLs
-OpenClaw використовує вбудований каталог моделей. Додавайте кастомних постачальників через `models.providers` у конфігурації або `~/.openclaw/agents//agent/models.json`.
+OpenClaw використовує built-in model catalog. Додавайте custom providers через `models.providers` у config або `~/.openclaw/agents//agent/models.json`.
```json5
{
@@ -2380,49 +2380,49 @@ OpenClaw використовує вбудований каталог модел
}
```
-- Використовуйте `authHeader: true` + `headers` для спеціальних потреб автентифікації.
-- Перевизначайте корінь конфігурації агента через `OPENCLAW_AGENT_DIR` (або `PI_CODING_AGENT_DIR`, застарілий псевдонім змінної середовища).
-- Пріоритет злиття для однакових ID постачальників:
+- Використовуйте `authHeader: true` + `headers` для custom auth.
+- Перевизначайте корінь agent config через `OPENCLAW_AGENT_DIR` (або `PI_CODING_AGENT_DIR`, застарілий alias environment variable).
+- Пріоритет злиття для однакових provider IDs:
- Непорожні значення `baseUrl` в agent `models.json` мають пріоритет.
- - Непорожні значення `apiKey` в agent мають пріоритет лише тоді, коли цей постачальник не керується через SecretRef у поточному контексті config/auth-profile.
- - Значення `apiKey` постачальника, керовані SecretRef, оновлюються з маркерів джерела (`ENV_VAR_NAME` для env refs, `secretref-managed` для file/exec refs) замість збереження розв’язаних secret-ів.
- - Значення заголовків постачальника, керовані SecretRef, оновлюються з маркерів джерела (`secretref-env:ENV_VAR_NAME` для env refs, `secretref-managed` для file/exec refs).
- - Порожні або відсутні `apiKey`/`baseUrl` в agent повертаються до `models.providers` у конфігурації.
- - Для однакових моделей `contextWindow`/`maxTokens` використовують вище значення між явною конфігурацією та неявними значеннями каталогу.
- - Для однакових моделей `contextTokens` зберігає явне runtime-обмеження, якщо воно є; використовуйте його, щоб обмежити ефективний контекст без зміни нативних метаданих моделі.
- - Використовуйте `models.mode: "replace"`, якщо хочете, щоб конфігурація повністю переписала `models.json`.
- - Збереження маркерів є авторитетним із боку джерела: маркери записуються з активного snapshot конфігурації джерела (до розв’язання), а не з розв’язаних runtime secret values.
+ - Непорожні значення `apiKey` в agent мають пріоритет лише тоді, коли цим provider-ом не керує SecretRef у поточному контексті config/auth-profile.
+ - Значення `apiKey` provider-а під керуванням SecretRef оновлюються з source markers (`ENV_VAR_NAME` для env refs, `secretref-managed` для file/exec refs) замість збереження визначених секретів.
+ - Значення header provider-а під керуванням SecretRef оновлюються з source markers (`secretref-env:ENV_VAR_NAME` для env refs, `secretref-managed` для file/exec refs).
+ - Порожні або відсутні значення `apiKey`/`baseUrl` в agent повертаються до `models.providers` у config.
+ - Однакові значення `contextWindow`/`maxTokens` для model використовують вище значення між явним config і неявними значеннями catalog.
+ - Для однакових model `contextTokens` зберігається явний runtime cap, якщо він присутній; використовуйте його, щоб обмежити фактичний context без зміни native model metadata.
+ - Використовуйте `models.mode: "replace"`, коли хочете, щоб config повністю переписав `models.json`.
+ - Marker persistence є source-authoritative: markers записуються з active source config snapshot (до resolution), а не з визначених 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.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`: base URL API upstream.
+- `models.mode`: поведінка provider catalog (`merge` або `replace`).
+- `models.providers`: мапа custom provider-ів за ключем provider id.
+- `models.providers.*.api`: request adapter (`openai-completions`, `openai-responses`, `anthropic-messages`, `google-generative-ai` тощо).
+- `models.providers.*.apiKey`: credential провайдера (краще використовувати SecretRef/env substitution).
+- `models.providers.*.auth`: стратегія auth (`api-key`, `token`, `oauth`, `aws-sdk`).
+- `models.providers.*.injectNumCtxForOpenAICompat`: для Ollama + `openai-completions` додає `options.num_ctx` у requests (типово: `true`).
+- `models.providers.*.authHeader`: примусово передавати credential у заголовку `Authorization`, коли це потрібно.
+- `models.providers.*.baseUrl`: base URL upstream API.
- `models.providers.*.headers`: додаткові статичні заголовки для proxy/tenant routing.
-- `models.providers.*.request`: перевизначення транспорту для HTTP-запитів model-provider.
- - `request.headers`: додаткові заголовки (зливаються з типовими значеннями постачальника). Значення приймають SecretRef.
- - `request.auth`: перевизначення стратегії auth. Режими: `"provider-default"` (використовувати вбудовану auth постачальника), `"authorization-bearer"` (з `token`), `"header"` (з `headerName`, `value`, необов’язковим `prefix`).
- - `request.proxy`: перевизначення HTTP proxy. Режими: `"env-proxy"` (використовувати env vars `HTTP_PROXY`/`HTTPS_PROXY`), `"explicit-proxy"` (з `url`). Обидва режими приймають необов’язковий підоб’єкт `tls`.
+- `models.providers.*.request`: transport overrides для HTTP-запитів провайдера моделей.
+ - `request.headers`: додаткові заголовки (зливаються з типовими заголовками провайдера). Значення приймають SecretRef.
+ - `request.auth`: перевизначення auth strategy. Режими: `"provider-default"` (використовувати built-in 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-обмеження контексту. Використовуйте це, коли хочете менший ефективний бюджет контексту, ніж нативний `contextWindow` моделі.
-- `models.providers.*.models.*.compat.supportsDeveloperRole`: необов’язкова підказка сумісності. Для `api: "openai-completions"` із непорожнім ненативним `baseUrl` (host не `api.openai.com`) OpenClaw примусово встановлює це в `false` під час runtime. Порожній/пропущений `baseUrl` зберігає типову поведінку OpenAI.
-- `models.providers.*.models.*.compat.requiresStringContent`: необов’язкова підказка сумісності для OpenAI-compatible chat endpoint-ів, що приймають лише рядок. Коли `true`, OpenClaw сплющує чисто текстові масиви `messages[].content` у звичайні рядки перед надсиланням запиту.
-- `plugins.entries.amazon-bedrock.config.discovery`: корінь налаштувань auto-discovery для Bedrock.
+- `models.providers.*.models`: явні записи model catalog провайдера.
+- `models.providers.*.models.*.contextWindow`: метадані native model context window.
+- `models.providers.*.models.*.contextTokens`: необов’язковий runtime context cap. Використовуйте це, коли вам потрібен менший фактичний budget context, ніж native `contextWindow` моделі.
+- `models.providers.*.models.*.compat.supportsDeveloperRole`: необов’язкова підказка сумісності. Для `api: "openai-completions"` з непорожнім ненативним `baseUrl` (host не `api.openai.com`) OpenClaw примусово встановлює це значення в `false` під час виконання. Порожній/пропущений `baseUrl` зберігає типову поведінку OpenAI.
+- `models.providers.*.models.*.compat.requiresStringContent`: необов’язкова підказка сумісності для OpenAI-compatible chat endpoint-ів, що підтримують лише рядки. Коли `true`, OpenClaw сплющує чисто текстові масиви `messages[].content` у звичайні рядки перед надсиланням request.
+- `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`: інтервал polling для оновлення discovery.
-- `plugins.entries.amazon-bedrock.config.discovery.defaultContextWindow`: резервне context window для виявлених моделей.
-- `plugins.entries.amazon-bedrock.config.discovery.defaultMaxTokens`: резервне максимальне число вихідних токенів для виявлених моделей.
+- `plugins.entries.amazon-bedrock.config.discovery.defaultContextWindow`: fallback context window для виявлених моделей.
+- `plugins.entries.amazon-bedrock.config.discovery.defaultMaxTokens`: fallback max output tokens для виявлених моделей.
-### Приклади постачальників
+### Приклади provider-ів
@@ -2475,7 +2475,7 @@ OpenClaw використовує вбудований каталог модел
}
```
-Задайте `OPENCODE_API_KEY` (або `OPENCODE_ZEN_API_KEY`). Використовуйте посилання `opencode/...` для каталогу Zen або `opencode-go/...` для каталогу Go. Скорочення: `openclaw onboard --auth-choice opencode-zen` або `openclaw onboard --auth-choice opencode-go`.
+Встановіть `OPENCODE_API_KEY` (або `OPENCODE_ZEN_API_KEY`). Використовуйте посилання `opencode/...` для каталогу Zen або `opencode-go/...` для каталогу Go. Скорочення: `openclaw onboard --auth-choice opencode-zen` або `openclaw onboard --auth-choice opencode-go`.
@@ -2492,11 +2492,11 @@ OpenClaw використовує вбудований каталог модел
}
```
-Задайте `ZAI_API_KEY`. `z.ai/*` і `z-ai/*` приймаються як псевдоніми. Скорочення: `openclaw onboard --auth-choice zai-api-key`.
+Встановіть `ZAI_API_KEY`. Приймаються alias-и `z.ai/*` і `z-ai/*`. Скорочення: `openclaw onboard --auth-choice zai-api-key`.
- Загальний endpoint: `https://api.z.ai/api/paas/v4`
-- Endpoint для кодування (типово): `https://api.z.ai/api/coding/paas/v4`
-- Для загального endpoint задайте кастомного постачальника з перевизначенням base URL.
+- Coding endpoint (типовий): `https://api.z.ai/api/coding/paas/v4`
+- Для загального endpoint визначте custom provider із перевизначенням base URL.
@@ -2535,11 +2535,11 @@ OpenClaw використовує вбудований каталог модел
}
```
-Для endpoint-у в Китаї: `baseUrl: "https://api.moonshot.cn/v1"` або `openclaw onboard --auth-choice moonshot-api-key-cn`.
+Для endpoint у Китаї: `baseUrl: "https://api.moonshot.cn/v1"` або `openclaw onboard --auth-choice moonshot-api-key-cn`.
-Нативні endpoint-и Moonshot оголошують сумісність зі streaming на спільному
-транспорті `openai-completions`, і OpenClaw тепер визначає це за можливостями endpoint-у,
-а не лише за id вбудованого постачальника.
+Нативні endpoint-и Moonshot оголошують сумісність використання streaming на спільному
+transport `openai-completions`, і OpenClaw визначає це за можливостями endpoint-а,
+а не лише за built-in provider id.
@@ -2557,8 +2557,128 @@ OpenClaw використовує вбудований каталог модел
}
```
-Сумісний з Anthropic, вбудований постачальник. Скорочення: `openclaw onboard --auth-choice kimi-code-api-key`.
+Сумісний з Anthropic, built-in provider. Скорочення: `openclaw onboard --auth-choice kimi-code-api-key`.
-<
\ No newline at end of file
+
+
+```json5
+{
+ env: { SYNTHETIC_API_KEY: "sk-..." },
+ agents: {
+ defaults: {
+ model: { primary: "synthetic/hf:MiniMaxAI/MiniMax-M2.5" },
+ models: { "synthetic/hf:MiniMaxAI/MiniMax-M2.5": { alias: "MiniMax M2.5" } },
+ },
+ },
+ models: {
+ mode: "merge",
+ providers: {
+ synthetic: {
+ baseUrl: "https://api.synthetic.new/anthropic",
+ apiKey: "${SYNTHETIC_API_KEY}",
+ api: "anthropic-messages",
+ models: [
+ {
+ id: "hf:MiniMaxAI/MiniMax-M2.5",
+ name: "MiniMax M2.5",
+ reasoning: true,
+ input: ["text"],
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
+ contextWindow: 192000,
+ maxTokens: 65536,
+ },
+ ],
+ },
+ },
+ },
+}
+```
+
+Base URL має не містити `/v1` (client Anthropic додає його сам). Скорочення: `openclaw onboard --auth-choice synthetic-api-key`.
+
+
+
+
+
+```json5
+{
+ agents: {
+ defaults: {
+ model: { primary: "minimax/MiniMax-M2.7" },
+ models: {
+ "minimax/MiniMax-M2.7": { alias: "Minimax" },
+ },
+ },
+ },
+ models: {
+ mode: "merge",
+ providers: {
+ minimax: {
+ baseUrl: "https://api.minimax.io/anthropic",
+ apiKey: "${MINIMAX_API_KEY}",
+ api: "anthropic-messages",
+ models: [
+ {
+ id: "MiniMax-M2.7",
+ name: "MiniMax M2.7",
+ reasoning: true,
+ input: ["text", "image"],
+ cost: { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0.375 },
+ contextWindow: 204800,
+ maxTokens: 131072,
+ },
+ ],
+ },
+ },
+ },
+}
+```
+
+Встановіть `MINIMAX_API_KEY`. Скорочення:
+`openclaw onboard --auth-choice minimax-global-api` або
+`openclaw onboard --auth-choice minimax-cn-api`.
+Каталог моделей типово містить лише M2.7.
+На Anthropic-compatible streaming path OpenClaw типово вимикає thinking MiniMax,
+якщо ви явно не задасте `thinking` самостійно. `/fast on` або
+`params.fastMode: true` переписує `MiniMax-M2.7` на
+`MiniMax-M2.7-highspeed`.
+
+
+
+
+
+Див. [Local Models](/uk/gateway/local-models). Коротко: запускайте велику локальну модель через LM Studio Responses API на серйозному обладнанні; зберігайте hosted models у merged стані для fallback.
+
+
+
+---
+
+## Skills
+
+```json5
+{
+ skills: {
+ allowBundled: ["gemini", "peekaboo"],
+ load: {
+ extraDirs: ["~/Projects/agent-scripts/skills"],
+ },
+ install: {
+ preferBrew: true,
+ nodeManager: "npm", // npm | pnpm | yarn | bun
+ },
+ entries: {
+ "image-lab": {
+ apiKey: { source: "env", provider: "default", id: "GEMINI_API_KEY" }, // або plaintext string
+ env: { GEMINI_API_KEY: "GEMINI_KEY_HERE" },
+ },
+ peekaboo: { enabled: true },
+ sag: { enabled: false },
+ },
+ },
+}
+```
+
+- `allowBundled`: необов’язковий allowlist лише для bundled Skills (managed/workspace skills не зачіпаються).
+- `load.extraDirs`: додаткові сп
\ No newline at end of file