A Python CLI tool that fetches workout data from intervals.icu and provides intelligent analysis using AI through OpenRouter.
- Fetches training data directly from intervals.icu API
- AI-powered analysis using OpenRouter (supports multiple models)
- Analyzes fitness metrics, training load, and performance trends
- Natural language queries - just ask questions in plain English
- Fast and lightweight - no local database needed
pip install -r requirements.txtCopy the example environment file and add your credentials:
cp .env.example .envThen edit .env with your credentials:
INTERVALS_API=your_intervals_api_key
ATHLETE_ID=your_athlete_id
OPENROUTER=your_openrouter_api_key
OPENROUTER_MODEL=google/gemini-2.5-flash
Where to get credentials:
- intervals.icu: Log in → Settings → API Key
- OpenRouter: https://openrouter.ai (sign up for API access)
python faster.py --setuppython faster.py "your question here"# General training analysis
python faster.py "How's my training this month?"
# Specific activity analysis
python faster.py "Analyze my last 5 runs"
# Fitness metrics
python faster.py "What's my current fitness level?"
# Performance trends
python faster.py "Compare my interval sessions this week"
# Training advice
python faster.py "What should I focus on to improve my 10K time?"
# Recovery check
python faster.py "Am I overtraining?"# Look back more days (default is 30)
python faster.py --days 60 "Compare my fitness over the last 2 months"
# Look back 90 days
python faster.py --days 90 "Show my training volume trends"- Fetches Data: Retrieves your training data from intervals.icu (today + last 30 days by default)
- Formats Context: Structures the data including:
- Athlete profile (fitness, fatigue, form)
- Recent activities with metrics
- Wellness data (if available)
- AI Analysis: Sends the data + your question to OpenRouter's AI
- Smart Insights: Returns actionable analysis and recommendations
The tool fetches:
- Athlete Profile: CTL, ATL, TSB, FTP, threshold pace
- Activities: Distance, duration, heart rate, power, training load
- Activity Types: Runs, rides, swims, etc.
- Wellness Data: Optional recovery metrics
- CTL (Chronic Training Load / Fitness): 42-day weighted average of training load - your fitness level
- ATL (Acute Training Load / Fatigue): 7-day weighted average - recent training stress
- TSB (Training Stress Balance / Form): CTL - ATL
- Positive TSB = Fresh/recovered
- Negative TSB = Fatigued
- Training Load: Workout stress score (similar to TSS)
- FTP: Functional Threshold Power (cycling)
- Threshold Pace: Running pace at lactate threshold
faster/
├── faster.py # Main CLI script
├── config.py # Configuration loader
├── intervals_client.py # intervals.icu API client
├── llm_analyzer.py # OpenRouter/LLM integration
├── requirements.txt # Python dependencies
├── .env # Your credentials (not in git)
└── README.md # This file
- Be specific: "Analyze my last 3 interval workouts" works better than "analyze my training"
- Ask for advice: "What should I focus on?" gets recommendations
- Compare periods: Use
--daysto look at longer trends - Check recovery: Ask about overtraining, fatigue, or form
- intervals.icu: Free API access for premium members
- OpenRouter: Pay-per-use (~$0.01-0.03 per query with Gemini Flash)
python faster.py --setupCheck your .env file has all required fields
- Verify your intervals.icu API key is valid
- Check your athlete ID is correct
- Ensure OpenRouter API key is active
python faster.py "query" --debug- Activity type filtering (runs only, rides only)
- Date range parsing ("last week", "January")
- Export analysis to file
- Interactive REPL mode
- Wellness data integration
- Power curve analysis
MIT