Agentic rituals
I’ve never managed to keep a todo list. The usual answer to that is a todo app and some discipline, and I’ve never had either. My to-dos turn up in Slack DMs, threads, emails and call transcripts, and plenty of them are never even written down as a to-do: “let me check”, “I’ll send that tomorrow”, a question I asked that nobody answered.
What I do have now is an AI agent that can read all of those, so I’ve handed my todo list over to it, I even got it to write most of its tooling.
My only job is to tick things off. I’ve put the generic parts up as agentic-rituals.
The ritual
It’s three skills, each run at a particular point in the day:
- 06:30, before I’m up:
open-itemsreads the last couple of weeks of Slack and the last week of meetings, picks out anything that’s an open item, and writes it to a Markdown file in my notes. That’s either someone waiting on me, me having said I’d do something, or me having asked something nobody’s answered. - When I sit down:
daily-prioritiesreads that file and my next few days of calendar, and tells me what matters, starting with whoever I’m about to be in a meeting with. - Before I go home:
end-of-day-wrap-uplooks at what I said I’d do today and checks whether I’ve done it.
The morning run is deliberately cautious and the evening one is deliberately paranoid - in the morning, a to-do that isn’t really one makes me trust the list a bit less and if it misses something, someone will chase me and it’ll turn up tomorrow.
In the evening it’s a short list, and I’d much rather be nagged than go home having forgotten to send the thing I promised.
The output is boring Markdown with checkboxes:
- [ ] Send Jane the collector config she asked for
- **owed-by-me** · Jane Doe · 2d · #acme-onboarding — "can you send the config?"
Sadly, I still have more things-to-do than time-to-do-them-in, and this is only exacerbated by having something that near-flawlessly keeps track of everything!
What I learnt making it
The biggest thing here was that it’s actually quite productive to get the agent to write it’s own tooling - most of my skills began with my asking Claude to write one, and a lot of the finessing came from asking Claude what I’ve had to correct it on.
I settled on a pattern of declaring rules to the agent, both for writing skills and running them:
Scripts collect, the model judges. “Check Slack” means something slightly different every time you ask an LLM. A script always checks the same channels over the same window. So scripts fetch everything, and the model does the bit only a model can do: deciding whether “yeah, I’ll have a look” is a promise.
Make it prove it did the work. Agents love a shortcut, and a favourite is deciding nothing can have changed since last time and reusing the old data. So every fetch script prints a timestamp, and the skill has to print that timestamp back. It can only know it by actually running the script.
Keep a list of forbidden shortcuts. Every time Claude found a clever, wrong way round a step, it went on a list at the top of that skill. “File is recent, skipping the fetch” is on it. So is “restoring the file from git history”. It’s like a junior’s onboarding doc, written one incident at a time.
Give everything an ID. Each item carries a hidden slack:<channel>:<timestamp> style reference, so a run the next day knows it’s the same item and keeps it ticked.
Let a hook say no. A run at 06:30 can’t stop to ask permission, so it needs blanket permission to write to my notes. A blanket permission also means it can quietly overwrite something I wrote by hand. A small hook lets it create new files freely but asks before it overwrites one.
What isn’t in the repo
The real versions read my employer’s Slack, meeting tools and account data, so the code that fetches all that isn’t here. The README describes what a fetcher needs to output, and writing one for your own tools is a short conversation with your own agent. The same goes for the twenty-odd other skills I run for work. Those were most of the effort and most of the value, but they all follow the same rules.
What is there: the three skills in generic form, the scripts that carry ticked items over between runs, the overwrite hook, a tool for checking you’ve removed people’s names before you publish your own copy, and my notes on how I write skills.
The README goes into much more detail. The bit I’d steal first is the forbidden-shortcuts list.