GuidesRunning & maintaining

OpenClaw heartbeat: what your agent does every 30 minutes, and what it costs

Since OpenClaw 2 the heartbeat wakes your agent twice an hour and DMs you only when something needs attention. What the turn does, why it costs about five cents a day, and the keys that change or stop it.

September 5, 2026Updated September 8, 2026The Everpod team
The short answer

The heartbeat is a system-owned automation that wakes your agent for a full turn every 30 minutes by default (every hour when the agent signs in with Anthropic OAuth or reuses the Claude CLI’s login), asks it whether anything needs attention, and expects the answer NO_REPLY unless something does. Since OpenClaw 2 the alerts go to the owner’s direct message, which is why an agent you never scheduled anything for can suddenly DM you. It runs on the agent’s configured model, so it costs a small amount every half hour whether or not you talk to it: measured on a fresh install, about $0.0012 a turn on a cached model, roughly 48 turns and five cents a day, about $1.50 a month. Change the cadence with agents.defaults.heartbeat.every; "0m" stops the schedule.

What a heartbeat turn actually does

It is not a ping. The docs describe it as running “periodic agent turns in the main session so the model can surface anything that needs attention without spamming you,” and each turn is a real one: the agent gets the same system prompt as an ordinary message, with its workspace files, its tools and its memory, plus this verbatim instruction:

Follow the heartbeat monitor scratch context when provided. Recurring
tasks are automations; create or change their schedules with the
automations tool, not heartbeat scratch. Do not infer or repeat old tasks
from prior chats. If nothing needs attention, reply NO_REPLY.

So the agent is being asked, twice an hour, to look around and decide whether to speak. Most of the time it replies NO_REPLY and you never see the turn. When it judges something worth raising, the reply is delivered as an alert. The heartbeat does not create background task records, and it depends on automations being enabled: with cron.enabled: false there are no scheduled heartbeats at all. Recurring work you actually want done on a schedule belongs in an automation, which is what the prompt itself tells the agent.

Why OpenClaw 2 made it visible

The heartbeat existed in the 2026.7 line too, on by default at 30 minutes, but its delivery target was none: the turns ran and nobody heard from them. OpenClaw 2 changed the default to the owner. The current docs put it as alerts going to “the operator’s direct message by default,” resolved from commands.ownerAllowFrom or an explicit channel allowFrom. Quiet acknowledgements are suppressed; only alerts get through. If you upgraded and your agent has started sending you unprompted Telegram messages at odd hours, this is the mechanism, not a haunting.

What it costs, measured

Because every heartbeat is a full turn, it carries the full context. On a fresh install, that context was about 28k tokens a turn, most of it the system prompt and the tool schemas, before a word of conversation. With a model whose prompt cache applies, a turn cost between $0.0006 and $0.0015 in the provider’s own accounting. We watched the pairs land at 09:19 and 09:49 UTC, the 30-minute cadence exactly, at about $0.0012 each. That is 48 turns a day, roughly five cents, about $1.50 of a month’s usage spent before the owner says a word.

The multiplier to watch is the cache. The same 28k tokens on a route where the cache does not apply cost a cent or more per turn in our measurements, ten times the cached figure, and the heartbeat would pay that multiple 48 times a day. The model guide has the arithmetic; the short version is that the default model’s caching behaviour decides your idle cost more than the heartbeat interval does.

The levers

Everything lives under agents.defaults.heartbeat (or per agent under agents.entries.<id>.heartbeat); the docs are explicit that you edit this block, not the automation job it creates.

heartbeat.every            # "30m" default; "1h" on Anthropic OAuth; "0m" = no schedule
heartbeat.model            # a cheaper model just for heartbeats
heartbeat.isolatedSession  # true: a fresh session per run, ~2-5K tokens instead of ~100K (docs)
heartbeat.lightContext     # true: skip the workspace bootstrap files
heartbeat.activeHours      # { start: "09:00", end: "22:00" } to keep nights quiet

Three of those change the bill directly. A dedicated small model for heartbeats keeps your main conversations on the model you chose while the half-hourly check runs on something cheap. An isolated session drops the accumulated conversation from the turn; the docs’ own figure is a fall from around 100K tokens to 2 to 5K per run on a long session. And active hours simply stop the turns overnight. Setting every to "0m" removes the recurring schedule but keeps event-driven wakes available, so an automation or an inbound message can still prompt the agent to check in.

HEARTBEAT.md, if you have one

Older installs kept a HEARTBEAT.md in the workspace listing things to check on each beat. That file is retired. When you upgrade, the docs say to run openclaw doctor --fix once: it “converts every valid entry into an independently scheduled automation job” and removes the old block, which is the right home for recurring checks anyway. What doctor does covers the rest of that migration. After it, the heartbeat goes back to being what it is designed to be: a periodic question, not a to-do list.

Your own cloud agent, set up for you.

Everpod runs OpenClaw on a private, always-on computer of its own: set up, secured and backed up, with model usage included. You name your agent, and say hello about fifteen minutes later.

Create your agent

First month half price, then $29/mo · model usage included · cancel anytime

Wondering what you’d do with one? See what a cloud agent can do