Heartbeat (Gateway)
Heartbeat vs. Cron? Siehe Cron vs Heartbeat für Hinweise, wann welches Verfahren zu verwenden ist.Heartbeat führt periodische Agent-Turns in der Hauptsitzung aus, damit das Modell alles, was Aufmerksamkeit erfordert, anzeigen kann, ohne Sie zu spammen. Fehlerbehebung: /automation/troubleshooting
Schnellstart (Anfänger)
- Lassen Sie Heartbeats aktiviert (Standard ist
30moder1hfür Anthropic OAuth/Setup-Token) oder legen Sie Ihre eigene Taktung fest. - Erstellen Sie eine kleine
HEARTBEAT.md-Checkliste im Agent-Workspace (optional, aber empfohlen). - Entscheiden Sie, wohin Heartbeat-Nachrichten gesendet werden sollen (
target: "last"ist der Standard). - Optional: Aktivieren Sie die Auslieferung der Heartbeat-Begründung für Transparenz.
- Optional: Beschränken Sie Heartbeats auf aktive Stunden (lokale Zeit).
Standardwerte
- Intervall:
30m(oder1h, wenn Anthropic OAuth/Setup-Token als Authentifizierungsmodus erkannt wird). Setzen Sieagents.defaults.heartbeat.everyoder pro Agentagents.list[].heartbeat.every; verwenden Sie0m, um zu deaktivieren. - Prompt-Text (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 wortgetreu als Benutzernachricht gesendet. Der System- Prompt enthält einen Abschnitt „Heartbeat“, und der Lauf wird intern gekennzeichnet.
- Aktive Stunden (
heartbeat.activeHours) werden in der konfigurierten Zeitzone geprüft. Außerhalb des Fensters werden Heartbeats übersprungen, bis der nächste Tick innerhalb des Fensters erfolgt. Außerhalb des Fensters werden Herzbeats übersprungen bis zum nächsten Häkchen im Fenster.
Wofür der Heartbeat-Prompt gedacht ist
Der Standard-Prompt ist absichtlich breit gefasst:- Hintergrundaufgaben: „Consider outstanding tasks“ veranlasst den Agenten, Nachverfolgungen (Posteingang, Kalender, Erinnerungen, Warteschlangenarbeit) zu prüfen und Dringendes hervorzuheben.
- Menschlicher Check-in: „Checkup sometimes on your human during day time“ regt gelegentliche, leichte „Brauchen Sie etwas?“-Nachrichten an, 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 Text (wortgetreu gesendet).
Antwortvertrag
- Wenn nichts Aufmerksamkeit erfordert, antworten Sie mit
HEARTBEAT_OK. - Während Heartbeat-Läufen 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. - Für Alarme nicht
HEARTBEAT_OKeinfügen; geben Sie nur den Alarmtext zurück.
HEARTBEAT_OK am Anfang/Ende einer Nachricht
entfernt und protokolliert; eine Nachricht, die nur aus HEARTBEAT_OK besteht, wird verworfen.
Konfiguration
Geltungsbereich und Priorität
agents.defaults.heartbeatlegt das globale Heartbeat-Verhalten fest.agents.list[].heartbeatwird darübergelegt; wenn irgendein Agent einenheartbeat-Block hat, führen nur diese Agenten Heartbeats aus.channels.defaults.heartbeatlegt Sichtbarkeits-Standardwerte für alle Kanäle fest.channels.<channel>.heartbeatüberschreibt Kanal-Standardwerte.channels.<channel>.accounts.<id>.heartbeat(Mehrkonten-Kanäle) überschreibt kanalweise Einstellungen.
Pro-Agent-Heartbeats
Wenn irgendeinagents.list[]-Eintrag einen heartbeat-Block enthält, führen
nur diese Agenten Heartbeats aus. Der Pro-Agent-Block wird über agents.defaults.heartbeat
gelegt (so können Sie gemeinsame Standardwerte einmal festlegen und pro Agent überschreiben).
Beispiel: zwei Agenten, nur der zweite Agent führt Heartbeats aus.
Beispiel für aktive Stunden
Beschränken Sie Heartbeats auf Geschäftszeiten in einer bestimmten Zeitzone:Beispiel für mehrere Konten
Verwenden SieaccountId, um ein bestimmtes Konto in Mehrkonten-Kanälen wie Telegram anzusprechen:
Feldnotizen
every: Heartbeat-Intervall (Dauerzeichenfolge; Standardeinheit = Minuten).model: optionale Modellüberschreibung für Heartbeat-Läufe (provider/model).includeReasoning: wenn aktiviert, wird auch die separateReasoning:-Nachricht ausgeliefert, sofern verfügbar (gleiche Form wie/reasoning on).session: optionaler Sitzungs-Schlüssel für Heartbeat-Läufe.main(Standard): Hauptsitzung des Agenten.- Expliziter Sitzungs-Schlüssel (kopieren Sie ihn aus
openclaw sessions --jsonoder der sessions CLI). - Sitzungs-Schlüsselformate: siehe Sessions und Groups.
target:last(Standard): Auslieferung an den zuletzt verwendeten externen Kanal.- Expliziter Kanal:
whatsapp/telegram/discord/googlechat/slack/msteams/signal/imessage. none: Heartbeat ausführen, aber nicht extern ausliefern.
to: optionale Empfängerüberschreibung (kanalspezifische ID, z. B. E.164 für WhatsApp oder eine Telegram-Chat-ID).accountId: optionale Konto-ID für Mehrkonten-Kanäle. Wenntarget: "last", gilt die Konto-ID für den aufgelösten letzten Kanal, sofern dieser Konten unterstützt; andernfalls wird sie ignoriert. Wenn die Konto-ID keinem konfigurierten Konto für den aufgelösten Kanal entspricht, wird die Auslieferung übersprungen.prompt: überschreibt den Standard-Prompt-Text (wird nicht zusammengeführt).ackMaxChars: maximale Zeichenanzahl, die nachHEARTBEAT_OKvor der Auslieferung erlaubt ist.activeHours: beschränkt Heartbeat-Läufe auf ein Zeitfenster. Objekt mitstart(HH:MM, inklusiv),end(HH:MM exklusiv;24:00für Tagesende zulässig) und optionaltimezone.- Weggelassen oder
"user": verwendet Ihreagents.defaults.userTimezone, falls gesetzt, andernfalls die Zeitzone des Host-Systems. "local": verwendet immer die Zeitzone des Host-Systems.- Beliebige IANA-Kennung (z. B.
America/New_York): wird direkt verwendet; bei Ungültigkeit fällt es auf das oben genannte"user"-Verhalten zurück. - Außerhalb des aktiven Fensters werden Heartbeats übersprungen, bis der nächste Tick innerhalb des Fensters erfolgt.
- Weggelassen oder
Auslieferungsverhalten
- Heartbeats laufen standardmäßig in der Hauptsitzung des Agenten (
agent:<id>:<mainKey>) oderglobal, wennsession.scope = "global". Setzen Siesession, um auf eine bestimmte Kanal-Sitzung (Discord/WhatsApp/etc.) sessionbeeinflusst nur den Laufkontext; die Auslieferung wird durchtargetundtogesteuert.- Um an einen bestimmten Kanal/Empfänger zu liefern, setzen Sie
target+to. Mittarget: "last"verwendet die Auslieferung den letzten externen Kanal für diese Sitzung. - Wenn die Hauptwarteschlange ausgelastet ist, wird der Heartbeat übersprungen und später erneut versucht.
- Wenn
targetzu keinem externen Ziel aufgelöst wird, findet der Lauf dennoch statt, aber es wird keine ausgehende Nachricht gesendet. - Nur-Heartbeat-Antworten halten die Sitzung nicht aktiv; der letzte
updatedAtwird wiederhergestellt, sodass das Leerlauf-Ablaufen normal erfolgt.
Sichtbarkeitssteuerungen
Standardmäßig werdenHEARTBEAT_OK-Bestätigungen unterdrückt, während Alarm-Inhalte
ausgeliefert werden. Sie können dies pro Kanal oder pro Konto anpassen:
Was jedes Flag bewirkt
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: erzeugt Indikator-Ereignisse für UI-Statusoberflächen.
Beispiele: Pro-Kanal vs. Pro-Konto
Häufige Muster
| Ziel | Konfiguration |
|---|---|
| Standardverhalten (stille OKs, Alarme an) | (keine Konfiguration erforderlich) |
| 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 eineHEARTBEAT.md-Datei existiert, weist der Standard-Prompt den
Agenten an, sie zu lesen. Denken Sie daran als Ihre „Heartbeat-Checkliste“: klein,
stabil und sicher, um sie alle 30 Minuten einzubinden.
Wenn HEARTBEAT.md existiert, aber faktisch leer ist (nur Leerzeilen und Markdown-
Überschriften wie # Heading), überspringt OpenClaw den Heartbeat-Lauf, um API-
Aufrufe zu sparen.
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 HEARTBEAT.md:
Kann der Agent HEARTBEAT.md aktualisieren?
Ja — wenn Sie ihn darum bitten.HEARTBEAT.md ist einfach eine normale Datei im Agent-Workspace, sodass Sie dem
Agenten (in einem normalen Chat) etwa Folgendes sagen können:
- „Aktualisiere
HEARTBEAT.md, um eine tägliche Kalenderprüfung hinzuzufügen.“ - „Schreibe
HEARTBEAT.mdneu, damit es kürzer ist und sich auf Posteingangs- Nachverfolgungen konzentriert.“
HEARTBEAT.md ab — es wird Teil des Prompt-Kontexts.
Manueller Weckruf (on-demand)
Sie können ein Systemereignis in die Warteschlange stellen und einen sofortigen Heartbeat auslösen mit:heartbeat konfiguriert haben, führt ein manueller Weckruf
jede dieser Agenten-Heartbeats sofort aus.
Verwenden Sie --mode next-heartbeat, um auf den nächsten geplanten Tick zu warten.
Auslieferung der Begründung (optional)
Standardmäßig liefern Heartbeats nur die finale „Antwort“-Nutzlast aus. Wenn Sie Transparenz wünschen, aktivieren Sie:agents.defaults.heartbeat.includeReasoning: true
Reasoning: (gleiche Form wie /reasoning on). Das kann nützlich sein, wenn der
Agent mehrere Sitzungen/Codizes verwaltet und Sie sehen möchten, warum er sich
entschieden hat, Sie anzupingen — kann aber auch mehr interne Details preisgeben,
als Ihnen lieb ist. Bevorzugen Sie, dies in Gruppenchats deaktiviert zu lassen.
Kostenbewusstsein
Heartbeats führen vollständige Agent-Turns aus. Kürzere Intervalle verbrauchen mehr Tokens. Halten SieHEARTBEAT.md klein und erwägen Sie ein günstigeres
model oder target: "none", wenn Sie nur interne Zustandsaktualisierungen wünschen.