Garmin Health Analysis
Talk to your Garmin data naturally - "what was my fastest speed snowboarding?", "how did I sleep last night?", "what was my heart rate at 3pm?". Access 20+ metrics (sleep stages, Body Battery, HRV, VO
Talk to your Garmin data naturally - "what was my fastest speed snowboarding?", "how did I sleep last night?", "what was my heart rate at 3pm?". Access 20+ metrics (sleep stages, Body Battery, HRV, VO
Real data. Real impact.
Emerging
Developers
Per week
Open source
Skills give you superpowers. Install in 30 seconds.
Query health metrics from Garmin Connect and generate interactive HTML charts.
This skill supports two different setups:
Choose the path that matches your use case. You can also use both simultaneously!
pip3 install garminconnect
You have three options to provide your Garmin Connect credentials:
Add credentials to
~/.clawdbot/clawdbot.json:
{ "skills": { "entries": { "garmin-health-analysis": { "enabled": true, "env": { "GARMIN_EMAIL": "your-email@example.com", "GARMIN_PASSWORD": "your-password" } } } } }
Tip: You can also set these through the Clawdbot UI in the Skills settings panel.
Create a config file in the skill directory:
cd ~/.clawdbot/skills/garmin-health-analysis # or: cd <workspace>/skills/garmin-health-analysis cp config.example.json config.json # Edit config.json and add your email and password
config.json:
{ "email": "your-email@example.com", "password": "your-password" }
Note:
config.json is gitignored to keep your credentials secure.
Pass credentials directly when authenticating:
python3 scripts/garmin_auth.py login \ --email YOUR_EMAIL@example.com \ --password YOUR_PASSWORD
Login to Garmin Connect and save session tokens:
python3 scripts/garmin_auth.py login
This uses credentials from (in priority order):
--email, --password)config.json)GARMIN_EMAIL, GARMIN_PASSWORD)skills.entries.garmin-health-analysis.env)Session tokens are stored in
~/.clawdbot/garmin-tokens.json and auto-refresh.
Check authentication status:
python3 scripts/garmin_auth.py status
Use
scripts/garmin_data.py to get JSON data:
# Sleep (last 7 days default) python3 scripts/garmin_data.py sleep --days 14Body Battery (Garmin's recovery metric)
python3 scripts/garmin_data.py body_battery --days 30
HRV data
python3 scripts/garmin_data.py hrv --days 30
Heart rate (resting, max, min)
python3 scripts/garmin_data.py heart_rate --days 7
Activities/workouts
python3 scripts/garmin_data.py activities --days 30
Stress levels
python3 scripts/garmin_data.py stress --days 7
Combined summary with averages
python3 scripts/garmin_data.py summary --days 7
Custom date range
python3 scripts/garmin_data.py sleep --start 2026-01-01 --end 2026-01-15
User profile
python3 scripts/garmin_data.py profile
Output is JSON to stdout. Parse it to answer user questions.
Use
scripts/garmin_chart.py for interactive HTML visualizations:
# Sleep analysis (hours + scores) python3 scripts/garmin_chart.py sleep --days 30Body Battery recovery chart (color-coded)
python3 scripts/garmin_chart.py body_battery --days 30
HRV & resting heart rate trends
python3 scripts/garmin_chart.py hrv --days 90
Activities summary (by type, calories)
python3 scripts/garmin_chart.py activities --days 30
Full dashboard (all 4 charts)
python3 scripts/garmin_chart.py dashboard --days 30
Save to specific file
python3 scripts/garmin_chart.py dashboard --days 90 --output ~/Desktop/garmin-health.html
Charts open automatically in the default browser. They use Chart.js with a modern gradient design, stat cards, and interactive tooltips.
| User asks | Action |
|---|---|
| "How did I sleep last night?" | , report sleep hours + score |
| "How's my recovery this week?" | , report average + trend |
| "Show me my health for the last month" | |
| "Is my HRV improving?" | , analyze trend |
| "What workouts did I do this week?" | , list activities with details |
| "How's my resting heart rate?" | , report average + trend |
Garmin's proprietary recovery metric based on HRV, stress, sleep, and activity:
Overall sleep quality based on duration, stages, and disturbances:
Measured in milliseconds, higher is generally better:
Lower generally indicates better cardiovascular fitness:
Based on HRV analysis throughout the day:
When users ask for insights or want to understand their trends, use
references/health_analysis.md for:
python3 scripts/garmin_data.py summary --days Nreferences/health_analysis.md for interpretation frameworkpython3 scripts/garmin_auth.py login ...garminconnect import fails: pip3 install --upgrade garminconnect~/.clawdbot/garmin-tokens.json| Feature | Garmin | Whoop |
|---|---|---|
| Recovery metric | Body Battery (0-100) | Recovery Score (0-100%) |
| HRV tracking | Yes (nightly average) | Yes (detailed) |
| Sleep stages | Light, Deep, REM, Awake | Light, SWS, REM, Awake |
| Activity tracking | Built-in GPS, many sport modes | Strain score (0-21) |
| Stress | All-day stress levels | Not directly tracked |
| API | Unofficial (garminconnect) | Official OAuth |
| Device types | Watches, fitness trackers | Wearable band only |
references/api.md — Garmin Connect API details (unofficial)references/health_analysis.md — Science-backed health data interpretationNo automatic installation available. Please visit the source repository for installation instructions.
View Installation Instructions1,500+ AI skills, agents & workflows. Install in 30 seconds. Part of the Torly.ai family.
© 2026 Torly.ai. All rights reserved.