Heartbeat чи cron? Див. Automation, щоб зрозуміти, коли використовувати кожен із них.
Швидкий старт (для початківців)
Виберіть частоту
Залиште Heartbeat увімкненими (за замовчуванням
30m, або 1h для Anthropic OAuth/токен-автентифікації, зокрема повторного використання Claude CLI) або задайте власну частоту.Додайте HEARTBEAT.md (необов’язково)
Створіть невеликий контрольний список
HEARTBEAT.md або блок tasks: у робочому просторі агента.Вирішіть, куди мають надходити повідомлення Heartbeat
target: "none" — значення за замовчуванням; задайте target: "last", щоб спрямовувати їх до останнього контакту.Необов’язкове налаштування
- Увімкніть доставку міркувань Heartbeat для прозорості.
- Використовуйте полегшений початковий контекст, якщо для запусків Heartbeat потрібен лише
HEARTBEAT.md. - Увімкніть ізольовані сесії, щоб не надсилати повну історію розмови під час кожного Heartbeat.
- Обмежте 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 пропускаються до наступного тику всередині вікна. - Heartbeat автоматично відкладаються, поки cron-робота активна або стоїть у черзі. Задайте
heartbeat.skipWhenBusy: true, щоб також відкладати агента на його власних прив’язаних до ключа сесії субагентських або вкладених командних смугах; сусідні агенти більше не призупиняються лише тому, що інший агент має субагентську роботу в процесі.
Для чого потрібен промпт Heartbeat
Промпт за замовчуванням навмисно широкий:- Фонові завдання: “Consider outstanding tasks” підштовхує агента переглянути подальші дії (вхідні, календар, нагадування, роботу в черзі) і показати все термінове.
- Перевірка людини: “Checkup sometimes on your human during day time” підштовхує до періодичного легкого повідомлення “щось потрібно?”, але уникає нічного спаму, використовуючи ваш налаштований місцевий часовий пояс (див. Timezone).
agents.defaults.heartbeat.prompt (або agents.list[].heartbeat.prompt) як власне тіло (надсилається дослівно).
Контракт відповіді
- Якщо нічого не потребує уваги, відповідайте
HEARTBEAT_OK. - Запуски Heartbeat із підтримкою інструментів можуть натомість викликати
heartbeat_respondзnotify: falseдля відсутності видимого оновлення абоnotify: trueплюсnotificationTextдля сповіщення. Якщо структурована відповідь інструмента присутня, вона має пріоритет над текстовим резервним варіантом. - Під час запусків Heartbeat OpenClaw трактує
HEARTBEAT_OKяк підтвердження, коли воно з’являється на початку або в кінці відповіді. Токен видаляється, а відповідь відкидається, якщо решта вмісту має ≤ackMaxChars(за замовчуванням: 300). - Якщо
HEARTBEAT_OKз’являється посередині відповіді, воно не обробляється особливим чином. - Для сповіщень не включайте
HEARTBEAT_OK; повертайте лише текст сповіщення.
HEARTBEAT_OK на початку/в кінці повідомлення видаляється і логуються; повідомлення, яке містить лише HEARTBEAT_OK, відкидається.
Конфігурація
Область дії та пріоритет
agents.defaults.heartbeatзадає глобальну поведінку Heartbeat.agents.list[].heartbeatнакладається зверху; якщо будь-який агент має блокheartbeat, Heartbeat запускають лише ці агенти.channels.defaults.heartbeatзадає значення видимості за замовчуванням для всіх каналів.channels.<channel>.heartbeatперевизначає значення каналів за замовчуванням.channels.<channel>.accounts.<id>.heartbeat(канали з кількома обліковими записами) перевизначає налаштування для каналу.
Heartbeat для окремого агента
Якщо будь-який записagents.list[] містить блок heartbeat, Heartbeat запускають лише ці агенти. Блок окремого агента накладається на agents.defaults.heartbeat (тож ви можете один раз задати спільні значення за замовчуванням і перевизначати їх для кожного агента).
Приклад: два агенти, Heartbeat запускає лише другий агент.
Приклад активних годин
Обмежте Heartbeat робочими годинами в певному часовому поясі:Налаштування 24/7
Якщо ви хочете, щоб Heartbeat працювали весь день, використовуйте один із цих шаблонів:- Повністю опустіть
activeHours(немає обмеження часовим вікном; це поведінка за замовчуванням). - Задайте вікно на весь день:
activeHours: { start: "00:00", end: "24:00" }.
Приклад кількох облікових записів
ВикористовуйтеaccountId, щоб націлитися на конкретний обліковий запис у каналах із кількома обліковими записами, як-от Telegram:
Примітки до полів
Інтервал Heartbeat (рядок тривалості; одиниця за замовчуванням = хвилини).
Необов’язкове перевизначення моделі для запусків Heartbeat (
provider/model).Якщо ввімкнено, також доставляє окреме повідомлення
Reasoning:, коли воно доступне (та сама форма, що й /reasoning on).Якщо true, запуски Heartbeat використовують полегшений початковий контекст і залишають лише
HEARTBEAT.md із файлів початкового завантаження робочого простору.Якщо true, кожен Heartbeat запускається в новій сесії без попередньої історії розмови. Використовує той самий шаблон ізоляції, що й cron
sessionTarget: "isolated". Значно зменшує токен-вартість кожного Heartbeat. Поєднуйте з lightContext: true для максимальної економії. Маршрутизація доставки все одно використовує контекст основної сесії.Якщо true, запуски Heartbeat відкладаються на додаткових зайнятих смугах цього агента: його власній прив’язаній до ключа сесії субагентській або вкладеній командній роботі. Смуги cron завжди відкладають Heartbeat, навіть без цього прапорця, щоб хости локальних моделей не запускали cron і промпти Heartbeat одночасно.
Необов’язковий ключ сесії для запусків Heartbeat.
main(за замовчуванням): основна сесія агента.- Явний ключ сесії (скопіюйте з
openclaw sessions --jsonабо з sessions CLI). - Формати ключів сесій: див. Sessions і Groups.
last: доставити до останнього використаного зовнішнього каналу.- явний канал: будь-який налаштований канал або ідентифікатор Plugin, наприклад
discord,matrix,telegramабоwhatsapp. none(за замовчуванням): запустити Heartbeat, але не доставляти назовні.
Керує поведінкою прямої/DM-доставки.
allow: дозволити пряму/DM-доставку Heartbeat. block: придушити пряму/DM-доставку (reason=dm-blocked).Необов’язкове перевизначення одержувача (ідентифікатор, специфічний для каналу, наприклад E.164 для WhatsApp або ідентифікатор чату Telegram). Для тем/тредів Telegram використовуйте
<chatId>:topic:<messageThreadId>.Необов’язковий ідентифікатор облікового запису для каналів із кількома обліковими записами. Коли
target: "last", ідентифікатор облікового запису застосовується до визначеного останнього каналу, якщо він підтримує облікові записи; інакше він ігнорується. Якщо ідентифікатор облікового запису не відповідає налаштованому обліковому запису для визначеного каналу, доставка пропускається.Перевизначає стандартне тіло prompt (не об’єднується).
Максимальна кількість символів, дозволена після
HEARTBEAT_OK перед доставленням.Якщо true, пригнічує payload-и попереджень про помилки інструментів під час запусків Heartbeat.
Обмежує запуски 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-и пропускаються до наступного тіку всередині вікна.
Поведінка доставлення
Маршрутизація сеансу й цілі
Маршрутизація сеансу й цілі
- Heartbeat-и типово запускаються в основному сеансі агента (
agent:<id>:<mainKey>) або вglobal, колиsession.scope = "global". Задайтеsession, щоб перевизначити на конкретний сеанс каналу (Discord/WhatsApp/тощо). sessionвпливає лише на контекст запуску; доставлення контролюєтьсяtargetіto.- Щоб доставити в конкретний канал/отримувачу, задайте
target+to. Зtarget: "last"доставлення використовує останній зовнішній канал для цього сеансу. - Доставлення Heartbeat типово дозволяють прямі/DM-цілі. Задайте
directPolicy: "block", щоб пригнітити надсилання прямим цілям, але все одно виконати хід Heartbeat. - Якщо основна черга, lane цільового сеансу, lane Cron або активне завдання Cron зайняті, Heartbeat пропускається й повторюється пізніше.
- Якщо
skipWhenBusy: true, підagent цього агента з ключем сеансу та вкладені lanes також відкладають запуски Heartbeat. Зайняті lanes інших агентів не відкладають цього агента. - Якщо
targetне розв’язується в жодне зовнішнє призначення, запуск усе одно відбувається, але вихідне повідомлення не надсилається.
Видимість і поведінка пропуску
Видимість і поведінка пропуску
- Якщо
showOk,showAlertsіuseIndicatorусі вимкнені, запуск пропускається наперед якreason=alerts-disabled. - Якщо вимкнено лише доставлення сповіщень, OpenClaw усе одно може запустити Heartbeat, оновити timestamps завдань із наставшим строком, відновити timestamp простою сеансу та пригнітити зовнішній payload сповіщення.
- Якщо розв’язана ціль Heartbeat підтримує індикатор набору, OpenClaw показує набір, доки запуск Heartbeat активний. Для цього використовується та сама ціль, куди Heartbeat надіслав би вивід чату, і це вимикається через
typingMode: "never".
Життєвий цикл сеансу й аудит
Життєвий цикл сеансу й аудит
- Відповіді лише від Heartbeat не підтримують сеанс активним. Метадані Heartbeat можуть оновити рядок сеансу, але закінчення строку через простій використовує
lastInteractionAtз останнього справжнього повідомлення користувача/каналу, а щоденне закінчення строку використовуєsessionStartedAt. - Control UI та історія WebChat приховують prompts Heartbeat і підтвердження лише з OK. Базова транскрипція сеансу все ще може містити ці ходи для аудиту/відтворення.
- Від’єднані фонові завдання можуть поставити системну подію в чергу та розбудити Heartbeat, коли основний сеанс має швидко щось помітити. Це пробудження не робить запуск Heartbeat фоновим завданням.
Елементи керування видимістю
Типово підтвердженняHEARTBEAT_OK пригнічуються, а вміст сповіщень доставляється. Ви можете налаштувати це для кожного каналу або облікового запису:
Що робить кожен прапорець
showOk: надсилає підтвердженняHEARTBEAT_OK, коли модель повертає відповідь лише з OK.showAlerts: надсилає вміст сповіщення, коли модель повертає відповідь не з OK.useIndicator: випускає події індикатора для поверхонь статусу UI.
Приклади для каналу й для облікового запису
Поширені шаблони
| Мета | Конфігурація |
|---|---|
| Стандартна поведінка (тихі 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 увімкнені для стандартного агента. Вимкнення каденції Heartbeat через 0m або встановлення includeSystemPromptSection: false вилучає його зі звичайного bootstrap-контексту.
Якщо HEARTBEAT.md існує, але фактично порожній (лише порожні рядки та Markdown-заголовки на кшталт # Heading), OpenClaw пропускає запуск Heartbeat, щоб заощадити виклики API. Цей пропуск повідомляється як reason=empty-heartbeat-file. Якщо файл відсутній, Heartbeat усе одно запускається, а модель вирішує, що робити.
Тримайте його дуже малим (короткий чекліст або нагадування), щоб уникнути роздування prompt.
Приклад HEARTBEAT.md:
Блоки tasks:
HEARTBEAT.md також підтримує невеликий структурований блок tasks: для перевірок на основі інтервалів всередині самого Heartbeat.
Приклад:
Поведінка
Поведінка
- OpenClaw аналізує блок
tasks:і перевіряє кожне завдання за його власнимinterval. - До prompt Heartbeat для цього тіку включаються лише завдання, строк яких настав.
- Якщо немає завдань зі строком, що настав, Heartbeat повністю пропускається (
reason=no-tasks-due), щоб уникнути змарнованого виклику моделі. - Вміст у
HEARTBEAT.md, який не є завданням, зберігається й додається як додатковий контекст після списку завдань зі строком, що настав. - Timestamps останнього запуску завдань зберігаються у стані сеансу (
heartbeatTaskState), тому інтервали переживають звичайні перезапуски. - Timestamps завдань просуваються лише після того, як запуск Heartbeat завершує свій звичайний шлях відповіді. Пропущені запуски
empty-heartbeat-file/no-tasks-dueне позначають завдання як виконані.
Чи може агент оновлювати HEARTBEAT.md?
Так — якщо ви попросите його.HEARTBEAT.md — це просто звичайний файл у робочій області агента, тому ви можете сказати агенту (у звичайному чаті) щось на кшталт:
- “Онови
HEARTBEAT.md, щоб додати щоденну перевірку календаря.” - “Перепиши
HEARTBEAT.md, щоб він був коротшим і зосередженим на подальших діях щодо inbox.”
Ручне пробудження (на вимогу)
Ви можете поставити системну подію в чергу та запустити негайний Heartbeat за допомогою:heartbeat налаштовано для кількох агентів, ручне пробудження негайно запускає Heartbeat-и кожного з цих агентів.
Використовуйте --mode next-heartbeat, щоб зачекати на наступний запланований тік.
Доставлення reasoning (необов’язково)
Типово Heartbeat-и доставляють лише фінальний payload “answer”. Якщо вам потрібна прозорість, увімкніть:agents.defaults.heartbeat.includeReasoning: true
Reasoning: (така сама форма, як /reasoning on). Це може бути корисно, коли агент керує кількома сеансами/codexes і ви хочете бачити, чому він вирішив надіслати вам ping, але це також може розкрити більше внутрішніх деталей, ніж вам потрібно. У групових чатах краще залишати це вимкненим.
Обізнаність про витрати
Heartbeat-и запускають повні ходи агента. Коротші інтервали спалюють більше токенів. Щоб зменшити витрати:- Використовуйте
isolatedSession: true, щоб не надсилати повну історію розмови (приблизно зі 100K токенів до приблизно 2-5K за запуск). - Використовуйте
lightContext: true, щоб обмежити bootstrap-файли лишеHEARTBEAT.md. - Задайте дешевшу
model(наприклад,ollama/llama3.2:1b). - Тримайте
HEARTBEAT.mdмалим. - Використовуйте
target: "none", якщо вам потрібні лише оновлення внутрішнього стану.
Переповнення контексту після Heartbeat
Якщо Heartbeat раніше залишив наявний сеанс на меншій локальній моделі, наприклад моделі Ollama з вікном 32k, а наступний хід основного сеансу повідомляє про переповнення контексту, скиньте runtime-модель сеансу назад до налаштованої основної моделі. Повідомлення скидання OpenClaw прямо вказує на це, коли остання runtime-модель відповідає налаштованійheartbeat.model.
Поточні Heartbeat-и зберігають наявну runtime-модель спільного сеансу після завершення запуску. Ви все ще можете використовувати isolatedSession: true, щоб запускати Heartbeat-и у свіжому сеансі, поєднувати це з lightContext: true для найменшого prompt або вибрати модель Heartbeat з вікном контексту, достатньо великим для спільного сеансу.
Пов’язане
- Автоматизація — усі механізми автоматизації стисло
- Фонові завдання — як відстежується від’єднана робота
- Часовий пояс — як часовий пояс впливає на планування Heartbeat
- Усунення несправностей — налагодження проблем автоматизації