Trainingpeaks OpenClaw Skill - ClawHub
Do you want your AI agent to automate Trainingpeaks workflows? This free skill from ClawHub helps with health & fitness tasks without building custom tools from scratch.
What this skill does
Pull real-time training plans, workouts, fitness metrics (CTL/ATL/TSB), and personal records from TrainingPeaks. Uses cookie-based authentication (no API key needed). Use in conjunction with other endurance, cycling, running or swimming triathlon coach skills for best results.
Install
npx clawhub@latest install trainingpeaksFull SKILL.md
Open original| name | description |
|---|---|
| trainingpeaks | Pull real-time training plans, workouts, fitness metrics (CTL/ATL/TSB), and personal records from TrainingPeaks. Uses cookie-based authentication (no API key needed). Use in conjunction with other endurance, cycling, running or swimming triathlon coach skills for best results. |
TrainingPeaks Skill
CLI access to the TrainingPeaks internal API. Pure Python stdlib — no pip dependencies.
Setup: Getting Your Auth Cookie
- Log in to TrainingPeaks in your browser
- Open DevTools → Application → Cookies →
app.trainingpeaks.com - Find the cookie named
Production_tpAuth - Copy its value (long encoded string)
Then authenticate:
python3 scripts/tp.py auth "<paste_cookie_value_here>"
Or set the environment variable (useful for CI/scripts):
export TP_AUTH_COOKIE="<cookie_value>"
Credentials are stored in ~/.trainingpeaks/ with 0600 permissions.
Commands
auth <cookie> — Authenticate
Store and validate a Production_tpAuth cookie. Exchanges it for a Bearer token and caches the athlete ID.
python3 scripts/tp.py auth "eyJhbGci..."
# ✓ Authenticated successfully!
# Account: [email protected]
# Athlete ID: 12345
# Token expires in: 60 minutes
auth-status — Check Authentication
python3 scripts/tp.py auth-status
# Cookie: stored (file)
# Token: valid (42m remaining)
# Athlete ID: 12345
# ✓ Ready
profile [--json] — Athlete Profile
python3 scripts/tp.py profile
# Profile
# ════════════════════════════════════════
# Name: Ruben Example
# Email: [email protected]
# Athlete ID: 12345
# Account: Premium
# Bike FTP: 280 W
workouts <start> <end> [--filter all|planned|completed] [--json]
List workouts in a date range (max 90 days).
# All workouts this week
python3 scripts/tp.py workouts 2026-01-26 2026-02-01
# Only completed workouts
python3 scripts/tp.py workouts 2026-01-01 2026-01-31 --filter completed
# Raw JSON for scripting
python3 scripts/tp.py workouts 2026-01-26 2026-02-01 --json
Output columns: Date, Title, Sport, Status (✓/○), Planned duration, Actual duration, TSS, Distance.
workout <id> [--json] — Workout Detail
Get full details for a single workout including description, coach comments, and all metrics.
python3 scripts/tp.py workout 123456789
# Workout: Tempo Intervals 3x10min
# ══════════════════════════════════════════════════
# Date: 2026-01-28
# Sport: Bike
# Status: Completed ✓
# ...
fitness [--days 90] [--json] — CTL/ATL/TSB
Get fitness (CTL), fatigue (ATL), and form (TSB) data.
# Last 90 days (default)
python3 scripts/tp.py fitness
# Full season
python3 scripts/tp.py fitness --days 365
# JSON for charts
python3 scripts/tp.py fitness --json
Shows a summary with current CTL/ATL/TSB and status interpretation, plus a 14-day daily table.
peaks <sport> <pr_type> [--days 3650] [--json] — Personal Records
Get ranked personal records by sport and metric.
# Best 20-minute power (all time)
python3 scripts/tp.py peaks Bike power20min
# 5K running PRs from last year
python3 scripts/tp.py peaks Run speed5K --days 365
# 5-second max power
python3 scripts/tp.py peaks Bike power5sec
Valid PR types:
| Sport | Types |
|---|---|
| Bike | power5sec, power1min, power5min, power10min, power20min, power60min, power90min, hR5sec, hR1min, hR5min, hR10min, hR20min, hR60min, hR90min |
| Run | hR5sec–hR90min, speed400Meter, speed800Meter, speed1K, speed1Mi, speed5K, speed5Mi, speed10K, speed10Mi, speedHalfMarathon, speedMarathon, speed50K |
Token Management
- Bearer tokens are cached in
~/.trainingpeaks/token.json - Tokens expire in ~1 hour; auto-refreshed from stored cookie
- Cookie lasts weeks; stored in
~/.trainingpeaks/cookie - If the cookie expires, you'll get a clear error to re-authenticate
File Locations
| File | Purpose |
|---|---|
~/.trainingpeaks/cookie |
Stored Production_tpAuth cookie |
~/.trainingpeaks/token.json |
Cached OAuth Bearer token + expiry |
~/.trainingpeaks/config.json |
Cached athlete ID and account info |
Notes
- All dates use
YYYY-MM-DDformat - Maximum workout query range: 90 days
- Rate limiting: 150ms minimum between API requests
TP_AUTH_COOKIEenvironment variable overrides stored cookie- Default output is human-readable;
--jsongives raw API responses