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, VO2 max, training readiness, body composition, SPO2), download FIT/GPX files for route analysis, query elevation/pace at any point, and generate interactive health dashboards. From casual "show me this week's workouts" to deep "analyze my recovery vs training load".

MIT-0 · Free to use, modify, and redistribute. No attribution required.
11 · 4.1k · 12 current installs · 12 all-time installs
MIT-0
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Benign
medium confidence
Purpose & Capability
Name/description match what the files implement: fetching Garmin Connect metrics, downloading FIT/GPX, parsing with fitparse/gpxpy, and generating charts. Requested env vars (GARMIN_EMAIL, GARMIN_PASSWORD) and Python deps (garminconnect, fitparse, gpxpy) are expected for this functionality. No unrelated credentials or binaries are required.
Instruction Scope
SKILL.md and scripts limit actions to authenticating to Garmin, reading account data, downloading activity files, and creating local charts/files. The login flow stores tokens under ~/.clawdbot/garmin (or similar) and the scripts write downloads to /tmp or skill dirs. Caveats: the skill uses an unofficial reverse-engineered library (garminconnect) and requires the user’s email/password (or local config) for authentication; instructions encourage saving credentials locally (config.json or Clawdbot config). These behaviors are functional but increase sensitivity/risk and may violate Garmin Terms of Service.
Install Mechanism
No opaque remote downloads; installation uses pip to install known Python packages (garminconnect, fitparse, gpxpy). install.sh is provided and only wraps pip installs and creates a config.json if missing. Using PyPI packages is moderate-risk but appropriate for the stated purpose.
Credentials
Only GARMIN_EMAIL and GARMIN_PASSWORD are required which matches the unofficial API's need for email/password login. However these are highly sensitive; the skill stores session tokens locally and may share them with an MCP server if used. Two-factor authentication is not supported by the library, and the README warns about rate limits and ToS issues. Requesting the raw account password is proportionate to the approach chosen (unofficial library) but is higher-risk than an OAuth/token-only flow.
Persistence & Privilege
The skill does persist session tokens locally (~/.clawdbot/garmin) and creates config.json in the skill folder; it does not request always:true or attempt to change other skills or system settings. Tokens are chmod'd to be restrictive in the provided script. This is normal for a credentialed integration and scoped to the user's home directory.
Assessment
This skill appears to do what it claims (download and analyze Garmin data) and requires your Garmin account email and password because it uses the unofficial 'garminconnect' library. Before installing: 1) Understand you are giving the skill highly sensitive credentials — prefer using environment variables or a dedicated local config file and ensure config.json is not committed to source control. 2) Review the garminconnect library and this repo's code yourself (authentication, token storage, and any network calls). 3) Be aware using an unofficial API can violate Garmin's Terms of Service and may break if Garmin changes their site; two-factor auth may not be supported. 4) Consider using the vendor's official Garmin Health API (enterprise) or the separate MCP server referenced by the author if you want a different auth model. 5) If you install, monitor for excessive requests (rate limits) and confirm tokens are stored securely (permissions) and not shared to third-party services you don't control.

Like a lobster shell, security has layers — review code before you run it.

Current versionv1.2.2
Download zip
latestvk97crstrqbp9gq9nc1zn2a6n9s7zy316

License

MIT-0
Free to use, modify, and redistribute. No attribution required.

Runtime requirements

Clawdis
EnvGARMIN_EMAIL, GARMIN_PASSWORD

SKILL.md

Garmin Health Analysis

Query health metrics from Garmin Connect and generate interactive HTML charts.

Two Installation Paths

This skill supports two different setups:

  1. Clawdbot Skill (this guide) - Use with Clawdbot for automation and proactive health monitoring
  2. MCP Server (see MCP setup guide) - Use with standard Claude Desktop as an MCP server

Choose the path that matches your use case. You can also use both simultaneously!


Clawdbot Skill Setup (first time only)

1. Install Dependencies

pip3 install garminconnect

2. Configure Credentials

You have three options to provide your Garmin Connect credentials:

Option A: Clawdbot Config (Recommended - UI configurable)

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.

Option B: Local Config File

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.

Option C: Command Line

Pass credentials directly when authenticating:

python3 scripts/garmin_auth.py login \
  --email YOUR_EMAIL@example.com \
  --password YOUR_PASSWORD

3. Authenticate

Login to Garmin Connect and save session tokens:

