Heartbeat czy cron? Zobacz Automatyzacja, aby uzyskać wskazówki, kiedy używać każdego z nich.
Szybki start (początkujący)
Wybierz częstotliwość
Pozostaw Heartbeat włączony (domyślnie
30m albo 1h dla uwierzytelniania Anthropic OAuth/token, w tym ponownego użycia Claude CLI) albo ustaw własną częstotliwość.Dodaj HEARTBEAT.md (opcjonalnie)
Utwórz krótką listę kontrolną
HEARTBEAT.md albo blok tasks: w obszarze roboczym agenta.Zdecyduj, dokąd mają trafiać wiadomości Heartbeat
target: "none" jest wartością domyślną; ustaw target: "last", aby kierować je do ostatniego kontaktu.Opcjonalne dostrajanie
- Włącz dostarczanie rozumowania Heartbeat dla przejrzystości.
- Użyj lekkiego kontekstu startowego, jeśli uruchomienia Heartbeat potrzebują tylko
HEARTBEAT.md. - Włącz izolowane sesje, aby uniknąć wysyłania pełnej historii rozmowy przy każdym Heartbeat.
- Ogranicz Heartbeat do aktywnych godzin (czas lokalny).
Wartości domyślne
- Interwał:
30m(albo1h, gdy wykrytym trybem uwierzytelniania jest Anthropic OAuth/token, w tym ponowne użycie Claude CLI). Ustawagents.defaults.heartbeat.everyalboagents.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. - Limit czasu: tury Heartbeat bez ustawionej wartości używają
agents.defaults.timeoutSeconds, jeśli jest ustawione. W przeciwnym razie używają częstotliwości Heartbeat ograniczonej do 600 sekund. Ustawagents.defaults.heartbeat.timeoutSecondsalboagents.list[].heartbeat.timeoutSecondsdla dłuższej pracy Heartbeat. - Prompt Heartbeat jest wysyłany dosłownie jako wiadomość użytkownika. Prompt systemowy zawiera sekcję „Heartbeat” tylko wtedy, gdy Heartbeat jest włączony dla domyślnego agenta, a uruchomienie jest oznaczane wewnętrznie.
- Gdy Heartbeat jest wyłączony przez
0m, zwykłe uruchomienia pomijają takżeHEARTBEAT.mdw kontekście startowym, aby model nie widział instrukcji przeznaczonych tylko dla Heartbeat. - Aktywne godziny (
heartbeat.activeHours) są sprawdzane w skonfigurowanej strefie czasowej. Poza oknem Heartbeat jest pomijany do następnego tyknięcia wewnątrz okna. - Heartbeat automatycznie odkłada działanie, gdy praca cron jest aktywna albo w kolejce. Ustaw
heartbeat.skipWhenBusy: true, aby dodatkowo odkładać agenta przy jego własnych torach podagentów powiązanych kluczem sesji albo zagnieżdżonych poleceń; agenci równorzędni nie są już wstrzymywani tylko dlatego, że inny agent ma trwającą pracę podagenta.
Do czego służy prompt Heartbeat
Domyślny prompt jest celowo szeroki:- Zadania w tle: „Rozważ zaległe zadania” zachęca agenta do przejrzenia dalszych działań (skrzynka odbiorcza, kalendarz, przypomnienia, praca w kolejce) i wskazania wszystkiego, co pilne.
- Kontakt z człowiekiem: „Sprawdzaj czasem swojego człowieka w ciągu dnia” zachęca do okazjonalnej, lekkiej wiadomości „czy czegoś potrzebujesz?”, ale unika nocnego spamu dzięki użyciu skonfigurowanej lokalnej strefy czasowej (zobacz Strefa czasowa).
agents.defaults.heartbeat.prompt (albo agents.list[].heartbeat.prompt) na niestandardową treść (wysyłaną dosłownie).
Kontrakt odpowiedzi
- Jeśli nic nie wymaga uwagi, odpowiedz
HEARTBEAT_OK. - Uruchomienia Heartbeat z obsługą narzędzi mogą zamiast tego wywołać
heartbeat_respondznotify: falsedla braku widocznej aktualizacji albonotify: trueoraznotificationTextdla alertu. Gdy jest obecna, odpowiedź strukturalna narzędzia ma pierwszeństwo przed tekstową ścieżką awaryjną. - Podczas uruchomień Heartbeat OpenClaw traktuje
HEARTBEAT_OKjako potwierdzenie, gdy pojawia się na początku albo końcu odpowiedzi. Token jest usuwany, a odpowiedź odrzucana, jeśli pozostała treść ma ≤ackMaxChars(domyślnie: 300). - Jeśli
HEARTBEAT_OKpojawia się w środku odpowiedzi, nie jest traktowany specjalnie. - W przypadku alertów nie dołączaj
HEARTBEAT_OK; zwróć wyłącznie tekst alertu.
HEARTBEAT_OK na początku/końcu wiadomości jest usuwane i logowane; wiadomość zawierająca tylko HEARTBEAT_OK jest odrzucana.
Konfiguracja
Zakres i pierwszeństwo
agents.defaults.heartbeatustawia globalne zachowanie Heartbeat.agents.list[].heartbeatjest scalane na wierzchu; jeśli którykolwiek agent ma blokheartbeat, tylko ci agenci uruchamiają Heartbeat.channels.defaults.heartbeatustawia domyślną widoczność dla wszystkich kanałów.channels.<channel>.heartbeatzastępuje wartości domyślne kanału.channels.<channel>.accounts.<id>.heartbeat(kanały z wieloma kontami) zastępuje ustawienia dla kanału.
Heartbeat dla poszczególnych agentów
Jeśli jakikolwiek wpisagents.list[] zawiera blok heartbeat, tylko ci agenci uruchamiają Heartbeat. Blok dla agenta jest scalany na wierzchu agents.defaults.heartbeat (dzięki czemu możesz raz ustawić wspólne wartości domyślne i nadpisywać je per agent).
Przykład: dwóch agentów, tylko drugi agent uruchamia Heartbeat.
Przykład aktywnych godzin
Ogranicz Heartbeat do godzin pracy w konkretnej strefie czasowej:Konfiguracja 24/7
Jeśli chcesz, aby Heartbeat działał przez cały dzień, użyj jednego z tych wzorców:- Całkowicie pomiń
activeHours(brak ograniczenia oknem czasowym; to zachowanie domyślne). - Ustaw okno całodniowe:
activeHours: { start: "00:00", end: "24:00" }.
Przykład wielu kont
UżyjaccountId, aby wskazać konkretne konto w kanałach z wieloma kontami, takich jak Telegram:
Uwagi o polach
Interwał Heartbeat (ciąg czasu trwania; domyślna jednostka = minuty).
Opcjonalne nadpisanie modelu dla uruchomień Heartbeat (
provider/model).Gdy włączone, dostarcza także osobną wiadomość
Thinking, jeśli jest dostępna (ten sam kształt co /reasoning on).Gdy ustawione na true, uruchomienia Heartbeat używają lekkiego kontekstu startowego i zachowują tylko
HEARTBEAT.md z plików startowych obszaru roboczego.Gdy ustawione na true, każdy Heartbeat działa w świeżej sesji bez wcześniejszej historii rozmowy. Używa tego samego wzorca izolacji co cron
sessionTarget: "isolated". Znacząco zmniejsza koszt tokenów na każdy Heartbeat. Połącz z lightContext: true, aby uzyskać maksymalne oszczędności. Kierowanie dostarczania nadal używa kontekstu głównej sesji.Gdy ustawione na true, uruchomienia Heartbeat odkładają się przy dodatkowych zajętych torach tego agenta: jego własnej pracy podagenta powiązanej kluczem sesji albo pracy zagnieżdżonych poleceń. Tory cron zawsze odkładają Heartbeat, nawet bez tej flagi, więc hosty modeli lokalnych nie uruchamiają promptów cron i Heartbeat jednocześnie.
last: dostarcz do ostatnio używanego kanału zewnętrznego.- jawny kanał: dowolny skonfigurowany kanał albo identyfikator Plugin, na przykład
discord,matrix,telegramalbowhatsapp. none(domyślnie): uruchom Heartbeat, ale nie dostarczaj go zewnętrznie.
Kontroluje zachowanie dostarczania bezpośredniego/DM.
allow: zezwalaj na bezpośrednie/DM dostarczanie Heartbeat. block: wstrzymaj bezpośrednie/DM dostarczanie (reason=dm-blocked).Opcjonalne nadpisanie odbiorcy (identyfikator specyficzny dla kanału, np. E.164 dla WhatsApp albo identyfikator czatu Telegram). Dla tematów/wątków Telegram użyj
<chatId>:topic:<messageThreadId>.Opcjonalny identyfikator konta dla kanałów z wieloma kontami. Gdy
target: "last", identyfikator konta dotyczy rozpoznanego ostatniego kanału, jeśli obsługuje konta; w przeciwnym razie jest ignorowany. Jeśli identyfikator konta nie pasuje do skonfigurowanego konta dla rozpoznanego kanału, dostarczenie jest pomijane.Zastępuje domyślną treść promptu (bez scalania).
Maksymalna liczba znaków dozwolona po
HEARTBEAT_OK przed dostarczeniem.Gdy wartość to true, wycisza ładunki ostrzeżeń o błędach narzędzi podczas uruchomień Heartbeat.
Maksymalna liczba sekund dozwolona na turę agenta Heartbeat przed jej przerwaniem. Pozostaw nieustawione, aby użyć
agents.defaults.timeoutSeconds, gdy jest ustawione; w przeciwnym razie używana jest częstotliwość Heartbeat ograniczona do 600 sekund.Ogranicza uruchomienia Heartbeat do okna czasowego. Obiekt z
start (HH:MM, włącznie; użyj 00:00 dla początku dnia), end (HH:MM, wyłącznie; 24:00 dozwolone dla końca dnia) oraz opcjonalnym timezone.- Pominięte lub
"user": używaagents.defaults.userTimezone, jeśli jest ustawione; 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 jest nieprawidłowy, wraca do zachowania"user"opisanego powyżej. startiendnie mogą być równe dla aktywnego okna; równe wartości są traktowane jako okno o zerowej szerokości (zawsze poza oknem).- Poza aktywnym oknem Heartbeaty są pomijane do następnego taktu wewnątrz okna.
Zachowanie dostarczania
Routing sesji i celu
Routing sesji i celu
- Heartbeaty domyślnie działają w głównej sesji agenta (
agent:<id>:<mainKey>) albo wglobal, gdysession.scope = "global". Ustawsession, aby zastąpić to konkretną sesją kanału (Discord/WhatsApp/itp.). sessionwpływa tylko na kontekst uruchomienia; dostarczaniem sterujątargetito.- Aby dostarczyć 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 pozwalają na cele bezpośrednie/DM. Ustaw
directPolicy: "block", aby wyciszyć wysyłki do celów bezpośrednich, nadal uruchamiając turę Heartbeat. - Jeśli główna kolejka, linia sesji docelowej, linia Cron lub aktywne zadanie Cron jest zajęte, Heartbeat jest pomijany i ponawiany później.
- Jeśli
skipWhenBusy: true, podagent tej sesji agenta kluczowany sesją oraz zagnieżdżone linie także odraczają uruchomienia Heartbeat. Zajęte linie innych agentów nie odraczają tego agenta. - Jeśli
targetnie rozpozna żadnego zewnętrznego miejsca docelowego, uruchomienie nadal się odbywa, ale nie jest wysyłana żadna wiadomość wychodząca.
Widoczność i zachowanie pomijania
Widoczność i zachowanie pomijania
- Jeśli
showOk,showAlertsiuseIndicatorsą wszystkie wyłączone, uruchomienie jest pomijane z góry jakoreason=alerts-disabled. - Jeśli wyłączone jest tylko dostarczanie alertów, OpenClaw nadal może uruchomić Heartbeat, zaktualizować znaczniki czasu zadań do wykonania, przywrócić znacznik bezczynności sesji i wyciszyć zewnętrzny ładunek alertu.
- Jeśli rozpoznany cel Heartbeat obsługuje sygnalizowanie pisania, OpenClaw pokazuje pisanie, gdy uruchomienie Heartbeat jest aktywne. Używa to tego samego celu, do którego Heartbeat wysłałby wynik czatu, i jest wyłączane przez
typingMode: "never".
Cykl życia sesji i audyt
Cykl życia sesji i audyt
- Odpowiedzi wyłącznie Heartbeat nie utrzymują sesji przy życiu. Metadane Heartbeat mogą zaktualizować wiersz sesji, ale wygaśnięcie bezczynności używa
lastInteractionAtz ostatniej prawdziwej wiadomości użytkownika/kanału, a wygaśnięcie dzienne używasessionStartedAt. - Historia Control UI i WebChat ukrywa prompty Heartbeat oraz potwierdzenia zawierające tylko OK. Bazowy transkrypt sesji nadal może zawierać te tury do audytu/odtworzenia.
- Odłączone zadania w tle mogą dodać zdarzenie systemowe do kolejki i obudzić Heartbeat, gdy główna sesja powinna szybko coś zauważyć. To wybudzenie nie sprawia, że uruchomienie Heartbeat staje się zadaniem w tle.
Kontrole widoczności
Domyślnie potwierdzeniaHEARTBEAT_OK są wyciszane, a treść alertu jest dostarczana. Możesz dostosować to dla kanału lub konta:
Co robi każda flaga
showOk: wysyła potwierdzenieHEARTBEAT_OK, gdy model zwraca odpowiedź zawierającą tylko OK.showAlerts: wysyła treść alertu, gdy model zwraca odpowiedź inną niż OK.useIndicator: emituje zdarzenia wskaźnika dla powierzchni statusu UI.
Przykłady dla kanału i dla konta
Typowe wzorce
| Cel | Konfiguracja |
|---|---|
| Domyślne zachowanie (ciche OK, alerty włączone) | (konfiguracja nie jest potrzebna) |
| Pełna cisza (bez wiadomości, bez wskaźnika) | channels.defaults.heartbeat: { showOk: false, showAlerts: false, useIndicator: false } |
| Tylko wskaźnik (bez 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 mówi agentowi, aby go przeczytał. Traktuj go jak swoją „listę kontrolną Heartbeat”: małą, stabilną i bezpieczną do uwzględniania co 30 minut.
Podczas normalnych uruchomień 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 pomija go w normalnym kontekście bootstrap.
W natywnym harness Codex treść HEARTBEAT.md nie jest wstrzykiwana do tury. Jeśli plik istnieje i zawiera treść inną niż białe znaki, instrukcje trybu współpracy Heartbeat wskazują Codexowi plik i każą go przeczytać przed kontynuacją.
Jeśli HEARTBEAT.md istnieje, ale jest faktycznie pusty (tylko puste wiersze, komentarze Markdown/HTML, nagłówki Markdown takie jak # Heading, znaczniki bloków kodu lub puste szkielety listy kontrolnej), OpenClaw pomija uruchomienie Heartbeat, aby oszczędzać wywołania API. To pominięcie jest raportowane jako reason=empty-heartbeat-file. Jeśli pliku brakuje, Heartbeat nadal działa, a model decyduje, co zrobić.
Utrzymuj go bardzo małym (krótka lista kontrolna lub przypomnienia), aby uniknąć rozrostu promptu.
Przykład HEARTBEAT.md:
Bloki tasks:
HEARTBEAT.md obsługuje także mały strukturalny blok tasks: do kontroli opartych na interwałach wewnątrz samego Heartbeat.
Przykład:
Zachowanie
Zachowanie
- OpenClaw analizuje blok
tasks:i sprawdza każde zadanie względem jego własnegointerval. - Tylko zadania do wykonania są uwzględniane w prompcie Heartbeat dla danego taktu.
- Jeśli żadne zadania nie są do wykonania, Heartbeat jest całkowicie pomijany (
reason=no-tasks-due), aby uniknąć zmarnowanego wywołania modelu. - Treść niezwiązana z zadaniami w
HEARTBEAT.mdjest zachowywana i dołączana jako dodatkowy kontekst po liście zadań do wykonania. - Znaczniki czasu ostatniego uruchomienia zadań są przechowywane w stanie sesji (
heartbeatTaskState), więc interwały przetrwają normalne restarty. - Znaczniki czasu zadań są przesuwane tylko po tym, jak uruchomienie Heartbeat zakończy swoją normalną ścieżkę 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 to zwykły plik w obszarze roboczym agenta, więc możesz powiedzieć agentowi (w normalnym czacie) coś takiego:
- „Zaktualizuj
HEARTBEAT.md, aby dodać codzienną kontrolę kalendarza.” - „Przepisz
HEARTBEAT.md, żeby był krótszy i skupiony na działaniach następczych w skrzynce odbiorczej.”
Ręczne wybudzenie (na żądanie)
Możesz dodać zdarzenie systemowe do kolejki i wywołać natychmiastowy Heartbeat za pomocą:heartbeat, ręczne wybudzenie natychmiast uruchamia Heartbeat każdego z tych agentów.
Użyj --mode next-heartbeat, aby poczekać na następny zaplanowany takt.
Dostarczanie rozumowania (opcjonalne)
Domyślnie Heartbeaty dostarczają tylko końcowy ładunek „odpowiedzi”. Jeśli chcesz przejrzystości, włącz:agents.defaults.heartbeat.includeReasoning: true
Thinking (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. W czatach grupowych lepiej pozostawić to wyłączone.
Świadomość kosztów
Heartbeaty uruchamiają pełne tury agenta. Krótsze interwały zużywają więcej tokenów. Aby ograniczyć koszt:- Użyj
isolatedSession: true, aby uniknąć wysyłania pełnej historii rozmowy (~100 tys. tokenów do ~2-5 tys. na uruchomienie). - Użyj
lightContext: true, aby ograniczyć pliki bootstrap tylko doHEARTBEAT.md. - Ustaw tańszy
model(np.ollama/llama3.2:1b). - Utrzymuj
HEARTBEAT.mdmały. - Użyj
target: "none", jeśli chcesz tylko aktualizacji stanu wewnętrznego.
Przepełnienie kontekstu po Heartbeat
Jeśli Heartbeat wcześniej zostawił istniejącą sesję na mniejszym modelu lokalnym, na przykład modelu Ollama z oknem 32k, a następna tura głównej sesji zgłasza przepełnienie kontekstu, zresetuj model runtime sesji z powrotem do skonfigurowanego modelu głównego. Komunikat resetu OpenClaw wskazuje to, gdy ostatni model runtime pasuje do skonfigurowanegoheartbeat.model.
Obecne Heartbeaty zachowują istniejący model runtime współdzielonej sesji po zakończeniu uruchomienia. Nadal możesz użyć isolatedSession: true, aby uruchamiać Heartbeaty w świeżej sesji, połączyć to z lightContext: true dla najmniejszego promptu albo wybrać model Heartbeat z oknem kontekstu wystarczająco dużym dla współdzielonej sesji.
Powiązane
- Automatyzacja — wszystkie mechanizmy automatyzacji w skrócie
- Zadania w tle — jak śledzona jest praca odłączona
- Strefa czasowa — jak strefa czasowa wpływa na harmonogram Heartbeat
- Rozwiązywanie problemów — debugowanie problemów z automatyzacją