[FEATURE] add optional timezone field (IANA tz, e.g. America/Los_Angeles) to scheduled-trigger cron expressions

Status Open
Maintainer reply None cached
Activity 7 comments · opened Apr 18, 2026

Preflight Checklist

  • [x] I have searched existing requests and this feature hasn't been requested yet
  • [x] This is a single feature request (not multiple features)

Problem Statement

UTC cron drifts by 1 hour at each DST transition, forcing users to either (a) accept the drift, or (b) manually update their triggers twice a year. Prior art:

  • systemd timers: OnCalendar= + TimeZone=
  • Kubernetes CronJob: spec.timeZone (stable since v1.27)
  • GitHub Actions schedule: cron docs note the UTC limitation as a known sharp edge
  • AWS EventBridge Scheduler, GCP Cloud Scheduler, Heroku Scheduler all support tz

Impact

Right now every scheduled Claude Code trigger with a user-facing "run at X local time" semantic is subtly broken twice a year for many users. For low-frequency triggers (daily/weekly) this can be acceptable friction; for hourly or shift-aligned ones it's genuinely wrong.

Proposed Solution

A sibling field — {cron_expression, timezone} — rather than embedding TZ= inside the cron string (cleaner API surface)

Alternative Solutions

A default timezone could be honored, but I mean "America/Los_Angeles" not "Pacific Daylight Time". But it would still be nice to be able to override it.

Priority

Medium - Would be very helpful

Feature Category

CLI commands and flags

Use Case Example

I want a report at 8am. Currently in daylight saving/summer time observing places, this will be off by a hour for several months of the year without a manual reschedule.

Sometimes these tasks MUST run at a certain time.

View original on GitHub ↗

7 Comments

0xbrainkid · 4 months ago

Optional IANA timezone field for scheduled-trigger cron expressions is a meaningful quality-of-life improvement — users who think in local time should not need to mentally convert to UTC when writing schedules.

The current 0 22 * * * schedule without timezone context is ambiguous: is it UTC midnight, UTC 22:00, or some other interpretation? Users who set schedules expecting local time behavior and then observe UTC execution end up with triggers firing at unexpected times.

The proposed extension:

{
  "schedule": "0 22 * * *",
  "timezone": "America/Los_Angeles"
}

This fires at 22:00 Pacific time (UTC-7 in PDT, UTC-8 in PST), automatically handling daylight saving time transitions.

Implementation considerations:

  1. DST transitions: IANA timezone definitions handle DST correctly. A schedule of 0 2 * * * in America/Chicago will fire at 2:00 AM CST/CDT — no extra configuration needed.
  1. Spring-forward edge case: If a schedule falls into the gap created by a DST transition (e.g., 2:30 AM on the Sunday when clocks spring forward to 3:00 AM), the system should document its behavior: skip that occurrence, fire at the next valid time, or fire at the wall-clock equivalent.
  1. Display in UI: The routines UI should show schedules in the configured timezone with a clear indication: "0 22 * * * (America/Los_Angeles, PDT UTC-7)".
  1. Backward compatibility: Schedules without a timezone field continue to run in UTC (current behavior). Adding the field is purely additive.

This connects to the timezone-awareness issues documented in the broader campaign (temporal context injection at session start, #50499/#49084) — users who set schedules in local time expect local time behavior throughout.

github-actions[bot] · 4 months ago

Found 3 possible duplicate issues:

  1. https://github.com/anthropics/claude-code/issues/49991
  2. https://github.com/anthropics/claude-code/issues/24213
  3. https://github.com/anthropics/claude-code/issues/32988

This issue will be automatically closed as a duplicate in 3 days.

  • If your issue is a duplicate, please close it and 👍 the existing issue instead
  • To prevent auto-closure, add a comment or 👎 this comment

🤖 Generated with Claude Code

tilthouse · 4 months ago

This is related to issue #49991 but this is a feature request, whereas the other reports this as a bug

snewell92 · 3 months ago

I came across this today. Outlining my use case and expectations,

Setting up a schedule to run every day at 8am should respect my current timezone by default (Europe/London in my case). It should be a field we can switch. cron is convenient, but usually done in BE systems in a UTC environment where DST drift is accepted. Scheduling work is more of a human centric routine management. Like, every day at 7a i want this slack message or summary digest to run, every week on wednesday at 9a I need this follow up action to create a pending action for me... etc.

claude response:

The two-field shape proposed here ({cron_expression, timezone}) is exactly right. Would unblock timezone-aware scheduling without any migration burden on existing triggers.
snewell92 · 2 months ago

This issue is still very much alive and actively impacting Claude Code users.

IANA timezone support in the RemoteTrigger API is a fundamental UX requirement — users think in "Europe/London", not "UTC+0/+1 with manual seasonal adjustment". Every scheduled routine either accepts ±1 hour DST drift or requires manual correction twice a year.

Please keep this open until genuine IANA timezone support (a timezone field that accepts IANA strings like Europe/London) lands in the scheduled remote agent API.

snewell92 · 2 months ago

This issue is still very much alive and actively impacting Claude Code users.

IANA timezone support in the RemoteTrigger API is a fundamental UX requirement — users think in "Europe/London", not "UTC+0/+1 with manual seasonal adjustment". Every scheduled routine either accepts ±1 hour DST drift or requires manual correction twice a year.

Please keep this open until genuine IANA timezone support (a timezone field that accepts IANA strings like Europe/London) lands in the scheduled remote agent API.

mark-savo · 1 month ago

+1 — hit this setting up a twice-daily PR-triage routine (5am/1pm PT) through the cloud routine API. cron_expression is UTC-only with no timezone field, so it will silently drift to 4am/12pm PT after the November DST change and needs a manual cron edit twice a year. The proposed {cron_expression, timezone} sibling field is exactly right — k8s CronJob spec.timeZone (stable since 1.27) and systemd OnCalendar + TimeZone= are good precedent. Would remove the recurring manual fixups.