OpenClaw heartbeat
What it does, what it costs, how to tune it
The heartbeat is the OpenClaw setting most people meet only when they see the bill. It is the reason an agent that nobody messaged still spent money overnight, and it is also the reason an agent can notice something and tell you before you ask. Understanding it is the difference between an agent that is cheap to keep and one you switch off.
What a heartbeat is
Every so often, the gateway runs an agent turn in the main session with no message from you: a poll. The agent looks at what it has been told to watch, decides whether anything needs attention, and either sends you a note or answers NO_REPLY, which stays hidden. Upstream, the default cadence is every 30 minutes, or every hour when the agent runs on Anthropic through OAuth.
It is scheduled by the same automations system as any other recurring job, so it needs automations enabled, and it is separate from the background tasks that run detached work. Edit the heartbeat settings, not the automation job it creates.
Why it costs money
A heartbeat is a real model call. Each one sends the agent’s instructions and, unless you tell it otherwise, the conversation history, and asks the model to think about it. At the default cadence that is 48 calls a day, and on a large model with a long history behind them, that is a bill for an agent that did nothing you asked. The cost calculator shows what a month of that looks like at live rates.
The four settings that tame it
- Cadence: the interval setting decides how often it polls, and setting it to zero minutes disables the recurring poll entirely while event-driven wakes still work.
- Light context: skip the workspace bootstrap files on heartbeat runs, so the poll reads its monitor notes and little else.
- Isolated session: a fresh session each run, so the whole conversation history is not sent again on every tick.
- Active hours: restrict polls to the hours you are awake, in your local time.
The target matters too. By default heartbeat notes go to the owner’s direct message and never to a group; you can point them at the most recent conversation instead, or keep them internal.
On Diali
Diali sets the cadence per plan, so the check-in frequency is a line on the pricing page next to the included credits, rather than a setting you discover by reading an invoice. The usage page then shows what the heartbeat actually spent, per agent and per model.
The honest summary
- Heartbeat is a feature, not a bug: it is how the agent works while you are away.
- It costs a model call per tick, and the history it sends is what makes the ticks expensive.
- Tune cadence, context and hours before you blame the model.
- On a hosted plan the cadence is decided for you and the spend is visible; on your own box, it is yours to set and yours to notice.
If you would rather not manage any of this, hosted OpenClaw runs it with the cadence set and the bill visible.
Stop reading about it, build one
Set up an agent, pick a channel, and have it working inside the app you already keep open.
