Your Scheduled Agent Ran an Hour Early This Morning. The Clocks Changed, Its Memory Did Not
Your Scheduled Agent Ran an Hour Early This Morning. The Clocks Changed, Its Memory Did Not Your morning digest agent has run at 7 a.m. for months. Then one Monday it lands at 6 a.m., an hour before anyone is awake, and the summary covers the wrong window. Nothing in the workflow changed. Nobody edited the schedule. The clocks changed, and the agent's memory of what "7 a.m." means did not change with them. This is one of the most common scheduled-agent bugs, and it is a memory problem before i
Your Scheduled Agent Ran an Hour Early This Morning. The Clocks Changed, Its Memory Did Not
Your morning digest agent has run at 7 a.m. for months. Then one Monday it lands at 6 a.m., an hour before anyone is awake, and the summary covers the wrong window. Nothing in the workflow changed. Nobody edited the schedule. The clocks changed, and the agent's memory of what "7 a.m." means did not change with them.
This is one of the most common scheduled-agent bugs, and it is a memory problem before it is a scheduling problem. The agent does not remember time the way you do. You remember "7 a.m. local time." The agent remembers whatever its setup stored: a fixed offset, a server clock, or a time string with no timezone attached. When daylight saving time shifts the offset, the stored version and the real version drift apart by an hour.
How an agent's idea of time goes stale
There are three ways a scheduled agent usually stores time, and all three break around a clock change.
The first is a fixed offset. Somewhere in the setup, a time got saved as "7 a.m. UTC-5" or "9 a.m. GMT-6." That offset was correct on the day it was saved. After the clocks change, the local timezone is UTC-4 or GMT-5 instead, but the saved offset never updates. The agent fires on the old offset, which is now an hour off in local time. This is the silent version of the bug: the schedule looks right, the logs look clean, and every run is quietly an hour early or late.
The second is the server clock. A self-hosted agent running on a container usually inherits the server's timezone, often UTC by default. If the workflow was built by someone thinking in local time, the cron expression gets written for local time and runs on server time instead. That mismatch can hide for months if the builder compensates by hand, shifting the cron expression by the current offset. The hand adjustment works until daylight saving time moves the offset, and then the compensation is wrong by an hour.
The third is a time string with no timezone at all. The agent's notes say "send the digest at 7" or "run the reconciliation at 9," and nothing in that note says which timezone "7" belongs to. Each run, the agent interprets the bare time against whatever clock is handy, and those interpretations diverge after a clock change.
The two clock-change traps beyond the one-hour shift
A one-hour shift is the visible symptom. Two rarer traps sit behind it, and both hit scheduled agents harder than they hit people.
The first trap is the skipped hour. When clocks spring forward, one local hour never happens: the clock jumps from 1:59 a.m. to 3:00 a.m. A job scheduled for 2:30 a.m. on that night has no moment to fire. Some schedulers skip it silently, so a nightly job simply never runs and nobody notices until the missing report is asked about.
The second trap is the repeated hour. When clocks fall back, one local hour happens twice: the clock hits 2:00 a.m., resets to 1:00 a.m., and plays the 1:00 hour a second time. A job scheduled for 1:30 a.m. can fire twice. For a read-only digest, a duplicate is an annoyance. For an agent that sends messages, books, or posts, a duplicate run is real damage: two reminders to the same customer, two entries in the ledger. The schedule itself was ambiguous, and the agent had no memory of having already run in that hour to stop itself.
What the agent needs to remember about time
Fixing this means giving the agent a small, durable record about time, and making every run read it before acting. Four items cover nearly every case.
First, the timezone as a name, not a number. Store "America/Denver," never a bare offset like UTC-6. Timezone names carry their daylight saving rules, so a schedule written against the name adjusts itself when the clocks change.
Second, the schedule in local time plus the timezone, stored once and read every run. When the agent wakes up, it should be able to answer: what local time am I supposed to run, in which timezone, and what does that mean in UTC right now?
Third, the last run as an instant, not a wall-clock reading. "Last run: 7 a.m." tells the next run nothing useful across a clock change, because 7 a.m. happened twice or never on transition days. "Last run: 2026-11-01T13:00:00Z" is unambiguous, and it lets the agent check whether it already ran in this window or a run was skipped.
Fourth, the decision about transition days, written down in advance. What should the agent do if its scheduled time does not exist that night, or if it happens twice? A run that finds "on skipped-hour nights, run at 3:30 a.m. and note the shift" in its memory behaves predictably. A run that improvises does not.
Give the agent one memory for its schedule
This is where a shared memory layer earns its place. The timezone name, the schedule, the last-run instant, and the transition-day policy are exactly the kind of state that should live in one place every tool and every run can read, instead of being scattered across a cron expression here, a workflow variable there, and a note somewhere else. When the schedule lives in one memory, a fix made once applies to every run.
Vilix AI is that kind of layer: cloud-hosted with zero infrastructure to run, so there is no server clock to babysit and no container timezone to configure. Scheduled agents reach it over MCP, and the same memory follows the agent across every tool and device it runs on. It stores full conversation history, not just extracted facts, so a run can revisit what actually happened on the last transition night instead of trusting a summary of it. The plan is free forever, with a 7-day Pro trial that needs no credit card, and everything can be exported or deleted at any time.
The clocks will change again. They do it twice a year, on a schedule nobody in your team controls. The question is whether your agent's memory of time changes with them, or whether next time you find out from a digest that arrived an hour early and a customer who got the same message twice. Store the timezone as a name, store the last run as an instant, write the transition policy down, and put all three somewhere every run reads before it acts. Get started for free with Vilix AI and give your scheduled agents one memory that knows what time it really is.