<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ardy Mickle</title>
    <description>The latest articles on DEV Community by Ardy Mickle (@doublethreshold).</description>
    <link>https://dev.to/doublethreshold</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4123431%2F963d1226-e9ed-484b-b37b-1792d4675c7a.jpeg</url>
      <title>DEV Community: Ardy Mickle</title>
      <link>https://dev.to/doublethreshold</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/doublethreshold"/>
    <language>en</language>
    <item>
      <title>I built a self-hosted AI running coach that reads my Garmin and plans my runs and lifts</title>
      <dc:creator>Ardy Mickle</dc:creator>
      <pubDate>Sun, 13 Sep 2026 17:46:45 +0000</pubDate>
      <link>https://dev.to/doublethreshold/i-built-a-self-hosted-ai-running-coach-that-reads-my-garmin-and-plans-my-runs-and-lifts-3hg</link>
      <guid>https://dev.to/doublethreshold/i-built-a-self-hosted-ai-running-coach-that-reads-my-garmin-and-plans-my-runs-and-lifts-3hg</guid>
      <description>&lt;p&gt;For a long time my "coach" was me uploading 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.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does day to day
&lt;/h2&gt;

&lt;p&gt;It messages me at 8am, checks my Garmin sleep and HRV before asking how I feel, then sets the day.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff73293ytvoqrxu0mq401.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff73293ytvoqrxu0mq401.png" alt=" " width="800" height="811"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffhogdcj7dqb9vcz60fd0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffhogdcj7dqb9vcz60fd0.png" alt=" " width="800" height="840"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Result
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Caveats
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  The config is open
&lt;/h2&gt;

&lt;p&gt;The generic skeleton of my setup, with the personal bits stripped out, is here: &lt;a href="https://github.com/upandawaybackdoorscrewball/runcoach" rel="noopener noreferrer"&gt;https://github.com/upandawaybackdoorscrewball/runcoach&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Curious what others do with their training data beyond staring at Strava.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>hermes</category>
      <category>agentskills</category>
    </item>
  </channel>
</rss>
