Install
openclaw skills install strava-training-coachAI running coach that prevents injuries by monitoring your Strava training load daily. Detects dangerous mileage spikes, intensity imbalances, and recovery g...
openclaw skills install strava-training-coachEvidence-based AI training partner that catches injury risk before you feel it.
Most running injuries follow the same pattern: too much, too soon. Nielsen et al. (2014) found that runners who increase weekly distance by more than 30% have significantly higher injury rates. By the time you feel pain, the damage is weeks old.
This coach watches your Strava data daily and alerts you before problems become injuries — so you stay consistent instead of sidelined.
Built on the 80/20 polarized training model (Seiler, 2010; Stoggl & Sperlich, 2014) — the same approach used by elite endurance coaches to build durable athletes who train smarter, not just harder.
# Set your Strava API credentials (required)
export STRAVA_CLIENT_ID=your_id
export STRAVA_CLIENT_SECRET=your_secret
# Authenticate (opens browser for OAuth)
python3 scripts/auth.py
Tokens are stored in ~/.config/strava-training-coach/strava_tokens.json with 0600 permissions.
Discord:
export DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/...
export NOTIFICATION_CHANNEL=discord
Slack:
export SLACK_WEBHOOK_URL=https://hooks.slack.com/...
export NOTIFICATION_CHANNEL=slack
⚠️ Security: Webhook URLs must be set via environment variables. No hardcoded URLs allowed.
export OURA_ENABLED=true
Requires Oura CLI authentication.
# Daily training check + alerts
python3 scripts/coach_check.py
# Weekly summary report
python3 scripts/weekly_report.py
Optional: schedule with cron for hands-off monitoring:
{
"name": "Training Coach - Daily Check",
"schedule": {"kind": "every", "everyMs": 86400000},
"command": "python3 scripts/coach_check.py"
}
This skill is designed with security in mind for ClawHub publication:
~/.config/strava-training-coach/All thresholds are optional — sensible defaults with validation.
# Training thresholds (validated ranges)
MAX_WEEKLY_MILEAGE_JUMP=30 # 5-100%, default: 30
MAX_HARD_DAY_PERCENTAGE=25 # 5-100%, default: 25
MIN_EASY_RUN_HEART_RATE=145 # 100-200 bpm, default: 145
# Feature flags
OURA_ENABLED=false # Enable Oura integration
VERBOSE=false # Enable debug logging
"Weekly mileage up 45% (18 -> 26 mi). ACWR: 1.62. Nielsen et al. (2014) found >30% weekly increases significantly raise injury risk. Your acute:chronic workload ratio is in the high-risk zone (>1.5). Reduce next week's volume by 20-30%."
"60% of runs were moderate/high effort (HR >145). Seiler (2010) found elite athletes keep ~80% of sessions below VT1. Polarized training produces better VO2max gains than moderate-intensity training (Stoggl & Sperlich, 2014)."
"5 days since last activity. Mujika & Padilla (2000) found VO2max begins declining after ~10 days of inactivity. A gentle 20-min walk or easy jog can maintain adaptations."
"30-Day Streak! Consistency beats intensity. Holloszy & Coyle (1984) showed mitochondrial density increases with repeated aerobic stimulus."
See references/training-principles.md for the full guide with 30+ scientific references.
scripts/auth.py — Strava OAuth setup (tokens stored in XDG config dir)scripts/coach_check.py — Daily training analysis and alerts (security-hardened)scripts/weekly_report.py — Sunday summary reports (security-hardened)references/training-principles.md — Evidence-based injury prevention guideAlerts fire only when something matters:
Not every workout. That's what Strava is for.