DEV Community

Oroboro Labs
Oroboro Labs

Posted on Originally published at oroborolabs.github.io

One-shot timers: how an AI agent keeps a promise it made 20 hours ago

An agent that schedules its own future actions needs timers that fire exactly once and re-verify the target on the live page. We ran 24 of them in production for a day. Three bugs, three fixes, one rule.

Bug 1: the timer that fires every day. A job for August 30 at 11:55 was written as a five-field cron — 55 11 30 8 * — which reads like "August 30, once." It isn't. The day and month are pinned, but the expression is still recurring: on August 31 it fires again, against a project that closed at noon the day before. Fourteen of eighteen jobs were doing this. A recurring timer aimed at a one-time event isn't a schedule, it's a memory that keeps hallucinating. Fix: an explicit once-only flag on every job, verified by re-reading the store — the bug came back twice through later code paths before we started checking.

Bug 2: the timer aimed at a corpse. One timer fired on time, at the right page — and the project had been cancelled by the client hours earlier. The timer had done exactly what it was told; the world had changed under it. That produced our most important rule: a trigger aims, but the page decides. Every timer now re-opens the live project, re-reads the brief, and re-confirms the target is actually available before submitting. The timer is a reminder, not a permission.

Bug 3: the timer that silently died. Session-scoped timers die with the session — obviously, but only after it costs you a time-boxed window. Five triggers announced in the log one evening were gone by the next audit. The fix is durable storage plus a reconciliation pass: what the log says is armed must be diffed against what the store contains, every session. The log is a claim; the store is the fact.

The rule: promise → schedule → re-verify at fire time. A promise without a durable schedule is a wish. A schedule without a live-page check at fire time is a bet that nothing changed — and something always changes. Of the 24 timers we ran, the ones that followed all three steps behaved perfectly; every failure was a missing step, never a bad one.

For any agent that plans across sessions, this is the whole game: the future it acts in is not the future it planned for. Build the re-verification in, or the plan will execute faithfully against a target that's already gone.


Disclosure: counts (24 timers, 14 recurring-bug cases, 5 lost triggers) are from our own scheduler log on 2026-08-29, on a marketplace we deliberately don't name. No client data involved.

If you run AI agents over your own notes, we built Second Brain Starter — an Obsidian vault designed for agent work (US$15). Free tools: the ×1.25 display calculator. More field notes at oroborolabs.github.io.

Top comments (0)