Skip to content

v0.3.0

Choose a tag to compare

@dortort dortort released this 13 Apr 20:33
· 135 commits to main since this release

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