Gateway
Heartbeat
Heartbeat führt in der Hauptsitzung regelmäßige Agent-Durchläufe aus, damit das Modell auf alles aufmerksam machen kann, was Ihre Beachtung erfordert, ohne Sie mit Nachrichten zu überhäufen.
Heartbeat ist ein geplanter Durchlauf der Hauptsitzung – dabei werden keine Datensätze für Hintergrundaufgaben erstellt. Aufgabendatensätze sind für entkoppelte Arbeiten vorgesehen (ACP-Durchläufe, Subagenten, isolierte Cron-Aufträge).
Fehlerbehebung: Geplante Aufgaben
Schnellstart (für Einsteiger)
Intervall auswählen
Lassen Sie Heartbeats aktiviert (Standard ist 30m beziehungsweise 1h, wenn Anthropic-OAuth-/Token-Authentifizierung konfiguriert ist, einschließlich der Wiederverwendung der Claude CLI), oder legen Sie ein eigenes Intervall fest.
HEARTBEAT.md hinzufügen (optional)
Erstellen Sie im Agent-Arbeitsbereich eine kurze Checkliste in HEARTBEAT.md oder einen tasks:-Block.
Ziel für Heartbeat-Nachrichten festlegen
target: "none" ist die Standardeinstellung; legen Sie target: "last" fest, um Nachrichten an den letzten Kontakt weiterzuleiten.
Optionale Feinabstimmung
- Aktivieren Sie zur besseren Nachvollziehbarkeit die Übermittlung der Heartbeat-Begründung.
- Verwenden Sie einen schlanken Bootstrap-Kontext, wenn Heartbeat-Durchläufe nur
HEARTBEAT.mdbenötigen. - Aktivieren Sie isolierte Sitzungen, damit nicht bei jedem Heartbeat der vollständige Gesprächsverlauf gesendet wird.
- Beschränken Sie Heartbeats auf aktive Zeiten (Ortszeit).
Beispielkonfiguration:
{ agents: { defaults: { heartbeat: { every: "30m", target: "last", // explizite Zustellung an den letzten Kontakt (Standard ist "none") directPolicy: "allow", // Standard: Direkt-/DM-Ziele zulassen; zum Unterdrücken "block" festlegen lightContext: true, // optional: aus Bootstrap-Dateien nur HEARTBEAT.md einfügen isolatedSession: true, // optional: bei jedem Durchlauf neue Sitzung (kein Gesprächsverlauf) skipWhenBusy: true, // optional: auch zurückstellen, wenn Subagent- oder verschachtelte Ausführungsspuren dieses Agenten beschäftigt sind // activeHours: { start: "08:00", end: "24:00" }, // includeReasoning: true, // optional: zusätzlich separate `Thinking`-Nachricht senden }, }, },}Standardwerte
- Intervall:
30m. Beim Anwenden der Standardeinstellungen des Anthropic-Providers wird es auf1herhöht, wenn der ermittelte Authentifizierungsmodus OAuth/Token ist (einschließlich der Wiederverwendung der Claude CLI), jedoch nur, solangeheartbeat.everynicht festgelegt ist. Legen Sieagents.defaults.heartbeat.everyoder agentenspezifischagents.list[].heartbeat.everyfest; mit0mdeaktivieren Sie Heartbeat. - Prompt-Inhalt (über
agents.defaults.heartbeat.promptkonfigurierbar):Lies HEARTBEAT.md, falls die Datei existiert (Arbeitsbereichskontext). Befolge sie strikt. Leite keine alten Aufgaben aus früheren Chats ab und wiederhole sie nicht. Wenn nichts beachtet werden muss, antworte mit HEARTBEAT_OK. - Zeitüberschreitung: Heartbeat-Durchläufe ohne festgelegten Wert verwenden
agents.defaults.timeoutSeconds, sofern dieser Wert festgelegt ist. Andernfalls verwenden sie das Heartbeat-Intervall, begrenzt auf 600 Sekunden. Legen Sie für längere Heartbeat-Arbeitenagents.defaults.heartbeat.timeoutSecondsoder agentenspezifischagents.list[].heartbeat.timeoutSecondsfest. - Der Heartbeat-Prompt wird unverändert als Benutzernachricht gesendet. Der System-Prompt enthält nur dann einen Abschnitt „Heartbeats“, wenn Heartbeats für den Standard-Agenten aktiviert sind (und
includeSystemPromptSectionnichtfalseist); außerdem wird der Durchlauf intern gekennzeichnet. - Wenn Heartbeats mit
0mdeaktiviert sind, lassen normale DurchläufeHEARTBEAT.mdebenfalls aus dem Bootstrap-Kontext aus, damit das Modell keine ausschließlich für Heartbeat bestimmten Anweisungen sieht. - Aktive Zeiten (
heartbeat.activeHours) werden in der konfigurierten Zeitzone geprüft. Außerhalb des Zeitfensters werden Heartbeats bis zum nächsten Ausführungszeitpunkt innerhalb des Fensters übersprungen. - Heartbeats werden automatisch zurückgestellt, während Cron-Arbeiten aktiv sind oder in der Warteschlange stehen. Legen Sie
heartbeat.skipWhenBusy: truefest, um einen Agenten auch dann zurückzustellen, wenn sein eigener sitzungsschlüsselgebundener Subagent oder verschachtelte Befehlsausführungsspuren beschäftigt sind; nebengeordnete Agenten werden nicht mehr angehalten, nur weil ein anderer Agent laufende Subagent-Arbeiten hat.
Zweck des Heartbeat-Prompts
Der Standard-Prompt ist bewusst allgemein gehalten:
- Hintergrundaufgaben: „Ausstehende Aufgaben berücksichtigen“ veranlasst den Agenten, Folgevorgänge (Posteingang, Kalender, Erinnerungen, Arbeiten in der Warteschlange) zu prüfen und auf Dringendes hinzuweisen.
- Nachfrage beim Menschen: „Erkundigen Sie sich tagsüber gelegentlich bei Ihrem Menschen“ regt zu einer gelegentlichen kurzen Nachricht wie „Benötigen Sie etwas?“ an, vermeidet jedoch nächtliche Nachrichten durch Verwendung Ihrer konfigurierten lokalen Zeitzone (siehe Zeitzone).
Heartbeat kann auf abgeschlossene Hintergrundaufgaben reagieren, ein Heartbeat-Durchlauf selbst erstellt jedoch keinen Aufgabendatensatz.
Wenn ein Heartbeat etwas Bestimmtes tun soll (beispielsweise „Gmail-PubSub-Statistiken prüfen“ oder „Zustand des Gateways überprüfen“), legen Sie für agents.defaults.heartbeat.prompt (oder agents.list[].heartbeat.prompt) einen benutzerdefinierten Inhalt fest, der unverändert gesendet wird.
Antwortvertrag
- Wenn nichts beachtet werden muss, antworten Sie mit
HEARTBEAT_OK. - Heartbeat-Durchläufe können stattdessen
heartbeat_respondmitnotify: falseaufrufen, wenn keine sichtbare Aktualisierung erfolgen soll, odernotify: truezusammen mitnotificationTextfür eine Warnung. Falls vorhanden, hat die strukturierte Tool-Antwort Vorrang vor dem textbasierten Rückfallwert. - Während Heartbeat-Durchläufen behandelt OpenClaw
HEARTBEAT_OKals Bestätigung, wenn es am Anfang oder Ende der Antwort steht. Das Token wird entfernt und die Antwort verworfen, wenn der verbleibende Inhalt ≤ackMaxCharsist (Standard: 300). - Wenn
HEARTBEAT_OKin der Mitte einer Antwort vorkommt, wird es nicht besonders behandelt. - Fügen Sie bei Warnungen kein
HEARTBEAT_OKein; geben Sie nur den Warntext zurück.
Außerhalb von Heartbeats wird ein versehentlich am Anfang oder Ende einer Nachricht stehendes HEARTBEAT_OK entfernt und protokolliert; eine Nachricht, die ausschließlich aus HEARTBEAT_OK besteht, wird verworfen.
Konfiguration
{ agents: { defaults: { heartbeat: { every: "30m", // Standard: 30m (0m deaktiviert) model: "anthropic/claude-opus-4-6", includeReasoning: false, // Standard: false (separate Thinking-Nachricht zustellen, wenn verfügbar) lightContext: false, // Standard: false; bei true wird aus den Bootstrap-Dateien des Arbeitsbereichs nur HEARTBEAT.md beibehalten isolatedSession: false, // Standard: false; bei true läuft jeder Heartbeat in einer neuen Sitzung (kein Gesprächsverlauf) skipWhenBusy: false, // Standard: false; bei true wird auch auf Subagent-/verschachtelte Ausführungsspuren dieses Agenten gewartet target: "last", // Standard: none | Optionen: last | none | <channel id> (Kern oder Plugin, z. B. "imessage") to: "+15551234567", // optionale kanalspezifische Überschreibung accountId: "ops-bot", // optionale Kanal-ID für mehrere Konten prompt: "Lies HEARTBEAT.md, falls die Datei existiert (Arbeitsbereichskontext). Befolge sie strikt. Leite keine alten Aufgaben aus früheren Chats ab und wiederhole sie nicht. Wenn nichts beachtet werden muss, antworte mit HEARTBEAT_OK.", includeSystemPromptSection: true, // Standard: true; false lässt den System-Prompt-Abschnitt ## Heartbeats für den Standard-Agenten aus ackMaxChars: 300, // maximal zulässige Zeichenanzahl nach HEARTBEAT_OK }, }, },}Geltungsbereich und Vorrang
agents.defaults.heartbeatlegt das globale Heartbeat-Verhalten fest.agents.list[].heartbeatwird darübergelegt; wenn irgendein Agent einenheartbeat-Block besitzt, führen nur diese Agenten Heartbeats aus.channels.defaults.heartbeatlegt die Sichtbarkeitsstandardwerte für alle Kanäle fest.channels.<channel>.heartbeatüberschreibt die Kanalstandardwerte.channels.<channel>.accounts.<id>.heartbeat(Kanäle mit mehreren Konten) überschreibt die kanalspezifischen Einstellungen.
Agentenspezifische Heartbeats
Wenn irgendein Eintrag in agents.list[] einen heartbeat-Block enthält, führen nur diese Agenten Heartbeats aus. Der agentenspezifische Block wird über agents.defaults.heartbeat gelegt (Sie können gemeinsame Standardwerte also einmal festlegen und für einzelne Agenten überschreiben).
Beispiel: Zwei Agenten, nur der zweite Agent führt Heartbeats aus.
{ agents: { defaults: { heartbeat: { every: "30m", target: "last", // explizite Zustellung an den letzten Kontakt (Standard ist "none") }, }, list: [ { id: "main", default: true }, { id: "ops", heartbeat: { every: "1h", target: "whatsapp", to: "+15551234567", timeoutSeconds: 45, prompt: "Lies HEARTBEAT.md, falls die Datei existiert (Arbeitsbereichskontext). Befolge sie strikt. Leite keine alten Aufgaben aus früheren Chats ab und wiederhole sie nicht. Wenn nichts beachtet werden muss, antworte mit HEARTBEAT_OK.", }, }, ], },}Beispiel für aktive Zeiten
Beschränken Sie Heartbeats auf Geschäftszeiten in einer bestimmten Zeitzone:
{ agents: { defaults: { heartbeat: { every: "30m", target: "last", // explizite Zustellung an den letzten Kontakt (Standard ist "none") activeHours: { start: "09:00", end: "22:00", timezone: "America/New_York", // optional; verwendet userTimezone, falls festgelegt, andernfalls die Zeitzone des Hosts }, }, }, },}Außerhalb dieses Zeitfensters (vor 9 Uhr oder nach 22 Uhr Ostküstenzeit) werden Heartbeats übersprungen. Der nächste geplante Ausführungszeitpunkt innerhalb des Fensters wird normal ausgeführt.
Rund-um-die-Uhr-Konfiguration
Wenn Heartbeats den ganzen Tag ausgeführt werden sollen, verwenden Sie eines dieser Muster:
- Lassen Sie
activeHoursvollständig weg (keine Zeitfensterbeschränkung; dies ist das Standardverhalten). - Legen Sie ein ganztägiges Zeitfenster fest:
activeHours: { start: "00:00", end: "24:00" }.
Beispiel für mehrere Konten
Verwenden Sie accountId, um auf Kanälen mit mehreren Konten wie Telegram ein bestimmtes Konto anzusprechen:
{ agents: { list: [ { id: "ops", heartbeat: { every: "1h", target: "telegram", to: "12345678:topic:42", // optional: an ein bestimmtes Thema/einen bestimmten Thread weiterleiten accountId: "ops-bot", }, }, ], }, channels: { telegram: { accounts: { "ops-bot": { botToken: "YOUR_TELEGRAM_BOT_TOKEN" }, }, }, },}Hinweise zu den Feldern
everystringHeartbeat-Intervall (Zeitdauerzeichenfolge; Standardeinheit = Minuten).
modelstringOptionale Modellüberschreibung für Heartbeat-Durchläufe (provider/model).
includeReasoningbooleandefault: falseWenn aktiviert, wird auch die separate Thinking-Nachricht zugestellt, sofern verfügbar (dieselbe Struktur wie bei /reasoning on).
lightContextbooleandefault: falseWenn true, verwenden Heartbeat-Durchläufe einen schlanken Bootstrap-Kontext und behalten aus den Bootstrap-Dateien des Arbeitsbereichs nur HEARTBEAT.md bei.
isolatedSessionbooleandefault: falseWenn true, läuft jeder Heartbeat in einer neuen Sitzung ohne vorherigen Gesprächsverlauf. Verwendet dasselbe Isolationsmuster wie Cron mit sessionTarget: "isolated". Dies reduziert die Token-Kosten pro Heartbeat erheblich. Kombinieren Sie dies mit lightContext: true, um maximale Einsparungen zu erzielen. Die Zustellungsweiterleitung verwendet weiterhin den Kontext der Hauptsitzung.
skipWhenBusybooleandefault: falseWenn true, werden Heartbeat-Durchläufe bei zusätzlichen ausgelasteten Ausführungsspuren dieses Agenten zurückgestellt: seinem eigenen sitzungsschlüsselgebundenen Subagenten oder verschachtelten Befehlsarbeiten. Cron-Ausführungsspuren stellen Heartbeats auch ohne dieses Flag immer zurück, damit Hosts mit lokalen Modellen Cron- und Heartbeat-Prompts nicht gleichzeitig ausführen.
sessionstringOptionaler Sitzungsschlüssel für Heartbeat-Durchläufe.
main(Standard): Hauptsitzung des Agenten.- Expliziter Sitzungsschlüssel (aus
openclaw sessions --jsonoder der Sitzungs-CLI kopieren). - Formate für Sitzungsschlüssel: siehe Sitzungen und Gruppen.
targetstringlast: an den zuletzt verwendeten externen Kanal zustellen.- Expliziter Kanal: jeder konfigurierte Kanal oder jede Plugin-ID, beispielsweise
discord,matrix,telegramoderwhatsapp. none(Standard): Heartbeat ausführen, aber nicht extern zustellen.
directPolicy"allow" | "block"default: allowSteuert das Verhalten bei der Direkt-/DM-Zustellung. allow: Direkt-/DM-Zustellung von Heartbeats zulassen. block: Direkt-/DM-Zustellung unterdrücken (reason=dm-blocked).
tostringOptionale Überschreibung des Empfängers (kanalspezifische ID, z. B. E.164 für WhatsApp oder eine Telegram-Chat-ID). Verwenden Sie für Telegram-Themen/Threads <chatId>:topic:<messageThreadId>.
accountIdstringOptionale Konto-ID für Kanäle mit mehreren Konten. Bei target: "last" gilt die Konto-ID für den ermittelten letzten Kanal, sofern dieser Konten unterstützt; andernfalls wird sie ignoriert. Wenn die Konto-ID keinem konfigurierten Konto des ermittelten Kanals entspricht, wird die Zustellung übersprungen.
promptstringÜberschreibt den standardmäßigen Prompt-Inhalt (wird nicht zusammengeführt).
includeSystemPromptSectionbooleandefault: trueLegt fest, ob der System-Prompt-Abschnitt ## Heartbeats des Standard-Agenten eingefügt wird. Setzen Sie den Wert auf false, um das Heartbeat-Laufzeitverhalten (Intervall, Zustellung, HEARTBEAT.md) beizubehalten und gleichzeitig die Heartbeat-Anweisungen aus dem System-Prompt des Agenten wegzulassen.
ackMaxCharsnumberdefault: 300Maximale Anzahl der nach HEARTBEAT_OK vor der Zustellung zulässigen Zeichen.
suppressToolErrorWarningsbooleanUnterdrückt bei Aktivierung Warnmeldungs-Nutzlasten zu Tool-Fehlern während Heartbeat-Ausführungen.
timeoutSecondsnumberdefault: global timeout or min(every, 600)Maximale Anzahl von Sekunden, die ein Heartbeat-Agentendurchlauf dauern darf, bevor er abgebrochen wird. Lassen Sie den Wert ungesetzt, um agents.defaults.timeoutSeconds zu verwenden, sofern dieser Wert festgelegt ist; andernfalls wird das Heartbeat-Intervall auf höchstens 600 Sekunden begrenzt.
activeHoursobjectBeschränkt Heartbeat-Ausführungen auf ein Zeitfenster. Objekt mit start (HH:MM, einschließlich; verwenden Sie 00:00 für den Tagesbeginn), end (HH:MM, ausschließlich; 24:00 ist für das Tagesende zulässig) und optional timezone.
- Nicht angegeben oder
"user": Verwendet Ihre Einstellungagents.defaults.userTimezone, sofern festgelegt; andernfalls wird auf die Zeitzone des Hostsystems zurückgegriffen. "local": Verwendet immer die Zeitzone des Hostsystems.- Beliebiger IANA-Bezeichner (z. B.
America/New_York): Wird direkt verwendet; bei einem ungültigen Wert wird auf das oben beschriebene Verhalten von"user"zurückgegriffen. startundenddürfen für ein aktives Zeitfenster nicht gleich sein; gleiche Werte werden als Zeitfenster ohne Breite behandelt (immer außerhalb des Zeitfensters).- Außerhalb des aktiven Zeitfensters werden Heartbeats bis zum nächsten Tick innerhalb des Zeitfensters übersprungen.
Zustellungsverhalten
Sitzungs- und Zielweiterleitung
- Heartbeats werden standardmäßig in der Hauptsitzung des Agenten ausgeführt (
agent:<id>:<mainKey>) oder inglobal, wennsession.scope = "global"gilt. Legen Siesessionfest, um stattdessen eine bestimmte Kanalsitzung (Discord/WhatsApp usw.) zu verwenden. sessionwirkt sich nur auf den Ausführungskontext aus; die Zustellung wird durchtargetundtogesteuert.- Um an einen bestimmten Kanal/Empfänger zuzustellen, legen Sie
targetundtofest. Beitarget: "last"verwendet die Zustellung den letzten externen Kanal dieser Sitzung. - Heartbeat-Zustellungen erlauben standardmäßig direkte Ziele bzw. Direktnachrichtenziele. Legen Sie
directPolicy: "block"fest, um Sendungen an direkte Ziele zu unterdrücken, während der Heartbeat-Durchlauf weiterhin ausgeführt wird. - Wenn die Hauptwarteschlange, die Spur der Zielsitzung, die Cron-Spur oder ein aktiver Cron-Auftrag ausgelastet ist, wird der Heartbeat übersprungen und später erneut versucht.
- Bei
skipWhenBusy: trueverschieben auch die sitzungsschlüsselgebundenen Subagenten- und verschachtelten Spuren dieses Agenten Heartbeat-Ausführungen. Ausgelastete Spuren anderer Agenten führen bei diesem Agenten zu keiner Verschiebung. - Wenn
targetkein externes Ziel ergibt, wird der Durchlauf dennoch ausgeführt, aber keine ausgehende Nachricht gesendet.
Sichtbarkeit und Überspringverhalten
- Wenn
showOk,showAlertsunduseIndicatoralle deaktiviert sind, wird der Durchlauf von vornherein mitreason=alerts-disabledübersprungen. - Wenn nur die Zustellung von Warnungen deaktiviert ist, kann OpenClaw den Heartbeat dennoch ausführen, die Zeitstempel fälliger Aufgaben aktualisieren, den Leerlaufzeitstempel der Sitzung wiederherstellen und die nach außen gerichtete Warnungs-Nutzlast unterdrücken.
- Wenn das ermittelte Heartbeat-Ziel eine Tippanzeige unterstützt, zeigt OpenClaw während der aktiven Heartbeat-Ausführung eine Tippanzeige an. Dabei wird dasselbe Ziel verwendet, an das der Heartbeat seine Chat-Ausgabe senden würde; mit
typingMode: "never"wird dies deaktiviert.
Sitzungslebenszyklus und Audit
- Reine Heartbeat-Antworten halten die Sitzung nicht aktiv. Heartbeat-Metadaten können die Sitzungszeile aktualisieren, aber der Leerlaufablauf verwendet
lastInteractionAtaus der letzten tatsächlichen Benutzer-/Kanalnachricht und der tägliche Ablauf verwendetsessionStartedAt. - Der Verlauf in der Control UI und in WebChat blendet Heartbeat-Prompts und reine OK-Bestätigungen aus. Das zugrunde liegende Sitzungsprotokoll kann diese Durchläufe weiterhin für Audits/Wiederholungen enthalten.
- Losgelöste Hintergrundaufgaben können ein Systemereignis in die Warteschlange stellen und den Heartbeat aufwecken, wenn die Hauptsitzung schnell auf etwas aufmerksam gemacht werden soll. Dieses Aufwecken macht aus der Heartbeat-Ausführung keine Hintergrundaufgabe.
Sichtbarkeitssteuerung
Standardmäßig werden HEARTBEAT_OK-Bestätigungen unterdrückt, während Warnungsinhalte zugestellt werden. Sie können dies pro Kanal oder pro Konto anpassen:
channels: defaults: heartbeat: showOk: false # HEARTBEAT_OK ausblenden (Standard) showAlerts: true # Warnmeldungen anzeigen (Standard) useIndicator: true # Indikatorereignisse ausgeben (Standard) telegram: heartbeat: showOk: true # OK-Bestätigungen auf Telegram anzeigen whatsapp: accounts: work: heartbeat: showAlerts: false # Warnungszustellung für dieses Konto unterdrückenPriorität: pro Konto → pro Kanal → Kanalstandards → integrierte Standards.
Funktion der einzelnen Optionen
showOk: Sendet eineHEARTBEAT_OK-Bestätigung, wenn das Modell eine reine OK-Antwort zurückgibt.showAlerts: Sendet den Warnungsinhalt, wenn das Modell eine andere als eine OK-Antwort zurückgibt.useIndicator: Gibt Indikatorereignisse für UI-Statusoberflächen aus.
Wenn alle drei den Wert false haben, überspringt OpenClaw die Heartbeat-Ausführung vollständig (kein Modellaufruf).
Beispiele pro Kanal und pro Konto
channels: defaults: heartbeat: showOk: false showAlerts: true useIndicator: true slack: heartbeat: showOk: true # alle Slack-Konten accounts: ops: heartbeat: showAlerts: false # Warnungen nur für das Betriebskonto unterdrücken telegram: heartbeat: showOk: trueHäufige Muster
| Ziel | Konfiguration |
|---|---|
| Standardverhalten (stille OKs, Warnungen aktiv) | (keine Konfiguration erforderlich) |
| Vollständig still (keine Nachrichten/Indikatoren) | channels.defaults.heartbeat: { showOk: false, showAlerts: false, useIndicator: false } |
| Nur Indikator (keine Nachrichten) | channels.defaults.heartbeat: { showOk: false, showAlerts: false, useIndicator: true } |
| OKs nur in einem Kanal | channels.telegram.heartbeat: { showOk: true } |
HEARTBEAT.md (optional)
Wenn im Arbeitsbereich eine Datei HEARTBEAT.md vorhanden ist, weist der Standard-Prompt den Agenten an, sie zu lesen. Betrachten Sie sie als Ihre „Heartbeat-Checkliste“: klein, stabil und sicher genug, um sie alle 30 Minuten zu berücksichtigen.
Bei normalen Ausführungen wird HEARTBEAT.md nur eingefügt, wenn die Heartbeat-Anleitung für den Standard-Agenten aktiviert ist. Durch Deaktivieren des Heartbeat-Intervalls mit 0m oder Festlegen von includeSystemPromptSection: false wird sie aus dem normalen Bootstrap-Kontext weggelassen.
In der nativen Codex-Laufzeitumgebung wird der Inhalt von HEARTBEAT.md nicht wie andere Bootstrap-Dateien in den Durchlauf eingefügt. Wenn die Datei vorhanden ist und Inhalt enthält, der nicht nur aus Leerraum besteht, verweist ein Hinweis zum Heartbeat-Zusammenarbeitsmodus Codex auf die Datei und weist Codex an, sie vor dem Fortfahren zu lesen.
Wenn HEARTBEAT.md vorhanden, aber praktisch leer ist (nur Leerzeilen, Markdown-/HTML-Kommentare, Markdown-Überschriften wie # Heading, Begrenzungsmarkierungen oder leere Checklisten-Platzhalter), überspringt OpenClaw die Heartbeat-Ausführung, um API-Aufrufe einzusparen. Dieses Überspringen wird als reason=empty-heartbeat-file gemeldet. Wenn die Datei fehlt, wird der Heartbeat dennoch ausgeführt und das Modell entscheidet, was zu tun ist.
Halten Sie sie sehr klein (kurze Checkliste oder Erinnerungen), um ein Aufblähen des Prompts zu vermeiden.
Beispiel für HEARTBEAT.md:
# Heartbeat-Checkliste - Kurzer Überblick: Gibt es etwas Dringendes in den Posteingängen?- Wenn es tagsüber ist und nichts anderes ansteht, eine kurze, unkomplizierte Rückmeldung geben.- Wenn eine Aufgabe blockiert ist, notieren, _was fehlt_, und Peter beim nächsten Mal fragen.tasks:-Blöcke
HEARTBEAT.md unterstützt außerdem einen kleinen strukturierten tasks:-Block für intervallbasierte Prüfungen innerhalb des Heartbeats selbst.
Beispiel:
tasks: - name: inbox-triage interval: 30m prompt: "Nach dringenden ungelesenen E-Mails suchen und alles Zeitkritische kennzeichnen."- name: calendar-scan interval: 2h prompt: "Nach bevorstehenden Besprechungen suchen, die Vorbereitung oder Nachbereitung erfordern." # Zusätzliche Anweisungen - Warnungen kurz halten.- Wenn nach allen fälligen Aufgaben nichts beachtet werden muss, mit HEARTBEAT_OK antworten.Verhalten
- OpenClaw analysiert den
tasks:-Block und prüft jede Aufgabe anhand ihres eigeneninterval. - Nur fällige Aufgaben werden für diesen Tick in den Heartbeat-Prompt aufgenommen.
- Wenn keine Aufgaben fällig sind, wird der Heartbeat vollständig übersprungen (
reason=no-tasks-due), um einen unnötigen Modellaufruf zu vermeiden. - Inhalte in
HEARTBEAT.md, die nicht zu Aufgaben gehören, bleiben erhalten und werden nach der Liste der fälligen Aufgaben als zusätzlicher Kontext angefügt. - Die Zeitstempel der letzten Aufgabenausführung werden im Sitzungsstatus (
heartbeatTaskState) gespeichert, sodass die Intervalle normale Neustarts überstehen. - Aufgabenzeitstempel werden erst fortgeschrieben, nachdem eine Heartbeat-Ausführung ihren normalen Antwortpfad abgeschlossen hat. Übersprungene Ausführungen aufgrund von
empty-heartbeat-file/no-tasks-duemarkieren Aufgaben nicht als abgeschlossen.
Der Aufgabenmodus ist nützlich, wenn Sie mehrere regelmäßige Prüfungen in einer einzigen Heartbeat-Datei verwalten möchten, ohne bei jedem Tick für alle Prüfungen zu bezahlen.
Kann der Agent HEARTBEAT.md aktualisieren?
Ja – wenn Sie ihn darum bitten.
HEARTBEAT.md ist lediglich eine normale Datei im Arbeitsbereich des Agenten. Daher können Sie dem Agenten (in einem normalen Chat) beispielsweise Folgendes mitteilen:
- „Aktualisieren Sie
HEARTBEAT.md, um eine tägliche Kalenderprüfung hinzuzufügen.“ - „Überarbeiten Sie
HEARTBEAT.md, sodass die Datei kürzer ist und sich auf Nachfassaktionen im Posteingang konzentriert.“
Wenn dies proaktiv geschehen soll, können Sie außerdem eine ausdrückliche Zeile in Ihren Heartbeat-Prompt aufnehmen, beispielsweise: „Wenn die Checkliste veraltet ist, aktualisieren Sie HEARTBEAT.md mit einer besseren Version.“
Manuelles Aufwecken (bei Bedarf)
Verwenden Sie openclaw system event, um ein Systemereignis in die Warteschlange zu stellen und optional sofort einen Heartbeat auszulösen:
openclaw system event --text "Check for urgent follow-ups" --mode now| Option | Beschreibung |
|---|---|
--text <text> |
Text des Systemereignisses (erforderlich). |
--mode <mode> |
now führt sofort einen Heartbeat aus; next-heartbeat (Standard) wartet bis zum nächsten geplanten Tick. |
--session-key <sessionKey> |
Richtet das Ereignis an eine bestimmte Sitzung; standardmäßig wird die Hauptsitzung des Agenten verwendet. |
--json |
Gibt JSON aus. |
Wenn kein --session-key angegeben ist und für mehrere Agenten heartbeat konfiguriert wurde, führt --mode now die Heartbeats all dieser Agenten sofort aus.
Zugehörige Heartbeat-Steuerelemente in derselben CLI-Gruppe:
openclaw system heartbeat last # letztes Heartbeat-Ereignis anzeigenopenclaw system heartbeat enable # Heartbeats aktivierenopenclaw system heartbeat disable # Heartbeats deaktivierenZustellung von Schlussfolgerungen (optional)
Standardmäßig liefern Heartbeats nur die abschließende „Antwort“-Nutzlast.
Wenn Sie Transparenz wünschen, aktivieren Sie:
agents.defaults.heartbeat.includeReasoning: true
Wenn diese Option aktiviert ist, liefern Heartbeats außerdem eine separate Nachricht mit dem Präfix Thinking (im selben Format wie bei /reasoning on). Dies kann hilfreich sein, wenn der Agent mehrere Sitzungen/Codex-Instanzen verwaltet und Sie nachvollziehen möchten, warum er sich bei Ihnen gemeldet hat. Es kann jedoch auch mehr interne Details preisgeben, als Sie möchten. Lassen Sie diese Option in Gruppenchats vorzugsweise deaktiviert.
Kostenbewusstsein
Heartbeats führen vollständige Agent-Durchläufe aus. Kürzere Intervalle verbrauchen mehr Tokens. So reduzieren Sie die Kosten:
- Verwenden Sie
isolatedSession: true, damit nicht der vollständige Gesprächsverlauf gesendet wird (Reduzierung von etwa 100.000 Tokens auf etwa 2.000–5.000 pro Durchlauf). - Verwenden Sie
lightContext: true, um die Bootstrap-Dateien aufHEARTBEAT.mdzu beschränken. - Legen Sie ein günstigeres
modelfest (z. B.ollama/llama3.2:1b). - Halten Sie
HEARTBEAT.mdklein. - Verwenden Sie
target: "none", wenn Sie nur interne Statusaktualisierungen wünschen.
Kontextüberlauf nach einem Heartbeat
Heartbeats behalten nach Abschluss des Durchlaufs das bestehende Laufzeitmodell der gemeinsamen Sitzung bei. Daher kann ein Heartbeat, der eine Sitzung auf ein kleineres lokales Modell umgestellt hat (beispielsweise ein Ollama-Modell mit einem Kontextfenster von 32.000 Tokens), dieses Modell für den nächsten Durchlauf der Hauptsitzung beibehalten. Wenn dieser nächste Durchlauf daraufhin einen Kontextüberlauf meldet und das letzte Laufzeitmodell der Sitzung dem konfigurierten heartbeat.model entspricht, nennt die Wiederherstellungsnachricht von OpenClaw das Übergreifen des Heartbeat-Modells als wahrscheinliche Ursache und schlägt eine Lösung vor.
Um dies zu vermeiden, verwenden Sie isolatedSession: true, damit Heartbeats in einer neuen Sitzung ausgeführt werden (optional zusammen mit lightContext: true für den kleinstmöglichen Prompt), oder wählen Sie ein Heartbeat-Modell mit einem Kontextfenster, das groß genug für die gemeinsame Sitzung ist.
Verwandte Themen
- Automatisierung – alle Automatisierungsmechanismen auf einen Blick
- Hintergrundaufgaben – wie entkoppelte Arbeit nachverfolgt wird
- Zeitzone – wie sich die Zeitzone auf die Heartbeat-Planung auswirkt
- Fehlerbehebung – Fehlerdiagnose bei Automatisierungsproblemen