.claude/skills/strava-coach/SKILL.md
Query Strava and propose training sessions. Use when the user wants to see their recent activities, global Strava statistics, or receive training proposals based on their history.
npx skillsauth add AlvaroLaraFF/strava-coach strava-coachInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Skill to query Strava data and propose training plans. Detects user intent and executes the corresponding branch.
Before doing anything, verify the setup is complete:
python3 -c "
import sys; sys.path.insert(0, '.')
from strava.db import load_token
from strava.client import get_default_db_path
import os, time
errors = []
if not os.environ.get('STRAVA_CLIENT_ID'): errors.append('MISSING_CLIENT_ID')
if not os.environ.get('STRAVA_CLIENT_SECRET'): errors.append('MISSING_CLIENT_SECRET')
token = load_token(get_default_db_path())
if not token: errors.append('NO_TOKEN')
elif token['expires_at'] < time.time(): errors.append('TOKEN_EXPIRED')
print(','.join(errors) if errors else 'OK')
"
OK, proceed to intent detection./strava-setup first to configure everything step by step." and stop.Analyze what the user asked for:
Ask the user if they want to filter by sport or number of activities, or use defaults (last 20, all sports).
python3 .claude/skills/strava-coach/scripts/list_activities.py --sync --limit 20
If the user requested a specific sport, add --sport-type Run (or Ride, Swim, etc.).
If they requested a date range, add --days 30.
Parse the JSON output. Show a formatted table with columns: Date, Type, Name, Distance, Duration, Pace/Speed, HR.
If the JSON contains "success": false, show the error to the user. If it's an authentication error, tell them to run /strava-setup.
python3 .claude/skills/strava-coach/scripts/get_stats.py --refresh
Parse the JSON and present:
First make sure the database is up to date:
python3 .claude/skills/strava-coach/scripts/list_activities.py --sync --limit 50 --days 60
If the user didn't specify a goal, ask with AskUserQuestion:
python3 .claude/skills/strava-coach/scripts/propose_sessions.py --days 30 --goal "GOAL" --next-days 7
Using the JSON data (weekly loads, pattern analysis, recent activities), reason as a sports coach and generate a weekly plan that includes:
Present the plan as a table: Day | Type | Duration | Intensity | Description.
| Error | Action |
|-------|--------|
| "success": false with auth error | Tell the user to run /strava-setup |
| "success": false with API error | Show the Strava error message |
| No activities in DB | Suggest using --sync to download |
data-ai
Show a weekly training log: activities grouped by ISO week and sport, with totals for distance, time and elevation. Use when the user asks "what did I do this week", "weekly summary", "training log".
tools
Cross-reference recent runs/rides with historical weather (temperature, humidity, wind) from Open-Meteo to find correlations with performance. Use when the user asks "do I run worse in the heat", "weather impact", "temperature vs pace".
testing
Show how the user's training time and volume distribute across run, ride and swim, and flag underweighted disciplines. Use when the user asks "am I balanced", "discipline balance", "which sport am I neglecting".
data-ai
Compute a combined CTL/ATL/TSB across run, ride and swim for triathletes. Use when the user asks "my combined load", "triathlon training load", "total TSS across sports".