anthropics / anthropics/claude-code

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

Open
#94,410 0 comments 0 reactions 0 assignees View on GitHub
area:desktop area:routines bug has repro platform:macos
Dominant language
Python
Stars
145k
Forks
23.1k
PR merge metrics
PR metrics pending

Description

## 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//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//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///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.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.