From 92d14440a8a4a9bfe83c3c9b6f014e50d8e426c4 Mon Sep 17 00:00:00 2001 From: "openclaw-docs-i18n[bot]" Date: Thu, 23 Apr 2026 16:15:20 +0000 Subject: [PATCH] chore(i18n): refresh uk translations --- docs/uk/gateway/configuration-reference.md | 1731 ++++++++++---------- docs/uk/plugins/codex-harness.md | 246 ++- docs/uk/plugins/sdk-agent-harness.md | 137 +- docs/uk/start/showcase.md | 361 ++-- 4 files changed, 1182 insertions(+), 1293 deletions(-) diff --git a/docs/uk/gateway/configuration-reference.md b/docs/uk/gateway/configuration-reference.md index 279982fd1..2a94bda4f 100644 --- a/docs/uk/gateway/configuration-reference.md +++ b/docs/uk/gateway/configuration-reference.md @@ -1,70 +1,70 @@ --- read_when: - - Вам потрібні точні семантики полів конфігурації або типові значення - - Ви перевіряєте блоки конфігурації channel, model, Gateway або tool -summary: Довідка з конфігурації Gateway для основних ключів OpenClaw, типових значень і посилань на окремі довідки підсистем -title: Довідка з конфігурації + - Вам потрібна точна семантика полів конфігурації або значення за замовчуванням + - Ви перевіряєте блоки конфігурації каналу, моделі, Gateway або інструмента +summary: Довідник із конфігурації Gateway для основних ключів OpenClaw, значень за замовчуванням і посилань на окремі довідники підсистем +title: Довідник із конфігурації x-i18n: - generated_at: "2026-04-23T06:44:16Z" + generated_at: "2026-04-23T16:05:49Z" model: gpt-5.4 provider: openai - source_hash: 75c7e0d88ea6eacb8a2dd41f83033da853130dc2a689950c1a188d7c4ca8f977 + source_hash: babca02b02a019601d617a20ac35bdaa70f299434fc9be8fa3842acf5ebdaf7c source_path: gateway/configuration-reference.md workflow: 15 --- -# Довідка з конфігурації +# Довідник із конфігурації -Основна довідка з конфігурації для `~/.openclaw/openclaw.json`. Огляд, орієнтований на завдання, див. у [Configuration](/uk/gateway/configuration). +Основний довідник із конфігурації для `~/.openclaw/openclaw.json`. Для огляду, орієнтованого на завдання, див. [Конфігурація](/uk/gateway/configuration). -Ця сторінка охоплює основні поверхні конфігурації OpenClaw і надає посилання назовні, коли підсистема має власну детальнішу довідку. Вона **не** намагається вбудувати на одну сторінку кожен каталог команд, що належить channel/plugin, або кожен глибокий параметр memory/QMD. +Ця сторінка охоплює основні поверхні конфігурації OpenClaw і надає посилання назовні, коли підсистема має власний глибший довідник. Вона **не** намагається вбудувати на одній сторінці кожен каталог команд, що належить каналу/Plugin, або кожен глибокий параметр memory/QMD. Джерело істини в коді: -- `openclaw config schema` виводить актуальну JSON Schema, що використовується для валідації та Control UI, із вбудованими метаданими plugin/channel, об’єднаними там, де вони доступні -- `config.schema.lookup` повертає один вузол схеми з обмеженням за шляхом для інструментів деталізації -- `pnpm config:docs:check` / `pnpm config:docs:gen` перевіряють базовий hash документації конфігурації відносно поточної поверхні схеми +- `openclaw config schema` виводить актуальну JSON Schema, яка використовується для валідації та Control UI, із доданими метаданими bundled/Plugin/channel, якщо вони доступні +- `config.schema.lookup` повертає один вузол схеми, обмежений шляхом, для інструментів деталізації +- `pnpm config:docs:check` / `pnpm config:docs:gen` перевіряють хеш базового рівня документації конфігурації щодо поточної поверхні схеми -Окремі детальні довідки: +Окремі глибокі довідники: -- [Довідка з конфігурації Memory](/uk/reference/memory-config) для `agents.defaults.memorySearch.*`, `memory.qmd.*`, `memory.citations` і конфігурації dreaming у `plugins.entries.memory-core.config.dreaming` -- [Slash Commands](/uk/tools/slash-commands) для поточного каталогу вбудованих + комплектних команд -- сторінки channel/plugin-власників для поверхонь команд, специфічних для каналів +- [Довідник із конфігурації memory](/uk/reference/memory-config) для `agents.defaults.memorySearch.*`, `memory.qmd.*`, `memory.citations` і конфігурації Dreaming у `plugins.entries.memory-core.config.dreaming` +- [Slash Commands](/uk/tools/slash-commands) для поточного вбудованого + bundled каталогу команд +- сторінки відповідного каналу/Plugin для поверхонь команд, специфічних для каналу -Формат конфігурації — **JSON5** (дозволено коментарі та кінцеві коми). Усі поля необов’язкові — OpenClaw використовує безпечні типові значення, якщо їх пропущено. +Формат конфігурації — **JSON5** (дозволені коментарі й кінцеві коми). Усі поля необов’язкові — OpenClaw використовує безпечні значення за замовчуванням, якщо їх пропущено. --- -## Channels +## Канали -Кожен channel запускається автоматично, коли існує його секція конфігурації (якщо не задано `enabled: false`). +Кожен канал запускається автоматично, коли його секція конфігурації існує (якщо не вказано `enabled: false`). ### Доступ до DM і груп -Усі channels підтримують політики DM і політики груп: +Усі канали підтримують політики DM і політики груп: -| Політика DM | Поведінка | -| ------------------- | --------------------------------------------------------------- | -| `pairing` (типово) | Невідомі відправники отримують одноразовий код pairing; власник має підтвердити | -| `allowlist` | Лише відправники з `allowFrom` (або зі сховища дозволів pairing) | -| `open` | Дозволити всі вхідні DM (потрібно `allowFrom: ["*"]`) | -| `disabled` | Ігнорувати всі вхідні DM | +| Політика DM | Поведінка | +| ------------------- | ------------------------------------------------------------- | +| `pairing` (типово) | Невідомі відправники отримують одноразовий код pairing; власник має схвалити | +| `allowlist` | Лише відправники з `allowFrom` (або зі сховища paired allow) | +| `open` | Дозволити всі вхідні DM (потрібно `allowFrom: ["*"]`) | +| `disabled` | Ігнорувати всі вхідні DM | -| Політика групи | Поведінка | +| Політика груп | Поведінка | | --------------------- | ------------------------------------------------------ | | `allowlist` (типово) | Лише групи, що відповідають налаштованому allowlist | -| `open` | Обійти allowlist груп (обмеження згадками все одно діє) | +| `open` | Обійти allowlist груп (обмеження за згадуванням усе ще застосовується) | | `disabled` | Блокувати всі повідомлення груп/кімнат | -`channels.defaults.groupPolicy` задає типове значення, коли `groupPolicy` провайдера не встановлено. -Коди pairing спливають через 1 годину. Кількість очікувальних запитів на pairing DM обмежена **3 на channel**. -Якщо блок провайдера повністю відсутній (`channels.` відсутній), політика груп у runtime повертається до `allowlist` (fail-closed) із попередженням під час запуску. +`channels.defaults.groupPolicy` задає значення за замовчуванням, коли `groupPolicy` постачальника не задано. +Коди pairing спливають через 1 годину. Кількість очікуваних запитів на pairing DM обмежена **3 на канал**. +Якщо блок постачальника повністю відсутній (`channels.` відсутній), політика груп під час виконання повертається до `allowlist` (fail-closed) із попередженням під час запуску. -### Перевизначення моделей для каналів +### Перевизначення моделі для каналу -Використовуйте `channels.modelByChannel`, щоб закріпити конкретні ID каналів за моделлю. Значення приймають `provider/model` або налаштовані псевдоніми моделей. Це зіставлення channel застосовується, коли сесія ще не має перевизначення моделі (наприклад, заданого через `/model`). +Використовуйте `channels.modelByChannel`, щоб закріпити певні ідентифікатори каналів за моделлю. Значення приймають `provider/model` або налаштовані псевдоніми моделей. Відображення каналу застосовується, коли сесія ще не має перевизначення моделі (наприклад, установленого через `/model`). ```json5 { @@ -85,9 +85,9 @@ x-i18n: } ``` -### Типові значення channel і Heartbeat +### Значення каналів за замовчуванням і Heartbeat -Використовуйте `channels.defaults` для спільної поведінки group-policy і Heartbeat між провайдерами: +Використовуйте `channels.defaults` для спільної політики груп і поведінки Heartbeat у різних постачальників: ```json5 { @@ -105,15 +105,15 @@ x-i18n: } ``` -- `channels.defaults.groupPolicy`: резервна політика груп, коли `groupPolicy` на рівні провайдера не встановлено. -- `channels.defaults.contextVisibility`: типовий режим видимості додаткового контексту для всіх channels. Значення: `all` (типово, включати весь контекст цитат/потоків/історії), `allowlist` (включати контекст лише від відправників із allowlist), `allowlist_quote` (так само, як allowlist, але зберігати явний контекст цитати/відповіді). Перевизначення для окремого каналу: `channels..contextVisibility`. -- `channels.defaults.heartbeat.showOk`: включати здорові стани channel у вивід Heartbeat. -- `channels.defaults.heartbeat.showAlerts`: включати деградовані/помилкові стани у вивід Heartbeat. +- `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 у стилі індикатора. ### WhatsApp -WhatsApp працює через web channel Gateway (Baileys Web). Він запускається автоматично, коли існує прив’язана сесія. +WhatsApp працює через web-канал Gateway (Baileys Web). Він запускається автоматично, коли існує пов’язана сесія. ```json5 { @@ -124,7 +124,7 @@ WhatsApp працює через web channel Gateway (Baileys Web). Він за textChunkLimit: 4000, chunkMode: "length", // length | newline mediaMaxMb: 50, - sendReadReceipts: true, // сині галочки (false у режимі self-chat) + sendReadReceipts: true, // сині позначки (false у режимі self-chat) groups: { "*": { requireMention: true }, }, @@ -164,10 +164,10 @@ WhatsApp працює через web channel Gateway (Baileys Web). Він за } ``` -- Вихідні команди типово використовують обліковий запис `default`, якщо він існує; інакше — перший налаштований id облікового запису (відсортований). -- Необов’язковий `channels.whatsapp.defaultAccount` перевизначає цей резервний вибір типового облікового запису, якщо він відповідає id налаштованого облікового запису. -- Застарілий каталог автентифікації Baileys для одного облікового запису мігрується командою `openclaw doctor` у `whatsapp/default`. -- Перевизначення для окремого облікового запису: `channels.whatsapp.accounts..sendReadReceipts`, `channels.whatsapp.accounts..dmPolicy`, `channels.whatsapp.accounts..allowFrom`. +- Вихідні команди типово використовують обліковий запис `default`, якщо він є; інакше — перший налаштований ідентифікатор облікового запису (після сортування). +- Необов’язковий `channels.whatsapp.defaultAccount` перевизначає це резервне вибирання типового облікового запису, якщо він відповідає налаштованому ідентифікатору облікового запису. +- Застарілий каталог автентифікації Baileys для одного облікового запису переноситься командою `openclaw doctor` у `whatsapp/default`. +- Перевизначення на рівні облікового запису: `channels.whatsapp.accounts..sendReadReceipts`, `channels.whatsapp.accounts..dmPolicy`, `channels.whatsapp.accounts..allowFrom`. @@ -202,7 +202,7 @@ WhatsApp працює через web channel Gateway (Baileys Web). Він за historyLimit: 50, replyToMode: "first", // off | first | all | batched linkPreview: true, - streaming: "partial", // off | partial | block | progress (типово: off; вмикайте явно, щоб уникнути rate limit редагування попереднього перегляду) + streaming: "partial", // off | partial | block | progress (default: off; opt in explicitly to avoid preview-edit rate limits) actions: { reactions: true, sendMessage: true }, reactionNotifications: "own", // off | own | all mediaMaxMb: 100, @@ -225,13 +225,13 @@ WhatsApp працює через web channel Gateway (Baileys Web). Він за } ``` -- Токен бота: `channels.telegram.botToken` або `channels.telegram.tokenFile` (лише звичайний файл; symlink відхиляються), із резервним `TELEGRAM_BOT_TOKEN` для типового облікового запису. -- Необов’язковий `channels.telegram.defaultAccount` перевизначає вибір типового облікового запису, якщо він відповідає id налаштованого облікового запису. -- У багатооблікових конфігураціях (2+ id облікових записів) задайте явний типoвий обліковий запис (`channels.telegram.defaultAccount` або `channels.telegram.accounts.default`), щоб уникнути резервної маршрутизації; `openclaw doctor` попереджає, якщо його немає або він некоректний. -- `configWrites: false` блокує ініційовані з Telegram записи конфігурації (міграції ID supergroup, `/config set|unset`). -- Записи верхнього рівня `bindings[]` з `type: "acp"` налаштовують постійні прив’язки ACP для тем форуму (використовуйте канонічний `chatId:topic:topicId` у `match.peer.id`). Семантика полів спільна з [ACP Agents](/uk/tools/acp-agents#channel-specific-settings). -- Попередній перегляд потокової передачі в Telegram використовує `sendMessage` + `editMessageText` (працює в особистих і групових чатах). -- Політика повторних спроб: див. [Retry policy](/uk/concepts/retry). +- Токен бота: `channels.telegram.botToken` або `channels.telegram.tokenFile` (лише звичайний файл; symlink відхиляються), з `TELEGRAM_BOT_TOKEN` як резервним варіантом для типового облікового запису. +- Необов’язковий `channels.telegram.defaultAccount` перевизначає вибір типового облікового запису, якщо він відповідає налаштованому ідентифікатору облікового запису. +- У багатооблікових конфігураціях (2+ ідентифікатори облікових записів) задайте явне значення за замовчуванням (`channels.telegram.defaultAccount` або `channels.telegram.accounts.default`), щоб уникнути резервної маршрутизації; `openclaw doctor` попереджає, якщо цього бракує або значення невалідне. +- `configWrites: false` блокує запис конфігурації, ініційований із Telegram (міграції ідентифікаторів supergroup, `/config set|unset`). +- Записи верхнього рівня `bindings[]` із `type: "acp"` налаштовують постійні прив’язки ACP для тем форуму (використовуйте канонічний `chatId:topic:topicId` у `match.peer.id`). Семантика полів спільна з [ACP Agents](/uk/tools/acp-agents#channel-specific-settings). +- Попередній перегляд потокової відповіді в Telegram використовує `sendMessage` + `editMessageText` (працює в особистих і групових чатах). +- Політика повторних спроб: див. [Політика повторних спроб](/uk/concepts/retry). ### Discord @@ -286,7 +286,7 @@ WhatsApp працює через web channel Gateway (Baileys Web). Він за historyLimit: 20, textChunkLimit: 2000, chunkMode: "length", // length | newline - streaming: "off", // off | partial | block | progress (progress відображається як partial у Discord) + streaming: "off", // off | partial | block | progress (progress maps to partial on Discord) maxLinesPerMessage: 17, ui: { components: { @@ -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 for sessions_spawn({ thread: true }) }, voice: { enabled: true, @@ -333,34 +333,34 @@ WhatsApp працює через web channel Gateway (Baileys Web). Він за } ``` -- Токен: `channels.discord.token`, із резервним `DISCORD_BOT_TOKEN` для типового облікового запису. -- Прямі вихідні виклики, які передають явний Discord `token`, використовують цей токен для виклику; параметри повторних спроб/політик облікового запису все одно беруться з вибраного облікового запису в активному знімку runtime. -- Необов’язковий `channels.discord.defaultAccount` перевизначає вибір типового облікового запису, якщо він відповідає id налаштованого облікового запису. -- Використовуйте `user:` (DM) або `channel:` (канал guild) як цілі доставки; прості числові ID відхиляються. -- Slug-и guild мають нижній регістр, а пробіли замінюються на `-`; ключі каналів використовують slug-ім’я (без `#`). Надавайте перевагу ID guild. -- Повідомлення, створені ботом, типово ігноруються. `allowBots: true` вмикає їх; використовуйте `allowBots: "mentions"`, щоб приймати лише повідомлення ботів, які згадують бота (власні повідомлення все одно відфільтровуються). -- `channels.discord.guilds..ignoreOtherMentions` (і перевизначення каналу) відкидає повідомлення, які згадують іншого користувача або роль, але не бота (за винятком @everyone/@here). -- `maxLinesPerMessage` (типово 17) розбиває довгі за висотою повідомлення, навіть якщо вони коротші за 2000 символів. -- `channels.discord.threadBindings` керує маршрутизацією, прив’язаною до потоків Discord: - - `enabled`: перевизначення Discord для функцій сесій, прив’язаних до потоків (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age` і прив’язана доставка/маршрутизація) +- Токен: `channels.discord.token`, з `DISCORD_BOT_TOKEN` як резервним варіантом для типового облікового запису. +- Прямі вихідні виклики, які передають явний Discord `token`, використовують цей токен для виклику; налаштування повторних спроб/політик облікового запису все одно беруться з вибраного облікового запису в активному знімку runtime. +- Необов’язковий `channels.discord.defaultAccount` перевизначає вибір типового облікового запису, якщо він відповідає налаштованому ідентифікатору облікового запису. +- Використовуйте `user:` (DM) або `channel:` (канал guild) як цілі доставки; прості числові ідентифікатори відхиляються. +- Slug для guild задаються в нижньому регістрі, а пробіли замінюються на `-`; ключі каналів використовують назву у форматі slug (без `#`). Надавайте перевагу ідентифікаторам guild. +- Повідомлення, створені ботом, типово ігноруються. `allowBots: true` вмикає їх; використовуйте `allowBots: "mentions"`, щоб приймати лише повідомлення ботів, які згадують бота (власні повідомлення все одно фільтруються). +- `channels.discord.guilds..ignoreOtherMentions` (і перевизначення каналу) відкидає повідомлення, які згадують іншого користувача або роль, але не бота (крім @everyone/@here). +- `maxLinesPerMessage` (типово 17) розбиває високі повідомлення, навіть якщо вони не перевищують 2000 символів. +- `channels.discord.threadBindings` керує маршрутизацією, прив’язаною до тредів Discord: + - `enabled`: перевизначення Discord для функцій сесій, прив’язаних до тредів (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age` і прив’язана доставка/маршрутизація) - `idleHours`: перевизначення Discord для автоматичного зняття фокуса через неактивність у годинах (`0` вимикає) - `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. + - `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 v2. - `channels.discord.voice` вмикає розмови в голосових каналах Discord і необов’язкові перевизначення auto-join + TTS. - `channels.discord.voice.daveEncryption` і `channels.discord.voice.decryptionFailureTolerance` напряму передаються в параметри DAVE `@discordjs/voice` (типово `true` і `24`). -- OpenClaw додатково намагається відновити прийом голосу, виходячи й повторно приєднуючись до голосової сесії після повторних збоїв дешифрування. -- `channels.discord.streaming` — це канонічний ключ режиму потоку. Застарілі значення `streamMode` і булеві `streaming` автоматично мігруються. -- `channels.discord.autoPresence` зіставляє доступність runtime із присутністю бота (healthy => online, degraded => idle, exhausted => dnd) і дозволяє необов’язкові перевизначення тексту статусу. -- `channels.discord.dangerouslyAllowNameMatching` повторно вмикає зіставлення за змінними іменами/tag (режим сумісності break-glass). -- `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"` надсилає в обидва місця. Якщо target включає `"channel"`, кнопки можуть використовувати лише визначені погоджувачі. - - `cleanupAfterResolve`: якщо `true`, видаляє DM погодження після погодження, відхилення або тайм-ауту. +- OpenClaw також намагається відновити отримання голосу, виходячи та повторно входячи в голосову сесію після повторних збоїв дешифрування. +- `channels.discord.streaming` — канонічний ключ режиму потоку. Застарілі значення `streamMode` і булеві значення `streaming` мігруються автоматично. +- `channels.discord.autoPresence` зіставляє доступність runtime зі статусом присутності бота (healthy => online, degraded => idle, exhausted => dnd) і дозволяє необов’язкові перевизначення тексту статусу. +- `channels.discord.dangerouslyAllowNameMatching` знову вмикає зіставлення за змінними іменами/тегами (режим сумісності break-glass). +- `channels.discord.execApprovals`: доставлення нативних для Discord погоджень exec і авторизація тих, хто погоджує. + - `enabled`: `true`, `false` або `"auto"` (типово). У режимі auto погодження exec активуються, коли тих, хто погоджує, можна визначити з `approvers` або `commands.ownerAllowFrom`. + - `approvers`: ідентифікатори користувачів Discord, яким дозволено погоджувати exec-запити. Якщо не задано, використовується `commands.ownerAllowFrom`. + - `agentFilter`: необов’язковий allowlist ідентифікаторів агентів. Не задавайте, щоб пересилати погодження для всіх агентів. + - `sessionFilter`: необов’язкові шаблони ключів сесії (підрядок або regex). + - `target`: куди надсилати запити на погодження. `"dm"` (типово) надсилає в DM тим, хто погоджує, `"channel"` надсилає у вихідний канал, `"both"` надсилає в обидва місця. Коли target включає `"channel"`, кнопки можуть використовувати лише визначені користувачі, які погоджують. + - `cleanupAfterResolve`: коли `true`, видаляє DM із погодженням після погодження, відхилення або тайм-ауту. **Режими сповіщень про реакції:** `off` (немає), `own` (повідомлення бота, типово), `all` (усі повідомлення), `allowlist` (із `guilds..users` для всіх повідомлень). @@ -393,11 +393,11 @@ WhatsApp працює через web channel Gateway (Baileys Web). Він за } ``` -- JSON облікового запису служби: вбудований (`serviceAccount`) або на основі файла (`serviceAccountFile`). -- Також підтримується SecretRef облікового запису служби (`serviceAccountRef`). -- Резервні змінні середовища: `GOOGLE_CHAT_SERVICE_ACCOUNT` або `GOOGLE_CHAT_SERVICE_ACCOUNT_FILE`. +- JSON облікового запису служби: вбудований (`serviceAccount`) або на основі файлу (`serviceAccountFile`). +- SecretRef облікового запису служби також підтримується (`serviceAccountRef`). +- Резервні значення env: `GOOGLE_CHAT_SERVICE_ACCOUNT` або `GOOGLE_CHAT_SERVICE_ACCOUNT_FILE`. - Використовуйте `spaces/` або `users/` як цілі доставки. -- `channels.googlechat.dangerouslyAllowNameMatching` повторно вмикає зіставлення за змінним email principal (режим сумісності break-glass). +- `channels.googlechat.dangerouslyAllowNameMatching` знову вмикає зіставлення за змінним email principal (режим сумісності break-glass). ### Slack @@ -449,7 +449,7 @@ WhatsApp працює через web channel Gateway (Baileys Web). Він за chunkMode: "length", streaming: { mode: "partial", // off | partial | block | progress - nativeTransport: true, // використовувати нативний API потокової передачі Slack, коли mode=partial + nativeTransport: true, // use Slack native streaming API when mode=partial }, mediaMaxMb: 20, execApprovals: { @@ -464,39 +464,39 @@ WhatsApp працює через web channel Gateway (Baileys Web). Він за } ``` -- **Режим socket** вимагає і `botToken`, і `appToken` (`SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` як резервні змінні середовища для типового облікового запису). -- **Режим HTTP** вимагає `botToken` плюс `signingSecret` (у корені або для окремого облікового запису). +- **Режим socket** потребує і `botToken`, і `appToken` (`SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` як резервні значення env типового облікового запису). +- **Режим HTTP** потребує `botToken` плюс `signingSecret` (у корені або для окремого облікового запису). - `botToken`, `appToken`, `signingSecret` і `userToken` приймають відкриті рядки або об’єкти SecretRef. -- Знімки облікових записів Slack показують поля джерела/статусу для кожного облікового даного, наприклад +- Знімки облікових записів Slack показують поля джерела/статусу для кожного облікового запису, такі як `botTokenSource`, `botTokenStatus`, `appTokenStatus` і, у режимі HTTP, `signingSecretStatus`. `configured_unavailable` означає, що обліковий запис налаштовано через SecretRef, але поточний шлях команди/runtime не зміг визначити значення секрету. - `configWrites: false` блокує записи конфігурації, ініційовані зі Slack. -- Необов’язковий `channels.slack.defaultAccount` перевизначає вибір типового облікового запису, якщо він відповідає id налаштованого облікового запису. -- `channels.slack.streaming.mode` — канонічний ключ режиму потоку Slack. `channels.slack.streaming.nativeTransport` керує нативним транспортом потокової передачі Slack. Застарілі значення `streamMode`, булеві `streaming` і `nativeStreaming` автоматично мігруються. +- Необов’язковий `channels.slack.defaultAccount` перевизначає вибір типового облікового запису, якщо він відповідає налаштованому ідентифікатору облікового запису. +- `channels.slack.streaming.mode` — канонічний ключ режиму потоку Slack. `channels.slack.streaming.nativeTransport` керує нативним транспортом потокової передачі Slack. Застарілі значення `streamMode`, булеві значення `streaming` і `nativeStreaming` мігруються автоматично. - Використовуйте `user:` (DM) або `channel:` як цілі доставки. **Режими сповіщень про реакції:** `off`, `own` (типово), `all`, `allowlist` (із `reactionAllowlist`). -**Ізоляція сесій потоків:** `thread.historyScope` — для окремого потоку (типово) або спільно для каналу. `thread.inheritParent` копіює стенограму батьківського каналу в нові потоки. +**Ізоляція сесій тредів:** `thread.historyScope` — для кожного треду окремо (типово) або спільно для каналу. `thread.inheritParent` копіює стенограму батьківського каналу в нові треди. -- Нативна потокова передача Slack разом із статусом потоку Slack у стилі помічника "is typing..." вимагають цілі відповіді в потоці. DM верхнього рівня типово залишаються поза потоком, тому вони використовують `typingReaction` або звичайну доставку замість попереднього перегляду в стилі потоку. +- Нативна потокова передача Slack разом зі статусом треду Slack у стилі assistant "is typing..." потребують цільового треду відповіді. DM верхнього рівня типово залишаються поза тредом, тому замість попереднього перегляду в стилі треду вони використовують `typingReaction` або звичайну доставку. - `typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки виконується відповідь, а потім видаляє її після завершення. Використовуйте shortcode emoji Slack, наприклад `"hourglass_flowing_sand"`. -- `channels.slack.execApprovals`: нативна для Slack доставка погоджень exec і авторизація погоджувачів. Та сама схема, що й у Discord: `enabled` (`true`/`false`/`"auto"`), `approvers` (ID користувачів Slack), `agentFilter`, `sessionFilter` і `target` (`"dm"`, `"channel"` або `"both"`). +- `channels.slack.execApprovals`: доставлення нативних для Slack погоджень exec і авторизація тих, хто погоджує. Та сама схема, що й для Discord: `enabled` (`true`/`false`/`"auto"`), `approvers` (ідентифікатори користувачів Slack), `agentFilter`, `sessionFilter` і `target` (`"dm"`, `"channel"` або `"both"`). -| Група дій | Типово | Примітки | -| ------------ | --------- | ------------------------ | +| Група дій | Типово | Примітки | +| ------------ | ------- | ---------------------- | | reactions | увімкнено | Реакції + список реакцій | | messages | увімкнено | Читання/надсилання/редагування/видалення | | pins | увімкнено | Закріпити/відкріпити/список | -| memberInfo | увімкнено | Інформація про учасника | -| emojiList | увімкнено | Список власних emoji | +| memberInfo | увімкнено | Інформація про учасника | +| emojiList | увімкнено | Список користувацьких emoji | ### Mattermost -Mattermost постачається як plugin: `openclaw plugins install @openclaw/mattermost`. +Mattermost постачається як Plugin: `openclaw plugins install @openclaw/mattermost`. ```json5 { @@ -516,7 +516,7 @@ Mattermost постачається як plugin: `openclaw plugins install @open native: true, // opt-in nativeSkills: true, callbackPath: "/api/channels/mattermost/command", - // Необов’язкова явна URL-адреса для розгортань через reverse-proxy/публічний доступ + // Optional explicit URL for reverse-proxy/public deployments callbackUrl: "https://gateway.example.com/api/channels/mattermost/command", }, textChunkLimit: 4000, @@ -526,23 +526,23 @@ Mattermost постачається як plugin: `openclaw plugins install @open } ``` -Режими чату: `oncall` (відповідати на @згадку, типово), `onmessage` (кожне повідомлення), `onchar` (повідомлення, що починаються з префікса тригера). +Режими чату: `oncall` (відповідати на @-згадування, типово), `onmessage` (кожне повідомлення), `onchar` (повідомлення, що починаються з префікса-тригера). -Коли власні команди Mattermost увімкнені: +Коли нативні команди Mattermost увімкнені: -- `commands.callbackPath` має бути шляхом (наприклад `/api/channels/mattermost/command`), а не повною URL-адресою. -- `commands.callbackUrl` має визначатися до endpoint Gateway OpenClaw і бути доступною із сервера Mattermost. -- Callback-и власних slash-команд автентифікуються токенами для кожної команди, які повертає - Mattermost під час реєстрації slash-команд. Якщо реєстрація не вдається або жодна - команда не активується, OpenClaw відхиляє callback-и з помилкою +- `commands.callbackPath` має бути шляхом (наприклад, `/api/channels/mattermost/command`), а не повним URL. +- `commands.callbackUrl` має вказувати на endpoint Gateway OpenClaw і бути доступним із сервера Mattermost. +- Нативні slash callback-обробники автентифікуються за допомогою токенів для кожної команди, які повертає + Mattermost під час реєстрації slash-команди. Якщо реєстрація не вдається або + жодна команда не активована, OpenClaw відхиляє callback-запити з `Unauthorized: invalid command token.` -- Для private/tailnet/internal хостів callback-ів Mattermost може вимагати, щоб - `ServiceSettings.AllowedUntrustedInternalConnections` містив хост/домен callback-а. - Використовуйте значення хоста/домену, а не повні URL-адреси. -- `channels.mattermost.configWrites`: дозволити або заборонити записи конфігурації, ініційовані з Mattermost. +- Для приватних/tailnet/internal callback-хостів Mattermost може вимагати, + щоб `ServiceSettings.AllowedUntrustedInternalConnections` містив callback-хост/домен. + Використовуйте значення хоста/домену, а не повні URL. +- `channels.mattermost.configWrites`: дозволяти або забороняти записи конфігурації, ініційовані з Mattermost. - `channels.mattermost.requireMention`: вимагати `@mention` перед відповіддю в каналах. -- `channels.mattermost.groups..requireMention`: перевизначення обмеження згадками для окремого каналу (`"*"` як типове значення). -- Необов’язковий `channels.mattermost.defaultAccount` перевизначає вибір типового облікового запису, якщо він відповідає id налаштованого облікового запису. +- `channels.mattermost.groups..requireMention`: перевизначення обмеження за згадуванням для окремого каналу (`"*"` для типового значення). +- Необов’язковий `channels.mattermost.defaultAccount` перевизначає вибір типового облікового запису, якщо він відповідає налаштованому ідентифікатору облікового запису. ### Signal @@ -551,7 +551,7 @@ Mattermost постачається як plugin: `openclaw plugins install @open channels: { signal: { enabled: true, - account: "+15555550123", // необов’язкова прив’язка облікового запису + account: "+15555550123", // optional account binding dmPolicy: "pairing", allowFrom: ["+15551234567", "uuid:123e4567-e89b-12d3-a456-426614174000"], configWrites: true, @@ -565,13 +565,13 @@ Mattermost постачається як plugin: `openclaw plugins install @open **Режими сповіщень про реакції:** `off`, `own` (типово), `all`, `allowlist` (із `reactionAllowlist`). -- `channels.signal.account`: закріпити запуск channel за конкретною ідентичністю облікового запису Signal. -- `channels.signal.configWrites`: дозволити або заборонити записи конфігурації, ініційовані із Signal. -- Необов’язковий `channels.signal.defaultAccount` перевизначає вибір типового облікового запису, якщо він відповідає id налаштованого облікового запису. +- `channels.signal.account`: прив’язати запуск каналу до конкретної ідентичності облікового запису Signal. +- `channels.signal.configWrites`: дозволяти або забороняти записи конфігурації, ініційовані із Signal. +- Необов’язковий `channels.signal.defaultAccount` перевизначає вибір типового облікового запису, якщо він відповідає налаштованому ідентифікатору облікового запису. ### BlueBubbles -BlueBubbles — рекомендований шлях для iMessage (на основі plugin, налаштовується в `channels.bluebubbles`). +BlueBubbles — рекомендований шлях для iMessage (на основі Plugin, налаштовується в `channels.bluebubbles`). ```json5 { @@ -579,21 +579,21 @@ BlueBubbles — рекомендований шлях для iMessage (на ос bluebubbles: { enabled: true, dmPolicy: "pairing", - // serverUrl, password, webhookPath, group controls і розширені дії: - // див. /channels/bluebubbles + // serverUrl, password, webhookPath, group controls, and advanced actions: + // see /channels/bluebubbles }, }, } ``` -- Основні шляхи ключів, охоплені тут: `channels.bluebubbles`, `channels.bluebubbles.dmPolicy`. -- Необов’язковий `channels.bluebubbles.defaultAccount` перевизначає вибір типового облікового запису, якщо він відповідає id налаштованого облікового запису. -- Записи верхнього рівня `bindings[]` з `type: "acp"` можуть прив’язувати розмови BlueBubbles до постійних ACP-сесій. Використовуйте handle BlueBubbles або рядок цілі (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) у `match.peer.id`. Спільна семантика полів: [ACP Agents](/uk/tools/acp-agents#channel-specific-settings). +- Основні шляхи ключів, які тут охоплено: `channels.bluebubbles`, `channels.bluebubbles.dmPolicy`. +- Необов’язковий `channels.bluebubbles.defaultAccount` перевизначає вибір типового облікового запису, якщо він відповідає налаштованому ідентифікатору облікового запису. +- Записи верхнього рівня `bindings[]` із `type: "acp"` можуть прив’язувати розмови BlueBubbles до постійних ACP-сесій. Використовуйте BlueBubbles handle або рядок цілі (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) у `match.peer.id`. Спільна семантика полів: [ACP Agents](/uk/tools/acp-agents#channel-specific-settings). - Повну конфігурацію каналу BlueBubbles задокументовано в [BlueBubbles](/uk/channels/bluebubbles). ### iMessage -OpenClaw запускає `imsg rpc` (JSON-RPC через stdio). Демон або порт не потрібні. +OpenClaw запускає `imsg rpc` (JSON-RPC через stdio). Daemon або порт не потрібні. ```json5 { @@ -617,17 +617,17 @@ OpenClaw запускає `imsg rpc` (JSON-RPC через stdio). Демон а } ``` -- Необов’язковий `channels.imessage.defaultAccount` перевизначає вибір типового облікового запису, якщо він відповідає id налаштованого облікового запису. +- Необов’язковий `channels.imessage.defaultAccount` перевизначає вибір типового облікового запису, якщо він відповідає налаштованому ідентифікатору облікового запису. -- Потрібен Full Disk Access до Messages DB. +- Потрібен Full Disk Access до БД Messages. - Надавайте перевагу цілям `chat_id:`. Використовуйте `imsg chats --limit 20`, щоб переглянути список чатів. - `cliPath` може вказувати на SSH-обгортку; задайте `remoteHost` (`host` або `user@host`) для отримання вкладень через SCP. - `attachmentRoots` і `remoteAttachmentRoots` обмежують шляхи вхідних вкладень (типово: `/Users/*/Library/Messages/Attachments`). -- SCP використовує сувору перевірку ключа хоста, тому переконайтеся, що ключ relay-хоста вже існує в `~/.ssh/known_hosts`. -- `channels.imessage.configWrites`: дозволити або заборонити записи конфігурації, ініційовані з iMessage. -- Записи верхнього рівня `bindings[]` з `type: "acp"` можуть прив’язувати розмови iMessage до постійних ACP-сесій. Використовуйте нормалізований handle або явну ціль чату (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) у `match.peer.id`. Спільна семантика полів: [ACP Agents](/uk/tools/acp-agents#channel-specific-settings). +- SCP використовує сувору перевірку ключа хоста, тому переконайтеся, що ключ relay-хоста вже є в `~/.ssh/known_hosts`. +- `channels.imessage.configWrites`: дозволяти або забороняти записи конфігурації, ініційовані з iMessage. +- Записи верхнього рівня `bindings[]` із `type: "acp"` можуть прив’язувати розмови iMessage до постійних ACP-сесій. Використовуйте нормалізований handle або явну ціль чату (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) у `match.peer.id`. Спільна семантика полів: [ACP Agents](/uk/tools/acp-agents#channel-specific-settings). - + ```bash #!/usr/bin/env bash @@ -638,7 +638,7 @@ exec ssh -T gateway-host imsg "$@" ### Matrix -Matrix працює через plugin і налаштовується в `channels.matrix`. +Matrix працює на основі Plugin і налаштовується в `channels.matrix`. ```json5 { @@ -669,24 +669,24 @@ Matrix працює через plugin і налаштовується в `channe ``` - Автентифікація токеном використовує `accessToken`; автентифікація паролем використовує `userId` + `password`. -- `channels.matrix.proxy` маршрутизує HTTP-трафік Matrix через явний HTTP(S)-проксі. Іменовані облікові записи можуть перевизначити його через `channels.matrix.accounts..proxy`. -- `channels.matrix.network.dangerouslyAllowPrivateNetwork` дозволяє private/internal homeserver. `proxy` і цей opt-in мережі є незалежними елементами керування. +- `channels.matrix.proxy` маршрутизує HTTP-трафік Matrix через явний HTTP(S)-proxy. Іменовані облікові записи можуть перевизначати це через `channels.matrix.accounts..proxy`. +- `channels.matrix.network.dangerouslyAllowPrivateNetwork` дозволяє приватні/internal homeserver. `proxy` і цей opt-in для мережі — незалежні механізми керування. - `channels.matrix.defaultAccount` вибирає бажаний обліковий запис у багатооблікових конфігураціях. -- `channels.matrix.autoJoin` типово має значення `off`, тому запрошені кімнати та нові запрошення у стилі DM ігноруються, доки ви не задасте `autoJoin: "allowlist"` з `autoJoinAllowlist` або `autoJoin: "always"`. -- `channels.matrix.execApprovals`: нативна для 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` (типово) спільно використовує маршрутизованого peer, тоді як `per-room` ізолює кожну кімнату DM. -- Перевірки статусу Matrix і live directory lookups використовують ту саму політику проксі, що й runtime-трафік. -- Повну конфігурацію Matrix, правила націлювання й приклади налаштування задокументовано в [Matrix](/uk/channels/matrix). +- `channels.matrix.autoJoin` типово має значення `off`, тому запрошені кімнати й нові запрошення у стилі DM ігноруються, доки ви не встановите `autoJoin: "allowlist"` разом із `autoJoinAllowlist` або `autoJoin: "always"`. +- `channels.matrix.execApprovals`: доставлення нативних для Matrix погоджень exec і авторизація тих, хто погоджує. + - `enabled`: `true`, `false` або `"auto"` (типово). У режимі auto погодження exec активуються, коли тих, хто погоджує, можна визначити з `approvers` або `commands.ownerAllowFrom`. + - `approvers`: ідентифікатори користувачів Matrix (наприклад, `@owner:example.org`), яким дозволено погоджувати exec-запити. + - `agentFilter`: необов’язковий allowlist ідентифікаторів агентів. Не задавайте, щоб пересилати погодження для всіх агентів. + - `sessionFilter`: необов’язкові шаблони ключів сесії (підрядок або regex). + - `target`: куди надсилати запити на погодження. `"dm"` (типово), `"channel"` (вихідна кімната) або `"both"`. + - Перевизначення на рівні облікового запису: `channels.matrix.accounts..execApprovals`. +- `channels.matrix.dm.sessionScope` керує тим, як DM Matrix групуються в сесії: `per-user` (типово) спільно використовує їх за маршрутизованим peer, тоді як `per-room` ізолює кожну DM-кімнату. +- Перевірки стану Matrix і живі пошуки в каталозі використовують ту саму політику proxy, що й runtime-трафік. +- Повну конфігурацію Matrix, правила націлювання та приклади налаштування задокументовано в [Matrix](/uk/channels/matrix). ### Microsoft Teams -Microsoft Teams працює через plugin і налаштовується в `channels.msteams`. +Microsoft Teams працює на основі Plugin і налаштовується в `channels.msteams`. ```json5 { @@ -694,19 +694,19 @@ Microsoft Teams працює через plugin і налаштовується msteams: { enabled: true, configWrites: true, - // appId, appPassword, tenantId, webhook, політики команди/каналу: - // див. /channels/msteams + // appId, appPassword, tenantId, webhook, team/channel policies: + // see /channels/msteams }, }, } ``` -- Основні шляхи ключів, охоплені тут: `channels.msteams`, `channels.msteams.configWrites`. -- Повну конфігурацію Teams (облікові дані, webhook, політики DM/груп, перевизначення для окремої команди/каналу) задокументовано в [Microsoft Teams](/uk/channels/msteams). +- Основні шляхи ключів, які тут охоплено: `channels.msteams`, `channels.msteams.configWrites`. +- Повну конфігурацію Teams (облікові дані, webhook, політика DM/груп, перевизначення для окремих team/channel) задокументовано в [Microsoft Teams](/uk/channels/msteams). ### IRC -IRC працює через plugin і налаштовується в `channels.irc`. +IRC працює на основі Plugin і налаштовується в `channels.irc`. ```json5 { @@ -727,13 +727,13 @@ IRC працює через plugin і налаштовується в `channels. } ``` -- Основні шляхи ключів, охоплені тут: `channels.irc`, `channels.irc.dmPolicy`, `channels.irc.configWrites`, `channels.irc.nickserv.*`. -- Необов’язковий `channels.irc.defaultAccount` перевизначає вибір типового облікового запису, якщо він відповідає id налаштованого облікового запису. -- Повну конфігурацію каналу IRC (host/port/TLS/channels/allowlists/обмеження згадками) задокументовано в [IRC](/uk/channels/irc). +- Основні шляхи ключів, які тут охоплено: `channels.irc`, `channels.irc.dmPolicy`, `channels.irc.configWrites`, `channels.irc.nickserv.*`. +- Необов’язковий `channels.irc.defaultAccount` перевизначає вибір типового облікового запису, якщо він відповідає налаштованому ідентифікатору облікового запису. +- Повну конфігурацію каналу IRC (host/port/TLS/channels/allowlists/обмеження за згадуванням) задокументовано в [IRC](/uk/channels/irc). -### Багато облікових записів (усі channels) +### Багатообліковість (усі канали) -Запускайте кілька облікових записів для одного channel (кожен із власним `accountId`): +Запускайте кілька облікових записів для одного каналу (кожен із власним `accountId`): ```json5 { @@ -754,28 +754,28 @@ IRC працює через plugin і налаштовується в `channels. } ``` -- `default` використовується, коли `accountId` пропущено (CLI + маршрутизація). -- Токени зі змінних середовища застосовуються лише до **типового** облікового запису. -- Базові налаштування channel застосовуються до всіх облікових записів, якщо їх не перевизначено для окремого облікового запису. +- `default` використовується, коли `accountId` не вказано (CLI + маршрутизація). +- Токени env застосовуються лише до облікового запису **default**. +- Базові налаштування каналу застосовуються до всіх облікових записів, якщо їх не перевизначено для окремого облікового запису. - Використовуйте `bindings[].match.accountId`, щоб маршрутизувати кожен обліковий запис до іншого агента. -- Якщо ви додаєте нетиповий обліковий запис через `openclaw channels add` (або onboarding каналу), поки все ще використовуєте верхньорівневу конфігурацію каналу для одного облікового запису, OpenClaw спочатку переносить верхньорівневі значення для одного облікового запису, прив’язані до облікового запису, у карту облікових записів каналу, щоб початковий обліковий запис і далі працював. Більшість channels переміщують їх у `channels..accounts.default`; Matrix натомість може зберегти наявну відповідну іменовану/типову ціль. -- Наявні прив’язки лише до channel (без `accountId`) і далі відповідатимуть типовому обліковому запису; прив’язки з областю облікового запису залишаються необов’язковими. -- `openclaw doctor --fix` також виправляє змішані форми, переміщуючи верхньорівневі значення одного облікового запису з областю облікового запису до підвищеного облікового запису, вибраного для цього channel. Більшість channels використовують `accounts.default`; Matrix натомість може зберегти наявну відповідну іменовану/типову ціль. +- Якщо ви додаєте не-default обліковий запис через `openclaw channels add` (або під час онбордингу каналу), поки все ще використовуєте однооблікову конфігурацію верхнього рівня каналу, OpenClaw спочатку переносить значення верхнього рівня для одного облікового запису, прив’язані до облікового запису, у карту облікових записів каналу, щоб початковий обліковий запис продовжив працювати. Більшість каналів переміщують їх у `channels..accounts.default`; Matrix натомість може зберегти наявну відповідну іменовану/default ціль. +- Наявні прив’язки лише каналу (без `accountId`) продовжують відповідати default-обліковому запису; прив’язки з областю облікового запису залишаються необов’язковими. +- `openclaw doctor --fix` також виправляє змішані форми, переміщуючи значення верхнього рівня для одного облікового запису, прив’язані до облікового запису, у підвищений обліковий запис, вибраний для цього каналу. Більшість каналів використовують `accounts.default`; Matrix натомість може зберегти наявну відповідну іменовану/default ціль. -### Інші plugin channels +### Інші канали Plugin -Багато plugin channels налаштовуються як `channels.` і задокументовані на своїх окремих сторінках каналів (наприклад Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat і Twitch). -Див. повний індекс каналів: [Channels](/uk/channels). +Багато каналів Plugin налаштовуються як `channels.` і задокументовані на окремих сторінках каналів (наприклад, Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat і Twitch). +Див. повний індекс каналів: [Канали](/uk/channels). -### Обмеження згадками в групових чатах +### Обмеження за згадуванням у групових чатах -Групові повідомлення типово **вимагають згадки** (метадані згадки або безпечні regex-шаблони). Це застосовується до групових чатів WhatsApp, Telegram, Discord, Google Chat та iMessage. +Для групових повідомлень типово **потрібне згадування** (метадані згадування або безпечні regex-шаблони). Це стосується групових чатів WhatsApp, Telegram, Discord, Google Chat та iMessage. -**Типи згадок:** +**Типи згадувань:** -- **Згадки метаданих**: рідні @згадки платформи. Ігноруються в режимі self-chat WhatsApp. -- **Текстові шаблони**: безпечні regex-шаблони в `agents.list[].groupChat.mentionPatterns`. Некоректні шаблони та небезпечне вкладене повторення ігноруються. -- Обмеження згадками застосовується лише тоді, коли виявлення можливе (рідні згадки або принаймні один шаблон). +- **Згадування в метаданих**: нативні @-згадування платформи. Ігноруються в режимі self-chat WhatsApp. +- **Текстові шаблони**: безпечні regex-шаблони в `agents.list[].groupChat.mentionPatterns`. Невалідні шаблони й небезпечні вкладені повторення ігноруються. +- Обмеження за згадуванням застосовується лише тоді, коли виявлення можливе (нативні згадування або принаймні один шаблон). ```json5 { @@ -788,7 +788,7 @@ IRC працює через plugin і налаштовується в `channels. } ``` -`messages.groupChat.historyLimit` задає глобальне типове значення. Channels можуть перевизначити його через `channels..historyLimit` (або для окремого облікового запису). Установіть `0`, щоб вимкнути. +`messages.groupChat.historyLimit` задає глобальне значення за замовчуванням. Канали можуть перевизначати його через `channels..historyLimit` (або на рівні облікового запису). Установіть `0`, щоб вимкнути. #### Обмеження історії DM @@ -805,13 +805,13 @@ IRC працює через plugin і налаштовується в `channels. } ``` -Порядок визначення: перевизначення для окремого DM → типове значення провайдера → без обмеження (зберігається все). +Порядок визначення: перевизначення для окремого DM → типове значення постачальника → без обмеження (зберігається все). Підтримується: `telegram`, `whatsapp`, `discord`, `slack`, `signal`, `imessage`, `msteams`. #### Режим self-chat -Додайте свій номер до `allowFrom`, щоб увімкнути режим self-chat (ігнорує рідні @згадки, відповідає лише на текстові шаблони): +Додайте власний номер у `allowFrom`, щоб увімкнути режим self-chat (ігнорує нативні @-згадування, відповідає лише на текстові шаблони): ```json5 { @@ -837,16 +837,16 @@ IRC працює через plugin і налаштовується в `channels. ```json5 { commands: { - native: "auto", // реєструвати рідні команди, коли підтримується - nativeSkills: "auto", // реєструвати рідні команди Skills, коли підтримується - text: true, // аналізувати /commands у повідомленнях чату - bash: false, // дозволити ! (псевдонім: /bash) + native: "auto", // register native commands when supported + nativeSkills: "auto", // register native skill commands when supported + text: true, // parse /commands in chat messages + bash: false, // allow ! (alias: /bash) bashForegroundMs: 2000, - config: false, // дозволити /config - mcp: false, // дозволити /mcp - plugins: false, // дозволити /plugins - debug: false, // дозволити /debug - restart: true, // дозволити /restart + інструмент перезапуску gateway + config: false, // allow /config + mcp: false, // allow /mcp + plugins: false, // allow /plugins + debug: false, // allow /debug + restart: true, // allow /restart + gateway restart tool ownerAllowFrom: ["discord:123456789012345678"], ownerDisplay: "raw", // raw | hash ownerDisplaySecret: "${OWNER_ID_HASH_SECRET}", @@ -861,28 +861,28 @@ IRC працює через plugin і налаштовується в `channels. -- Цей блок налаштовує поверхні команд. Поточний каталог вбудованих + комплектних команд див. у [Slash Commands](/uk/tools/slash-commands). -- Ця сторінка — **довідка з ключів конфігурації**, а не повний каталог команд. Команди, що належать channel/plugin, такі як QQ Bot `/bot-ping` `/bot-help` `/bot-logs`, LINE `/card`, device-pair `/pair`, memory `/dreaming`, phone-control `/phone` і Talk `/voice`, задокументовані на сторінках відповідних channel/plugin, а також у [Slash Commands](/uk/tools/slash-commands). -- Текстові команди мають бути **окремими** повідомленнями, що починаються з `/`. -- `native: "auto"` вмикає рідні команди для Discord/Telegram, залишає Slack вимкненим. -- `nativeSkills: "auto"` вмикає рідні команди Skills для Discord/Telegram, залишає Slack вимкненим. -- Перевизначення для окремого channel: `channels.discord.commands.native` (bool або `"auto"`). `false` очищає раніше зареєстровані команди. -- Перевизначуйте реєстрацію рідних команд Skills для окремого channel через `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` для виявлення plugin, встановлення та елементів керування ввімкненням/вимкненням. -- `channels..configWrites` керує мутаціями конфігурації для окремого channel (типово: true). -- Для багатооблікових channels `channels..accounts..configWrites` також керує записами, що націлені на цей обліковий запис (наприклад `/allowlist --config --account ` або `/config set channels..accounts....`). -- `restart: false` вимикає `/restart` і дії інструмента перезапуску Gateway. Типово: `true`. +- Цей блок налаштовує поверхні команд. Для поточного вбудованого + bundled каталогу команд див. [Slash Commands](/uk/tools/slash-commands). +- Ця сторінка — **довідник ключів конфігурації**, а не повний каталог команд. Команди, що належать каналу/Plugin, як-от QQ Bot `/bot-ping` `/bot-help` `/bot-logs`, LINE `/card`, device-pair `/pair`, memory `/dreaming`, phone-control `/phone` і Talk `/voice`, задокументовані на сторінках відповідних каналів/Plugin, а також у [Slash Commands](/uk/tools/slash-commands). +- Текстові команди мають бути **окремими** повідомленнями з початковим `/`. +- `native: "auto"` вмикає нативні команди для Discord/Telegram, залишає Slack вимкненим. +- `nativeSkills: "auto"` вмикає нативні команди Skills для Discord/Telegram, залишає Slack вимкненим. +- Перевизначення для окремого каналу: `channels.discord.commands.native` (bool або `"auto"`). `false` очищає раніше зареєстровані команди. +- Перевизначуйте реєстрацію нативних команд Skills для окремого каналу через `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` залишається доступним для звичайних клієнтів operator з областю запису. +- `mcp: true` вмикає `/mcp` для конфігурації MCP-сервера, керованого OpenClaw, у `mcp.servers`. +- `plugins: true` вмикає `/plugins` для пошуку Plugin, встановлення та керування ввімкненням/вимкненням. +- `channels..configWrites` керує мутаціями конфігурації для кожного каналу (типово: true). +- Для багатооблікових каналів `channels..accounts..configWrites` також керує записами, націленими на цей обліковий запис (наприклад, `/allowlist --config --account ` або `/config set channels..accounts....`). +- `restart: false` вимикає `/restart` і дії інструмента перезапуску Gateway. Типове значення: `true`. - `ownerAllowFrom` — це явний owner allowlist для команд/інструментів лише для власника. Він відокремлений від `allowFrom`. -- `ownerDisplay: "hash"` хешує owner id у системному prompt. Установіть `ownerDisplaySecret`, щоб керувати хешуванням. -- `allowFrom` задається для кожного провайдера. Якщо його встановлено, це **єдине** джерело авторизації (channel allowlist/pairing і `useAccessGroups` ігноруються). -- `useAccessGroups: false` дозволяє командам обходити політики access-group, коли `allowFrom` не встановлено. +- `ownerDisplay: "hash"` хешує ідентифікатори власника в системному prompt. Установіть `ownerDisplaySecret`, щоб керувати хешуванням. +- `allowFrom` задається для кожного provider. Якщо встановлено, це **єдине** джерело авторизації (`allowlists`/pairing каналу і `useAccessGroups` ігноруються). +- `useAccessGroups: false` дозволяє командам обходити політики груп доступу, коли `allowFrom` не задано. - Карта документації команд: - - вбудований + комплектний каталог: [Slash Commands](/uk/tools/slash-commands) - - поверхні команд, специфічні для channels: [Channels](/uk/channels) + - вбудований + 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) @@ -892,7 +892,7 @@ IRC працює через plugin і налаштовується в `channels. --- -## Типові значення агента +## Значення агентів за замовчуванням ### `agents.defaults.workspace` @@ -906,7 +906,7 @@ IRC працює через plugin і налаштовується в `channels. ### `agents.defaults.repoRoot` -Необов’язковий корінь репозиторію, який показується в рядку Runtime системного prompt. Якщо не задано, OpenClaw автоматично визначає його, підіймаючись вгору від workspace. +Необов’язковий корінь репозиторію, який показується в рядку Runtime системного prompt. Якщо не задано, OpenClaw автоматично визначає його, піднімаючись угору від workspace. ```json5 { @@ -932,9 +932,9 @@ IRC працює через plugin і налаштовується в `channels. } ``` -- Пропустіть `agents.defaults.skills`, щоб типово не обмежувати Skills. +- Пропустіть `agents.defaults.skills`, щоб Skills типово були необмеженими. - Пропустіть `agents.list[].skills`, щоб успадкувати типові значення. -- Установіть `agents.list[].skills: []`, щоб не використовувати Skills. +- Установіть `agents.list[].skills: []`, щоб не було Skills. - Непорожній список `agents.list[].skills` є фінальним набором для цього агента; він не об’єднується з типовими значеннями. @@ -952,7 +952,7 @@ IRC працює через plugin і налаштовується в `channels. Керує тим, коли bootstrap-файли workspace вбудовуються в системний prompt. Типове значення: `"always"`. -- `"continuation-skip"`: безпечні ходи продовження (після завершеної відповіді асистента) пропускають повторне вбудовування bootstrap workspace, зменшуючи розмір prompt. Запуски Heartbeat і повторні спроби після Compaction усе одно перебудовують контекст. +- `"continuation-skip"`: безпечні ходи продовження (після завершеної відповіді асистента) пропускають повторне вбудовування bootstrap workspace, зменшуючи розмір prompt. Запуски Heartbeat і повторні спроби після Compaction все одно перебудовують контекст. ```json5 { @@ -962,7 +962,7 @@ IRC працює через plugin і налаштовується в `channels. ### `agents.defaults.bootstrapMaxChars` -Максимальна кількість символів для одного bootstrap-файлу workspace до обрізання. Типове значення: `12000`. +Максимум символів для кожного bootstrap-файлу workspace до обрізання. Типове значення: `12000`. ```json5 { @@ -972,7 +972,7 @@ IRC працює через plugin і налаштовується в `channels. ### `agents.defaults.bootstrapTotalMaxChars` -Максимальна сумарна кількість символів, що вбудовуються з усіх bootstrap-файлів workspace. Типове значення: `60000`. +Максимальна загальна кількість символів, що вбудовуються в усі bootstrap-файли workspace. Типове значення: `60000`. ```json5 { @@ -986,7 +986,7 @@ IRC працює через plugin і налаштовується в `channels. Типове значення: `"once"`. - `"off"`: ніколи не вбудовувати текст попередження в системний prompt. -- `"once"`: вбудовувати попередження один раз для кожної унікальної сигнатури обрізання (рекомендовано). +- `"once"`: вбудовувати попередження один раз для кожного унікального сигнатурного випадку обрізання (рекомендовано). - `"always"`: вбудовувати попередження під час кожного запуску, коли є обрізання. ```json5 @@ -997,22 +997,22 @@ IRC працює через plugin і налаштовується в `channels. ### Карта володіння бюджетом контексту -OpenClaw має кілька високонавантажених бюджетів prompt/контексту, і вони -навмисно розділені за підсистемами, а не проходять через один загальний -параметр. +OpenClaw має кілька великих бюджетів prompt/контексту, і вони +навмисно розділені за підсистемами замість того, щоб усі проходили через одну загальну +ручку. - `agents.defaults.bootstrapMaxChars` / `agents.defaults.bootstrapTotalMaxChars`: звичайне вбудовування bootstrap workspace. - `agents.defaults.startupContext.*`: - одноразовий стартовий пролог для `/new` і `/reset`, включно з нещодавніми щоденними + одноразовий стартовий прелюд для `/new` і `/reset`, включно з останніми щоденними файлами `memory/*.md`. - `skills.limits.*`: компактний список Skills, вбудований у системний prompt. - `agents.defaults.contextLimits.*`: - обмежені runtime-уривки й вбудовані блоки, що належать runtime. + обмежені runtime-витяги та вбудовані блоки, що належать runtime. - `memory.qmd.limits.*`: - розмір уривків і вбудовування для індексованого пошуку в memory. + розмір фрагментів пошуку в індексованій memory і вбудовування. Використовуйте відповідне перевизначення для окремого агента лише тоді, коли одному агенту потрібен інший бюджет: @@ -1022,7 +1022,7 @@ OpenClaw має кілька високонавантажених бюджеті #### `agents.defaults.startupContext` -Керує стартовим прологом першого ходу, який вбудовується під час запусків із порожнім `/new` і `/reset`. +Керує стартовим прелюдом першого ходу, який вбудовується під час звичайних запусків `/new` і `/reset`. ```json5 { @@ -1060,17 +1060,18 @@ OpenClaw має кілька високонавантажених бюджеті } ``` -- `memoryGetMaxChars`: типове обмеження уривка `memory_get` до того, як буде додано - метадані обрізання та повідомлення про продовження. -- `memoryGetDefaultLines`: типове вікно рядків `memory_get`, коли `lines` +- `memoryGetMaxChars`: типовий ліміт витягу `memory_get` до додавання + метаданих обрізання й повідомлення про продовження. +- `memoryGetDefaultLines`: типове вікно рядків для `memory_get`, коли `lines` пропущено. -- `toolResultMaxChars`: обмеження активного результату інструмента, яке використовується для збережених результатів і - відновлення переповнення. -- `postCompactionMaxChars`: обмеження уривка `AGENTS.md`, яке використовується під час вбудовування оновлення після Compaction. +- `toolResultMaxChars`: активний ліміт результату інструмента, який використовується для збережених результатів і + відновлення після переповнення. +- `postCompactionMaxChars`: ліміт витягу AGENTS.md, який використовується під час вбудовування + оновлення після Compaction. #### `agents.list[].contextLimits` -Перевизначення для окремого агента для спільних параметрів `contextLimits`. Пропущені поля успадковуються +Перевизначення для окремого агента для спільних ручок `contextLimits`. Пропущені поля успадковуються з `agents.defaults.contextLimits`. ```json5 @@ -1097,7 +1098,7 @@ OpenClaw має кілька високонавантажених бюджеті #### `skills.limits.maxSkillsPromptChars` -Глобальне обмеження для компактного списку Skills, вбудованого в системний prompt. Це +Глобальний ліміт для компактного списку Skills, вбудованого в системний prompt. Це не впливає на читання файлів `SKILL.md` на вимогу. ```json5 @@ -1112,7 +1113,7 @@ OpenClaw має кілька високонавантажених бюджеті #### `agents.list[].skillsLimits.maxSkillsPromptChars` -Перевизначення для окремого агента для бюджету prompt Skills. +Перевизначення бюджету prompt для Skills для окремого агента. ```json5 { @@ -1131,11 +1132,11 @@ OpenClaw має кілька високонавантажених бюджеті ### `agents.defaults.imageMaxDimensionPx` -Максимальний розмір у пікселях для довшої сторони зображення в блоках зображень transcript/tool перед викликами провайдера. +Максимальний розмір у пікселях для довшої сторони зображення в блоках зображень transcript/tool перед викликами provider. Типове значення: `1200`. -Нижчі значення зазвичай зменшують використання vision-token і розмір payload запиту для сценаріїв із великою кількістю знімків екрана. -Вищі значення зберігають більше візуальних деталей. +Менші значення зазвичай зменшують використання vision-токенів і розмір payload запиту для запусків із великою кількістю знімків екрана. +Більші значення зберігають більше візуальних деталей. ```json5 { @@ -1145,7 +1146,7 @@ OpenClaw має кілька високонавантажених бюджеті ### `agents.defaults.userTimezone` -Часовий пояс для контексту системного prompt (не для часових міток повідомлень). Якщо не вдається визначити, використовується часовий пояс хоста. +Часовий пояс для контексту системного prompt (не часових міток повідомлень). Якщо не задано, використовується часовий пояс хоста. ```json5 { @@ -1193,9 +1194,9 @@ OpenClaw має кілька високонавантажених бюджеті primary: "anthropic/claude-opus-4-6", fallbacks: ["openai/gpt-5.4-mini"], }, - params: { cacheRetention: "long" }, // глобальні типові параметри провайдера + params: { cacheRetention: "long" }, // глобальні типові параметри provider embeddedHarness: { - runtime: "auto", // auto | pi | id зареєстрованого harness, наприклад codex + runtime: "auto", // auto | pi | registered harness id, e.g. codex fallback: "pi", // pi | none }, pdfMaxBytesMb: 10, @@ -1213,50 +1214,50 @@ OpenClaw має кілька високонавантажених бюджеті ``` - `model`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`). - - Форма рядка задає лише основну модель. - - Форма об’єкта задає основну модель плюс упорядковані моделі аварійного перемикання. + - Рядкова форма задає лише основну модель. + - Форма об’єкта задає основну модель плюс упорядковані моделі для failover. - `imageModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`). - Використовується шляхом інструмента `image` як конфігурація його vision-моделі. - - Також використовується для резервної маршрутизації, коли вибрана/типова модель не може приймати вхідні зображення. + - Також використовується як резервна маршрутизація, коли вибрана/типова модель не може приймати вхідні зображення. - `imageGenerationModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`). - - Використовується спільною можливістю генерації зображень і будь-якою майбутньою поверхнею tool/plugin, що генерує зображення. + - Використовується спільною можливістю генерації зображень і будь-якою майбутньою поверхнею tool/Plugin, що генерує зображення. - Типові значення: `google/gemini-3.1-flash-image-preview` для нативної генерації зображень Gemini, `fal/fal-ai/flux/dev` для fal або `openai/gpt-image-2` для OpenAI Images. - - Якщо ви вибираєте `provider/model` напряму, також налаштуйте відповідну автентифікацію провайдера/API-ключ (наприклад `GEMINI_API_KEY` або `GOOGLE_API_KEY` для `google/*`, `OPENAI_API_KEY` для `openai/*`, `FAL_KEY` для `fal/*`). - - Якщо параметр пропущено, `image_generate` усе одно може визначити типове значення провайдера з автентифікацією. Спочатку він пробує поточного типового провайдера, а потім решту зареєстрованих провайдерів генерації зображень у порядку provider-id. + - Якщо ви вибираєте `provider/model` напряму, також налаштуйте відповідну автентифікацію/API key provider (наприклад, `GEMINI_API_KEY` або `GOOGLE_API_KEY` для `google/*`, `OPENAI_API_KEY` для `openai/*`, `FAL_KEY` для `fal/*`). + - Якщо значення пропущено, `image_generate` усе одно може визначити типове значення provider з автентифікацією. Спочатку він пробує поточний типовий provider, а потім решту зареєстрованих provider генерації зображень у порядку ідентифікаторів provider. - `musicGenerationModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`). - Використовується спільною можливістю генерації музики та вбудованим інструментом `music_generate`. - Типові значення: `google/lyria-3-clip-preview`, `google/lyria-3-pro-preview` або `minimax/music-2.5+`. - - Якщо параметр пропущено, `music_generate` усе одно може визначити типове значення провайдера з автентифікацією. Спочатку він пробує поточного типового провайдера, а потім решту зареєстрованих провайдерів генерації музики в порядку provider-id. - - Якщо ви вибираєте `provider/model` напряму, також налаштуйте відповідну автентифікацію провайдера/API-ключ. + - Якщо значення пропущено, `music_generate` усе одно може визначити типове значення provider з автентифікацією. Спочатку він пробує поточний типовий provider, а потім решту зареєстрованих provider генерації музики в порядку ідентифікаторів provider. + - Якщо ви вибираєте `provider/model` напряму, також налаштуйте відповідну автентифікацію/API key provider. - `videoGenerationModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`). - Використовується спільною можливістю генерації відео та вбудованим інструментом `video_generate`. - Типові значення: `qwen/wan2.6-t2v`, `qwen/wan2.6-i2v`, `qwen/wan2.6-r2v`, `qwen/wan2.6-r2v-flash` або `qwen/wan2.7-r2v`. - - Якщо параметр пропущено, `video_generate` усе одно може визначити типове значення провайдера з автентифікацією. Спочатку він пробує поточного типового провайдера, а потім решту зареєстрованих провайдерів генерації відео в порядку provider-id. - - Якщо ви вибираєте `provider/model` напряму, також налаштуйте відповідну автентифікацію провайдера/API-ключ. - - Вбудований провайдер генерації відео Qwen підтримує до 1 вихідного відео, 1 вхідного зображення, 4 вхідних відео, тривалість до 10 секунд і параметри рівня провайдера `size`, `aspectRatio`, `resolution`, `audio` та `watermark`. + - Якщо значення пропущено, `video_generate` усе одно може визначити типове значення provider з автентифікацією. Спочатку він пробує поточний типовий provider, а потім решту зареєстрованих provider генерації відео в порядку ідентифікаторів provider. + - Якщо ви вибираєте `provider/model` напряму, також налаштуйте відповідну автентифікацію/API key provider. + - Bundled provider генерації відео Qwen підтримує до 1 вихідного відео, 1 вхідного зображення, 4 вхідних відео, тривалість до 10 секунд і параметри рівня provider `size`, `aspectRatio`, `resolution`, `audio` та `watermark`. - `pdfModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`). - Використовується інструментом `pdf` для маршрутизації моделі. - - Якщо параметр пропущено, інструмент PDF використовує резервно `imageModel`, а потім визначену модель сесії/типову модель. -- `pdfMaxBytesMb`: типове обмеження розміру PDF для інструмента `pdf`, коли `maxBytesMb` не передано під час виклику. -- `pdfMaxPages`: типова максимальна кількість сторінок, яку враховує резервний режим витягування в інструменті `pdf`. + - Якщо значення пропущено, інструмент PDF повертається до `imageModel`, а потім до визначеної моделі сесії/типової моделі. +- `pdfMaxBytesMb`: типовий ліміт розміру PDF для інструмента `pdf`, коли `maxBytesMb` не передано під час виклику. +- `pdfMaxPages`: типова максимальна кількість сторінок, що враховується в режимі резервного витягування інструмента `pdf`. - `verboseDefault`: типовий рівень verbose для агентів. Значення: `"off"`, `"on"`, `"full"`. Типове значення: `"off"`. - `elevatedDefault`: типовий рівень elevated-output для агентів. Значення: `"off"`, `"on"`, `"ask"`, `"full"`. Типове значення: `"on"`. -- `model.primary`: формат `provider/model` (наприклад `openai/gpt-5.4`). Якщо ви пропустите провайдера, OpenClaw спочатку спробує alias, потім унікальний збіг exact model id серед налаштованих провайдерів і лише після цього використає типового налаштованого провайдера (застаріла сумісна поведінка, тому краще вказувати явний `provider/model`). Якщо цей провайдер більше не надає налаштовану типову модель, OpenClaw використовує резервно перший налаштований `provider/model` замість того, щоб показувати застаріле типове значення видаленого провайдера. -- `models`: налаштований каталог моделей і allowlist для `/model`. Кожен запис може містити `alias` (скорочення) і `params` (специфічні для провайдера, наприклад `temperature`, `maxTokens`, `cacheRetention`, `context1m`). - - Безпечне редагування: використовуйте `openclaw config set agents.defaults.models '' --strict-json --merge`, щоб додати записи. `config set` відхиляє заміни, які прибрали б наявні записи allowlist, якщо ви не передасте `--replace`. - - Потоки configure/onboarding на рівні провайдера об’єднують вибрані моделі провайдера в цю карту та зберігають уже налаштованих не пов’язаних провайдерів. -- `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). -- `embeddedHarness`: типова політика низькорівневого runtime вбудованого агента. Використовуйте `runtime: "auto"`, щоб зареєстровані plugin harness заявляли підтримувані моделі, `runtime: "pi"`, щоб примусово використовувати вбудований harness PI, або id зареєстрованого harness, наприклад `runtime: "codex"`. Задайте `fallback: "none"`, щоб вимкнути автоматичний резервний PI. -- Засоби запису конфігурації, які змінюють ці поля (наприклад `/models set`, `/models set-image` і команди додавання/видалення резервних варіантів), зберігають канонічну форму об’єкта і, за можливості, зберігають наявні списки резервних варіантів. -- `maxConcurrent`: максимальна кількість паралельних запусків агентів між сесіями (кожна сесія все одно серіалізована). Типове значення: 4. +- `model.primary`: формат `provider/model` (наприклад, `openai/gpt-5.4`). Якщо пропустити provider, OpenClaw спочатку пробує alias, потім унікальний збіг exact model id серед налаштованих provider, і лише після цього повертається до налаштованого типового provider (застаріла сумісна поведінка, тому надавайте перевагу явному `provider/model`). Якщо цей provider більше не надає налаштовану типову модель, OpenClaw повертається до першого налаштованого provider/model замість того, щоб показувати застаріле типове значення від видаленого provider. +- `models`: налаштований каталог моделей і allowlist для `/model`. Кожен запис може містити `alias` (скорочення) і `params` (специфічні для provider, наприклад `temperature`, `maxTokens`, `cacheRetention`, `context1m`). + - Безпечні редагування: використовуйте `openclaw config set agents.defaults.models '' --strict-json --merge`, щоб додати записи. `config set` відмовляється від замін, які видалили б наявні записи allowlist, якщо не передано `--replace`. + - Потоки configure/onboarding, прив’язані до provider, об’єднують вибрані моделі provider у цю мапу й зберігають уже налаштовані, не пов’язані provider. +- `params`: глобальні типові параметри provider, що застосовуються до всіх моделей. Задаються в `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). +- `embeddedHarness`: типова політика низькорівневого runtime вбудованого агента. Використовуйте `runtime: "auto"`, щоб дозволити зареєстрованим harness Plugin заявляти підтримувані моделі, `runtime: "pi"` — щоб примусово використовувати вбудований harness PI, або зареєстрований id harness, наприклад `runtime: "codex"`. Установіть `fallback: "none"`, щоб вимкнути автоматичний резервний перехід на PI. +- Засоби запису конфігурації, які змінюють ці поля (наприклад, `/models set`, `/models set-image` і команди додавання/видалення fallback), зберігають канонічну форму об’єкта й за можливості зберігають наявні списки fallback. +- `maxConcurrent`: максимальна кількість паралельних запусків агентів між сесіями (кожна сесія все одно серіалізується). Типове значення: 4. ### `agents.defaults.embeddedHarness` `embeddedHarness` керує тим, який низькорівневий виконавець запускає ходи вбудованого агента. -У більшості розгортань слід залишати типове значення `{ runtime: "auto", fallback: "pi" }`. -Використовуйте це, коли довірений plugin надає нативний harness, наприклад комплектний -harness app-server Codex. +У більшості розгортань слід залишити типове значення `{ runtime: "auto", fallback: "pi" }`. +Використовуйте це, коли довірений Plugin надає нативний harness, наприклад bundled +harness сервера застосунку Codex. ```json5 { @@ -1272,13 +1273,14 @@ harness app-server Codex. } ``` -- `runtime`: `"auto"`, `"pi"` або id зареєстрованого plugin harness. Комплектний plugin Codex реєструє `codex`. -- `fallback`: `"pi"` або `"none"`. `"pi"` зберігає вбудований harness PI як сумісний резервний варіант, коли жоден plugin harness не вибрано. `"none"` змушує помилково завершуватися у випадку відсутності або непідтримуваного вибору plugin harness замість тихого використання PI. Помилки вибраного plugin harness завжди відображаються безпосередньо. -- Перевизначення через змінні середовища: `OPENCLAW_AGENT_RUNTIME=` перевизначає `runtime`; `OPENCLAW_AGENT_HARNESS_FALLBACK=none` вимикає резервний PI для цього процесу. -- Для розгортань лише з Codex задайте `model: "codex/gpt-5.4"`, `embeddedHarness.runtime: "codex"` і `embeddedHarness.fallback: "none"`. -- Це керує лише вбудованим chat harness. Генерація медіа, vision, PDF, музика, відео та TTS і далі використовують свої параметри provider/model. +- `runtime`: `"auto"`, `"pi"` або id зареєстрованого harness Plugin. Bundled Plugin Codex реєструє `codex`. +- `fallback`: `"pi"` або `"none"`. `"pi"` залишає вбудований harness PI як сумісний резервний варіант, коли harness Plugin не вибрано. `"none"` призводить до помилки, якщо вибір harness Plugin відсутній або не підтримується, замість тихого використання PI. Помилки вибраного harness Plugin завжди показуються напряму. +- Перевизначення через середовище: `OPENCLAW_AGENT_RUNTIME=` перевизначає `runtime`; `OPENCLAW_AGENT_HARNESS_FALLBACK=none` вимикає резервний перехід на PI для цього процесу. +- Для розгортань лише з Codex установіть `model: "codex/gpt-5.4"`, `embeddedHarness.runtime: "codex"` і `embeddedHarness.fallback: "none"`. +- Вибір harness закріплюється за id сесії після першого вбудованого запуску. Зміни config/env впливають на нові або скинуті сесії, але не на наявну стенограму. Застарілі сесії з історією стенограми, але без зафіксованого закріплення, вважаються закріпленими за PI. `/status` показує не-PI id harness, такі як `codex`, поруч із `Fast`. +- Це керує лише вбудованим chat-harness. Генерація медіа, vision, PDF, музика, відео й TTS усе ще використовують свої налаштування provider/model. -**Скорочені вбудовані alias** (застосовуються лише тоді, коли модель є в `agents.defaults.models`): +**Скорочення вбудованих alias** (застосовуються лише коли модель є в `agents.defaults.models`): | Alias | Модель | | ------------------- | -------------------------------------- | @@ -1291,15 +1293,15 @@ harness app-server Codex. | `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 GLM-4.x режим thinking вмикається автоматично, якщо ви не встановите `--thinking off` або самостійно не визначите `agents.defaults.models["zai/"].params.thinking`. Моделі Z.AI типово вмикають `tool_stream` для потокової передачі викликів інструментів. Установіть `agents.defaults.models["zai/"].params.tool_stream` у `false`, щоб вимкнути це. -Для моделей Anthropic Claude 4.6 типово використовується `adaptive` thinking, якщо не задано явний рівень thinking. +Для моделей Anthropic Claude 4.6 типово використовується `adaptive` thinking, якщо явний рівень thinking не задано. ### `agents.defaults.cliBackends` -Необов’язкові CLI-бекенди для резервних запусків лише з текстом (без викликів інструментів). Корисно як резервний варіант, коли API-провайдери недоступні. +Необов’язкові CLI-бекенди для резервних запусків лише з текстом (без викликів інструментів). Корисно як запасний варіант, коли API provider виходять з ладу. ```json5 { @@ -1327,13 +1329,13 @@ harness app-server Codex. } ``` -- CLI-бекенди орієнтовані насамперед на текст; інструменти завжди вимкнені. -- Сесії підтримуються, якщо задано `sessionArg`. -- Передача зображень підтримується, коли `imageArg` приймає шляхи до файлів. +- CLI-бекенди орієнтовані на текст; інструменти завжди вимкнені. +- Сесії підтримуються, коли задано `sessionArg`. +- Передавання зображень підтримується, коли `imageArg` приймає шляхи до файлів. ### `agents.defaults.systemPromptOverride` -Замінює весь системний prompt, зібраний OpenClaw, фіксованим рядком. Задається на типовому рівні (`agents.defaults.systemPromptOverride`) або для окремого агента (`agents.list[].systemPromptOverride`). Значення для окремого агента мають пріоритет; порожнє значення або значення лише з пробілів ігнорується. Корисно для контрольованих експериментів із prompt. +Замінює весь системний prompt, зібраний OpenClaw, фіксованим рядком. Установлюється на типовому рівні (`agents.defaults.systemPromptOverride`) або для окремого агента (`agents.list[].systemPromptOverride`). Значення для окремого агента мають пріоритет; порожнє значення або значення лише з пробілами ігнорується. Корисно для контрольованих експериментів із prompt. ```json5 { @@ -1347,7 +1349,7 @@ harness app-server Codex. ### `agents.defaults.promptOverlays` -Незалежні від провайдера overlays prompt, які застосовуються за сімейством моделей. ID моделей сімейства GPT-5 отримують спільний поведінковий контракт між провайдерами; `personality` керує лише шаром дружнього стилю взаємодії. +Незалежні від provider накладки prompt, що застосовуються за сімейством моделей. Ідентифікатори моделей сімейства GPT-5 отримують спільний поведінковий контракт для різних provider; `personality` керує лише дружнім шаром стилю взаємодії. ```json5 { @@ -1363,9 +1365,9 @@ harness app-server Codex. } ``` -- `"friendly"` (типово) і `"on"` вмикають шар дружнього стилю взаємодії. -- `"off"` вимикає лише дружній шар; позначений поведінковий контракт GPT-5 залишається ввімкненим. -- Застарілий `plugins.entries.openai.config.personality` і далі зчитується, якщо цей спільний параметр не задано. +- `"friendly"` (типово) і `"on"` вмикають дружній шар стилю взаємодії. +- `"off"` вимикає лише дружній шар; позначений поведінковий контракт GPT-5 залишається увімкненим. +- Застаріле `plugins.entries.openai.config.personality` усе ще читається, коли це спільне налаштування не задано. ### `agents.defaults.heartbeat` @@ -1376,16 +1378,16 @@ harness app-server Codex. agents: { defaults: { heartbeat: { - every: "30m", // 0m вимикає + every: "30m", // 0m disables 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, // default: true; false omits the Heartbeat section from the system prompt + lightContext: false, // default: false; true keeps only HEARTBEAT.md from workspace bootstrap files + isolatedSession: false, // default: false; true runs each heartbeat in a fresh session (no conversation history) session: "main", to: "+15555550123", - directPolicy: "allow", // allow (типово) | block - target: "none", // типово: none | варіанти: last | whatsapp | telegram | discord | ... + directPolicy: "allow", // allow (default) | block + target: "none", // default: none | options: last | whatsapp | telegram | discord | ... prompt: "Read HEARTBEAT.md if it exists...", ackMaxChars: 300, suppressToolErrorWarnings: false, @@ -1396,14 +1398,14 @@ harness app-server Codex. } ``` -- `every`: рядок тривалості (ms/s/m/h). Типове значення: `30m` (автентифікація API-ключем) або `1h` (автентифікація OAuth). Установіть `0m`, щоб вимкнути. -- `includeSystemPromptSection`: якщо false, прибирає розділ Heartbeat із системного prompt і пропускає вбудовування `HEARTBEAT.md` у bootstrap-контекст. Типове значення: `true`. -- `suppressToolErrorWarnings`: якщо true, приховує payload попереджень про помилки інструментів під час запусків Heartbeat. -- `timeoutSeconds`: максимальний час у секундах, дозволений для одного ходу агента Heartbeat до його переривання. Якщо не задано, використовується `agents.defaults.timeoutSeconds`. -- `directPolicy`: політика прямої доставки/DM. `allow` (типово) дозволяє доставку на прямі цілі. `block` пригнічує доставку на прямі цілі та виводить `reason=dm-blocked`. -- `lightContext`: якщо true, запуски Heartbeat використовують полегшений bootstrap-контекст і зберігають лише `HEARTBEAT.md` із bootstrap-файлів workspace. -- `isolatedSession`: якщо true, кожен Heartbeat запускається в новій сесії без попередньої історії розмови. Та сама схема ізоляції, що й для Cron `sessionTarget: "isolated"`. Зменшує вартість токенів для одного Heartbeat приблизно зі ~100K до ~2-5K токенів. -- Для окремого агента: задайте `agents.list[].heartbeat`. Якщо будь-який агент визначає `heartbeat`, Heartbeat запускаються **лише для цих агентів**. +- `every`: рядок тривалості (ms/s/m/h). Типове значення: `30m` (автентифікація через API key) або `1h` (автентифікація через OAuth). Установіть `0m`, щоб вимкнути. +- `includeSystemPromptSection`: коли значення false, секція Heartbeat пропускається в системному prompt, а вбудовування `HEARTBEAT.md` у bootstrap-контекст пропускається. Типове значення: `true`. +- `suppressToolErrorWarnings`: коли значення true, під час запусків heartbeat пригнічуються payload попереджень про помилки інструментів. +- `timeoutSeconds`: максимальний час у секундах, дозволений для одного ходу агента heartbeat, після чого його буде перервано. Залиште незаданим, щоб використовувати `agents.defaults.timeoutSeconds`. +- `directPolicy`: політика прямої доставки/доставки в DM. `allow` (типово) дозволяє доставку до прямої цілі. `block` пригнічує доставку до прямої цілі й видає `reason=dm-blocked`. +- `lightContext`: коли значення true, запуски heartbeat використовують полегшений bootstrap-контекст і зберігають лише `HEARTBEAT.md` із bootstrap-файлів workspace. +- `isolatedSession`: коли значення true, кожен heartbeat запускається в новій сесії без попередньої історії розмови. Такий самий шаблон ізоляції, як у Cron `sessionTarget: "isolated"`. Зменшує вартість одного heartbeat приблизно зі 100K до 2–5K токенів. +- Для окремого агента: задайте `agents.list[].heartbeat`. Якщо будь-який агент визначає `heartbeat`, heartbeat запускаються **лише для цих агентів**. - Heartbeat виконують повні ходи агента — коротші інтервали спалюють більше токенів. ### `agents.defaults.compaction` @@ -1414,14 +1416,14 @@ harness app-server Codex. defaults: { compaction: { mode: "safeguard", // default | safeguard - provider: "my-provider", // id зареєстрованого plugin провайдера Compaction (необов’язково) + provider: "my-provider", // id of a registered compaction provider plugin (optional) timeoutSeconds: 900, reserveTokensFloor: 24000, identifierPolicy: "strict", // strict | off | custom - identifierInstructions: "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) + identifierInstructions: "Preserve deployment IDs, ticket IDs, and host:port pairs exactly.", // used when identifierPolicy=custom + postCompactionSections: ["Session Startup", "Red Lines"], // [] disables reinjection + model: "openrouter/anthropic/claude-sonnet-4-6", // optional compaction-only model override + notifyUser: true, // send brief notices when compaction starts and completes (default: false) memoryFlush: { enabled: true, softThresholdTokens: 6000, @@ -1434,19 +1436,19 @@ harness app-server Codex. } ``` -- `mode`: `default` або `safeguard` (підсумовування великих історій частинами). Див. [Compaction](/uk/concepts/compaction). -- `provider`: id зареєстрованого plugin провайдера Compaction. Якщо задано, замість вбудованого підсумовування LLM викликається `summarize()` цього провайдера. У разі помилки повертається до вбудованого механізму. Задання провайдера примусово встановлює `mode: "safeguard"`. Див. [Compaction](/uk/concepts/compaction). -- `timeoutSeconds`: максимальна кількість секунд, дозволена для однієї операції Compaction, після чого OpenClaw її перериває. Типове значення: `900`. -- `identifierPolicy`: `strict` (типово), `off` або `custom`. `strict` додає вбудовані вказівки зі збереження непрозорих ідентифікаторів під час підсумовування Compaction. -- `identifierInstructions`: необов’язковий власний текст для збереження ідентифікаторів, який використовується, коли `identifierPolicy=custom`. -- `postCompactionSections`: необов’язкові назви секцій H2/H3 з `AGENTS.md`, які повторно вбудовуються після Compaction. Типово `["Session Startup", "Red Lines"]`; задайте `[]`, щоб вимкнути повторне вбудовування. Якщо не задано або явно встановлено цю типову пару, старі заголовки `Every Session`/`Safety` також приймаються як застарілий резервний варіант. -- `model`: необов’язкове перевизначення `provider/model-id` лише для підсумовування Compaction. Використовуйте це, якщо основна сесія має залишатися на одній моделі, а підсумки Compaction повинні виконуватися на іншій; якщо не задано, Compaction використовує основну модель сесії. -- `notifyUser`: якщо `true`, надсилає користувачеві короткі сповіщення, коли Compaction починається і коли завершується (наприклад, "Compacting context..." і "Compaction complete"). Типово вимкнено, щоб Compaction працював безшумно. -- `memoryFlush`: тихий хід агента перед автоматичним Compaction для збереження довготривалих записів у memory. Пропускається, якщо workspace доступний лише для читання. +- `mode`: `default` або `safeguard` (підсумовування довгих історій частинами). Див. [Compaction](/uk/concepts/compaction). +- `provider`: id зареєстрованого Plugin provider Compaction. Якщо задано, замість вбудованого LLM-підсумовування викликається `summarize()` цього provider. У разі збою повертається до вбудованого варіанта. Установлення provider примусово задає `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` також приймаються як застарілий резервний варіант. +- `model`: необов’язкове перевизначення `provider/model-id` лише для підсумовування Compaction. Використовуйте це, коли основна сесія має залишатися на одній моделі, а підсумки Compaction — виконуватися на іншій; якщо не задано, Compaction використовує основну модель сесії. +- `notifyUser`: коли `true`, надсилає короткі сповіщення користувачеві, коли Compaction починається і коли завершується (наприклад, "Compacting context..." і "Compaction complete"). Типово вимкнено, щоб Compaction залишався тихим. +- `memoryFlush`: тихий агентний хід перед автоматичним Compaction для збереження довготривалих записів у memory. Пропускається, якщо workspace лише для читання. ### `agents.defaults.contextPruning` -Обрізає **старі результати інструментів** з контексту в пам’яті перед надсиланням до LLM. **Не** змінює історію сесії на диску. +Обрізає **старі результати інструментів** із контексту в пам’яті перед надсиланням до LLM. **Не** змінює історію сесії на диску. ```json5 { @@ -1454,7 +1456,7 @@ harness app-server Codex. defaults: { contextPruning: { mode: "cache-ttl", // off | cache-ttl - ttl: "1h", // тривалість (ms/s/m/h), одиниця за замовчуванням: хвилини + ttl: "1h", // duration (ms/s/m/h), default unit: minutes keepLastAssistants: 3, softTrimRatio: 0.3, hardClearRatio: 0.5, @@ -1471,24 +1473,24 @@ harness app-server Codex. - `mode: "cache-ttl"` вмикає проходи обрізання. -- `ttl` керує тим, як часто обрізання може виконуватися знову (після останнього торкання кешу). -- Обрізання спочатку м’яко скорочує завеликі результати інструментів, а потім жорстко очищає старіші результати інструментів, якщо це потрібно. +- `ttl` керує тим, як часто обрізання може запускатися знову (після останнього звернення до кешу). +- Спочатку обрізання м’яко скорочує завеликі результати інструментів, а потім за потреби жорстко очищає старіші результати інструментів. -**М’яке обрізання** зберігає початок і кінець та вставляє `...` посередині. +**М’яке обрізання** зберігає початок + кінець і вставляє `...` посередині. -**Жорстке очищення** замінює весь результат інструмента на заповнювач. +**Жорстке очищення** замінює весь результат інструмента заповнювачем. Примітки: - Блоки зображень ніколи не обрізаються й не очищаються. -- Співвідношення базуються на символах (приблизно), а не на точній кількості токенів. -- Якщо існує менше ніж `keepLastAssistants` повідомлень асистента, обрізання пропускається. +- Співвідношення обчислюються за символами (приблизно), а не за точною кількістю токенів. +- Якщо повідомлень assistant менше, ніж `keepLastAssistants`, обрізання пропускається. Подробиці поведінки див. у [Session Pruning](/uk/concepts/session-pruning). -### Блокова потокова передача +### Потокова передача блоками ```json5 { @@ -1498,19 +1500,19 @@ harness app-server Codex. blockStreamingBreak: "text_end", // text_end | message_end blockStreamingChunk: { minChars: 800, maxChars: 1200 }, blockStreamingCoalesce: { idleMs: 1000 }, - humanDelay: { mode: "natural" }, // off | natural | custom (використовуйте minMs/maxMs) + humanDelay: { mode: "natural" }, // off | natural | custom (use minMs/maxMs) }, }, } ``` -- Для каналів, відмінних від Telegram, потрібне явне `*.blockStreaming: true`, щоб увімкнути блокові відповіді. -- Перевизначення для channel: `channels..blockStreamingCoalesce` (і варіанти для окремого облікового запису). Для Signal/Slack/Discord/Google Chat типово `minChars: 1500`. -- `humanDelay`: випадкова пауза між блоками відповідей. `natural` = 800–2500 мс. Перевизначення для окремого агента: `agents.list[].humanDelay`. +- Для каналів, відмінних від Telegram, потрібне явне `*.blockStreaming: true`, щоб увімкнути відповіді блоками. +- Перевизначення для каналу: `channels..blockStreamingCoalesce` (і варіанти для окремих облікових записів). Для Signal/Slack/Discord/Google Chat типово `minChars: 1500`. +- `humanDelay`: випадкова пауза між блоками відповіді. `natural` = 800–2500 ms. Перевизначення для окремого агента: `agents.list[].humanDelay`. -Подробиці поведінки та chunking див. у [Streaming](/uk/concepts/streaming). +Подробиці про поведінку й розбиття на частини див. у [Streaming](/uk/concepts/streaming). -### Індикатори введення +### Індикатори набору тексту ```json5 { @@ -1523,8 +1525,8 @@ harness app-server Codex. } ``` -- Типові значення: `instant` для прямих чатів/згадок, `message` для групових чатів без згадки. -- Перевизначення для окремої сесії: `session.typingMode`, `session.typingIntervalSeconds`. +- Типові значення: `instant` для прямих чатів/згадувань, `message` для групових чатів без згадування. +- Перевизначення для сесії: `session.typingMode`, `session.typingIntervalSeconds`. Див. [Typing Indicators](/uk/concepts/typing-indicators). @@ -1532,7 +1534,7 @@ harness app-server Codex. ### `agents.defaults.sandbox` -Необов’язковий sandbox для вбудованого агента. Повний посібник див. у [Sandboxing](/uk/gateway/sandboxing). +Необов’язкове sandboxing для вбудованого агента. Повний посібник див. у [Sandboxing](/uk/gateway/sandboxing). ```json5 { @@ -1578,7 +1580,7 @@ harness app-server Codex. identityFile: "~/.ssh/id_ed25519", certificateFile: "~/.ssh/id_ed25519-cert.pub", knownHostsFile: "~/.ssh/known_hosts", - // Також підтримуються SecretRef / вбудований вміст: + // SecretRefs / inline contents also supported: // identityData: { source: "env", provider: "default", id: "SSH_IDENTITY" }, // certificateData: { source: "env", provider: "default", id: "SSH_CERTIFICATE" }, // knownHostsData: { source: "env", provider: "default", id: "SSH_KNOWN_HOSTS" }, @@ -1627,54 +1629,54 @@ harness app-server Codex. } ``` - + -**Бекенд:** +**Backend:** - `docker`: локальний runtime Docker (типово) -- `ssh`: загальний віддалений runtime через SSH +- `ssh`: загальний віддалений runtime на основі SSH - `openshell`: runtime OpenShell -Коли вибрано `backend: "openshell"`, параметри, специфічні для runtime, переносяться до +Коли вибрано `backend: "openshell"`, налаштування, специфічні для runtime, переносяться в `plugins.entries.openshell.config`. -**Конфігурація SSH-бекенда:** +**Конфігурація backend SSH:** -- `target`: ціль SSH у формі `user@host[:port]` +- `target`: ціль SSH у форматі `user@host[:port]` - `command`: команда SSH-клієнта (типово: `ssh`) -- `workspaceRoot`: абсолютний віддалений корінь, який використовується для workspace для кожної області -- `identityFile` / `certificateFile` / `knownHostsFile`: наявні локальні файли, передані в OpenSSH -- `identityData` / `certificateData` / `knownHostsData`: вбудований вміст або SecretRef, який OpenClaw матеріалізує у тимчасові файли під час runtime -- `strictHostKeyChecking` / `updateHostKeys`: параметри політики ключів хоста OpenSSH +- `workspaceRoot`: абсолютний віддалений корінь, що використовується для workspace відповідного scope +- `identityFile` / `certificateFile` / `knownHostsFile`: наявні локальні файли, передані до OpenSSH +- `identityData` / `certificateData` / `knownHostsData`: вбудований вміст або SecretRefs, які OpenClaw матеріалізує у тимчасові файли під час runtime +- `strictHostKeyChecking` / `updateHostKeys`: ручки політики ключів хоста OpenSSH -**Пріоритет SSH-автентифікації:** +**Пріоритет автентифікації SSH:** - `identityData` має пріоритет над `identityFile` - `certificateData` має пріоритет над `certificateFile` - `knownHostsData` має пріоритет над `knownHostsFile` -- Значення `*Data` на основі SecretRef визначаються з активного знімка runtime секретів до запуску sandbox-сесії +- Значення `*Data`, забезпечені SecretRef, визначаються з активного знімка runtime secrets до початку сесії sandbox -**Поведінка SSH-бекенда:** +**Поведінка backend SSH:** -- один раз ініціалізує віддалений workspace після create або recreate -- потім зберігає віддалений SSH-workspace як канонічний -- маршрутизує `exec`, файлові інструменти та шляхи медіа через SSH +- один раз ініціалізує віддалений workspace після створення або перевідтворення +- потім підтримує віддалений SSH-workspace як канонічний +- маршрутизує `exec`, файлові інструменти й шляхи до медіа через SSH - не синхронізує автоматично віддалені зміни назад на хост -- не підтримує контейнери браузера sandbox +- не підтримує браузерні контейнери sandbox **Доступ до workspace:** -- `none`: workspace sandbox для кожної області в `~/.openclaw/sandboxes` +- `none`: workspace sandbox для кожного scope у `~/.openclaw/sandboxes` - `ro`: workspace sandbox у `/workspace`, workspace агента монтується лише для читання в `/agent` - `rw`: workspace агента монтується для читання/запису в `/workspace` -**Область:** +**Scope:** - `session`: окремий контейнер + workspace для кожної сесії - `agent`: один контейнер + workspace для кожного агента (типово) - `shared`: спільний контейнер і workspace (без ізоляції між сесіями) -**Конфігурація plugin OpenShell:** +**Конфігурація Plugin OpenShell:** ```json5 { @@ -1687,10 +1689,10 @@ harness app-server Codex. from: "openclaw", remoteWorkspaceDir: "/sandbox", remoteAgentWorkspaceDir: "/agent", - gateway: "lab", // необов’язково - gatewayEndpoint: "https://lab.example", // необов’язково - policy: "strict", // необов’язковий id політики OpenShell - providers: ["openai"], // необов’язково + gateway: "lab", // optional + gatewayEndpoint: "https://lab.example", // optional + policy: "strict", // optional OpenShell policy id + providers: ["openai"], // optional autoProviders: true, timeoutSeconds: 120, }, @@ -1702,30 +1704,30 @@ harness app-server Codex. **Режим OpenShell:** -- `mirror`: ініціалізувати віддалений workspace з локального перед exec, синхронізувати назад після exec; локальний workspace залишається канонічним -- `remote`: один раз ініціалізувати віддалений workspace під час створення sandbox, після чого канонічним залишається віддалений workspace +- `mirror`: перед `exec` ініціалізує віддалений простір із локального, після `exec` синхронізує назад; локальний workspace залишається канонічним +- `remote`: один раз ініціалізує віддалений простір під час створення sandbox, після чого канонічним залишається віддалений workspace -У режимі `remote` локальні зміни хоста, зроблені поза OpenClaw, не синхронізуються в sandbox автоматично після кроку ініціалізації. -Транспортом є SSH до sandbox OpenShell, але plugin керує життєвим циклом sandbox і необов’язковою синхронізацією mirror. +У режимі `remote` локальні зміни на хості, зроблені поза OpenClaw, не синхронізуються в sandbox автоматично після кроку ініціалізації. +Транспортом є SSH у sandbox OpenShell, але Plugin керує життєвим циклом sandbox і необов’язковою синхронізацією mirror. -**`setupCommand`** виконується один раз після створення контейнера (через `sh -lc`). Потребує вихідного доступу до мережі, записуваного root і root-користувача. +**`setupCommand`** виконується один раз після створення контейнера (через `sh -lc`). Потребує вихідного доступу до мережі, доступного для запису кореня та користувача root. -**Контейнери типово використовують `network: "none"`** — установіть `"bridge"` (або власну bridge-мережу), якщо агенту потрібен вихідний доступ. +**Для контейнерів типово встановлено `network: "none"`** — установіть `"bridge"` (або користувацьку bridge-мережу), якщо агенту потрібен вихідний доступ. `"host"` заблоковано. `"container:"` типово заблоковано, якщо ви явно не встановите -`sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true` (break-glass). +`sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true` (режим break-glass). **Вхідні вкладення** розміщуються в `media/inbound/*` в активному workspace. -**`docker.binds`** монтує додаткові каталоги хоста; глобальні прив’язки й прив’язки для окремого агента об’єднуються. +**`docker.binds`** монтує додаткові каталоги хоста; глобальні bind та bind для окремого агента об’єднуються. -**Браузер у sandbox** (`sandbox.browser.enabled`): Chromium + CDP у контейнері. URL noVNC вбудовується в системний prompt. Не потребує `browser.enabled` у `openclaw.json`. -Доступ спостерігача через noVNC типово використовує VNC-автентифікацію, і OpenClaw видає короткоживучий URL із токеном (замість того, щоб розкривати пароль у спільному URL). +**Sandboxed browser** (`sandbox.browser.enabled`): Chromium + CDP у контейнері. URL noVNC вбудовується в системний prompt. Не потребує `browser.enabled` у `openclaw.json`. +Доступ спостерігача через noVNC типово використовує автентифікацію VNC, а OpenClaw видає URL із короткоживучим токеном (замість розкриття пароля у спільному URL). -- `allowHostControl: false` (типово) блокує націлювання sandbox-сесій на браузер хоста. -- `network` типово дорівнює `openclaw-sandbox-browser` (окрема bridge-мережа). Установлюйте `bridge` лише тоді, коли вам явно потрібна глобальна зв’язність bridge. -- `cdpSourceRange` необов’язково обмежує вхідний CDP-трафік на межі контейнера до діапазону CIDR (наприклад `172.21.0.1/32`). -- `sandbox.browser.binds` монтує додаткові каталоги хоста лише в контейнер браузера sandbox. Якщо задано (включно з `[]`), воно замінює `docker.binds` для контейнера браузера. -- Типові параметри запуску визначено в `scripts/sandbox-browser-entrypoint.sh` і налаштовано для контейнерних хостів: +- `allowHostControl: false` (типово) блокує націлювання sandboxed-сесій на браузер хоста. +- `network` типово має значення `openclaw-sandbox-browser` (окрема bridge-мережа). Установлюйте `bridge` лише тоді, коли вам явно потрібна глобальна bridge-зв’язність. +- `cdpSourceRange` за потреби обмежує вхідний CDP-трафік на межі контейнера діапазоном CIDR (наприклад, `172.21.0.1/32`). +- `sandbox.browser.binds` монтує додаткові каталоги хоста лише в контейнер browser sandbox. Якщо задано (включно з `[]`), це замінює `docker.binds` для контейнера browser. +- Типові параметри запуску визначено в `scripts/sandbox-browser-entrypoint.sh` і налаштовано для хостів із контейнерами: - `--remote-debugging-address=127.0.0.1` - `--remote-debugging-port=` - `--user-data-dir=${HOME}/.chrome` @@ -1744,26 +1746,26 @@ harness app-server Codex. - `--metrics-recording-only` - `--disable-extensions` (типово ввімкнено) - `--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` знову вмикає розширення, якщо ваш сценарій + роботи залежить від них. - `--renderer-process-limit=2` можна змінити через `OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=`; установіть `0`, щоб використовувати - типове обмеження процесів Chromium. + типовий ліміт процесів Chromium. - а також `--no-sandbox` і `--disable-setuid-sandbox`, коли ввімкнено `noSandbox`. - - Типові значення є базовими для образу контейнера; використовуйте власний образ браузера з власним - entrypoint, щоб змінити типові параметри контейнера. + - Типові значення є базовими для образу контейнера; щоб змінити типові параметри контейнера, + використовуйте користувацький образ browser із користувацьким entrypoint. -Браузерний sandbox і `sandbox.docker.binds` доступні лише для Docker. +Sandboxing browser і `sandbox.docker.binds` доступні лише для Docker. -Збірка образів: +Збирання образів: ```bash -scripts/sandbox-setup.sh # основний образ sandbox -scripts/sandbox-browser-setup.sh # необов’язковий образ браузера +scripts/sandbox-setup.sh # main sandbox image +scripts/sandbox-browser-setup.sh # optional browser image ``` ### `agents.list` (перевизначення для окремого агента) @@ -1778,13 +1780,13 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б name: "Main Agent", workspace: "~/.openclaw/workspace", agentDir: "~/.openclaw/agents/main/agent", - model: "anthropic/claude-opus-4-6", // або { primary, fallbacks } - thinkingDefault: "high", // перевизначення рівня thinking для окремого агента - reasoningDefault: "on", // перевизначення видимості reasoning для окремого агента - fastModeDefault: false, // перевизначення fast mode для окремого агента + model: "anthropic/claude-opus-4-6", // or { primary, fallbacks } + thinkingDefault: "high", // per-agent thinking level override + reasoningDefault: "on", // per-agent reasoning visibility override + fastModeDefault: false, // per-agent fast mode override embeddedHarness: { runtime: "auto", fallback: "pi" }, - params: { cacheRetention: "none" }, // перевизначає matching defaults.models params за ключем - skills: ["docs-search"], // замінює agents.defaults.skills, коли задано + params: { cacheRetention: "none" }, // overrides matching defaults.models params by key + skills: ["docs-search"], // replaces agents.defaults.skills when set identity: { name: "Samantha", theme: "helpful sloth", @@ -1816,26 +1818,26 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б ``` - `id`: стабільний id агента (обов’язково). -- `default`: якщо встановлено для кількох, перший перемагає (з попередженням у логах). Якщо не встановлено ні для кого, типовим є перший запис у списку. -- `model`: форма рядка перевизначає лише `primary`; форма об’єкта `{ primary, fallbacks }` перевизначає обидва (`[]` вимикає глобальні резервні моделі). Завдання Cron, які перевизначають лише `primary`, усе одно успадковують типові резервні моделі, якщо ви не задасте `fallbacks: []`. -- `params`: параметри потоку для окремого агента, об’єднані поверх вибраного запису моделі в `agents.defaults.models`. Використовуйте це для специфічних для агента перевизначень, таких як `cacheRetention`, `temperature` або `maxTokens`, не дублюючи весь каталог моделей. -- `skills`: необов’язковий allowlist Skills для окремого агента. Якщо пропущено, агент успадковує `agents.defaults.skills`, якщо його задано; явний список замінює типові значення замість об’єднання, а `[]` означає відсутність Skills. -- `thinkingDefault`: необов’язковий типовий рівень thinking для окремого агента (`off | minimal | low | medium | high | xhigh | adaptive | max`). Перевизначає `agents.defaults.thinkingDefault` для цього агента, коли не задано перевизначення для окремого повідомлення або сесії. -- `reasoningDefault`: необов’язкова типова видимість reasoning для окремого агента (`on | off | stream`). Застосовується, коли не задано перевизначення reasoning для окремого повідомлення або сесії. +- `default`: коли задано для кількох агентів, перший має пріоритет (записується попередження). Якщо не задано ніде, типовим є перший запис у списку. +- `model`: рядкова форма перевизначає лише `primary`; форма об’єкта `{ primary, fallbacks }` перевизначає обидва (`[]` вимикає глобальні fallback). Cron-завдання, які перевизначають лише `primary`, усе одно успадковують типові fallback, якщо не встановити `fallbacks: []`. +- `params`: параметри потоку для окремого агента, які об’єднуються поверх вибраного запису моделі в `agents.defaults.models`. Використовуйте це для перевизначень, специфічних для агента, як-от `cacheRetention`, `temperature` або `maxTokens`, не дублюючи весь каталог моделей. +- `skills`: необов’язковий allowlist Skills для окремого агента. Якщо не задано, агент успадковує `agents.defaults.skills`, якщо його визначено; явний список замінює типові значення замість об’єднання, а `[]` означає відсутність Skills. +- `thinkingDefault`: необов’язкове типове значення рівня thinking для окремого агента (`off | minimal | low | medium | high | xhigh | adaptive | max`). Перевизначає `agents.defaults.thinkingDefault` для цього агента, коли не задано перевизначення для окремого повідомлення або сесії. +- `reasoningDefault`: необов’язкове типове значення видимості reasoning для окремого агента (`on | off | stream`). Застосовується, коли не задано перевизначення reasoning для окремого повідомлення або сесії. - `fastModeDefault`: необов’язкове типове значення fast mode для окремого агента (`true | false`). Застосовується, коли не задано перевизначення fast mode для окремого повідомлення або сесії. -- `embeddedHarness`: необов’язкове перевизначення політики низькорівневого harness для окремого агента. Використовуйте `{ runtime: "codex", fallback: "none" }`, щоб зробити один агент лише Codex, тоді як інші агенти зберігатимуть типовий резервний PI. -- `runtime`: необов’язковий дескриптор runtime для окремого агента. Використовуйте `type: "acp"` з типовими значеннями `runtime.acp` (`agent`, `backend`, `mode`, `cwd`), коли агент має типово використовувати ACP harness-сесії. +- `embeddedHarness`: необов’язкове перевизначення політики низькорівневого harness для окремого агента. Використовуйте `{ runtime: "codex", fallback: "none" }`, щоб зробити один агент лише Codex, тоді як інші агенти зберігатимуть типовий fallback PI. +- `runtime`: необов’язковий дескриптор runtime для окремого агента. Використовуйте `type: "acp"` разом із типовими значеннями `runtime.acp` (`agent`, `backend`, `mode`, `cwd`), коли агент має типово використовувати ACP-harness-сесії. - `identity.avatar`: шлях відносно workspace, URL `http(s)` або URI `data:`. - `identity` виводить типові значення: `ackReaction` з `emoji`, `mentionPatterns` з `name`/`emoji`. - `subagents.allowAgents`: allowlist id агентів для `sessions_spawn` (`["*"]` = будь-який; типово: лише той самий агент). -- Захист успадкування sandbox: якщо сесія запитувача працює в sandbox, `sessions_spawn` відхиляє цілі, які запускалися б без sandbox. -- `subagents.requireAgentId`: якщо true, блокує виклики `sessions_spawn`, які пропускають `agentId` (примушує явно вибирати профіль; типово: false). +- Захист успадкування sandbox: якщо сесія запитувача працює в sandbox, `sessions_spawn` відхиляє цілі, які працювали б без sandbox. +- `subagents.requireAgentId`: коли true, блокує виклики `sessions_spawn`, у яких пропущено `agentId` (примушує явний вибір профілю; типово: false). --- -## Маршрутизація кількох агентів +## Маршрутизація між кількома агентами -Запускайте кількох ізольованих агентів у межах одного Gateway. Див. [Multi-Agent](/uk/concepts/multi-agent). +Запускайте кількох ізольованих агентів в одному Gateway. Див. [Multi-Agent](/uk/concepts/multi-agent). ```json5 { @@ -1852,13 +1854,13 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б } ``` -### Поля збігу прив’язки +### Поля збігу прив’язок -- `type` (необов’язково): `route` для звичайної маршрутизації (відсутній type типово означає route), `acp` для постійних прив’язок розмов ACP. +- `type` (необов’язково): `route` для звичайної маршрутизації (якщо `type` відсутній, типово використовується route), `acp` для постійних ACP-прив’язок розмов. - `match.channel` (обов’язково) -- `match.accountId` (необов’язково; `*` = будь-який обліковий запис; пропущено = типовий обліковий запис) +- `match.accountId` (необов’язково; `*` = будь-який обліковий запис; якщо пропущено = типовий обліковий запис) - `match.peer` (необов’язково; `{ kind: direct|group|channel, id }`) -- `match.guildId` / `match.teamId` (необов’язково; специфічно для channel) +- `match.guildId` / `match.teamId` (необов’язково; специфічно для каналу) - `acp` (необов’язково; лише для записів `type: "acp"`): `{ mode, label, cwd, backend }` **Детермінований порядок збігу:** @@ -1867,14 +1869,14 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б 2. `match.guildId` 3. `match.teamId` 4. `match.accountId` (точний, без peer/guild/team) -5. `match.accountId: "*"` (на рівні всього channel) +5. `match.accountId: "*"` (на рівні всього каналу) 6. Типовий агент -У межах кожного рівня перемагає перший запис `bindings`, що збігся. +У межах кожного рівня перемагає перший відповідний запис `bindings`. -Для записів `type: "acp"` OpenClaw виконує визначення за точною ідентичністю розмови (`match.channel` + обліковий запис + `match.peer.id`) і не використовує порядок рівнів прив’язки route, наведений вище. +Для записів `type: "acp"` OpenClaw визначає збіг за точною ідентичністю розмови (`match.channel` + обліковий запис + `match.peer.id`) і не використовує наведений вище порядок рівнів прив’язок route. -### Профілі доступу для окремого агента +### Профілі доступу для окремих агентів @@ -1923,7 +1925,7 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б - + ```json5 { @@ -1969,7 +1971,7 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б -Подробиці пріоритетів див. у [Multi-Agent Sandbox & Tools](/uk/tools/multi-agent-sandbox-tools). +Подробиці про пріоритетність див. у [Multi-Agent Sandbox & Tools](/uk/tools/multi-agent-sandbox-tools). --- @@ -1995,22 +1997,22 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б }, resetTriggers: ["/new", "/reset"], store: "~/.openclaw/agents/{agentId}/sessions/sessions.json", - parentForkMaxTokens: 100000, // пропускати fork батьківського потоку вище цього числа токенів (0 вимикає) + parentForkMaxTokens: 100000, // skip parent-thread fork above this token count (0 disables) maintenance: { mode: "warn", // warn | enforce pruneAfter: "30d", maxEntries: 500, rotateBytes: "10mb", - resetArchiveRetention: "30d", // тривалість або false - maxDiskBytes: "500mb", // необов’язковий жорсткий бюджет - highWaterBytes: "400mb", // необов’язкова ціль очищення + resetArchiveRetention: "30d", // duration or false + maxDiskBytes: "500mb", // optional hard budget + highWaterBytes: "400mb", // optional cleanup target }, threadBindings: { enabled: true, - idleHours: 24, // типове автоматичне зняття фокуса через неактивність у годинах (`0` вимикає) - maxAgeHours: 0, // типовий жорсткий максимальний вік у годинах (`0` вимикає) + idleHours: 24, // default inactivity auto-unfocus in hours (`0` disables) + maxAgeHours: 0, // default hard max age in hours (`0` disables) }, - mainKey: "main", // застаріле (runtime завжди використовує "main") + mainKey: "main", // legacy (runtime always uses "main") agentToAgent: { maxPingPongTurns: 5 }, sendPolicy: { rules: [{ action: "deny", match: { channel: "discord", chatType: "group" } }], @@ -2020,37 +2022,37 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б } ``` - + - **`scope`**: базова стратегія групування сесій для контекстів групового чату. - - `per-sender` (типово): кожен відправник отримує ізольовану сесію в межах контексту channel. - - `global`: усі учасники в контексті channel спільно використовують одну сесію (використовуйте лише тоді, коли спільний контекст є очікуваним). -- **`dmScope`**: як групуються DM. + - `per-sender` (типово): кожен відправник отримує ізольовану сесію в межах контексту каналу. + - `global`: усі учасники в межах контексту каналу спільно використовують одну сесію (використовуйте лише тоді, коли спільний контекст справді потрібен). +- **`dmScope`**: спосіб групування DM. - `main`: усі DM спільно використовують основну сесію. - - `per-peer`: ізоляція за id відправника між channels. - - `per-channel-peer`: ізоляція для кожного channel + відправника (рекомендовано для багато користувацьких inbox). - - `per-account-channel-peer`: ізоляція для кожного облікового запису + channel + відправника (рекомендовано для багатооблікових конфігурацій). -- **`identityLinks`**: карта канонічних id до peer із префіксом провайдера для спільного використання сесій між channels. -- **`reset`**: основна політика скидання. `daily` скидає о `atHour` за місцевим часом; `idle` скидає після `idleMinutes`. Коли налаштовано обидва, спрацьовує той, у якого термін спливає раніше. -- **`resetByType`**: перевизначення за типом (`direct`, `group`, `thread`). Застарілий `dm` приймається як псевдонім для `direct`. -- **`parentForkMaxTokens`**: максимальне дозволене значення `totalTokens` батьківської сесії під час створення fork сесії потоку (типово `100000`). - - Якщо батьківське `totalTokens` вище за це значення, OpenClaw запускає нову сесію потоку замість успадкування історії transcript батьківської сесії. - - Установіть `0`, щоб вимкнути цей запобіжник і завжди дозволяти fork від батьківської сесії. -- **`mainKey`**: застаріле поле. Runtime завжди використовує `"main"` для основного кошика прямого чату. -- **`agentToAgent.maxPingPongTurns`**: максимальна кількість ходів відповіді назад між агентами під час обмінів агент-агент (ціле число, діапазон: `0`–`5`). `0` вимикає ланцюжок ping-pong. -- **`sendPolicy`**: зіставлення за `channel`, `chatType` (`direct|group|channel`, із застарілим псевдонімом `dm`), `keyPrefix` або `rawKeyPrefix`. Перша заборона має пріоритет. -- **`maintenance`**: елементи керування очищенням і retention сховища сесій. - - `mode`: `warn` лише виводить попередження; `enforce` застосовує очищення. - - `pruneAfter`: віковий поріг для застарілих записів (типово `30d`). + - `per-peer`: ізоляція за id відправника між каналами. + - `per-channel-peer`: ізоляція для кожної комбінації канал + відправник (рекомендовано для inbox з кількома користувачами). + - `per-account-channel-peer`: ізоляція для кожної комбінації обліковий запис + канал + відправник (рекомендовано для багатообліковості). +- **`identityLinks`**: мапа канонічних id до peer із префіксом provider для спільного використання сесій між каналами. +- **`reset`**: основна політика скидання. `daily` скидає о `atHour` за місцевим часом; `idle` скидає після `idleMinutes`. Якщо налаштовано обидва параметри, спрацьовує той, що спливає раніше. +- **`resetByType`**: перевизначення за типом (`direct`, `group`, `thread`). Застарілий `dm` приймається як alias для `direct`. +- **`parentForkMaxTokens`**: максимальне значення `totalTokens` батьківської сесії, дозволене під час створення форкнутої сесії треду (типово `100000`). + - Якщо значення `totalTokens` батьківської сесії вище за це значення, OpenClaw запускає нову сесію треду замість успадкування історії стенограми батьківської сесії. + - Установіть `0`, щоб вимкнути цей захист і завжди дозволяти форк від батьківської сесії. +- **`mainKey`**: застаріле поле. Runtime завжди використовує `"main"` для основного бакета прямого чату. +- **`agentToAgent.maxPingPongTurns`**: максимальна кількість ходів відповіді назад між агентами під час обмінів агент-до-агента (ціле число, діапазон: `0`–`5`). `0` вимикає ping-pong-ланцюжки. +- **`sendPolicy`**: збіг за `channel`, `chatType` (`direct|group|channel`, із застарілим alias `dm`), `keyPrefix` або `rawKeyPrefix`. Перша заборона перемагає. +- **`maintenance`**: керування очищенням сховища сесій + правилами зберігання. + - `mode`: `warn` лише видає попередження; `enforce` застосовує очищення. + - `pruneAfter`: поріг віку для застарілих записів (типово `30d`). - `maxEntries`: максимальна кількість записів у `sessions.json` (типово `500`). - `rotateBytes`: ротує `sessions.json`, коли він перевищує цей розмір (типово `10mb`). - - `resetArchiveRetention`: retention для архівів transcript `*.reset.`. Типово дорівнює `pruneAfter`; установіть `false`, щоб вимкнути. - - `maxDiskBytes`: необов’язковий бюджет диска для каталогу сесій. У режимі `warn` він записує попередження в логи; у режимі `enforce` спочатку видаляє найстаріші артефакти/сесії. - - `highWaterBytes`: необов’язкова ціль після очищення бюджету. Типово `80%` від `maxDiskBytes`. -- **`threadBindings`**: глобальні типові значення для функцій сесій, прив’язаних до потоків. - - `enabled`: головний типовий перемикач (провайдери можуть перевизначати; Discord використовує `channels.discord.threadBindings.enabled`) - - `idleHours`: типове автоматичне зняття фокуса через неактивність у годинах (`0` вимикає; провайдери можуть перевизначати) - - `maxAgeHours`: типовий жорсткий максимальний вік у годинах (`0` вимикає; провайдери можуть перевизначати) + - `resetArchiveRetention`: строк зберігання архівів стенограм `*.reset.`. Типово дорівнює `pruneAfter`; установіть `false`, щоб вимкнути. + - `maxDiskBytes`: необов’язковий жорсткий бюджет дискового простору для каталогу сесій. У режимі `warn` він записує попередження; у режимі `enforce` спочатку видаляє найстаріші артефакти/сесії. + - `highWaterBytes`: необов’язкова ціль після очищення за бюджетом. Типово дорівнює `80%` від `maxDiskBytes`. +- **`threadBindings`**: глобальні типові значення для функцій сесій, прив’язаних до тредів. + - `enabled`: головний типовий перемикач (provider можуть перевизначати; Discord використовує `channels.discord.threadBindings.enabled`) + - `idleHours`: типове автоматичне зняття фокуса через неактивність у годинах (`0` вимикає; provider можуть перевизначати) + - `maxAgeHours`: типове жорстке обмеження віку в годинах (`0` вимикає; provider можуть перевизначати) @@ -2061,7 +2063,7 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б ```json5 { messages: { - responsePrefix: "🦞", // або "auto" + responsePrefix: "🦞", // or "auto" ackReaction: "👀", ackReactionScope: "group-mentions", // group-mentions | group-all | direct | all removeAckAfterReply: false, @@ -2076,7 +2078,7 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б }, }, inbound: { - debounceMs: 2000, // 0 вимикає + debounceMs: 2000, // 0 disables byChannel: { whatsapp: 5000, slack: 1500, @@ -2088,36 +2090,36 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б ### Префікс відповіді -Перевизначення для окремого channel/облікового запису: `channels..responsePrefix`, `channels..accounts..responsePrefix`. +Перевизначення для каналу/облікового запису: `channels..responsePrefix`, `channels..accounts..responsePrefix`. -Порядок визначення (найспецифічніше перемагає): обліковий запис → channel → глобальний. `""` вимикає та зупиняє каскад. `"auto"` виводить `[{identity.name}]`. +Порядок визначення (перемагає найбільш конкретне): обліковий запис → канал → глобальне значення. `""` вимикає й зупиняє каскад. `"auto"` виводить `[{identity.name}]`. **Змінні шаблону:** -| Змінна | Опис | Приклад | -| ---------------- | ----------------------- | --------------------------- | -| `{model}` | Коротка назва моделі | `claude-opus-4-6` | +| Змінна | Опис | Приклад | +| ---------------- | ---------------------- | --------------------------- | +| `{model}` | Коротка назва моделі | `claude-opus-4-6` | | `{modelFull}` | Повний ідентифікатор моделі | `anthropic/claude-opus-4-6` | -| `{provider}` | Назва провайдера | `anthropic` | -| `{thinkingLevel}` | Поточний рівень thinking | `high`, `low`, `off` | -| `{identity.name}` | Назва identity агента | (те саме, що й `"auto"`) | +| `{provider}` | Назва provider | `anthropic` | +| `{thinkingLevel}`| Поточний рівень thinking | `high`, `low`, `off` | +| `{identity.name}`| Назва identity агента | (те саме, що `"auto"`) | -Змінні нечутливі до регістру. `{think}` — це псевдонім для `{thinkingLevel}`. +Змінні нечутливі до регістру. `{think}` — alias для `{thinkingLevel}`. -### Реакція ack +### Реакція підтвердження - Типово використовується `identity.emoji` активного агента, інакше `"👀"`. Установіть `""`, щоб вимкнути. -- Перевизначення для окремого channel: `channels..ackReaction`, `channels..accounts..ackReaction`. -- Порядок визначення: обліковий запис → channel → `messages.ackReaction` → резервне значення identity. -- Область: `group-mentions` (типово), `group-all`, `direct`, `all`. -- `removeAckAfterReply`: прибирає ack після відповіді в Slack, Discord і Telegram. -- `messages.statusReactions.enabled`: вмикає реакції статусу життєвого циклу в Slack, Discord і Telegram. - У Slack і Discord, якщо не задано, реакції статусу лишаються ввімкненими, коли активні ack-реакції. - У Telegram задайте це явно в `true`, щоб увімкнути реакції статусу життєвого циклу. +- Перевизначення для каналу: `channels..ackReaction`, `channels..accounts..ackReaction`. +- Порядок визначення: обліковий запис → канал → `messages.ackReaction` → резервне значення з identity. +- Scope: `group-mentions` (типово), `group-all`, `direct`, `all`. +- `removeAckAfterReply`: видаляє реакцію підтвердження після відповіді в Slack, Discord і Telegram. +- `messages.statusReactions.enabled`: вмикає реакції стану життєвого циклу в Slack, Discord і Telegram. + У Slack і Discord, якщо значення не задано, реакції стану залишаються ввімкненими, коли активні реакції підтвердження. + У Telegram явно встановіть `true`, щоб увімкнути реакції стану життєвого циклу. -### Debounce вхідних повідомлень +### Вхідний debounce -Об’єднує швидкі текстові повідомлення від того самого відправника в один хід агента. Медіа/вкладення скидаються негайно. Команди керування обходять debounce. +Об’єднує швидкі текстові повідомлення від того самого відправника в один хід агента. Медіа/вкладення скидаються негайно. Керівні команди обходять debounce. ### TTS (text-to-speech) @@ -2160,12 +2162,12 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б } ``` -- `auto` керує типовим режимом auto-TTS: `off`, `always`, `inbound` або `tagged`. `/tts on|off` може перевизначати локальні налаштування, а `/tts status` показує фактичний стан. -- `summaryModel` перевизначає `agents.defaults.model.primary` для auto-summary. +- `auto` керує типовим режимом auto-TTS: `off`, `always`, `inbound` або `tagged`. `/tts on|off` може перевизначити локальні налаштування, а `/tts status` показує фактичний стан. +- `summaryModel` перевизначає `agents.defaults.model.primary` для автопідсумку. - `modelOverrides` типово ввімкнено; `modelOverrides.allowProvider` типово має значення `false` (opt-in). -- Для API-ключів використовуються резервні значення `ELEVENLABS_API_KEY`/`XI_API_KEY` і `OPENAI_API_KEY`. -- `openai.baseUrl` перевизначає endpoint OpenAI TTS. Порядок визначення: конфігурація, потім `OPENAI_TTS_BASE_URL`, потім `https://api.openai.com/v1`. -- Коли `openai.baseUrl` вказує на endpoint, відмінний від OpenAI, OpenClaw обробляє його як сумісний із OpenAI TTS-сервер і послаблює валідацію model/voice. +- Для API key резервними значеннями є `ELEVENLABS_API_KEY`/`XI_API_KEY` і `OPENAI_API_KEY`. +- `openai.baseUrl` перевизначає endpoint OpenAI TTS. Порядок визначення: config, потім `OPENAI_TTS_BASE_URL`, потім `https://api.openai.com/v1`. +- Коли `openai.baseUrl` вказує на endpoint, відмінний від OpenAI, OpenClaw розглядає його як OpenAI-сумісний TTS-сервер і послаблює перевірку model/voice. --- @@ -2195,51 +2197,51 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б } ``` -- `talk.provider` має збігатися з ключем у `talk.providers`, коли налаштовано кілька провайдерів Talk. -- Застарілі плоскі ключі Talk (`talk.voiceId`, `talk.voiceAliases`, `talk.modelId`, `talk.outputFormat`, `talk.apiKey`) призначені лише для сумісності й автоматично мігруються до `talk.providers.`. -- Для voice ID використовуються резервні значення `ELEVENLABS_VOICE_ID` або `SAG_VOICE_ID`. +- `talk.provider` має відповідати ключу в `talk.providers`, якщо налаштовано кілька provider Talk. +- Застарілі плоскі ключі Talk (`talk.voiceId`, `talk.voiceAliases`, `talk.modelId`, `talk.outputFormat`, `talk.apiKey`) призначені лише для сумісності та автоматично мігруються в `talk.providers.`. +- Для voice ID резервними значеннями є `ELEVENLABS_VOICE_ID` або `SAG_VOICE_ID`. - `providers.*.apiKey` приймає відкриті рядки або об’єкти SecretRef. -- Резервне значення `ELEVENLABS_API_KEY` застосовується лише тоді, коли не налаштовано API-ключ Talk. +- Резервне значення `ELEVENLABS_API_KEY` застосовується лише тоді, коли API key Talk не налаштовано. - `providers.*.voiceAliases` дозволяє директивам Talk використовувати дружні назви. -- `silenceTimeoutMs` керує тим, як довго режим Talk чекає після тиші користувача перед надсиланням transcript. Якщо не задано, використовується типове для платформи вікно паузи (`700 ms на macOS і Android, 900 ms на iOS`). +- `silenceTimeoutMs` керує тим, як довго режим Talk чекає після мовчання користувача, перш ніж надсилати стенограму. Якщо не задано, використовується типове вікно паузи платформи (`700 ms` на macOS і Android, `900 ms` на iOS). --- -## Tools +## Інструменти ### Профілі інструментів `tools.profile` задає базовий allowlist перед `tools.allow`/`tools.deny`: -Локальний onboarding типово встановлює для нових локальних конфігурацій `tools.profile: "coding"`, якщо значення не задано (наявні явні профілі зберігаються). +Локальний онбординг типово встановлює для нових локальних конфігурацій `tools.profile: "coding"`, якщо значення не задано (наявні явні профілі зберігаються). -| Профіль | Включає | -| ----------- | -------------------------------------------------------------------------------------------------------------------------------- | -| `minimal` | лише `session_status` | +| Профіль | Включає | +| ----------- | ------------------------------------------------------------------------------------------------------------------------------- | +| `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` | Усі вбудовані інструменти (без 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` | Усі вбудовані інструменти (без provider Plugin) | ### `tools.allow` / `tools.deny` -Глобальна політика дозволу/заборони інструментів (заборона має пріоритет). Нечутлива до регістру, підтримує wildcard `*`. Застосовується навіть тоді, коли Docker sandbox вимкнено. +Глобальна політика дозволу/заборони інструментів (заборона має пріоритет). Нечутлива до регістру, підтримує wildcard `*`. Застосовується навіть коли sandbox Docker вимкнено. ```json5 { @@ -2249,7 +2251,7 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б ### `tools.byProvider` -Додатково обмежує інструменти для конкретних провайдерів або моделей. Порядок: базовий профіль → профіль провайдера → allow/deny. +Додатково обмежує інструменти для конкретних provider або моделей. Порядок: базовий профіль → профіль provider → allow/deny. ```json5 { @@ -2265,7 +2267,7 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б ### `tools.elevated` -Керує доступом elevated exec поза sandbox: +Керує підвищеним доступом `exec` поза sandbox: ```json5 { @@ -2282,8 +2284,8 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б ``` - Перевизначення для окремого агента (`agents.list[].tools.elevated`) може лише додатково обмежувати. -- `/elevated on|off|ask|full` зберігає стан для кожної сесії; inline-директиви застосовуються до одного повідомлення. -- Elevated `exec` обходить sandbox і використовує налаштований шлях виходу (`gateway` типово або `node`, коли ціллю exec є `node`). +- `/elevated on|off|ask|full` зберігає стан для кожної сесії; вбудовані директиви застосовуються до одного повідомлення. +- Підвищений `exec` обходить sandboxing і використовує налаштований шлях виходу (`gateway` типово або `node`, коли ціль `exec` — `node`). ### `tools.exec` @@ -2307,8 +2309,8 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б ### `tools.loopDetection` -Перевірки безпеки циклів інструментів типово **вимкнені**. Установіть `enabled: true`, щоб увімкнути виявлення. -Параметри можна визначати глобально в `tools.loopDetection` і перевизначати для окремого агента в `agents.list[].tools.loopDetection`. +Перевірки безпеки циклів інструментів **типово вимкнені**. Установіть `enabled: true`, щоб увімкнути виявлення. +Налаштування можна визначати глобально в `tools.loopDetection` і перевизначати для окремого агента в `agents.list[].tools.loopDetection`. ```json5 { @@ -2329,14 +2331,14 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б } ``` -- `historySize`: максимальна історія викликів інструментів, що зберігається для аналізу циклів. +- `historySize`: максимальний обсяг історії викликів інструментів, що зберігається для аналізу циклів. - `warningThreshold`: поріг повторюваного шаблону без прогресу для попереджень. - `criticalThreshold`: вищий поріг повторення для блокування критичних циклів. -- `globalCircuitBreakerThreshold`: поріг жорсткої зупинки для будь-якого виконання без прогресу. +- `globalCircuitBreakerThreshold`: жорсткий поріг зупинки для будь-якого запуску без прогресу. - `detectors.genericRepeat`: попереджати про повторні виклики того самого інструмента з тими самими аргументами. - `detectors.knownPollNoProgress`: попереджати/блокувати відомі polling-інструменти (`process.poll`, `command_status` тощо). -- `detectors.pingPong`: попереджати/блокувати шаблони поперемінних пар без прогресу. -- Якщо `warningThreshold >= criticalThreshold` або `criticalThreshold >= globalCircuitBreakerThreshold`, валідація не проходить. +- `detectors.pingPong`: попереджати/блокувати шаблони чергування пар без прогресу. +- Якщо `warningThreshold >= criticalThreshold` або `criticalThreshold >= globalCircuitBreakerThreshold`, валідація завершується помилкою. ### `tools.web` @@ -2346,14 +2348,14 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б web: { search: { enabled: true, - apiKey: "brave_api_key", // або змінна середовища BRAVE_API_KEY + apiKey: "brave_api_key", // or BRAVE_API_KEY env maxResults: 5, timeoutSeconds: 30, cacheTtlMinutes: 15, }, fetch: { enabled: true, - provider: "firecrawl", // необов’язково; пропустіть для auto-detect + provider: "firecrawl", // optional; omit for auto-detect maxChars: 50000, maxCharsCap: 50000, maxResponseBytes: 2000000, @@ -2378,7 +2380,7 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б media: { concurrency: 2, asyncCompletion: { - directSend: false, // opt-in: надсилати завершені асинхронні результати music/video прямо в channel + directSend: false, // opt-in: send finished async music/video directly to the channel }, audio: { enabled: true, @@ -2404,29 +2406,29 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б -**Запис провайдера** (`type: "provider"` або пропущено): +**Запис provider** (`type: "provider"` або пропущено): -- `provider`: id API-провайдера (`openai`, `anthropic`, `google`/`gemini`, `groq` тощо) +- `provider`: id API provider (`openai`, `anthropic`, `google`/`gemini`, `groq` тощо) - `model`: перевизначення id моделі -- `profile` / `preferredProfile`: вибір профілю з `auth-profiles.json` +- `profile` / `preferredProfile`: вибір профілю `auth-profiles.json` -**CLI-запис** (`type: "cli"`): +**Запис CLI** (`type: "cli"`): - `command`: виконуваний файл для запуску -- `args`: аргументи з шаблонами (підтримує `{{MediaPath}}`, `{{Prompt}}`, `{{MaxChars}}` тощо) +- `args`: шаблонізовані аргументи (підтримує `{{MediaPath}}`, `{{Prompt}}`, `{{MaxChars}}` тощо) **Спільні поля:** - `capabilities`: необов’язковий список (`image`, `audio`, `video`). Типові значення: `openai`/`anthropic`/`minimax` → image, `google` → image+audio+video, `groq` → audio. - `prompt`, `maxChars`, `maxBytes`, `timeoutSeconds`, `language`: перевизначення для окремого запису. -- У разі збою використовується наступний запис. +- У разі помилки використовується наступний запис. -Автентифікація провайдера виконується в стандартному порядку: `auth-profiles.json` → змінні середовища → `models.providers.*.apiKey`. +Автентифікація provider дотримується стандартного порядку: `auth-profiles.json` → env vars → `models.providers.*.apiKey`. **Поля асинхронного завершення:** - `asyncCompletion.directSend`: коли `true`, завершені асинхронні завдання `music_generate` - і `video_generate` спочатку намагаються доставлятися безпосередньо в channel. Типове значення: `false` + і `video_generate` спочатку намагаються доставити результат напряму в канал. Типове значення: `false` (застарілий шлях пробудження сесії запитувача/доставки моделлю). @@ -2448,7 +2450,7 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б Керує тим, на які сесії можна націлювати інструменти сесій (`sessions_list`, `sessions_history`, `sessions_send`). -Типове значення: `tree` (поточна сесія + сесії, запущені нею, наприклад subagents). +Типове значення: `tree` (поточна сесія + сесії, породжені нею, наприклад subagents). ```json5 { @@ -2463,26 +2465,26 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б Примітки: -- `self`: лише поточний ключ сесії. -- `tree`: поточна сесія + сесії, запущені поточною сесією (subagents). +- `self`: лише ключ поточної сесії. +- `tree`: поточна сесія + сесії, породжені поточною сесією (subagents). - `agent`: будь-яка сесія, що належить поточному id агента (може включати інших користувачів, якщо ви запускаєте сесії per-sender під тим самим id агента). - `all`: будь-яка сесія. Націлювання між агентами все одно потребує `tools.agentToAgent`. - Обмеження sandbox: коли поточна сесія працює в sandbox і `agents.defaults.sandbox.sessionToolsVisibility="spawned"`, видимість примусово встановлюється в `tree`, навіть якщо `tools.sessions.visibility="all"`. ### `tools.sessions_spawn` -Керує підтримкою inline-вкладень для `sessions_spawn`. +Керує підтримкою вбудованих вкладень для `sessions_spawn`. ```json5 { tools: { sessions_spawn: { attachments: { - enabled: false, // opt-in: установіть true, щоб дозволити inline-вкладення файлів - maxTotalBytes: 5242880, // загалом 5 MB для всіх файлів + enabled: false, // opt-in: set true to allow inline file attachments + maxTotalBytes: 5242880, // 5 MB total across all files maxFiles: 50, - maxFileBytes: 1048576, // 1 MB на файл - retainOnSessionKeep: false, // зберігати вкладення, коли cleanup="keep" + maxFileBytes: 1048576, // 1 MB per file + retainOnSessionKeep: false, // keep attachments when cleanup="keep" }, }, }, @@ -2492,23 +2494,23 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б Примітки: - Вкладення підтримуються лише для `runtime: "subagent"`. Runtime ACP їх відхиляє. -- Файли матеріалізуються в дочірньому workspace в `.openclaw/attachments//` з `.manifest.json`. -- Вміст вкладень автоматично редагується в збереженні transcript. -- Входи base64 перевіряються за строгими правилами алфавіту/падингу та попереднім захистом розміру до декодування. -- Дозволи на файли: `0700` для каталогів і `0600` для файлів. -- Очищення виконується відповідно до політики `cleanup`: `delete` завжди видаляє вкладення; `keep` зберігає їх лише коли `retainOnSessionKeep: true`. +- Файли матеріалізуються в дочірньому workspace за шляхом `.openclaw/attachments//` із `.manifest.json`. +- Вміст вкладень автоматично редагується під час збереження стенограми. +- Входи base64 перевіряються суворою перевіркою алфавіту/відступів і захистом розміру до декодування. +- Права доступу до файлів: `0700` для каталогів і `0600` для файлів. +- Очищення дотримується політики `cleanup`: `delete` завжди видаляє вкладення; `keep` зберігає їх лише коли `retainOnSessionKeep: true`. ### `tools.experimental` -Експериментальні прапорці вбудованих інструментів. Типово вимкнено, якщо не спрацьовує правило автоматичного ввімкнення strict-agentic GPT-5. +Прапорці експериментальних вбудованих інструментів. Типово вимкнено, якщо не застосовується правило автоматичного ввімкнення strict-agentic GPT-5. ```json5 { tools: { experimental: { - planTool: true, // увімкнути експериментальний update_plan + planTool: true, // enable experimental update_plan }, }, } @@ -2516,9 +2518,9 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б Примітки: -- `planTool`: вмикає структурований інструмент `update_plan` для відстеження нетривіальної багатокрокової роботи. -- Типове значення: `false`, якщо тільки `agents.defaults.embeddedPi.executionContract` (або перевизначення для окремого агента) не задано як `"strict-agentic"` для запуску OpenAI або OpenAI Codex сімейства GPT-5. Установіть `true`, щоб примусово ввімкнути інструмент поза цією областю, або `false`, щоб залишити його вимкненим навіть для запусків strict-agentic GPT-5. -- Коли інструмент увімкнено, системний prompt також додає вказівки щодо використання, щоб модель застосовувала його лише для суттєвої роботи й тримала не більш як один крок у стані `in_progress`. +- `planTool`: вмикає структурований інструмент `update_plan` для відстеження нетривіальної багатоетапної роботи. +- Типове значення: `false`, якщо тільки `agents.defaults.embeddedPi.executionContract` (або перевизначення для окремого агента) не встановлено в `"strict-agentic"` для запуску сімейства GPT-5 OpenAI або OpenAI Codex GPT-5. Установіть `true`, щоб примусово ввімкнути інструмент поза цим сценарієм, або `false`, щоб залишити його вимкненим навіть для запусків strict-agentic GPT-5. +- Коли інструмент увімкнено, системний prompt також додає вказівки щодо використання, щоб модель застосовувала його лише для суттєвої роботи й підтримувала не більше одного кроку `in_progress`. ### `agents.defaults.subagents` @@ -2538,21 +2540,21 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б } ``` -- `model`: типова модель для запущених субагентів. Якщо не задано, субагенти успадковують модель викликувача. +- `model`: типова модель для запущених sub-agents. Якщо не задано, sub-agents успадковують модель виклику. - `allowAgents`: типовий allowlist цільових id агентів для `sessions_spawn`, коли агент-запитувач не задає власний `subagents.allowAgents` (`["*"]` = будь-який; типово: лише той самий агент). -- `runTimeoutSeconds`: типовий тайм-аут (у секундах) для `sessions_spawn`, коли виклик інструмента пропускає `runTimeoutSeconds`. `0` означає без тайм-ауту. -- Політика інструментів для окремого субагента: `tools.subagents.tools.allow` / `tools.subagents.tools.deny`. +- `runTimeoutSeconds`: типовий timeout (у секундах) для `sessions_spawn`, коли виклик інструмента не передає `runTimeoutSeconds`. `0` означає відсутність timeout. +- Політика інструментів для subagent: `tools.subagents.tools.allow` / `tools.subagents.tools.deny`. --- -## Власні провайдери й base URL +## Користувацькі provider і base URL -OpenClaw використовує вбудований каталог моделей. Додавайте власних провайдерів через `models.providers` у конфігурації або `~/.openclaw/agents//agent/models.json`. +OpenClaw використовує вбудований каталог моделей. Додавайте користувацькі provider через `models.providers` у конфігурації або `~/.openclaw/agents//agent/models.json`. ```json5 { models: { - mode: "merge", // merge (типово) | replace + mode: "merge", // merge (default) | replace providers: { "custom-proxy": { baseUrl: "http://localhost:4000/v1", @@ -2576,51 +2578,51 @@ OpenClaw використовує вбудований каталог модел } ``` -- Використовуйте `authHeader: true` + `headers` для нестандартних потреб автентифікації. -- Перевизначайте корінь конфігурації агента через `OPENCLAW_AGENT_DIR` (або `PI_CODING_AGENT_DIR`, застарілий псевдонім змінної середовища). -- Пріоритет об’єднання для однакових id провайдерів: - - Непорожні значення `baseUrl` з `models.json` агента мають пріоритет. - - Непорожні значення `apiKey` агента мають пріоритет лише тоді, коли цей провайдер не керується через SecretRef у поточному контексті config/auth-profile. - - Значення `apiKey` провайдера, якими керує SecretRef, оновлюються з маркерів джерела (`ENV_VAR_NAME` для env-посилань, `secretref-managed` для file/exec-посилань) замість збереження визначених секретів. - - Значення заголовків провайдера, якими керує SecretRef, оновлюються з маркерів джерела (`secretref-env:ENV_VAR_NAME` для env-посилань, `secretref-managed` для file/exec-посилань). - - Порожні або відсутні `apiKey`/`baseUrl` агента використовують резервно `models.providers` із конфігурації. - - Для однакових моделей `contextWindow`/`maxTokens` використовують вище значення між явною конфігурацією та неявними значеннями каталогу. - - Для однакових моделей `contextTokens` зберігає явне обмеження runtime, якщо воно задане; використовуйте це, щоб обмежити фактичний контекст без зміни рідних метаданих моделі. - - Використовуйте `models.mode: "replace"`, якщо хочете, щоб конфігурація повністю переписала `models.json`. - - Збереження маркерів є авторитетним від джерела: маркери записуються з активного знімка конфігурації джерела (до визначення), а не з визначених значень секретів runtime. +- Використовуйте `authHeader: true` + `headers` для користувацьких потреб автентифікації. +- Перевизначайте корінь конфігурації агента через `OPENCLAW_AGENT_DIR` (або `PI_CODING_AGENT_DIR`, застарілий alias змінної середовища). +- Пріоритет об’єднання для відповідних id provider: + - Непорожні значення `baseUrl` з агентського `models.json` мають пріоритет. + - Непорожні значення `apiKey` агента мають пріоритет лише тоді, коли цей provider не керується через SecretRef у поточному контексті config/auth-profile. + - Значення `apiKey` provider, керовані через SecretRef, оновлюються з маркерів джерела (`ENV_VAR_NAME` для env-ref, `secretref-managed` для file/exec-ref) замість збереження визначених секретів. + - Значення заголовків provider, керовані через SecretRef, оновлюються з маркерів джерела (`secretref-env:ENV_VAR_NAME` для env-ref, `secretref-managed` для file/exec-ref). + - Порожні або відсутні `apiKey`/`baseUrl` агента повертаються до `models.providers` у конфігурації. + - Для відповідних моделей `contextWindow`/`maxTokens` використовують вище значення між явною конфігурацією та неявними значеннями каталогу. + - Для відповідних моделей `contextTokens` зберігає явний runtime-ліміт, якщо він заданий; використовуйте це, щоб обмежити ефективний контекст без зміни нативних метаданих моделі. + - Використовуйте `models.mode: "replace"`, коли хочете, щоб конфігурація повністю переписала `models.json`. + - Збереження маркерів є авторитетним щодо джерела: маркери записуються з активного знімка конфігурації джерела (до визначення), а не з визначених значень секретів runtime. -### Подробиці полів провайдера +### Подробиці полів provider -- `models.mode`: поведінка каталогу провайдера (`merge` або `replace`). -- `models.providers`: карта власних провайдерів із ключами за id провайдера. - - Безпечне редагування: використовуйте `openclaw config set models.providers. '' --strict-json --merge` або `openclaw config set models.providers..models '' --strict-json --merge` для додаткових оновлень. `config set` відхиляє руйнівні заміни, якщо ви не передасте `--replace`. +- `models.mode`: поведінка каталогу provider (`merge` або `replace`). +- `models.providers`: мапа користувацьких provider, де ключем є id provider. + - Безпечні редагування: використовуйте `openclaw config set models.providers. '' --strict-json --merge` або `openclaw config set models.providers..models '' --strict-json --merge` для додаткових оновлень. `config set` відмовляється від руйнівних замін, якщо не передати `--replace`. - `models.providers.*.api`: адаптер запитів (`openai-completions`, `openai-responses`, `anthropic-messages`, `google-generative-ai` тощо). -- `models.providers.*.apiKey`: облікові дані провайдера (краще використовувати SecretRef/env substitution). +- `models.providers.*.apiKey`: облікові дані provider (надавайте перевагу 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 верхнього рівня. -- `models.providers.*.headers`: додаткові статичні заголовки для маршрутизації через проксі/орендаря. +- `models.providers.*.authHeader`: примусово передає облікові дані в заголовку `Authorization`, коли це потрібно. +- `models.providers.*.baseUrl`: базовий URL API апстріму. +- `models.providers.*.headers`: додаткові статичні заголовки для маршрутизації proxy/tenant. - `models.providers.*.request`: перевизначення транспорту для HTTP-запитів model-provider. - - `request.headers`: додаткові заголовки (об’єднуються з типовими значеннями провайдера). Значення приймають SecretRef. - - `request.auth`: перевизначення стратегії автентифікації. Режими: `"provider-default"` (використовувати вбудовану автентифікацію провайдера), `"authorization-bearer"` (з `token`), `"header"` (з `headerName`, `value`, необов’язковим `prefix`). - - `request.proxy`: перевизначення HTTP-проксі. Режими: `"env-proxy"` (використовувати змінні середовища `HTTP_PROXY`/`HTTPS_PROXY`), `"explicit-proxy"` (з `url`). Обидва режими приймають необов’язковий підоб’єкт `tls`. + - `request.headers`: додаткові заголовки (об’єднуються з типовими значеннями provider). Значення приймають SecretRef. + - `request.auth`: перевизначення стратегії автентифікації. Режими: `"provider-default"` (використовувати вбудовану автентифікацію provider), `"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`. - - `request.allowPrivateNetwork`: коли `true`, дозволяє HTTPS до `baseUrl`, якщо DNS визначається в private, CGNAT або подібні діапазони, через захист HTTP fetch провайдера (операторський opt-in для довірених self-hosted OpenAI-сумісних endpoint). WebSocket використовує той самий `request` для заголовків/TLS, але не цей SSRF-захист fetch. Типове значення `false`. -- `models.providers.*.models`: явні записи каталогу моделей провайдера. -- `models.providers.*.models.*.contextWindow`: метадані рідного контекстного вікна моделі. -- `models.providers.*.models.*.contextTokens`: необов’язкове обмеження runtime-контексту. Використовуйте це, коли вам потрібен менший фактичний бюджет контексту, ніж рідний `contextWindow` моделі. -- `models.providers.*.models.*.compat.supportsDeveloperRole`: необов’язкова підказка сумісності. Для `api: "openai-completions"` з непорожнім нерідним `baseUrl` (хост не `api.openai.com`) OpenClaw примусово встановлює це в `false` під час runtime. Порожній/пропущений `baseUrl` зберігає типову поведінку OpenAI. -- `models.providers.*.models.*.compat.requiresStringContent`: необов’язкова підказка сумісності для OpenAI-сумісних chat-endpoint, що підтримують лише рядки. Коли `true`, OpenClaw сплощує масиви `messages[].content`, що містять лише текст, у звичайні рядки перед надсиланням запиту. -- `plugins.entries.amazon-bedrock.config.discovery`: корінь параметрів auto-discovery Bedrock. + - `request.allowPrivateNetwork`: коли `true`, дозволяє HTTPS до `baseUrl`, коли DNS визначається в приватні, CGNAT або подібні діапазони, через захист HTTP fetch provider (opt-in оператора для довірених self-hosted OpenAI-сумісних endpoint). WebSocket використовує той самий `request` для заголовків/TLS, але не використовує цей fetch SSRF gate. Типове значення `false`. +- `models.providers.*.models`: явні записи каталогу моделей provider. +- `models.providers.*.models.*.contextWindow`: метадані нативного вікна контексту моделі. +- `models.providers.*.models.*.contextTokens`: необов’язковий runtime-ліміт контексту. Використовуйте це, коли вам потрібен менший ефективний бюджет контексту, ніж нативне `contextWindow` моделі. +- `models.providers.*.models.*.compat.supportsDeveloperRole`: необов’язкова підказка сумісності. Для `api: "openai-completions"` із непорожнім ненативним `baseUrl` (хост не `api.openai.com`) OpenClaw примусово встановлює це значення в `false` під час runtime. Порожній/пропущений `baseUrl` зберігає типову поведінку OpenAI. +- `models.providers.*.models.*.compat.requiresStringContent`: необов’язкова підказка сумісності для OpenAI-сумісних chat-endpoint, які підтримують лише рядки. Коли значення `true`, OpenClaw зводить масиви `messages[].content`, що містять лише текст, до простих рядків перед надсиланням запиту. +- `plugins.entries.amazon-bedrock.config.discovery`: корінь налаштувань авто-виявлення Bedrock. - `plugins.entries.amazon-bedrock.config.discovery.enabled`: увімкнути/вимкнути неявне виявлення. - `plugins.entries.amazon-bedrock.config.discovery.region`: регіон AWS для виявлення. -- `plugins.entries.amazon-bedrock.config.discovery.providerFilter`: необов’язковий фільтр provider-id для цільового виявлення. +- `plugins.entries.amazon-bedrock.config.discovery.providerFilter`: необов’язковий фільтр id provider для точкового виявлення. - `plugins.entries.amazon-bedrock.config.discovery.refreshInterval`: інтервал опитування для оновлення виявлення. -- `plugins.entries.amazon-bedrock.config.discovery.defaultContextWindow`: резервне контекстне вікно для виявлених моделей. +- `plugins.entries.amazon-bedrock.config.discovery.defaultContextWindow`: резервне вікно контексту для виявлених моделей. - `plugins.entries.amazon-bedrock.config.discovery.defaultMaxTokens`: резервна максимальна кількість вихідних токенів для виявлених моделей. -### Приклади провайдерів +### Приклади provider @@ -2656,7 +2658,7 @@ OpenClaw використовує вбудований каталог модел } ``` -Використовуйте `cerebras/zai-glm-4.7` для Cerebras; `zai/glm-4.7` для прямого Z.AI. +Використовуйте `cerebras/zai-glm-4.7` для Cerebras; `zai/glm-4.7` — для прямого Z.AI. @@ -2673,7 +2675,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`. @@ -2690,11 +2692,11 @@ OpenClaw використовує вбудований каталог модел } ``` -Задайте `ZAI_API_KEY`. `z.ai/*` і `z-ai/*` приймаються як псевдоніми. Скорочення: `openclaw onboard --auth-choice zai-api-key`. +Установіть `ZAI_API_KEY`. `z.ai/*` і `z-ai/*` — допустимі alias. Скорочення: `openclaw onboard --auth-choice zai-api-key`. - Загальний endpoint: `https://api.z.ai/api/paas/v4` -- Endpoint для кодування (типовий): `https://api.z.ai/api/coding/paas/v4` -- Для загального endpoint визначте власного провайдера з перевизначенням base URL. +- Endpoint для кодування (типово): `https://api.z.ai/api/coding/paas/v4` +- Для загального endpoint визначте користувацький provider із перевизначенням base URL. @@ -2733,11 +2735,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 повідомляють про сумісність потокового використання на спільному +Нативні endpoint Moonshot оголошують сумісність використання потокової передачі на спільному транспорті `openai-completions`, і OpenClaw визначає це за можливостями endpoint, -а не лише за id вбудованого провайдера. +а не лише за id вбудованого provider. @@ -2755,11 +2757,11 @@ OpenClaw використовує вбудований каталог модел } ``` -Anthropic-сумісний, вбудований провайдер. Скорочення: `openclaw onboard --auth-choice kimi-code-api-key`. +Anthropic-сумісний, вбудований provider. Скорочення: `openclaw onboard --auth-choice kimi-code-api-key`. - + ```json5 { @@ -2794,11 +2796,11 @@ Anthropic-сумісний, вбудований провайдер. Скоро } ``` -Base URL має пропускати `/v1` (клієнт Anthropic додає його сам). Скорочення: `openclaw onboard --auth-choice synthetic-api-key`. +Base URL має не містити `/v1` (клієнт Anthropic додає його сам). Скорочення: `openclaw onboard --auth-choice synthetic-api-key`. - + ```json5 { @@ -2834,11 +2836,11 @@ Base URL має пропускати `/v1` (клієнт Anthropic додає й } ``` -Задайте `MINIMAX_API_KEY`. Скорочення: +Установіть `MINIMAX_API_KEY`. Скорочення: `openclaw onboard --auth-choice minimax-global-api` або `openclaw onboard --auth-choice minimax-cn-api`. Каталог моделей типово містить лише M2.7. -На Anthropic-сумісному шляху потокової передачі OpenClaw типово вимикає thinking MiniMax, +На Anthropic-сумісному шляху потокової передачі OpenClaw типово вимикає thinking для MiniMax, якщо ви явно не задасте `thinking` самостійно. `/fast on` або `params.fastMode: true` переписує `MiniMax-M2.7` на `MiniMax-M2.7-highspeed`. @@ -2847,7 +2849,7 @@ Base URL має пропускати `/v1` (клієнт Anthropic додає й -Див. [Local Models](/uk/gateway/local-models). Коротко: запускайте велику локальну модель через LM Studio Responses API на серйозному обладнанні; зберігайте хостовані моделі об’єднаними для резервного використання. +Див. [Локальні моделі](/uk/gateway/local-models). Коротко: запускайте велику локальну модель через LM Studio Responses API на серйозному обладнанні; зберігайте hosted-моделі об’єднаними для fallback. @@ -2868,7 +2870,7 @@ Base URL має пропускати `/v1` (клієнт Anthropic додає й }, entries: { "image-lab": { - apiKey: { source: "env", provider: "default", id: "GEMINI_API_KEY" }, // або відкритий рядок + apiKey: { source: "env", provider: "default", id: "GEMINI_API_KEY" }, // or plaintext string env: { GEMINI_API_KEY: "GEMINI_KEY_HERE" }, }, peekaboo: { enabled: true }, @@ -2878,14 +2880,14 @@ Base URL має пропускати `/v1` (клієнт Anthropic додає й } ``` -- `allowBundled`: необов’язковий allowlist лише для комплектних Skills (керовані/workspace Skills не зачіпаються). +- `allowBundled`: необов’язковий allowlist лише для bundled Skills (керовані/workspace Skills не зачіпаються). - `load.extraDirs`: додаткові спільні корені Skills (найнижчий пріоритет). -- `install.preferBrew`: коли true, віддавати перевагу встановлювачам Homebrew, якщо `brew` - доступний, перед переходом до інших типів встановлювачів. -- `install.nodeManager`: пріоритет node-встановлювача для специфікацій `metadata.openclaw.install` +- `install.preferBrew`: коли значення true, спочатку надає перевагу встановлювачам Homebrew, якщо `brew` + доступний, перш ніж повертатися до інших типів встановлювачів. +- `install.nodeManager`: бажаний node-встановлювач для специфікацій `metadata.openclaw.install` (`npm` | `pnpm` | `yarn` | `bun`). -- `entries..enabled: false` вимикає Skill, навіть якщо він комплектний/встановлений. -- `entries..apiKey`: зручне поле для Skills, що оголошують основну env-змінну (відкритий рядок або об’єкт SecretRef). +- `entries..enabled: false` вимикає Skill, навіть якщо він bundled/установлений. +- `entries..apiKey`: зручне поле для Skills, які оголошують основну env var (відкритий рядок або об’єкт SecretRef). --- @@ -2914,40 +2916,40 @@ Base URL має пропускати `/v1` (клієнт Anthropic додає й ``` - Завантажуються з `~/.openclaw/extensions`, `/.openclaw/extensions`, а також `plugins.load.paths`. -- Виявлення приймає нативні Plugins OpenClaw, а також сумісні набори Codex і Claude, зокрема набори Claude стандартного макета без manifest. +- Виявлення приймає нативні Plugins OpenClaw, а також сумісні bundle Codex і Claude, включно з bundle Claude без manifest у типовому layout. - **Зміни конфігурації потребують перезапуску Gateway.** -- `allow`: необов’язковий allowlist (завантажуються лише перелічені plugins). `deny` має пріоритет. -- `plugins.entries..apiKey`: зручне поле API-ключа на рівні plugin (коли plugin це підтримує). -- `plugins.entries..env`: карта env-змінних у межах plugin. -- `plugins.entries..hooks.allowPromptInjection`: коли `false`, ядро блокує `before_prompt_build` і ігнорує поля, що змінюють prompt, зі застарілого `before_agent_start`, зберігаючи при цьому застарілі `modelOverride` і `providerOverride`. Застосовується до нативних hooks plugin і підтримуваних каталогів hooks, наданих наборами. -- `plugins.entries..subagent.allowModelOverride`: явна довіра цьому plugin запитувати перевизначення `provider` і `model` для кожного запуску фонових субагентів. -- `plugins.entries..subagent.allowedModels`: необов’язковий allowlist канонічних цілей `provider/model` для довірених перевизначень субагентів. Використовуйте `"*"` лише тоді, коли навмисно хочете дозволити будь-яку модель. -- `plugins.entries..config`: об’єкт конфігурації, визначений plugin (валідується нативною схемою plugin OpenClaw, якщо вона доступна). -- `plugins.entries.firecrawl.config.webFetch`: параметри провайдера web-fetch Firecrawl. - - `apiKey`: API-ключ Firecrawl (приймає SecretRef). Використовує резервно `plugins.entries.firecrawl.config.webSearch.apiKey`, застарілий `tools.web.fetch.firecrawl.apiKey` або env-змінну `FIRECRAWL_API_KEY`. - - `baseUrl`: base URL API Firecrawl (типово: `https://api.firecrawl.dev`). - - `onlyMainContent`: витягувати лише основний вміст сторінок (типово: `true`). +- `allow`: необов’язковий allowlist (завантажуються лише вказані Plugins). `deny` має пріоритет. +- `plugins.entries..apiKey`: зручне поле API key на рівні Plugin (коли Plugin це підтримує). +- `plugins.entries..env`: мапа env vars у межах Plugin. +- `plugins.entries..hooks.allowPromptInjection`: коли значення `false`, core блокує `before_prompt_build` і ігнорує поля, що змінюють prompt, зі застарілого `before_agent_start`, зберігаючи застарілі `modelOverride` і `providerOverride`. Це застосовується до нативних hooks Plugin і до підтримуваних каталогів hooks, наданих bundle. +- `plugins.entries..subagent.allowModelOverride`: явно довіряти цьому Plugin запитувати перевизначення `provider` і `model` для кожного запуску у фонових запусках subagent. +- `plugins.entries..subagent.allowedModels`: необов’язковий allowlist канонічних цілей `provider/model` для довірених перевизначень subagent. Використовуйте `"*"` лише тоді, коли свідомо хочете дозволити будь-яку модель. +- `plugins.entries..config`: об’єкт конфігурації, визначений Plugin (перевіряється за схемою нативного Plugin OpenClaw, якщо вона доступна). +- `plugins.entries.firecrawl.config.webFetch`: налаштування provider web-fetch Firecrawl. + - `apiKey`: API key Firecrawl (приймає SecretRef). Повертається до `plugins.entries.firecrawl.config.webSearch.apiKey`, застарілого `tools.web.fetch.firecrawl.apiKey` або env var `FIRECRAWL_API_KEY`. + - `baseUrl`: базовий URL API Firecrawl (типово: `https://api.firecrawl.dev`). + - `onlyMainContent`: витягувати лише основний вміст зі сторінок (типово: `true`). - `maxAgeMs`: максимальний вік кешу в мілісекундах (типово: `172800000` / 2 дні). - - `timeoutSeconds`: тайм-аут запиту scrape у секундах (типово: `60`). -- `plugins.entries.xai.config.xSearch`: параметри xAI X Search (вебпошук Grok). - - `enabled`: увімкнути провайдер X Search. - - `model`: модель Grok для пошуку (наприклад `"grok-4-1-fast"`). -- `plugins.entries.memory-core.config.dreaming`: параметри memory Dreaming. Фази й пороги див. у [Dreaming](/uk/concepts/dreaming). + - `timeoutSeconds`: timeout запиту scrape у секундах (типово: `60`). +- `plugins.entries.xai.config.xSearch`: налаштування xAI X Search (вебпошук Grok). + - `enabled`: увімкнути provider X Search. + - `model`: модель Grok для пошуку (наприклад, `"grok-4-1-fast"`). +- `plugins.entries.memory-core.config.dreaming`: налаштування memory Dreaming. Фази й пороги див. у [Dreaming](/uk/concepts/dreaming). - `enabled`: головний перемикач Dreaming (типово `false`). - - `frequency`: Cron-інтервал для кожного повного проходу Dreaming (типово `"0 3 * * *"`). - - політика фаз і пороги є деталями реалізації (не користувацькими ключами конфігурації). -- Повна конфігурація memory розміщена в [Memory configuration reference](/uk/reference/memory-config): + - `frequency`: Cron-ритм для кожного повного проходу Dreaming (типово `"0 3 * * *"`). + - політика фаз і пороги — це деталі реалізації (не користувацькі ключі конфігурації). +- Повна конфігурація memory міститься в [довіднику з конфігурації memory](/uk/reference/memory-config): - `agents.defaults.memorySearch.*` - `memory.backend` - `memory.citations` - `memory.qmd.*` - `plugins.entries.memory-core.config.dreaming` -- Увімкнені plugins наборів Claude також можуть додавати вбудовані типові значення Pi з `settings.json`; OpenClaw застосовує їх як санітизовані параметри агента, а не як сирі патчі конфігурації OpenClaw. -- `plugins.slots.memory`: вибрати id активного plugin memory або `"none"`, щоб вимкнути plugins memory. -- `plugins.slots.contextEngine`: вибрати id активного plugin context engine; типово `"legacy"`, якщо ви не встановите й не виберете інший engine. -- `plugins.installs`: метадані встановлення, якими керує CLI і які використовує `openclaw plugins update`. +- Увімкнені bundle-плагіни Claude також можуть додавати вбудовані типові значення Pi із `settings.json`; OpenClaw застосовує їх як очищені налаштування агента, а не як сирі patch конфігурації OpenClaw. +- `plugins.slots.memory`: вибрати id активного Plugin memory або `"none"`, щоб вимкнути Plugins memory. +- `plugins.slots.contextEngine`: вибрати id активного Plugin context engine; типово `"legacy"`, якщо ви не встановили й не вибрали інший engine. +- `plugins.installs`: метадані встановлення, якими керує CLI, використовуються `openclaw plugins update`. - Містить `source`, `spec`, `sourcePath`, `installPath`, `version`, `resolvedName`, `resolvedVersion`, `resolvedSpec`, `integrity`, `shasum`, `resolvedAt`, `installedAt`. - - Розглядайте `plugins.installs.*` як керований стан; надавайте перевагу командам CLI замість ручних змін. + - Вважайте `plugins.installs.*` керованим станом; надавайте перевагу командам CLI замість ручного редагування. Див. [Plugins](/uk/tools/plugin). @@ -2962,8 +2964,8 @@ Base URL має пропускати `/v1` (клієнт Anthropic додає й evaluateEnabled: true, defaultProfile: "user", ssrfPolicy: { - // dangerouslyAllowPrivateNetwork: true, // opt in лише для довіреного доступу до private network - // allowPrivateNetwork: true, // застарілий псевдонім + // dangerouslyAllowPrivateNetwork: true, // opt in only for trusted private-network access + // allowPrivateNetwork: true, // legacy alias // hostnameAllowlist: ["*.example.com", "example.com"], // allowedHostnames: ["localhost"], }, @@ -2990,29 +2992,29 @@ Base URL має пропускати `/v1` (клієнт Anthropic додає й ``` - `evaluateEnabled: false` вимикає `act:evaluate` і `wait --fn`. -- `ssrfPolicy.dangerouslyAllowPrivateNetwork` вимкнено, якщо не задано, тому навігація Browser типово лишається суворою. -- Установлюйте `ssrfPolicy.dangerouslyAllowPrivateNetwork: true` лише тоді, коли ви навмисно довіряєте навігації Browser у private network. -- У суворому режимі віддалені endpoint профілів CDP (`profiles.*.cdpUrl`) підлягають тому самому блокуванню private network під час перевірок доступності/виявлення. -- `ssrfPolicy.allowPrivateNetwork` і далі підтримується як застарілий псевдонім. +- `ssrfPolicy.dangerouslyAllowPrivateNetwork` вимкнено, якщо значення не задано, тож навігація browser типово залишається суворою. +- Установлюйте `ssrfPolicy.dangerouslyAllowPrivateNetwork: true` лише тоді, коли свідомо довіряєте навігації browser у приватній мережі. +- У суворому режимі endpoint віддалених профілів CDP (`profiles.*.cdpUrl`) під час перевірок досяжності/виявлення підлягають такому самому блокуванню приватної мережі. +- `ssrfPolicy.allowPrivateNetwork` залишається підтримуваним як застарілий alias. - У суворому режимі використовуйте `ssrfPolicy.hostnameAllowlist` і `ssrfPolicy.allowedHostnames` для явних винятків. -- Віддалені профілі працюють лише в режимі attach-only (start/stop/reset вимкнені). +- Віддалені профілі працюють лише в режимі attach-only (start/stop/reset вимкнено). - `profiles.*.cdpUrl` приймає `http://`, `https://`, `ws://` і `wss://`. - Використовуйте HTTP(S), коли хочете, щоб OpenClaw виявляв `/json/version`; використовуйте WS(S), - коли ваш провайдер надає прямий DevTools WebSocket URL. -- Профілі `existing-session` використовують Chrome MCP замість CDP і можуть приєднуватися - на вибраному хості або через під’єднаний browser Node. -- Профілі `existing-session` можуть задавати `userDataDir`, щоб націлитися на конкретний - профіль браузера на основі Chromium, наприклад Brave або Edge. -- Профілі `existing-session` зберігають поточні обмеження маршруту Chrome MCP: - дії на основі snapshot/ref замість націлювання CSS-selector, hooks завантаження одного файла, - без перевизначення тайм-аутів діалогів, без `wait --load networkidle`, а також без + Використовуйте HTTP(S), коли хочете, щоб OpenClaw виявив `/json/version`; використовуйте WS(S), + коли provider дає вам прямий URL DevTools WebSocket. +- Профілі `existing-session` використовують Chrome MCP замість CDP і можуть під’єднуватися на + вибраному хості або через підключений browser Node. +- Профілі `existing-session` можуть задавати `userDataDir`, щоб націлюватися на конкретний + профіль браузера на базі Chromium, наприклад Brave або Edge. +- Для профілів `existing-session` діють поточні обмеження маршруту Chrome MCP: + дії на основі snapshot/ref замість націлювання за CSS-селекторами, hooks завантаження одного файла, + без перевизначення timeout діалогів, без `wait --load networkidle`, а також без `responsebody`, експорту PDF, перехоплення завантажень чи пакетних дій. - Локальні керовані профілі `openclaw` автоматично призначають `cdpPort` і `cdpUrl`; явно задавайте `cdpUrl` лише для віддаленого CDP. -- Порядок auto-detect: типовий браузер, якщо він на основі Chromium → Chrome → Brave → Edge → Chromium → Chrome Canary. -- Сервіс керування: лише loopback (порт визначається з `gateway.port`, типово `18791`). -- `extraArgs` додає додаткові прапорці запуску до локального старту Chromium (наприклад - `--disable-gpu`, розмір вікна або налагоджувальні прапорці). +- Порядок авто-виявлення: типовий браузер, якщо він на базі Chromium → Chrome → Brave → Edge → Chromium → Chrome Canary. +- Сервіс керування: лише loopback (порт виводиться з `gateway.port`, типово `18791`). +- `extraArgs` додає додаткові прапорці запуску до локального запуску Chromium (наприклад, + `--disable-gpu`, розмір вікна або прапорці налагодження). --- @@ -3024,14 +3026,14 @@ Base URL має пропускати `/v1` (клієнт Anthropic додає й seamColor: "#FF4500", assistant: { name: "OpenClaw", - avatar: "CB", // emoji, короткий текст, URL зображення або data URI + avatar: "CB", // emoji, short text, image URL, or data URI }, }, } ``` -- `seamColor`: акцентний колір для chrome нативного UI застосунку (відтінок бульбашки Talk Mode тощо). -- `assistant`: перевизначення identity для Control UI. Використовує резервно identity активного агента. +- `seamColor`: акцентний колір для chrome нативного UI застосунку (тон бульбашки Talk Mode тощо). +- `assistant`: перевизначення identity для Control UI. Якщо не задано, використовується identity активного агента. --- @@ -3046,8 +3048,8 @@ Base URL має пропускати `/v1` (клієнт Anthropic додає й auth: { mode: "token", // none | token | password | trusted-proxy token: "your-token", - // password: "your-password", // або OPENCLAW_GATEWAY_PASSWORD - // trustedProxy: { userHeader: "x-forwarded-user" }, // для mode=trusted-proxy; див. /gateway/trusted-proxy-auth + // password: "your-password", // or OPENCLAW_GATEWAY_PASSWORD + // trustedProxy: { userHeader: "x-forwarded-user" }, // for mode=trusted-proxy; see /gateway/trusted-proxy-auth allowTailscale: true, rateLimit: { maxAttempts: 10, @@ -3065,9 +3067,9 @@ Base URL має пропускати `/v1` (клієнт Anthropic додає й basePath: "/openclaw", // root: "dist/control-ui", // embedSandbox: "scripts", // strict | scripts | trusted - // allowExternalEmbedUrls: false, // небезпечно: дозволити абсолютні зовнішні embed URL http(s) - // allowedOrigins: ["https://control.example.com"], // потрібно для Control UI поза loopback - // dangerouslyAllowHostHeaderOriginFallback: false, // небезпечний режим резервного походження через заголовок Host + // allowExternalEmbedUrls: false, // dangerous: allow absolute external http(s) embed URLs + // allowedOrigins: ["https://control.example.com"], // required for non-loopback Control UI + // dangerouslyAllowHostHeaderOriginFallback: false, // dangerous Host-header origin fallback mode // allowInsecureAuth: false, // dangerouslyDisableDeviceAuth: false, }, @@ -3078,12 +3080,12 @@ Base URL має пропускати `/v1` (клієнт Anthropic додає й // password: "your-password", }, trustedProxies: ["10.0.0.1"], - // Необов’язково. Типово false. + // Optional. Default false. allowRealIpFallback: false, tools: { - // Додаткові HTTP-заборони для /tools/invoke + // Additional /tools/invoke HTTP denies deny: ["browser"], - // Прибрати інструменти зі стандартного списку HTTP-заборон + // Remove tools from the default HTTP deny list allow: ["gateway"], }, push: { @@ -3100,45 +3102,45 @@ Base URL має пропускати `/v1` (клієнт Anthropic додає й -- `mode`: `local` (запускати Gateway) або `remote` (підключатися до віддаленого Gateway). Gateway відмовляється запускатися, якщо значення не `local`. +- `mode`: `local` (запускати gateway) або `remote` (підключатися до віддаленого gateway). Gateway відмовляється запускатися, якщо не `local`. - `port`: єдиний мультиплексований порт для WS + HTTP. Пріоритет: `--port` > `OPENCLAW_GATEWAY_PORT` > `gateway.port` > `18789`. - `bind`: `auto`, `loopback` (типово), `lan` (`0.0.0.0`), `tailnet` (лише IP Tailscale) або `custom`. -- **Застарілі псевдоніми bind**: використовуйте значення режимів bind у `gateway.bind` (`auto`, `loopback`, `lan`, `tailnet`, `custom`), а не псевдоніми хостів (`0.0.0.0`, `127.0.0.1`, `localhost`, `::`, `::1`). -- **Примітка щодо Docker**: типовий bind `loopback` слухає `127.0.0.1` усередині контейнера. За bridge-мережі Docker (`-p 18789:18789`) трафік приходить на `eth0`, тож Gateway недосяжний. Використовуйте `--network host`, або задайте `bind: "lan"` (або `bind: "custom"` з `customBindHost: "0.0.0.0"`), щоб слухати на всіх інтерфейсах. -- **Auth**: типово обов’язкова. Binds, відмінні від loopback, вимагають auth Gateway. На практиці це означає спільний token/password або reverse proxy з підтримкою identity з `gateway.auth.mode: "trusted-proxy"`. Майстер onboarding типово генерує token. -- Якщо налаштовано і `gateway.auth.token`, і `gateway.auth.password` (включно з SecretRef), явно задайте `gateway.auth.mode` як `token` або `password`. Під час запуску та в потоках встановлення/відновлення сервісу виникає помилка, якщо налаштовано обидва, а mode не задано. -- `gateway.auth.mode: "none"`: явний режим без auth. Використовуйте лише для довірених локальних конфігурацій loopback; цей варіант навмисно не пропонується в prompt onboarding. -- `gateway.auth.mode: "trusted-proxy"`: делегувати auth reverse proxy з підтримкою identity і довіряти заголовкам identity від `gateway.trustedProxies` (див. [Trusted Proxy Auth](/uk/gateway/trusted-proxy-auth)). Цей режим очікує джерело proxy **не loopback**; reverse proxy loopback на тому самому хості не задовольняють trusted-proxy auth. -- `gateway.auth.allowTailscale`: коли `true`, заголовки identity від Tailscale Serve можуть задовольняти auth для Control UI/WebSocket (перевіряється через `tailscale whois`). HTTP API endpoint не використовують цю auth за заголовками Tailscale; вони дотримуються звичайного режиму HTTP auth Gateway. Цей безтокеновий потік передбачає, що хост Gateway є довіреним. Типове значення `true`, коли `tailscale.mode = "serve"`. -- `gateway.auth.rateLimit`: необов’язковий обмежувач невдалих спроб auth. Застосовується для кожного IP клієнта та для кожної області auth (спільний секрет і device-token відстежуються окремо). Заблоковані спроби повертають `429` + `Retry-After`. - - В асинхронному шляху Control UI через Tailscale Serve невдалі спроби для однакового `{scope, clientIp}` серіалізуються до запису невдалої спроби. Тому паралельні неправильні спроби від того самого клієнта можуть спровокувати обмежувач уже на другому запиті замість того, щоб обидві одночасно пройти як звичайні невідповідності. - - `gateway.auth.rateLimit.exemptLoopback` типово дорівнює `true`; установіть `false`, коли навмисно хочете, щоб і localhost-трафік підлягав rate limit (для тестових конфігурацій або суворих розгортань через proxy). -- Спроби auth WS з browser-origin завжди обмежуються без винятку для loopback (додатковий захист від brute force localhost через браузер). -- На loopback такі блокування для browser-origin ізолюються за нормалізованим - значенням `Origin`, тож повторні збої з одного localhost origin не - блокують автоматично інший origin. -- `tailscale.mode`: `serve` (лише tailnet, bind loopback) або `funnel` (публічний, вимагає auth). -- `controlUi.allowedOrigins`: явний allowlist browser-origin для підключень WebSocket до Gateway. Потрібний, коли очікуються browser-клієнти з origin, відмінних від loopback. -- `controlUi.dangerouslyAllowHostHeaderOriginFallback`: небезпечний режим, що вмикає резервне визначення origin через заголовок Host для розгортань, які навмисно покладаються на політику origin за заголовком Host. -- `remote.transport`: `ssh` (типово) або `direct` (ws/wss). Для `direct` `remote.url` має бути `ws://` або `wss://`. -- `OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1`: клієнтське перевизначення break-glass, що дозволяє plaintext `ws://` до довірених IP приватної мережі; типово plaintext, як і раніше, дозволено лише для loopback. -- `gateway.remote.token` / `.password` — це поля облікових даних віддаленого клієнта. Самі по собі вони не налаштовують auth Gateway. -- `gateway.push.apns.relay.baseUrl`: базова HTTPS URL зовнішнього APNs relay, який використовують офіційні/TestFlight-збірки iOS після того, як вони публікують реєстрації relay-backed до Gateway. Ця URL має збігатися з URL relay, скомпільованою в iOS-збірці. -- `gateway.push.apns.relay.timeoutMs`: тайм-аут надсилання від Gateway до relay у мілісекундах. Типове значення `10000`. -- Реєстрації relay-backed делегуються конкретній identity Gateway. Парний застосунок iOS отримує `gateway.identity.get`, включає цю identity до реєстрації relay і пересилає Gateway право надсилання в межах цієї реєстрації. Інший Gateway не може повторно використати таку збережену реєстрацію. -- `OPENCLAW_APNS_RELAY_BASE_URL` / `OPENCLAW_APNS_RELAY_TIMEOUT_MS`: тимчасові перевизначення через env для наведеної вище конфігурації relay. -- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true`: лише для розробки — аварійний режим для loopback HTTP URL relay. Продакшн URL relay мають залишатися на HTTPS. -- `gateway.channelHealthCheckMinutes`: інтервал моніторингу стану channel у хвилинах. Установіть `0`, щоб глобально вимкнути перезапуски health-monitor. Типове значення: `5`. +- **Застарілі alias для bind**: використовуйте значення режиму bind у `gateway.bind` (`auto`, `loopback`, `lan`, `tailnet`, `custom`), а не alias хостів (`0.0.0.0`, `127.0.0.1`, `localhost`, `::`, `::1`). +- **Примітка для Docker**: типовий bind `loopback` слухає `127.0.0.1` усередині контейнера. Із bridge-мережею Docker (`-p 18789:18789`) трафік приходить на `eth0`, тож gateway недосяжний. Використовуйте `--network host` або встановіть `bind: "lan"` (або `bind: "custom"` з `customBindHost: "0.0.0.0"`), щоб слухати на всіх інтерфейсах. +- **Auth**: типово обов’язкова. Для bind, відмінних від loopback, потрібна автентифікація gateway. На практиці це означає спільний token/password або reverse proxy з підтримкою identity і `gateway.auth.mode: "trusted-proxy"`. Майстер онбордингу типово генерує token. +- Якщо налаштовано і `gateway.auth.token`, і `gateway.auth.password` (включно з SecretRef), явно задайте `gateway.auth.mode` як `token` або `password`. Потоки запуску та встановлення/відновлення сервісу завершуються помилкою, коли налаштовано обидва, а mode не задано. +- `gateway.auth.mode: "none"`: явний режим без auth. Використовуйте лише для довірених локальних конфігурацій local loopback; цей варіант навмисно не пропонується у підказках онбордингу. +- `gateway.auth.mode: "trusted-proxy"`: делегує auth reverse proxy з підтримкою identity і довіряє заголовкам identity від `gateway.trustedProxies` (див. [Trusted Proxy Auth](/uk/gateway/trusted-proxy-auth)). Цей режим очікує **не-loopback** джерело proxy; reverse proxy loopback на тому ж хості не задовольняють trusted-proxy auth. +- `gateway.auth.allowTailscale`: коли значення `true`, заголовки identity Tailscale Serve можуть задовольняти auth для Control UI/WebSocket (перевіряється через `tailscale whois`). HTTP API endpoint **не** використовують цю Tailscale header auth; вони натомість дотримуються звичайного режиму HTTP auth gateway. Цей потік без token припускає, що хост gateway є довіреним. Типово `true`, коли `tailscale.mode = "serve"`. +- `gateway.auth.rateLimit`: необов’язковий обмежувач невдалих спроб auth. Застосовується для кожної IP клієнта й для кожної області auth (спільний секрет і device-token відстежуються окремо). Заблоковані спроби повертають `429` + `Retry-After`. + - На асинхронному шляху Tailscale Serve Control UI невдалі спроби для того самого `{scope, clientIp}` серіалізуються перед записом помилки. Тому конкурентні невдалі спроби від того самого клієнта можуть спровокувати обмежувач уже на другому запиті, замість того щоб обидві "проскочили" як звичайні невідповідності. + - `gateway.auth.rateLimit.exemptLoopback` типово має значення `true`; установіть `false`, коли ви свідомо хочете також застосовувати rate limit до localhost-трафіку (для тестових конфігурацій або суворих розгортань proxy). +- Спроби auth для WS з джерел browser завжди throttle-яться з вимкненим звільненням loopback (додатковий захист від brute force localhost через browser). +- На loopback ці блокування для browser-origin ізольовані для кожного нормалізованого значення `Origin`, + тож повторні збої з одного localhost-origin не блокують автоматично + інший origin. +- `tailscale.mode`: `serve` (лише tailnet, bind loopback) або `funnel` (публічно, потребує auth). +- `controlUi.allowedOrigins`: явний allowlist browser-origin для WebSocket-з’єднань Gateway. Потрібний, коли очікуються browser-клієнти з origin, відмінних від loopback. +- `controlUi.dangerouslyAllowHostHeaderOriginFallback`: небезпечний режим, який вмикає резервне визначення origin за заголовком Host для розгортань, що свідомо покладаються на політику origin за Host-header. +- `remote.transport`: `ssh` (типово) або `direct` (ws/wss). Для `direct` значення `remote.url` має бути `ws://` або `wss://`. +- `OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1`: клієнтське break-glass-перевизначення, яке дозволяє відкритий `ws://` до довірених IP приватної мережі; для відкритого тексту типово й далі дозволено лише loopback. +- `gateway.remote.token` / `.password` — це поля облікових даних віддаленого клієнта. Вони самі собою не налаштовують auth gateway. +- `gateway.push.apns.relay.baseUrl`: базовий HTTPS URL зовнішнього relay APNs, який використовується офіційними/TestFlight-збірками iOS після того, як вони публікують до gateway реєстрації через relay. Цей URL має відповідати URL relay, скомпільованому у збірку iOS. +- `gateway.push.apns.relay.timeoutMs`: timeout надсилання від gateway до relay у мілісекундах. Типове значення `10000`. +- Реєстрації через relay делегуються конкретній identity gateway. Спарений застосунок iOS викликає `gateway.identity.get`, включає цю identity у реєстрацію relay і пересилає gateway grant на надсилання в межах реєстрації. Інший gateway не може повторно використати цю збережену реєстрацію. +- `OPENCLAW_APNS_RELAY_BASE_URL` / `OPENCLAW_APNS_RELAY_TIMEOUT_MS`: тимчасові env-перевизначення для наведеної вище конфігурації relay. +- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true`: лазівка лише для розробки для URL relay по loopback HTTP. У production URL relay мають залишатися на HTTPS. +- `gateway.channelHealthCheckMinutes`: інтервал моніторингу стану каналів у хвилинах. Установіть `0`, щоб глобально вимкнути перезапуски health-monitor. Типове значення: `5`. - `gateway.channelStaleEventThresholdMinutes`: поріг застарілого socket у хвилинах. Тримайте його більшим або рівним `gateway.channelHealthCheckMinutes`. Типове значення: `30`. -- `gateway.channelMaxRestartsPerHour`: максимальна кількість перезапусків health-monitor для channel/облікового запису за ковзну годину. Типове значення: `10`. -- `channels..healthMonitor.enabled`: відмова для окремого channel від перезапусків health-monitor при збереженні глобального монітора увімкненим. -- `channels..accounts..healthMonitor.enabled`: перевизначення для окремого облікового запису в багатооблікових channels. Якщо задано, має пріоритет над перевизначенням на рівні channel. -- Локальні шляхи виклику Gateway можуть використовувати `gateway.remote.*` як резервне значення лише тоді, коли `gateway.auth.*` не задано. -- Якщо `gateway.auth.token` / `gateway.auth.password` явно задано через SecretRef і не визначено, визначення завершується fail-closed (без маскування через резервний remote). -- `trustedProxies`: IP reverse proxy, які завершують TLS або додають заголовки forwarded-client. Вказуйте лише proxy, якими ви керуєте. Записи loopback і далі є допустимими для виявлення на тому самому хості/локальних proxy-сценаріїв (наприклад Tailscale Serve або локальний reverse proxy), але вони **не** роблять loopback-запити придатними для `gateway.auth.mode: "trusted-proxy"`. -- `allowRealIpFallback`: коли `true`, Gateway приймає `X-Real-IP`, якщо відсутній `X-Forwarded-For`. Типове значення `false` для fail-closed-поведінки. -- `gateway.tools.deny`: додаткові назви інструментів, заблоковані для HTTP `POST /tools/invoke` (розширює типовий список заборон). -- `gateway.tools.allow`: прибрати назви інструментів зі стандартного списку HTTP-заборон. +- `gateway.channelMaxRestartsPerHour`: максимальна кількість перезапусків health-monitor для кожного каналу/облікового запису протягом ковзної години. Типове значення: `10`. +- `channels..healthMonitor.enabled`: opt-out для окремого каналу від перезапусків health-monitor при збереженні глобального монітора. +- `channels..accounts..healthMonitor.enabled`: перевизначення для окремого облікового запису в багатооблікових каналах. Якщо задано, має пріоритет над перевизначенням на рівні каналу. +- Локальні шляхи викликів gateway можуть використовувати `gateway.remote.*` як fallback лише тоді, коли `gateway.auth.*` не задано. +- Якщо `gateway.auth.token` / `gateway.auth.password` явно налаштовано через SecretRef і не визначено, визначення завершується fail-closed (без приховування через fallback на remote). +- `trustedProxies`: IP reverse proxy, які завершують TLS або додають forwarded-client headers. Указуйте лише proxy, якими ви керуєте. Записи loopback усе ще валідні для конфігурацій із proxy на тому ж хості/локального визначення (наприклад, Tailscale Serve або локальний reverse proxy), але вони **не** роблять loopback-запити придатними для `gateway.auth.mode: "trusted-proxy"`. +- `allowRealIpFallback`: коли `true`, gateway приймає `X-Real-IP`, якщо `X-Forwarded-For` відсутній. Типово `false` для fail-closed поведінки. +- `gateway.tools.deny`: додаткові назви інструментів, заблоковані для HTTP `POST /tools/invoke` (розширює типовий deny list). +- `gateway.tools.allow`: видаляє назви інструментів із типового HTTP deny list. @@ -3146,18 +3148,18 @@ Base URL має пропускати `/v1` (клієнт Anthropic додає й - Chat Completions: типово вимкнено. Увімкніть через `gateway.http.endpoints.chatCompletions.enabled: true`. - Responses API: `gateway.http.endpoints.responses.enabled`. -- Посилення захисту URL-входу Responses: +- Захист URL-входів Responses: - `gateway.http.endpoints.responses.maxUrlParts` - `gateway.http.endpoints.responses.files.urlAllowlist` - `gateway.http.endpoints.responses.images.urlAllowlist` - Порожні allowlist трактуються як відсутні; використовуйте `gateway.http.endpoints.responses.files.allowUrl=false` - і/або `gateway.http.endpoints.responses.images.allowUrl=false`, щоб вимкнути отримання URL. -- Необов’язковий заголовок посилення захисту відповіді: - - `gateway.http.securityHeaders.strictTransportSecurity` (задавайте лише для HTTPS origin, якими ви керуєте; див. [Trusted Proxy Auth](/uk/gateway/trusted-proxy-auth#tls-termination-and-hsts)) + Порожні allowlist трактуються як незадані; використовуйте `gateway.http.endpoints.responses.files.allowUrl=false` + і/або `gateway.http.endpoints.responses.images.allowUrl=false`, щоб вимкнути отримання за URL. +- Необов’язковий заголовок зміцнення відповіді: + - `gateway.http.securityHeaders.strictTransportSecurity` (задавайте лише для HTTPS-origin, якими ви керуєте; див. [Trusted Proxy Auth](/uk/gateway/trusted-proxy-auth#tls-termination-and-hsts)) -### Ізоляція кількох інстансів +### Ізоляція кількох екземплярів -Запускайте кілька Gateway на одному хості з унікальними портами та каталогами стану: +Запускайте кілька gateway на одному хості з унікальними портами й каталогами стану: ```bash OPENCLAW_CONFIG_PATH=~/.openclaw/a.json \ @@ -3167,7 +3169,7 @@ openclaw gateway --port 19001 Зручні прапорці: `--dev` (використовує `~/.openclaw-dev` + порт `19001`), `--profile ` (використовує `~/.openclaw-`). -Див. [Multiple Gateways](/uk/gateway/multiple-gateways). +Див. [Кілька Gateway](/uk/gateway/multiple-gateways). ### `gateway.tls` @@ -3185,11 +3187,11 @@ openclaw gateway --port 19001 } ``` -- `enabled`: вмикає завершення TLS на слухачі Gateway (HTTPS/WSS) (типово: `false`). -- `autoGenerate`: автоматично генерує локальну самопідписану пару cert/key, коли явні файли не налаштовано; лише для локального/dev-використання. -- `certPath`: шлях файлової системи до файла TLS-сертифіката. -- `keyPath`: шлях файлової системи до файла закритого TLS-ключа; обмежуйте до нього дозволи. -- `caPath`: необов’язковий шлях до пакета CA для перевірки клієнтів або власних ланцюжків довіри. +- `enabled`: вмикає завершення TLS на слухачі gateway (HTTPS/WSS) (типово: `false`). +- `autoGenerate`: автоматично генерує локальну самопідписану пару cert/key, коли явні файли не налаштовані; лише для local/dev. +- `certPath`: шлях у файловій системі до файла сертифіката TLS. +- `keyPath`: шлях у файловій системі до файла приватного ключа TLS; обмежте права доступу. +- `caPath`: необов’язковий шлях до набору CA для перевірки клієнта або користувацьких ланцюжків довіри. ### `gateway.reload` @@ -3205,13 +3207,13 @@ openclaw gateway --port 19001 } ``` -- `mode`: керує тим, як зміни конфігурації застосовуються під час runtime. - - `"off"`: ігнорувати live-редагування; зміни вимагають явного перезапуску. - - `"restart"`: завжди перезапускати процес Gateway після зміни конфігурації. +- `mode`: керує тим, як зміни config застосовуються під час runtime. + - `"off"`: ігнорувати зміни в реальному часі; зміни потребують явного перезапуску. + - `"restart"`: завжди перезапускати процес gateway після зміни config. - `"hot"`: застосовувати зміни в процесі без перезапуску. - `"hybrid"` (типово): спочатку пробувати hot reload; за потреби повертатися до перезапуску. -- `debounceMs`: вікно debounce у мс до застосування змін конфігурації (невід’ємне ціле число). -- `deferralTimeoutMs`: максимальний час у мс очікування завершення операцій у польоті перед примусовим перезапуском (типово: `300000` = 5 хвилин). +- `debounceMs`: вікно debounce у ms перед застосуванням змін config (невід’ємне ціле число). +- `deferralTimeoutMs`: максимальний час у ms очікування завершення операцій у польоті перед примусовим перезапуском (типово: `300000` = 5 хвилин). --- @@ -3249,37 +3251,37 @@ openclaw gateway --port 19001 ``` Auth: `Authorization: Bearer ` або `x-openclaw-token: `. -Hook-токени в query string відхиляються. +Токени hooks у query-string відхиляються. Примітки щодо валідації та безпеки: -- `hooks.enabled=true` вимагає непорожній `hooks.token`. -- `hooks.token` має бути **відмінним** від `gateway.auth.token`; повторне використання токена Gateway відхиляється. -- `hooks.path` не може бути `/`; використовуйте виділений підшлях, наприклад `/hooks`. +- `hooks.enabled=true` потребує непорожній `hooks.token`. +- `hooks.token` має **відрізнятися** від `gateway.auth.token`; повторне використання токена Gateway відхиляється. +- `hooks.path` не може бути `/`; використовуйте окремий підшлях, наприклад `/hooks`. - Якщо `hooks.allowRequestSessionKey=true`, обмежте `hooks.allowedSessionKeyPrefixes` (наприклад `["hook:"]`). -- Якщо mapping або preset використовує шаблонний `sessionKey`, задайте `hooks.allowedSessionKeyPrefixes` і `hooks.allowRequestSessionKey=true`. Статичні ключі mapping не потребують цього opt-in. +- Якщо mapping або preset використовує шаблонізований `sessionKey`, задайте `hooks.allowedSessionKeyPrefixes` і `hooks.allowRequestSessionKey=true`. Статичні ключі mapping не потребують цього opt-in. **Endpoint:** - `POST /hooks/wake` → `{ text, mode?: "now"|"next-heartbeat" }` - `POST /hooks/agent` → `{ message, name?, agentId?, sessionKey?, wakeMode?, deliver?, channel?, to?, model?, thinking?, timeoutSeconds? }` - - `sessionKey` із payload запиту приймається лише тоді, коли `hooks.allowRequestSessionKey=true` (типово: `false`). + - `sessionKey` з payload запиту приймається лише тоді, коли `hooks.allowRequestSessionKey=true` (типово: `false`). - `POST /hooks/` → визначається через `hooks.mappings` - - Значення `sessionKey` mapping, згенеровані шаблоном, вважаються зовнішньо заданими та також вимагають `hooks.allowRequestSessionKey=true`. + - Значення `sessionKey` у mapping, згенеровані шаблоном, розглядаються як надані ззовні й також потребують `hooks.allowRequestSessionKey=true`. -- `match.path` зіставляє підшлях після `/hooks` (наприклад `/hooks/gmail` → `gmail`). -- `match.source` зіставляє поле payload для загальних шляхів. -- Шаблони на кшталт `{{messages[0].subject}}` читаються з payload. +- `match.path` відповідає підшляху після `/hooks` (наприклад, `/hooks/gmail` → `gmail`). +- `match.source` відповідає полю payload для загальних шляхів. +- Шаблони на кшталт `{{messages[0].subject}}` читають значення з payload. - `transform` може вказувати на модуль JS/TS, який повертає дію hook. - - `transform.module` має бути відносним шляхом і залишатися в межах `hooks.transformsDir` (абсолютні шляхи та traversal відхиляються). -- `agentId` маршрутизує до конкретного агента; невідомі ID використовують резервно типового агента. -- `allowedAgentIds`: обмежує явну маршрутизацію (`*` або відсутність = дозволити все, `[]` = заборонити все). -- `defaultSessionKey`: необов’язковий фіксований ключ сесії для запусків hook-агента без явного `sessionKey`. -- `allowRequestSessionKey`: дозволяє викликувачам `/hooks/agent` і ключам сесій mapping, що задаються шаблоном, установлювати `sessionKey` (типово: `false`). -- `allowedSessionKeyPrefixes`: необов’язковий allowlist префіксів для явних значень `sessionKey` (запит + mapping), наприклад `["hook:"]`. Він стає обов’язковим, коли будь-який mapping або preset використовує шаблонний `sessionKey`. -- `deliver: true` надсилає фінальну відповідь у channel; `channel` типово має значення `last`. + - `transform.module` має бути відносним шляхом і залишатися в межах `hooks.transformsDir` (абсолютні шляхи й traversal відхиляються). +- `agentId` маршрутизує до конкретного агента; невідомі id повертаються до типового значення. +- `allowedAgentIds`: обмежує явну маршрутизацію (`*` або відсутність = дозволити всі, `[]` = заборонити всі). +- `defaultSessionKey`: необов’язковий фіксований ключ сесії для запусків агента hook без явного `sessionKey`. +- `allowRequestSessionKey`: дозволяє викликам `/hooks/agent` і ключам сесій у mapping, згенерованим шаблонами, задавати `sessionKey` (типово: `false`). +- `allowedSessionKeyPrefixes`: необов’язковий allowlist префіксів для явних значень `sessionKey` (запит + mapping), наприклад `["hook:"]`. Стає обов’язковим, коли будь-який mapping або preset використовує шаблонізований `sessionKey`. +- `deliver: true` надсилає фінальну відповідь у канал; `channel` типово дорівнює `last`. - `model` перевизначає LLM для цього запуску hook (має бути дозволений, якщо задано каталог моделей). @@ -3287,8 +3289,8 @@ Hook-токени в query string відхиляються. ### Інтеграція Gmail - Вбудований preset Gmail використовує `sessionKey: "hook:gmail:{{messages[0].id}}"`. -- Якщо ви зберігаєте таку маршрутизацію для кожного повідомлення, задайте `hooks.allowRequestSessionKey: true` і обмежте `hooks.allowedSessionKeyPrefixes` так, щоб вони відповідали простору імен Gmail, наприклад `["hook:", "hook:gmail:"]`. -- Якщо вам потрібно `hooks.allowRequestSessionKey: false`, перевизначте preset статичним `sessionKey` замість типового шаблонного значення. +- Якщо ви зберігаєте таку маршрутизацію для кожного повідомлення, установіть `hooks.allowRequestSessionKey: true` і обмежте `hooks.allowedSessionKeyPrefixes` так, щоб вони відповідали простору імен Gmail, наприклад `["hook:", "hook:gmail:"]`. +- Якщо вам потрібне `hooks.allowRequestSessionKey: false`, перевизначте preset статичним `sessionKey` замість шаблонізованого типового значення. ```json5 { @@ -3311,39 +3313,39 @@ Hook-токени в query string відхиляються. } ``` -- Gateway автоматично запускає `gog gmail watch serve` під час завантаження, якщо його налаштовано. Задайте `OPENCLAW_SKIP_GMAIL_WATCHER=1`, щоб вимкнути це. +- Gateway автоматично запускає `gog gmail watch serve` під час завантаження, якщо це налаштовано. Установіть `OPENCLAW_SKIP_GMAIL_WATCHER=1`, щоб вимкнути. - Не запускайте окремий `gog gmail watch serve` паралельно з Gateway. --- -## Canvas host +## Хост Canvas ```json5 { canvasHost: { root: "~/.openclaw/workspace/canvas", liveReload: true, - // enabled: false, // або OPENCLAW_SKIP_CANVAS_HOST=1 + // enabled: false, // or OPENCLAW_SKIP_CANVAS_HOST=1 }, } ``` -- Обслуговує HTML/CSS/JS, які редагує агент, і A2UI через HTTP під портом Gateway: +- Обслуговує HTML/CSS/JS і A2UI, які агент може редагувати, через HTTP на порту Gateway: - `http://:/__openclaw__/canvas/` - `http://:/__openclaw__/a2ui/` -- Лише локально: зберігайте `gateway.bind: "loopback"` (типово). -- Binds, відмінні від loopback: маршрути canvas вимагають auth Gateway (token/password/trusted-proxy), як і інші HTTP-поверхні Gateway. -- Node WebView зазвичай не надсилають заголовки auth; після того як Node спарено та підключено, Gateway оголошує URL можливостей, прив’язані до Node, для доступу до canvas/A2UI. -- URL можливостей прив’язані до активної WS-сесії Node і швидко спливають. Резервний варіант на основі IP не використовується. -- Вбудовує клієнт live-reload у HTML, що обслуговується. -- Автоматично створює початковий `index.html`, якщо каталог порожній. +- Лише локально: залишайте `gateway.bind: "loopback"` (типово). +- Для bind, відмінних від loopback: маршрути canvas потребують auth Gateway (token/password/trusted-proxy), так само як і інші HTTP-поверхні Gateway. +- Node WebView зазвичай не надсилають заголовки auth; після pairing і підключення node Gateway рекламує URL можливостей із областю node для доступу до canvas/A2UI. +- URL можливостей прив’язані до активної WS-сесії node і швидко спливають. Резервний варіант на основі IP не використовується. +- Вбудовує клієнт live-reload в HTML, що обслуговується. +- Автоматично створює стартовий `index.html`, якщо каталог порожній. - Також обслуговує A2UI за адресою `/__openclaw__/a2ui/`. -- Зміни вимагають перезапуску Gateway. -- Вимкніть live reload для великих каталогів або при помилках `EMFILE`. +- Зміни потребують перезапуску gateway. +- Вимикайте live reload для великих каталогів або у випадку помилок `EMFILE`. --- -## Discovery +## Виявлення ### mDNS (Bonjour) @@ -3357,9 +3359,9 @@ Hook-токени в query string відхиляються. } ``` -- `minimal` (типово): не включати `cliPath` + `sshPort` до TXT-записів. -- `full`: включати `cliPath` + `sshPort`. -- Ім’я хоста типово `openclaw`. Перевизначайте через `OPENCLAW_MDNS_HOSTNAME`. +- `minimal` (типово): пропускає `cliPath` + `sshPort` із TXT-записів. +- `full`: включає `cliPath` + `sshPort`. +- Ім’я хоста типово `openclaw`. Перевизначення через `OPENCLAW_MDNS_HOSTNAME`. ### Wide-area (DNS-SD) @@ -3371,7 +3373,7 @@ Hook-токени в query string відхиляються. } ``` -Записує зону unicast DNS-SD у `~/.openclaw/dns/`. Для виявлення між мережами поєднуйте з DNS-сервером (рекомендовано CoreDNS) + split DNS Tailscale. +Записує зону одноадресного DNS-SD у `~/.openclaw/dns/`. Для виявлення між мережами поєднуйте з DNS-сервером (рекомендовано CoreDNS) + split DNS у Tailscale. Налаштування: `openclaw dns setup --apply`. @@ -3379,7 +3381,7 @@ Hook-токени в query string відхиляються. ## Середовище -### `env` (вбудовані env-змінні) +### `env` (вбудовані env vars) ```json5 { @@ -3396,14 +3398,14 @@ Hook-токени в query string відхиляються. } ``` -- Вбудовані env-змінні застосовуються лише тоді, коли в середовищі процесу немає цього ключа. -- Файли `.env`: `.env` поточного робочого каталогу + `~/.openclaw/.env` (жоден із них не перевизначає наявні змінні). -- `shellEnv`: імпортує відсутні очікувані ключі з профілю вашого shell входу. +- Вбудовані env vars застосовуються лише тоді, коли в process env відсутній відповідний ключ. +- Файли `.env`: `.env` у CWD + `~/.openclaw/.env` (жоден із них не перевизначає наявні vars). +- `shellEnv`: імпортує відсутні очікувані ключі з профілю вашого login shell. - Повний пріоритет див. у [Environment](/uk/help/environment). -### Підстановка env-змінних +### Підстановка env var -Посилайтеся на env-змінні в будь-якому рядку конфігурації через `${VAR_NAME}`: +Посилайтеся на env vars у будь-якому рядку конфігурації через `${VAR_NAME}`: ```json5 { @@ -3413,16 +3415,16 @@ Hook-токени в query string відхиляються. } ``` -- Зіставляються лише великі літери: `[A-Z_][A-Z0-9_]*`. -- Відсутні/порожні змінні спричиняють помилку під час завантаження конфігурації. -- Екрануйте через `$${VAR}` для буквального `${VAR}`. +- Відповідають лише імена у верхньому регістрі: `[A-Z_][A-Z0-9_]*`. +- Відсутні/порожні vars спричиняють помилку під час завантаження конфігурації. +- Екрануйте як `$${VAR}` для буквального `${VAR}`. - Працює з `$include`. --- ## Secrets -Посилання на секрети є додатковими: відкриті значення й далі працюють. +Посилання на секрети є додатковими: відкриті значення теж працюють. ### `SecretRef` @@ -3435,24 +3437,24 @@ Hook-токени в query string відхиляються. Валідація: - шаблон `provider`: `^[a-z][a-z0-9_-]{0,63}$` -- шаблон id для `source: "env"`: `^[A-Z][A-Z0-9_]{0,127}$` -- `source: "file"` id: абсолютний JSON pointer (наприклад `"/providers/openai/apiKey"`) -- шаблон id для `source: "exec"`: `^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$` -- `source: "exec"` id не повинні містити slash-delimited сегменти шляху `.` або `..` (наприклад `a/../b` відхиляється) +- шаблон `id` для `source: "env"`: `^[A-Z][A-Z0-9_]{0,127}$` +- `source: "file"` `id`: абсолютний JSON pointer (наприклад, `"/providers/openai/apiKey"`) +- шаблон `id` для `source: "exec"`: `^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$` +- `id` для `source: "exec"` не мають містити сегменти шляху `.` або `..`, розділені `/` (наприклад, `a/../b` відхиляється) ### Підтримувана поверхня облікових даних - Канонічна матриця: [SecretRef Credential Surface](/uk/reference/secretref-credential-surface) - `secrets apply` націлюється на підтримувані шляхи облікових даних у `openclaw.json`. -- Посилання з `auth-profiles.json` включено до визначення runtime та охоплення аудиту. +- Посилання в `auth-profiles.json` включено в runtime-визначення та покриття audit. -### Конфігурація провайдерів секретів +### Конфігурація provider secrets ```json5 { secrets: { providers: { - default: { source: "env" }, // необов’язковий явний env-провайдер + default: { source: "env" }, // optional explicit env provider filemain: { source: "file", path: "~/.openclaw/secrets.json", @@ -3476,13 +3478,13 @@ Hook-токени в query string відхиляються. Примітки: -- Провайдер `file` підтримує `mode: "json"` і `mode: "singleValue"` (`id` має бути `"value"` у режимі singleValue). -- Провайдер `exec` вимагає абсолютний шлях `command` і використовує payload протоколу через stdin/stdout. -- Типово шляхи команд-символічних посилань відхиляються. Установіть `allowSymlinkCommand: true`, щоб дозволити шляхи-символічні посилання з перевіркою шляху визначеної цілі. +- Provider `file` підтримує `mode: "json"` і `mode: "singleValue"` (у режимі singleValue `id` має дорівнювати `"value"`). +- Provider `exec` потребує абсолютного шляху `command` і використовує payload протоколу через stdin/stdout. +- Типово шляхи до команд-symlink відхиляються. Установіть `allowSymlinkCommand: true`, щоб дозволити шляхи symlink із перевіркою шляху до визначеної цілі. - Якщо налаштовано `trustedDirs`, перевірка trusted-dir застосовується до шляху визначеної цілі. -- Середовище дочірнього процесу `exec` типово мінімальне; передавайте потрібні змінні явно через `passEnv`. -- Посилання на секрети визначаються під час активації в знімок у пам’яті, після чого шляхи запитів читають лише цей знімок. -- Під час активації застосовується фільтрація активної поверхні: невизначені посилання на ввімкнених поверхнях спричиняють помилку запуску/перезавантаження, а неактивні поверхні пропускаються з діагностикою. +- Дочірнє середовище `exec` типово мінімальне; передавайте потрібні змінні явно через `passEnv`. +- Посилання на секрети визначаються під час активації у знімок у пам’яті, а потім шляхи запиту читають лише цей знімок. +- Під час активації застосовується фільтрація активної поверхні: невизначені посилання на увімкнених поверхнях призводять до збою запуску/перезавантаження, тоді як неактивні поверхні пропускаються з діагностикою. --- @@ -3507,10 +3509,10 @@ Hook-токени в query string відхиляються. - Профілі для окремого агента зберігаються в `/auth-profiles.json`. - `auth-profiles.json` підтримує посилання на рівні значень (`keyRef` для `api_key`, `tokenRef` для `token`) для статичних режимів облікових даних. - Профілі режиму OAuth (`auth.profiles..mode = "oauth"`) не підтримують облікові дані auth-profile на основі SecretRef. -- Статичні runtime-облікові дані надходять із визначених знімків у пам’яті; застарілі статичні записи `auth.json` очищаються, коли їх виявлено. -- Застарілі імпорти OAuth із `~/.openclaw/credentials/oauth.json`. +- Статичні runtime-облікові дані беруться з визначених знімків у пам’яті; застарілі статичні записи `auth.json` очищуються, коли виявляються. +- Застарілий імпорт OAuth — із `~/.openclaw/credentials/oauth.json`. - Див. [OAuth](/uk/concepts/oauth). -- Поведінка runtime для Secrets і інструменти `audit/configure/apply`: [Secrets Management](/uk/gateway/secrets). +- Поведінка runtime secrets і засоби `audit/configure/apply`: [Secrets Management](/uk/gateway/secrets). ### `auth.cooldowns` @@ -3533,24 +3535,23 @@ Hook-токени в query string відхиляються. ``` - `billingBackoffHours`: базовий backoff у годинах, коли профіль зазнає збою через справжні - помилки billing/недостатнього кредиту (типово: `5`). Явний текст billing - все одно може потрапити сюди навіть у відповідях `401`/`403`, але - провайдер-специфічні текстові matcher-и лишаються обмеженими провайдером, - якому вони належать (наприклад OpenRouter - `Key limit exceeded`). Повторювані HTTP `402` usage-window або - повідомлення про ліміт витрат organization/workspace натомість лишаються в шляху `rate_limit`. -- `billingBackoffHoursByProvider`: необов’язкові перевизначення часу billing backoff у годинах для окремих провайдерів. -- `billingMaxHours`: межа в годинах для експоненційного зростання billing backoff (типово: `24`). + помилки billing/недостатнього кредиту (типово: `5`). Явний текст про billing + усе ще може потрапити сюди навіть у відповідях `401`/`403`, але текстові + зіставлення, специфічні для provider, залишаються обмеженими provider, якому вони належать (наприклад, OpenRouter + `Key limit exceeded`). Повторні HTTP `402` для вікна використання або + повідомлення про ліміти витрат організації/workspace натомість залишаються у шляху `rate_limit`. +- `billingBackoffHoursByProvider`: необов’язкові перевизначення годин billing backoff для окремих provider. +- `billingMaxHours`: обмеження в годинах для експоненційного зростання billing backoff (типово: `24`). - `authPermanentBackoffMinutes`: базовий backoff у хвилинах для збоїв `auth_permanent` з високою впевненістю (типово: `10`). -- `authPermanentMaxMinutes`: межа в хвилинах для зростання backoff `auth_permanent` (типово: `60`). +- `authPermanentMaxMinutes`: обмеження в хвилинах для зростання backoff `auth_permanent` (типово: `60`). - `failureWindowHours`: ковзне вікно в годинах, яке використовується для лічильників backoff (типово: `24`). -- `overloadedProfileRotations`: максимальна кількість ротацій auth-profile в межах одного провайдера для помилок перевантаження перед переходом до резервної моделі (типово: `1`). Сюди потрапляють форми зайнятості провайдера на кшталт `ModelNotReadyException`. -- `overloadedBackoffMs`: фіксована затримка перед повторною спробою ротації перевантаженого провайдера/профілю (типово: `0`). -- `rateLimitedProfileRotations`: максимальна кількість ротацій auth-profile в межах одного провайдера для помилок обмеження швидкості перед переходом до резервної моделі (типово: `1`). До цього кошика rate-limit входять тексти у стилі провайдера на кшталт `Too many concurrent requests`, `ThrottlingException`, `concurrency limit reached`, `workers_ai ... quota limit exceeded` і `resource exhausted`. +- `overloadedProfileRotations`: максимальна кількість ротацій auth-profile в межах того самого provider для перевантажених помилок перед переходом на fallback моделі (типово: `1`). Форми на кшталт `ModelNotReadyException`, де provider зайнятий, потрапляють сюди. +- `overloadedBackoffMs`: фіксована затримка перед повторною спробою ротації перевантаженого provider/profile (типово: `0`). +- `rateLimitedProfileRotations`: максимальна кількість ротацій auth-profile в межах того самого provider для помилок rate limit перед переходом на fallback моделі (типово: `1`). Цей bucket rate limit включає текстові форми provider на кшталт `Too many concurrent requests`, `ThrottlingException`, `concurrency limit reached`, `workers_ai ... quota limit exceeded` і `resource exhausted`. --- -## Logging +## Логування ```json5 { @@ -3565,10 +3566,10 @@ Hook-токени в query string відхиляються. } ``` -- Типовий файл логів: `/tmp/openclaw/openclaw-YYYY-MM-DD.log`. -- Задайте `logging.file` для стабільного шляху. -- `consoleLevel` підвищується до `debug`, коли використовується `--verbose`. -- `maxFileBytes`: максимальний розмір файла логів у байтах, після якого запис пригнічується (додатне ціле число; типово: `524288000` = 500 MB). Для продакшн-розгортань використовуйте зовнішню ротацію логів. +- Типовий файл логу: `/tmp/openclaw/openclaw-YYYY-MM-DD.log`. +- Установіть `logging.file` для стабільного шляху. +- `consoleLevel` підвищується до `debug` із `--verbose`. +- `maxFileBytes`: максимальний розмір файла логу в байтах, після якого запис пригнічується (додатне ціле число; типово: `524288000` = 500 MB). Для production-розгортань використовуйте зовнішню ротацію логів. --- @@ -3605,24 +3606,24 @@ Hook-токени в query string відхиляються. } ``` -- `enabled`: головний перемикач виводу інструментування (типово: `true`). +- `enabled`: головний перемикач для виводу instrumentation (типово: `true`). - `flags`: масив рядків прапорців, що вмикають цільовий вивід логів (підтримує wildcard на кшталт `"telegram.*"` або `"*"`). -- `stuckSessionWarnMs`: поріг віку в мс для виведення попереджень про завислі сесії, поки сесія лишається в стані обробки. +- `stuckSessionWarnMs`: поріг віку в ms для виведення попереджень про завислі сесії, поки сесія залишається в стані обробки. - `otel.enabled`: вмикає конвеєр експорту OpenTelemetry (типово: `false`). -- `otel.endpoint`: URL колектора для експорту OTel. +- `otel.endpoint`: URL collector для експорту OTel. - `otel.protocol`: `"http/protobuf"` (типово) або `"grpc"`. -- `otel.headers`: додаткові заголовки метаданих HTTP/gRPC, що надсилаються із запитами експорту OTel. -- `otel.serviceName`: ім’я сервісу для атрибутів ресурсу. -- `otel.traces` / `otel.metrics` / `otel.logs`: увімкнути експорт trace, metrics або logs. -- `otel.sampleRate`: частота вибірки trace `0`–`1`. -- `otel.flushIntervalMs`: періодичний інтервал скидання telemetry у мс. -- `cacheTrace.enabled`: журналювати знімки trace кешу для вбудованих запусків (типово: `false`). -- `cacheTrace.filePath`: шлях виводу для JSONL trace кешу (типово: `$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl`). -- `cacheTrace.includeMessages` / `includePrompt` / `includeSystem`: керують тим, що включається до виводу trace кешу (усі типово: `true`). +- `otel.headers`: додаткові заголовки метаданих HTTP/gRPC, що надсилаються разом із запитами експорту OTel. +- `otel.serviceName`: назва сервісу для атрибутів ресурсу. +- `otel.traces` / `otel.metrics` / `otel.logs`: увімкнути експорт trace, metrics або log. +- `otel.sampleRate`: частота семплювання trace `0`–`1`. +- `otel.flushIntervalMs`: інтервал періодичного flush telemetry у ms. +- `cacheTrace.enabled`: логувати знімки cache trace для вбудованих запусків (типово: `false`). +- `cacheTrace.filePath`: шлях виводу для cache trace JSONL (типово: `$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl`). +- `cacheTrace.includeMessages` / `includePrompt` / `includeSystem`: керують тим, що включається у вивід cache trace (усі типово: `true`). --- -## Update +## Оновлення ```json5 { @@ -3641,10 +3642,10 @@ Hook-токени в query string відхиляються. ``` - `channel`: канал релізів для встановлень npm/git — `"stable"`, `"beta"` або `"dev"`. -- `checkOnStart`: перевіряти наявність оновлень npm під час запуску Gateway (типово: `true`). -- `auto.enabled`: увімкнути фонове auto-update для встановлень пакетів (типово: `false`). -- `auto.stableDelayHours`: мінімальна затримка в годинах перед автоматичним застосуванням на stable-каналі (типово: `6`; максимум: `168`). -- `auto.stableJitterHours`: додаткове вікно розподілу розгортання stable-каналу в годинах (типово: `12`; максимум: `168`). +- `checkOnStart`: перевіряти оновлення npm під час запуску gateway (типово: `true`). +- `auto.enabled`: увімкнути фонове автооновлення для package-встановлень (типово: `false`). +- `auto.stableDelayHours`: мінімальна затримка в годинах перед авто-застосуванням для stable-каналу (типово: `6`; максимум: `168`). +- `auto.stableJitterHours`: додаткове вікно розподілу розгортання для stable-каналу в годинах (типово: `12`; максимум: `168`). - `auto.betaCheckIntervalHours`: як часто виконуються перевірки beta-каналу в годинах (типово: `1`; максимум: `24`). --- @@ -3678,21 +3679,21 @@ Hook-токени в query string відхиляються. } ``` -- `enabled`: глобальний feature gate ACP (типово: `false`). -- `dispatch.enabled`: незалежний gate для dispatch ходів сесії ACP (типово: `true`). Установіть `false`, щоб залишити команди ACP доступними, але заблокувати виконання. -- `backend`: id типового backend runtime ACP (має збігатися із зареєстрованим plugin runtime ACP). -- `defaultAgent`: резервний id цільового агента ACP, коли під час spawn не задано явну ціль. -- `allowedAgents`: allowlist id агентів, дозволених для сесій runtime ACP; порожнє значення означає відсутність додаткових обмежень. -- `maxConcurrentSessions`: максимальна кількість одночасно активних сесій ACP. -- `stream.coalesceIdleMs`: вікно idle flush у мс для потокового тексту. -- `stream.maxChunkChars`: максимальний розмір фрагмента перед розбиттям проєкції потокового блока. -- `stream.repeatSuppression`: пригнічувати повторювані рядки status/tool для кожного ходу (типово: `true`). -- `stream.deliveryMode`: `"live"` передає потік поступово; `"final_only"` буферизує до термінальних подій ходу. -- `stream.hiddenBoundarySeparator`: роздільник перед видимим текстом після прихованих подій інструментів (типово: `"paragraph"`). -- `stream.maxOutputChars`: максимальна кількість символів виводу асистента, що проєктується за один хід ACP. -- `stream.maxSessionUpdateChars`: максимальна кількість символів для проєктованих рядків статусу/оновлень ACP. -- `stream.tagVisibility`: запис назв тегів до булевих перевизначень видимості для потокових подій. -- `runtime.ttlMinutes`: idle TTL у хвилинах для воркерів сесій ACP до того, як вони стануть придатними для очищення. +- `enabled`: глобальний feature gate для ACP (типово: `false`). +- `dispatch.enabled`: незалежний gate для dispatch ходу ACP-сесії (типово: `true`). Установіть `false`, щоб команди ACP залишалися доступними, але виконання блокувалося. +- `backend`: id типового runtime-backend ACP (має відповідати зареєстрованому runtime Plugin ACP). +- `defaultAgent`: резервний id цільового агента ACP, коли spawn не задає явну ціль. +- `allowedAgents`: allowlist id агентів, дозволених для runtime-сесій ACP; порожнє значення означає відсутність додаткових обмежень. +- `maxConcurrentSessions`: максимальна кількість одночасно активних ACP-сесій. +- `stream.coalesceIdleMs`: вікно idle flush у ms для потокового тексту. +- `stream.maxChunkChars`: максимальний розмір chunk перед розбиттям проєкції потокового блока. +- `stream.repeatSuppression`: пригнічує повторювані рядки status/tool на хід (типово: `true`). +- `stream.deliveryMode`: `"live"` передає потік поступово; `"final_only"` буферизує до terminal event ходу. +- `stream.hiddenBoundarySeparator`: роздільник перед видимим текстом після прихованих tool event (типово: `"paragraph"`). +- `stream.maxOutputChars`: максимальна кількість символів виводу assistant, що проєктується за один ACP-хід. +- `stream.maxSessionUpdateChars`: максимальна кількість символів для проєктованих рядків статусу/оновлення ACP. +- `stream.tagVisibility`: запис назв тегів у boolean-перевизначення видимості для потокових event. +- `runtime.ttlMinutes`: idle TTL у хвилинах для worker ACP-сесій до того, як вони стануть придатними для очищення. - `runtime.installCommand`: необов’язкова команда встановлення, яку слід виконати під час bootstrap середовища runtime ACP. --- @@ -3710,16 +3711,16 @@ Hook-токени в query string відхиляються. ``` - `cli.banner.taglineMode` керує стилем tagline банера: - - `"random"` (типово): ротаційні кумедні/сезонні tagline. - - `"default"`: фіксована нейтральна tagline (`All your chats, one OpenClaw.`). - - `"off"`: без тексту tagline (заголовок/версія банера все одно показуються). -- Щоб приховати весь банер (а не лише tagline), задайте env `OPENCLAW_HIDE_BANNER=1`. + - `"random"` (типово): змінні кумедні/сезонні tagline. + - `"default"`: фіксований нейтральний tagline (`All your chats, one OpenClaw.`). + - `"off"`: без тексту tagline (назва/версія банера все одно показуються). +- Щоб приховати весь банер (а не лише tagline), установіть env `OPENCLAW_HIDE_BANNER=1`. --- ## Wizard -Метадані, записані керованими потоками налаштування CLI (`onboard`, `configure`, `doctor`): +Метадані, які записуються керованими потоками налаштування CLI (`onboard`, `configure`, `doctor`): ```json5 { @@ -3737,15 +3738,15 @@ Hook-токени в query string відхиляються. ## Identity -Поля identity див. у `agents.list` в розділі [Типові значення агента](#agent-defaults). +Див. поля identity в `agents.list` у розділі [Типові значення агентів](#agent-defaults). --- ## Bridge (застарілий, видалений) -Поточні збірки більше не містять TCP Bridge. Node підключаються через WebSocket Gateway. Ключі `bridge.*` більше не входять до схеми конфігурації (валідація завершується помилкою, доки їх не буде видалено; `openclaw doctor --fix` може прибрати невідомі ключі). +Поточні збірки більше не містять TCP bridge. Node підключаються через WebSocket Gateway. Ключі `bridge.*` більше не є частиною схеми конфігурації (валідація завершується помилкою, доки їх не буде видалено; `openclaw doctor --fix` може прибрати невідомі ключі). - + ```json { @@ -3772,22 +3773,22 @@ Hook-токени в query string відхиляються. cron: { enabled: true, maxConcurrentRuns: 2, - webhook: "https://example.invalid/legacy", // застарілий резервний варіант для збережених завдань notify:true - webhookToken: "replace-with-dedicated-token", // необов’язковий bearer token для вихідної webhook auth - sessionRetention: "24h", // рядок тривалості або false + webhook: "https://example.invalid/legacy", // deprecated fallback for stored notify:true jobs + webhookToken: "replace-with-dedicated-token", // optional bearer token for outbound webhook auth + sessionRetention: "24h", // duration string or false runLog: { - maxBytes: "2mb", // типово 2_000_000 байтів - keepLines: 2000, // типово 2000 + maxBytes: "2mb", // default 2_000_000 bytes + keepLines: 2000, // default 2000 }, }, } ``` -- `sessionRetention`: як довго зберігати завершені сесії ізольованих запусків Cron перед очищенням із `sessions.json`. Також керує очищенням архівованих видалених transcript Cron. Типове значення: `24h`; установіть `false`, щоб вимкнути. -- `runLog.maxBytes`: максимальний розмір одного файла журналу запуску (`cron/runs/.jsonl`) до очищення. Типове значення: `2_000_000` байтів. -- `runLog.keepLines`: кількість найновіших рядків, що зберігаються при запуску очищення журналу запуску. Типове значення: `2000`. -- `webhookToken`: bearer token, який використовується для доставки webhook POST із Cron (`delivery.mode = "webhook"`); якщо пропущено, заголовок auth не надсилається. -- `webhook`: застарілий резервний webhook URL (http/https), який використовується лише для збережених завдань, що все ще мають `notify: true`. +- `sessionRetention`: як довго зберігати завершені ізольовані сесії виконання cron перед очищенням із `sessions.json`. Також керує очищенням архівованих видалених стенограм cron. Типове значення: `24h`; установіть `false`, щоб вимкнути. +- `runLog.maxBytes`: максимальний розмір файла журналу одного запуску (`cron/runs/.jsonl`) перед очищенням. Типове значення: `2_000_000` байтів. +- `runLog.keepLines`: найновіші рядки, що зберігаються під час очищення журналу запусків. Типове значення: `2000`. +- `webhookToken`: bearer token, що використовується для доставлення cron webhook POST (`delivery.mode = "webhook"`), якщо пропущено — заголовок auth не надсилається. +- `webhook`: застарілий резервний URL webhook (http/https), який використовується лише для збережених завдань, у яких усе ще є `notify: true`. ### `cron.retry` @@ -3803,11 +3804,11 @@ Hook-токени в query string відхиляються. } ``` -- `maxAttempts`: максимальна кількість повторних спроб для одноразових завдань при тимчасових помилках (типово: `3`; діапазон: `0`–`10`). -- `backoffMs`: масив затримок backoff у мс для кожної повторної спроби (типово: `[30000, 60000, 300000]`; 1–10 записів). +- `maxAttempts`: максимальна кількість повторних спроб для одноразових завдань у разі тимчасових помилок (типово: `3`; діапазон: `0`–`10`). +- `backoffMs`: масив затримок backoff у ms для кожної повторної спроби (типово: `[30000, 60000, 300000]`; 1–10 записів). - `retryOn`: типи помилок, що запускають повторні спроби — `"rate_limit"`, `"overloaded"`, `"network"`, `"timeout"`, `"server_error"`. Пропустіть, щоб повторювати всі тимчасові типи. -Застосовується лише до одноразових завдань Cron. Повторювані завдання використовують окрему обробку збоїв. +Застосовується лише до одноразових Cron-завдань. Повторювані завдання використовують окрему обробку помилок. ### `cron.failureAlert` @@ -3825,11 +3826,11 @@ Hook-токени в query string відхиляються. } ``` -- `enabled`: увімкнути сповіщення про збої для завдань Cron (типово: `false`). -- `after`: кількість послідовних збоїв до спрацювання сповіщення (додатне ціле число, мінімум: `1`). +- `enabled`: увімкнути сповіщення про помилки для Cron-завдань (типово: `false`). +- `after`: кількість послідовних помилок перед спрацюванням сповіщення (додатне ціле число, мінімум: `1`). - `cooldownMs`: мінімальна кількість мілісекунд між повторними сповіщеннями для того самого завдання (невід’ємне ціле число). -- `mode`: режим доставки — `"announce"` надсилає через повідомлення каналу; `"webhook"` виконує POST на налаштований webhook. -- `accountId`: необов’язковий id облікового запису або каналу для обмеження доставки сповіщень. +- `mode`: режим доставлення — `"announce"` надсилає через повідомлення в канал; `"webhook"` надсилає POST на налаштований webhook. +- `accountId`: необов’язковий id облікового запису або каналу для області доставлення сповіщення. ### `cron.failureDestination` @@ -3846,51 +3847,51 @@ Hook-токени в query string відхиляються. } ``` -- Типова ціль для сповіщень про збої Cron для всіх завдань. -- `mode`: `"announce"` або `"webhook"`; типово `"announce"`, коли існує достатньо даних цілі. -- `channel`: перевизначення channel для доставки announce. `"last"` повторно використовує останній відомий channel доставки. -- `to`: явна ціль announce або URL webhook. Обов’язково для режиму webhook. -- `accountId`: необов’язкове перевизначення облікового запису для доставки. +- Типова ціль для сповіщень про помилки cron у всіх завданнях. +- `mode`: `"announce"` або `"webhook"`; типово `"announce"`, коли є достатньо даних цілі. +- `channel`: перевизначення каналу для доставлення announce. `"last"` повторно використовує останній відомий канал доставлення. +- `to`: явна announce-ціль або URL webhook. Обов’язково для режиму webhook. +- `accountId`: необов’язкове перевизначення облікового запису для доставлення. - `delivery.failureDestination` для окремого завдання перевизначає це глобальне типове значення. -- Коли ні глобальну, ні окрему ціль збоїв не задано, завдання, які вже доставляються через `announce`, у разі збою використовують резервно цю основну announce-ціль. +- Коли не задано ні глобальну, ні для окремого завдання ціль помилок, завдання, які вже доставляють через `announce`, у разі помилки повертаються до цієї основної announce-цілі. - `delivery.failureDestination` підтримується лише для завдань `sessionTarget="isolated"`, якщо тільки основний `delivery.mode` завдання не дорівнює `"webhook"`. -Див. [Cron Jobs](/uk/automation/cron-jobs). Ізольовані виконання Cron відстежуються як [background tasks](/uk/automation/tasks). +Див. [Cron Jobs](/uk/automation/cron-jobs). Ізольовані виконання cron відстежуються як [фонові завдання](/uk/automation/tasks). --- -## Змінні шаблонів моделі медіа +## Змінні шаблону моделі медіа -Заповнювачі шаблонів, що розгортаються в `tools.media.models[].args`: +Заповнювачі шаблону, що розгортаються в `tools.media.models[].args`: -| Змінна | Опис | -| ------------------ | ------------------------------------------------- | -| `{{Body}}` | Повний текст вхідного повідомлення | -| `{{RawBody}}` | Сирий текст (без обгорток історії/відправника) | -| `{{BodyStripped}}` | Текст без згадок групи | -| `{{From}}` | Ідентифікатор відправника | -| `{{To}}` | Ідентифікатор цілі | -| `{{MessageSid}}` | ID повідомлення channel | -| `{{SessionId}}` | UUID поточної сесії | -| `{{IsNewSession}}` | `"true"`, коли створено нову сесію | -| `{{MediaUrl}}` | Псевдо-URL вхідного медіа | -| `{{MediaPath}}` | Локальний шлях до медіа | -| `{{MediaType}}` | Тип медіа (image/audio/document/…) | -| `{{Transcript}}` | Audio transcript | -| `{{Prompt}}` | Визначений media prompt для CLI-записів | -| `{{MaxChars}}` | Визначена максимальна кількість символів виводу для CLI-записів | -| `{{ChatType}}` | `"direct"` або `"group"` | -| `{{GroupSubject}}` | Тема групи (best effort) | -| `{{GroupMembers}}` | Попередній перегляд учасників групи (best effort) | -| `{{SenderName}}` | Відображуване ім’я відправника (best effort) | -| `{{SenderE164}}` | Номер телефону відправника (best effort) | -| `{{Provider}}` | Підказка провайдера (whatsapp, telegram, discord тощо) | +| Змінна | Опис | +| ----------------- | ----------------------------------------------- | +| `{{Body}}` | Повне тіло вхідного повідомлення | +| `{{RawBody}}` | Сире тіло (без обгорток історії/відправника) | +| `{{BodyStripped}}`| Тіло без згадувань у групі | +| `{{From}}` | Ідентифікатор відправника | +| `{{To}}` | Ідентифікатор отримувача | +| `{{MessageSid}}` | Id повідомлення каналу | +| `{{SessionId}}` | UUID поточної сесії | +| `{{IsNewSession}}`| `"true"`, коли створено нову сесію | +| `{{MediaUrl}}` | Псевдо-URL вхідного медіа | +| `{{MediaPath}}` | Локальний шлях до медіа | +| `{{MediaType}}` | Тип медіа (image/audio/document/…) | +| `{{Transcript}}` | Аудіостенограма | +| `{{Prompt}}` | Визначений prompt медіа для записів CLI | +| `{{MaxChars}}` | Визначений max output chars для записів CLI | +| `{{ChatType}}` | `"direct"` або `"group"` | +| `{{GroupSubject}}`| Тема групи (best effort) | +| `{{GroupMembers}}`| Попередній перегляд учасників групи (best effort) | +| `{{SenderName}}` | Відображуване ім’я відправника (best effort) | +| `{{SenderE164}}` | Номер телефону відправника (best effort) | +| `{{Provider}}` | Підказка provider (whatsapp, telegram, discord тощо) | --- ## Include конфігурації (`$include`) -Розділяйте конфігурацію на кілька файлів: +Розбивайте конфігурацію на кілька файлів: ```json5 // ~/.openclaw/openclaw.json @@ -3905,15 +3906,15 @@ Hook-токени в query string відхиляються. **Поведінка об’єднання:** -- Один файл: замінює об’єкт-контейнер. -- Масив файлів: глибоко об’єднуються за порядком (пізніші перевизначають раніші). +- Окремий файл: замінює об’єкт-контейнер. +- Масив файлів: глибоко об’єднується по порядку (пізніші значення перевизначають раніші). - Сусідні ключі: об’єднуються після include (перевизначають включені значення). -- Вкладені include: до 10 рівнів глибини. -- Шляхи: визначаються відносно файла, що включає, але мають залишатися в межах каталогу конфігурації верхнього рівня (`dirname` від `openclaw.json`). Абсолютні форми/`../` дозволені лише тоді, коли вони все одно визначаються в межах цієї межі. -- Записи, якими керує OpenClaw і які змінюють лише один розділ верхнього рівня, підкріплений include одного файла, записуються безпосередньо до цього включеного файла. Наприклад, `plugins install` оновлює `plugins: { $include: "./plugins.json5" }` у `plugins.json5` і залишає `openclaw.json` без змін. -- Кореневі include, масиви include та include із сусідніми перевизначеннями є лише для читання для записів, якими керує OpenClaw; такі записи виконують fail closed замість сплощення конфігурації. -- Помилки: зрозумілі повідомлення для відсутніх файлів, помилок розбору та циклічних include. +- Вкладені include: до 10 рівнів углиб. +- Шляхи: визначаються відносно файла, що включає, але мають залишатися всередині каталогу конфігурації верхнього рівня (`dirname` від `openclaw.json`). Абсолютні форми/форми з `../` дозволені лише тоді, коли після визначення вони все одно залишаються в межах цього кордону. +- Записи, якими керує OpenClaw і які змінюють лише один розділ верхнього рівня, підтриманий include одного файла, записуються безпосередньо в цей включений файл. Наприклад, `plugins install` оновлює `plugins: { $include: "./plugins.json5" }` у `plugins.json5` і залишає `openclaw.json` без змін. +- Кореневі include, масиви include та include із сусідніми перевизначеннями є лише для читання для записів, якими керує OpenClaw; такі записи завершуються fail-closed замість сплощення конфігурації. +- Помилки: зрозумілі повідомлення для відсутніх файлів, помилок парсингу та циклічних include. --- -_Пов’язане: [Configuration](/uk/gateway/configuration) · [Configuration Examples](/uk/gateway/configuration-examples) · [Doctor](/uk/gateway/doctor)_ +_Пов’язане: [Конфігурація](/uk/gateway/configuration) · [Приклади конфігурації](/uk/gateway/configuration-examples) · [Doctor](/uk/gateway/doctor)_ diff --git a/docs/uk/plugins/codex-harness.md b/docs/uk/plugins/codex-harness.md index e59f1dd75..4f8a5bbbd 100644 --- a/docs/uk/plugins/codex-harness.md +++ b/docs/uk/plugins/codex-harness.md @@ -1,29 +1,26 @@ --- read_when: - - Ви хочете використовувати комплектний каркас app-server Codex + - Ви хочете використовувати вбудований app-server harness Codex - Вам потрібні посилання на моделі Codex і приклади конфігурації - - Ви хочете вимкнути резервний перехід до Pi для розгортань лише з Codex -summary: Запускайте вбудовані ходи агента OpenClaw через комплектний каркас app-server Codex -title: Каркас Codex + - Ви хочете вимкнути резервний перехід до PI для розгортань лише з Codex +summary: Запускайте вбудовані ходи агента OpenClaw через вбудований app-server harness Codex +title: Codex Harness x-i18n: - generated_at: "2026-04-23T15:25:02Z" + generated_at: "2026-04-23T16:05:47Z" model: gpt-5.4 provider: openai - source_hash: 4537cdc043768f19cd097b4542dfb3447bf3342c7c300832e160b795263c2a52 + source_hash: 07e7fb033cd4025e53d65a719bab7bd704335933bf19bfb10648cede42cdee46 source_path: plugins/codex-harness.md workflow: 15 --- -# Каркас Codex +# Codex Harness -Комплектний Plugin `codex` дає змогу OpenClaw запускати вбудовані ходи агента через app-server Codex замість вбудованого каркаса PI. +Вбудований plugin `codex` дає змогу OpenClaw запускати вбудовані ходи агента через app-server Codex замість вбудованого harness PI. -Використовуйте це, коли хочете, щоб Codex керував низькорівневою сесією агента: виявленням моделей, нативним відновленням потоку, нативним Compaction і виконанням app-server. -OpenClaw і далі керує каналами чату, файлами сесій, вибором моделі, інструментами, -погодженнями, доставкою медіа й видимим дзеркалом транскрипту. +Використовуйте це, коли хочете, щоб Codex керував низькорівневою сесією агента: виявленням моделей, нативним відновленням потоку, нативним Compaction і виконанням app-server. OpenClaw, як і раніше, керує каналами чату, файлами сесій, вибором моделей, інструментами, погодженнями, доставкою медіа та видимим дзеркалом транскрипту. -Нативні ходи Codex також враховують спільні хуки Plugin, тому шими промптів, -автоматизація з урахуванням Compaction, middleware інструментів і спостерігачі життєвого циклу залишаються узгодженими з каркасом PI: +Нативні ходи Codex також дотримуються спільних хуків plugin, тому shim-и промптів, автоматизація з урахуванням Compaction, middleware інструментів і спостерігачі життєвого циклу залишаються узгодженими з harness PI: - `before_prompt_build` - `before_compaction`, `after_compaction` @@ -32,42 +29,42 @@ OpenClaw і далі керує каналами чату, файлами сес - `before_message_write` - `agent_end` -Комплектні plugins також можуть реєструвати фабрику розширення app-server Codex, щоб додавати асинхронне middleware `tool_result`. +Вбудовані plugins також можуть реєструвати фабрику розширення app-server Codex, щоб додавати асинхронне middleware `tool_result`. -Каркас вимкнений за замовчуванням. Він вибирається лише тоді, коли Plugin `codex` -увімкнено й визначена модель є моделлю `codex/*`, або коли ви явно примусово задаєте `embeddedHarness.runtime: "codex"` чи `OPENCLAW_AGENT_RUNTIME=codex`. -Якщо ви ніколи не налаштовуєте `codex/*`, наявні запуски PI, OpenAI, Anthropic, Gemini, local -і custom-provider зберігають свою поточну поведінку. +Harness вимкнений за замовчуванням. Він вибирається лише тоді, коли plugin `codex` увімкнений і для розв’язаної моделі використовується модель `codex/*`, або коли ви явно примусово задаєте `embeddedHarness.runtime: "codex"` чи `OPENCLAW_AGENT_RUNTIME=codex`. +Якщо ви ніколи не налаштовуєте `codex/*`, наявні запуски PI, OpenAI, Anthropic, Gemini, local і custom-provider зберігають свою поточну поведінку. ## Виберіть правильний префікс моделі -OpenClaw має окремі маршрути для доступу у формі OpenAI і Codex: +OpenClaw має окремі маршрути для доступу у стилі OpenAI і Codex: -| Посилання на модель | Шлях runtime | Використовуйте, коли | -| --------------------- | ------------------------------------------- | ------------------------------------------------------------------------ | -| `openai/gpt-5.4` | Провайдер OpenAI через інфраструктуру OpenClaw/PI | Вам потрібен прямий доступ до API платформи OpenAI з `OPENAI_API_KEY`. | -| `openai-codex/gpt-5.4` | Провайдер OAuth OpenAI Codex через PI | Вам потрібен OAuth ChatGPT/Codex без каркаса app-server Codex. | -| `codex/gpt-5.4` | Комплектний провайдер Codex плюс каркас Codex | Вам потрібне нативне виконання app-server Codex для вбудованого ходу агента. | +| Посилання на модель | Шлях runtime | Використовуйте, коли | +| ---------------------- | -------------------------------------------- | ------------------------------------------------------------------------ | +| `openai/gpt-5.4` | Провайдер OpenAI через plumbing OpenClaw/PI | Вам потрібен прямий доступ до API платформи OpenAI через `OPENAI_API_KEY`. | +| `openai-codex/gpt-5.4` | Провайдер OpenAI Codex OAuth через PI | Вам потрібен ChatGPT/Codex OAuth без harness app-server Codex. | +| `codex/gpt-5.4` | Вбудований провайдер Codex плюс harness Codex | Вам потрібне нативне виконання через app-server Codex для вбудованого ходу агента. | -Каркас Codex обробляє лише посилання на моделі `codex/*`. Наявні посилання `openai/*`, -`openai-codex/*`, Anthropic, Gemini, xAI, local і custom provider зберігають -свої звичайні шляхи. +Harness Codex обробляє лише посилання на моделі `codex/*`. Наявні посилання на провайдерів `openai/*`, `openai-codex/*`, Anthropic, Gemini, xAI, local і custom provider зберігають свої звичайні шляхи. + +Вибір harness не є механізмом керування живою сесією. Коли виконується вбудований хід, OpenClaw записує ідентифікатор вибраного harness у цю сесію і продовжує використовувати його для наступних ходів у межах того самого ідентифікатора сесії. Змінюйте конфігурацію `embeddedHarness` або `OPENCLAW_AGENT_RUNTIME`, якщо хочете, щоб майбутні сесії використовували інший harness; використовуйте `/new` або `/reset`, щоб почати нову сесію перед перемиканням наявної розмови між PI і Codex. Це дає змогу уникнути повторного програвання одного транскрипту через дві несумісні нативні системи сесій. + +Застарілі сесії, створені до появи прив’язок harness, вважаються прив’язаними до PI, щойно в них з’являється історія транскрипту. Використовуйте `/new` або `/reset`, щоб перевести таку розмову на Codex після зміни конфігурації. + +`/status` показує ефективний не-PI harness поруч із `Fast`, наприклад `Fast · codex`. Стандартний harness PI не показується. ## Вимоги -- OpenClaw із доступним комплектним Plugin `codex`. -- app-server Codex версії `0.118.0` або новішої. -- Автентифікація Codex, доступна для процесу app-server. +- OpenClaw із доступним вбудованим plugin `codex`. +- Codex app-server версії `0.118.0` або новішої. +- Доступна автентифікація Codex для процесу app-server. -Plugin блокує старіші або неверсіоновані handshake app-server. Це утримує -OpenClaw у межах поверхні протоколу, з якою його було протестовано. +Plugin блокує старіші або безверсійні handshake app-server. Це гарантує, що OpenClaw працює лише з тією поверхнею протоколу, з якою його було протестовано. -Для live і Docker smoke-тестів автентифікація зазвичай надходить із `OPENAI_API_KEY`, а також, за потреби, з файлів CLI Codex, таких як `~/.codex/auth.json` і -`~/.codex/config.toml`. Використовуйте ті самі автентифікаційні дані, які використовує ваш локальний app-server Codex. +Для live- і Docker smoke-тестів автентифікація зазвичай надходить із `OPENAI_API_KEY`, а також за потреби з файлів Codex CLI, таких як `~/.codex/auth.json` і `~/.codex/config.toml`. Використовуйте ті самі автентифікаційні матеріали, які використовує ваш локальний app-server Codex. ## Мінімальна конфігурація -Використовуйте `codex/gpt-5.4`, увімкніть комплектний Plugin і примусово задайте каркас `codex`: +Використовуйте `codex/gpt-5.4`, увімкніть вбудований plugin і примусово задайте harness `codex`: ```json5 { @@ -105,9 +102,7 @@ OpenClaw у межах поверхні протоколу, з якою його } ``` -Установлення `agents.defaults.model` або моделі агента в `codex/` також -автоматично вмикає комплектний Plugin `codex`. Явний запис Plugin усе ще -корисний у спільних конфігураціях, бо він чітко показує намір розгортання. +Встановлення `agents.defaults.model` або моделі агента в `codex/` також автоматично вмикає вбудований plugin `codex`. Явний запис plugin усе одно корисний у спільних конфігураціях, оскільки він робить намір розгортання очевидним. ## Додайте Codex без заміни інших моделей @@ -143,16 +138,16 @@ OpenClaw у межах поверхні протоколу, з якою його } ``` -У такій конфігурації: +За такої конфігурації: -- `/model codex` або `/model codex/gpt-5.4` використовує каркас app-server Codex. +- `/model codex` або `/model codex/gpt-5.4` використовує harness app-server Codex. - `/model gpt` або `/model openai/gpt-5.4` використовує шлях провайдера OpenAI. - `/model opus` використовує шлях провайдера Anthropic. -- Якщо вибрано не-Codex модель, PI залишається каркасом сумісності. +- Якщо вибрано не-Codex модель, PI залишається harness сумісності. ## Розгортання лише з Codex -Вимкніть резервний перехід до PI, якщо вам потрібно довести, що кожен вбудований хід агента використовує каркас Codex: +Вимкніть резервний перехід до PI, якщо вам потрібно довести, що кожен вбудований хід агента використовує harness Codex: ```json5 { @@ -176,14 +171,11 @@ OPENCLAW_AGENT_HARNESS_FALLBACK=none \ openclaw gateway run ``` -Коли fallback вимкнено, OpenClaw завершується з помилкою на ранньому етапі, якщо Plugin Codex вимкнений, -запитана модель не є посиланням `codex/*`, app-server надто старий або -app-server не може запуститися. +Якщо резервний перехід вимкнено, OpenClaw завершується з помилкою на ранньому етапі, якщо plugin Codex вимкнений, запитувана модель не є посиланням `codex/*`, app-server надто старий або app-server не вдається запустити. ## Codex для окремого агента -Ви можете зробити одного агента лише Codex, тоді як агент за замовчуванням зберігатиме звичайний -автовибір: +Ви можете зробити один агент таким, що працює лише з Codex, тоді як агент за замовчуванням зберігатиме звичайний автоматичний вибір: ```json5 { @@ -214,14 +206,11 @@ app-server не може запуститися. } ``` -Використовуйте звичайні команди сесії, щоб перемикати агентів і моделі. `/new` створює нову -сесію OpenClaw, а каркас Codex створює або відновлює свій sidecar-потік app-server -за потреби. `/reset` очищає прив’язку сесії OpenClaw для цього потоку. +Використовуйте звичайні команди сесій, щоб перемикати агентів і моделі. `/new` створює нову сесію OpenClaw, а harness Codex створює або відновлює свій sidecar app-server thread за потреби. `/reset` очищує прив’язку сесії OpenClaw для цього потоку й дозволяє наступному ходу знову визначити harness із поточної конфігурації. ## Виявлення моделей -За замовчуванням Plugin Codex запитує в app-server список доступних моделей. Якщо -виявлення завершується помилкою або перевищує час очікування, він використовує комплектний резервний каталог: +За замовчуванням plugin Codex запитує app-server про доступні моделі. Якщо виявлення не вдається або завершується за тайм-аутом, використовується вбудований резервний каталог: - `codex/gpt-5.4` - `codex/gpt-5.4-mini` @@ -247,8 +236,7 @@ app-server не може запуститися. } ``` -Вимкніть виявлення, якщо хочете, щоб під час запуску не виконувалася перевірка Codex і використовувався лише -резервний каталог: +Вимкніть виявлення, якщо хочете, щоб під час запуску не виконувалось опитування Codex і використовувався лише резервний каталог: ```json5 { @@ -267,21 +255,19 @@ app-server не може запуститися. } ``` -## Підключення app-server і політика +## Підключення до app-server і політика -За замовчуванням Plugin запускає Codex локально так: +За замовчуванням plugin запускає Codex локально так: ```bash codex app-server --listen stdio:// ``` -За замовчуванням OpenClaw запускає локальні сесії каркаса Codex у режимі YOLO: +За замовчуванням OpenClaw запускає локальні сесії harness Codex у режимі YOLO: `approvalPolicy: "never"`, `approvalsReviewer: "user"` і -`sandbox: "danger-full-access"`. Це поза довіри для локального оператора, який використовується -для автономних Heartbeat: Codex може використовувати shell і мережеві інструменти без -зупинки на нативних запитах на погодження, коли поруч немає нікого, хто міг би відповісти. +`sandbox: "danger-full-access"`. Це позиція довіреного локального оператора, яка використовується для автономних Heartbeat: Codex може використовувати shell і мережеві інструменти без зупинки на нативних запитах на погодження, коли нікому на них відповідати. -Щоб увімкнути погодження Codex, перевірювані Guardian, задайте `appServer.mode: +Щоб увімкнути погодження Codex із перевіркою Guardian, задайте `appServer.mode: "guardian"`: ```json5 @@ -302,11 +288,11 @@ codex app-server --listen stdio:// } ``` -Guardian — це нативний рецензент погоджень Codex. Коли Codex просить вийти із sandbox, записати поза межами workspace або додати дозволи, як-от доступ до мережі, Codex спрямовує цей запит на погодження до субагента-рецензента замість запиту людині. Рецензент застосовує модель ризиків Codex і схвалює або відхиляє конкретний запит. Використовуйте Guardian, якщо вам потрібно більше захисних обмежень, ніж у режимі YOLO, але водночас потрібно, щоб агенти без нагляду могли просуватися далі. +Guardian — це нативний рецензент погоджень Codex. Коли Codex просить вийти із sandbox, записати дані поза межами workspace або додати дозволи, наприклад доступ до мережі, Codex спрямовує цей запит на погодження до субагента-рецензента замість запиту людині. Рецензент застосовує рамку оцінки ризиків Codex і схвалює або відхиляє конкретний запит. Використовуйте Guardian, якщо вам потрібні суворіші обмеження, ніж у режимі YOLO, але при цьому агенти мають продовжувати роботу без нагляду. -Пресет `guardian` розгортається до `approvalPolicy: "on-request"`, `approvalsReviewer: "guardian_subagent"` і `sandbox: "workspace-write"`. Окремі поля політики все одно мають пріоритет над `mode`, тож у складніших розгортаннях можна поєднувати пресет із явними виборами. +Пресет `guardian` розгортається у `approvalPolicy: "on-request"`, `approvalsReviewer: "guardian_subagent"` і `sandbox: "workspace-write"`. Окремі поля політики, як і раніше, мають пріоритет над `mode`, тому в розширених розгортаннях можна поєднувати цей пресет з явними налаштуваннями. -Для app-server, який уже запущено, використовуйте транспорт WebSocket: +Для вже запущеного app-server використовуйте транспорт WebSocket: ```json5 { @@ -330,23 +316,22 @@ Guardian — це нативний рецензент погоджень Codex. Підтримувані поля `appServer`: -| Поле | Значення за замовчуванням | Значення | -| ------------------- | ----------------------------------------- | --------------------------------------------------------------------------------------------------------- | -| `transport` | `"stdio"` | `"stdio"` запускає Codex; `"websocket"` підключається до `url`. | -| `command` | `"codex"` | Виконуваний файл для транспорту stdio. | -| `args` | `["app-server", "--listen", "stdio://"]` | Аргументи для транспорту stdio. | -| `url` | не задано | URL app-server WebSocket. | -| `authToken` | не задано | Bearer-токен для транспорту WebSocket. | -| `headers` | `{}` | Додаткові заголовки WebSocket. | -| `requestTimeoutMs` | `60000` | Тайм-аут для викликів control plane app-server. | -| `mode` | `"yolo"` | Пресет для виконання в режимі YOLO або з погодженнями Guardian. | -| `approvalPolicy` | `"never"` | Нативна політика погодження Codex, що передається під час старту/відновлення потоку/ходу. | -| `sandbox` | `"danger-full-access"` | Нативний режим sandbox Codex, що передається під час старту/відновлення потоку. | -| `approvalsReviewer` | `"user"` | Використовуйте `"guardian_subagent"`, щоб дозволити Guardian Codex перевіряти запити. | -| `serviceTier` | не задано | Необов’язковий рівень сервісу app-server Codex: `"fast"`, `"flex"` або `null`. Некоректні застарілі значення ігноруються. | +| Поле | Типове значення | Значення | +| ------------------- | ---------------------------------------- | --------------------------------------------------------------------------------------------------------- | +| `transport` | `"stdio"` | `"stdio"` запускає Codex; `"websocket"` підключається до `url`. | +| `command` | `"codex"` | Виконуваний файл для транспорту stdio. | +| `args` | `["app-server", "--listen", "stdio://"]` | Аргументи для транспорту stdio. | +| `url` | не задано | URL app-server WebSocket. | +| `authToken` | не задано | Bearer-токен для транспорту WebSocket. | +| `headers` | `{}` | Додаткові заголовки WebSocket. | +| `requestTimeoutMs` | `60000` | Тайм-аут для викликів control-plane app-server. | +| `mode` | `"yolo"` | Пресет для виконання YOLO або виконання з перевіркою Guardian. | +| `approvalPolicy` | `"never"` | Нативна політика погоджень Codex, що надсилається під час запуску/відновлення потоку та ходу. | +| `sandbox` | `"danger-full-access"` | Нативний режим sandbox Codex, що надсилається під час запуску/відновлення потоку. | +| `approvalsReviewer` | `"user"` | Використовуйте `"guardian_subagent"`, щоб перевірку запитів виконував Codex Guardian. | +| `serviceTier` | не задано | Необов’язковий рівень сервісу app-server Codex: `"fast"`, `"flex"` або `null`. Некоректні застарілі значення ігноруються. | -Старіші змінні середовища все ще працюють як fallback для локального тестування, коли -відповідне поле конфігурації не задано: +Старіші змінні середовища, як і раніше, працюють як резервні варіанти для локального тестування, якщо відповідне поле конфігурації не задано: - `OPENCLAW_CODEX_APP_SERVER_BIN` - `OPENCLAW_CODEX_APP_SERVER_ARGS` @@ -354,14 +339,13 @@ Guardian — це нативний рецензент погоджень Codex. - `OPENCLAW_CODEX_APP_SERVER_APPROVAL_POLICY` - `OPENCLAW_CODEX_APP_SERVER_SANDBOX` -`OPENCLAW_CODEX_APP_SERVER_GUARDIAN=1` вилучено. Натомість використовуйте +`OPENCLAW_CODEX_APP_SERVER_GUARDIAN=1` було вилучено. Натомість використовуйте `plugins.entries.codex.config.appServer.mode: "guardian"` або -`OPENCLAW_CODEX_APP_SERVER_MODE=guardian` для разового локального тестування. Для -відтворюваних розгортань бажано використовувати конфігурацію, оскільки вона зберігає поведінку Plugin в тому самому перевіреному файлі, що й решта налаштування каркаса Codex. +`OPENCLAW_CODEX_APP_SERVER_MODE=guardian` для одноразового локального тестування. Конфігурація є кращим варіантом для відтворюваних розгортань, оскільки вона зберігає поведінку plugin у тому самому перевіреному файлі, що й решта налаштувань harness Codex. ## Поширені рецепти -Локальний Codex із транспортом stdio за замовчуванням: +Локальний Codex із типовим транспортом stdio: ```json5 { @@ -375,7 +359,7 @@ Guardian — це нативний рецензент погоджень Codex. } ``` -Перевірка каркаса лише з Codex, з вимкненим fallback до PI: +Перевірка harness лише з Codex із вимкненим резервним переходом до PI: ```json5 { @@ -392,7 +376,7 @@ Guardian — це нативний рецензент погоджень Codex. } ``` -Погодження Codex, перевірювані Guardian: +Погодження Codex із перевіркою Guardian: ```json5 { @@ -414,7 +398,7 @@ Guardian — це нативний рецензент погоджень Codex. } ``` -Віддалений app-server з явними заголовками: +Віддалений app-server із явними заголовками: ```json5 { @@ -437,61 +421,61 @@ Guardian — це нативний рецензент погоджень Codex. } ``` -Перемикання моделей і далі контролюється OpenClaw. Коли сесію OpenClaw прив’язано -до наявного потоку Codex, наступний хід знову надсилає до -app-server поточну вибрану модель `codex/*`, провайдера, політику погодження, sandbox і рівень сервісу. -Перемикання з `codex/gpt-5.4` на `codex/gpt-5.2` зберігає -прив’язку до потоку, але просить Codex продовжити з нововибраною моделлю. +Перемикання моделей і надалі контролюється OpenClaw. Коли сесію OpenClaw приєднано +до наявного потоку Codex, під час наступного ходу до app-server знову надсилаються +поточна вибрана модель `codex/*`, провайдер, політика погоджень, sandbox і service tier. +Перемикання з `codex/gpt-5.4` на `codex/gpt-5.2` зберігає прив’язку до потоку, але +просить Codex продовжити роботу з новою вибраною моделлю. ## Команда Codex -Комплектний Plugin реєструє `/codex` як авторизовану slash-команду. Вона є -загальною і працює в будь-якому каналі, що підтримує текстові команди OpenClaw. +Вбудований plugin реєструє `/codex` як авторизовану slash-команду. Вона є +універсальною і працює в будь-якому каналі, що підтримує текстові команди OpenClaw. Поширені форми: -- `/codex status` показує стан підключення до live app-server, моделі, обліковий запис, ліміти швидкості, сервери MCP і skills. -- `/codex models` показує список моделей live app-server Codex. -- `/codex threads [filter]` показує список нещодавніх потоків Codex. -- `/codex resume ` прив’язує поточну сесію OpenClaw до наявного потоку Codex. -- `/codex compact` просить app-server Codex виконати Compaction для прив’язаного потоку. -- `/codex review` запускає нативну перевірку Codex для прив’язаного потоку. +- `/codex status` показує актуальне підключення до app-server, моделі, обліковий запис, ліміти швидкості, сервери MCP і Skills. +- `/codex models` виводить список актуальних моделей app-server Codex. +- `/codex threads [filter]` виводить список недавніх потоків Codex. +- `/codex resume ` приєднує поточну сесію OpenClaw до наявного потоку Codex. +- `/codex compact` просить app-server Codex виконати Compaction для приєднаного потоку. +- `/codex review` запускає нативну перевірку Codex для приєднаного потоку. - `/codex account` показує стан облікового запису та лімітів швидкості. -- `/codex mcp` показує стан серверів MCP app-server Codex. -- `/codex skills` показує skills app-server Codex. +- `/codex mcp` виводить стан серверів MCP app-server Codex. +- `/codex skills` виводить список Skills app-server Codex. -`/codex resume` записує той самий sidecar-файл прив’язки, який каркас використовує для -звичайних ходів. У наступному повідомленні OpenClaw відновлює цей потік Codex, передає -поточну вибрану в OpenClaw модель `codex/*` до app-server і зберігає -увімкнену розширену історію. +`/codex resume` записує той самий sidecar-файл прив’язки, який harness використовує для +звичайних ходів. Під час наступного повідомлення OpenClaw відновлює цей потік Codex, передає +до app-server поточну вибрану модель OpenClaw `codex/*` і зберігає увімкнену розширену +історію. -Поверхня команд потребує app-server Codex версії `0.118.0` або новішої. Окремі +Поверхня команд вимагає Codex app-server `0.118.0` або новішої версії. Окремі методи керування позначаються як `unsupported by this Codex app-server`, якщо -майбутній або кастомний app-server не надає цей метод JSON-RPC. +майбутній або кастомний app-server не надає такого JSON-RPC-методу. ## Інструменти, медіа та Compaction -Каркас Codex змінює лише низькорівневий виконавець вбудованого агента. +Harness Codex змінює лише низькорівневий виконавець вбудованого агента. -OpenClaw і далі формує список інструментів і отримує динамічні результати інструментів від -каркаса. Текст, зображення, відео, музика, TTS, погодження та вихід інструментів обміну повідомленнями +OpenClaw, як і раніше, формує список інструментів і отримує динамічні результати інструментів від +harness. Текст, зображення, відео, музика, TTS, погодження та вивід інструментів обміну повідомленнями і далі проходять через звичайний шлях доставки OpenClaw. -Запити на погодження інструментів MCP Codex спрямовуються через потік погоджень Plugin OpenClaw, +Запити на погодження інструментів Codex MCP маршрутизуються через потік погоджень plugin OpenClaw, коли Codex позначає `_meta.codex_approval_kind` як -`"mcp_tool_call"`; інші запити на elicitation і вільне введення все ще завершуються -із закритою відмовою. +`"mcp_tool_call"`; інші запити на уточнення та запити довільного введення, як і раніше, жорстко відхиляються. -Коли вибрана модель використовує каркас Codex, нативний Compaction потоку +Коли вибрана модель використовує harness Codex, нативний Compaction потоку делегується app-server Codex. OpenClaw зберігає дзеркало транскрипту для історії каналу, -пошуку, `/new`, `/reset` і майбутнього перемикання моделі або каркаса. Це -дзеркало містить запит користувача, фінальний текст асистента та спрощені записи міркувань або плану Codex, коли app-server їх надсилає. Наразі OpenClaw лише -записує нативні сигнали початку й завершення Compaction. Він поки що не показує -людинозрозумілий підсумок Compaction або аудитний список того, які записи Codex -зберіг після Compaction. +пошуку, `/new`, `/reset` і майбутнього перемикання моделей або harness. Це +дзеркало містить запит користувача, фінальний текст асистента та полегшені записи +міркувань або плану Codex, коли app-server їх надсилає. Наразі OpenClaw лише +записує сигнали початку та завершення нативного Compaction. Він поки що не +показує придатний для читання людиною підсумок Compaction або аудитний список того, +які саме записи Codex зберіг після Compaction. Генерація медіа не потребує PI. Генерація зображень, відео, музики, PDF, TTS і -розуміння медіа й далі використовують відповідні налаштування провайдера/моделі, як-от +розуміння медіа, як і раніше, використовує відповідні налаштування провайдера/моделі, такі як `agents.defaults.imageGenerationModel`, `videoGenerationModel`, `pdfModel` і `messages.tts`. @@ -500,26 +484,28 @@ OpenClaw і далі формує список інструментів і от **Codex не з’являється в `/model`:** увімкніть `plugins.entries.codex.enabled`, задайте посилання на модель `codex/*` або перевірте, чи `plugins.allow` не виключає `codex`. -**OpenClaw використовує PI замість Codex:** якщо жоден каркас Codex не обробляє цей запуск, +**OpenClaw використовує PI замість Codex:** якщо жоден harness Codex не обробляє цей запуск, OpenClaw може використовувати PI як backend сумісності. Задайте `embeddedHarness.runtime: "codex"`, щоб примусово вибрати Codex під час тестування, або -`embeddedHarness.fallback: "none"`, щоб завершуватися з помилкою, коли жоден каркас Plugin не підходить. Щойно буде вибрано app-server Codex, його збої відображатимуться безпосередньо без додаткової конфігурації fallback. +`embeddedHarness.fallback: "none"`, щоб отримувати помилку, коли жоден harness plugin не підходить. +Щойно app-server Codex буде вибрано, його помилки передаватимуться безпосередньо без додаткової +конфігурації резервного переходу. **app-server відхиляється:** оновіть Codex, щоб handshake app-server повідомляв версію `0.118.0` або новішу. -**Виявлення моделей повільне:** зменште `plugins.entries.codex.config.discovery.timeoutMs` +**Виявлення моделей працює повільно:** зменште `plugins.entries.codex.config.discovery.timeoutMs` або вимкніть виявлення. -**Транспорт WebSocket одразу завершується помилкою:** перевірте `appServer.url`, `authToken` -і те, що віддалений app-server використовує ту саму версію протоколу app-server Codex. +**Транспорт WebSocket одразу завершується з помилкою:** перевірте `appServer.url`, `authToken` +і те, що віддалений app-server підтримує ту саму версію протоколу app-server Codex. -**Модель не-Codex використовує PI:** це очікувано. Каркас Codex обробляє лише +**Не-Codex модель використовує PI:** це очікувана поведінка. Harness Codex обробляє лише посилання на моделі `codex/*`. -## Пов’язані матеріали +## Пов’язане -- [Plugins каркаса агента](/uk/plugins/sdk-agent-harness) +- [Plugins harness агента](/uk/plugins/sdk-agent-harness) - [Провайдери моделей](/uk/concepts/model-providers) -- [Довідник конфігурації](/uk/gateway/configuration-reference) +- [Довідник із конфігурації](/uk/gateway/configuration-reference) - [Тестування](/uk/help/testing#live-codex-app-server-harness-smoke) diff --git a/docs/uk/plugins/sdk-agent-harness.md b/docs/uk/plugins/sdk-agent-harness.md index 6e0cfc3a3..af1bbab0d 100644 --- a/docs/uk/plugins/sdk-agent-harness.md +++ b/docs/uk/plugins/sdk-agent-harness.md @@ -1,53 +1,53 @@ --- read_when: - - Ви змінюєте вбудоване середовище виконання агента або реєстр обв’язок агента - - Ви реєструєте обв’язку агента з bundled або trusted plugin + - Ви змінюєте вбудоване середовище виконання агента або реєстр harness агента + - Ви реєструєте harness агента з bundled або trusted plugin - Вам потрібно зрозуміти, як plugin Codex пов’язаний із постачальниками моделей sidebarTitle: Agent Harness -summary: Експериментальна поверхня SDK для plugins, які замінюють низькорівневий вбудований виконавець агента -title: Plugins обв’язки агента +summary: Експериментальна поверхня SDK для plugin, що замінюють низькорівневий вбудований виконавець агента +title: Plugin Harness агента x-i18n: - generated_at: "2026-04-22T23:30:48Z" + generated_at: "2026-04-23T16:05:48Z" model: gpt-5.4 provider: openai - source_hash: efaecca18210af0e9e641bd888c1edb55e08e96299158ff021d6c2dd0218ec25 + source_hash: ec858acedaae8670c730022f8cc700499ac3b95d3d4144584e01051b224fee64 source_path: plugins/sdk-agent-harness.md workflow: 15 --- -# Plugins обв’язки агента +# Plugin Harness агента -**Обв’язка агента** — це низькорівневий виконавець одного підготовленого ходу агента OpenClaw. Це не постачальник моделей, не канал і не реєстр інструментів. +**Harness агента** — це низькорівневий виконавець для одного підготовленого ходу агента OpenClaw. Це не постачальник моделей, не канал і не реєстр інструментів. -Використовуйте цю поверхню лише для bundled або trusted native plugins. Контракт усе ще експериментальний, тому що типи параметрів навмисно віддзеркалюють поточний вбудований виконавець. +Використовуйте цю поверхню лише для bundled або trusted native plugin. Контракт усе ще експериментальний, оскільки типи параметрів навмисно віддзеркалюють поточний вбудований runner. -## Коли використовувати обв’язку +## Коли використовувати harness -Реєструйте обв’язку агента, коли сімейство моделей має власне native session runtime і звичайний транспорт постачальника OpenClaw є хибною абстракцією. +Реєструйте harness агента, коли сімейство моделей має власне native session runtime і звичайний транспорт постачальника OpenClaw є хибною абстракцією. Приклади: -- native server кодувального агента, який керує потоками та Compaction -- локальний CLI або демон, який має потоково передавати native plan/reasoning/tool events -- середовище виконання моделі, якому потрібен власний resume id на додачу до транскрипту сесії OpenClaw +- native coding-agent server, який керує threads і Compaction +- локальний CLI або daemon, який має транслювати native plan/reasoning/tool events +- runtime моделі, якому потрібен власний resume id на додачу до транскрипту сесії OpenClaw -**Не** реєструйте обв’язку лише для додавання нового API LLM. Для звичайних HTTP або WebSocket API моделей створіть [provider plugin](/uk/plugins/sdk-provider-plugins). +**Не** реєструйте harness лише для додавання нового API LLM. Для звичайних HTTP- або WebSocket- API моделей створіть [plugin постачальника](/uk/plugins/sdk-provider-plugins). ## Чим усе ще керує ядро -До того, як обв’язка буде вибрана, OpenClaw уже визначив: +Перш ніж буде вибрано harness, OpenClaw уже визначив: - постачальника й модель -- стан автентифікації середовища виконання -- рівень мислення та бюджет контексту +- стан auth runtime +- рівень thinking і бюджет контексту - файл транскрипту/сесії OpenClaw - робочий простір, sandbox і політику інструментів -- зворотні виклики відповіді каналу та потокові зворотні виклики -- політику резервної моделі та live-перемикання моделей +- callback-и відповіді каналу й callback-и streaming +- політику fallback моделі та live-перемикання моделей -Такий поділ є навмисним. Обв’язка виконує підготовлену спробу; вона не вибирає постачальників, не замінює доставку через канал і не перемикає моделі непомітно. +Цей поділ навмисний. Harness виконує підготовлену спробу; він не вибирає постачальників, не замінює доставку каналу й не перемикає моделі непомітно. -## Зареєструвати обв’язку +## Зареєструвати harness **Імпорт:** `openclaw/plugin-sdk/agent-harness` @@ -85,54 +85,57 @@ export default definePluginEntry({ ## Політика вибору -OpenClaw вибирає обв’язку після визначення постачальника/моделі: +OpenClaw вибирає harness після визначення постачальника/моделі: -1. `OPENCLAW_AGENT_RUNTIME=` примусово вибирає зареєстровану обв’язку з цим id. -2. `OPENCLAW_AGENT_RUNTIME=pi` примусово вибирає вбудовану обв’язку PI. -3. `OPENCLAW_AGENT_RUNTIME=auto` запитує в зареєстрованих обв’язок, чи підтримують вони визначеного постачальника/модель. -4. Якщо жодна зареєстрована обв’язка не підходить, OpenClaw використовує PI, якщо резервний перехід на PI не вимкнено. +1. Перемагає записаний id harness наявної сесії, щоб зміни config/env не перемикали цей транскрипт на інше runtime на льоту. +2. `OPENCLAW_AGENT_RUNTIME=` примусово вибирає зареєстрований harness із цим id для сесій, які ще не закріплено. +3. `OPENCLAW_AGENT_RUNTIME=pi` примусово вибирає вбудований harness PI. +4. `OPENCLAW_AGENT_RUNTIME=auto` запитує в зареєстрованих harness, чи підтримують вони визначеного постачальника/модель. +5. Якщо жоден зареєстрований harness не підходить, OpenClaw використовує PI, якщо fallback PI не вимкнено. -Збої plugin-обв’язки відображаються як збої виконання. У режимі `auto` резервний перехід на PI використовується лише тоді, коли жодна зареєстрована plugin-обв’язка не підтримує визначеного постачальника/модель. Щойно plugin-обв’язка взяла виконання на себе, OpenClaw не повторює той самий хід через PI, тому що це може змінити семантику автентифікації/середовища виконання або продублювати побічні ефекти. +Збої plugin harness відображаються як збої запуску. У режимі `auto` fallback до PI використовується лише тоді, коли жоден зареєстрований plugin harness не підтримує визначеного постачальника/модель. Щойно plugin harness уже взяв запуск на себе, OpenClaw не повторює той самий хід через PI, оскільки це може змінити семантику auth/runtime або дублювати побічні ефекти. -Bundled plugin Codex реєструє `codex` як id своєї обв’язки. Ядро розглядає це як звичайний id plugin-обв’язки; специфічні для Codex псевдоніми мають належати plugin або конфігурації оператора, а не спільному селектору середовища виконання. +Вибраний id harness зберігається разом з id сесії після вбудованого запуску. Legacy-сесії, створені до закріплення harness, вважаються закріпленими за PI, щойно в них з’являється історія транскрипту. Використовуйте нову/скинуту сесію під час перемикання між PI і native plugin harness. `/status` показує id нетипових harness, наприклад `codex`, поруч із `Fast`; PI залишається прихованим, оскільки це типовий шлях сумісності. -## Поєднання постачальника й обв’язки +Bundled plugin Codex реєструє `codex` як свій id harness. Ядро розглядає це як звичайний id plugin harness; специфічні для Codex псевдоніми мають належати plugin або config оператора, а не спільному селектору runtime. -Більшість обв’язок також мають реєструвати постачальника. Постачальник робить посилання на моделі, стан автентифікації, метадані моделей і вибір `/model` видимими для решти OpenClaw. Потім обв’язка заявляє про підтримку цього постачальника в `supports(...)`. +## Поєднання постачальника і harness + +Більшість harness також мають реєструвати постачальника. Постачальник робить refs моделей, статус auth, метадані моделей і вибір `/model` видимими для решти OpenClaw. Потім harness заявляє підтримку цього постачальника в `supports(...)`. Bundled plugin Codex дотримується цього шаблону: - id постачальника: `codex` -- посилання користувача на моделі: `codex/gpt-5.4`, `codex/gpt-5.2` або інша модель, повернена Codex app server -- id обв’язки: `codex` -- автентифікація: синтетична доступність постачальника, тому що обв’язка Codex керує native login/session Codex -- запит до app-server: OpenClaw надсилає в Codex bare model id і дозволяє обв’язці працювати з native app-server protocol +- refs моделей для користувача: `codex/gpt-5.4`, `codex/gpt-5.2` або інша модель, повернута app server Codex +- id harness: `codex` +- auth: synthetic availability постачальника, оскільки harness Codex керує native login/session Codex +- запит до app-server: OpenClaw надсилає Codex базовий id моделі й дозволяє harness взаємодіяти з native протоколом app-server -Plugin Codex є адитивним. Звичайні посилання `openai/gpt-*` лишаються посиланнями постачальника OpenAI й далі використовують звичайний шлях постачальника OpenClaw. Вибирайте `codex/gpt-*`, коли вам потрібні керована Codex автентифікація, виявлення моделей Codex, native threads і виконання через Codex app-server. `/model` може перемикатися між моделями Codex, які повертає Codex app server, без потреби в облікових даних постачальника OpenAI. +Plugin Codex є додатковим. Звичайні refs `openai/gpt-*` залишаються refs постачальника OpenAI і далі використовують звичайний шлях постачальника OpenClaw. Вибирайте `codex/gpt-*`, якщо вам потрібні auth під керуванням Codex, виявлення моделей Codex, native threads і виконання через app-server Codex. `/model` може перемикатися між моделями Codex, які повертає app server Codex, без потреби в облікових даних постачальника OpenAI. -Щоб дізнатися про налаштування для операторів, приклади префіксів моделей і конфігурації лише для Codex, див. [Codex Harness](/uk/plugins/codex-harness). +Налаштування для операторів, приклади префіксів моделей і конфігурації лише для Codex дивіться в [Codex Harness](/uk/plugins/codex-harness). -OpenClaw вимагає Codex app-server `0.118.0` або новішої версії. Plugin Codex перевіряє initialize handshake app-server і блокує старіші сервери або сервери без версії, щоб OpenClaw працював лише з тією поверхнею протоколу, з якою його було протестовано. +OpenClaw вимагає Codex app-server `0.118.0` або новішої версії. Plugin Codex перевіряє initialize handshake app-server і блокує старіші або неверсіоновані server, щоб OpenClaw працював лише з тією поверхнею протоколу, з якою його було протестовано. -### Middleware tool-result Codex app-server +### Middleware результатів інструментів Codex app-server -Bundled plugins також можуть підключати middleware `tool_result`, специфічний для Codex app-server, через `api.registerCodexAppServerExtensionFactory(...)`, коли їхній manifest оголошує `contracts.embeddedExtensionFactories: ["codex-app-server"]`. -Це seam trusted-plugin для асинхронних перетворень tool-result, які мають виконуватися всередині native обв’язки Codex до того, як вивід інструмента буде спроєктовано назад у транскрипт OpenClaw. +Bundled plugin також можуть підключати middleware `tool_result`, специфічний для Codex app-server, через `api.registerCodexAppServerExtensionFactory(...)`, коли їхній manifest оголошує `contracts.embeddedExtensionFactories: ["codex-app-server"]`. +Це seam trusted-plugin для асинхронних перетворень результатів інструментів, які мають виконуватися всередині native harness Codex до того, як вивід інструмента буде спроєктовано назад у транскрипт OpenClaw. -### Режим native обв’язки Codex +### Режим native harness Codex -Bundled обв’язка `codex` — це native режим Codex для вбудованих ходів агента OpenClaw. Спочатку ввімкніть bundled plugin `codex` і додайте `codex` до `plugins.allow`, якщо у вашій конфігурації використовується обмежувальний allowlist. Це відрізняється від `openai-codex/*`: +Bundled harness `codex` — це native-режим Codex для вбудованих ходів агента OpenClaw. Спочатку увімкніть bundled plugin `codex` і додайте `codex` до `plugins.allow`, якщо у вашій config використовується обмежувальний allowlist. Це відрізняється від `openai-codex/*`: - `openai-codex/*` використовує OAuth ChatGPT/Codex через звичайний шлях постачальника OpenClaw. -- `codex/*` використовує bundled постачальника Codex і маршрутизує хід через Codex app-server. +- `codex/*` використовує bundled-постачальника Codex і маршрутизує хід через app-server Codex. -Коли цей режим виконується, Codex керує native thread id, поведінкою resume, Compaction і виконанням app-server. OpenClaw усе ще керує каналом чату, видимим дзеркалом транскрипту, політикою інструментів, підтвердженнями, доставкою медіа та вибором сесії. Використовуйте `embeddedHarness.runtime: "codex"` разом із `embeddedHarness.fallback: "none"`, коли вам потрібно довести, що лише шлях Codex app-server може взяти виконання на себе. Ця конфігурація є лише захистом вибору: збої Codex app-server уже напряму завершуються помилкою замість повторної спроби через PI. +Коли цей режим працює, Codex керує native thread id, поведінкою resume, Compaction і виконанням app-server. OpenClaw усе ще керує chat-каналом, видимим дзеркалом транскрипту, політикою інструментів, погодженнями, доставкою медіа та вибором сесії. Використовуйте `embeddedHarness.runtime: "codex"` разом із `embeddedHarness.fallback: "none"`, коли потрібно довести, що запуск може взяти на себе лише шлях app-server Codex. Ця config є лише запобіжником вибору: збої app-server Codex і так одразу завершуються помилкою без повторної спроби через PI. -## Вимкнути резервний перехід на PI +## Вимкнення fallback до PI -За замовчуванням OpenClaw запускає вбудованих агентів із `agents.defaults.embeddedHarness`, встановленим у `{ runtime: "auto", fallback: "pi" }`. У режимі `auto` зареєстровані plugin-обв’язки можуть взяти на себе пару постачальник/модель. Якщо жодна не підходить, OpenClaw переходить на PI. +Типово OpenClaw запускає вбудованих агентів із `agents.defaults.embeddedHarness`, установленим у `{ runtime: "auto", fallback: "pi" }`. У режимі `auto` зареєстровані plugin harness можуть взяти на себе пару постачальник/модель. Якщо жоден не підходить, OpenClaw повертається до PI. -Установіть `fallback: "none"`, коли вам потрібно, щоб відсутність вибору plugin-обв’язки завершувалася помилкою замість використання PI. Збої вже вибраних plugin-обв’язок і так завершуються жорсткою помилкою. Це не блокує явний `runtime: "pi"` або `OPENCLAW_AGENT_RUNTIME=pi`. +Установіть `fallback: "none"`, коли потрібно, щоб за відсутності вибору plugin harness виконання завершувалося помилкою замість використання PI. Збої вже вибраного plugin harness і так завершуються жорсткою помилкою. Це не блокує явний `runtime: "pi"` або `OPENCLAW_AGENT_RUNTIME=pi`. Для вбудованих запусків лише з Codex: @@ -150,7 +153,7 @@ Bundled обв’язка `codex` — це native режим Codex для вбу } ``` -Якщо ви хочете, щоб будь-яка зареєстрована plugin-обв’язка брала на себе відповідні моделі, але ніколи не хочете, щоб OpenClaw непомітно переходив на PI, залиште `runtime: "auto"` і вимкніть резервний перехід: +Якщо ви хочете, щоб будь-який зареєстрований plugin harness міг узяти на себе відповідні моделі, але ніколи не хочете, щоб OpenClaw непомітно повертався до PI, залиште `runtime: "auto"` і вимкніть fallback: ```json { @@ -165,7 +168,7 @@ Bundled обв’язка `codex` — це native режим Codex для вбу } ``` -Перевизначення для окремого агента використовують ту саму форму: +Перевизначення на рівні агента використовують ту саму форму: ```json { @@ -190,7 +193,7 @@ Bundled обв’язка `codex` — це native режим Codex для вбу } ``` -`OPENCLAW_AGENT_RUNTIME` усе ще перевизначає налаштоване середовище виконання. Використовуйте `OPENCLAW_AGENT_HARNESS_FALLBACK=none`, щоб вимкнути резервний перехід на PI через середовище. +`OPENCLAW_AGENT_RUNTIME` усе ще перевизначає налаштоване runtime. Використовуйте `OPENCLAW_AGENT_HARNESS_FALLBACK=none`, щоб вимкнути fallback до PI через середовище. ```bash OPENCLAW_AGENT_RUNTIME=codex \ @@ -198,41 +201,41 @@ OPENCLAW_AGENT_HARNESS_FALLBACK=none \ openclaw gateway run ``` -Якщо резервний перехід вимкнено, сесія завершується помилкою рано, коли запитана обв’язка не зареєстрована, не підтримує визначеного постачальника/модель або завершується помилкою до створення побічних ефектів ходу. Це навмисно для розгортань лише з Codex і для live-тестів, які мають довести, що шлях Codex app-server справді використовується. +Якщо fallback вимкнено, сесія завершується помилкою рано, коли запитаний harness не зареєстровано, не підтримує визначеного постачальника/модель або завершується помилкою до появи побічних ефектів ходу. Це навмисно для розгортань лише з Codex і для live-тестів, які мають доводити, що шлях app-server Codex справді використовується. -Цей параметр керує лише вбудованою обв’язкою агента. Він не вимикає маршрутизацію image, video, music, TTS, PDF або іншої модельної маршрутизації, специфічної для постачальника. +Цей параметр керує лише вбудованим harness агента. Він не вимикає маршрутизацію моделей, специфічну для постачальників, для зображень, відео, музики, TTS, PDF чи інших типів. -## Native sessions і дзеркало транскрипту +## Native-сесії та дзеркало транскрипту -Обв’язка може зберігати native session id, thread id або daemon-side resume token. -Явно зберігайте цю прив’язку пов’язаною із сесією OpenClaw і продовжуйте дзеркалити видимий користувачеві вивід assistant/tool у транскрипт OpenClaw. +Harness може зберігати native session id, thread id або daemon-side resume token. +Явно пов’язуйте цю прив’язку із сесією OpenClaw і продовжуйте дзеркалити видимий користувачеві вивід assistant/tool у транскрипт OpenClaw. Транскрипт OpenClaw залишається шаром сумісності для: - видимої в каналі історії сесії - пошуку та індексації транскриптів -- перемикання назад на вбудовану обв’язку PI на наступному ході -- загальної поведінки `/new`, `/reset` і видалення сесії +- повернення до вбудованого harness PI на пізнішому ході +- узагальненої поведінки `/new`, `/reset` і видалення сесій -Якщо ваша обв’язка зберігає sidecar-прив’язку, реалізуйте `reset(...)`, щоб OpenClaw міг очистити її, коли пов’язану сесію OpenClaw буде скинуто. +Якщо ваш harness зберігає sidecar-прив’язку, реалізуйте `reset(...)`, щоб OpenClaw міг очистити її, коли відповідну сесію OpenClaw скидають. ## Результати інструментів і медіа -Ядро створює список інструментів OpenClaw і передає його в підготовлену спробу. -Коли обв’язка виконує dynamic tool call, поверніть результат інструмента назад через форму результату обв’язки замість самостійного надсилання канального медіа. +Ядро формує список інструментів OpenClaw і передає його в підготовлену спробу. +Коли harness виконує динамічний виклик інструмента, повертайте результат інструмента назад через форму результату harness замість того, щоб самостійно надсилати медіа в канал. -Це зберігає text, image, video, music, TTS, approval і виводи messaging-tool на тому самому шляху доставки, що й у запусків на базі PI. +Це зберігає текст, зображення, відео, музику, TTS, погодження та вивід інструментів обміну повідомленнями на тому самому шляху доставки, що й для запусків на базі PI. ## Поточні обмеження -- Публічний шлях імпорту є загальним, але деякі псевдоніми типів attempt/result усе ще містять назви `Pi` для сумісності. -- Встановлення сторонніх обв’язок є експериментальним. Віддавайте перевагу provider plugins, доки вам не знадобиться native session runtime. -- Перемикання обв’язок між ходами підтримується. Не перемикайте обв’язки посеред ходу після того, як уже почалися native tools, approvals, текст assistant або надсилання повідомлень. +- Публічний шлях імпорту є узагальненим, але деякі псевдоніми типів спроб/результатів і далі містять назви `Pi` для сумісності. +- Установлення сторонніх harness є експериментальним. Віддавайте перевагу plugin постачальників, доки вам не знадобиться native session runtime. +- Перемикання harness між ходами підтримується. Не перемикайте harness посеред ходу після того, як уже почалися native tools, погодження, текст assistant або надсилання повідомлень. ## Пов’язане - [Огляд SDK](/uk/plugins/sdk-overview) -- [Допоміжні засоби середовища виконання](/uk/plugins/sdk-runtime) -- [Provider Plugins](/uk/plugins/sdk-provider-plugins) +- [Допоміжні засоби runtime](/uk/plugins/sdk-runtime) +- [Plugin постачальників](/uk/plugins/sdk-provider-plugins) - [Codex Harness](/uk/plugins/codex-harness) - [Постачальники моделей](/uk/concepts/model-providers) diff --git a/docs/uk/start/showcase.md b/docs/uk/start/showcase.md index 6ce806f05..2373d4106 100644 --- a/docs/uk/start/showcase.md +++ b/docs/uk/start/showcase.md @@ -1,145 +1,73 @@ --- description: Real-world OpenClaw projects from the community read_when: - - Пошук реальних прикладів використання OpenClaw + - Шукаєте реальні приклади використання OpenClaw - Оновлення добірки проєктів спільноти -summary: Проєкти та інтеграції, створені спільнотою на базі OpenClaw +summary: Створені спільнотою проєкти та інтеграції на базі OpenClaw title: Вітрина x-i18n: - generated_at: "2026-04-23T06:47:53Z" + generated_at: "2026-04-23T16:05:46Z" model: gpt-5.4 provider: openai - source_hash: 5bf4bd2548709a01ad18331537f804b32c3213139c2234915aa17f7a2638f19f + source_hash: b95dc12399a1a263c268671ffccfc86b069ec908a5bf40adc00663153c281d7d source_path: start/showcase.md workflow: 15 --- # Вітрина -
-

