From 71c2639a213fb4aa2153ed7a18c63fbe3b43e5f4 Mon Sep 17 00:00:00 2001 From: "openclaw-docs-i18n[bot]" Date: Tue, 28 Apr 2026 03:38:53 +0000 Subject: [PATCH] chore(i18n): refresh uk translations --- docs/uk/gateway/heartbeat.md | 310 ++++++++++++++++++----------------- 1 file changed, 158 insertions(+), 152 deletions(-) diff --git a/docs/uk/gateway/heartbeat.md b/docs/uk/gateway/heartbeat.md index f2e5a8e08..1886912fa 100644 --- a/docs/uk/gateway/heartbeat.md +++ b/docs/uk/gateway/heartbeat.md @@ -1,46 +1,46 @@ --- read_when: - - Налаштування частоти Heartbeat або повідомлень + - Налаштування частоти Heartbeat або обміну повідомленнями - Вибір між Heartbeat і Cron для запланованих завдань sidebarTitle: Heartbeat summary: Повідомлення опитування Heartbeat і правила сповіщень title: Heartbeat x-i18n: - generated_at: "2026-04-26T07:48:30Z" - model: gpt-5.4 + generated_at: "2026-04-28T03:37:07Z" + model: gpt-5.5 provider: openai - source_hash: fe0d3e9c531062d90e8e24cb7795fed20bc0985c3eadc8ed367295fc2544d14e + source_hash: f0fb2c900c8190b963c795ca7dcfc5627451ebd1e9d5291d330a644e13d358d4 source_path: gateway/heartbeat.md workflow: 15 --- -**Heartbeat чи cron?** Див. [Автоматизація й завдання](/uk/automation), щоб зрозуміти, коли що використовувати. +**Heartbeat чи Cron?** Див. [Автоматизація та завдання](/uk/automation), щоб зрозуміти, коли використовувати кожен варіант. -Heartbeat запускає **періодичні ходи агента** в основній сесії, щоб модель могла виносити все, що потребує уваги, не засипаючи вас повідомленнями. +Heartbeat виконує **періодичні ходи агента** в основному сеансі, щоб модель могла повідомляти про все, що потребує уваги, не засипаючи вас повідомленнями. -Heartbeat — це запланований хід основної сесії — він **не** створює записи [фонових завдань](/uk/automation/tasks). Записи завдань призначені для відокремленої роботи (запуски ACP, субагенти, ізольовані Cron-завдання). +Heartbeat — це запланований хід в основному сеансі; він **не** створює записи [фонових завдань](/uk/automation/tasks). Записи завдань призначені для відокремленої роботи (запуски ACP, субагенти, ізольовані завдання Cron). -Усунення проблем: [Заплановані завдання](/uk/automation/cron-jobs#troubleshooting) +Усунення несправностей: [Заплановані завдання](/uk/automation/cron-jobs#troubleshooting) ## Швидкий старт (для початківців) - Залиште heartbeat увімкненим (типово це `30m`, або `1h` для Anthropic OAuth/token auth, включно з повторним використанням Claude CLI) або встановіть власну частоту. + Залиште Heartbeat увімкненим (типово `30m` або `1h` для автентифікації Anthropic OAuth/токеном, включно з повторним використанням Claude CLI) або задайте власну частоту. - Створіть невеликий чекліст `HEARTBEAT.md` або блок `tasks:` у робочому просторі агента. + Створіть невеликий контрольний список `HEARTBEAT.md` або блок `tasks:` у робочому просторі агента. - - `target: "none"` — типове значення; встановіть `target: "last"`, щоб надсилати до останнього контакту. + + `target: "none"` — типове значення; задайте `target: "last"`, щоб спрямовувати повідомлення останньому контакту. - - - Увімкніть доставку міркувань heartbeat для прозорості. - - Використовуйте полегшений bootstrap-контекст, якщо heartbeat-запускам потрібен лише `HEARTBEAT.md`. - - Увімкніть ізольовані сесії, щоб не надсилати повну історію розмови під час кожного heartbeat. - - Обмежте heartbeat активними годинами (місцевий час). + + - Увімкніть доставку міркувань Heartbeat для прозорості. + - Використовуйте полегшений початковий контекст, якщо запускам Heartbeat потрібен лише `HEARTBEAT.md`. + - Увімкніть ізольовані сеанси, щоб не надсилати повну історію розмови під час кожного Heartbeat. + - Обмежте Heartbeat активними годинами (місцевий час). @@ -52,45 +52,45 @@ Heartbeat — це запланований хід основної сесії defaults: { heartbeat: { every: "30m", - target: "last", // явна доставка останньому контакту (типово "none") - directPolicy: "allow", // типово: дозволяти прямі/DM-цілі; встановіть "block", щоб придушити - lightContext: true, // необов’язково: інʼєктувати лише HEARTBEAT.md з bootstrap-файлів - isolatedSession: true, // необов’язково: нова сесія для кожного запуску (без історії розмови) + target: "last", // explicit delivery to last contact (default is "none") + directPolicy: "allow", // default: allow direct/DM targets; set "block" to suppress + lightContext: true, // optional: only inject HEARTBEAT.md from bootstrap files + isolatedSession: true, // optional: fresh session each run (no conversation history) // activeHours: { start: "08:00", end: "24:00" }, - // includeReasoning: true, // необов’язково: також надсилати окреме повідомлення `Reasoning:` + // includeReasoning: true, // optional: send separate `Reasoning:` message too }, }, }, } ``` -## Значення за замовчуванням +## Типові значення -- Інтервал: `30m` (або `1h`, коли виявленим режимом автентифікації є Anthropic OAuth/token auth, включно з повторним використанням Claude CLI). Встановіть `agents.defaults.heartbeat.every` або `agents.list[].heartbeat.every`; використайте `0m`, щоб вимкнути. -- Тіло prompt-а (налаштовується через `agents.defaults.heartbeat.prompt`): `Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.` -- Prompt heartbeat надсилається **дослівно** як повідомлення користувача. Системний prompt включає секцію "Heartbeat" лише тоді, коли heartbeat увімкнено для типового агента і запуск внутрішньо позначено відповідним прапорцем. -- Коли heartbeat вимкнено через `0m`, звичайні запуски також виключають `HEARTBEAT.md` з bootstrap-контексту, щоб модель не бачила інструкцій лише для heartbeat. -- Активні години (`heartbeat.activeHours`) перевіряються в налаштованому часовому поясі. Поза вікном heartbeat пропускаються до наступного тіку всередині вікна. +- Інтервал: `30m` (або `1h`, коли виявлений режим автентифікації Anthropic OAuth/токеном, включно з повторним використанням Claude CLI). Задайте `agents.defaults.heartbeat.every` або `agents.list[].heartbeat.every`; використовуйте `0m`, щоб вимкнути. +- Тіло промпта (налаштовується через `agents.defaults.heartbeat.prompt`): `Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.` +- Промпт Heartbeat надсилається **дослівно** як повідомлення користувача. Системний промпт містить розділ "Heartbeat" лише тоді, коли Heartbeat увімкнено для типового агента, а запуск внутрішньо позначено відповідним прапорцем. +- Коли Heartbeat вимкнено за допомогою `0m`, звичайні запуски також не додають `HEARTBEAT.md` до початкового контексту, щоб модель не бачила інструкції, призначені лише для Heartbeat. +- Активні години (`heartbeat.activeHours`) перевіряються в налаштованому часовому поясі. Поза цим вікном Heartbeat пропускається до наступного такту всередині вікна. -## Для чого потрібен prompt heartbeat +## Для чого потрібен промпт Heartbeat -Типовий prompt навмисно є широким: +Типовий промпт навмисно широкий: -- **Фонові завдання**: "Consider outstanding tasks" спонукає агента перевіряти незавершені справи (вхідні, календар, нагадування, чергу роботи) і виносити все термінове. -- **Перевірка стану людини**: "Checkup sometimes on your human during day time" спонукає до зрідка легкого повідомлення на кшталт "чи щось тобі потрібно?", але уникає нічного спаму завдяки використанню вашого налаштованого локального часового поясу (див. [Часовий пояс](/uk/concepts/timezone)). +- **Фонові завдання**: "Consider outstanding tasks" спонукає агента переглянути подальші дії (вхідні, календар, нагадування, роботу в черзі) і повідомити про все термінове. +- **Перевірка стану людини**: "Checkup sometimes on your human during day time" спонукає час від часу надсилати легке повідомлення "чи вам щось потрібно?", але уникає нічного спаму завдяки використанню налаштованого локального часового поясу (див. [Часовий пояс](/uk/concepts/timezone)). -Heartbeat може реагувати на завершені [фонові завдання](/uk/automation/tasks), але сам запуск heartbeat не створює запис завдання. +Heartbeat може реагувати на завершені [фонові завдання](/uk/automation/tasks), але сам запуск Heartbeat не створює запис завдання. -Якщо ви хочете, щоб heartbeat робив щось дуже конкретне (наприклад, "check Gmail PubSub stats" або "verify gateway health"), задайте `agents.defaults.heartbeat.prompt` (або `agents.list[].heartbeat.prompt`) на власне тіло prompt-а (надсилається дослівно). +Якщо ви хочете, щоб Heartbeat робив щось дуже конкретне (наприклад, "check Gmail PubSub stats" або "verify gateway health"), задайте `agents.defaults.heartbeat.prompt` (або `agents.list[].heartbeat.prompt`) як власне тіло (надсилається дослівно). ## Контракт відповіді - Якщо нічого не потребує уваги, відповідайте **`HEARTBEAT_OK`**. -- Під час запусків heartbeat OpenClaw трактує `HEARTBEAT_OK` як підтвердження, якщо він з’являється **на початку або в кінці** відповіді. Токен видаляється, а відповідь відкидається, якщо решта вмісту має **≤ `ackMaxChars`** (типово: 300). -- Якщо `HEARTBEAT_OK` з’являється **посередині** відповіді, він не обробляється спеціально. -- Для сповіщень **не** включайте `HEARTBEAT_OK`; повертайте лише текст сповіщення. +- Під час запусків Heartbeat OpenClaw трактує `HEARTBEAT_OK` як підтвердження, якщо він з’являється на **початку або в кінці** відповіді. Токен видаляється, а відповідь відкидається, якщо решта вмісту має довжину **≤ `ackMaxChars`** (типово: 300). +- Якщо `HEARTBEAT_OK` з’являється **посередині** відповіді, він не обробляється особливо. +- Для сповіщень **не** додавайте `HEARTBEAT_OK`; повертайте лише текст сповіщення. -Поза heartbeat випадковий `HEARTBEAT_OK` на початку/в кінці повідомлення видаляється та журналюється; повідомлення, яке складається лише з `HEARTBEAT_OK`, відкидається. +Поза Heartbeat випадковий `HEARTBEAT_OK` на початку/в кінці повідомлення видаляється й записується в журнал; повідомлення, яке складається лише з `HEARTBEAT_OK`, відкидається. ## Конфігурація @@ -99,16 +99,16 @@ Heartbeat може реагувати на завершені [фонові за agents: { defaults: { heartbeat: { - every: "30m", // типово: 30m (0m вимикає) + every: "30m", // default: 30m (0m disables) model: "anthropic/claude-opus-4-6", - includeReasoning: false, // типово: false (доставляти окреме повідомлення Reasoning:, якщо доступне) - lightContext: false, // типово: false; true залишає лише HEARTBEAT.md з bootstrap-файлів робочого простору - isolatedSession: false, // типово: false; true запускає кожен heartbeat у новій сесії (без історії розмови) - target: "last", // типово: none | варіанти: last | none | (core або Plugin, наприклад "bluebubbles") - to: "+15551234567", // необов’язкове перевизначення одержувача для каналу - accountId: "ops-bot", // необов’язковий id каналу з кількома акаунтами + includeReasoning: false, // default: false (deliver separate Reasoning: message when available) + 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) + target: "last", // default: none | options: last | none | (core or plugin, e.g. "bluebubbles") + to: "+15551234567", // optional channel-specific override + accountId: "ops-bot", // optional multi-account channel id prompt: "Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.", - ackMaxChars: 300, // макс. кількість символів після HEARTBEAT_OK + ackMaxChars: 300, // max chars allowed after HEARTBEAT_OK }, }, }, @@ -117,17 +117,17 @@ Heartbeat може реагувати на завершені [фонові за ### Область дії та пріоритет -- `agents.defaults.heartbeat` задає глобальну поведінку heartbeat. -- `agents.list[].heartbeat` об’єднується поверх нього; якщо будь-який агент має блок `heartbeat`, heartbeat запускаються **лише для цих агентів**. +- `agents.defaults.heartbeat` задає глобальну поведінку Heartbeat. +- `agents.list[].heartbeat` об’єднується поверх нього; якщо будь-який агент має блок `heartbeat`, Heartbeat запускають **лише ці агенти**. - `channels.defaults.heartbeat` задає типові параметри видимості для всіх каналів. - `channels..heartbeat` перевизначає типові параметри каналу. -- `channels..accounts..heartbeat` (канали з кількома акаунтами) перевизначає налаштування на рівні каналу. +- `channels..accounts..heartbeat` (канали з кількома обліковими записами) перевизначає налаштування для кожного каналу. ### Heartbeat для окремого агента -Якщо будь-який запис `agents.list[]` включає блок `heartbeat`, heartbeat запускаються **лише для цих агентів**. Блок для окремого агента об’єднується поверх `agents.defaults.heartbeat` (тобто ви можете один раз задати спільні значення за замовчуванням і перевизначити їх для конкретного агента). +Якщо будь-який запис `agents.list[]` містить блок `heartbeat`, Heartbeat запускають **лише ці агенти**. Блок окремого агента об’єднується поверх `agents.defaults.heartbeat` (тобто ви можете один раз задати спільні типові параметри й перевизначати їх для окремих агентів). -Приклад: два агенти, heartbeat запускається лише для другого агента. +Приклад: два агенти, Heartbeat запускає лише другий агент. ```json5 { @@ -135,7 +135,7 @@ Heartbeat може реагувати на завершені [фонові за defaults: { heartbeat: { every: "30m", - target: "last", // явна доставка останньому контакту (типово "none") + target: "last", // explicit delivery to last contact (default is "none") }, }, list: [ @@ -157,7 +157,7 @@ Heartbeat може реагувати на завершені [фонові за ### Приклад активних годин -Обмежте heartbeat робочими годинами в конкретному часовому поясі: +Обмежте Heartbeat робочими годинами в певному часовому поясі: ```json5 { @@ -165,11 +165,11 @@ Heartbeat може реагувати на завершені [фонові за defaults: { heartbeat: { every: "30m", - target: "last", // явна доставка останньому контакту (типово "none") + target: "last", // explicit delivery to last contact (default is "none") activeHours: { start: "09:00", end: "22:00", - timezone: "America/New_York", // необов’язково; використовує ваш userTimezone, якщо задано, інакше часовий пояс хоста + timezone: "America/New_York", // optional; uses your userTimezone if set, otherwise host tz }, }, }, @@ -177,22 +177,22 @@ Heartbeat може реагувати на завершені [фонові за } ``` -Поза цим вікном (до 9 ранку або після 10 вечора за східним часом) heartbeat пропускаються. Наступний запланований тік усередині вікна виконається як зазвичай. +Поза цим вікном (до 9:00 або після 22:00 за східним часом) Heartbeat пропускається. Наступний запланований такт усередині вікна виконається звичайно. ### Налаштування 24/7 -Якщо ви хочете, щоб heartbeat працювали весь день, використовуйте один із цих шаблонів: +Якщо ви хочете, щоб Heartbeat працював увесь день, використовуйте один із цих шаблонів: -- Повністю опустіть `activeHours` (без обмеження часовим вікном; це типова поведінка). -- Задайте повноденне вікно: `activeHours: { start: "00:00", end: "24:00" }`. +- Повністю пропустіть `activeHours` (без обмеження часовим вікном; це типова поведінка). +- Задайте вікно на весь день: `activeHours: { start: "00:00", end: "24:00" }`. -Не встановлюйте однаковий час для `start` і `end` (наприклад, з `08:00` до `08:00`). Це вважається вікном нульової ширини, тому heartbeat завжди пропускаються. +Не задавайте однаковий час `start` і `end` (наприклад, від `08:00` до `08:00`). Це вважається вікном нульової ширини, тому Heartbeat завжди пропускатиметься. -### Приклад із кількома акаунтами +### Приклад із кількома обліковими записами -Використовуйте `accountId`, щоб націлитися на конкретний акаунт у каналах із кількома акаунтами, як-от Telegram: +Використовуйте `accountId`, щоб націлитися на певний обліковий запис у каналах із кількома обліковими записами, як-от Telegram: ```json5 { @@ -203,7 +203,7 @@ Heartbeat може реагувати на завершені [фонові за heartbeat: { every: "1h", target: "telegram", - to: "12345678:topic:42", // необов’язково: маршрут до конкретної теми/треду + to: "12345678:topic:42", // optional: route to a specific topic/thread accountId: "ops-bot", }, }, @@ -219,118 +219,118 @@ Heartbeat може реагувати на завершені [фонові за } ``` -### Примітки щодо полів +### Нотатки щодо полів Інтервал Heartbeat (рядок тривалості; типова одиниця = хвилини). - Необов’язкове перевизначення моделі для запусків heartbeat (`provider/model`). + Необов’язкове перевизначення моделі для запусків Heartbeat (`provider/model`). - Коли увімкнено, також доставляє окреме повідомлення `Reasoning:`, якщо воно доступне (така сама форма, як у `/reasoning on`). + Якщо ввімкнено, також доставляє окреме повідомлення `Reasoning:`, коли воно доступне (та сама форма, що й `/reasoning on`). - Якщо true, запуски heartbeat використовують полегшений bootstrap-контекст і зберігають лише `HEARTBEAT.md` із bootstrap-файлів робочого простору. + Якщо `true`, запуски Heartbeat використовують полегшений початковий контекст і зберігають лише `HEARTBEAT.md` із початкових файлів робочого простору. - Якщо true, кожен heartbeat запускається в новій сесії без попередньої історії розмови. Використовує той самий шаблон ізоляції, що й cron `sessionTarget: "isolated"`. Радикально зменшує вартість токенів на кожен heartbeat. Поєднуйте з `lightContext: true` для максимальної економії. Маршрутизація доставки все одно використовує контекст основної сесії. + Якщо `true`, кожен Heartbeat запускається в новому сеансі без попередньої історії розмови. Використовує той самий шаблон ізоляції, що й Cron `sessionTarget: "isolated"`. Значно зменшує витрати токенів на кожен Heartbeat. Поєднуйте з `lightContext: true` для максимальної економії. Маршрутизація доставки все одно використовує контекст основного сеансу. - Необов’язковий ключ сесії для запусків heartbeat. + Необов’язковий ключ сеансу для запусків Heartbeat. -- `main` (типово): основна сесія агента. -- Явний ключ сесії (скопіюйте з `openclaw sessions --json` або [CLI сесій](/uk/cli/sessions)). -- Формати ключів сесій: див. [Сесії](/uk/concepts/session) і [Групи](/uk/channels/groups). +- `main` (типово): основний сеанс агента. +- Явний ключ сеансу (скопіюйте з `openclaw sessions --json` або [CLI сеансів](/uk/cli/sessions)). +- Формати ключів сеансів: див. [Сеанси](/uk/concepts/session) і [Групи](/uk/channels/groups). -- `last`: доставити до останнього використаного зовнішнього каналу. -- явний канал: будь-який налаштований канал або id Plugin, наприклад `discord`, `matrix`, `telegram` або `whatsapp`. -- `none` (типово): виконати heartbeat, але **не доставляти** назовні. +- `last`: доставляти в останній використаний зовнішній канал. +- явний канал: будь-який налаштований канал або ідентифікатор Plugin, наприклад `discord`, `matrix`, `telegram` або `whatsapp`. +- `none` (типово): виконувати Heartbeat, але **не доставляти** назовні. - Керує поведінкою доставки в direct/DM. `allow`: дозволити direct/DM-доставку heartbeat. `block`: придушити direct/DM-доставку (`reason=dm-blocked`). + Керує поведінкою доставки напряму/в DM. `allow`: дозволити доставку Heartbeat напряму/в DM. `block`: пригнічувати доставку напряму/в DM (`reason=dm-blocked`). - Необов’язкове перевизначення одержувача (специфічний для каналу id, наприклад E.164 для WhatsApp або Telegram chat id). Для тем/тредів Telegram використовуйте `:topic:`. + Необов’язкове перевизначення отримувача (ідентифікатор, специфічний для каналу, наприклад E.164 для WhatsApp або ідентифікатор чату Telegram). Для тем/гілок Telegram використовуйте `:topic:`. - Необов’язковий id акаунта для каналів із кількома акаунтами. Коли `target: "last"`, id акаунта застосовується до визначеного останнього каналу, якщо той підтримує акаунти; інакше ігнорується. Якщо id акаунта не збігається з налаштованим акаунтом для визначеного каналу, доставка пропускається. + Необов’язковий ідентифікатор облікового запису для каналів із кількома обліковими записами. Коли `target: "last"`, ідентифікатор облікового запису застосовується до визначеного останнього каналу, якщо він підтримує облікові записи; інакше ігнорується. Якщо ідентифікатор облікового запису не збігається з налаштованим обліковим записом для визначеного каналу, доставка пропускається. - Перевизначає типове тіло prompt-а (без об’єднання). + Перевизначає типове тіло промпта (без об’єднання). - Макс. кількість символів, дозволена після `HEARTBEAT_OK`, перед доставкою. + Максимальна кількість символів, дозволена після `HEARTBEAT_OK` перед доставкою. - Якщо true, придушує payload-и попереджень про помилки інструментів під час запусків heartbeat. + Якщо `true`, пригнічує попереджувальні payload-и про помилки інструментів під час запусків Heartbeat. - Обмежує запуски heartbeat часовим вікном. Об’єкт із `start` (HH:MM, включно; використовуйте `00:00` для початку дня), `end` (HH:MM, невключно; `24:00` дозволено для кінця дня) та необов’язковим `timezone`. + Обмежує запуски Heartbeat часовим вікном. Об’єкт із `start` (HH:MM, включно; використовуйте `00:00` для початку дня), `end` (HH:MM, не включно; `24:00` дозволено для кінця дня) і необов’язковим `timezone`. -- Якщо пропущено або задано `"user"`: використовується ваш `agents.defaults.userTimezone`, якщо він налаштований, інакше використовується часовий пояс хост-системи. -- `"local"`: завжди використовує часовий пояс хост-системи. -- Будь-який ідентифікатор IANA (наприклад, `America/New_York`): використовується безпосередньо; якщо він недійсний, застосовується резервна поведінка `"user"`, описана вище. -- `start` і `end` не повинні бути рівними для активного вікна; рівні значення трактуються як вікно нульової ширини (завжди поза вікном). -- Поза активним вікном heartbeat пропускаються до наступного тіку всередині вікна. +- Якщо не вказано або задано `"user"`: використовує ваш `agents.defaults.userTimezone`, якщо його задано; інакше повертається до часового поясу системи хоста. +- `"local"`: завжди використовує часовий пояс системи хоста. +- Будь-який ідентифікатор IANA (наприклад, `America/New_York`): використовується напряму; якщо він недійсний, застосовується поведінка `"user"`, описана вище. +- `start` і `end` не мають бути однаковими для активного вікна; однакові значення вважаються вікном нульової ширини (завжди поза вікном). +- Поза активним вікном Heartbeat пропускається до наступного такту всередині вікна. ## Поведінка доставки - - - Heartbeat за замовчуванням запускаються в основній сесії агента (`agent::`), або в `global`, коли `session.scope = "global"`. Установіть `session`, щоб перевизначити на конкретну сесію каналу (Discord/WhatsApp тощо). + + - Heartbeat типово запускається в основному сеансі агента (`agent::`) або в `global`, коли `session.scope = "global"`. Задайте `session`, щоб перевизначити на конкретний сеанс каналу (Discord/WhatsApp тощо). - `session` впливає лише на контекст запуску; доставкою керують `target` і `to`. - - Щоб доставити в конкретний канал/одержувачу, встановіть `target` + `to`. З `target: "last"` доставка використовує останній зовнішній канал для цієї сесії. - - Доставки heartbeat за замовчуванням дозволяють прямі/DM-цілі. Установіть `directPolicy: "block"`, щоб придушити надсилання на прямі цілі, але все одно виконати хід heartbeat. - - Якщо основна черга зайнята, heartbeat пропускається і буде повторено пізніше. - - Якщо `target` не розв’язується у зовнішнє призначення, запуск усе одно відбувається, але вихідне повідомлення не надсилається. + - Щоб доставляти до конкретного каналу/отримувача, задайте `target` + `to`. З `target: "last"` доставка використовує останній зовнішній канал для цього сеансу. + - Доставки Heartbeat типово дозволяють прямі/DM-цілі. Задайте `directPolicy: "block"`, щоб пригнічувати надсилання до прямих цілей, але все одно виконувати хід Heartbeat. + - Якщо основна черга зайнята, Heartbeat пропускається й повторюється пізніше. + - Якщо `target` не визначає зовнішнього призначення, запуск усе одно відбувається, але вихідне повідомлення не надсилається. - - Якщо `showOk`, `showAlerts` і `useIndicator` усі вимкнені, запуск одразу пропускається з `reason=alerts-disabled`. - - Якщо вимкнено лише доставку сповіщень, OpenClaw усе одно може виконати heartbeat, оновити часові мітки завдань, термін яких настав, відновити часову мітку простою сесії та придушити зовнішній payload сповіщення. - - Якщо визначена ціль heartbeat підтримує індикатор набору, OpenClaw показує набір тексту, поки виконується heartbeat. Для цього використовується та сама ціль, куди heartbeat надсилав би вихід чату, і це вимикається через `typingMode: "never"`. + - Якщо `showOk`, `showAlerts` і `useIndicator` усі вимкнені, запуск пропускається наперед із `reason=alerts-disabled`. + - Якщо вимкнено лише доставку сповіщень, OpenClaw усе одно може запустити Heartbeat, оновити часові мітки завдань, термін яких настав, відновити часову мітку простою сеансу й пригнітити зовнішній payload сповіщення. + - Якщо визначена ціль Heartbeat підтримує індикатор набору, OpenClaw показує набір тексту, поки запуск Heartbeat активний. Для цього використовується та сама ціль, куди Heartbeat надсилав би вивід чату, і це вимикається через `typingMode: "never"`. - - - Відповіді лише heartbeat **не** підтримують сесію активною. Метадані heartbeat можуть оновлювати рядок сесії, але завершення через бездіяльність використовує `lastInteractionAt` від останнього справжнього повідомлення користувача/каналу, а добове завершення використовує `sessionStartedAt`. - - Історія в Control UI і WebChat приховує prompt-и heartbeat і підтвердження лише з OK. Базовий транскрипт сесії все одно може містити ці ходи для аудиту/повторного програвання. - - Відокремлені [фонові завдання](/uk/automation/tasks) можуть ставити системну подію в чергу та пробуджувати heartbeat, коли основна сесія має швидко помітити щось важливе. Таке пробудження не робить запуск heartbeat фоновим завданням. + + - Відповіді лише від Heartbeat **не** підтримують сеанс активним. Метадані Heartbeat можуть оновлювати рядок сеансу, але завершення через простій використовує `lastInteractionAt` з останнього справжнього повідомлення користувача/каналу, а щоденне завершення — `sessionStartedAt`. + - Історія Control UI та WebChat приховує промпти Heartbeat і підтвердження, що містять лише OK. Базовий транскрипт сеансу все одно може містити ці ходи для аудиту/відтворення. + - Відокремлені [фонові завдання](/uk/automation/tasks) можуть поставити системну подію в чергу й розбудити Heartbeat, коли основний сеанс має швидко щось помітити. Таке пробудження не робить запуск Heartbeat фоновим завданням. ## Керування видимістю -За замовчуванням підтвердження `HEARTBEAT_OK` придушуються, а вміст сповіщення доставляється. Ви можете налаштувати це для кожного каналу або окремого акаунта: +Типово підтвердження `HEARTBEAT_OK` пригнічуються, а вміст сповіщень доставляється. Ви можете налаштувати це для кожного каналу або облікового запису: ```yaml channels: defaults: heartbeat: - showOk: false # Приховувати HEARTBEAT_OK (типово) - showAlerts: true # Показувати повідомлення сповіщень (типово) - useIndicator: true # Видавати події індикатора (типово) + showOk: false # Hide HEARTBEAT_OK (default) + showAlerts: true # Show alert messages (default) + useIndicator: true # Emit indicator events (default) telegram: heartbeat: - showOk: true # Показувати підтвердження OK у Telegram + showOk: true # Show OK acknowledgments on Telegram whatsapp: accounts: work: heartbeat: - showAlerts: false # Придушити доставку сповіщень для цього акаунта + showAlerts: false # Suppress alert delivery for this account ``` -Пріоритет: для акаунта → для каналу → типові для каналів → вбудовані типові значення. +Пріоритет: для облікового запису → для каналу → типові параметри каналу → вбудовані типові параметри. ### Що робить кожен прапорець -- `showOk`: надсилає підтвердження `HEARTBEAT_OK`, коли модель повертає відповідь лише з OK. +- `showOk`: надсилає підтвердження `HEARTBEAT_OK`, коли модель повертає відповідь, що містить лише OK. - `showAlerts`: надсилає вміст сповіщення, коли модель повертає відповідь не-OK. -- `useIndicator`: видає події індикатора для поверхонь статусу UI. +- `useIndicator`: генерує події індикатора для поверхонь стану UI. -Якщо **всі три** мають значення false, OpenClaw повністю пропускає запуск heartbeat (без виклику моделі). +Якщо **усі три** мають значення false, OpenClaw повністю пропускає запуск Heartbeat (без виклику моделі). -### Приклади для каналу та акаунта +### Приклади для каналу й для облікового запису ```yaml channels: @@ -341,11 +341,11 @@ channels: useIndicator: true slack: heartbeat: - showOk: true # усі акаунти Slack + showOk: true # all Slack accounts accounts: ops: heartbeat: - showAlerts: false # придушити сповіщення лише для акаунта ops + showAlerts: false # suppress alerts for the ops account only telegram: heartbeat: showOk: true @@ -353,22 +353,22 @@ channels: ### Поширені шаблони -| Ціль | Конфігурація | -| ---------------------------------------- | ---------------------------------------------------------------------------------------------- | -| Типова поведінка (тихі OK, сповіщення увімкнені) | _(конфігурація не потрібна)_ | -| Повністю тихо (без повідомлень, без індикатора) | `channels.defaults.heartbeat: { showOk: false, showAlerts: false, useIndicator: false }` | -| Лише індикатор (без повідомлень) | `channels.defaults.heartbeat: { showOk: false, showAlerts: false, useIndicator: true }` | -| OK лише в одному каналі | `channels.telegram.heartbeat: { showOk: true }` | +| Ціль | Конфігурація | +| ------------------------------------------ | ---------------------------------------------------------------------------------------- | +| Типова поведінка (тихі OK, сповіщення ввімкнено) | _(конфігурація не потрібна)_ | +| Повністю тихо (без повідомлень, без індикатора) | `channels.defaults.heartbeat: { showOk: false, showAlerts: false, useIndicator: false }` | +| Лише індикатор (без повідомлень) | `channels.defaults.heartbeat: { showOk: false, showAlerts: false, useIndicator: true }` | +| OK лише в одному каналі | `channels.telegram.heartbeat: { showOk: true }` | ## HEARTBEAT.md (необов’язково) -Якщо у робочому просторі існує файл `HEARTBEAT.md`, типовий prompt наказує агенту прочитати його. Сприймайте це як ваш "чекліст heartbeat": невеликий, стабільний і безпечний для включення кожні 30 хвилин. +Якщо файл `HEARTBEAT.md` існує в робочому просторі, типовий промпт каже агенту прочитати його. Сприймайте його як свій "контрольний список Heartbeat": невеликий, стабільний і безпечний для додавання кожні 30 хвилин. -Під час звичайних запусків `HEARTBEAT.md` інʼєктується лише тоді, коли настанови heartbeat увімкнені для типового агента. Вимкнення частоти heartbeat через `0m` або встановлення `includeSystemPromptSection: false` виключає його зі звичайного bootstrap-контексту. +Під час звичайних запусків `HEARTBEAT.md` додається лише тоді, коли інструкції Heartbeat увімкнено для типового агента. Вимкнення частоти Heartbeat за допомогою `0m` або встановлення `includeSystemPromptSection: false` прибирає його зі звичайного початкового контексту. -Якщо `HEARTBEAT.md` існує, але фактично порожній (лише порожні рядки та Markdown-заголовки на кшталт `# Heading`), OpenClaw пропускає запуск heartbeat, щоб заощадити виклики API. Такий пропуск позначається як `reason=empty-heartbeat-file`. Якщо файл відсутній, heartbeat усе одно запускається, і модель сама вирішує, що робити. +Якщо `HEARTBEAT.md` існує, але фактично порожній (лише порожні рядки й заголовки markdown на кшталт `# Heading`), OpenClaw пропускає запуск Heartbeat, щоб заощадити виклики API. Такий пропуск повідомляється як `reason=empty-heartbeat-file`. Якщо файл відсутній, Heartbeat усе одно запускається, а модель вирішує, що робити. -Тримайте його невеликим (короткий чекліст або нагадування), щоб уникнути розростання prompt-а. +Тримайте його дуже малим (короткий контрольний список або нагадування), щоб уникати роздування промпта. Приклад `HEARTBEAT.md`: @@ -382,7 +382,7 @@ channels: ### Блоки `tasks:` -`HEARTBEAT.md` також підтримує невеликий структурований блок `tasks:` для перевірок за інтервалами всередині самого heartbeat. +`HEARTBEAT.md` також підтримує невеликий структурований блок `tasks:` для перевірок на основі інтервалів усередині самого Heartbeat. Приклад: @@ -404,67 +404,73 @@ tasks: - - OpenClaw розбирає блок `tasks:` і перевіряє кожне завдання відносно його власного `interval`. - - До prompt-а heartbeat для цього тіку включаються лише **завдання, строк яких настав**. - - Якщо жодне завдання не настав час виконувати, heartbeat повністю пропускається (`reason=no-tasks-due`), щоб уникнути марного виклику моделі. - - Вміст у `HEARTBEAT.md`, що не є завданнями, зберігається та додається як додатковий контекст після списку завдань, строк яких настав. - - Часові мітки останнього запуску завдань зберігаються в стані сесії (`heartbeatTaskState`), тож інтервали переживають звичайні перезапуски. - - Часові мітки завдань зсуваються вперед лише після того, як запуск heartbeat завершує свій звичайний шлях відповіді. Пропущені запуски `empty-heartbeat-file` / `no-tasks-due` не позначають завдання як завершені. + - OpenClaw аналізує блок `tasks:` і перевіряє кожне завдання за його власним `interval`. + - У промпт Heartbeat для цього такту включаються лише завдання, **термін яких настав**. + - Якщо немає завдань, термін яких настав, Heartbeat повністю пропускається (`reason=no-tasks-due`), щоб уникнути марного виклику моделі. + - Вміст у `HEARTBEAT.md`, який не належить до завдань, зберігається й додається як додатковий контекст після списку завдань, термін яких настав. + - Часові мітки останнього запуску завдань зберігаються в стані сеансу (`heartbeatTaskState`), тому інтервали переживають звичайні перезапуски. + - Часові мітки завдань просуваються лише після того, як запуск Heartbeat завершує свій звичайний шлях відповіді. Пропущені запуски `empty-heartbeat-file` / `no-tasks-due` не позначають завдання як завершені. -Режим завдань корисний, коли ви хочете, щоб один heartbeat-файл містив кілька періодичних перевірок, не оплачуючи їх усі на кожному тіку. +Режим завдань корисний, коли ви хочете, щоб один файл Heartbeat містив кілька періодичних перевірок без оплати за всі з них на кожному такті. ### Чи може агент оновлювати HEARTBEAT.md? -Так — якщо ви його про це попросите. +Так — якщо ви попросите його про це. -`HEARTBEAT.md` — це звичайний файл у робочому просторі агента, тож ви можете сказати агенту (у звичайному чаті) щось на кшталт: +`HEARTBEAT.md` — це просто звичайний файл у робочому просторі агента, тож ви можете сказати агенту (у звичайному чаті) щось на кшталт: -- "Update `HEARTBEAT.md` to add a daily calendar check." -- "Rewrite `HEARTBEAT.md` so it's shorter and focused on inbox follow-ups." +- "Онови `HEARTBEAT.md`, щоб додати щоденну перевірку календаря." +- "Перепиши `HEARTBEAT.md`, щоб він був коротшим і зосередженим на подальших діях щодо вхідних." -Якщо ви хочете, щоб це відбувалося проактивно, ви також можете додати явний рядок у свій heartbeat prompt, наприклад: "If the checklist becomes stale, update HEARTBEAT.md with a better one." +Якщо ви хочете, щоб це відбувалося проактивно, ви також можете додати явний рядок у промпт Heartbeat, наприклад: "Якщо контрольний список застаріє, онови HEARTBEAT.md на кращий." -Не розміщуйте секрети (API-ключі, номери телефонів, приватні токени) у `HEARTBEAT.md` — він стає частиною контексту prompt-а. +Не додавайте секрети (ключі API, номери телефонів, приватні токени) до `HEARTBEAT.md` — він стає частиною контексту промпта. ## Ручне пробудження (на вимогу) -Ви можете поставити системну подію в чергу та негайно запустити heartbeat так: +Ви можете поставити системну подію в чергу й запустити негайний Heartbeat за допомогою: ```bash openclaw system event --text "Check for urgent follow-ups" --mode now ``` -Якщо кілька агентів мають налаштований `heartbeat`, ручне пробудження негайно запускає heartbeat кожного з цих агентів. +Якщо Heartbeat налаштовано для кількох агентів, ручне пробудження негайно запускає Heartbeat для кожного з цих агентів. -Використовуйте `--mode next-heartbeat`, щоб дочекатися наступного запланованого тіку. +Використовуйте `--mode next-heartbeat`, щоб дочекатися наступного запланованого такту. ## Доставка міркувань (необов’язково) -За замовчуванням heartbeat доставляють лише фінальний payload "відповіді". +Типово Heartbeat доставляє лише фінальний payload "відповіді". Якщо вам потрібна прозорість, увімкніть: - `agents.defaults.heartbeat.includeReasoning: true` -Коли це ввімкнено, heartbeat також доставлятимуть окреме повідомлення з префіксом `Reasoning:` (така сама форма, як у `/reasoning on`). Це може бути корисно, коли агент керує кількома сесіями/codex-ами і ви хочете бачити, чому він вирішив вас ping-нути, — але це також може розкрити більше внутрішніх деталей, ніж вам потрібно. У групових чатах краще залишати це вимкненим. +Коли ввімкнено, Heartbeat також доставлятиме окреме повідомлення з префіксом `Reasoning:` (та сама форма, що й `/reasoning on`). Це може бути корисно, коли агент керує кількома сеансами/кодексами й ви хочете бачити, чому він вирішив написати вам, але це також може розкрити більше внутрішніх деталей, ніж вам потрібно. У групових чатах краще залишати це вимкненим. -## Усвідомлення вартості +## Обізнаність про вартість -Heartbeat виконують повні ходи агента. Коротші інтервали витрачають більше токенів. Щоб зменшити витрати: +Heartbeat виконує повні ходи агента. Коротші інтервали витрачають більше токенів. Щоб зменшити вартість: -- Використовуйте `isolatedSession: true`, щоб не надсилати повну історію розмови (~100K токенів зменшується до ~2-5K за запуск). -- Використовуйте `lightContext: true`, щоб обмежити bootstrap-файли лише `HEARTBEAT.md`. -- Установіть дешевшу `model` (наприклад, `ollama/llama3.2:1b`). -- Тримайте `HEARTBEAT.md` невеликим. -- Використовуйте `target: "none"`, якщо вам потрібні лише внутрішні оновлення стану. +- Використовуйте `isolatedSession: true`, щоб не надсилати повну історію розмови (~100 тис. токенів до ~2–5 тис. на запуск). +- Використовуйте `lightContext: true`, щоб обмежити початкові файли лише `HEARTBEAT.md`. +- Задайте дешевшу `model` (наприклад, `ollama/llama3.2:1b`). +- Тримайте `HEARTBEAT.md` малим. +- Використовуйте `target: "none"`, якщо вам потрібні лише оновлення внутрішнього стану. + +## Переповнення контексту після Heartbeat + +Якщо Heartbeat використовує меншу локальну модель, наприклад модель Ollama з вікном 32k, а наступний хід основного сеансу повідомляє про переповнення контексту, перевірте, чи попередній Heartbeat не залишив сеанс на моделі Heartbeat. Повідомлення скидання OpenClaw вказує на це, коли остання модель часу виконання збігається з налаштованою `heartbeat.model`. + +Використовуйте `isolatedSession: true`, щоб запускати Heartbeat у новому сеансі, поєднуйте це з `lightContext: true` для найменшого промпта або виберіть модель Heartbeat із контекстним вікном, достатньо великим для спільного сеансу. ## Пов’язане -- [Автоматизація й завдання](/uk/automation) — усі механізми автоматизації одним поглядом +- [Автоматизація та завдання](/uk/automation) — огляд усіх механізмів автоматизації - [Фонові завдання](/uk/automation/tasks) — як відстежується відокремлена робота -- [Часовий пояс](/uk/concepts/timezone) — як часовий пояс впливає на розклад heartbeat -- [Усунення проблем](/uk/automation/cron-jobs#troubleshooting) — налагодження проблем автоматизації +- [Часовий пояс](/uk/concepts/timezone) — як часовий пояс впливає на планування Heartbeat +- [Усунення несправностей](/uk/automation/cron-jobs#troubleshooting) — налагодження проблем автоматизації