[BUG] Scheduled task (cron / one-time fireAt) never fires — backing file never persisted

Open 💬 0 comments Opened Jul 1, 2026 by rinto0424

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

create_scheduled_task (and update_scheduled_task) report success and the task appears correctly in list_scheduled_tasks (with correct cronExpression/fireAt, enabled: true, and a valid nextRunAt), but the task never actually fires — neither on a recurring daily cron schedule nor on a one-time fireAt set just minutes in the future. Additionally, the SKILL.md file the tool claims to write to disk does not exist.

What Should Happen?

The task file (SKILL.md) should be persisted to disk at creation time as the tool's own response claims, and the task should fire at the scheduled cron time / fireAt time while the app is running, producing a new automated session run and (if notifyOnCompletion is true) a completion notification.

Error Messages/Logs

Steps to Reproduce

  1. Call create_scheduled_task with taskId: "morningbrief", cronExpression: "0 9 * * *" (daily 9:00 AM local time), and a prompt.
  2. Tool responds: Scheduled task "morningbrief" created. with Task file: /Users/rinto/.claude/scheduled-tasks/morningbrief/SKILL.md.
  3. Inspect the filesystem directly: ~/.claude/scheduled-tasks/ contains only .DS_Store — no morningbrief directory or SKILL.md file exists.
  4. Wait for the scheduled time (9:00 AM local, app running the whole time). No automated run occurs. Confirmed by grepping all session logs under ~/.claude/projects/.../*.jsonl for timestamps between 00:00–00:29 UTC (09:00–09:29 JST) across three consecutive days (2026-06-29, 06-30, 07-01) — zero matches.
  5. To rule out a cron-interval-specific issue, called update_scheduled_task with fireAt set to ~4 minutes in the future (a one-time trigger).
  6. Waited past the fire time. Result: list_scheduled_tasks still shows the original nextRunAt timestamp, unchanged, with no lastRunAt populated. No new session .jsonl file was created around the fire time. ~/.claude/scheduled-tasks/ still contains only .DS_Store. The task did not fire.

Claude Model

Sonnet (default)

Is this a regression?

No, this never worked

Last Working Version

_No response_

Claude Code Version

Claude Code / Claude Desktop app, version 2.1.187 (also reproduced on 2.1.183) macOS Darwin 25.5.0 (arm64), Asia/Tokyo timezone (verified correct via date and /etc/localtime) Entry point: claude-desktop

Platform

Anthropic API

Operating System

macOS

Terminal/Shell

Terminal.app (macOS)

Additional Information

<img width="1470" height="956" alt="Image" src="https://github.com/user-attachments/assets/1209c338-cdca-40ae-9267-1f680b06c596" />

View original on GitHub ↗