> ## Documentation Index
> Fetch the complete documentation index at: https://docs2.openclaw.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Heartbeat

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

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

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

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

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

**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 активными часами (по местному времени).

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

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  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

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

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

Heartbeat может реагировать на завершённые [фоновые задачи](https://docs2.openclaw.ai/ru/automation/tasks.md), но сам запуск 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 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  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 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  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 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  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 всегда будет пропускаться.

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

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

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  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" },
      },
    },
  },
}
```

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

**every** `string`

Интервал Heartbeat (строка длительности; единица по умолчанию — минуты).

**model** `string`

Необязательное переопределение модели для запусков Heartbeat (`provider/model`).

**includeReasoning** `boolean` (default: false)

Если включено, при наличии также доставляется отдельное сообщение `Thinking` (в том же формате, что и `/reasoning on`).

**lightContext** `boolean` (default: false)

При значении true запуски Heartbeat используют облегчённый начальный контекст и сохраняют из файлов начального контекста рабочего пространства только `HEARTBEAT.md`.

**isolatedSession** `boolean` (default: false)

При значении true каждый Heartbeat выполняется в новом сеансе без предыдущей истории переписки. Используется тот же принцип изоляции, что и для Cron `sessionTarget: "isolated"`. Это значительно снижает расход токенов на каждый Heartbeat. Для максимальной экономии объедините с `lightContext: true`. Маршрутизация доставки по-прежнему использует контекст основного сеанса.

**skipWhenBusy** `boolean` (default: false)

При значении true запуски Heartbeat откладываются, когда заняты дополнительные каналы этого агента: его собственный привязанный к ключу сеанса субагент или вложенная работа с командами. Каналы Cron всегда откладывают Heartbeat даже без этого флага, поэтому хосты с локальными моделями не выполняют запросы Cron и Heartbeat одновременно.

**session** `string`

Необязательный ключ сеанса для запусков Heartbeat.

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

**target** `string`

* `last`: доставлять в последний использованный внешний канал.
* явно указанный канал: любой настроенный канал или идентификатор плагина, например `discord`, `matrix`, `telegram` или `whatsapp`.
* `none` (по умолчанию): запускать Heartbeat, но **не доставлять** сообщения во внешние каналы.

**directPolicy** `"allow" | "block"` (default: allow)

Управляет доставкой напрямую и в личные сообщения. `allow`: разрешить доставку Heartbeat напрямую и в личные сообщения. `block`: запретить доставку напрямую и в личные сообщения (`reason=dm-blocked`).

**to** `string`

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

**accountId** `string`

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

**prompt** `string`

Переопределяет тело запроса по умолчанию (без объединения).

**includeSystemPromptSection** `boolean` (default: true)

Определяет, добавляется ли раздел системного запроса `## Heartbeats` агента по умолчанию. Установите `false`, чтобы сохранить поведение Heartbeat во время выполнения (периодичность, доставку, HEARTBEAT.md), но исключить инструкции Heartbeat из системного запроса агента.

**ackMaxChars** `number` (default: 300)

Максимальное число символов после `HEARTBEAT_OK`, при котором разрешена доставка.

**suppressToolErrorWarnings** `boolean`

Если задано значение true, предупреждения об ошибках инструментов не включаются в полезную нагрузку во время запусков Heartbeat.

**timeoutSeconds** `number` (default: global timeout or min(every, 600))

Максимальное время в секундах, отведённое на ход агента Heartbeat до его прерывания. Не задавайте значение, чтобы использовать `agents.defaults.timeoutSeconds`, если оно установлено; в противном случае используется период Heartbeat, ограниченный 600 секундами.

**activeHours** `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 пропускаются до следующего такта, попадающего в это окно.

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

> [accordion] Маршрутизация сеанса и назначения
>
> * По умолчанию 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] Видимость и поведение при пропуске
>
> * Если `showOk`, `showAlerts` и `useIndicator` отключены, запуск сразу пропускается как `reason=alerts-disabled`.
> * Если отключена только доставка оповещений, OpenClaw всё равно может выполнить Heartbeat, обновить временные метки наступивших задач, восстановить временную метку бездействия сеанса и не отправлять полезную нагрузку внешнего оповещения.
> * Если определённое назначение Heartbeat поддерживает индикатор набора текста, OpenClaw отображает его во время выполнения Heartbeat. Используется то же назначение, куда Heartbeat отправил бы вывод чата; эта функция отключается параметром `typingMode: "never"`.

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

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

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

```yaml theme={"theme":{"light":"min-light","dark":"min-dark"}}
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 theme={"theme":{"light":"min-light","dark":"min-dark"}}
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 theme={"theme":{"light":"min-light","dark":"min-dark"}}
# Контрольный список Heartbeat

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

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

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

Пример:

```md theme={"theme":{"light":"min-light","dark":"min-dark"}}
tasks:

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

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

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

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

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

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

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

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

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

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

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

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

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

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
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 theme={"theme":{"light":"min-light","dark":"min-dark"}}
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 модель с окном контекста, достаточно большим для общего сеанса.

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

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