I taught my assistant to prep my week. The hard part was making it stop starting over.

A daily routine that prepares for upcoming commitments sounds simple — until it regenerates a different draft every morning. The fix came from API design: idempotency.

I have a routine that runs every morning. It reads my task list, checks my calendar, reconciles what's open against what's actually happened, and — this is the new part — looks ahead at what I've committed to over the next week and starts preparing for it. By the time I sit down, the blank page is already half-filled.

That sounds like the kind of thing every productivity influencer promises. The reason I'm writing about it is that the obvious version of it is quietly broken, and the fix is the interesting bit.

The trap: starting from scratch every single morning

The naive design is simple. Each morning, find commitments due soon, and generate a prep document for each one. Run it daily. Done.

Except a routine like that has no memory. On Monday it drafts a workshop agenda. On Tuesday it sees the same workshop still on the calendar and drafts the agenda again — a different one, because language models don't produce the same output twice. By Thursday you've got four contradictory drafts and a routine that's done four times the work to leave you more confused than if it had done nothing. It's busy, not useful.

The fix is a concept borrowed straight from API design: idempotency. An idempotent operation produces the same result no matter how many times you run it. Payment systems lean on this so a retried charge doesn't bill the customer twice; AWS frames it as what makes retries safe. I wanted my morning routine to have the same property. Running it five times in a week should advance one good prep, not spawn five rival ones.

The breakthrough wasn't teaching the assistant to prepare. It was teaching it to remember that it already had.

Prep once, advance daily

So the routine now keeps a small state file for every commitment it's working on. The first time it sees a meeting, it produces the actual draft deliverable — the agenda, the decision points, the first-pass document. Every morning after that, it doesn't regenerate. It reads the existing draft and advances it: a new fact from an email, a refined section, a flagged open question. The work accumulates instead of resetting.

I also capped it at a few new preps per run, so a busy week doesn't trigger a deluge, and pushed the heavy document generation out to separate workers so the morning pass stays quick. The architecture choice that made all of this clean was resisting the urge to cram it into one giant task. A small routine that the daily review triggers is easier to test, easier to run on demand, and easier to reason about — the same restraint I try to bring to client work, applied to my own plumbing.

The line it must never cross

Here's the rule I care most about: it prepares, it never sends. Every draft it produces is stamped review needed. It will write the workshop pack, propose the SOP, draft the follow-up — and then stop and wait for me. No email leaves, no decision is finalized, nothing is shared on my behalf.

This isn't timidity. It's the human-in-the-loop principle done deliberately: the agent runs many steps autonomously, then pauses at exactly the points where judgment and accountability live. The first real thing it caught was a client field-sales workshop that had no task attached to it anywhere — it lived only on my calendar. The routine noticed the gap, created the task, and drafted a full prep pack. Eighty percent of the thinking was done before I'd had coffee. The remaining twenty — the decisions only I should make — it left for me, clearly marked.

That ratio is the whole game. I've written before about how the leverage from AI isn't really speed, and this is the same lesson in a different costume. The value isn't that a machine writes my agenda. It's that the boring, repeatable 80% gets done reliably, every day, without me — so my attention lands only where it actually adds something. That's also why the skill-versus-agent distinction matters in practice, and why a reliable scheduled routine beats a clever one-off, the same way a fix that runs every session beats a fix you have to remember to run.

Most people aiming AI at their workflow ask it to do more. The better question is how to make it stop doing the same thing over and over.

Sources & further reading

External — Stripe API Reference, Idempotent requests; Amazon Builders' Library, Making retries safe with idempotent APIs; WorkOS, Why AI still needs you: human-in-the-loop systems.

Related postsI let AI clear two years of receipts. The leverage wasn't speed.; The art of restraint; Claude Skills vs Claude Agents; Claude Cowork keeps hanging? Here's the fix that runs every session.

Subscribe to Remco Livain

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe
Work with me →×