Install
openclaw skills install garmin-connect-healthFetch health and fitness data from Garmin Connect -- 40+ metrics including sleep, HRV, stress, body battery, SpO2, VO2 Max, training status, and activities....
openclaw skills install garmin-connect-healthFetch comprehensive health & fitness data from Garmin Connect for your AI agent.
| Category | Fields |
|---|---|
| Activity | Steps, distance, calories (active + BMR), floors, intensity minutes |
| Heart Rate | Min/max/resting heart rate |
| Sleep | Duration, score, deep/light/REM/awake breakdown, stress during sleep |
| HRV | Last night avg, 5min peak, weekly avg, status (balanced/unbalanced), baseline |
| Body Battery | Current level, daily min/max |
| SpO2 | Average and minimum blood oxygen |
| Respiration | Waking and sleep breathing rate |
| Stress | Average/max, rest/low/medium/high duration breakdown |
| Training Status | Overreaching/Highly Active/Productive/Maintaining/Recovery/Detraining + acute/chronic load ratio |
| Training Readiness | Score (0-100) |
| Fitness Metrics | VO2 Max, fitness age, endurance score, hill score |
| Race Predictions | 5K/10K/Half/Marathon predicted times |
| Weight/Body Comp | Weight (kg), body fat %, BMI (requires Garmin Index scale) |
| Hydration | Intake (ml) vs goal |
| Activities | Individual workouts with HR, duration, calories, elevation, training effect |
| Weekly Summary | Total/avg steps for the week |
pip install garminconnect
Option A -- Environment variables:
export GARMIN_EMAIL="you@example.com"
export GARMIN_PASSWORD="yourpassword"
Option B -- CLI args:
python3 garmin_health.py --email you@example.com --password yourpassword
Option C -- macOS Keychain:
security add-generic-password -a "you@example.com" -s "garmin_connect" -w "yourpassword"
Option D -- Credentials file:
echo -e "email=you@example.com\npassword=yourpassword" > ~/.garmin_credentials
chmod 600 ~/.garmin_credentials
If your Garmin account was registered in China, add this to your shell profile (~/.zshrc / ~/.bashrc) once:
export GARMIN_IS_CN=true
This tells the skill to use connect.garmin.com.cn instead of the global endpoint -- more reliable for mainland China IPs and prevents 429 rate-limit errors. Skip this step if you have a global Garmin account.
First login may require MFA verification. You'll be prompted to enter a code sent to your email.
Ask your AI agent:
# Fetch today's data (default)
python3 garmin_health.py
# Fetch specific date
python3 garmin_health.py --date 2026-03-16
# Show latest cached data
python3 garmin_health.py --show
# Use Garmin Connect CN endpoint (Chinese accounts / mainland China IP)
python3 garmin_health.py --cn
# With credentials
python3 garmin_health.py --email you@example.com --password pass
~/.garmin_health/YYYY-MM-DD.json -- Daily snapshots~/.garmin_health/latest.json -- Most recent fetch~/.garminconnect/ -- OAuth token cacheOverride with env vars:
GARMIN_DATA_DIR -- Change data directoryGARMIN_TOKENSTORE -- Change token cache directoryGARMIN_IS_CN=true -- Use Garmin Connect CN endpoint (set once in shell profile)All labels and output in English. JSON field names are English by design.
~/.garminconnect/). Subsequent runs reuse this token and do not re-send your password.--password CLI flag to avoid password exposure in shell history.connect.garmin.com (or connect.garmin.com.cn for CN accounts). No proxies or intermediaries.garminconnect library