Heartbeat (Gateway)
Heartbeat чи Cron? Див. Автоматизація й завдання, щоб зрозуміти, коли використовувати кожен із них.Heartbeat запускає періодичні ходи агента в основній сесії, щоб модель могла повідомляти про все, що потребує уваги, не засипаючи вас повідомленнями. Heartbeat — це запланований хід основної сесії — він не створює записи фонових завдань. Записи завдань призначені для відокремленої роботи (запуски ACP, субагенти, ізольовані cron-завдання). Усунення несправностей: Заплановані завдання
Швидкий старт (для початківців)
- Залиште heartbeat увімкненим (типове значення —
30m, або1hдля Anthropic OAuth/автентифікації токеном, включно з повторним використанням Claude CLI) або встановіть власну частоту. - Створіть невеликий контрольний список
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
Типовий запит навмисно зроблено широким:- Фонові завдання: фраза “Consider outstanding tasks” спонукає агента переглядати подальші дії (вхідні, календар, нагадування, роботу в черзі) і повідомляти про все термінове.
- Перевірка стану людини: фраза “Checkup sometimes on your human during day time” спонукає до періодичного легкого повідомлення на кшталт “чи щось вам потрібно?”, але допомагає уникати нічного спаму завдяки використанню вашого налаштованого місцевого часового поясу (див. /concepts/timezone).
agents.defaults.heartbeat.prompt (або
agents.list[].heartbeat.prompt) на власне тіло запиту (надсилається дослівно).
Контракт відповіді
- Якщо ніщо не потребує уваги, відповідайте
HEARTBEAT_OK. - Під час 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" }.
start і end (наприклад, від 08:00 до 08:00).
Це трактується як вікно нульової ширини, тому heartbeat завжди пропускаються.
Приклад із кількома обліковими записами
ВикористовуйтеaccountId, щоб націлити на певний обліковий запис у каналах із кількома обліковими записами, таких як Telegram:
Примітки щодо полів
every: інтервал heartbeat (рядок тривалості; типова одиниця = хвилини).model: необов’язкове перевизначення моделі для heartbeat-запусків (provider/model).includeReasoning: коли ввімкнено, також доставляє окреме повідомленняReasoning:, коли воно доступне (та сама форма, що й для/reasoning on).lightContext: коли ввімкнено, heartbeat-запуски використовують полегшений початковий контекст і зберігають лишеHEARTBEAT.mdіз файлів початкового контексту робочого простору.isolatedSession: коли ввімкнено, кожен heartbeat запускається в новій сесії без попередньої історії розмов. Використовує той самий шаблон ізоляції, що й cronsessionTarget: "isolated". Значно зменшує витрати токенів на кожен heartbeat. Поєднуйте зlightContext: trueдля максимальної економії. Маршрутизація доставки все одно використовує контекст основної сесії.session: необов’язковий ключ сесії для heartbeat-запусків.target:last: доставити до останнього використаного зовнішнього каналу.- явний канал: будь-який налаштований канал або id plugin, наприклад
discord,matrix,telegramабоwhatsapp. none(типово): запускати heartbeat, але не доставляти назовні.
directPolicy: керує поведінкою доставки в direct/DM:allow(типово): дозволяти доставку heartbeat у direct/DM.block: приглушити доставку в direct/DM (reason=dm-blocked).
to: необов’язкове перевизначення одержувача (специфічний для каналу id, наприклад E.164 для WhatsApp або id чату Telegram). Для тем/гілок Telegram використовуйте<chatId>:topic:<messageThreadId>.accountId: необов’язковий id облікового запису для каналів із кількома обліковими записами. Колиtarget: "last", id облікового запису застосовується до визначеного останнього каналу, якщо він підтримує облікові записи; інакше ігнорується. Якщо id облікового запису не збігається з налаштованим обліковим записом для визначеного каналу, доставку буде пропущено.prompt: перевизначає типове тіло запиту (не об’єднується).ackMaxChars: максимальна кількість символів, дозволена післяHEARTBEAT_OK, перш ніж відбудеться доставка.suppressToolErrorWarnings: якщо ввімкнено, приглушує корисні навантаження попереджень про помилки інструментів під час heartbeat-запусків.activeHours: обмежує 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 за замовчуванням дозволяє цілі direct/DM. Установіть
directPolicy: "block", щоб приглушити надсилання на direct-цілі, але при цьому все одно виконувати хід heartbeat. - Якщо основна черга зайнята, heartbeat пропускається і повторюється пізніше.
- Якщо
targetне вдається зіставити з жодним зовнішнім призначенням, запуск усе одно відбувається, але вихідне повідомлення не надсилається. - Якщо
showOk,showAlertsіuseIndicatorусі вимкнені, запуск одразу пропускається зreason=alerts-disabled. - Якщо вимкнено лише доставку сповіщень, OpenClaw усе одно може виконати heartbeat, оновити часові позначки завдань, відновити часову позначку неактивності сесії та приглушити зовнішнє корисне навантаження сповіщення.
- Відповіді лише для heartbeat не підтримують сесію активною; останній
updatedAtвідновлюється, тож завершення через неактивність працює як зазвичай. - Відокремлені фонові завдання можуть поставити в чергу системну подію й пробудити 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, типовий запит наказує
агенту прочитати його. Думайте про нього як про ваш “контрольний список heartbeat”: невеликий, стабільний і
безпечний для включення кожні 30 хвилин.
Під час звичайних запусків HEARTBEAT.md інжектується лише тоді, коли
для типового агента ввімкнено інструкції heartbeat. Вимкнення частоти heartbeat через 0m або
встановлення includeSystemPromptSection: false прибирає його зі звичайного початкового
контексту.
Якщо HEARTBEAT.md існує, але фактично порожній (лише порожні рядки та markdown-заголовки
на кшталт # Heading), OpenClaw пропускає запуск heartbeat, щоб заощадити API-виклики.
Таке пропускання позначається як reason=empty-heartbeat-file.
Якщо файл відсутній, heartbeat усе одно виконується, і модель сама вирішує, що робити.
Тримайте його невеликим (короткий контрольний список або нагадування), щоб уникати роздування запиту.
Приклад HEARTBEAT.md:
Блоки tasks:
HEARTBEAT.md також підтримує невеликий структурований блок tasks: для
перевірок за інтервалом усередині самого heartbeat.
Приклад:
- OpenClaw розбирає блок
tasks:і перевіряє кожне завдання щодо його власногоinterval. - До запиту heartbeat для цього тіку включаються лише належні завдання.
- Якщо жодне завдання не належить до виконання, heartbeat повністю пропускається (
reason=no-tasks-due), щоб уникнути марного виклику моделі. - Вміст у
HEARTBEAT.md, що не є завданнями, зберігається й додається як додатковий контекст після списку належних завдань. - Часові позначки останнього запуску завдань зберігаються в стані сесії (
heartbeatTaskState), тому інтервали переживають звичайні перезапуски. - Часові позначки завдань оновлюються лише після того, як heartbeat завершує свій звичайний шлях відповіді. Пропущені запуски
empty-heartbeat-file/no-tasks-dueне позначають завдання як виконані.
Чи може агент оновлювати HEARTBEAT.md?
Так — якщо ви його про це попросите.HEARTBEAT.md — це просто звичайний файл у робочому просторі агента, тож ви можете сказати
агенту (у звичайному чаті) щось на кшталт:
- “Онови
HEARTBEAT.md, щоб додати щоденну перевірку календаря.” - “Перепиши
HEARTBEAT.md, щоб він був коротшим і зосереджувався на подальших діях у вхідних.”
HEARTBEAT.md — він стає частиною контексту запиту.
Ручне пробудження (на вимогу)
Ви можете поставити в чергу системну подію й негайно запустити heartbeat за допомогою:heartbeat, ручне пробудження негайно запустить heartbeat кожного з цих
агентів.
Використовуйте --mode next-heartbeat, щоб дочекатися наступного запланованого тіку.
Доставка міркувань (необов’язково)
За замовчуванням heartbeat доставляють лише фінальне корисне навантаження “відповіді”. Якщо вам потрібна прозорість, увімкніть:agents.defaults.heartbeat.includeReasoning: true
Reasoning: (така сама форма, як для /reasoning on). Це може бути корисно, коли агент
керує кількома сесіями/codex і ви хочете бачити, чому він вирішив
надіслати вам сигнал, — але це також може розкрити більше внутрішніх деталей, ніж вам потрібно. У групових чатах краще залишати цю опцію вимкненою.
Обізнаність про вартість
Heartbeat запускають повні ходи агента. Коротші інтервали витрачають більше токенів. Щоб зменшити витрати:- Використовуйте
isolatedSession: true, щоб не надсилати повну історію розмови (приблизно зі ~100K токенів до ~2-5K за запуск). - Використовуйте
lightContext: true, щоб обмежити файли початкового контексту лишеHEARTBEAT.md. - Установіть дешевшу
model(наприклад,ollama/llama3.2:1b). - Тримайте
HEARTBEAT.mdневеликим. - Використовуйте
target: "none", якщо вам потрібні лише внутрішні оновлення стану.
Пов’язане
- Автоматизація й завдання — огляд усіх механізмів автоматизації
- Фонові завдання — як відстежується відокремлена робота
- Часовий пояс — як часовий пояс впливає на планування heartbeat
- Усунення несправностей — налагодження проблем автоматизації