Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
Heartbeat czy cron? Zobacz Automatyzacja, aby uzyskać wskazówki, kiedy używać każdego z nich.
Szybki start (początkujący)
Wybierz rytm
Pozostaw włączone heartbeaty (domyślnie
30m albo 1h dla uwierzytelniania Anthropic OAuth/token, w tym ponownego użycia Claude CLI) lub ustaw własny rytm.Dodaj HEARTBEAT.md (opcjonalnie)
Utwórz małą listę kontrolną
HEARTBEAT.md albo blok tasks: w obszarze roboczym agenta.Zdecyduj, dokąd mają trafiać wiadomości heartbeat
target: "none" jest ustawieniem domyślnym; 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 heartbeaty do godzin aktywności (czasu lokalnego).
Domyślne ustawienia
- Interwał:
30m(albo1h, gdy wykrytym trybem uwierzytelniania jest Anthropic OAuth/token, w tym ponowne użycie Claude CLI). Ustawagents.defaults.heartbeat.everyalboagents.list[].heartbeat.everydla agenta; 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” tylko wtedy, gdy heartbeaty są włączone dla domyślnego agenta, a uruchomienie jest oznaczone wewnętrznie.
- Gdy heartbeaty są wyłączone przez
0m, zwykłe uruchomienia pomijają takżeHEARTBEAT.mdw kontekście startowym, aby model nie widział instrukcji przeznaczonych tylko dla heartbeat. - Godziny aktywności (
heartbeat.activeHours) są sprawdzane w skonfigurowanej strefie czasowej. Poza oknem heartbeaty są pomijane do następnego taktu wewnątrz okna. - Heartbeaty automatycznie odraczają się, gdy praca cron jest aktywna lub w kolejce. Ustaw
heartbeat.skipWhenBusy: true, aby również odraczać agenta przy jego własnym podagencie z kluczem sesji lub zagnieżdżonych ścieżkach 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: „Consider outstanding tasks” zachęca agenta do przejrzenia dalszych działań (skrzynka odbiorcza, kalendarz, przypomnienia, praca w kolejce) i zasygnalizowania wszystkiego, co pilne.
- Kontakt z człowiekiem: „Checkup sometimes on your human during day time” zachęca do okazjonalnej, lekkiej wiadomości „czy czegoś potrzebujesz?”, ale unika nocnego spamu, używając 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 obsługujące narzędzia mogą zamiast tego wywołać
heartbeat_respondznotify: falsedla braku widocznej aktualizacji albonotify: trueplusnotificationTextdla alertu. Jeśli występuje, strukturalna odpowiedź narzędzia ma pierwszeństwo przed tekstowym wariantem awaryjnym. - 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_OKpojawia się w środku odpowiedzi, nie jest traktowane specjalnie. - W przypadku alertów nie dołączaj
HEARTBEAT_OK; zwróć tylko tekst alertu.
HEARTBEAT_OK na początku/końcu wiadomości jest usuwane i logowane; wiadomość składająca się tylko z HEARTBEAT_OK jest odrzucana.
Konfiguracja
Zakres i pierwszeństwo
agents.defaults.heartbeatustawia globalne zachowanie heartbeat.agents.list[].heartbeatscala się na wierzchu; jeśli dowolny agent ma blokheartbeat, heartbeaty uruchamiają tylko ci agenci.channels.defaults.heartbeatustawia domyślną widoczność dla wszystkich kanałów.channels.<channel>.heartbeatzastępuje domyślne ustawienia kanałów.channels.<channel>.accounts.<id>.heartbeat(kanały wielokontowe) zastępuje ustawienia dla kanału.
Heartbeaty dla agenta
Jeśli dowolny wpisagents.list[] zawiera blok heartbeat, heartbeaty uruchamiają tylko ci agenci. Blok dla agenta scala się na wierzchu agents.defaults.heartbeat (dzięki czemu możesz raz ustawić wspólne ustawienia domyślne i nadpisywać je dla poszczególnych agentów).
Przykład: dwóch agentów, tylko drugi agent uruchamia heartbeaty.
Przykład godzin aktywności
Ogranicz heartbeaty do godzin pracy w konkretnej strefie czasowej:Konfiguracja 24/7
Jeśli chcesz, aby heartbeaty działały 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 wielokontowych, 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ść
Reasoning:, gdy jest dostępna (taki sam kształt jak /reasoning on).Gdy ma wartość true, uruchomienia heartbeat używają lekkiego kontekstu startowego i zachowują tylko
HEARTBEAT.md z plików startowych obszaru roboczego.Gdy ma wartość true, każdy heartbeat uruchamia się w świeżej sesji bez wcześniejszej historii rozmowy. Używa tego samego wzorca izolacji co cron
sessionTarget: "isolated". Dramatycznie zmniejsza koszt tokenów dla każdego heartbeat. Połącz z lightContext: true, aby uzyskać maksymalne oszczędności. Routing dostarczania nadal używa kontekstu sesji głównej.Gdy ma wartość true, uruchomienia heartbeat odraczają się na dodatkowych zajętych ścieżkach tego agenta: jego własnym podagencie z kluczem sesji lub zagnieżdżonej pracy poleceń. Ścieżki cron zawsze odraczają heartbeaty, 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 pluginu, na przykład
discord,matrix,telegramalbowhatsapp. none(domyślnie): uruchom heartbeat, ale nie dostarczaj na zewnątrz.
Kontroluje zachowanie dostarczania bezpośredniego/DM.
allow: zezwól na bezpośrednie/DM dostarczanie heartbeat. block: wycisz bezpośrednie/DM dostarczanie (reason=dm-blocked).Opcjonalne nadpisanie odbiorcy (identyfikator specyficzny dla kanału, np. E.164 dla WhatsApp albo identyfikator czatu Telegram). W przypadku tematów/wątków Telegram użyj
<chatId>:topic:<messageThreadId>.Opcjonalny identyfikator konta dla kanałów wielokontowych. Gdy
target: "last", identyfikator konta stosuje się do 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.Zastępuje domyślną treść promptu (bez scalania).
Maksymalna liczba znaków dozwolona po
HEARTBEAT_OK przed dostarczeniem.Gdy ma wartość true, pomija ładunki ostrzeżeń o błędach narzędzi podczas uruchomień Heartbeat.
Ogranicza uruchomienia Heartbeat do okna czasowego. Obiekt z polami
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 ustawiono, 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"powyżej. startiendnie mogą być równe dla aktywnego okna; równe wartości są traktowane jako zerowa szerokość (zawsze poza oknem).- Poza aktywnym oknem Heartbeat są pomijane do następnego taktu wewnątrz okna.
Zachowanie dostarczania
Sesja i routing celu
Sesja i routing celu
- Heartbeat domyślnie uruchamiają się w głównej sesji agenta (
agent:<id>:<mainKey>) albo wglobal, gdysession.scope = "global". Ustawsession, aby zastąpić to konkretną sesją kanału (Discord/WhatsApp/itd.). sessionwpływa tylko na kontekst uruchomienia; dostarczaniem sterujątargetito.- Aby dostarczyć do konkretnego kanału/odbiorcy, ustaw
target+to. Przytarget: "last"dostarczenie używa ostatniego zewnętrznego kanału dla tej sesji. - Dostarczenia Heartbeat domyślnie pozwalają na cele bezpośrednie/DM. Ustaw
directPolicy: "block", aby pominąć wysyłki do celów bezpośrednich, nadal wykonując turę Heartbeat. - Jeśli główna kolejka, tor sesji docelowej, tor Cron albo aktywne zadanie Cron są zajęte, Heartbeat jest pomijany i ponawiany później.
- Jeśli
skipWhenBusy: true, podagent tej sesji agenta kluczowany sesją oraz zagnieżdżone tory także odraczają uruchomienia Heartbeat. Zajęte tory innych agentów nie odraczają tego agenta. - Jeśli
targetnie rozwiąże się do żadnego zewnętrznego miejsca docelowego, uruchomienie nadal następuje, ale nie jest wysyłana żadna wiadomość wychodząca.
Widoczność i zachowanie pomijania
Widoczność i zachowanie pomijania
- Jeśli
showOk,showAlertsiuseIndicatorsą 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 pominąć zewnętrzny ładunek alertu.
- Jeśli rozpoznany cel Heartbeat obsługuje pisanie, 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ą aktualizować 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. - Interfejs sterowania i historia WebChat ukrywają prompty Heartbeat oraz potwierdzenia zawierające tylko OK. Bazowy transkrypt sesji nadal może zawierać te tury na potrzeby audytu/odtwarzania.
- Odłączone zadania w tle mogą dodać zdarzenie systemowe do kolejki i wybudzić Heartbeat, gdy główna sesja powinna szybko coś zauważyć. To wybudzenie nie sprawia, że uruchomienie Heartbeat staje się zadaniem w tle.
Kontrolki widoczności
Domyślnie potwierdzeniaHEARTBEAT_OK są pomijane, a treść alertów 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 na kanał i na konto
Typowe wzorce
| Cel | Konfiguracja |
|---|---|
| Zachowanie domyślne (ciche OK, alerty włączone) | (konfiguracja nie jest potrzebna) |
| Całkowicie cicho (bez wiadomości i 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 przestrzeni roboczej istnieje plikHEARTBEAT.md, domyślny prompt każe agentowi go przeczytać. Traktuj go jak swoją „listę kontrolną Heartbeat”: małą, stabilną i bezpieczną do dołączania co 30 minut.
Przy normalnych uruchomieniach HEARTBEAT.md jest wstrzykiwany tylko wtedy, gdy wskazówki Heartbeat są włączone dla domyślnego agenta. Wyłączenie rytmu Heartbeat za pomocą 0m albo ustawienie includeSystemPromptSection: false pomija go w normalnym kontekście startowym.
Jeśli HEARTBEAT.md istnieje, ale jest faktycznie pusty (tylko puste wiersze i nagłówki Markdown, takie jak # Heading), OpenClaw pomija uruchomienie Heartbeat, aby oszczędzić wywołania API. To pominięcie jest raportowane jako reason=empty-heartbeat-file. Jeśli pliku brakuje, Heartbeat nadal się uruchamia, a model decyduje, co zrobić.
Utrzymuj go bardzo małym (krótka lista kontrolna lub przypomnienia), aby uniknąć rozdęcia promptu.
Przykład HEARTBEAT.md:
Bloki tasks:
HEARTBEAT.md obsługuje też mały ustrukturyzowany blok tasks: dla 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. - Do promptu Heartbeat dla danego taktu są dołączane tylko zadania do wykonania.
- 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 dopiero po tym, jak uruchomienie Heartbeat zakończy 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 przestrzeni roboczej agenta, więc możesz powiedzieć agentowi (w normalnym czacie) na przykład:
- „Zaktualizuj
HEARTBEAT.md, aby dodać codzienną kontrolę kalendarza.” - „Przepisz
HEARTBEAT.md, żeby był krótszy i skupiał się na follow-upach w skrzynce odbiorczej.”
Ręczne wybudzenie (na żądanie)
Możesz dodać zdarzenie systemowe do kolejki i wyzwolić natychmiastowy Heartbeat za pomocą:heartbeat, ręczne wybudzenie uruchamia natychmiast każdy z tych Heartbeat agentów.
Użyj --mode next-heartbeat, aby poczekać na następny zaplanowany takt.
Dostarczanie rozumowania (opcjonalne)
Domyślnie Heartbeat dostarczają 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/kodexami i chcesz zobaczyć, dlaczego zdecydował się do Ciebie odezwać — ale może też ujawnić więcej wewnętrznych szczegółów, niż chcesz. W czatach grupowych lepiej pozostawić to wyłączone.
Świadomość kosztów
Heartbeat uruchamiają pełne tury agenta. Krótsze interwały zużywają więcej tokenów. Aby zmniejszyć koszt:- Użyj
isolatedSession: true, aby uniknąć wysyłania pełnej historii rozmowy (~100K tokenów do ~2-5K na uruchomienie). - Użyj
lightContext: true, aby ograniczyć pliki startowe 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 pozostawił 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 wykonawczy sesji z powrotem do skonfigurowanego modelu głównego. Komunikat resetu OpenClaw wskazuje to, gdy ostatni model wykonawczy pasuje do skonfigurowanegoheartbeat.model.
Obecne Heartbeat zachowują istniejący model wykonawczy współdzielonej sesji po zakończeniu uruchomienia. Nadal możesz użyć isolatedSession: true, aby uruchamiać Heartbeat 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 odłączona praca
- Strefa czasowa — jak strefa czasowa wpływa na planowanie Heartbeat
- Rozwiązywanie problemów — debugowanie problemów z automatyzacją