Hey all — early-stage side project I’ve been building. Sharing here to get feedback from people who’d actually use it. GitHub, MIT, BYOK.
What it is
An AI cycling coach you chat with on Telegram (or in your terminal). It connects to your intervals.icu account, reads your actual numbers, and writes structured workouts back to your calendar — which then syncs to Garmin/Wahoo/Hammerhead/COROS/Suunto/Zwift the usual way.
How it works
- You message it (“what should I ride today?”, “build me a 12-week gran fondo plan”, “I tweaked my knee, adjust this week”)
- It reads your Fitness / Fatigue / Form, recent activities, wellness, eFTP, and zones from intervals.icu
- Deterministic cycling logic runs locally — zone calc from FTP, periodization model selection (linear / block / reverse linear / polarized / pyramidal), feasibility check on FTP or W/kg targets, weekly templates with hard-day spacing
- An LLM (Claude, GPT, or Gemini — your key, your bill) stitches the data + logic + coaching context into a reply
- When you approve a plan or workout, it pushes to your intervals.icu calendar
What I tried to get right
- Numbers aren’t hallucinated. Zones, load estimates, and plan structure come from typed code, not the LLM. The LLM frames and explains; it doesn’t invent watts.
- It remembers you. Goals, injuries, schedule constraints, and preferences are stored locally at
~/.cycling-coach/and reloaded every session. - Form-aware by default. The coaching prompts tell it to recommend recovery when Form drops below -30, and to flag rising fatigue / declining Form as overtraining signals. (Prompt-level, not a hard gate — an LLM can still be argued with.)
- It’s honest about feasibility. If your goal FTP is unrealistic given current Fitness and time-to-event, it says so with numbers.
- BYOK, local-first. No subscription, no server. Your data stays between your machine, intervals.icu, and whichever LLM you choose.
Install
npm install -g cycling-coach
cycling-coach setup
cycling-coach
Needs Node 20+. Setup wizard walks you through LLM key, intervals.icu key, and
(optional) Telegram bot token.
GitHub: GitHub - yerzhansa/cycling-coach: Open-source AI cycling coach — BYOK, Telegram bot, intervals.icu integration · GitHub
NPM: https://www.npmjs.com/package/cycling-coach
Would love feedback — especially on the coaching prompts and periodization logic. Happy to take issues, PRs, or just DM-style “your bot told me to do X and I don’t buy it” reports.