Skip to content

Releases: dortort/claude-code-scheduler

v0.3.1

15 Apr 09:11

Choose a tag to compare

Bug Fix

  • init: Export USER env var in launchd shell template — fixes "not logged in" error when Claude CLI runs scheduled tasks, since launchd does not provide $USER

v0.3.0 — macOS Timezone Support

13 Apr 20:33

Choose a tag to compare

What's New

macOS launchd timezone support

Tasks configured with a non-local timezone (e.g., timezone: "UTC") now fire at the correct time on macOS. Previously, launchd's StartCalendarInterval ignored the timezone field entirely, causing tasks to fire at the wrong hour.

How it works:

  • At registration time, CalendarInterval values are converted from the target timezone to system-local time using Intl.DateTimeFormat
  • A daily auto-sync launchd job (com.claude-scheduler.tz-sync) is registered alongside any timezone-aware task, catching DST transitions automatically
  • The existing sync command recalculates timezone offsets on every run

Example: A task scheduled for 0 7 * * 1-5 with timezone: "UTC" on a system in America/Toronto (EDT, UTC-4) now correctly registers as Hour: 3 in the plist instead of Hour: 7.

Known limitation

Day-of-month schedules where the timezone offset crosses a day boundary use an approximate day (clamped to 1–28) with a logged warning. This is a fundamental limitation of launchd's CalendarInterval which has no native timezone support.

No changes to Linux

The Linux crontab scheduler is completely unaffected — it already handles timezones natively via the TZ= environment variable.


Full Changelog: v0.2.1...v0.3.0

v0.2.1

01 Apr 07:22

Choose a tag to compare

Bug fixes for lock handling, process lifecycle, and time display.

Fixes

  • Correct SIGTERM handling: register before lock, write startTime before PID, abort on pre-spawn signal
  • DST-safe "tomorrow" label and normalized midnight hour from Intl.DateTimeFormat
  • Validate PID identity and preserve lock on unverified PID
  • Send SIGTERM to executor PID only (not process group)
  • Kill running processes when deleting a scheduled task
  • Use pre-computed relativeTime instead of LLM date math in list

Improvements

  • Deterministic relativeTime field in humanize CLI output
  • Simplified lock module and renamed formatRelativeTime

v0.2.0

27 Mar 14:18

Choose a tag to compare

@dortort/scheduler v0.2.0

Second release of the Claude Code scheduler plugin, focused on safer execution, one-time scheduling, task state synchronization, and project-scoped task loading.

Features

  • One-time triggers - schedule a task to run once at a specific timestamp
  • Enable/disable sync - keep config state and the native OS scheduler in sync
  • Project-scoped tasks - load merged config via projectPath for project-local scheduling
  • Validation hardening - stricter cron, timestamp, and path validation in mutation flows
  • Sensitive file protection - detect and block or warn on .env, keys, and other sensitive files in worktree commit flows
  • Improved scheduler UX - add, update, and sync flows handle one-time schedules and enabled-state changes more reliably

Internal

  • Trusted publishing - release automation now publishes to npm via GitHub Actions OIDC trusted publishing

See the README for the full command reference and usage details.

v0.1.0

27 Mar 12:48

Choose a tag to compare

@dortort/scheduler v0.1.0

First release of the Claude Code scheduler plugin.

Features

  • Natural language scheduling - "every weekday at 9am", "daily at 5pm", "every Monday at 10am"
  • Cron expressions - standard 5-field cron syntax with full validation
  • One-time tasks - schedule a task to run once at a specific time
  • Worktree isolation - run tasks in isolated git worktrees
  • Execution history - JSONL-based history with filtering
  • Log management - stdout/stderr capture with rotation
  • Security built-in - env blocklist, sensitive file detection, shell escaping, trust boundaries
  • Platform support - macOS (launchd) and Linux (crontab)

See the README for the full command reference and usage details.