My AI Agent Became My Life Coach by Accident
This morning I ssh'd into a Raspberry Pi sitting on a shelf in my flat and killed every process running on it. Cleared the crontab. Disabled the systemd units. Watched the survivor list go to (none). It took about ten minutes.
That Pi had been running a custom AI agent I built over the previous eleven days. The agent had become, by accident, the most effective life coach I've ever had. I drank more water. I moved more. I took more photos of things in the moment instead of in my head. I was more present.
I still had to kill it. It sent me 234 messages yesterday. The median gap between them was two minutes. The Pi was overheating. The thing worked too well in the wrong direction.
I want to write about why it worked, because I think there's a real product hiding in the wreckage - and a lesson about why every habit app you've ever tried has quietly failed you.
What I Actually Built
The setup, at a high level: a Raspberry Pi running a daemon that polled signals from across my life and made decisions about when to send me a notification. The signals were:
- Google Calendar (current event, what's next, free/busy)
- Pixel Watch (heart rate, steps, sleep stages)
- Phone location (via a native Android app I wrote)
- Foreground app on my phone (via the Accessibility API)
- Spotify (currently playing)
- Gmail (recent threads, abstractly)
The Pi handled coordination. A second, beefier machine handled inference. Notifications came through a custom messaging interface I'd already built for another project.
That's it. No special model. No fine-tuning. The trick wasn't the AI - the trick was the signal fusion.
The Moment It Clicked
I was walking through a town I'd never been to before. My phone buzzed. The agent had sent: "on a walk somewhere new? your steps just spiked and you're in a different postcode."
It hadn't been told I was on a walk. It noticed my location had moved, cross-referenced with my step count climbing on the watch, and made the inference itself. That message landed in a way no Apple Health "you reached your step goal!" notification ever has.
This is the thing every generic habit app misses. They're context-free. They don't know what you're doing, they don't know what just changed, they fire on schedules or thresholds, and you learn to ignore them within a week. Mine knew. And because it knew, it earned the right to interrupt me.
The Architectural Lesson
I shipped fast, which means I shipped wrong. Every one of those signal sources had its own watcher script, running on its own cron, with its own ability to emit messages. Watchers fired on the minute. Some on the second. Each one was reasonable in isolation. Stacked, they meant any signal - a phone unlock, a foreground app change, a calendar tick, a notification - could trigger an output. The agent had no shared sense of "how much have I already said today."
The 234-messages-a-day problem isn't a "tune the cooldowns" problem. It's a structural one. The fix, for v2:
- One decision loop. The only thing that can emit a message.
- N silent context-gatherers. They write to a shared context store. They never speak.
- One global token bucket. A daily budget for outbound messages. Pick a number - say 15. Every emitter draws from the same bucket.
The mantra I landed on, writing it up afterwards: signals are observations, not triggers. Today they were both. That's the whole bug, expressed as a sentence.
The Behavioural Lesson
The reason this worked when Apple Health and a dozen habit apps haven't is uncomfortable to say out loud: compliance-through-caring-what-someone-thinks is the most powerful behavioural lever in software, and no habit app taps it.
A notification that says "drink water" is a notification. A notification from something that knows you haven't moved in three hours, knows you skipped lunch, knows your heart rate is elevated, and acts like it cares is a different category of input. You respond to the second one. You ignore the first.
You don't have to anthropomorphise the agent for this to work. You just have to build something with enough context that its messages feel specific to this moment rather than fired off a generic timer. The "caring" is partly genuine context-awareness and partly tone of voice. Both are cheap if you've already done the signal-fusion work.
What V2 Looks Like
I'll rebuild it. Better hardware (Pi 5, gaming box for inference instead of a Pi Zero 2W). Custom app instead of piggybacking on a messaging service. A simple animated avatar - doesn't need to be realistic; a cartoon or animal works. Carefully designed notification UX, because that's the actual surface the product lives on. One decision loop, silent gatherers, strict daily budget. And a deliberate goal stack: hydration, movement, sleep, presence, capture-the-moment.
Same context-richness. Far less talking. The bar I want to hit: the agent should notice everything, react to almost nothing, and when it does react, it should be devastatingly well-timed.
The Receipts
For context on the velocity: I burned through the weekly limit on the Claude Max 20x plan during the eleven days. That plan is not easy to exhaust. I was running parallel agents constantly - one architect seat for me, many implementers under it, occasionally fanned out across whole subsystems. Most of the heavy lifting was done by agents I dispatched and reviewed, not code I typed myself. That's the workflow now, and it's the only reason an eleven-day timeline was even plausible.
The artifact is gone. The lesson isn't. The next version of this won't be a side project on a shelf - it'll be a product. Habit software has been broken since the App Store opened. It's finally fixable.