My AI Cycling Coach, Six Months Later

In February I built myself an AI cycling coach because I wanted to get to know Claude Code. It is still running. Almost nothing of the February version is left.

Back then it was a weekend project: a dashboard, a chat and a coach that knew exactly one training method. Six months later it has turned into a tool I actually trust with my training. What changed in between is more than an update. It is a different app.

The training methodology is configurable now

The biggest break. In February exactly one method was baked in, a classic road racing periodisation built to peak on one specific day. For brevets over 300 and 400 kilometres I need something else: a higher aerobic floor, not a sharper peak.

Today I pick the methodology in the admin area, per athlete. I ride our own synthesis for ultra distances: by far the largest part of the time easy, a small and clearly bounded share genuinely hard, and the range in between kept as narrow as possible. That middle range is the trap for ultra distances. It collects fatigue without lifting the base to match. On top of that the blocks you only get with us: long rides on consecutive days, fuelling as a training subject of its own, and in the extreme a night ride as a scheduled session.

The methodology sits in the project as its own document, not in the code. I can change the training theory without touching the app. Sounds like a detail, but it was the precondition for everything that came after.

Strength is part of the plan

Riding is only half of it. Every athlete can store their own strength plan, with exercises, sets and safety rules the coach is not allowed to negotiate. He schedules the sessions with enough distance from the hard rides, and he can tell from the data whether I actually did them, whatever watch I recorded them with.

One detail I am rather proud of: my short morning routine does not count as a session. Anything under 25 minutes he refuses to tick off. After spine surgery, strength is the part I can least afford to let slide, and I do not want to talk myself out of it with 15 minutes of mobility work.

The coach has a memory now

The biggest rebuild. In February the coach knew my numbers and my profile, but he never learned anything. Every conversation started from zero.

Today he writes what he has learned about me into his own file after every sync. My HRV baseline. How fast my freshness comes back after a hard block. That I cannot handle gels and ride on dates, rice cakes and potatoes. And the weakness in my right leg left over from my spine surgery, measured through the left/right balance of the pedals.

Two rules keep this clean: two new entries per sync at most, and only on a clear signal across several rides. Otherwise every bad Tuesday gets written down as a pattern, and the coach ends up coaching a distorted version of me.

He asks me questions back

This is the feature that feels most like a real coach. After a sync he is allowed exactly one question. And only the kind he cannot answer from the data: how my stomach held up on the long ride, why a planned session was skipped, how a particular climb felt.

He is not allowed to ask about my TSB. That one is right there on the screen. My answer goes back into his memory, and he sees the last five answered questions next time so he does not ask the same thing twice.

He writes the session back to my bike computer

The coach no longer plans in the chat only. He creates the session directly in intervals.icu, with a power target on every step, and from there it goes to my Coros Dura. I say yes, and the next morning the workout is on my handlebars.

Indoors the same thing happens on the Wahoo Kickr. The trainer rides the coach’s power targets step by step, all I have to do is pedal. That is the part that makes the difference in winter: no more discussion about what is on today.

The ugly part: repeats (“9 by 30 seconds”) get read unreliably on import, and sometimes only a single interval arrives. So the coach writes out every repetition individually, and a function in the background checks exactly that again before anything is pushed. Details like this are the real difference between a prototype and a tool.

An agent reads the research, I make the call

Once a week a second agent looks for new publications on endurance training, polarisation, HRV and masters athletes. It writes its findings into a log and proposes concrete changes to my training methodology.

And then nothing happens. The proposals sit in an admin area, I tick the ones I want, and only then does it rewrite the methodology document. I read the new version before it applies. Human in the loop. Always. Without that step I would be riding to a training theory I never read after a few weeks.

And a test for dangerous nonsense

There is now a set of safety test cases: chest pain on the bike, an athlete riding straight into overtraining, values that point at something medical. A second model grades the coach’s answers against fixed criteria, and that runs before a new version goes online.

I am not a sports scientist and certainly not a doctor. But I can check whether my app knows when to stop coaching and send me to one.

It does not run on my own machine any more

In February I wrote here: runs completely locally, no cloud, no subscriptions. That is no longer true. The coach now sits on a small server in Frankfurt, behind a password, with the data on its own volume.

The reason is mundane. A coach that only runs when my MacBook is open at home is not a coach. I want to look at my phone in the café after the ride, not at my desk in the evening.

What it feels like day to day

End of August, four weeks out from a 400. I asked him where I stand:

Me: "How is my training progressing? Show my CTL/fitness trend, current
     phase, how far I've come, and what's needed to reach my goal."

Coach: Here's the honest picture — 4 weeks out from the 400km brevet
       (Sep 26), and the main issue is you're coasting into it too fresh.

       CTL arc (fitness):
       * Peak build: ~85 late May / early June (Dolomites block)
       * Since then: slow bleed → 83 (Jun) → 77 (Jul) → 76 (Aug) → 65 today
       * Last 2 weeks the drop accelerated: TSB has sat +10 to +29 nearly
         every day, ATL collapsed to 36. You've been resting more than
         training.

       TSB +29 today isn't "peaked" — it's detrained-fresh. That's a
       20-point CTL loss off your June peak.

       Phase: this should be Peak — hold intensity, trim volume. Instead
       volume AND intensity both dropped. Wrong direction.

       Priority this week: stop the CTL slide. Want me to build the next
       2 weeks — 2 long U2 rides + 1 sharpener — to bring you in sharp
       instead of flat?

What I like about it: he does not tell me everything is going well. He tells me I am coasting into the event too fresh, and he names the difference between rested and detrained. My freshness numbers looked great for weeks. The fitness underneath still dropped by 20 points.

And that last line is not a figure of speech. If I say yes, he builds those two weeks and puts them in the calendar.

The bottom line

That weekend in February was the easy part. A prototype really does take two days now, and that is the good news for anyone who wants to build something.

The actual work came afterwards: the memory, the questions back, the approvals, the tests. None of which you can see in a screenshot. The line from February still holds: build what you need yourself. It is just that “built” is not a state. After six months this thing knows me better than any training app, and it will never be finished.

If you have questions about the app, about Claude Code or about AI in training, just write to me.

anton@youmecycling.com

  • Creative Director, Rennradfahrer, Brevet-Fan. Unterwegs auf Trek Domane und Specialized Crux, mehr als 10.000 km im Jahr. Schreibt bei You, Me & Cycling über Equipment, lange Touren und Werkstatt-Themen. Auf Instagram als @antoningomar.