The machine that runs my todo list while I sleep
A headless Mac Mini, a cron job every fifteen minutes, and a timeline of what it actually did.
The Mac Mini sits headless in a closet, running cron jobs every fifteen minutes. It doesn’t ask for confirmation. It doesn’t wait. Things 3 holds my task list; an LLM processes it; iMessage carries the results to my phone. The whole chain runs whether I’m at my desk or not.
I built it because manually triaging a backlog of tasks is slow and repetitive in exactly the way computers are supposed to handle. The specific problem: Things 3 has no API, so anything that touches my task list has to go through AppleScript. The model reads the output, reasons about priority, and writes back. iMessage is the transport layer because it’s always available and I already have it. Nothing clever there. It just works.
The cron schedule is fifteen minutes during working hours. A run takes a few seconds. The model reads the current task state, applies whatever context I’ve given it about my priorities, and either reorders, flags, or passes through. Most runs change nothing. That’s fine. The value is not in constant churn; it’s in not having to remember to check.
I want to build a timeline scrubber for the day’s runs next. The idea is simple: a local interface that lets me watch the entire day’s automation tick past in real time, or step through it like a video with a scrub bar. Each cron run is a frame. I can see what the model saw at 9:15, what it did at 9:30, and whether the state at noon matched what I expected. Right now I read logs. Logs are fine. But watching the day compress into a short playback would tell me things logs don’t: whether the system is actually making decisions or just confirming the status quo.
illustrative day — cron every 15 min, 9:00 to 17:00
Hover or tap a tick to see what that run did.
The iMessage layer is more useful than it sounds. Most automation surfaces results through a web UI you have to remember to open. iMessage arrives. I read it, reply if I want to intervene, and move on. The reply goes back to the Mac Mini and can change what the next run does. That feedback loop is lightweight enough that I actually use it, which is the whole point.
The system isn’t doing anything exotic. The model is reasoning about a list of text items with some context about my work and day. The intelligence, such as it is, comes from the model knowing what “urgent” means in relation to everything else on the list. I don’t prompt-engineer elaborate frameworks. I describe my situation plainly and it handles the rest.What changes with an autonomous system is pressure. Nothing depends on me checking in. The list processes whether I touch it or not. Most days that means I spend ten minutes less on triage. Some days it means a task I’d have forgotten surfaces before it matters. That’s the return. Not transformation, just slightly less friction.