{"slug": "building-my-own-ai-cycling-coach-with-claude-and-strava", "title": "Building my own AI cycling coach with Claude and Strava", "summary": "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.", "body_md": "# How I built an adaptive AI cycling coach using Claude, the Strava Connector, and a skill to create workouts\n\nSince the rise of AI tools, I have been trying to build my own cycling coach. I use an app called [Join](https://join.cc/), 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.\n\nBut in spring and summer, it is very different.\n\nIn 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.\n\nI 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.”*\n\nAnother 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.\n\nWhen the [Strava Connector](https://press.strava.com/articles/strava-launches-mcp-connector) for Claude was released, I started to think a custom Claude skill could be enough for this. So I built my own setup.\n\n## The skill\n\nThe skill is in this repository: [estruyf/skill-cycling-plan-coach](https://github.com/estruyf/skill-cycling-plan-coach). From the [releases page](https://github.com/estruyf/skill-cycling-plan-coach/releases), 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.\n\nOnce `cycling-plan-coach.skill`\n\nis installed, you can use it in Claude with the `/cycling-plan-coach`\n\nslash command. It should also work if you ask for a new cycling plan for the coming week.\n\n## The setup: building the athlete profile\n\nWhen 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`\n\nprofile:\n\n- Preferred language and units (metric/imperial)\n- Main goals for the season\n- Gender, age, and body weight\n- Current FTP (Functional Threshold Power)\n- Typical riding days (when are you available for workouts vs. group rides)\n\nThese 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.\n\nOnce 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.\n\n## The data engine: pulling from Strava\n\nTo give useful advice, the AI needs data. Before any weekly plan is built, my skill makes four calls to the Strava connector.\n\nHere is what happens in the background:\n\n`get_athlete_zones`\n\n: Gets your current FTP and power zones. This FTP sets every watt target in the coming week. If the API flags`ftp_is_estimated`\n\n, it falls back to a manually set value.`get_athlete_profile`\n\n: Gets profile data like name, weight, and unit preference.`list_activities`\n\n: Checks the last 14 days, filtering for`Ride`\n\nand`VirtualRide`\n\n. It pulls distance, moving time, elevation, and`relative_effort`\n\n(as a stand-in for fatigue). It summarizes the last 7 days to tune the coming week’s load.`get_activity_performance`\n\n: 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.\n\n## The result: a week that actually fits my life\n\nAfter analyzing my profile and Strava data, the skill generates a set of files for the week: `.zwo`\n\nfiles for virtual training, and markdown files describing the full plan and strength routines.\n\nHere is an actual summary of the plan Claude generated for me:\n\n### Generating the structured workouts\n\nThe skill automatically creates `.zwo`\n\nfiles for structured interval days. The rules that tell Claude how to structure these XML files live in a specific [ZWO Format Markdown file](https://github.com/estruyf/skill-cycling-plan-coach/blob/main/references/zwo-format.md) in the repository.\n\n### Strength and core training\n\nFor 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.\n\n## The Garmin hurdle\n\nOnce I had my `.zwo`\n\nfiles, 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.\n\nThis 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 uploading custom *workouts*.\n\nBecause manually recreating Claude’s workouts in the Garmin Connect UI took too much time, I built a workaround: the **Garmin Workout Browser Extension**.\n\nThis 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](https://github.com/estruyf/garmin-workout-browser-extension).\n\nWhen you use the extension, you get a new “Workouts” button on Garmin Connect pages.\n\nWhen you click it, you can view workouts, clone workouts, edit them, or upload ZWO files that get converted to the Garmin JSON format.\n\n## Wrapping up\n\nUsing 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.\n\nLet 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.\n\n## Resources\n\n## Related articles\n\n[ AI Handy Productivity Voice Dictation Workflow ](/stop-typing-start-talking)\n\n### Stop typing, start talking\n\nDiscover how voice dictation can transform your workflow and boost productivity. Stop typing and start talking today!\n\n[ Custom Actions SharePoint Designer Workflow ](/developing-a-sharepoint-2010-designer-workflow-action-to-retrieve-the-file-extension)\n\n### SharePoint Designer Workflow Action: Retrieve the File Extension\n\n[ SharePoint Designer Workflow ](/sharepoint-designer-2010-start-approval-process-workflow-action-not-working-in-other-languages)\n\n### SharePoint Designer 2010 – Start Approval Process Workflow Action Not Working In Other Languages\n\n### Report issues or make changes on GitHub\n\nFound a typo or issue in this article? Visit the [GitHub repository](https://github.com/estruyf/blog-content/tree/main/content/posts/2026-06-11-building-my-own-ai-cycling-coach-with-claude-and-strava.md)\nto make changes or submit a bug report.\n\n### Comments\n\nLet's build together\n\nManage content in VS Code\n\nPresent from VS Code\n\nEngage with your audience throughout the event lifecycle", "url": "https://wpnews.pro/news/building-my-own-ai-cycling-coach-with-claude-and-strava", "canonical_source": "https://www.eliostruyf.com/building-ai-cycling-coach-claude-strava/", "published_at": "2026-06-11 15:59:31+00:00", "updated_at": "2026-06-11 18:53:44.920055+00:00", "lang": "en", "topics": ["ai-tools", "ai-products", "artificial-intelligence", "generative-ai"], "entities": ["Claude", "Strava", "Join", "Strava Connector"], "alternates": {"html": "https://wpnews.pro/news/building-my-own-ai-cycling-coach-with-claude-and-strava", "markdown": "https://wpnews.pro/news/building-my-own-ai-cycling-coach-with-claude-and-strava.md", "text": "https://wpnews.pro/news/building-my-own-ai-cycling-coach-with-claude-and-strava.txt", "jsonld": "https://wpnews.pro/news/building-my-own-ai-cycling-coach-with-claude-and-strava.jsonld"}}