Створено в чатах, терміналах, браузерах і вітальнях

-

- Проєкти OpenClaw — не іграшкові демо. Люди запускають цикли рев’ю PR, мобільні застосунки, домашню автоматизацію, - голосові системи, devtools і робочі процеси з великим обсягом пам’яті з каналів, якими вони вже користуються. -

- -
-
- Розробка, природна для чатів - Telegram, WhatsApp, Discord, Beeper, вебчат і робочі процеси з акцентом на термінал. -
-
- Справжня автоматизація - Бронювання, покупки, підтримка, звітність і керування браузером без очікування на API. -
-
- Локальний + фізичний світ - Принтери, пилососи, камери, дані про здоров’я, домашні системи та особисті бази знань. -
-
-
+Проєкти OpenClaw — це не іграшкові демо. Люди запускають цикли перевірки PR, мобільні застосунки, домашню автоматизацію, голосові системи, devtools і робочі процеси з великим обсягом пам’яті з тих каналів, якими вони вже користуються — нативні для чату збірки в Telegram, WhatsApp, Discord і терміналах; реальна автоматизація для бронювання, покупок і підтримки без очікування на API; а також інтеграції з фізичним світом — із принтерами, пилососами, камерами та домашніми системами. -**Хочете потрапити у добірку?** Поділіться своїм проєктом у [#self-promotion на Discord](https://discord.gg/clawd) або [позначте @openclaw на X](https://x.com/openclaw). +**Хочете потрапити у добірку?** Поділіться своїм проєктом у [#self-promotion на Discord](https://discord.gg/clawd) або [позначте @openclaw у X](https://x.com/openclaw). - - ## Відео -

- Почніть тут, якщо хочете найкоротший шлях від «що це таке?» до «гаразд, я зрозумів». -

+Почніть тут, якщо хочете найкоротший шлях від «що це таке?» до «гаразд, я зрозумів». -
-
-
-