[DOCS] CronCreate durable: true accepted but silently no-op — session-only crons on macOS

Resolved 💬 3 comments Opened May 15, 2026 by growthpigs Closed Jun 13, 2026

Documentation Type
Other

Documentation Location
No response

Section/Topic
CronCreate tool — durable: true parameter

Current Documentation
The CronCreate tool description / schema documents durable: true as a persisting flag. The tool's own runtime confirmation text references ~/.claude/scheduled_tasks.json as the on-disk store.

What's Wrong or Missing?
CronCreate accepts durable: true as documented, but on macOS the resulting cron is session-only — it dies when the Claude Code REPL exits. The flag is silently a no-op: nothing is written to ~/.claude/scheduled_tasks.json (the file does not exist), and the tool's own confirmation text says Session-only (not written to disk, dies when Claude exits) even when durable: true was passed.

Reproduction
From Claude Code on macOS 26.2 (Apple Silicon), invoke:

CronCreate({
schedule: "...",
command: "...",
durable: true
})
Tool returns success.

Observe:

The returned message text says Session-only (not written to disk, dies when Claude exits).
ls ~/.claude/scheduled_tasks.json → no such file or directory.
Exiting the Claude session terminates the scheduled task.
Expected behavior
When durable: true is passed, the scheduled task should persist across session exits. Per the tool's own documentation it should write to ~/.claude/scheduled_tasks.json (or an equivalent on-disk store) and resume from disk on next Claude Code launch.

Impact
I run plugins (airgap-crucible) that dispatch long-running async work and rely on a +60–90 minute harvest cron to retrieve results. With durable: true being a silent no-op, every harvest is at risk of becoming a "ghosted run" if the dispatching Claude session ends — which the plugin's own queue discipline explicitly forbids.

Workaround in place
I shipped a launchd-based watchdog (~/.claude/scripts/harvest-cron-watchdog.sh + ~/Library/LaunchAgents/com.pai.harvest-cron-watchdog.plist) that polls a JSON watch-list every 60s. That is what durable: true should do internally. Live-fire confirmed against a real harvest at 2026-05-15T09:48+02:00.

Environment
Claude Code: latest (subscription)
macOS: 26.2 (build 25C56), Apple Silicon
mcp__scheduled-tasks__* (Anthropic-hosted Schedule/routines) is not viable as a fallback — refuses unsupervised invocation by design (billing-safety gate).
Suggested Improvement
Either:

Honor durable: true by persisting the scheduled task to ~/.claude/scheduled_tasks.json (or equivalent) and resuming from disk on next launch — the behavior the tool already advertises in its confirmation text.

Update the documentation and the tool's confirmation text to clearly state that durability is unsupported on macOS until $LATER, and steer users to alternatives (atrun / launchd / external schedulers).

If the underlying intent is "durable scheduling will only be available via the cloud-routines MCP" — please say so explicitly in the tool description so users don't expect a working local-disk path.

Impact
High - Prevents users from using a feature

Additional Context
Cross-referenced from a private PAI infrastructure tracking issue with full evidence and follow-ups.

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