I built a tool to prove my AI coach wrong about my Zone 2 rides. It sided with him.
This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady What I Built On 4 October my AI coach, an agent I run in OpenClaw, had planned a long ride in Zone 2: heart rate under 140, even on the climbs. A bit more than two hours in, the climb to Canareccia turned up

Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady Submission 馃Ε
This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady
On 4 October my AI coach, an agent I run in OpenClaw, had planned a long ride in Zone 2: heart rate under 140, even on the climbs. A bit more than two hours in, the climb to Canareccia turned up to 11 % for 900 metres. I was in 34脳34, the easiest gear on the bike, my legs turning at 57 rpm. My heart was at 170.
After my long rides, the coach keeps saying the same thing: my Zone 2 rides drift into tempo. Its notes even have a theory: I chase personal records on Strava segments. That Sunday I beat my best time up Canareccia by one second, so I won't argue with that one. What I wanted to know was something the curves don't say: on that 11 % stretch, at the slowest pace I can actually ride, was Zone 2 even possible?
Zone 2 is the one workout where holding back is the assignment: ride slowly, for a long time. I keep failing it, and working out why means a long look at the curves after each ride. z2analyzer does that chore: a small web app I run on my own machine, which gives the answer in two lines and keeps every analysis.
After a ride, I start a new analysis and drop the FIT file from my bike computer. A few seconds later, the page splits the minutes I spent above Zone 2 between three causes:
119 min above Zone 2: 45 imposed by the road, 5 by the heat, 70 mine. Zone 2 was possible on 88 % of the kilometres, 72 % of the time. Enter fullscreen mode Exit fullscreen mode Before a ride, I drop a GPX and pick a start time. It takes the temperature from the M茅t茅o-France forecast and tells me how much of the route I can ride in Zone 2, in kilometres and in time, and where it can't be done. The same loop, for Saturday 24 October at 8:30:
Zone 2 is possible on 89 % of the kilometres, but 70 % of the time. 11 passages where it is not: 6.8 km, 1 h 02 even at your slowest pace. Enter fullscreen mode Exit fullscreen mode The two numbers differ because climbs are slow: they weigh more in time than in distance, and my coach counts in time.
I don't even have to drop the file: pointed at the folder where my FIT files land, z2analyzer judges each new ride on its own, and the verdict waits in the list.
It is not a route planner. It suggests no route and gives no training advice: it looks at a route I give it, or a ride I did, and says what the road allowed.
The video runs both on my own rides, from a new analysis to its result page. It shows minutes and percentages only, and no map or profile of the first and last 2 km of a ride.
How much of a ride can really stay in Zone 2?
On some slopes, even in your smallest gear and at the slowest cadence you can actually hold, the power the road asks for is above your Zone 2 ceiling. Those minutes are the road's, not yours. z2analyzer sorts out which minutes are which, before and after the ride, so you don't have to read the curves.
It is a small web app you run on your own machine: open it, start a new analysis, drop a file, and the result page comes a few seconds later. Every analysis stays in the list.