---
read_when:
    - Настройка частоты или сообщений Heartbeat
    - Выбор между Heartbeat и Cron для запланированных задач
sidebarTitle: Heartbeat
summary: Сообщения опроса Heartbeat и правила уведомлений
title: Heartbeat
x-i18n:
    generated_at: "2026-07-13T18:07:46Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    prompt_version: 24
    provider: openai
    source_hash: bc43539cde0bf4e00ee57d510d2188c4e7cc82d67e13b9f86ac5fc37c3c176d2
    source_path: gateway/heartbeat.md
    workflow: 16
---

<Note>
**Heartbeat или Cron?** Рекомендации по выбору подходящего варианта см. в разделе [«Автоматизация»](/ru/automation).
</Note>

Heartbeat выполняет **периодические ходы агента** в основном сеансе, чтобы модель могла сообщать обо всём, что требует внимания, не засоряя вас сообщениями.

Heartbeat — это запланированный ход в основном сеансе; он **не** создаёт записи [фоновых задач](/ru/automation/tasks). Записи задач предназначены для обособленной работы (запусков ACP, субагентов, изолированных заданий Cron).

Устранение неполадок: [Запланированные задачи](/ru/automation/cron-jobs#troubleshooting)

## Быстрый старт (для начинающих)

<Steps>
  <Step title="Выберите периодичность">
    Оставьте Heartbeat включённым (по умолчанию `30m` или `1h`, если настроена аутентификация Anthropic через OAuth/токен, включая повторное использование Claude CLI) либо задайте собственную периодичность.
  </Step>
  <Step title="Добавьте HEARTBEAT.md (необязательно)">
    Создайте в рабочем пространстве агента небольшой список проверок `HEARTBEAT.md` или блок `tasks:`.
  </Step>
  <Step title="Выберите, куда отправлять сообщения Heartbeat">
    Значение по умолчанию — `target: "none"`; задайте `target: "last"`, чтобы направлять сообщения последнему контакту.
  </Step>
  <Step title="Необязательная настройка">
    - Включите передачу рассуждений Heartbeat для прозрачности.
    - Используйте облегчённый начальный контекст, если запускам Heartbeat требуется только `HEARTBEAT.md`.
    - Включите изолированные сеансы, чтобы не отправлять полную историю переписки при каждом Heartbeat.
    - Ограничьте Heartbeat активными часами (по местному времени).

  </Step>
</Steps>

Пример конфигурации:

```json5
{
  agents: {
    defaults: {
      heartbeat: {
        every: "30m",
        target: "last", // явная доставка последнему контакту (по умолчанию — "none")
        directPolicy: "allow", // по умолчанию разрешены прямые адресаты и личные сообщения; задайте "block", чтобы отключить
        lightContext: true, // необязательно: добавлять из файлов начального контекста только HEARTBEAT.md
        isolatedSession: true, // необязательно: новый сеанс при каждом запуске (без истории переписки)
        skipWhenBusy: true, // необязательно: также откладывать, когда заняты субагент этого агента или вложенные каналы выполнения
        // activeHours: { start: "08:00", end: "24:00" },
        // includeReasoning: true, // необязательно: также отправлять отдельное сообщение `Thinking`
      },
    },
  },
}
```

## Значения по умолчанию

- Интервал: `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

Запрос по умолчанию намеренно сформулирован широко:

- **Фоновые задачи**: фраза «Рассмотри незавершённые задачи» побуждает агента проверить последующие действия (входящие сообщения, календарь, напоминания, работу в очереди) и сообщить обо всём срочном.
- **Проверка состояния пользователя**: фраза «Иногда в течение дня интересуйся состоянием своего пользователя» побуждает изредка отправлять короткое сообщение «Вам что-нибудь нужно?», но позволяет избежать ночного потока сообщений благодаря настроенному местному часовому поясу (см. раздел [«Часовой пояс»](/ru/concepts/timezone)).

Heartbeat может реагировать на завершённые [фоновые задачи](/ru/automation/tasks), но сам запуск Heartbeat не создаёт запись задачи.

Если Heartbeat должен выполнять конкретное действие (например, «проверить статистику Gmail PubSub» или «проверить работоспособность Gateway»), задайте в `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 случайный `HEARTBEAT_OK` в начале или конце сообщения удаляется и записывается в журнал; сообщение, состоящее только из `HEARTBEAT_OK`, отбрасывается.

## Конфигурация

```json5
{
  agents: {
    defaults: {
      heartbeat: {
        every: "30m", // по умолчанию: 30m (0m отключает)
        model: "anthropic/claude-opus-4-6",
        includeReasoning: false, // по умолчанию: false (при наличии доставлять отдельное сообщение Thinking)
        lightContext: false, // по умолчанию: false; значение true оставляет из файлов начального контекста рабочего пространства только HEARTBEAT.md
        isolatedSession: false, // по умолчанию: false; значение true запускает каждый Heartbeat в новом сеансе (без истории переписки)
        skipWhenBusy: false, // по умолчанию: false; значение true также ожидает освобождения каналов субагента или вложенных каналов этого агента
        target: "last", // по умолчанию: none | варианты: last | none | <channel id> (ядро или плагин, например "imessage")
        to: "+15551234567", // необязательное переопределение для конкретного канала
        accountId: "ops-bot", // необязательный идентификатор канала с несколькими учётными записями
        prompt: "Прочитай HEARTBEAT.md, если он существует (контекст рабочего пространства). Строго следуй ему. Не выводи и не повторяй старые задачи из предыдущих разговоров. Если ничто не требует внимания, ответь HEARTBEAT_OK.",
        includeSystemPromptSection: true, // по умолчанию: true; значение false исключает раздел системного запроса ## Heartbeats для агента по умолчанию
        ackMaxChars: 300, // максимальное количество символов после 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 выполняет только второй.

```json5
{
  agents: {
    defaults: {
      heartbeat: {
        every: "30m",
        target: "last", // явная доставка последнему контакту (по умолчанию — "none")
      },
    },
    list: [
      { id: "main", default: true },
      {
        id: "ops",
        heartbeat: {
          every: "1h",
          target: "whatsapp",
          to: "+15551234567",
          timeoutSeconds: 45,
          prompt: "Прочитай HEARTBEAT.md, если он существует (контекст рабочего пространства). Строго следуй ему. Не выводи и не повторяй старые задачи из предыдущих разговоров. Если ничто не требует внимания, ответь HEARTBEAT_OK.",
        },
      },
    ],
  },
}
```

### Пример активных часов

Ограничьте Heartbeat рабочими часами в определённом часовом поясе:

```json5
{
  agents: {
    defaults: {
      heartbeat: {
        every: "30m",
        target: "last", // явная доставка последнему контакту (по умолчанию — "none")
        activeHours: {
          start: "09:00",
          end: "22:00",
          timezone: "America/New_York", // необязательно; использует userTimezone, если он задан, иначе часовой пояс хоста
        },
      },
    },
  },
}
```

Вне этого окна (до 9 утра или после 10 вечера по восточному времени) Heartbeat пропускается. Следующий запланированный запуск внутри окна выполнится как обычно.

### Работа 24/7

Чтобы Heartbeat выполнялся круглосуточно, используйте один из следующих вариантов:

- Полностью исключите `activeHours` (без ограничения временным окном; это поведение по умолчанию).
- Задайте окно на весь день: `activeHours: { start: "00:00", end: "24:00" }`.

<Warning>
Не задавайте одинаковое время `start` и `end` (например, с `08:00` до `08:00`). Это считается окном нулевой длительности, поэтому Heartbeat всегда будет пропускаться.
</Warning>

### Пример с несколькими учётными записями

Используйте `accountId`, чтобы указать определённую учётную запись в каналах с несколькими учётными записями, таких как Telegram:

```json5
{
  agents: {
    list: [
      {
        id: "ops",
        heartbeat: {
          every: "1h",
          target: "telegram",
          to: "12345678:topic:42", // необязательно: направлять в определённую тему или ветку
          accountId: "ops-bot",
        },
      },
    ],
  },
  channels: {
    telegram: {
      accounts: {
        "ops-bot": { botToken: "YOUR_TELEGRAM_BOT_TOKEN" },
      },
    },
  },
}
```

### Описание полей

<ParamField path="every" type="string">
  Интервал Heartbeat (строка длительности; единица по умолчанию — минуты).
</ParamField>
<ParamField path="model" type="string">
  Необязательное переопределение модели для запусков Heartbeat (`provider/model`).
</ParamField>
<ParamField path="includeReasoning" type="boolean" default="false">
  Если включено, при наличии также доставляется отдельное сообщение `Thinking` (в том же формате, что и `/reasoning on`).
</ParamField>
<ParamField path="lightContext" type="boolean" default="false">
  При значении true запуски Heartbeat используют облегчённый начальный контекст и сохраняют из файлов начального контекста рабочего пространства только `HEARTBEAT.md`.
</ParamField>
<ParamField path="isolatedSession" type="boolean" default="false">
  При значении true каждый Heartbeat выполняется в новом сеансе без предыдущей истории переписки. Используется тот же принцип изоляции, что и для Cron `sessionTarget: "isolated"`. Это значительно снижает расход токенов на каждый Heartbeat. Для максимальной экономии объедините с `lightContext: true`. Маршрутизация доставки по-прежнему использует контекст основного сеанса.
</ParamField>
<ParamField path="skipWhenBusy" type="boolean" default="false">
  При значении true запуски Heartbeat откладываются, когда заняты дополнительные каналы этого агента: его собственный привязанный к ключу сеанса субагент или вложенная работа с командами. Каналы Cron всегда откладывают Heartbeat даже без этого флага, поэтому хосты с локальными моделями не выполняют запросы Cron и Heartbeat одновременно.
</ParamField>
<ParamField path="session" type="string">
  Необязательный ключ сеанса для запусков Heartbeat.

- `main` (по умолчанию): основной сеанс агента.
- Явно заданный ключ сеанса (скопируйте из `openclaw sessions --json` или [CLI сеансов](/ru/cli/sessions)).
- Форматы ключей сеансов: см. разделы [«Сеансы»](/ru/concepts/session) и [«Группы»](/ru/channels/groups).

</ParamField>
<ParamField path="target" type="string">
- `last`: доставлять в последний использованный внешний канал.
- явно указанный канал: любой настроенный канал или идентификатор плагина, например `discord`, `matrix`, `telegram` или `whatsapp`.
- `none` (по умолчанию): запускать Heartbeat, но **не доставлять** сообщения во внешние каналы.

</ParamField>
<ParamField path="directPolicy" type='"allow" | "block"' default="allow">
  Управляет доставкой напрямую и в личные сообщения. `allow`: разрешить доставку Heartbeat напрямую и в личные сообщения. `block`: запретить доставку напрямую и в личные сообщения (`reason=dm-blocked`).

</ParamField>
<ParamField path="to" type="string">
  Необязательное переопределение получателя (идентификатор, зависящий от канала, например E.164 для WhatsApp или идентификатор чата Telegram). Для тем и веток Telegram используйте `<chatId>:topic:<messageThreadId>`.

</ParamField>
<ParamField path="accountId" type="string">
  Необязательный идентификатор учётной записи для каналов с несколькими учётными записями. При `target: "last"` идентификатор учётной записи применяется к определённому последнему каналу, если тот поддерживает учётные записи; в противном случае он игнорируется. Если идентификатор не соответствует настроенной учётной записи определённого канала, доставка пропускается.

</ParamField>
<ParamField path="prompt" type="string">
  Переопределяет тело запроса по умолчанию (без объединения).

</ParamField>
<ParamField path="includeSystemPromptSection" type="boolean" default="true">
  Определяет, добавляется ли раздел системного запроса `## Heartbeats` агента по умолчанию. Установите `false`, чтобы сохранить поведение Heartbeat во время выполнения (периодичность, доставку, HEARTBEAT.md), но исключить инструкции Heartbeat из системного запроса агента.

</ParamField>
<ParamField path="ackMaxChars" type="number" default="300">
  Максимальное число символов после `HEARTBEAT_OK`, при котором разрешена доставка.

</ParamField>
<ParamField path="suppressToolErrorWarnings" type="boolean">
  Если задано значение true, предупреждения об ошибках инструментов не включаются в полезную нагрузку во время запусков Heartbeat.

</ParamField>
<ParamField path="timeoutSeconds" type="number" default="global timeout or min(every, 600)">
  Максимальное время в секундах, отведённое на ход агента Heartbeat до его прерывания. Не задавайте значение, чтобы использовать `agents.defaults.timeoutSeconds`, если оно установлено; в противном случае используется период Heartbeat, ограниченный 600 секундами.

</ParamField>
<ParamField path="activeHours" type="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 пропускаются до следующего такта, попадающего в это окно.

</ParamField>

## Поведение доставки

<AccordionGroup>
  <Accordion title="Маршрутизация сеанса и назначения">
    - По умолчанию 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` не определяет внешнее назначение, выполнение всё равно происходит, но исходящее сообщение не отправляется.

  </Accordion>
  <Accordion title="Видимость и поведение при пропуске">
    - Если `showOk`, `showAlerts` и `useIndicator` отключены, запуск сразу пропускается как `reason=alerts-disabled`.
    - Если отключена только доставка оповещений, OpenClaw всё равно может выполнить Heartbeat, обновить временные метки наступивших задач, восстановить временную метку бездействия сеанса и не отправлять полезную нагрузку внешнего оповещения.
    - Если определённое назначение Heartbeat поддерживает индикатор набора текста, OpenClaw отображает его во время выполнения Heartbeat. Используется то же назначение, куда Heartbeat отправил бы вывод чата; эта функция отключается параметром `typingMode: "never"`.

  </Accordion>
  <Accordion title="Жизненный цикл сеанса и аудит">
    - Ответы, относящиеся только к Heartbeat, **не** поддерживают сеанс активным. Метаданные Heartbeat могут обновлять строку сеанса, однако истечение срока из-за бездействия определяется по `lastInteractionAt` из последнего реального сообщения пользователя или канала, а ежедневное истечение срока — по `sessionStartedAt`.
    - В истории Control UI и WebChat скрываются запросы Heartbeat и подтверждения, содержащие только OK. Эти ходы могут сохраняться в исходной стенограмме сеанса для аудита и повторного воспроизведения.
    - Отделённые [фоновые задачи](/ru/automation/tasks) могут поставить системное событие в очередь и активировать Heartbeat, когда основной сеанс должен быстро обратить на что-либо внимание. Такая активация не превращает запуск Heartbeat в фоновую задачу.

  </Accordion>
</AccordionGroup>

## Управление видимостью

По умолчанию подтверждения `HEARTBEAT_OK` не отображаются, а содержимое оповещений доставляется. Это можно настроить отдельно для каждого канала или учётной записи:

```yaml
channels:
  defaults:
    heartbeat:
      showOk: false # Скрывать HEARTBEAT_OK (по умолчанию)
      showAlerts: true # Показывать сообщения оповещений (по умолчанию)
      useIndicator: true # Создавать события индикатора (по умолчанию)
  telegram:
    heartbeat:
      showOk: true # Показывать подтверждения OK в Telegram
  whatsapp:
    accounts:
      work:
        heartbeat:
          showAlerts: false # Не доставлять оповещения для этой учётной записи
```

Приоритет: настройки учётной записи → настройки канала → настройки канала по умолчанию → встроенные значения по умолчанию.

### Назначение каждого флага

- `showOk`: отправляет подтверждение `HEARTBEAT_OK`, когда модель возвращает ответ, содержащий только OK.
- `showAlerts`: отправляет содержимое оповещения, когда модель возвращает ответ, отличный от OK.
- `useIndicator`: создаёт события индикатора для отображения состояния в интерфейсе.

Если **все три** параметра имеют значение false, OpenClaw полностью пропускает запуск Heartbeat (модель не вызывается).

### Примеры настроек для канала и учётной записи

```yaml
channels:
  defaults:
    heartbeat:
      showOk: false
      showAlerts: true
      useIndicator: true
  slack:
    heartbeat:
      showOk: true # все учётные записи Slack
    accounts:
      ops:
        heartbeat:
          showAlerts: false # отключить оповещения только для учётной записи ops
  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`, запрос по умолчанию предписывает агенту прочитать его. Считайте его «контрольным списком 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`:

```md
# Контрольный список Heartbeat

- Быстро проверить: нет ли чего-нибудь срочного во входящих?
- Если сейчас день и других ожидающих задач нет, выполнить быструю проверку состояния.
- Если задача заблокирована, записать, _чего не хватает_, и в следующий раз спросить Питера.
```

### Блоки `tasks:`

`HEARTBEAT.md` также поддерживает небольшой структурированный блок `tasks:` для проверок по интервалам внутри самого Heartbeat.

Пример:

```md
tasks:

- name: inbox-triage
  interval: 30m
  prompt: "Проверь срочные непрочитанные письма и отметь всё, что требует скорого ответа."
- name: calendar-scan
  interval: 2h
  prompt: "Проверь предстоящие встречи, к которым нужно подготовиться или по итогам которых требуются действия."

# Дополнительные инструкции

- Оповещения должны быть краткими.
- Если после выполнения всех наступивших задач ничто не требует внимания, ответь HEARTBEAT_OK.
```

<AccordionGroup>
  <Accordion title="Поведение">
    - OpenClaw разбирает блок `tasks:` и проверяет каждую задачу с учётом её собственного `interval`.
    - В запрос Heartbeat для текущего такта включаются только **наступившие** задачи.
    - Если ни одна задача не наступила, Heartbeat полностью пропускается (`reason=no-tasks-due`), чтобы не тратить вызов модели.
    - Содержимое `HEARTBEAT.md`, не относящееся к задачам, сохраняется и добавляется как дополнительный контекст после списка наступивших задач.
    - Временные метки последнего выполнения задач хранятся в состоянии сеанса (`heartbeatTaskState`), поэтому интервалы сохраняются после обычных перезапусков.
    - Временные метки задач обновляются только после того, как запуск Heartbeat завершит обычный путь ответа. Пропущенные запуски `empty-heartbeat-file` / `no-tasks-due` не помечают задачи как выполненные.

  </Accordion>
</AccordionGroup>

Режим задач удобен, когда один файл Heartbeat должен содержать несколько периодических проверок, но вы не хотите выполнять их все на каждом такте.

### Может ли агент обновлять HEARTBEAT.md?

Да — если вы его об этом попросите.

`HEARTBEAT.md` — это обычный файл в рабочей области агента, поэтому в обычном чате можно сказать агенту, например:

- «Обнови `HEARTBEAT.md`, добавив ежедневную проверку календаря».
- «Перепиши `HEARTBEAT.md`, чтобы сделать его короче и сосредоточить на дальнейшей работе с входящими сообщениями».

Если это должно происходить заблаговременно, можно также добавить в запрос Heartbeat явную строку: «Если контрольный список устареет, замени содержимое HEARTBEAT.md более подходящим вариантом».

<Warning>
Не помещайте секреты (ключи API, номера телефонов, закрытые токены) в `HEARTBEAT.md` — его содержимое становится частью контекста запроса.
</Warning>

## Ручная активация (по требованию)

Используйте `openclaw system event`, чтобы поставить системное событие в очередь и при необходимости немедленно запустить Heartbeat:

```bash
openclaw system event --text "Проверь, не требуются ли срочные последующие действия" --mode now
```

| Флаг                         | Описание                                                                                      |
| ---------------------------- | ------------------------------------------------------------------------------------------------ |
| `--text <text>`              | Текст системного события (обязательно).                                                                    |
| `--mode <mode>`              | `now` немедленно запускает Heartbeat; `next-heartbeat` (по умолчанию) ожидает следующего запланированного такта. |
| `--session-key <sessionKey>` | Направляет событие в определённый сеанс; по умолчанию используется основной сеанс агента.                   |
| `--json`                     | Вывод в формате JSON.                                                                                     |

Если `--session-key` не указан и для нескольких агентов настроен `heartbeat`, то `--mode now` немедленно запускает Heartbeat каждого из этих агентов.

Связанные элементы управления Heartbeat в той же группе CLI:

```bash
openclaw system heartbeat last     # показать последнее событие Heartbeat
openclaw system heartbeat enable   # включить Heartbeat
openclaw system heartbeat disable  # отключить Heartbeat
```

## Передача рассуждений (необязательно)

По умолчанию Heartbeat передаёт только итоговую полезную нагрузку «ответа».

Чтобы обеспечить прозрачность, включите:

- `agents.defaults.heartbeat.includeReasoning: true`

После включения Heartbeat также будет передавать отдельное сообщение с префиксом `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 модель с окном контекста, достаточно большим для общего сеанса.

## Связанные материалы

- [Автоматизация](/ru/automation) — краткий обзор всех механизмов автоматизации
- [Фоновые задачи](/ru/automation/tasks) — как отслеживается работа, выполняемая в отсоединённом режиме
- [Часовой пояс](/ru/concepts/timezone) — как часовой пояс влияет на расписание Heartbeat
- [Устранение неполадок](/ru/automation/cron-jobs#troubleshooting) — диагностика проблем автоматизации
