The short version: On July 5 I went through two months of notes, calendars and backlogs across my projects and wrote down every time tracking work in prose had failed me. Fourteen incidents, all verified on disk. That list became the design document for the task system my agents and I run on now. Ten weeks in: 230 records across 11 projects, and the median time from created to closed was one day.
Get the week's seven in one email, every Monday.
What went wrong
A meeting note called July 1 “Tuesday” (it was a Wednesday), and the off-by-one shifted a publish date and a filename. An agent proposed writing a brief that a cron had already produced six days earlier, because it reconstructed state from calendar prose instead of looking in the drafts folder. A line saying “re-enable the daily scan” sat in a notes file for about five weeks while the timer stayed dead. A sync job was built for cron and never scheduled; I noticed 52 days later. A to-do file in my vault had about 617 open checkboxes, the oldest from mid-May. Eight consecutive days of spend-log entries misattributed who ran what: eight chances to catch it, zero catches.
Fourteen of these, and they’re all the same failure. A fact about state was living in a sentence that somebody had to remember to update.
What we learned
- Records are state. Prose is context. A sentence can describe a task. It can’t be queried, aged, or closed by a cron.
- The old objection to task tracking was right. In May I had rejected a kanban-style flag board, on the grounds that the same lapse that skips surface one skips surface two. So the design isn’t a second surface. The record is where the work lives, and the jobs that do the work update it as a side effect.
- Catch the lapse at the boundary. A hook at the end of every agent session checks whether an artifact changed without its record. The design rule: if the hook fires often, fix the CLI, not the people.
What went right
One schema, one command-line tool, one record per unit of work: owner, status, due date, who it’s waiting on, the next action, the artifacts, and a history line for every change. Notes and documents hold references to records, never restated status. Most records close the day they open: of the 151 closed by October 6, 66 closed the same day. The long tail, 7 that took more than a month, is where the work was waiting on me.
How to do it (as of October 2026)
- Before you build anything, count your failures: dates, projects, what happened. The list tells you what the system must do.
- One record per unit of work, with typed fields: dates as dates, the owner as a name, the status from a fixed list.
- Make the record the thing the work updates as it goes, not a thing to update afterwards. Crons and agents write to it as a side effect.
- Put a check at the boundary. When a session ends, did an artifact change without its record? Warn.
- Keep prose for context: why, what was tried, what to do next. Link it to the record. Never restate the status.
Status
Still true. As of October 26: 322 records across 12 projects, 115 of them open. The hook still fires, which is the point.