Heartbeat czy Cron? Wskazówki dotyczące wyboru znajdziesz w sekcji Automatyzacja.
Szybki start (dla początkujących)
1
Wybierz częstotliwość
Pozostaw Heartbeat włączony (domyślnie
30m lub 1h, gdy skonfigurowano uwierzytelnianie Anthropic OAuth/tokenem, w tym ponowne użycie Claude CLI) albo ustaw własną częstotliwość.2
Dodaj HEARTBEAT.md (opcjonalnie)
Utwórz krótką listę kontrolną
HEARTBEAT.md lub blok tasks: w przestrzeni roboczej agenta.3
Zdecyduj, dokąd mają trafiać wiadomości Heartbeat
Wartością domyślną jest
target: "none"; ustaw target: "last", aby kierować je do ostatniego kontaktu.4
Opcjonalne dostrajanie
- Włącz dostarczanie toku rozumowania Heartbeat, aby zapewnić przejrzystość.
- Użyj lekkiego kontekstu inicjalizacyjnego, jeśli uruchomienia Heartbeat potrzebują tylko pliku
HEARTBEAT.md. - Włącz izolowane sesje, aby uniknąć wysyłania pełnej historii rozmowy przy każdym uruchomieniu Heartbeat.
- Ogranicz Heartbeat do godzin aktywności (czas lokalny).
Wartości domyślne
- Interwał:
30m. Zastosowanie wartości domyślnych dostawcy Anthropic zwiększa go do1h, gdy rozpoznanym trybem uwierzytelniania jest OAuth/token (w tym ponowne użycie Claude CLI), ale tylko wtedy, gdyheartbeat.everynie jest ustawione. Ustawagents.defaults.heartbeat.everylubagents.list[].heartbeat.everydla poszczególnych agentów; użyj0m, aby wyłączyć. - Treść monitu (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. - Limit czasu: tury Heartbeat bez ustawionej wartości używają
agents.defaults.timeoutSeconds, jeśli ją skonfigurowano. W przeciwnym razie używają interwału Heartbeat ograniczonego do 600 sekund. Ustawagents.defaults.heartbeat.timeoutSecondslubagents.list[].heartbeat.timeoutSecondsdla poszczególnych agentów, aby umożliwić dłuższą pracę Heartbeat. - Monit Heartbeat jest wysyłany dosłownie jako wiadomość użytkownika. Monit systemowy zawiera sekcję „Heartbeat” tylko wtedy, gdy Heartbeat jest włączony dla domyślnego agenta (a
includeSystemPromptSectionnie ma wartościfalse), a uruchomienie jest oznaczane wewnętrznie. - Gdy Heartbeat jest wyłączony przez
0m, zwykłe uruchomienia również pomijająHEARTBEAT.mdw kontekście inicjalizacyjnym, aby model nie widział instrukcji przeznaczonych wyłącznie dla Heartbeat. - Godziny aktywności (
heartbeat.activeHours) są sprawdzane w skonfigurowanej strefie czasowej. Poza tym przedziałem Heartbeat jest pomijany aż do następnego wywołania mieszczącego się w przedziale. - Heartbeat jest automatycznie odraczany, gdy praca Cron jest aktywna lub oczekuje w kolejce. Ustaw
heartbeat.skipWhenBusy: true, aby odraczać także agenta, gdy jego własny podagent powiązany z kluczem sesji lub zagnieżdżone ścieżki poleceń są zajęte; agenci równorzędni nie są już wstrzymywani tylko dlatego, że inny agent wykonuje pracę podagenta.
Do czego służy monit Heartbeat
Domyślny monit jest celowo ogólny:- Zadania w tle: „Uwzględnij zaległe zadania” zachęca agenta do przeglądania dalszych działań (skrzynki odbiorczej, kalendarza, przypomnień, pracy w kolejce) i zgłaszania pilnych spraw.
- Kontakt z człowiekiem: „Od czasu do czasu w ciągu dnia zapytaj swojego człowieka, jak się ma” zachęca do sporadycznej, krótkiej wiadomości „czy czegoś potrzebujesz?”, ale zapobiega wysyłaniu wiadomości w nocy dzięki użyciu skonfigurowanej lokalnej strefy czasowej (zobacz Strefa czasowa).
agents.defaults.heartbeat.prompt (lub agents.list[].heartbeat.prompt), która zostanie wysłana dosłownie.
Kontrakt odpowiedzi
- Jeśli nic nie wymaga uwagi, odpowiedz
HEARTBEAT_OK. - Uruchomienia Heartbeat mogą zamiast tego wywołać
heartbeat_respondznotify: false, aby nie wyświetlać aktualizacji, lub znotify: trueinotificationText, aby wysłać alert. Jeśli występuje ustrukturyzowana odpowiedź narzędzia, ma ona pierwszeństwo przed tekstowym rozwiązaniem zastępczym. - Podczas uruchomień Heartbeat OpenClaw traktuje
HEARTBEAT_OKjako potwierdzenie, gdy występuje ono na początku lub końcu odpowiedzi. Token zostaje usunięty, a odpowiedź odrzucona, jeśli pozostała treść ma ≤ackMaxCharsznaków (domyślnie: 300). - Jeśli
HEARTBEAT_OKwystępuje w środku odpowiedzi, nie jest traktowane w szczególny sposób. - W przypadku alertów nie dołączaj
HEARTBEAT_OK; zwróć wyłącznie tekst alertu.
HEARTBEAT_OK na początku lub końcu wiadomości jest usuwane i rejestrowane; wiadomość zawierająca wyłącznie HEARTBEAT_OK jest odrzucana.
Konfiguracja
Zakres i pierwszeństwo
agents.defaults.heartbeatokreśla globalne działanie Heartbeat.agents.list[].heartbeatjest nakładane na te ustawienia; jeśli dowolny agent ma blokheartbeat, Heartbeat uruchamiają tylko ci agenci.channels.defaults.heartbeatokreśla domyślne ustawienia widoczności dla wszystkich kanałów.channels.<channel>.heartbeatzastępuje wartości domyślne kanałów.channels.<channel>.accounts.<id>.heartbeat(kanały obsługujące wiele kont) zastępuje ustawienia poszczególnych kanałów.
Heartbeat dla poszczególnych agentów
Jeśli dowolny wpisagents.list[] zawiera blok heartbeat, Heartbeat uruchamiają tylko ci agenci. Blok poszczególnego agenta jest nakładany na agents.defaults.heartbeat (możesz więc raz ustawić wspólne wartości domyślne, a następnie zastępować je dla poszczególnych agentów).
Przykład: dwóch agentów, ale tylko drugi uruchamia Heartbeat.
Przykład godzin aktywności
Ogranicz Heartbeat do godzin pracy w określonej strefie czasowej:Konfiguracja całodobowa
Jeśli chcesz, aby Heartbeat działał przez cały dzień, użyj jednego z tych wzorców:- Całkowicie pomiń
activeHours(brak ograniczenia do przedziału czasowego; jest to zachowanie domyślne). - Ustaw przedział całodniowy:
activeHours: { start: "00:00", end: "24:00" }.
Przykład wielu kont
UżyjaccountId, aby wskazać konkretne konto w kanałach obsługujących wiele kont, takich jak Telegram:
Uwagi dotyczące pól
string
Interwał Heartbeat (ciąg czasu trwania; domyślna jednostka = minuty).
string
Opcjonalne zastąpienie modelu dla uruchomień Heartbeat (
provider/model).boolean
domyślnie:"false"
Po włączeniu dostarcza również oddzielną wiadomość
Thinking, gdy jest dostępna (w takim samym formacie jak /reasoning on).boolean
domyślnie:"false"
Wartość true powoduje, że uruchomienia Heartbeat używają lekkiego kontekstu inicjalizacyjnego i zachowują tylko
HEARTBEAT.md spośród plików inicjalizacyjnych przestrzeni roboczej.boolean
domyślnie:"false"
Wartość true powoduje, że każde uruchomienie Heartbeat odbywa się w nowej sesji bez wcześniejszej historii rozmowy. Używa tego samego wzorca izolacji co Cron
sessionTarget: "isolated". Znacznie zmniejsza koszt tokenów każdego uruchomienia Heartbeat. Połącz z lightContext: true, aby uzyskać maksymalne oszczędności. Kierowanie dostarczania nadal korzysta z kontekstu sesji głównej.boolean
domyślnie:"false"
Wartość true powoduje odraczanie uruchomień Heartbeat, gdy dodatkowe ścieżki danego agenta są zajęte: jego własny podagent powiązany z kluczem sesji lub zagnieżdżona praca poleceń. Ścieżki Cron zawsze odraczają Heartbeat, nawet bez tej flagi, dzięki czemu hosty modeli lokalnych nie uruchamiają jednocześnie monitów Cron i Heartbeat.
string
string
last: dostarcza do ostatnio używanego kanału zewnętrznego.- jawny kanał: dowolny skonfigurowany kanał lub identyfikator pluginu, na przykład
discord,matrix,telegramlubwhatsapp. none(domyślnie): uruchamia Heartbeat, ale nie dostarcza go na zewnątrz.
"allow" | "block"
domyślnie:"allow"
Steruje sposobem dostarczania bezpośredniego/przez DM.
allow: zezwala na bezpośrednie dostarczanie Heartbeat/przez DM. block: blokuje bezpośrednie dostarczanie/przez DM (reason=dm-blocked).string
Opcjonalne zastąpienie odbiorcy (identyfikator zależny od kanału, np. E.164 dla WhatsApp lub identyfikator czatu Telegram). W przypadku tematów/wątków Telegram użyj
<chatId>:topic:<messageThreadId>.string
Opcjonalny identyfikator konta dla kanałów obsługujących wiele kont. Gdy ustawiono
target: "last", identyfikator konta ma zastosowanie do ostatniego rozpoznanego kanału, jeśli obsługuje on konta; w przeciwnym razie jest ignorowany. Jeśli identyfikator konta nie odpowiada skonfigurowanemu kontu rozpoznanego kanału, dostarczenie zostaje pominięte.string
Zastępuje domyślną treść promptu (bez scalania).
boolean
domyślnie:"true"
Określa, czy wstrzykiwana jest sekcja
## Heartbeats promptu systemowego domyślnego agenta. Ustaw false, aby zachować działanie Heartbeat w czasie wykonywania (częstotliwość, dostarczanie, HEARTBEAT.md), pomijając instrukcje Heartbeat w prompcie systemowym agenta.number
domyślnie:"300"
Maksymalna liczba znaków dozwolona po
HEARTBEAT_OK przed dostarczeniem.boolean
Gdy wartość wynosi true, komunikaty ostrzegawcze o błędach narzędzi są pomijane podczas uruchomień Heartbeat.
number
domyślnie:"global timeout or min(every, 600)"
Maksymalna liczba sekund dozwolona na turę agenta Heartbeat przed jej przerwaniem. Pozostaw bez ustawienia, aby użyć
agents.defaults.timeoutSeconds, jeśli jest ustawione, a w przeciwnym razie częstotliwości Heartbeat ograniczonej do 600 sekund.object
Ogranicza uruchomienia Heartbeat do określonego przedziału czasu. Obiekt zawierający
start (HH:MM, włącznie; użyj 00:00 dla początku dnia), end (HH:MM, wyłącznie; 24:00 jest dozwolone dla końca dnia) oraz opcjonalne timezone.- Pominięte lub
"user": używaagents.defaults.userTimezone, jeśli jest ustawione, a w przeciwnym razie 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 jest nieprawidłowy, stosowane jest zachowanie"user"opisane powyżej. - Wartości
startiendnie mogą być równe dla aktywnego przedziału; równe wartości są traktowane jako przedział o zerowej szerokości (zawsze poza przedziałem). - Poza aktywnym przedziałem uruchomienia Heartbeat są pomijane do następnego taktu przypadającego wewnątrz przedziału.
Zachowanie dostarczania
Routing sesji i celu
Routing sesji i celu
- Heartbeat jest domyślnie uruchamiany w głównej sesji agenta (
agent:<id>:<mainKey>) lub wglobal, gdysession.scope = "global". Ustawsession, aby wskazać konkretną sesję kanału (Discord/WhatsApp/itp.). sessionwpływa wyłącznie na kontekst uruchomienia; dostarczaniem sterujątargetito.- Aby dostarczać do konkretnego kanału/odbiorcy, ustaw
target+to. Przytarget: "last"dostarczanie używa ostatniego zewnętrznego kanału dla tej sesji. - Dostarczenia Heartbeat domyślnie zezwalają na cele bezpośrednie/DM. Ustaw
directPolicy: "block", aby zablokować wysyłanie do celów bezpośrednich, nadal wykonując turę Heartbeat. - Jeśli główna kolejka, linia sesji docelowej, linia Cron lub aktywne zadanie Cron są zajęte, Heartbeat zostaje pominięty i ponowiony później.
- Jeśli ustawiono
skipWhenBusy: true, linie podagentów powiązane z kluczem sesji tego agenta oraz linie zagnieżdżone również odraczają uruchomienia Heartbeat. Zajęte linie innych agentów nie powodują odroczenia dla tego agenta. - Jeśli
targetnie zostanie rozpoznany jako żadne zewnętrzne miejsce docelowe, uruchomienie nadal następuje, ale żadna wiadomość wychodząca nie jest wysyłana.
Widoczność i pomijanie
Widoczność i pomijanie
- Jeśli
showOk,showAlertsiuseIndicatorsą wyłączone, uruchomienie zostaje od razu pominięte zreason=alerts-disabled. - Jeśli wyłączono tylko dostarczanie alertów, OpenClaw nadal może uruchomić Heartbeat, zaktualizować znaczniki czasu wymaganych zadań, przywrócić znacznik czasu bezczynności sesji i pominąć zewnętrzny ładunek alertu.
- Jeśli rozpoznany cel Heartbeat obsługuje wskaźnik pisania, OpenClaw wyświetla go podczas aktywnego uruchomienia Heartbeat. Używany jest ten sam cel, do którego Heartbeat wysłałby wiadomość czatu; funkcję wyłącza ustawienie
typingMode: "never".
Cykl życia sesji i audyt
Cykl życia sesji i audyt
- Odpowiedzi wyłącznie z Heartbeat nie utrzymują sesji aktywnej. Metadane Heartbeat mogą zaktualizować wiersz sesji, ale wygaśnięcie z powodu bezczynności używa
lastInteractionAtz ostatniej rzeczywistej wiadomości użytkownika/kanału, a wygaśnięcie dzienne używasessionStartedAt. - Historia w interfejsie sterowania i WebChat ukrywa prompty Heartbeat oraz potwierdzenia zawierające wyłącznie OK. Bazowy zapis sesji może nadal zawierać te tury na potrzeby audytu lub ponownego odtworzenia.
- Odłączone zadania w tle mogą dodać zdarzenie systemowe do kolejki i wybudzić Heartbeat, gdy główna sesja powinna szybko coś zauważyć. Takie wybudzenie nie zmienia uruchomienia Heartbeat w zadanie w tle.
Kontrola widoczności
Domyślnie potwierdzeniaHEARTBEAT_OK są pomijane, a treść alertów jest dostarczana. Możesz dostosować to dla każdego kanału lub konta:
Działanie poszczególnych flag
showOk: wysyła potwierdzenieHEARTBEAT_OK, gdy model zwróci odpowiedź zawierającą wyłącznie OK.showAlerts: wysyła treść alertu, gdy model zwróci odpowiedź inną niż OK.useIndicator: emituje zdarzenia wskaźnika dla powierzchni interfejsu prezentujących stan.
Przykłady ustawień dla kanału i konta
Typowe wzorce
HEARTBEAT.md (opcjonalnie)
Jeśli w przestrzeni roboczej istnieje plikHEARTBEAT.md, domyślny prompt nakazuje agentowi go odczytać. Traktuj go jako „listę kontrolną Heartbeat”: krótką, stabilną i bezpieczną do sprawdzania co 30 minut.
Podczas zwykłych uruchomień plik HEARTBEAT.md jest wstrzykiwany tylko wtedy, gdy wskazówki Heartbeat są włączone dla domyślnego agenta. Wyłączenie częstotliwości Heartbeat za pomocą 0m lub ustawienie includeSystemPromptSection: false powoduje pominięcie go w zwykłym kontekście inicjalizacji.
W natywnym środowisku Codex zawartość HEARTBEAT.md nie jest wstrzykiwana do tury tak jak inne pliki inicjalizacyjne. Jeśli plik istnieje i zawiera znaki inne niż białe, notatka trybu współpracy Heartbeat wskazuje Codex ten plik i nakazuje odczytać go przed kontynuowaniem.
Jeśli plik HEARTBEAT.md istnieje, ale jest faktycznie pusty (zawiera tylko puste wiersze, komentarze Markdown/HTML, nagłówki Markdown takie jak # Heading, znaczniki bloków kodu lub puste pozycje listy kontrolnej), OpenClaw pomija uruchomienie Heartbeat, aby ograniczyć wywołania API. Pominięcie jest raportowane jako reason=empty-heartbeat-file. Jeśli pliku brakuje, Heartbeat nadal zostaje uruchomiony, a model decyduje, co zrobić.
Plik powinien być bardzo krótki (krótka lista kontrolna lub przypomnienia), aby uniknąć nadmiernego rozrostu promptu.
Przykładowy plik HEARTBEAT.md:
Bloki tasks:
Plik HEARTBEAT.md obsługuje również mały, ustrukturyzowany blok tasks: przeznaczony do kontroli wykonywanych okresowo w ramach samego Heartbeat.
Przykład:
Działanie
Działanie
- OpenClaw analizuje blok
tasks:i sprawdza każde zadanie zgodnie z jego własnyminterval. - W prompcie Heartbeat dla danego taktu uwzględniane są tylko zadania, których termin nadeszedł.
- Jeśli termin żadnego zadania nie nadszedł, Heartbeat jest całkowicie pomijany (
reason=no-tasks-due), aby uniknąć zbędnego wywołania modelu. - Treść niezwiązana z zadaniami w pliku
HEARTBEAT.mdjest zachowywana i dołączana jako dodatkowy kontekst po liście wymaganych zadań. - Znaczniki czasu ostatniego uruchomienia zadań są przechowywane w stanie sesji (
heartbeatTaskState), dzięki czemu interwały zachowują się po zwykłych ponownych uruchomieniach. - Znaczniki czasu zadań są przesuwane dopiero po ukończeniu przez uruchomienie Heartbeat zwykłej ścieżki odpowiedzi. Pominięte uruchomienia
empty-heartbeat-file/no-tasks-duenie oznaczają zadań jako ukończonych.
Czy agent może aktualizować HEARTBEAT.md?
Tak — jeśli go o to poprosisz.HEARTBEAT.md jest zwykłym plikiem w przestrzeni roboczej agenta, dlatego możesz powiedzieć agentowi (na zwykłym czacie) na przykład:
- „Zaktualizuj
HEARTBEAT.md, dodając codzienną kontrolę kalendarza”. - „Przepisz
HEARTBEAT.md, aby był krótszy i skupiał się na dalszych działaniach dotyczących skrzynki odbiorczej”.
Ręczne wybudzenie (na żądanie)
Użyjopenclaw system event, aby dodać zdarzenie systemowe do kolejki i opcjonalnie natychmiast uruchomić Heartbeat:
Jeśli nie podano
--session-key, a wiele agentów ma skonfigurowany heartbeat, opcja --mode now natychmiast uruchamia Heartbeat każdego z tych agentów.
Powiązane elementy sterujące Heartbeat w tej samej grupie CLI:
Dostarczanie toku rozumowania (opcjonalnie)
Domyślnie Heartbeat dostarcza tylko końcowy ładunek „odpowiedzi”. Jeśli chcesz zapewnić przejrzystość, włącz:agents.defaults.heartbeat.includeReasoning: true
Thinking (w takim samym formacie jak /reasoning on). Może to być przydatne, gdy agent zarządza wieloma sesjami/instancjami Codex i chcesz wiedzieć, dlaczego zdecydował się wysłać Ci powiadomienie — może jednak ujawnić więcej wewnętrznych szczegółów, niż chcesz. W czatach grupowych najlepiej pozostawić tę opcję wyłączoną.
Świadomość kosztów
Heartbeat wykonuje pełne tury agenta. Krótsze interwały zużywają więcej tokenów. Aby zmniejszyć koszty:- Użyj
isolatedSession: true, aby uniknąć wysyłania pełnej historii konwersacji (zmniejszając liczbę tokenów z ok. 100 tys. do ok. 2–5 tys. na uruchomienie). - Użyj
lightContext: true, aby ograniczyć pliki inicjalizacyjne wyłącznie doHEARTBEAT.md. - Ustaw tańszy
model(np.ollama/llama3.2:1b). - Zachowaj niewielki rozmiar pliku
HEARTBEAT.md. - Użyj
target: "none", jeśli potrzebujesz tylko wewnętrznych aktualizacji stanu.
Przepełnienie kontekstu po Heartbeat
Po zakończeniu uruchomienia Heartbeat zachowuje istniejący model wykonawczy współdzielonej sesji, dlatego Heartbeat, który przełączył sesję na mniejszy model lokalny (na przykład model Ollama z oknem 32 tys. tokenów), może pozostawić ten model aktywny podczas następnej tury głównej sesji. Jeśli ta następna tura zgłosi przepełnienie kontekstu, a ostatni model wykonawczy sesji jest zgodny ze skonfigurowanymheartbeat.model, komunikat odzyskiwania OpenClaw wskazuje przeniesienie modelu Heartbeat jako prawdopodobną przyczynę i sugeruje rozwiązanie.
Aby temu zapobiec: użyj isolatedSession: true, aby uruchamiać Heartbeat w nowej sesji (opcjonalnie w połączeniu z lightContext: true, aby uzyskać najmniejszy możliwy prompt), albo wybierz model Heartbeat z oknem kontekstu wystarczająco dużym dla współdzielonej sesji.
Powiązane
- Automatyzacja — przegląd wszystkich mechanizmów automatyzacji
- Zadania w tle — sposób śledzenia odłączonych zadań
- Strefa czasowa — wpływ strefy czasowej na harmonogram Heartbeat
- Rozwiązywanie problemów — diagnozowanie problemów z automatyzacją