For a long time my "coach" was me up screenshots of Garmin Connect into Claude and asking what to do next. Earlier this year I set up a self-hosted agent on a Mac mini instead, and gave it read access to my Garmin (sleep, HRV, resting HR, VO2 trend, laps) through an MCP, my Strava uploads, and a folder where it keeps notes on me. Then I wrote it a long instruction file describing how I want to be coached. No more screenshots; it reads the data straight from the source. It messages me at 8am, checks my Garmin sleep and HRV before asking how I feel, then sets the day.
It designs the run and writes it to Garmin Connect, so I press start on the watch and go. It polls Strava, so the moment a run uploads it already knows, pulls the laps, and grades the session against what it prescribed, with the numbers.
It tracks my times, distances and lift numbers over time and decides when the load goes up. It tells me what to eat and when around hard sessions. And it adapts: this week it swapped an all-out 10K time trial for a progressive build after looking at the 14K I'd done the day before and the week's load.
I set a sub-20 5K goal and got there about a month later. Years of training came before that, so the coach didn't make me fast in a month; it made the last stretch a lot less guessy, and it saves me the hour a week I used to spend planning.
It's not an app. It's an agent framework (Hermes) plus config. You run it yourself, you need a model API key and a Garmin login. It occasionally reads Garmin's readiness score too literally, so I told it to ignore that metric.
The generic skeleton of my setup, with the personal bits stripped out, is here: https://github.com/upandawaybackdoorscrewball/runcoach
Curious what others do with their training data beyond staring at Strava.