Description
When configuring multiple agents with different heartbeat intervals, the per-agent heartbeat.every configuration is ignored. All agents appear to heartbeat together when the main agent's heartbeat cycle completes, rather than on their own independent schedules.
Steps to Reproduce
- Configure a secondary agent with a long heartbeat interval:
{
"agents": {
"list": [
{
"id": "secondary",
"heartbeat": { "every": "4h" }
}
]
}
}
- Keep main agent on default 30m heartbeat
- Observe diagnostic lane logs over time
Expected Behavior
- Main agent heartbeats every 30 minutes
- Secondary agent heartbeats every 4 hours (independently)
Actual Behavior
Secondary agent heartbeats are triggered immediately after main agent heartbeat completes (~50-500ms later), regardless of the configured "every": "4h" interval.
Log pattern observed:
19:01:40.363 - lane task done: session:agent:main:main
19:01:40.911 - lane enqueue: session:agent:secondary:main (548ms later)
19:10:44.903 - lane task done: session:agent:main:main
19:10:45.426 - lane enqueue: session:agent:secondary:main (523ms later)
19:16:21.233 - lane task done: session:agent:main:main
19:16:21.584 - lane enqueue: session:agent:secondary:main (351ms later)
Additionally, when the main agent's task takes a long time (10+ minutes), multiple heartbeats can queue up and fire back-to-back when main completes:
19:47:25.044 - main done (after 600sec task)
19:47:25.529 - secondary heartbeat #1 starts
19:47:31.315 - secondary heartbeat #1 done
19:47:35.068 - secondary heartbeat #2 starts (only 3.7s later!)
Impact
- Secondary agents consume tokens on main's schedule instead of their own
- Can result in duplicate heartbeats firing seconds apart
- The
heartbeat.every config for non-main agents has no effect
Environment
- OpenClaw version: 2026.2.9
- OS: macOS (Darwin 25.2.0 arm64)
- Node: v25.4.0
Description
When configuring multiple agents with different heartbeat intervals, the per-agent
heartbeat.everyconfiguration is ignored. All agents appear to heartbeat together when the main agent's heartbeat cycle completes, rather than on their own independent schedules.Steps to Reproduce
{ "agents": { "list": [ { "id": "secondary", "heartbeat": { "every": "4h" } } ] } }Expected Behavior
Actual Behavior
Secondary agent heartbeats are triggered immediately after main agent heartbeat completes (~50-500ms later), regardless of the configured
"every": "4h"interval.Log pattern observed:
Additionally, when the main agent's task takes a long time (10+ minutes), multiple heartbeats can queue up and fire back-to-back when main completes:
Impact
heartbeat.everyconfig for non-main agents has no effectEnvironment