[BUG] Native scheduled tasks fire immediately on resume after external restart (catch-up fires), ignoring the configured cadence

Status Open
Reported on v2.1.227
Maintainer reply None cached
Activity 1 comment · opened Aug 20, 2026

Environment: Claude Code CLI 2.1.227 / 2.1.234, Windows 11. Long-running local session with plugin:telegram@claude-plugins-official channel and a user-created native scheduled task (self-paced wake). Session process managed by a local watchdog that restarts it when judged unhealthy.

What happens. Whenever the session process is externally restarted and resumed, pending scheduled tasks fire immediately on resume — at times that do not match the user-configured cadence. During a window where our watchdog restarted the session repeatedly, we observed scheduled_task_fire system events at 04:21Z / 04:33Z / 04:54Z (2026-08-20) correlating exactly with the restart chain, not with the schedule. The session owner confirms the configured cadence does not match these times.

Why it matters.

  1. Each surprise fire runs a full task round (model calls, tool use) the user did not schedule — with restarts this multiplies into significant unplanned usage.
  2. Combined with the background-resume forced fork (#86092, which we also hit on this exact path — see https://github.com/anthropics/claude-code/issues/86092#issuecomment-5363439232), a catch-up fire can land in a forked session, splitting identity and rebuilding the full context (previous_message_not_found, cacheRead=0, cacheCreate=766K observed).

Expected. Either scheduled tasks respect their configured cadence across process restarts (skip missed fires, or reschedule to the next slot), or catch-up firing is documented and controllable (e.g. a per-task "skip missed runs" option).

Repro sketch.

  1. In a session, create a native scheduled task with a long interval.
  2. Kill and resume the session process (externally, e.g. a supervisor) well before the next scheduled slot.
  3. Observe a scheduled_task_fire immediately on resume.

Happy to provide sanitized metadata (timelines, job/roster fields). No conversation content involved.

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