#Heartbeat configured but never triggers - how to debug?

1 messages · Page 1 of 1 (latest)

sinful veldt
#

Hi, my heartbeat is configured in openclaw.json but never sends any messages.

My setup:

  • OpenClaw running on WSL2 (Windows)
  • Telegram connected and working (can chat normally)
  • Heartbeat config:

"heartbeat": {
"every": "30m",
"target": "last",
"activeHours": { "start": "08:00", "end": "23:00" }
}

Gateway log shows [heartbeat] started sometimes, but no messages ever sent to Telegram or dashboard.

Any idea how to debug this?

umbral solarBOT
placid parcelBOT
#

To help others find answers, you can mark your question as solved via Right click solution message -> Apps -> ✅ Mark Solution

umbral solarBOT
craggy copperBOT
#

I think I see the big gotcha.

Your config shape is legacy now. Top-level "heartbeat": { ... } is no longer the right path. It should live under agents.defaults.heartbeat.

So you may be seeing the default 30m heartbeat start in logs, while your target: "last" and activeHours are effectively not being applied.

Use this shape instead:

{
  agents: {
    defaults: {
      userTimezone: "America/Chicago", // or your actual timezone
      heartbeat: {
        every: "30m",
        target: "last",
#
        activeHours: {
          start: "08:00",
          end: "23:00"
        }
      }
    }
  },
  channels: {
    telegram: {
      heartbeat: {
        showOk: true
      }
    }
  }
}
#

A couple more important heartbeat quirks:

  • HEARTBEAT_OK is silent by default. So even when heartbeat is working, Telegram usually gets no message unless there is an alert, unless you set channels.telegram.heartbeat.showOk: true.
  • On WSL2, activeHours can be confusing because it uses your configured/user timezone or host timezone. I’d set agents.defaults.userTimezone explicitly.
  • target: "last" uses the last external route for the heartbeat session (main session by default). If that session never got a Telegram route, use explicit target: "telegram" plus to: "<chatId>" while debugging.

I’d run these next:

openclaw --version
openclaw doctor --fix
openclaw system heartbeat last
openclaw status --all

Then check for skip reasons like:

  • quiet-hours
sinful veldt
#

Thank you for your reply. It helped me quickly find the problem.