Gateway

Heartbeat

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

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

Устранение неполадок: Запланированные задачи

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

  • Выберите периодичность

    Оставьте Heartbeat включённым (по умолчанию 30m или 1h, если настроена аутентификация Anthropic через OAuth/токен, включая повторное использование Claude CLI) либо задайте собственную периодичность.

  • Добавьте HEARTBEAT.md (необязательно)

    Создайте в рабочем пространстве агента небольшой список проверок HEARTBEAT.md или блок tasks:.

  • Выберите, куда отправлять сообщения Heartbeat

    Значение по умолчанию — target: "none"; задайте target: "last", чтобы направлять сообщения последнему контакту.

  • Необязательная настройка

    • Включите передачу рассуждений Heartbeat для прозрачности.
    • Используйте облегчённый начальный контекст, если запускам Heartbeat требуется только HEARTBEAT.md.
    • Включите изолированные сеансы, чтобы не отправлять полную историю переписки при каждом Heartbeat.
    • Ограничьте Heartbeat активными часами (по местному времени).
  • Пример конфигурации:

    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

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

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

    Heartbeat может реагировать на завершённые фоновые задачи, но сам запуск 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" }.

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

    Используйте 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" },      },    },  },}

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

    everystring

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

    modelstring

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

    includeReasoningbooleandefault: false

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

    lightContextbooleandefault: false

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

    isolatedSessionbooleandefault: false

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

    skipWhenBusybooleandefault: false

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

    sessionstring

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

    • main (по умолчанию): основной сеанс агента.
    • Явно заданный ключ сеанса (скопируйте из openclaw sessions --json или CLI сеансов).
    • Форматы ключей сеансов: см. разделы «Сеансы» и «Группы».
    targetstring
    • last: доставлять в последний использованный внешний канал.
    • явно указанный канал: любой настроенный канал или идентификатор плагина, например discord, matrix, telegram или whatsapp.
    • none (по умолчанию): запускать Heartbeat, но не доставлять сообщения во внешние каналы.
    directPolicy"allow" | "block"default: allow

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

    tostring

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

    accountIdstring

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

    promptstring

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

    includeSystemPromptSectionbooleandefault: true

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

    ackMaxCharsnumberdefault: 300

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

    suppressToolErrorWarningsboolean

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

    timeoutSecondsnumberdefault: global timeout or min(every, 600)

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

    activeHoursobject

    Ограничивает запуски 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 не отображаются, а содержимое оповещений доставляется. Это можно настроить отдельно для каждого канала или учётной записи:

    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.
    Поведение
    • 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 более подходящим вариантом».

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

    Используйте 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     # показать последнее событие Heartbeatopenclaw system heartbeat enable   # включить Heartbeatopenclaw 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 модель с окном контекста, достаточно большим для общего сеанса.

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

    Was this useful?
    On this page

    On this page