[BUG] Desktop Scheduled Tasks catch-up ignores day-of-week/date cron fields, fires on wrong days

Status Open
Maintainer reply None cached
Activity 0 comments · opened Sep 11, 2026

What's Wrong?

Desktop Scheduled Tasks' missed-run catch-up mechanism appears to fire tasks without re-validating the day-of-week (and possibly date) portion of the cron expression, causing day-restricted recurring tasks to fire on days they are explicitly scheduled not to run.

Per the docs (https://code.claude.com/docs/en/desktop-scheduled-tasks.md, "Missed runs" section):

When the app starts or your computer wakes, Desktop checks whether each task missed any runs in the last seven days. If it did, Desktop starts exactly one catch-up run for the most recently missed time and discards anything older.

For a task with a day-restricted cron (e.g. 0 19 * * 1, Monday only, or 45 18 * * 3, Wednesday only), "the most recently missed time" should itself fall on the correct day-of-week. That is not what's happening.

Observed behavior

Five scheduled tasks with different weekly schedules (one Friday-only, two Wednesday-only, one Monday-only, one Thursday-only) all fired within about four minutes of each other at ~12:15-12:19 AM local time on a Friday — a day that matches only one of the five tasks' actual schedules. Checked via list_task_runs, each of the other four tasks' run histories show a mix of correctly-timed runs and sporadic wrong-day fires going back several weeks (a Thursday-only task firing on a Sunday and on a Friday; a Wednesday-only task firing on a Friday and a Thursday). All misfired runs report status: succeeded — they are not hanging, they are simply firing on the wrong day.

No duplicate side effects resulted this time only because one of the affected tasks (which creates a Gmail draft and a Jira issue) happened to exit early via its own "nothing new this week" guard clause before reaching any write step. A task without such a guard would have produced duplicate outbound artifacts.

Impact

  • No user-facing setting exists to disable catch-up entirely (checked create_scheduled_task / update_scheduled_task schemas — only enabled, cronExpression, fireAt, prompt, title, description, notifyOnCompletion).
  • The only available mitigation is adding manual date/day guardrails inside each task's own prompt (which the docs already suggest for timing, e.g. "Only review today's commits. If it's after 5pm, skip"), but this shouldn't be necessary for the day-of-week field specifically, since that's structured data already present in the cron expression.
  • Tasks that write outbound side effects (Gmail drafts, Jira issues, git commits) are at real risk of running twice or running with stale/wrong-day assumptions baked into their prompts (e.g. "today is Wednesday" logic).

Environment

Claude Code Desktop app, Windows. Scheduled tasks configured via the schedule skill / mcp__scheduled-tasks__* tools.

What I'd expect

Catch-up should compute "the most recently missed time" by walking backward through the cron's full field set (including day-of-week and day-of-month), not just time-of-day, so a Wednesday-only task's most recent missed time is always a Wednesday.

View original on GitHub ↗