Releases: dortort/claude-code-scheduler
v0.3.1
v0.3.0 — macOS Timezone Support
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,
CalendarIntervalvalues are converted from the target timezone to system-local time usingIntl.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
synccommand 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
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
relativeTimefield in humanize CLI output - Simplified lock module and renamed
formatRelativeTime
v0.2.0
@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
projectPathfor 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
@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.