Heartbeat или Cron? Рекомендации по выбору подходящего варианта см. в разделе «Автоматизация».
Быстрый старт (для начинающих)
1
Выберите периодичность
Оставьте Heartbeat включённым (по умолчанию
30m или 1h, если настроена аутентификация Anthropic через OAuth/токен, включая повторное использование Claude CLI) либо задайте собственную периодичность.2
Добавьте HEARTBEAT.md (необязательно)
Создайте в рабочем пространстве агента небольшой список проверок
HEARTBEAT.md или блок tasks:.3
Выберите, куда отправлять сообщения Heartbeat
Значение по умолчанию —
target: "none"; задайте target: "last", чтобы направлять сообщения последнему контакту.4
Необязательная настройка
- Включите передачу рассуждений Heartbeat для прозрачности.
- Используйте облегчённый начальный контекст, если запускам Heartbeat требуется только
HEARTBEAT.md. - Включите изолированные сеансы, чтобы не отправлять полную историю переписки при каждом Heartbeat.
- Ограничьте Heartbeat активными часами (по местному времени).
Значения по умолчанию
- Интервал:
30m. Применение настроек провайдера Anthropic по умолчанию увеличивает его до1h, когда определённый режим аутентификации — OAuth/токен (включая повторное использование Claude CLI), но только покаheartbeat.everyне задан. Задайте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 без заданного значения используют
agents.defaults.timeoutSeconds, если он указан. В противном случае используется периодичность Heartbeat с ограничением в 600 секунд. Для более продолжительной работы Heartbeat задайтеagents.defaults.heartbeat.timeoutSecondsилиagents.list[].heartbeat.timeoutSecondsдля отдельного агента. - Запрос Heartbeat отправляется без изменений в качестве пользовательского сообщения. Системный запрос содержит раздел «Heartbeats» только тогда, когда Heartbeat включён для агента по умолчанию (и
includeSystemPromptSectionне равенfalse); запуск при этом помечается внутренним флагом. - Когда Heartbeat отключён с помощью
0m, обычные запуски также исключаютHEARTBEAT.mdиз начального контекста, чтобы модель не видела инструкции, предназначенные только для Heartbeat. - Активные часы (
heartbeat.activeHours) проверяются в настроенном часовом поясе. Вне этого временного окна Heartbeat пропускается до следующего запуска внутри окна. - Heartbeat автоматически откладывается, пока выполняется или ожидает выполнения работа Cron. Задайте
heartbeat.skipWhenBusy: true, чтобы также откладывать запуск агента, когда заняты его собственный привязанный к ключу сеанса субагент или вложенные каналы выполнения команд; агенты того же уровня больше не приостанавливаются только из-за того, что другой агент выполняет работу субагента.
Для чего предназначен запрос Heartbeat
Запрос по умолчанию намеренно сформулирован широко:- Фоновые задачи: фраза «Рассмотри незавершённые задачи» побуждает агента проверить последующие действия (входящие сообщения, календарь, напоминания, работу в очереди) и сообщить обо всём срочном.
- Проверка состояния пользователя: фраза «Иногда в течение дня интересуйся состоянием своего пользователя» побуждает изредка отправлять короткое сообщение «Вам что-нибудь нужно?», но позволяет избежать ночного потока сообщений благодаря настроенному местному часовому поясу (см. раздел «Часовой пояс»).
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:
Описание полей
string
Интервал Heartbeat (строка длительности; единица по умолчанию — минуты).
string
Необязательное переопределение модели для запусков Heartbeat (
provider/model).boolean
по умолчанию:"false"
Если включено, при наличии также доставляется отдельное сообщение
Thinking (в том же формате, что и /reasoning on).boolean
по умолчанию:"false"
При значении true запуски Heartbeat используют облегчённый начальный контекст и сохраняют из файлов начального контекста рабочего пространства только
HEARTBEAT.md.boolean
по умолчанию:"false"
При значении true каждый Heartbeat выполняется в новом сеансе без предыдущей истории переписки. Используется тот же принцип изоляции, что и для Cron
sessionTarget: "isolated". Это значительно снижает расход токенов на каждый Heartbeat. Для максимальной экономии объедините с lightContext: true. Маршрутизация доставки по-прежнему использует контекст основного сеанса.boolean
по умолчанию:"false"
При значении true запуски Heartbeat откладываются, когда заняты дополнительные каналы этого агента: его собственный привязанный к ключу сеанса субагент или вложенная работа с командами. Каналы Cron всегда откладывают Heartbeat даже без этого флага, поэтому хосты с локальными моделями не выполняют запросы Cron и Heartbeat одновременно.
string
Необязательный ключ сеанса для запусков Heartbeat.
main(по умолчанию): основной сеанс агента.- Явно заданный ключ сеанса (скопируйте из
openclaw sessions --jsonили CLI сеансов). - Форматы ключей сеансов: см. разделы «Сеансы» и «Группы».
string
last: доставлять в последний использованный внешний канал.- явно указанный канал: любой настроенный канал или идентификатор плагина, например
discord,matrix,telegramилиwhatsapp. none(по умолчанию): запускать Heartbeat, но не доставлять сообщения во внешние каналы.
"allow" | "block"
по умолчанию:"allow"
Управляет доставкой напрямую и в личные сообщения.
allow: разрешить доставку Heartbeat напрямую и в личные сообщения. block: запретить доставку напрямую и в личные сообщения (reason=dm-blocked).string
Необязательное переопределение получателя (идентификатор, зависящий от канала, например E.164 для WhatsApp или идентификатор чата Telegram). Для тем и веток Telegram используйте
<chatId>:topic:<messageThreadId>.string
Необязательный идентификатор учётной записи для каналов с несколькими учётными записями. При
target: "last" идентификатор учётной записи применяется к определённому последнему каналу, если тот поддерживает учётные записи; в противном случае он игнорируется. Если идентификатор не соответствует настроенной учётной записи определённого канала, доставка пропускается.string
Переопределяет тело запроса по умолчанию (без объединения).
boolean
по умолчанию:"true"
Определяет, добавляется ли раздел системного запроса
## Heartbeats агента по умолчанию. Установите false, чтобы сохранить поведение Heartbeat во время выполнения (периодичность, доставку, HEARTBEAT.md), но исключить инструкции Heartbeat из системного запроса агента.number
по умолчанию:"300"
Максимальное число символов после
HEARTBEAT_OK, при котором разрешена доставка.boolean
Если задано значение true, предупреждения об ошибках инструментов не включаются в полезную нагрузку во время запусков Heartbeat.
number
по умолчанию:"global timeout or min(every, 600)"
Максимальное время в секундах, отведённое на ход агента Heartbeat до его прерывания. Не задавайте значение, чтобы использовать
agents.defaults.timeoutSeconds, если оно установлено; в противном случае используется период Heartbeat, ограниченный 600 секундами.object
Ограничивает запуски 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 можно доставлять напрямую и в личные сообщения. Задайте
directPolicy: "block", чтобы запретить отправку напрямую, не отключая выполнение хода Heartbeat. - Если заняты основная очередь, линия целевого сеанса, линия Cron или активное задание Cron, Heartbeat пропускается и повторяется позже.
- Если
skipWhenBusy: true, линии субагентов с ключом сеанса и вложенные линии этого агента также откладывают запуски Heartbeat. Занятые линии других агентов не откладывают Heartbeat этого агента. - Если
targetне определяет внешнее назначение, выполнение всё равно происходит, но исходящее сообщение не отправляется.
Видимость и поведение при пропуске
Видимость и поведение при пропуске
- Если
showOk,showAlertsиuseIndicatorотключены, запуск сразу пропускается какreason=alerts-disabled. - Если отключена только доставка оповещений, OpenClaw всё равно может выполнить Heartbeat, обновить временные метки наступивших задач, восстановить временную метку бездействия сеанса и не отправлять полезную нагрузку внешнего оповещения.
- Если определённое назначение Heartbeat поддерживает индикатор набора текста, OpenClaw отображает его во время выполнения Heartbeat. Используется то же назначение, куда Heartbeat отправил бы вывод чата; эта функция отключается параметром
typingMode: "never".
Жизненный цикл сеанса и аудит
Жизненный цикл сеанса и аудит
- Ответы, относящиеся только к Heartbeat, не поддерживают сеанс активным. Метаданные Heartbeat могут обновлять строку сеанса, однако истечение срока из-за бездействия определяется по
lastInteractionAtиз последнего реального сообщения пользователя или канала, а ежедневное истечение срока — поsessionStartedAt. - В истории Control UI и WebChat скрываются запросы Heartbeat и подтверждения, содержащие только OK. Эти ходы могут сохраняться в исходной стенограмме сеанса для аудита и повторного воспроизведения.
- Отделённые фоновые задачи могут поставить системное событие в очередь и активировать Heartbeat, когда основной сеанс должен быстро обратить на что-либо внимание. Такая активация не превращает запуск Heartbeat в фоновую задачу.
Управление видимостью
По умолчанию подтвержденияHEARTBEAT_OK не отображаются, а содержимое оповещений доставляется. Это можно настроить отдельно для каждого канала или учётной записи:
Назначение каждого флага
showOk: отправляет подтверждениеHEARTBEAT_OK, когда модель возвращает ответ, содержащий только OK.showAlerts: отправляет содержимое оповещения, когда модель возвращает ответ, отличный от OK.useIndicator: создаёт события индикатора для отображения состояния в интерфейсе.
Примеры настроек для канала и учётной записи
Распространённые схемы
HEARTBEAT.md (необязательно)
Если в рабочей области существует файлHEARTBEAT.md, запрос по умолчанию предписывает агенту прочитать его. Считайте его «контрольным списком Heartbeat»: небольшим, стабильным и безопасным для проверки каждые 30 минут.
При обычных запусках HEARTBEAT.md добавляется только тогда, когда рекомендации Heartbeat включены для агента по умолчанию. Отключение периодичности Heartbeat с помощью 0m или установка includeSystemPromptSection: false исключает его из обычного начального контекста.
В нативной среде Codex содержимое HEARTBEAT.md не добавляется в ход так же, как другие начальные файлы. Если файл существует и содержит непробельные символы, примечание о режиме совместной работы Heartbeat указывает Codex на этот файл и предписывает прочитать его перед продолжением.
Если HEARTBEAT.md существует, но фактически пуст (содержит только пустые строки, комментарии Markdown/HTML, заголовки 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, чтобы сделать его короче и сосредоточить на дальнейшей работе с входящими сообщениями».
Ручная активация (по требованию)
Используйтеopenclaw system event, чтобы поставить системное событие в очередь и при необходимости немедленно запустить Heartbeat:
Если
--session-key не указан и для нескольких агентов настроен heartbeat, то --mode now немедленно запускает Heartbeat каждого из этих агентов.
Связанные элементы управления Heartbeat в той же группе CLI:
Передача рассуждений (необязательно)
По умолчанию Heartbeat передаёт только итоговую полезную нагрузку «ответа». Чтобы обеспечить прозрачность, включите:agents.defaults.heartbeat.includeReasoning: true
Thinking (того же формата, что и /reasoning on). Это может быть полезно, когда агент управляет несколькими сеансами или экземплярами Codex и вы хотите видеть, почему он решил отправить вам уведомление, однако при этом может раскрыться больше внутренних сведений, чем вам хотелось бы. В групповых чатах рекомендуется оставлять эту функцию отключённой.
Учёт затрат
Heartbeat выполняет полные проходы агента. Чем короче интервалы, тем больше расход токенов. Чтобы снизить затраты:- Используйте
isolatedSession: true, чтобы не отправлять полную историю диалога (сокращение примерно со ~100K до ~2-5K токенов на запуск). - Используйте
lightContext: true, чтобы ограничить загрузочные файлы только файломHEARTBEAT.md. - Укажите более дешёвую модель в
model(например,ollama/llama3.2:1b). - Сохраняйте значение
HEARTBEAT.mdнебольшим. - Используйте
target: "none", если нужны только внутренние обновления состояния.
Переполнение контекста после Heartbeat
После завершения запуска Heartbeat сохраняет существующую модель среды выполнения общего сеанса, поэтому Heartbeat, переключивший сеанс на локальную модель меньшего размера (например, модель Ollama с окном 32k), может оставить эту модель активной для следующего прохода основного сеанса. Если при следующем проходе возникает переполнение контекста, а последняя модель среды выполнения сеанса совпадает с настроенной вheartbeat.model, сообщение OpenClaw о восстановлении указывает в качестве вероятной причины утечку модели из Heartbeat и предлагает исправление.
Чтобы избежать этого, используйте isolatedSession: true для запуска Heartbeat в новом сеансе (при необходимости совместно с lightContext: true для минимального промпта) либо выберите для Heartbeat модель с окном контекста, достаточно большим для общего сеанса.
Связанные материалы
- Автоматизация — краткий обзор всех механизмов автоматизации
- Фоновые задачи — как отслеживается работа, выполняемая в отсоединённом режиме
- Часовой пояс — как часовой пояс влияет на расписание Heartbeat
- Устранение неполадок — диагностика проблем автоматизации