Heartbeat oder cron? Unter Automatisierung finden Sie Hinweise dazu, wann welche Option verwendet werden sollte.
openclaw cron list --all als Heartbeat (agent-id) sichtbar). Die Heartbeat-Konfiguration bleibt die Eingabe für den gewünschten Zustand, während der persistierte Überwachungszeitplan den tatsächlichen Takt und die anschließende Abkühlphase des Runners bestimmt. Das Gateway übernimmt Konfigurationsänderungen beim Start und beim erneuten Laden der Konfiguration; openclaw doctor --fix kann fehlende oder veraltete Überwachungszeilen vor dem nächsten Gateway-Start anlegen. Bearbeiten Sie agents.*.heartbeat, nicht den cron-Auftrag.
Geplante Heartbeats erfordern cron. Wenn cron.enabled den Wert false oder OPENCLAW_SKIP_CRON=1 hat, protokolliert das Gateway beim Start eine Warnung und führt keine geplanten Heartbeats aus; manuelle und ereignisgesteuerte Heartbeat-Aktivierungen bleiben verfügbar. Es gibt keinen separaten Heartbeat-Ersatz-Timer.
Fehlerbehebung: Geplante Aufgaben
Schnellstart (Einsteiger)
1
Takt auswählen
Lassen Sie Heartbeats aktiviert (Standard ist
30m oder 1h, wenn die Anthropic-Authentifizierung per OAuth/Token konfiguriert ist, einschließlich der Wiederverwendung der Claude CLI), oder legen Sie einen eigenen Takt fest.2
Überwachungsnotizen hinzufügen (optional)
Speichern Sie mit
openclaw cron scratch <jobId> --set "..." eine kurze Checkliste in den Notizen der Heartbeat-Überwachung.3
Ziel für Heartbeat-Nachrichten festlegen
target: "none" ist der Standard; legen Sie target: "last" fest, um Nachrichten an den letzten Kontakt weiterzuleiten.4
Optionale Feinabstimmung
- Verwenden Sie einen schlanken Bootstrap-Kontext, wenn Heartbeat-Ausführungen nur die Überwachungsnotizen benö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).
Standardwerte
- Intervall:
30m. Durch Anwenden der Anthropic-Provider-Standardwerte wird dies 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.entries.*.heartbeat.everyfest; verwenden Sie zum Deaktivieren0m. - Prompt-Inhalt (über
agents.defaults.heartbeat.promptkonfigurierbar):Follow the heartbeat monitor scratch context when provided. Recurring tasks are cron jobs; create or change their schedules with cron tools or the openclaw cron CLI, not heartbeat scratch. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK. - Zeitüberschreitung: Heartbeat-Durchläufe ohne festgelegten Wert verwenden
agents.defaults.timeoutSeconds, sofern dieser Wert gesetzt ist. Andernfalls verwenden sie den Heartbeat-Takt, begrenzt auf 600 Sekunden. Legen Sie für längere Heartbeat-Arbeitenagents.defaults.heartbeat.timeoutSecondsoder agentenspezifischagents.entries.*.heartbeat.timeoutSecondsfest. - Der Heartbeat-Prompt wird unverändert als Benutzernachricht gesendet. Der System-Prompt enthält einen Abschnitt „Heartbeats“, wenn Heartbeats für den Standardagenten aktiviert sind, und die Ausführung wird intern entsprechend gekennzeichnet.
- Wenn Heartbeats mit
0mdeaktiviert werden, bleibt der cron-Überwachungsauftrag bestehen, wird jedoch deaktiviert. Seine Notizen bleiben erhalten, bis Sie den Takt wieder aktivieren. - Wenn cron selbst deaktiviert ist, werden geplante Heartbeats nicht ausgeführt, auch wenn der Heartbeat-Takt weiterhin aktiviert ist.
- Aktive Zeiten (
heartbeat.activeHours) werden in der konfigurierten Zeitzone geprüft. Außerhalb des Zeitfensters werden Heartbeats bis zum nächsten Takt innerhalb des Fensters übersprungen. - Heartbeats werden automatisch zurückgestellt, solange cron-Arbeiten aktiv sind oder sich in der Warteschlange befinden oder solange die sitzungsschlüsselgebundenen Subagenten- oder verschachtelten Befehls-Lanes dieses Agenten ausgelastet sind. Gleichgeordnete Agenten pausieren einander nicht.
Zweck des Heartbeat-Prompts
Der Standard-Prompt ist bewusst allgemein gehalten:- Hintergrundaufgaben: „Ausstehende Aufgaben berücksichtigen“ fordert den Agenten auf, Folgemaßnahmen zu prüfen (Posteingang, Kalender, Erinnerungen, Arbeiten in der Warteschlange) und auf dringende Punkte hinzuweisen.
- Nachfrage beim Menschen: „Gelegentlich tagsüber nach dem Menschen sehen“ regt zu einer gelegentlichen kurzen Nachricht wie „Benötigen Sie etwas?“ an, vermeidet jedoch durch Verwendung Ihrer konfigurierten lokalen Zeitzone nächtliche Nachrichtenfluten (siehe Zeitzone).
agents.defaults.heartbeat.prompt (oder agents.entries.*.heartbeat.prompt) auf einen benutzerdefinierten Inhalt fest (wird unverändert gesendet).
Antwortvertrag
- Wenn nichts beachtet werden muss, antworten Sie mit
HEARTBEAT_OK. - Heartbeat-Ausführungen 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ückfall. - Ein aussagekräftiges
heartbeat_respond-Ergebnis mitnotify: falsebleibt unsichtbar, wird jedoch als begrenzter interner Kontext für den nächsten Benutzerdurchlauf in dieser Sitzung gespeichert.no_change-Bestätigungen und sichtbare Benachrichtigungen werden nicht auf diese Weise gespeichert. - Während Heartbeat-Ausführungen behandelt OpenClaw
HEARTBEAT_OKals Bestätigung, wenn es am Anfang oder Ende der Antwort erscheint. Das Token wird entfernt und die Antwort verworfen, wenn der verbleibende Inhalt höchstens 300 Zeichen umfasst. - Wenn
HEARTBEAT_OKin der Mitte einer Antwort erscheint, wird es nicht besonders behandelt. - Fügen Sie bei Warnungen
HEARTBEAT_OKnicht ein; geben Sie ausschließlich den Warntext zurück.
HEARTBEAT_OK am Anfang oder Ende einer Nachricht entfernt und protokolliert; eine Nachricht, die nur aus HEARTBEAT_OK besteht, wird verworfen.
Konfiguration
Geltungsbereich und Rangfolge
agents.defaults.heartbeatlegt das globale Heartbeat-Verhalten fest.agents.entries.*.heartbeatwird darübergelegt; wenn ein Agent einenheartbeat-Block besitzt, führen nur diese Agenten Heartbeats aus.channels.defaults.heartbeatVisibilitylegt die Sichtbarkeitsstandards für alle Kanäle fest.channels.<channel>.heartbeatVisibilityüberschreibt die Kanalstandards.channels.<channel>.accounts.<id>.heartbeatVisibility(Kanäle mit mehreren Konten) überschreibt die kanalspezifischen Einstellungen.
Agentenspezifische Heartbeats
Wenn einagents.entries.*-Eintrag einen heartbeat-Block enthält, führen nur diese Agenten Heartbeats aus. Der agentenspezifische Block wird über agents.defaults.heartbeat gelegt (Sie können daher gemeinsame Standardwerte einmalig festlegen und sie für einzelne Agenten überschreiben).
Beispiel: zwei Agenten, wobei nur der zweite Agent Heartbeats ausführt.
Beispiel für aktive Zeiten
Beschränken Sie Heartbeats auf Geschäftszeiten in einer bestimmten Zeitzone:Einrichtung von 24/7
Wenn Heartbeats ganztägig 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 mit mehreren Konten
Verwenden SieaccountId, um auf Kanälen mit mehreren Konten wie Telegram ein bestimmtes Konto auszuwählen:
Feldhinweise
string
Heartbeat-Intervall (Zeitdauerzeichenfolge; Standardeinheit = Minuten).
string
Optionale Modellüberschreibung für Heartbeat-Ausführungen (
provider/model).boolean
Standard:"false"
Bei true verwenden Heartbeat-Ausführungen einen schlanken Bootstrap-Kontext und überspringen Workspace-Bootstrap-Dateien. Die Überwachungsnotizen werden in jedem Fall vom Heartbeat-Runner eingefügt.
boolean
Standard:"false"
Bei true wird jeder Heartbeat in einer neuen Sitzung ohne vorherigen Gesprächsverlauf ausgeführt. Verwendet dasselbe Isolationsmuster wie cron
sessionTarget: "isolated". 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.string
Optionaler Sitzungsschlüssel für Heartbeat-Ausführungen.
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.
string
last: an den zuletzt verwendeten externen Kanal zustellen.- Expliziter Kanal: eine beliebige konfigurierte Kanal- oder Plugin-ID, zum Beispiel
discord,matrix,telegramoderwhatsapp. none(Standard): den Heartbeat ausführen, aber nicht extern zustellen.
"allow" | "block"
Standard:"allow"
Steuert das Zustellungsverhalten für direkte Nachrichten/DMs.
allow: Heartbeat-Zustellung für direkte Nachrichten/DMs zulassen. block: Zustellung für direkte Nachrichten/DMs unterdrücken (reason=dm-blocked).string
Optionale Ü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>.string
Optionale 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.string
Überschreibt den standardmäßigen Prompt-Inhalt (wird nicht zusammengeführt).
number
Standard:"global timeout or min(every, 600)"
Maximale Anzahl von Sekunden, die ein Heartbeat-Agentendurchlauf dauern darf, bevor er abgebrochen wird. Lassen Sie dies ungesetzt, um
agents.defaults.timeoutSeconds zu verwenden, sofern festgelegt; andernfalls wird das Heartbeat-Intervall mit einer Obergrenze von 600 Sekunden verwendet.object
Beschrä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 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.- Beliebige IANA-Kennung (z. B.
America/New_York): wird direkt verwendet; ist sie ungültig, wird auf das oben beschriebene Verhalten von"user"zurückgegriffen. startundenddürfen für ein aktives Zeitfenster nicht gleich sein; gleiche Werte werden als Fenster mit einer Breite von null behandelt (immer außerhalb des Fensters).- Außerhalb des aktiven Zeitfensters werden Heartbeats bis zum nächsten Tick innerhalb des Fensters übersprungen.
Zustellungsverhalten
Sitzungs- und Zielrouting
Sitzungs- und Zielrouting
- Heartbeats werden standardmäßig in der Hauptsitzung des Agenten ausgeführt (
agent:<id>:<mainKey>) oder inglobal, wennsession.scope = "global". Legen Siesessionfest, um dies mit einer bestimmten Kanalsitzung (Discord/WhatsApp/usw.) zu überschreiben. sessionwirkt sich nur auf den Ausführungskontext aus; die Zustellung wird durchtargetundtogesteuert.- Um an einen bestimmten Kanal/Empfänger zuzustellen, legen Sie
target+tofest. Mittarget: "last"verwendet die Zustellung den letzten externen Kanal dieser Sitzung. - Heartbeat-Zustellungen lassen standardmäßig direkte Ziele/DM-Ziele zu. 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 Ziel-Sitzungsspur, die Cron-Spur oder ein aktiver Cron-Job ausgelastet ist, wird der Heartbeat übersprungen und später erneut versucht.
- Wenn
targetkein externes Ziel ergibt, wird der Durchlauf dennoch ausgeführt, aber keine ausgehende Nachricht gesendet.
Sichtbarkeits- und Überspringverhalten
Sichtbarkeits- und Überspringverhalten
- Wenn
showOk,showAlertsunduseIndicatoralle deaktiviert sind, wird der Durchlauf vorab alsreason=alerts-disabledübersprungen. - Wenn nur die Alarmzustellung deaktiviert ist, kann OpenClaw den Heartbeat dennoch ausführen, die Zeitstempel fälliger Aufgaben aktualisieren, den Leerlauf-Zeitstempel der Sitzung wiederherstellen und die nach außen gerichtete Alarmnutzlast unterdrücken.
- Wenn das ermittelte Heartbeat-Ziel Tippanzeigen unterstützt, zeigt OpenClaw während des aktiven Heartbeat-Durchlaufs eine Tippanzeige an. Dabei wird dasselbe Ziel verwendet, an das der Heartbeat Chat-Ausgaben senden würde; durch
typingMode: "never"wird dies deaktiviert.
Sitzungslebenszyklus und Audit
Sitzungslebenszyklus und Audit
- Reine Heartbeat-Antworten halten die Sitzung nicht aktiv. Heartbeat-Metadaten können die Sitzungszeile aktualisieren, für den Ablauf wegen Inaktivität wird jedoch
lastInteractionAtaus der letzten echten Benutzer-/Kanalnachricht verwendet und für den täglichen AblaufsessionStartedAt. - Der Verlauf in Control UI und WebChat blendet Heartbeat-Prompts und reine OK-Bestätigungen aus. Das zugrunde liegende Sitzungsprotokoll kann diese Durchläufe für Audit/Wiedergabe weiterhin enthalten.
- Abgekoppelte Hintergrundaufgaben können ein Systemereignis in die Warteschlange stellen und den Heartbeat aktivieren, wenn die Hauptsitzung schnell auf etwas aufmerksam werden soll. Diese Aktivierung macht den Heartbeat-Durchlauf nicht zu einer Hintergrundaufgabe.
Sichtbarkeitssteuerung
Standardmäßig werdenHEARTBEAT_OK-Bestätigungen unterdrückt, während Alarminhalte zugestellt werden. Sie können dies pro Kanal oder pro Konto anpassen:
Funktion der einzelnen Flags
showOk: sendet eineHEARTBEAT_OK-Bestätigung, wenn das Modell eine reine OK-Antwort zurückgibt.showAlerts: sendet den Alarminhalt, wenn das Modell eine andere als eine OK-Antwort zurückgibt.useIndicator: gibt Indikatorereignisse für UI-Statusoberflächen aus.
Beispiele für Einstellungen pro Kanal und pro Konto
Häufige Muster
Monitor-Notizen (optional)
Jeder Cron-Job des Heartbeat-Monitors besitzt ein privates Notizdokument, das in der gemeinsamen Zustandsdatenbank gespeichert ist. Betrachten Sie es als Ihre „Heartbeat-Checkliste“: klein, stabil und sicher alle 30 Minuten zu berücksichtigen. Wenn Notizen vorhanden sind, wird ihr Inhalt an den Heartbeat-Prompt angehängt. Verwalten Sie sie mit der Cron-CLI (die Job-ID stammt ausopenclaw cron list --all):
--expected-revision <n>, damit der Vorgang fehlschlägt, statt eine gleichzeitige Bearbeitung zu überschreiben. Die Notizen sind auf 256 KiB begrenzt und erscheinen niemals in der Ausgabe von cron list/cron runs.
Der Agent kann auch seine eigenen Notizen aktualisieren: Während eines Heartbeat-Durchlaufs akzeptiert heartbeat_respond eine optionale Zeichenfolge scratch, die die Notizen des Monitors für zukünftige Heartbeats vollständig ersetzt.
Migration von HEARTBEAT.md oder einem ausschließlich über die Konfiguration festgelegten Intervall? Führen Sie
openclaw doctor --fix aus. Doctor erstellt oder aktualisiert zunächst die systemeigenen Monitorzeilen anhand von agents.*.heartbeat, importiert dann die HEARTBEAT.md aus dem Arbeitsbereich jedes Agenten in die Notizen des Monitors, wandelt gültige ältere tasks:-Einträge in Cron-Jobs um, archiviert das Original im Zustandsverzeichnis (backups/heartbeat-migration/) und entfernt die Datei. Heartbeat-Anweisungen zur Laufzeit stammen ausschließlich aus den Datenbanknotizen; die Laufzeit liest HEARTBEAT.md niemals.# Heading, Fence-Markierungen oder leere Checklisten-Platzhalter), überspringt OpenClaw den Heartbeat-Durchlauf, um API-Aufrufe zu sparen. Dieses Überspringen wird als reason=empty-heartbeat-file gemeldet. Sind keine Notizen vorhanden, wird der Heartbeat dennoch ausgeführt und das Modell entscheidet, was zu tun ist.
Halten Sie sie knapp (kurze Checkliste oder Erinnerungen), um ein unnötiges Anwachsen des Prompts zu vermeiden.
Beispielnotizen:
Wiederkehrende Prüfungen mit Cron planen
Heartbeat-Notizen sind Prompt-Kontext und kein Zeitplaner. Erstellen Sie jede wiederkehrende Prüfung als Cron-Job, damit sie über ein eigenes Intervall, einen eigenen Aktivierungsstatus und einen eigenen Ausführungsverlauf verfügt. Cron-Jobs können weiterhin auf die Hauptsitzung abzielen, wenn für die Prüfung der normale Gesprächskontext verwendet werden soll. Ältere Notizen können einen strukturiertentasks:-Block enthalten. Führen Sie nach dem Upgrade einmal openclaw doctor --fix aus: Doctor wandelt jeden gültigen Eintrag in einen unabhängig geplanten Cron-Job um, behält sein Intervall und den vorherigen Zeitpunkt der letzten Ausführung bei und entfernt den eingestellten Block, während der umgebende Notiztext erhalten bleibt. Heartbeat-Durchläufe zur Laufzeit interpretieren tasks:-Text nicht als Zeitpläne.
Von Doctor erstellte Heartbeat-Aufgabenjobs behalten die aktiven Heartbeat-Zeiten sowie die Schutzmechanismen für Abkühlzeit, Überlastung und Auslastung bei. Gleichzeitig fällige Jobs können zu einem einzigen Heartbeat-Durchlauf zusammengefasst werden. Ein Vorkommen außerhalb der aktiven Zeiten wird übersprungen und beim nächsten Cron-Vorkommen erneut versucht.
Kann der Agent seine Notizen aktualisieren?
Ja. Während eines Heartbeat-Durchlaufs kann der Agent einenscratch-Wert an heartbeat_respond übergeben, um den Monitor-Text für zukünftige Heartbeats vollständig zu ersetzen. Sie können ihn auch in einem normalen Chat auffordern, openclaw cron scratch <jobId> --set ... auszuführen, oder die Notizen selbst mit demselben Befehl bearbeiten. Verwalten Sie wiederkehrende Zeitpläne mit Cron, statt Zeitplanersyntax in die Notizen zu schreiben.
Manuelle Aktivierung (bei Bedarf)
Verwenden Sieopenclaw system event, um ein Systemereignis in die Warteschlange zu stellen und optional sofort einen Heartbeat auszulösen:
Wenn kein
--session-key angegeben ist und für mehrere Agenten heartbeat konfiguriert ist, führt --mode now die Heartbeats all dieser Agenten sofort aus.
Zugehörige Heartbeat-Steuerelemente in derselben CLI-Gruppe:
Kostenbewusstsein
Heartbeats führen vollständige Agentendurchläufe aus. Kürzere Intervalle verbrauchen mehr Token. So lassen sich die Kosten reduzieren:- Verwenden Sie
isolatedSession: true, damit nicht der vollständige Konversationsverlauf gesendet wird (~100K Token werden auf ~2-5K pro Ausführung reduziert). - Verwenden Sie
lightContext: true, um Workspace-Bootstrap-Dateien bei Heartbeat-Ausführungen zu überspringen. - Legen Sie ein kostengünstigeres
modelfest (z. B.ollama/llama3.2:1b). - Halten Sie den temporären Monitorbereich klein.
- Verwenden Sie
target: "none", wenn Sie nur interne Statusaktualisierungen wünschen.
Kontextüberlauf nach einem Heartbeat
Heartbeats behalten nach Abschluss der Ausführung das vorhandene Laufzeitmodell der gemeinsam genutzten Sitzung bei. Daher kann ein Heartbeat, der eine Sitzung auf ein kleineres lokales Modell umgestellt hat (beispielsweise ein Ollama-Modell mit einem 32k-Kontextfenster), dieses Modell für den nächsten Durchlauf der Hauptsitzung aktiv lassen. Wenn dieser nächste Durchlauf dann einen Kontextüberlauf meldet und das zuletzt verwendete Laufzeitmodell der Sitzung mit dem konfiguriertenheartbeat.model übereinstimmt, nennt die Wiederherstellungsmeldung von OpenClaw die Übernahme des Heartbeat-Modells als wahrscheinliche Ursache und schlägt eine Korrektur vor.
So vermeiden Sie dies: Verwenden Sie isolatedSession: true, um Heartbeats in einer neuen Sitzung auszuführen (optional in Kombination 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 gemeinsam genutzte Sitzung ist.
Verwandte Themen
- Automatisierung – alle Automatisierungsmechanismen auf einen Blick
- Hintergrundaufgaben – wie abgekoppelte Arbeiten nachverfolgt werden
- Zeitzone – wie sich die Zeitzone auf die Heartbeat-Planung auswirkt
- Fehlerbehebung – Fehler bei der Automatisierung diagnostizieren