CronCreate: `durable: true` accepted but not persisted to disk

Resolved 💬 4 comments Opened Apr 30, 2026 by heintonny Closed Jun 14, 2026

Summary

Calling CronCreate with durable: true accepts the parameter, returns a job ID, and confirms the cron expression — but the job is not actually persisted to disk. The success message even reads "Session-only (not written to disk, dies when Claude exits)" despite durable: true being explicitly set, and ~/.claude/scheduled_tasks.json is never created.

This means recurring jobs that are intended to survive across session restarts (which is the documented purpose of durable: true) are silently degraded to in-memory only. Any session/daemon restart loses the cron silently.

Reproduction

In a Claude Code session, call:

{
  "tool": "CronCreate",
  "params": {
    "cron": "5 5 * * 0",
    "recurring": true,
    "durable": true,
    "prompt": "Weekly maintenance task..."
  }
}

Observed return:

Scheduled recurring job <ID> (Every Sunday at 5:05 AM). Session-only (not written to disk, dies when Claude exits). Auto-expires after 7 days.

Then check the file:

$ ls ~/.claude/scheduled_tasks.json
ls: cannot access '/home/claude/.claude/scheduled_tasks.json': No such file or directory

Expected behavior

Either:

  1. durable: true should actually write to ~/.claude/scheduled_tasks.json so the job survives daemon restart (matching the tool's own documented behavior), OR
  2. The success message should not say "Session-only" when durable: true was passed, and the documented behavior in the tool description should match what actually happens.

Actual behavior

durable: true is accepted but ignored. The job behaves identically to durable: false.

Why this matters

We hit this bug three times in one day (2026-04-30) while building a multi-host Claude topology. Every cross-session-task we tried to schedule (12-hour pulse loop, weekly maintenance windows, recurring health-check) silently degraded to in-session-only and died on the first daemon restart. We've migrated everything to systemd timers as a workaround, but CronCreate with durable: true remains unusable for its documented purpose.

Environment

  • Claude Code CLI (multiple sessions across Linux/macOS hosts)
  • Tool: CronCreate (built-in, version per current Claude Code)

Workaround

Use systemd timers (Linux) or launchd plists (macOS) for any cron-like task that must survive daemon restarts. CronCreate is only safe for one-off reminders or short-lived recurring tasks confined to a single agent session.

View original on GitHub ↗

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