cd /news/ai-tools/building-my-own-ai-cycling-coach-wit… · home topics ai-tools article
[ARTICLE · art-24235] src=eliostruyf.com pub= topic=ai-tools verified=true sentiment=↑ positive

Building my own AI cycling coach with Claude and Strava

A developer built an adaptive AI cycling coach using Claude, the Strava Connector, and a custom skill that creates weekly training plans tailored to social rides and strength training. The system pulls real-time fitness data from Strava, including power zones and recent activity, to generate workouts that fit around group rides and core sessions. The tool aims to solve the limitations of existing apps that fail to account for social cycling schedules or manual strength training planning.

read6 min publishedJun 11, 2026

Since the rise of AI tools, I have been trying to build my own cycling coach. I use an app called Join, which uses AI to build a weekly training plan. I have been very happy with it for a long time, especially in autumn and winter when I mostly ride indoors or train alone outside.

But in spring and summer, it is very different.

In spring and summer, I want group and social rides, and that is where most of these apps miss the mark. They do not ask when you plan social rides, and they do not easily include core and strength training, which I always had to plan by hand next to my bike sessions.

I realized I did not just want an app that gives workouts. I wanted one that knows about my weekend group rides and fits my structured workouts around them. I wanted a real coach I could talk to: “Hey, I’m doing a huge social ride this weekend, give me workouts during the week that build fitness without leaving me dead by Saturday.”

Another thing I missed was an easy way to include strength and core training. After my back injury, core work became essential, but many of these apps do not offer an easy way to add it. I wanted a coach that could add strength sessions without me having to schedule them by hand.

When the Strava Connector for Claude was released, I started to think a custom Claude skill could be enough for this. So I built my own setup.

The skill #

The skill is in this repository: estruyf/skill-cycling-plan-coach. From the releases page, you can download the latest version and install it in Claude. The skill is built to work with the Strava Connector, so make sure that is set up and linked to your Strava account.

Once cycling-plan-coach.skill is installed, you can use it in Claude with the /cycling-plan-coach

slash command. It should also work if you ask for a new cycling plan for the coming week.

The setup: building the athlete profile #

When you first use the skill I made, it does not immediately return a generic plan. It acts like a real coach onboarding a new client. It asks for details to build a full athlete.json

profile:

  • Preferred language and units (metric/imperial)
  • Main goals for the season
  • Gender, age, and body weight
  • Current FTP (Functional Threshold Power)
  • Typical riding days (when are you available for workouts vs. group rides)

These days can change. Each time you ask for a new schedule, Claude checks if you want to keep your set days or if your schedule changed.

Once the skill has all the data, it pulls your recent activity data from Strava to understand your current fitness and fatigue. This is where it gets useful.

The data engine: pulling from Strava #

To give useful advice, the AI needs data. Before any weekly plan is built, my skill makes four calls to the Strava connector.

Here is what happens in the background:

get_athlete_zones

: Gets your current FTP and power zones. This FTP sets every watt target in the coming week. If the API flagsftp_is_estimated

, it falls back to a manually set value.get_athlete_profile

: Gets profile data like name, weight, and unit preference.list_activities

: Checks the last 14 days, filtering forRide

andVirtualRide

. It pulls distance, moving time, elevation, andrelative_effort

(as a stand-in for fatigue). It summarizes the last 7 days to tune the coming week’s load.get_activity_performance

: Checks your most recent hard ride to get your power curve (5s, 1m, 5m, 20m$ best efforts). This classifies your rider type (sprinter, all-rounder, puncheur) and decides which interval sessions matter most.

The result: a week that actually fits my life #

After analyzing my profile and Strava data, the skill generates a set of files for the week: .zwo

files for virtual training, and markdown files describing the full plan and strength routines.

Here is an actual summary of the plan Claude generated for me:

Generating the structured workouts

The skill automatically creates .zwo

files for structured interval days. The rules that tell Claude how to structure these XML files live in a specific ZWO Format Markdown file in the repository.

Strength and core training

For strength and core sessions, the skill generates markdown files with detailed instructions. These are based on a combination of general strength training principles for cyclists and specific exercises that target the core and back, which are crucial for my injury prevention.

The Garmin hurdle #

Once I had my .zwo

files, I needed to get them on my bike computer or indoor trainer. I use MyWhoosh indoors, and the files drop right in. But outside, I use a Garmin.

This part was frustrating. Garmin heavily limits its APIs. They allow third-party developers to upload activities, but they do not expose a public API endpoint for up custom workouts.

Because manually recreating Claude’s workouts in the Garmin Connect UI took too much time, I built a workaround: the Garmin Workout Browser Extension.

This Chrome extension fills the gap, letting you import those AI-generated ZWO files right into your Garmin calendar. It is currently waiting to be published in the Chrome Web Store, but you can check the source code here: estruyf/garmin-workout-browser-extension.

When you use the extension, you get a new “Workouts” button on Garmin Connect pages.

When you click it, you can view workouts, clone workouts, edit them, or upload ZWO files that get converted to the Garmin JSON format.

Wrapping up #

Using the skill feels very natural, whether in the Claude Desktop app or the CLI. I just started using it, so I will likely tweak it to get more consistent results, but the first output looks very promising.

Let me know what you think, and if you try it, share your experience. Feel free to share feedback or ideas to improve it. I am excited to see how this evolves and how it can help other cyclists build more personal and adaptive training plans.

Resources #

AI Handy Productivity Voice Dictation Workflow

Stop typing, start talking

Discover how voice dictation can transform your workflow and boost productivity. Stop typing and start talking today!

Custom Actions SharePoint Designer Workflow

SharePoint Designer Workflow Action: Retrieve the File Extension

SharePoint Designer Workflow

SharePoint Designer 2010 – Start Approval Process Workflow Action Not Working In Other Languages

Report issues or make changes on GitHub

Found a typo or issue in this article? Visit the GitHub repository to make changes or submit a bug report.

Comments

Let's build together

Manage content in VS Code

Present from VS Code

Engage with your audience throughout the event lifecycle

── more in #ai-tools 4 stories · sorted by recency
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/building-my-own-ai-c…] indexed:0 read:6min 2026-06-11 ·