[BUG] Scheduled task (cron / one-time fireAt) never fires — backing file never persisted
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
- Call
create_scheduled_taskwithtaskId: "morningbrief",cronExpression: "0 9 * * *"(daily 9:00 AM local time), and a prompt. - Tool responds:
Scheduled task "morningbrief" created.withTask file: /Users/rinto/.claude/scheduled-tasks/morningbrief/SKILL.md. - Inspect the filesystem directly:
~/.claude/scheduled-tasks/contains only.DS_Store— nomorningbriefdirectory orSKILL.mdfile exists. - 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/.../*.jsonlfor 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. - To rule out a cron-interval-specific issue, called
update_scheduled_taskwithfireAtset to ~4 minutes in the future (a one-time trigger). - Waited past the fire time. Result:
list_scheduled_tasksstill shows the originalnextRunAttimestamp, unchanged, with nolastRunAtpopulated. No new session.jsonlfile 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" />