Heartbeat (Gateway)
Heartbeat oder Cron? Siehe Automatisierung & Aufgaben für Hinweise dazu, wann welches verwendet werden sollte.Heartbeat führt periodische Agent-Turns in der Hauptsitzung aus, damit das Modell alles hervorheben kann, was Aufmerksamkeit braucht, ohne Sie zuzuspammen. Heartbeat ist ein geplanter Turn in der Hauptsitzung — er erstellt keine Datensätze für Hintergrundaufgaben. Aufgabendatensätze sind für entkoppelte Arbeit gedacht (ACP-Ausführungen, Subagents, isolierte Cron-Jobs). Fehlerbehebung: Geplante Aufgaben
Schnellstart (für Einsteiger)
- Lassen Sie Heartbeats aktiviert (Standard ist
30m, oder1hfür Anthropic-OAuth-/Token-Authentifizierung, einschließlich Wiederverwendung der Claude CLI) oder legen Sie Ihre eigene Kadenz fest. - Erstellen Sie eine kleine Checkliste
HEARTBEAT.mdoder einentasks:-Block im Agent-Workspace (optional, aber empfohlen). - Entscheiden Sie, wohin Heartbeat-Nachrichten gehen sollen (
target: "none"ist der Standard; setzen Sietarget: "last", um zum letzten Kontakt zu routen). - Optional: Aktivieren Sie die Zustellung von Heartbeat-Reasoning für mehr Transparenz.
- Optional: Verwenden Sie leichtgewichtigen Bootstrap-Kontext, wenn Heartbeat-Ausführungen nur
HEARTBEAT.mdbenötigen. - Optional: Aktivieren Sie isolierte Sitzungen, um zu vermeiden, dass bei jedem Heartbeat der vollständige Gesprächsverlauf gesendet wird.
- Optional: Beschränken Sie Heartbeats auf aktive Stunden (Ortszeit).
Standards
- Intervall:
30m(oder1h, wenn Anthropic-OAuth-/Token-Authentifizierung als Auth-Modus erkannt wird, einschließlich Wiederverwendung der Claude CLI). Setzen Sieagents.defaults.heartbeat.everyoder pro Agentagents.list[].heartbeat.every; verwenden Sie0m, um zu deaktivieren. - Prompt-Body (konfigurierbar über
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. - Der Heartbeat-Prompt wird wörtlich als Benutzernachricht gesendet. Der System- Prompt enthält einen Abschnitt „Heartbeat“, und die Ausführung wird intern markiert.
- Aktive Stunden (
heartbeat.activeHours) werden in der konfigurierten Zeitzone geprüft. Außerhalb des Fensters werden Heartbeats bis zum nächsten Tick innerhalb des Fensters übersprungen.
Wofür der Heartbeat-Prompt gedacht ist
Der Standard-Prompt ist absichtlich breit gehalten:- Hintergrundaufgaben: „Consider outstanding tasks“ veranlasst den Agenten, offene Nachverfolgungen (Posteingang, Kalender, Erinnerungen, eingereihte Arbeit) zu prüfen und alles Dringende hervorzuheben.
- Check-in beim Menschen: „Checkup sometimes on your human during day time“ veranlasst gelegentliche leichte Nachrichten wie „brauchst du etwas?“, vermeidet aber nächtlichen Spam durch Verwendung Ihrer konfigurierten lokalen Zeitzone (siehe /concepts/timezone).
agents.defaults.heartbeat.prompt (oder
agents.list[].heartbeat.prompt) auf einen benutzerdefinierten Body (wird wörtlich gesendet).
Antwortvertrag
- Wenn nichts Aufmerksamkeit braucht, antworten Sie mit
HEARTBEAT_OK. - 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 wird verworfen, wenn der verbleibende Inhalt ≤ackMaxCharsist (Standard: 300). - Wenn
HEARTBEAT_OKin der Mitte einer Antwort erscheint, wird es nicht speziell behandelt. - Bei Warnungen kein
HEARTBEAT_OKeinschließen; geben Sie nur den Warntext zurück.
HEARTBEAT_OK am Anfang/Ende einer Nachricht entfernt
und protokolliert; eine Nachricht, die nur aus HEARTBEAT_OK besteht, wird verworfen.
Konfiguration
Umfang und Priorität
agents.defaults.heartbeatsetzt globales Heartbeat-Verhalten.agents.list[].heartbeatwird darüber zusammengeführt; wenn irgendein Agent einenheartbeat-Block hat, führen nur diese Agents Heartbeats aus.channels.defaults.heartbeatsetzt Standardwerte für Sichtbarkeit auf allen Kanälen.channels.<channel>.heartbeatüberschreibt die Kanalstandards.channels.<channel>.accounts.<id>.heartbeat(Multi-Account-Kanäle) überschreibt pro Kanal-Account.
Heartbeats pro Agent
Wenn irgendein Eintrag inagents.list[] einen heartbeat-Block enthält, führen nur diese Agents
Heartbeats aus. Der Block pro Agent wird über agents.defaults.heartbeat
zusammengeführt (Sie können also gemeinsame Standards einmal setzen und pro Agent überschreiben).
Beispiel: zwei Agents, nur der zweite Agent führt Heartbeats aus.
Beispiel für aktive Stunden
Heartbeats auf Geschäftszeiten in einer bestimmten Zeitzone beschränken:24/7-Setup
Wenn Heartbeats den ganzen Tag laufen sollen, verwenden Sie eines dieser Muster:activeHoursganz weglassen (keine Einschränkung auf ein Zeitfenster; dies ist das Standardverhalten).- Ein ganztägiges Fenster setzen:
activeHours: { start: "00:00", end: "24:00" }.
start- und end-Zeit (zum Beispiel 08:00 bis 08:00).
Das wird als Fenster mit Nullbreite behandelt, sodass Heartbeats immer übersprungen werden.
Multi-Account-Beispiel
Verwenden SieaccountId, um einen bestimmten Account auf Multi-Account-Kanälen wie Telegram anzusprechen:
Hinweise zu den Feldern
every: Heartbeat-Intervall (Duration-String; Standardeinheit = Minuten).model: optionale Modellüberschreibung für Heartbeat-Ausführungen (provider/model).includeReasoning: wenn aktiviert, wird zusätzlich die separate NachrichtReasoning:zugestellt, sofern verfügbar (gleiche Form wie/reasoning on).lightContext: wenn true, verwenden Heartbeat-Ausführungen leichtgewichtigen Bootstrap-Kontext und behalten nurHEARTBEAT.mdaus den Workspace-Bootstrap-Dateien.isolatedSession: wenn true, läuft jeder Heartbeat in einer frischen Sitzung ohne vorherigen Gesprächsverlauf. Verwendet dasselbe Isolationsmuster wie CronsessionTarget: "isolated". Reduziert die Token-Kosten pro Heartbeat drastisch. Kombinieren Sie dies mitlightContext: truefür maximale Einsparungen. Das Zustellungsrouting verwendet weiterhin den Kontext der Hauptsitzung.session: optionaler Sitzungsschlüssel für Heartbeat-Ausführungen.main(Standard): Hauptsitzung des Agenten.- Expliziter Sitzungsschlüssel (kopieren aus
openclaw sessions --jsonoder der sessions CLI). - Formate von Sitzungsschlüsseln: siehe Sessions und Groups.
target:last: an den zuletzt verwendeten externen Kanal zustellen.- expliziter Kanal: jede konfigurierte Kanal- oder Plugin-ID, zum Beispiel
discord,matrix,telegramoderwhatsapp. none(Standard): den Heartbeat ausführen, aber nicht extern zustellen.
directPolicy: steuert das direkte/DM-Zustellungsverhalten:allow(Standard): direkte/DM-Heartbeat-Zustellung erlauben.block: direkte/DM-Zustellung unterdrücken (reason=dm-blocked).
to: optionale Empfängerüberschreibung (kanalspezifische ID, z. B. E.164 für WhatsApp oder eine Telegram-Chat-ID). Für Telegram-Topics/Threads verwenden Sie<chatId>:topic:<messageThreadId>.accountId: optionale Account-ID für Multi-Account-Kanäle. Beitarget: "last"gilt die Account-ID für den aufgelösten letzten Kanal, sofern dieser Accounts unterstützt; andernfalls wird sie ignoriert. Wenn die Account-ID nicht zu einem konfigurierten Account für den aufgelösten Kanal passt, wird die Zustellung übersprungen.prompt: überschreibt den Standard-Prompt-Body (wird nicht zusammengeführt).ackMaxChars: max. zulässige Zeichen nachHEARTBEAT_OKvor der Zustellung.suppressToolErrorWarnings: wenn true, werden Payloads mit Tool-Fehlerwarnungen während Heartbeat-Ausführungen unterdrückt.activeHours: beschränkt Heartbeat-Ausführungen auf ein Zeitfenster. Objekt mitstart(HH:MM, inklusiv; verwenden Sie00:00für Tagesanfang),end(HH:MM exklusiv;24:00ist für Tagesende erlaubt) und optionaltimezone.- Weggelassen oder
"user": verwendet Ihreagents.defaults.userTimezone, falls gesetzt, andernfalls die Host-Systemzeitzone. "local": verwendet immer die Host-Systemzeitzone.- Jede IANA-Kennung (z. B.
America/New_York): wird direkt verwendet; falls ungültig, wird auf das obige"user"-Verhalten zurückgegriffen. startundenddürfen für ein aktives Fenster nicht gleich sein; gleiche Werte werden als Nullbreite behandelt (immer außerhalb des Fensters).- Außerhalb des aktiven Fensters werden Heartbeats bis zum nächsten Tick innerhalb des Fensters übersprungen.
- Weggelassen oder
Zustellungsverhalten
- Heartbeats laufen standardmäßig in der Hauptsitzung des Agenten (
agent:<id>:<mainKey>), oder inglobal, wennsession.scope = "global"ist. Setzen Siesession, um auf eine bestimmte Kanalsitzung (Discord/WhatsApp/usw.) zu überschreiben. sessionbeeinflusst nur den Ausführungskontext; die Zustellung wird durchtargetundtogesteuert.- Um an einen bestimmten Kanal/Empfänger zuzustellen, setzen Sie
target+to. Mittarget: "last"verwendet die Zustellung den letzten externen Kanal für diese Sitzung. - Heartbeat-Zustellungen erlauben standardmäßig direkte/DM-Ziele. Setzen Sie
directPolicy: "block", um direkte Zielsendungen zu unterdrücken, während der Heartbeat-Turn dennoch läuft. - Wenn die Hauptwarteschlange beschäftigt ist, wird der Heartbeat übersprungen und später erneut versucht.
- Wenn
targetzu keinem externen Ziel aufgelöst wird, findet die Ausführung trotzdem statt, aber es wird keine ausgehende Nachricht gesendet. - Wenn
showOk,showAlertsunduseIndicatoralle deaktiviert sind, wird die Ausführung vorab alsreason=alerts-disabledübersprungen. - Wenn nur die Alarmzustellung deaktiviert ist, kann OpenClaw den Heartbeat dennoch ausführen, Zeitstempel fälliger Aufgaben aktualisieren, den Idle-Zeitstempel der Sitzung wiederherstellen und die nach außen gerichtete Alarm-Payload unterdrücken.
- Nur-Heartbeat-Antworten halten die Sitzung nicht aktiv; das letzte
updatedAtwird wiederhergestellt, sodass der Idle-Ablauf normal funktioniert. - Entkoppelte Hintergrundaufgaben können ein Systemereignis in die Warteschlange stellen und Heartbeat wecken, wenn die Hauptsitzung etwas schnell bemerken soll. Dieses Wecken macht die Heartbeat-Ausführung nicht zu einer Hintergrundaufgabe.
Sichtbarkeitssteuerung
Standardmäßig werden Bestätigungen mitHEARTBEAT_OK unterdrückt, während Alarm-Inhalt
zugestellt wird. Sie können dies pro Kanal oder pro Account anpassen:
Was jede Flagge macht
showOk: sendet eineHEARTBEAT_OK-Bestätigung, wenn das Modell eine reine OK-Antwort zurückgibt.showAlerts: sendet den Alarm-Inhalt, wenn das Modell eine Nicht-OK-Antwort zurückgibt.useIndicator: gibt Indikator-Ereignisse für UI-Statusoberflächen aus.
Beispiele pro Kanal vs. pro Account
Häufige Muster
| Ziel | Konfiguration |
|---|---|
| Standardverhalten (stille OKs, Alarme an) | (keine Konfiguration nötig) |
| Vollständig still (keine Nachrichten, kein Indikator) | 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 Workspace eine DateiHEARTBEAT.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 einzubeziehen.
Wenn HEARTBEAT.md existiert, aber faktisch leer ist (nur Leerzeilen und Markdown-
Überschriften wie # Heading), überspringt OpenClaw die Heartbeat-Ausführung, um API-Aufrufe zu sparen.
Dieser Skip wird als reason=empty-heartbeat-file gemeldet.
Wenn die Datei fehlt, läuft der Heartbeat trotzdem, und das Modell entscheidet, was zu tun ist.
Halten Sie sie klein (kurze Checkliste oder Erinnerungen), um Prompt-Aufblähung zu vermeiden.
Beispiel für HEARTBEAT.md:
tasks:-Blöcke
HEARTBEAT.md unterstützt außerdem einen kleinen strukturierten tasks:-Block für intervallbasierte
Prüfungen innerhalb des Heartbeats selbst.
Beispiel:
- OpenClaw parst den
tasks:-Block und prüft jede Aufgabe gegen ihr eigenesinterval. - 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 vergeudeten Modellaufruf zu vermeiden. - Nicht-Aufgaben-Inhalt in
HEARTBEAT.mdbleibt erhalten und wird nach der Liste fälliger Aufgaben als zusätzlicher Kontext angehängt. - Zeitstempel der letzten Ausführung pro Aufgabe werden im Sitzungsstatus (
heartbeatTaskState) gespeichert, sodass Intervalle normale Neustarts überstehen. - Aufgabenzeitstempel werden erst fortgeschrieben, nachdem eine Heartbeat-Ausführung ihren normalen Antwortpfad abgeschlossen hat. Übersprungene Ausführungen
empty-heartbeat-file/no-tasks-duemarkieren Aufgaben nicht als abgeschlossen.
Kann der Agent HEARTBEAT.md aktualisieren?
Ja — wenn Sie ihn dazu auffordern.
HEARTBEAT.md ist einfach eine normale Datei im Agent-Workspace, daher können Sie dem
Agenten (in einem normalen Chat) etwa Folgendes sagen:
- „Aktualisiere
HEARTBEAT.md, um eine tägliche Kalenderprüfung hinzuzufügen.“ - „Schreibe
HEARTBEAT.mdso um, dass sie kürzer ist und sich auf Nachverfolgungen im Posteingang konzentriert.“
HEARTBEAT.md ab — sie wird Teil des Prompt-Kontexts.
Manuelles Wecken (on-demand)
Sie können ein Systemereignis in die Warteschlange stellen und mit Folgendem einen sofortigen Heartbeat auslösen:heartbeat konfiguriert haben, führt ein manuelles Wecken die
Heartbeats jedes dieser Agents sofort aus.
Verwenden Sie --mode next-heartbeat, um bis zum nächsten geplanten Tick zu warten.
Zustellung von Reasoning (optional)
Standardmäßig stellen Heartbeats nur die finale „Antwort“-Payload zu. Wenn Sie Transparenz möchten, aktivieren Sie:agents.defaults.heartbeat.includeReasoning: true
Reasoning: zu (gleiche Form wie /reasoning on). Das kann nützlich sein, wenn der Agent
mehrere Sitzungen/Codexes verwaltet und Sie sehen möchten, warum er entschieden hat, Sie anzupingen
— es kann aber auch mehr interne Details preisgeben, als Sie möchten. Lassen Sie es
in Gruppenchats besser deaktiviert.
Kostenbewusstsein
Heartbeats führen vollständige Agent-Turns aus. Kürzere Intervalle verbrauchen mehr Tokens. Um Kosten zu senken:- Verwenden Sie
isolatedSession: true, um zu vermeiden, dass der vollständige Gesprächsverlauf gesendet wird (~100K Tokens auf ~2-5K pro Lauf). - Verwenden Sie
lightContext: true, um die Bootstrap-Dateien auf nurHEARTBEAT.mdzu begrenzen. - Setzen Sie ein günstigeres
model(z. B.ollama/llama3.2:1b). - Halten Sie
HEARTBEAT.mdklein. - Verwenden Sie
target: "none", wenn Sie nur interne Statusaktualisierungen möchten.
Verwandt
- Automatisierung & Aufgaben — alle Automatisierungsmechanismen auf einen Blick
- Hintergrundaufgaben — wie entkoppelte Arbeit nachverfolgt wird
- Timezone — wie die Zeitzone die Heartbeat-Planung beeinflusst
- Fehlerbehebung — Debugging von Automatisierungsproblemen