Hartslag (Gateway)
Heartbeat vs Cron? Zie Cron vs Heartbeat voor richtlijnen over wanneer je welke gebruikt.Heartbeat voert periodieke agent-beurten uit in de hoofdsessie, zodat het model alles kan signaleren dat aandacht nodig heeft zonder je te overspoelen. Problemen oplossen: /automation/troubleshooting
Snelle start (beginner)
- Laat heartbeats ingeschakeld (standaard is
30m, of1hvoor Anthropic OAuth/setup-token) of stel je eigen cadans in. - Maak een kleine
HEARTBEAT.md-checklist in de agent-werkruimte (optioneel maar aanbevolen). - Bepaal waar heartbeat-berichten naartoe moeten (
target: "last"is de standaard). - Optioneel: schakel levering van heartbeat-redenering in voor transparantie.
- Optioneel: beperk heartbeats tot actieve uren (lokale tijd).
Standaardwaarden
- Interval:
30m(of1hwanneer Anthropic OAuth/setup-token de gedetecteerde authenticatiemodus is). Stelagents.defaults.heartbeat.everyin of per agentagents.list[].heartbeat.every; gebruik0mom uit te schakelen. - Prompttekst (configureerbaar via
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. - De heartbeat-prompt wordt woordelijk als gebruikersbericht verzonden. De systeem- prompt bevat een sectie “Heartbeat” en de run wordt intern gemarkeerd.
- Actieve uren (
heartbeat.activeHours) worden gecontroleerd in de geconfigureerde tijdzone. Buiten het venster worden heartbeats overgeslagen tot de volgende tick binnen het venster.
Waar de heartbeat-prompt voor dient
De standaardprompt is bewust breed:- Achtergrondtaken: “Consider outstanding tasks” stimuleert de agent om openstaande opvolgingen (inbox, agenda, herinneringen, wachtrijen) te bekijken en alles urgents naar voren te brengen.
- Menselijke check-in: “Checkup sometimes on your human during day time” stimuleert een af en toe licht “heb je iets nodig?”-bericht, maar vermijdt nachtelijke spam door je geconfigureerde lokale tijdzone te gebruiken (zie /concepts/timezone).
agents.defaults.heartbeat.prompt (of
agents.list[].heartbeat.prompt) in op een aangepaste tekst (woordelijk verzonden).
Responscontract
- Als er niets aandacht nodig heeft, antwoord met
HEARTBEAT_OK. - Tijdens heartbeat-runs behandelt OpenClaw
HEARTBEAT_OKals een ack wanneer het aan het begin of einde van het antwoord verschijnt. De token wordt verwijderd en het antwoord wordt verworpen als de resterende inhoud ≤ackMaxChars(standaard: 300). - Als
HEARTBEAT_OKin het midden van een antwoord verschijnt, wordt het niet speciaal behandeld. - Voor waarschuwingen niet
HEARTBEAT_OKopnemen; retourneer alleen de waarschuwingstekst.
HEARTBEAT_OK aan het begin/einde van een
bericht verwijderd en gelogd; een bericht dat alleen HEARTBEAT_OK is, wordt
verworpen.
Config
Reikwijdte en prioriteit
agents.defaults.heartbeatstelt globaal heartbeat-gedrag in.agents.list[].heartbeatvoegt hier bovenop samen; als een agent eenheartbeat-blok heeft, draaien alleen die agents heartbeats.channels.defaults.heartbeatstelt zichtbaarheidsstandaarden in voor alle kanalen.channels.<channel>.heartbeatoverschrijft kanaalstandaarden.channels.<channel>.accounts.<id>.heartbeat(kanalen met meerdere accounts) overschrijft per-kanaalinstellingen.
Per-agent heartbeats
Als eenagents.list[]-item een heartbeat-blok bevat, draaien alleen die
agents heartbeats. Het per-agent-blok wordt samengevoegd bovenop agents.defaults.heartbeat
(zodat je gedeelde standaardwaarden één keer kunt instellen en per agent kunt
overschrijven).
Voorbeeld: twee agents, alleen de tweede agent draait heartbeats.
Voorbeeld actieve uren
Beperk heartbeats tot kantooruren in een specifieke tijdzone:Voorbeeld met meerdere accounts
GebruikaccountId om een specifiek account te targeten op kanalen met meerdere
accounts zoals Telegram:
Veld notities
every: heartbeat-interval (duurstring; standaardeenheid = minuten).model: optionele model-override voor heartbeat-runs (provider/model).includeReasoning: wanneer ingeschakeld, lever ook het aparteReasoning:-bericht wanneer beschikbaar (zelfde vorm als/reasoning on).session: optionele sessiesleutel voor heartbeat-runs.main(standaard): hoofdsessie van de agent.- Expliciete sessiesleutel (kopieer uit
openclaw sessions --jsonof de sessions CLI). - Formaten van sessiesleutels: zie Sessions en Groups.
target:last(standaard): lever aan het laatst gebruikte externe kanaal.- expliciet kanaal:
whatsapp/telegram/discord/googlechat/slack/msteams/signal/imessage. none: voer de heartbeat uit maar lever niet extern.
to: optionele ontvanger-override (kanaalspecifieke id, bijv. E.164 voor WhatsApp of een Telegram-chat-id).accountId: optionele account-id voor kanalen met meerdere accounts. Wanneertarget: "last", geldt de account-id voor het opgeloste laatste kanaal als dat accounts ondersteunt; anders wordt deze genegeerd. Als de account-id niet overeen- komt met een geconfigureerd account voor het opgeloste kanaal, wordt levering overgeslagen.prompt: overschrijft de standaardprompttekst (niet samengevoegd).ackMaxChars: maximaal toegestane tekens naHEARTBEAT_OKvóór levering.activeHours: beperkt heartbeat-runs tot een tijdvenster. Object metstart(HH:MM, inclusief),end(HH:MM exclusief;24:00toegestaan voor einde-van-de-dag), en optioneeltimezone.- Weggelaten of
"user": gebruikt jeagents.defaults.userTimezoneindien ingesteld, anders valt het terug op de tijdzone van het hostsysteem. "local": gebruikt altijd de tijdzone van het hostsysteem.- Elke IANA-identificatie (bijv.
America/New_York): direct gebruikt; bij ongeldig valt het terug op het"user"-gedrag hierboven. - Buiten het actieve venster worden heartbeats overgeslagen tot de volgende tick binnen het venster.
- Weggelaten of
Leveringsgedrag
- Heartbeats draaien standaard in de hoofdsessie van de agent (
agent:<id>:<mainKey>), ofglobalwanneersession.scope = "global". Stelsessionin om te overschrijven naar een specifieke kanaalsessie (Discord/WhatsApp/etc.). sessionbeïnvloedt alleen de runcontext; levering wordt geregeld doortargetento.- Om te leveren aan een specifiek kanaal/ontvanger, stel
target+toin. Mettarget: "last"gebruikt levering het laatste externe kanaal voor die sessie. - Als de hoofdqueue bezet is, wordt de heartbeat overgeslagen en later opnieuw geprobeerd.
- Als
targetnaar geen externe bestemming resolveert, vindt de run nog steeds plaats maar wordt er geen uitgaand bericht verzonden. - Alleen-heartbeat-antwoorden houden de sessie niet actief; de laatste
updatedAtwordt hersteld zodat idle-verval normaal werkt.
Zichtbaarheidsinstellingen
Standaard wordenHEARTBEAT_OK-acknowledgments onderdrukt terwijl waarschuwings-
inhoud wordt geleverd. Je kunt dit per kanaal of per account aanpassen:
Wat elke vlag doet
showOk: verstuurt eenHEARTBEAT_OK-acknowledgment wanneer het model een alleen-OK-antwoord retourneert.showAlerts: verstuurt de waarschuwingsinhoud wanneer het model een niet-OK- antwoord retourneert.useIndicator: genereert indicatorgebeurtenissen voor UI-statusoppervlakken.
Voorbeelden per kanaal vs per account
Veelvoorkomende patronen
| Doel | Config |
|---|---|
| Standaardgedrag (stille OK’s, alerts aan) | (geen configuratie nodig) |
| Volledig stil (geen berichten, geen indicator) | channels.defaults.heartbeat: { showOk: false, showAlerts: false, useIndicator: false } |
| Alleen indicator (geen berichten) | channels.defaults.heartbeat: { showOk: false, showAlerts: false, useIndicator: true } |
| OK’s alleen in één kanaal | channels.telegram.heartbeat: { showOk: true } |
HEARTBEAT.md (optioneel)
Als er eenHEARTBEAT.md-bestand in de werkruimte bestaat, instrueert de
standaardprompt de agent om het te lezen. Zie het als je “heartbeat-checklist”:
klein, stabiel en veilig om elke 30 minuten op te nemen.
Als HEARTBEAT.md bestaat maar effectief leeg is (alleen lege regels en
markdown-koppen zoals # Heading), slaat OpenClaw de heartbeat-run over om
API-aanroepen te besparen.
Als het bestand ontbreekt, draait de heartbeat nog
steeds en beslist het model wat te doen.
Houd het klein (korte checklist of herinneringen) om prompt-opblazing te vermijden.
Voorbeeld HEARTBEAT.md:
Kan de agent HEARTBEAT.md bijwerken?
Ja — als je dat vraagt.HEARTBEAT.md is gewoon een normaal bestand in de agent-werkruimte, dus je kunt
de agent (in een normale chat) iets zeggen als:
- “Werk
HEARTBEAT.mdbij om een dagelijkse agendacontrole toe te voegen.” - “Herschrijf
HEARTBEAT.mdzodat het korter is en gericht op inbox-opvolging.”
HEARTBEAT.md — het wordt onderdeel van de promptcontext.
Handmatige wake (on-demand)
Je kunt een systeemevent in de wachtrij plaatsen en een onmiddellijke heartbeat triggeren met:heartbeat hebben geconfigureerd, voert een handmatige wake
elk van die agent-heartbeats onmiddellijk uit.
Gebruik --mode next-heartbeat om te wachten op de volgende geplande tick.
Levering van redenering (optioneel)
Standaard leveren heartbeats alleen de uiteindelijke “antwoord”-payload. Als je transparantie wilt, schakel in:agents.defaults.heartbeat.includeReasoning: true
Reasoning: (zelfde vorm als /reasoning on). Dit kan nuttig zijn wanneer de
agent meerdere sessies/codexen beheert en je wilt zien waarom hij besloot je te
pingen — maar het kan ook meer interne details lekken dan je wilt. Houd het
bij voorkeur uit in groepschats.
Kostenbewustzijn
Heartbeats voeren volledige agent-beurten uit. Kortere intervallen verbruiken meer tokens. HoudHEARTBEAT.md klein en overweeg een goedkoper model of
target: "none" als je alleen interne statusupdates wilt.