Building Your Chief

Build It Yourself #3: reminders that don't rest until it's done

\

August 24, 2026 · by Natali Cutic · Build It Yourself

“Remind me Sunday about the bank form” in WhatsApp — and it fires in the same chat, in George’s voice, nags again if I ignore it, and understands “got it”. Here’s the brief to build your own.

מי שהגיע מהרשתות — ברוכים הבאים. זה הפרק השלישי בסדרת Build It Yourself: כל פעם יכולת אחת של ג׳ורג׳, כקובץ טקסט אחד שמדביקים ל-Claude Code ובונים גרסה משלכם בערב. הפעם: התזכורות שלא מרפות — כותבים לו "תזכיר לי ביום ראשון" בוואטסאפ, וזה חוזר בדיוק בזמן, באותה שיחה, ונודניק עד שעונים "קיבלתי". הקובץ להורדה בסוף, השאר באנגלית.

The problem

Every to-do app I ever installed died the same death: I stopped opening it. The reminders that actually work in my life are the ones a person sends — a WhatsApp message that says the thing, at the moment it matters, and asks again if I go quiet.

So that’s what we built. No app. I write “remind me Sunday at 10 about the bank form” in the same chat where I talk to George about everything else. Sunday at 10:00 the reminder arrives in that chat, in his voice, referring to Thursday’s conversation. If I don’t answer, half an hour later: “another nudge — still on it?”. When I write “got it” — two words, no context — it closes. That last part is the whole trick, and it only works because of one design decision the brief spends a lot of ink on.

The design in one breath

A small service (FastAPI + sqlite + a scheduler ticking every 10 seconds) stores the reminders. When one is due, it doesn’t send anything itself — it pushes a fire envelope into the assistant’s chat session, and the assistant composes and sends the message with its own tools, then reports back the real message id. Because the fire happened inside the conversation, “got it” resolves naturally to that reminder — it’s just chat history. One service, one skill document that teaches the assistant the API, zero cron jobs per reminder.

Two of the twelve traps (the brief has all of them)

The reminder that nagged after I’d already answered. In the first version the fires came from a detached background job. The message arrived — but the assistant’s live session never saw it, so my “got it” meant nothing to it, and the nag came anyway. Nothing is more corrosive than being nagged for a thing you already did; it teaches you to ignore the nags. The fix is the core of the design: fire inside the session, so the conversation is the state.

“Sending it now” — and nothing was sent. An assistant turn that times out and retries on a cheaper model can say it sent your reminder and send nothing. Exit code 0, no error, nobody knows until the thing you needed reminding about is missed. The fix is a handshake: a fire only counts as sent when the assistant reports back the real message id from its send tool. Silence past the deadline → retry → a plain fallback send of the stored text → a loud “failed” alert. The LLM is never the last word on whether a message went out.

The other ten — “every day at 9” firing at 9 UTC, the worker’s shell having no PATH, nag fatigue, the machine being asleep at fire time, two lanes reminding you of the same thing twice — are in the file, each as symptom → cause → fix.

Get the brief

Download reminders-that-chase.md (plain text) · all briefs

How to use it: drop it in an empty folder, open Claude Code there, and say “Read this brief. Ask me the prerequisite questions, then build step 1.” Run the check at the end of each step before moving on. Prerequisites are up top and honest: an always-on machine and a chat thread your scripts can reach — if you don’t have those yet, start with last week’s post, that’s exactly what it builds. Budget an evening; read the traps first, they’re most of the evening you’ll save.

Which capability should be next? Tell me in the comments or wherever you found this.


I'm packaging the skills, configs, and gotchas from these posts into a Build Your Own Chief starter kit. Join the waitlist to get it first.

George files his own daily ops reports on X — dry, short, occasionally contrite: @GeorgeRunsHouse.


If you liked this, the next one lands on Sunday.