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!
bash
pip3 install garminconnect
You have three options to provide your Garmin Connect credentials:
Add credentials to ~/.clawdbot/clawdbot.json:
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:
bash
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:
json
{
"email": "your-email@example.com",
"password": "your-password"
}
Note: config.json is gitignored to keep your credentials secure.
Pass credentials directly when authenticating:
bash
python3 scripts/garmin_auth.py login \
--email YOUR_EMAIL@example.com \
--password YOUR_PASSWORD
Login to Garmin Connect and save session tokens:
bash
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:
bash
python3 scripts/garmin_auth.py status
Use scripts/garmin_data.py to get JSON data:
bash
# Sleep (last 7 days default)
python3 scripts/garmin_data.py sleep --days 14
# Body 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:
bash
# Sleep analysis (hours + scores)
python3 scripts/garmin_chart.py sleep --days 30
# Body 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 asksAction"How did I sleep last night?"garmin_data.py summary --days 1, report sleep hours + score"How's my recovery this week?"garmin_data.py body_battery --days 7, report average + trend"Show me my health for the last month"garmin_chart.py dashboard --days 30"Is my HRV improving?"garmin_data.py hrv --days 30, analyze trend"What workouts did I do this week?"garmin_data.py activities --days 7, list activities with details"How's my resting heart rate?"garmin_data.py heart_rate --days 7, 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.jsonFeatureGarminWhoopRecovery metricBody Battery (0-100)Recovery Score (0-100%)HRV trackingYes (nightly average)Yes (detailed)Sleep stagesLight, Deep, REM, AwakeLight, SWS, REM, AwakeActivity trackingBuilt-in GPS, many sport modesStrain score (0-21)StressAll-day stress levelsNot directly trackedAPIUnofficial (garminconnect)Official OAuthDevice typesWatches, fitness trackersWearable band only
references/api.md — Garmin Connect API details (unofficial)references/health_analysis.md — Science-backed health data interpretation