cycling coach · enduragent.icu

An AI cycling coach that knows your actual training

It runs on your machine, reads your real data from intervals.icu, reviews your rides, answers training questions and builds workouts that land on your Garmin or Wahoo. Chat with it in your terminal or in Telegram. Free and open source.

No API key needed if you have ChatGPT Plus — you can sign in with your existing subscription.

What is my current form?
Fitness 41.8 · Fatigue 51.4 · Form −9.6. Solidly in the functional training zone. This week's load bumped fatigue, which is exactly what a build week should do. You're working, not digging a hole.
Create a 2x30 min threshold workout for today
On your calendar. 15 min ramp warmup, 2 × 30 min at 96–99% FTP with 8 min recovery. It will sync to your head unit in a few minutes.
real exchange with the coach, shortened

What you need

Four things. Two of them you may already have.

  • A Mac or Linux machine that can stay on while you chat with the coach. Windows works via WSL2.
  • Node.js 22 or newer — free from nodejs.org (pick the LTS installer). It comes with npm, which installs the coach.
  • A free intervals.icu account — that's where your rides live. Step 1 below.
  • An AI to power it — your existing ChatGPT Plus subscription, or an API key from Anthropic, OpenAI, Google and others. Step 3 below.

Set it up

Follow the four steps in order. If you already use intervals.icu, skip to step 2.

1

Connect your training data (intervals.icu)

intervals.icu is a free training-analysis site the coach reads your data from. If you ride with a Garmin, Wahoo or use Strava, your history imports automatically.

  1. Create a free account at intervals.icu.
  2. In Settings, link the service that records your rides — Garmin Connect, Wahoo, Strava, COROS, Suunto or Polar. New rides then sync to intervals.icu on their own, and workouts the coach creates sync back to your device.
  3. Still in Settings, scroll to Developer Settings and generate an API Key. Note the key and your athlete id (it looks like i1234567) — the setup wizard asks for both.
2

Install the coach

Open Terminal and run these three commands:

$ npm install -g cycling-coach
$ cycling-coach setup
$ cycling-coach

The setup wizard walks you through everything: your AI provider (step 3), your intervals.icu key (step 1), and Telegram if you want it (step 4). Answers are saved, you run setup once.

3

Pick your AI

no api key

Use your ChatGPT subscription

Have ChatGPT Plus, Pro or Business? In the wizard, choose OpenAI Codex (ChatGPT subscription). Your browser opens, you sign in to ChatGPT, done. The coach uses your subscription quota — no separate key, no extra bill. This path is marked experimental and needs at least the $20/mo Plus tier.

api key

Bring an API key

Pay-as-you-go key from Anthropic (recommended), OpenAI, Google, DeepSeek, Qwen, MiniMax, Kimi, Z.AI or OpenRouter. You create the key in the provider's console, paste it into the wizard, and you control the spend directly in your provider account.

4

Optional: chat from your phone via Telegram

Without this, the coach is a chat in your terminal. With it, the coach is a Telegram bot in your pocket.

  1. In Telegram, message @BotFather and send /newbot. Give it any name.
  2. BotFather replies with a bot token — paste it into the setup wizard (or re-run cycling-coach setup later to add it).
  3. Start cycling-coach, open your bot in Telegram and say hi. Only you can talk to it — other users are rejected unless you allow them.
Prefer the cloud? There's a one-click Railway template that keeps the coach online 24/7 without your computer: deploy, then paste the same intervals.icu key from step 1, an AI API key, and a Telegram bot token from step 4 (Telegram is the chat surface there — no terminal in the cloud). Two caveats: ChatGPT-subscription sign-in doesn't work in cloud deploys, so bring an API key, and Railway itself is a paid host (a few dollars a month). Details in the README.

Questions you'd reasonably ask

What does it cost?

The software is free and MIT-licensed. You pay only for the AI that powers it: nothing extra if you sign in with an existing ChatGPT Plus subscription, or pay-as-you-go if you bring an API key. intervals.icu is free too (they run on voluntary supporter subscriptions).

Where does my training data go?

The coach runs on your machine. Your data moves between intervals.icu, your chosen AI provider and you — there's no server of ours in the middle. The app makes one anonymous version-check ping so it can tell you when an update exists; it contains no personal data, and you can disable it.

What can I actually ask it?

Anything you'd ask a coach who has read your file: what's my form, review yesterday's ride, why was my heart rate high, build me a 12-week gran fondo plan, create a threshold workout for tomorrow, move today's session. Workouts it creates land on your intervals.icu calendar and sync to your head unit as structured workouts with power targets.

I don't use intervals.icu. Can I still try it?

Yes — the coach works without it (zones from your FTP, plans, general coaching). But the good stuff comes from your real data, and intervals.icu takes about five minutes to set up. It's worth it.

Is my riding data safe with the AI provider?

The coach sends the AI only what it needs for your question — training metrics, not your identity. Your intervals.icu key stays on your machine (on macOS it can live in the Keychain). The full source is on GitHub if you want to check what it does — that's the point of it being open.

What's next for this project?

A desktop app that removes the setup entirely: download, chat, connect. Running support is in the works too. The build is documented in public at @sks.cycling.