Desktop: ghost scheduled tasks fire every minute but are absent from UI, MCP list, and on-disk registry

Status Open
Reported on v2.1.270
Maintainer reply None cached
Activity 0 comments · opened Sep 14, 2026

Summary

Two scheduled tasks that no longer exist anywhere on disk are still being dispatched by the Desktop app's ScheduledTasks manager once per minute, logging a warning/error each time. They cannot be removed: they do not appear in the Routines UI, in the scheduled-tasks MCP listing, or in the on-disk registry, and they survive a full app restart.

Environment

  • Claude Desktop: 1.52386.6
  • Claude Code (bundled): 2.1.270
  • macOS 26.6.2 (Apple Silicon)

Symptoms

~/Library/Logs/Claude/main.log receives these lines every 60 seconds:

[warn] [ScheduledTasks] Skipping scheduled task ohayo-morning-report: task file not found at /Users/<user>/Claude/Scheduled/ohayo-morning-report/SKILL.md
[error] [ScheduledTasks] Failed to read task file for mercari-daily-sales-check: path not symlink-free before open { code: 'ENOENT' }

Volume, counted from the log:

| Date | Lines |
|---|---|
| 2026-09-09 | 708 (starts 12:12) |
| 2026-09-10 | 1444 |
| 2026-09-11 | 1442 |
| 2026-09-12 | 1440 |
| 2026-09-13 | 1444 |
| 2026-09-14 | 1443 |

~8,400 lines over six days, exactly one per minute.

The referenced path is a legacy location: /Users/<user>/Claude/Scheduled/. That directory does not exist — ~/Claude/ itself does not exist. Working tasks live under ~/.claude/scheduled-tasks/.

What I verified

  1. ~/Claude/Scheduled/ — does not exist.
  2. ~/.claude/scheduled-tasks/ — no directory for either task id.
  3. scheduled-tasks MCP list_scheduled_tasks — returns 33 tasks; neither ghost is among them.
  4. scheduled-tasks MCP delete_scheduled_task with the exact id — rejected: Scheduled task "ohayo-morning-report" not found.
  5. Routines UI — searching ohayo, おはよう, and メルカリ each returns "no matching routines". Other routines (including paused ones) list normally.
  6. ~/Library/Application Support/Claude/claude-code-sessions/<org>/<project>/scheduled-tasks.json — exists (28 KB) and parses, but grep for either task id returns 0 matches.
  7. IndexedDB, Local Storage, Session Storage, and Partitions under ~/Library/Application Support/Claude/ — 0 matches.
  8. ~/.claude.json — the only match is an unrelated skillUsage counter.
  9. Restarting the app does not clear it. The main process started at 08:33:48; the same warning was emitted at 08:38:54 and every minute after.

So the dispatcher is scheduling from a source that is not any of the on-disk registries, and that source is re-read after a restart.

Expected

Either the stale registration is dropped when its task file is missing, or it is exposed somewhere the user can delete it (UI, or delete_scheduled_task accepting it).

Actual

It fires forever, is invisible, and there is no supported way to remove it.

Impact

Low but non-zero: log noise only. Log rotation caps disk use. No effect on the 33 working routines.

Possible trigger

The first occurrence (2026-09-09 12:12) coincides with the last modification time of ~/Library/Application Support/Claude/ (12:11), which suggests an app update around that moment left the old-path registrations behind.

View original on GitHub ↗