-
-
Notifications
You must be signed in to change notification settings - Fork 69.1k
[Bug]: heartbeat.model config override not applied — heartbeats run on default model #30894
Description
Bug type
Behavior bug (incorrect output/state without crash)
Summary
The heartbeat.model config key is ignored. Heartbeats always run on the gateway's default model instead of the configured override.
Steps to reproduce
- Set
heartbeat.modelin config.yaml to a non-default model (e.g.anthropic/claude-3-5-haiku-20241022) - Set
defaultModelto a different model (e.g.anthropic/claude-opus-4-6) - Wait for a heartbeat cycle to trigger
- Check session_status or gateway logs for which model was used
Expected behavior
Heartbeat runs should use the model specified in heartbeat.model config, not the gateway default model.
Actual behavior
Heartbeat runs always use the defaultModel (e.g. claude-opus-4-6) regardless of the heartbeat.model setting. The config key appears to be read but never applied to the heartbeat session's model override.
OpenClaw version
2026.2.26 (bc50708)
Operating system
macOS 26.3 (Sequoia) arm64 — Mac mini M4
Install method
npm global
Logs, screenshots, and evidence
Impact and severity
Affected: All users who configure heartbeat.model to reduce costs
Severity: Medium (causes unnecessary spend on expensive models for lightweight heartbeat checks)
Frequency: 100% repro
Consequence: Heartbeats run on Opus-tier models instead of Haiku, burning ~10-20x more tokens per heartbeat cycle than intended
Additional information
First observed on 2026.2.26. Unknown if earlier versions are affected.
Workaround: Move heartbeat logic to lightweight gateway-health-only checks and use cron jobs with explicit model overrides for anything substantial. Cron job model overrides work correctly; only heartbeat.model is broken.
Relevant config snippet:
heartbeat:
model: anthropic/claude-3-5-haiku-20241022
interval: 60
activeHours: "07:00-23:00"
defaultModel: anthropic/claude-opus-4-6