Skip to content

[Feature]: Feature Request: Configurable fixed-interval progress heartbeat for long-running tasks (e.g. every 60s)  #46851

Description

@tangkk

Summary

When the assistant runs a long task in chat surfaces (e.g., QQ, Telegram), users often cannot tell whether it is still running or unresponsive.
I’d like OpenClaw to support a built-in fixed-interval progress heartbeat during a single long-running turn, so users can reliably see that
execution is still alive in chat surfaces (QQ/Telegram/Discord/etc.).

Current streaming/heartbeat visibility is helpful, but it does not guarantee a strict “every 60 seconds” status update while a task is still
running.

Problem to solve

In chat UX, when a task takes several minutes, users can’t always distinguish:

  • still running,
  • blocked/stuck,
  • or silently failed.

This is especially problematic on channels where typing indicators or partial streaming are inconsistent.

Proposed solution

For long-running tasks, OpenClaw should optionally emit periodic progress updates at a fixed interval (e.g., every 60s), with a simple lifecycle:

  1. started
  2. running (every N seconds)
  3. done / failed

Please consider adding global config options like:

  progressHeartbeat:                                                                                                                                 
  enabled: true                                                                                                                                      
  intervalMs: 60000                                                                                                                                  
  minTaskDurationMs: 30000                                                                                                                           
  channels:                                                                                                                                          
  default: true                                                                                                                                      
  qqbot: true                                                                                                                                        
  telegram: true                                                                                                                                     
  discord: true                                                                                                                                      
  templates:                                                                                                                                         
  started: "Received. Starting now. ETA: {eta}"                                                                                                      
  running: "Still running... {progress}"                                                                                                             
  done: "Completed."                                                                                                                                 
  failed: "Failed: {error}"                                                                                                                          

Alternatives considered

No response

Acceptance criteria

  1. When a single turn runs longer than minTaskDurationMs, the user receives:
  • one start message,
  • one running update every intervalMs,
  • one final completion/failure message.
  1. Works consistently across supported channels (with graceful degradation if platform limits apply).
  2. Per-channel override is supported.
  3. If a channel rate-limit prevents strict cadence, OpenClaw reports fallback behavior explicitly (instead of silent gaps).

Impact

Why this matters

  • Improves trust during long operations
  • Reduces “are you stuck?” follow-up messages
  • Makes agent behavior predictable across messaging platforms
  • Better UX for mobile chat clients where task state is otherwise opaque

Nice-to-have

  • Channel-level override of heartbeat interval
  • Auto-throttling (avoid noisy updates if meaningful progress already posted)
  • Optional “status on demand” command (e.g., user sends “status?”)

Evidence/examples

No response

Additional information

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Fields

    Priority

    None yet

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions