Awesome-omni-skill whoop
Fetch WHOOP health data including recovery scores, sleep metrics, workouts, cycles, and profile. Use when user asks about WHOOP data, recovery, HRV, sleep analysis, or fitness metrics.
git clone https://github.com/diegosouzapw/awesome-omni-skill
T=$(mktemp -d) && git clone --depth=1 https://github.com/diegosouzapw/awesome-omni-skill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/development/whoop" ~/.claude/skills/diegosouzapw-awesome-omni-skill-whoop && rm -rf "$T"
skills/development/whoop/SKILL.mdWHOOP Health Data
Access WHOOP health metrics: recovery scores, HRV, sleep analysis, workout strain, and physiological cycles.
Setup
Add tokens to
~/.openclaw/openclaw.json:
{ "skills": { "entries": { "whoop": { "enabled": true, "env": { "WHOOP_ACCESS_TOKEN": "your-access-token", "WHOOP_REFRESH_TOKEN": "your-refresh-token", "WHOOP_CLIENT_ID": "your-client-id", "WHOOP_CLIENT_SECRET": "your-client-secret" } } } } }
| Variable | Required For | Description |
|---|---|---|
| All API calls | Expires hourly |
| Auto-refresh | Long-lived, get from dashboard |
| Auto-refresh | From WHOOP developer app |
| Auto-refresh | From WHOOP developer app |
Get tokens from the WHOOP dashboard. See
{baseDir}/references/setup-guide.md.
Commands
User Profile
{baseDir}/scripts/whoop-api.sh profile
Returns: User ID, email, first/last name.
Body Measurements
{baseDir}/scripts/whoop-api.sh body
Returns: Height (m), weight (kg), max heart rate.
Recovery Data
{baseDir}/scripts/whoop-api.sh recovery [--start YYYY-MM-DD] [--end YYYY-MM-DD] [--limit N]
Returns: Recovery score (0-100%), HRV (ms), resting heart rate, SpO2.
Example - Last 7 days:
{baseDir}/scripts/whoop-api.sh recovery --start $(date -v-7d +%Y-%m-%d)
Sleep Data
{baseDir}/scripts/whoop-api.sh sleep [--start YYYY-MM-DD] [--end YYYY-MM-DD] [--limit N]
Returns: Sleep stages, duration, efficiency, performance percentage.
Workout Data
{baseDir}/scripts/whoop-api.sh workouts [--start YYYY-MM-DD] [--end YYYY-MM-DD] [--limit N]
Returns: Workout strain, sport type, heart rate zones, calories.
Physiological Cycles
{baseDir}/scripts/whoop-api.sh cycles [--start YYYY-MM-DD] [--end YYYY-MM-DD] [--limit N]
Returns: Daily strain, average heart rate, calories burned.
Interpreting Scores
Recovery Score (0-100%):
- Green (67-100%): Well recovered, ready for strain
- Yellow (34-66%): Moderate recovery, balance activity
- Red (0-33%): Low recovery, prioritize rest
HRV (Heart Rate Variability):
- Higher values generally indicate better recovery
- Personal baseline matters more than absolute numbers
- Trends over time are most meaningful
Sleep Performance:
- Percentage of sleep needed that was achieved
- 100% = optimal sleep duration for your body
Strain Score (0-21):
- 0-9: Light day
- 10-13: Moderate strain
- 14-17: High strain
- 18-21: All-out effort
Auto-Refresh (Cron Job)
Access tokens expire hourly. Set up a cron job to auto-refresh.
Check if cron already exists:
openclaw cron list | grep -i whoop
If output shows "WHOOP token refresh", cron is already set up - skip to Troubleshooting.
Setup (one-time only):
-
Ensure all env vars from Setup section are configured.
-
Ask user for confirmation before creating the cron job.
-
Create the cron job (runs every 55 minutes to avoid expiry edge cases):
openclaw cron add --name "WHOOP token refresh" \ --cron "*/55 * * * *" \ --session isolated \ --message "Run {baseDir}/scripts/whoop-refresh.sh and update BOTH WHOOP_ACCESS_TOKEN and WHOOP_REFRESH_TOKEN in ~/.openclaw/openclaw.json with the new tokens from the output. Both tokens rotate on each refresh." \ --model anthropic/claude-haiku-4-5
- Verify cron was created:
openclaw cron list | grep -i whoop
- Confirm to user: "WHOOP auto-refresh cron job created. Your token will refresh every 55 minutes automatically."
Troubleshooting
"WHOOP_ACCESS_TOKEN not set": Set your token in
~/.openclaw/openclaw.json - see Setup above.
401 Unauthorized: Token expired. Run the refresh script or get a new token from the dashboard.
No data returned:
- Check date range parameters
- Ensure WHOOP device synced recently
References
- Full API documentation{baseDir}/references/api-endpoints.md
- Response schemas{baseDir}/references/data-structures.md
- How to get an access token{baseDir}/references/setup-guide.md