Пульс (Gateway)
Heartbeat или Cron? См. Cron vs Heartbeat — рекомендации, когда использовать каждый из вариантов.Heartbeat выполняет периодические ходы агента в основном сеансе, чтобы модель могла выявлять то, что требует внимания, не засыпая вас сообщениями. Устранение неполадок: /automation/troubleshooting
Быстрый старт (для начинающих)
- Оставьте heartbeat включённым (по умолчанию —
30m, или1hдля Anthropic OAuth/setup-token) либо задайте собственную периодичность. - Создайте небольшой чек‑лист
HEARTBEAT.mdв рабочем пространстве агента (необязательно, но рекомендуется). - Определите, куда должны отправляться сообщения heartbeat (по умолчанию —
target: "last"). - Необязательно: включите доставку рассуждений heartbeat для прозрачности.
- Необязательно: ограничьте heartbeat активными часами (локальное время).
Значения по умолчанию
- Интервал:
30m(или1h, когда обнаружен режим аутентификации Anthropic OAuth/setup-token). Задайте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.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 рабочими часами в конкретном часовом поясе:Пример с несколькими аккаунтами
ИспользуйтеaccountId, чтобы нацелиться на конкретный аккаунт в каналах с
несколькими аккаунтами, таких как Telegram:
Пояснения к полям
every: интервал heartbeat (строка длительности; единица по умолчанию — минуты).model: необязательное переопределение модели для запусков heartbeat (provider/model).includeReasoning: при включении дополнительно доставляет отдельное сообщениеReasoning:, когда доступно (та же структура, что у/reasoning on).session: необязательный ключ сеанса для запусков heartbeat.main(по умолчанию): основной сеанс агента.- Явный ключ сеанса (скопируйте из
openclaw sessions --jsonили из sessions CLI). - Форматы ключей сеанса: см. Sessions и Groups.
target:last(по умолчанию): доставка в последний использованный внешний канал.- явный канал:
whatsapp/telegram/discord/googlechat/slack/msteams/signal/imessage. none: выполнить heartbeat, но не доставлять вовне.
to: необязательное переопределение получателя (идентификатор, специфичный для канала, например E.164 для WhatsApp или chat id Telegram).accountId: необязательный id аккаунта для каналов с несколькими аккаунтами. Когдаtarget: "last", id аккаунта применяется к разрешённому последнему каналу, если он поддерживает аккаунты; иначе игнорируется. Если id аккаунта не совпадает с настроенным аккаунтом для разрешённого канала, доставка пропускается.prompt: переопределяет тело промпта по умолчанию (не объединяется).ackMaxChars: максимальное число символов, разрешённое послеHEARTBEAT_OKперед доставкой.activeHours: ограничивает запуски heartbeat временным окном. Объект сstart(HH:MM, включительно),end(HH:MM, исключительно; допускается24:00для конца дня) и необязательнымtimezone.- Отсутствует или
"user": используется вашagents.defaults.userTimezone, если задан, иначе — часовой пояс хоста. "local": всегда использует часовой пояс хоста.- Любой идентификатор IANA (например,
America/New_York): используется напрямую; если некорректен, происходит откат к поведению"user"выше. - Вне активного окна heartbeat пропускаются до следующего тика внутри окна.
- Отсутствует или
Поведение доставки
- Heartbeat по умолчанию выполняются в основном сеансе агента (
agent:<id>:<mainKey>), или вglobal, когдаsession.scope = "global". Задайтеsession, чтобы переопределить на конкретный сеанс канала (Discord/WhatsApp и т. д.). sessionвлияет только на контекст запуска; доставка контролируетсяtargetиto.- Для доставки в конкретный канал/получателю задайте
target+to. Приtarget: "last"доставка использует последний внешний канал для этого сеанса. - Если основная очередь занята, heartbeat пропускается и будет повторён позже.
- Если
targetне разрешается во внешний пункт назначения, запуск всё равно происходит, но исходящее сообщение не отправляется. - Ответы, предназначенные только для heartbeat, не поддерживают активность сеанса;
последний
updatedAtвосстанавливается, поэтому истечение простоя ведёт себя обычно.
Управление видимостью
По умолчанию подтвержденияHEARTBEAT_OK подавляются, а содержимое алертов доставляется. Вы можете настроить это для каждого канала или аккаунта:
Что делает каждый флаг
showOk: отправляет подтверждениеHEARTBEAT_OK, когда модель возвращает ответ только с OK.showAlerts: отправляет содержимое алерта, когда модель возвращает ответ не OK.useIndicator: генерирует события‑индикаторы для поверхностей статуса UI.
Примеры: канал vs аккаунт
Распространённые шаблоны
| Цель | Конфиг |
|---|---|
| Поведение по умолчанию (тихие 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 существует, но фактически пуст (только пустые строки и
markdown‑заголовки вроде # Heading), OpenClaw пропускает запуск heartbeat,
чтобы сэкономить API‑вызовы.
Если файла нет, heartbeat всё равно выполняется, и
модель решает, что делать.
Держите его маленьким (короткий чек‑лист или напоминания), чтобы избежать раздувания промпта.
Пример HEARTBEAT.md:
Может ли агент обновлять 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). Это может быть полезно,
когда агент управляет несколькими сеансами/кодексами и вы хотите видеть, почему он
решил вас уведомить, — но это также может раскрывать больше внутренних деталей,
чем вам нужно. В групповых чатах предпочтительно оставлять выключенным.
Осознание стоимости
Heartbeat выполняют полноценные ходы агента. Более короткие интервалы сжигают больше токенов. ДержитеHEARTBEAT.md небольшим и рассмотрите более дешёвую model или
target: "none", если вам нужны только обновления внутреннего состояния.