Heartbeat (Gateway)
Heartbeat czy Cron? Zobacz Cron vs Heartbeat, aby uzyskać wskazówki, kiedy używać każdego z nich.Heartbeat uruchamia okresowe tury agenta w głównej sesji, aby model mógł wyłapywać wszystko, co wymaga uwagi, bez spamowania Cię. Rozwiązywanie problemów: /automation/troubleshooting
Szybki start (dla początkujących)
- Pozostaw heartbeat włączony (domyślnie
30mlub1hdla Anthropic OAuth/setup-token) albo ustaw własną częstotliwość. - Utwórz krótką listę kontrolną
HEARTBEAT.mdw obszarze roboczym agenta (opcjonalne, ale zalecane). - Zdecyduj, gdzie mają trafiać komunikaty heartbeat (
target: "last"jest domyślne). - Opcjonalnie: włącz dostarczanie rozumowania heartbeat dla przejrzystości.
- Opcjonalnie: ogranicz heartbeat do aktywnych godzin (czas lokalny).
Ustawienia domyślne
- Interwał:
30m(lub1h, gdy wykrytym trybem uwierzytelniania jest Anthropic OAuth/setup-token). Ustawagents.defaults.heartbeat.everylub per‑agentagents.list[].heartbeat.every; użyj0m, aby wyłączyć. - Treść promptu (konfigurowalna przez
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. - Prompt heartbeat jest wysyłany dosłownie jako wiadomość użytkownika. Prompt systemowy zawiera sekcję „Heartbeat”, a uruchomienie jest oznaczane wewnętrznie.
- Aktywne godziny (
heartbeat.activeHours) są sprawdzane w skonfigurowanej strefie czasowej. Poza oknem heartbeat jest pomijany do następnego tyknięcia w obrębie okna.
Do czego służy prompt heartbeat
Domyślny prompt jest celowo szeroki:- Zadania w tle: „Consider outstanding tasks” skłania agenta do przeglądu działań następczych (skrzynka odbiorcza, kalendarz, przypomnienia, kolejka pracy) i wyłonienia pilnych spraw.
- Kontakt z człowiekiem: „Checkup sometimes on your human during day time” zachęca do okazjonalnej, lekkiej wiadomości „czy czegoś potrzebujesz?”, jednocześnie unikając nocnego spamu dzięki użyciu skonfigurowanej lokalnej strefy czasowej (zob. /concepts/timezone).
agents.defaults.heartbeat.prompt (lub
agents.list[].heartbeat.prompt) na własną treść (wysyłaną dosłownie).
Kontrakt odpowiedzi
- Jeśli nic nie wymaga uwagi, odpowiedz
HEARTBEAT_OK. - Podczas uruchomień heartbeat OpenClaw traktuje
HEARTBEAT_OKjako potwierdzenie, gdy pojawia się na początku lub końcu odpowiedzi. Token jest usuwany, a odpowiedź odrzucana, jeśli pozostała treść ma ≤ackMaxChars(domyślnie: 300). - Jeśli
HEARTBEAT_OKpojawi się w środku odpowiedzi, nie jest traktowany w szczególny sposób. - W przypadku alertów nie dołączaj
HEARTBEAT_OK; zwróć wyłącznie treść alertu.
HEARTBEAT_OK na początku/końcu wiadomości jest usuwany
i logowany; wiadomość, która składa się wyłącznie z HEARTBEAT_OK, jest odrzucana.
Konfiguracja
Zakres i pierwszeństwo
agents.defaults.heartbeatustawia globalne zachowanie heartbeat.agents.list[].heartbeatnadpisuje/scala się na wierzchu; jeśli którykolwiek agent ma blokheartbeat, heartbeat uruchamiają tylko te agenty.channels.defaults.heartbeatustawia domyślną widoczność dla wszystkich kanałów.channels.<channel>.heartbeatnadpisuje domyślne ustawienia kanałów.channels.<channel>.accounts.<id>.heartbeat(kanały wielokontowe) nadpisuje ustawienia per‑kanał.
Heartbeat per‑agent
Jeśli którykolwiek wpisagents.list[] zawiera blok heartbeat, heartbeat
uruchamiają tylko te agenty. Blok per‑agent scala się na wierzchu agents.defaults.heartbeat
(dzięki czemu możesz ustawić wspólne domyślne wartości raz i nadpisywać je per agent).
Przykład: dwóch agentów, heartbeat uruchamia tylko drugi agent.
Przykład aktywnych godzin
Ogranicz heartbeat do godzin pracy w konkretnej strefie czasowej:Przykład wielu kont
UżyjaccountId, aby wskazać konkretne konto w kanałach wielokontowych, takich jak Telegram:
Uwagi do pól
every: interwał heartbeat (łańcuch czasu trwania; domyślna jednostka = minuty).model: opcjonalne nadpisanie modelu dla uruchomień heartbeat (provider/model).includeReasoning: gdy włączone, dostarcza także osobną wiadomośćReasoning:, gdy jest dostępna (ten sam kształt co/reasoning on).session: opcjonalny klucz sesji dla uruchomień heartbeat.main(domyślne): główna sesja agenta.- Jawny klucz sesji (skopiuj z
openclaw sessions --jsonlub z sessions CLI). - Formaty klucza sesji: zob. Sessions i Groups.
target:last(domyślne): dostarcz do ostatnio użytego kanału zewnętrznego.- jawny kanał:
whatsapp/telegram/discord/googlechat/slack/msteams/signal/imessage. none: uruchom heartbeat, ale nie dostarczaj na zewnątrz.
to: opcjonalne nadpisanie odbiorcy (identyfikator specyficzny dla kanału, np. E.164 dla WhatsApp lub identyfikator czatu Telegram).accountId: opcjonalny identyfikator konta dla kanałów wielokontowych. Gdytarget: "last", identyfikator konta dotyczy rozwiązanego ostatniego kanału, jeśli obsługuje konta; w przeciwnym razie jest ignorowany. Jeśli identyfikator konta nie pasuje do skonfigurowanego konta dla rozwiązanego kanału, dostarczenie jest pomijane.prompt: nadpisuje domyślną treść promptu (nie jest scalane).ackMaxChars: maks. liczba znaków dozwolona poHEARTBEAT_OKprzed dostarczeniem.activeHours: ogranicza uruchomienia heartbeat do okna czasowego. Obiekt zstart(HH:MM, włącznie),end(HH:MM, wyłącznie; dozwolone24:00dla końca dnia) oraz opcjonalnietimezone.- Pominięte lub
"user": używa Twojejagents.defaults.userTimezone, jeśli ustawiona, w przeciwnym razie wraca do strefy czasowej systemu hosta. "local": zawsze używa strefy czasowej systemu hosta.- Dowolny identyfikator IANA (np.
America/New_York): używany bezpośrednio; jeśli nieprawidłowy, wraca do zachowania"user"powyżej. - Poza aktywnym oknem heartbeat jest pomijany do następnego tyknięcia w obrębie okna.
- Pominięte lub
Zachowanie dostawy
- Heartbeat domyślnie uruchamia się w głównej sesji agenta (
agent:<id>:<mainKey>), lubglobal, gdysession.scope = "global". Ustawsession, aby nadpisać na konkretną sesję kanału (Discord/WhatsApp/etc.). sessionwpływa tylko na kontekst uruchomienia; dostarczanie kontrolujątargetito.- Aby dostarczyć do konkretnego kanału/odbiorcy, ustaw
target+to. Ztarget: "last"dostarczanie używa ostatniego kanału zewnętrznego dla tej sesji. - Jeśli główna kolejka jest zajęta, heartbeat jest pomijany i ponawiany później.
- Jeśli
targetrozwiąże się do braku celu zewnętrznego, uruchomienie nadal następuje, ale nie jest wysyłana żadna wiadomość wychodząca. - Odpowiedzi wyłącznie heartbeat nie podtrzymują sesji; przywracany jest ostatni
updatedAt, więc wygaszanie bezczynności działa normalnie.
Kontrole widoczności
Domyślnie potwierdzeniaHEARTBEAT_OK są tłumione, a treści alertów dostarczane. Możesz to dostosować per kanał lub per konto:
Co robi każda flaga
showOk: wysyła potwierdzenieHEARTBEAT_OK, gdy model zwraca odpowiedź tylko‑OK.showAlerts: wysyła treść alertu, gdy model zwraca odpowiedź inną niż OK.useIndicator: emituje zdarzenia wskaźników dla powierzchni statusu UI.
Przykłady per‑kanał vs per‑konto
Typowe wzorce
| Cel | Konfiguracja |
|---|---|
| Zachowanie domyślne (ciche OK, alerty) | (brak konfiguracji) |
| W pełni ciche (brak wiadomości, brak wskaźnika) | channels.defaults.heartbeat: { showOk: false, showAlerts: false, useIndicator: false } |
| Tylko wskaźnik (brak wiadomości) | channels.defaults.heartbeat: { showOk: false, showAlerts: false, useIndicator: true } |
| OK tylko w jednym kanale | channels.telegram.heartbeat: { showOk: true } |
HEARTBEAT.md (opcjonalne)
Jeśli w obszarze roboczym istnieje plikHEARTBEAT.md, domyślny prompt instruuje
agenta, aby go odczytał. Traktuj to jako swoją „listę kontrolną heartbeat”:
małą, stabilną i bezpieczną do dołączania co 30 minut.
Jeśli HEARTBEAT.md istnieje, ale jest w praktyce puste (tylko puste linie i nagłówki
Markdown, takie jak # Heading), OpenClaw pomija uruchomienie heartbeat, aby oszczędzać wywołania API.
Jeśli plik nie istnieje, heartbeat nadal się uruchamia, a model decyduje, co zrobić.
Utrzymuj go bardzo małym (krótka lista kontrolna lub przypomnienia), aby uniknąć rozrostu promptu.
Przykład HEARTBEAT.md:
Czy agent może aktualizować HEARTBEAT.md?
Tak — jeśli go o to poprosisz.HEARTBEAT.md to zwykły plik w obszarze roboczym agenta, więc możesz powiedzieć
agentowi (w normalnej rozmowie) coś w rodzaju:
- „Zaktualizuj
HEARTBEAT.md, aby dodać codzienne sprawdzenie kalendarza.” - „Przepisz
HEARTBEAT.md, aby był krótszy i skupiony na działaniach następczych ze skrzynki.”
HEARTBEAT.md — staje się częścią kontekstu promptu.
Ręczne wybudzenie (na żądanie)
Możesz dodać zdarzenie systemowe do kolejki i natychmiast wyzwolić heartbeat za pomocą:heartbeat, ręczne wybudzenie uruchamia
heartbeat każdego z tych agentów natychmiast.
Użyj --mode next-heartbeat, aby poczekać na następne zaplanowane tyknięcie.
Dostarczanie rozumowania (opcjonalne)
Domyślnie heartbeat dostarcza tylko końcowy ładunek „odpowiedzi”. Jeśli chcesz przejrzystości, włącz:agents.defaults.heartbeat.includeReasoning: true
Reasoning: (ten sam kształt co /reasoning on). Może to być przydatne, gdy agent
zarządza wieloma sesjami/kodeksami i chcesz zobaczyć, dlaczego zdecydował się do Ciebie
odezwać — ale może też ujawnić więcej szczegółów wewnętrznych, niż chcesz. Preferuj
pozostawienie tej opcji wyłączonej w czatach grupowych.
Świadomość kosztów
Heartbeat uruchamia pełne tury agenta. Krótsze interwały spalają więcej tokenów. UtrzymujHEARTBEAT.md na niskim poziomie i rozważ tańszy model lub target: "none",
jeśli chcesz wyłącznie wewnętrzne aktualizacje stanu.