python3 scripts/garmin_auth.py login

This uses credentials from (in priority order):

  1. Command line arguments (--email, --password)
  2. Local config file (config.json)
  3. Environment variables (GARMIN_EMAIL, GARMIN_PASSWORD)
  4. Clawdbot config (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

Fetching Data

Use scripts/garmin_data.py to get JSON data:

# 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.

Generating Charts

Use scripts/garmin_chart.py for interactive HTML visualizations:

# 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.

Answering Questions

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

Key Metrics

Body Battery (0-100)

Garmin's proprietary recovery metric based on HRV, stress, sleep, and activity:

  • High (75-100): Fully recharged, ready for high intensity
  • Medium (50-74): Moderate energy, good for regular activity
  • Low (25-49): Limited energy, recovery needed
  • Very Low (0-24): Depleted, prioritize rest

Sleep Scores (0-100)

Overall sleep quality based on duration, stages, and disturbances:

  • Excellent (90-100): Optimal restorative sleep
  • Good (80-89): Quality sleep with minor issues
  • Fair (60-79): Adequate but could improve
  • Poor (0-59): Significant sleep deficiencies

HRV (Heart Rate Variability)

Measured in milliseconds, higher is generally better:

  • Indicates nervous system balance and recovery capacity
  • Track trends over time (increasing = improving recovery)
  • Affected by sleep, stress, training load, illness
  • Normal range varies by individual (20-200+ ms)

Resting Heart Rate (bpm)

Lower generally indicates better cardiovascular fitness:

  • Athletes: 40-60 bpm
  • Fit adults: 60-70 bpm
  • Average adults: 70-80 bpm
  • Sudden increases may indicate stress, illness, or overtraining

Stress Levels

Based on HRV analysis throughout the day:

  • Low stress: Rest and recovery periods
  • Medium stress: Normal daily activities
  • High stress: Physical activity or mental pressure

Health Analysis

When users ask for insights or want to understand their trends, use references/health_analysis.md for:

  • Science-backed interpretation of all metrics
  • Normal ranges by age and fitness level
  • Pattern detection (weekly trends, recovery cycles, training load balance)
  • Actionable recommendations based on data
  • Warning signs that suggest rest or medical consultation

Analysis workflow

  1. Fetch data: python3 scripts/garmin_data.py summary --days N
  2. Read references/health_analysis.md for interpretation framework
  3. Apply the analysis framework: Status → Trends → Patterns → Insights → Recommendations
  4. Always include disclaimer that this is informational, not medical advice

Troubleshooting

Authentication Issues

  • "Invalid credentials": Double-check email/password, try logging into Garmin Connect web
  • "Tokens expired": Run login again: python3 scripts/garmin_auth.py login ...
  • "Too many requests": Garmin rate-limits; wait a few minutes and try again

Missing Data

  • Some metrics require specific Garmin devices (Body Battery needs HRV-capable devices)
  • Historical data may have gaps if device wasn't worn
  • New accounts may have limited history

Library Issues

  • If garminconnect import fails: pip3 install --upgrade garminconnect
  • Garmin occasionally changes their API; update the library if requests fail

Privacy Note

  • Credentials are stored locally in ~/.clawdbot/garmin-tokens.json
  • Session tokens refresh automatically
  • No data is sent anywhere except to Garmin's official servers
  • You can revoke access anytime by deleting the tokens file

Comparison: Garmin vs Whoop

FeatureGarminWhoop
Recovery metricBody Battery (0-100)Recovery Score (0-100%)
HRV trackingYes (nightly average)Yes (detailed)
Sleep stagesLight, Deep, REM, AwakeLight, SWS, REM, Awake
Activity trackingBuilt-in GPS, many sport modesStrain score (0-21)
StressAll-day stress levelsNot directly tracked
APIUnofficial (garminconnect)Official OAuth
Device typesWatches, fitness trackersWearable band only

References

  • references/api.md — Garmin Connect API details (unofficial)
  • references/health_analysis.md — Science-backed health data interpretation
  • garminconnect library — Python API wrapper
  • Garmin Connect — Official web interface

Version Info

  • Created: 2026-01-25
  • Author: EversonL & Claude
  • Version: 1.2.0
  • Dependencies: garminconnect, fitparse, gpxpy (Python libraries)
  • License: MIT

Files

15 total
Select a file
Select a file to preview.

Comments

Loading comments…