{
  "schemaVersion": "1.0",
  "item": {
    "slug": "garmin-health-analysis",
    "name": "Garmin Health Analysis",
    "source": "tencent",
    "type": "skill",
    "category": "数据分析",
    "sourceUrl": "https://clawhub.ai/eversonl/garmin-health-analysis",
    "canonicalUrl": "https://clawhub.ai/eversonl/garmin-health-analysis",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/garmin-health-analysis",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=garmin-health-analysis",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "CHANGELOG.md",
      "README.md",
      "SKILL.md",
      "config.example.json",
      "install.sh",
      "references/api.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/garmin-health-analysis"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/garmin-health-analysis",
    "agentPageUrl": "https://openagent3.xyz/skills/garmin-health-analysis/agent",
    "manifestUrl": "https://openagent3.xyz/skills/garmin-health-analysis/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/garmin-health-analysis/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Garmin Health Analysis",
        "body": "Query health metrics from Garmin Connect and generate interactive HTML charts."
      },
      {
        "title": "Two Installation Paths",
        "body": "This skill supports two different setups:\n\nClawdbot Skill (this guide) - Use with Clawdbot for automation and proactive health monitoring\nMCP Server (see MCP setup guide) - Use with standard Claude Desktop as an MCP server\n\nChoose the path that matches your use case. You can also use both simultaneously!"
      },
      {
        "title": "1. Install Dependencies",
        "body": "pip3 install garminconnect"
      },
      {
        "title": "2. Configure Credentials",
        "body": "You have three options to provide your Garmin Connect credentials:\n\nOption A: Clawdbot Config (Recommended - UI configurable)\n\nAdd credentials to ~/.clawdbot/clawdbot.json:\n\n{\n  \"skills\": {\n    \"entries\": {\n      \"garmin-health-analysis\": {\n        \"enabled\": true,\n        \"env\": {\n          \"GARMIN_EMAIL\": \"your-email@example.com\",\n          \"GARMIN_PASSWORD\": \"your-password\"\n        }\n      }\n    }\n  }\n}\n\nTip: You can also set these through the Clawdbot UI in the Skills settings panel.\n\nOption B: Local Config File\n\nCreate a config file in the skill directory:\n\ncd ~/.clawdbot/skills/garmin-health-analysis\n# or: cd <workspace>/skills/garmin-health-analysis\ncp config.example.json config.json\n# Edit config.json and add your email and password\n\nconfig.json:\n\n{\n  \"email\": \"your-email@example.com\",\n  \"password\": \"your-password\"\n}\n\nNote: config.json is gitignored to keep your credentials secure.\n\nOption C: Command Line\n\nPass credentials directly when authenticating:\n\npython3 scripts/garmin_auth.py login \\\n  --email YOUR_EMAIL@example.com \\\n  --password YOUR_PASSWORD"
      },
      {
        "title": "3. Authenticate",
        "body": "Login to Garmin Connect and save session tokens:\n\npython3 scripts/garmin_auth.py login\n\nThis uses credentials from (in priority order):\n\nCommand line arguments (--email, --password)\nLocal config file (config.json)\nEnvironment variables (GARMIN_EMAIL, GARMIN_PASSWORD)\nClawdbot config (skills.entries.garmin-health-analysis.env)\n\nSession tokens are stored in ~/.clawdbot/garmin-tokens.json and auto-refresh.\n\nCheck authentication status:\n\npython3 scripts/garmin_auth.py status"
      },
      {
        "title": "Fetching Data",
        "body": "Use scripts/garmin_data.py to get JSON data:\n\n# Sleep (last 7 days default)\npython3 scripts/garmin_data.py sleep --days 14\n\n# Body Battery (Garmin's recovery metric)\npython3 scripts/garmin_data.py body_battery --days 30\n\n# HRV data\npython3 scripts/garmin_data.py hrv --days 30\n\n# Heart rate (resting, max, min)\npython3 scripts/garmin_data.py heart_rate --days 7\n\n# Activities/workouts\npython3 scripts/garmin_data.py activities --days 30\n\n# Stress levels\npython3 scripts/garmin_data.py stress --days 7\n\n# Combined summary with averages\npython3 scripts/garmin_data.py summary --days 7\n\n# Custom date range\npython3 scripts/garmin_data.py sleep --start 2026-01-01 --end 2026-01-15\n\n# User profile\npython3 scripts/garmin_data.py profile\n\nOutput is JSON to stdout. Parse it to answer user questions."
      },
      {
        "title": "Generating Charts",
        "body": "Use scripts/garmin_chart.py for interactive HTML visualizations:\n\n# Sleep analysis (hours + scores)\npython3 scripts/garmin_chart.py sleep --days 30\n\n# Body Battery recovery chart (color-coded)\npython3 scripts/garmin_chart.py body_battery --days 30\n\n# HRV & resting heart rate trends\npython3 scripts/garmin_chart.py hrv --days 90\n\n# Activities summary (by type, calories)\npython3 scripts/garmin_chart.py activities --days 30\n\n# Full dashboard (all 4 charts)\npython3 scripts/garmin_chart.py dashboard --days 30\n\n# Save to specific file\npython3 scripts/garmin_chart.py dashboard --days 90 --output ~/Desktop/garmin-health.html\n\nCharts open automatically in the default browser. They use Chart.js with a modern gradient design, stat cards, and interactive tooltips."
      },
      {
        "title": "Answering Questions",
        "body": "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"
      },
      {
        "title": "Body Battery (0-100)",
        "body": "Garmin's proprietary recovery metric based on HRV, stress, sleep, and activity:\n\nHigh (75-100): Fully recharged, ready for high intensity\nMedium (50-74): Moderate energy, good for regular activity\nLow (25-49): Limited energy, recovery needed\nVery Low (0-24): Depleted, prioritize rest"
      },
      {
        "title": "Sleep Scores (0-100)",
        "body": "Overall sleep quality based on duration, stages, and disturbances:\n\nExcellent (90-100): Optimal restorative sleep\nGood (80-89): Quality sleep with minor issues\nFair (60-79): Adequate but could improve\nPoor (0-59): Significant sleep deficiencies"
      },
      {
        "title": "HRV (Heart Rate Variability)",
        "body": "Measured in milliseconds, higher is generally better:\n\nIndicates nervous system balance and recovery capacity\nTrack trends over time (increasing = improving recovery)\nAffected by sleep, stress, training load, illness\nNormal range varies by individual (20-200+ ms)"
      },
      {
        "title": "Resting Heart Rate (bpm)",
        "body": "Lower generally indicates better cardiovascular fitness:\n\nAthletes: 40-60 bpm\nFit adults: 60-70 bpm\nAverage adults: 70-80 bpm\nSudden increases may indicate stress, illness, or overtraining"
      },
      {
        "title": "Stress Levels",
        "body": "Based on HRV analysis throughout the day:\n\nLow stress: Rest and recovery periods\nMedium stress: Normal daily activities\nHigh stress: Physical activity or mental pressure"
      },
      {
        "title": "Health Analysis",
        "body": "When users ask for insights or want to understand their trends, use references/health_analysis.md for:\n\nScience-backed interpretation of all metrics\nNormal ranges by age and fitness level\nPattern detection (weekly trends, recovery cycles, training load balance)\nActionable recommendations based on data\nWarning signs that suggest rest or medical consultation"
      },
      {
        "title": "Analysis workflow",
        "body": "Fetch data: python3 scripts/garmin_data.py summary --days N\nRead references/health_analysis.md for interpretation framework\nApply the analysis framework: Status → Trends → Patterns → Insights → Recommendations\nAlways include disclaimer that this is informational, not medical advice"
      },
      {
        "title": "Authentication Issues",
        "body": "\"Invalid credentials\": Double-check email/password, try logging into Garmin Connect web\n\"Tokens expired\": Run login again: python3 scripts/garmin_auth.py login ...\n\"Too many requests\": Garmin rate-limits; wait a few minutes and try again"
      },
      {
        "title": "Missing Data",
        "body": "Some metrics require specific Garmin devices (Body Battery needs HRV-capable devices)\nHistorical data may have gaps if device wasn't worn\nNew accounts may have limited history"
      },
      {
        "title": "Library Issues",
        "body": "If garminconnect import fails: pip3 install --upgrade garminconnect\nGarmin occasionally changes their API; update the library if requests fail"
      },
      {
        "title": "Privacy Note",
        "body": "Credentials are stored locally in ~/.clawdbot/garmin-tokens.json\nSession tokens refresh automatically\nNo data is sent anywhere except to Garmin's official servers\nYou can revoke access anytime by deleting the tokens file"
      },
      {
        "title": "Comparison: Garmin vs Whoop",
        "body": "FeatureGarminWhoopRecovery 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"
      },
      {
        "title": "References",
        "body": "references/api.md — Garmin Connect API details (unofficial)\nreferences/health_analysis.md — Science-backed health data interpretation\ngarminconnect library — Python API wrapper\nGarmin Connect — Official web interface"
      },
      {
        "title": "Version Info",
        "body": "Created: 2026-01-25\nAuthor: EversonL & Claude\nVersion: 1.2.0\nDependencies: garminconnect, fitparse, gpxpy (Python libraries)\nLicense: MIT"
      }
    ],
    "body": "Garmin Health Analysis\n\nQuery health metrics from Garmin Connect and generate interactive HTML charts.\n\nTwo Installation Paths\n\nThis skill supports two different setups:\n\nClawdbot Skill (this guide) - Use with Clawdbot for automation and proactive health monitoring\nMCP Server (see MCP setup guide) - Use with standard Claude Desktop as an MCP server\n\nChoose the path that matches your use case. You can also use both simultaneously!\n\nClawdbot Skill Setup (first time only)\n1. Install Dependencies\npip3 install garminconnect\n\n2. Configure Credentials\n\nYou have three options to provide your Garmin Connect credentials:\n\nOption A: Clawdbot Config (Recommended - UI configurable)\n\nAdd credentials to ~/.clawdbot/clawdbot.json:\n\n{\n  \"skills\": {\n    \"entries\": {\n      \"garmin-health-analysis\": {\n        \"enabled\": true,\n        \"env\": {\n          \"GARMIN_EMAIL\": \"your-email@example.com\",\n          \"GARMIN_PASSWORD\": \"your-password\"\n        }\n      }\n    }\n  }\n}\n\n\nTip: You can also set these through the Clawdbot UI in the Skills settings panel.\n\nOption B: Local Config File\n\nCreate a config file in the skill directory:\n\ncd ~/.clawdbot/skills/garmin-health-analysis\n# or: cd <workspace>/skills/garmin-health-analysis\ncp config.example.json config.json\n# Edit config.json and add your email and password\n\n\nconfig.json:\n\n{\n  \"email\": \"your-email@example.com\",\n  \"password\": \"your-password\"\n}\n\n\nNote: config.json is gitignored to keep your credentials secure.\n\nOption C: Command Line\n\nPass credentials directly when authenticating:\n\npython3 scripts/garmin_auth.py login \\\n  --email YOUR_EMAIL@example.com \\\n  --password YOUR_PASSWORD\n\n3. Authenticate\n\nLogin to Garmin Connect and save session tokens:\n\npython3 scripts/garmin_auth.py login\n\n\nThis uses credentials from (in priority order):\n\nCommand line arguments (--email, --password)\nLocal config file (config.json)\nEnvironment variables (GARMIN_EMAIL, GARMIN_PASSWORD)\nClawdbot config (skills.entries.garmin-health-analysis.env)\n\nSession tokens are stored in ~/.clawdbot/garmin-tokens.json and auto-refresh.\n\nCheck authentication status:\n\npython3 scripts/garmin_auth.py status\n\nFetching Data\n\nUse scripts/garmin_data.py to get JSON data:\n\n# Sleep (last 7 days default)\npython3 scripts/garmin_data.py sleep --days 14\n\n# Body Battery (Garmin's recovery metric)\npython3 scripts/garmin_data.py body_battery --days 30\n\n# HRV data\npython3 scripts/garmin_data.py hrv --days 30\n\n# Heart rate (resting, max, min)\npython3 scripts/garmin_data.py heart_rate --days 7\n\n# Activities/workouts\npython3 scripts/garmin_data.py activities --days 30\n\n# Stress levels\npython3 scripts/garmin_data.py stress --days 7\n\n# Combined summary with averages\npython3 scripts/garmin_data.py summary --days 7\n\n# Custom date range\npython3 scripts/garmin_data.py sleep --start 2026-01-01 --end 2026-01-15\n\n# User profile\npython3 scripts/garmin_data.py profile\n\n\nOutput is JSON to stdout. Parse it to answer user questions.\n\nGenerating Charts\n\nUse scripts/garmin_chart.py for interactive HTML visualizations:\n\n# Sleep analysis (hours + scores)\npython3 scripts/garmin_chart.py sleep --days 30\n\n# Body Battery recovery chart (color-coded)\npython3 scripts/garmin_chart.py body_battery --days 30\n\n# HRV & resting heart rate trends\npython3 scripts/garmin_chart.py hrv --days 90\n\n# Activities summary (by type, calories)\npython3 scripts/garmin_chart.py activities --days 30\n\n# Full dashboard (all 4 charts)\npython3 scripts/garmin_chart.py dashboard --days 30\n\n# Save to specific file\npython3 scripts/garmin_chart.py dashboard --days 90 --output ~/Desktop/garmin-health.html\n\n\nCharts open automatically in the default browser. They use Chart.js with a modern gradient design, stat cards, and interactive tooltips.\n\nAnswering Questions\nUser asks\tAction\n\"How did I sleep last night?\"\tgarmin_data.py summary --days 1, report sleep hours + score\n\"How's my recovery this week?\"\tgarmin_data.py body_battery --days 7, report average + trend\n\"Show me my health for the last month\"\tgarmin_chart.py dashboard --days 30\n\"Is my HRV improving?\"\tgarmin_data.py hrv --days 30, analyze trend\n\"What workouts did I do this week?\"\tgarmin_data.py activities --days 7, list activities with details\n\"How's my resting heart rate?\"\tgarmin_data.py heart_rate --days 7, report average + trend\nKey Metrics\nBody Battery (0-100)\n\nGarmin's proprietary recovery metric based on HRV, stress, sleep, and activity:\n\nHigh (75-100): Fully recharged, ready for high intensity\nMedium (50-74): Moderate energy, good for regular activity\nLow (25-49): Limited energy, recovery needed\nVery Low (0-24): Depleted, prioritize rest\nSleep Scores (0-100)\n\nOverall sleep quality based on duration, stages, and disturbances:\n\nExcellent (90-100): Optimal restorative sleep\nGood (80-89): Quality sleep with minor issues\nFair (60-79): Adequate but could improve\nPoor (0-59): Significant sleep deficiencies\nHRV (Heart Rate Variability)\n\nMeasured in milliseconds, higher is generally better:\n\nIndicates nervous system balance and recovery capacity\nTrack trends over time (increasing = improving recovery)\nAffected by sleep, stress, training load, illness\nNormal range varies by individual (20-200+ ms)\nResting Heart Rate (bpm)\n\nLower generally indicates better cardiovascular fitness:\n\nAthletes: 40-60 bpm\nFit adults: 60-70 bpm\nAverage adults: 70-80 bpm\nSudden increases may indicate stress, illness, or overtraining\nStress Levels\n\nBased on HRV analysis throughout the day:\n\nLow stress: Rest and recovery periods\nMedium stress: Normal daily activities\nHigh stress: Physical activity or mental pressure\nHealth Analysis\n\nWhen users ask for insights or want to understand their trends, use references/health_analysis.md for:\n\nScience-backed interpretation of all metrics\nNormal ranges by age and fitness level\nPattern detection (weekly trends, recovery cycles, training load balance)\nActionable recommendations based on data\nWarning signs that suggest rest or medical consultation\nAnalysis workflow\nFetch data: python3 scripts/garmin_data.py summary --days N\nRead references/health_analysis.md for interpretation framework\nApply the analysis framework: Status → Trends → Patterns → Insights → Recommendations\nAlways include disclaimer that this is informational, not medical advice\nTroubleshooting\nAuthentication Issues\n\"Invalid credentials\": Double-check email/password, try logging into Garmin Connect web\n\"Tokens expired\": Run login again: python3 scripts/garmin_auth.py login ...\n\"Too many requests\": Garmin rate-limits; wait a few minutes and try again\nMissing Data\nSome metrics require specific Garmin devices (Body Battery needs HRV-capable devices)\nHistorical data may have gaps if device wasn't worn\nNew accounts may have limited history\nLibrary Issues\nIf garminconnect import fails: pip3 install --upgrade garminconnect\nGarmin occasionally changes their API; update the library if requests fail\nPrivacy Note\nCredentials are stored locally in ~/.clawdbot/garmin-tokens.json\nSession tokens refresh automatically\nNo data is sent anywhere except to Garmin's official servers\nYou can revoke access anytime by deleting the tokens file\nComparison: Garmin vs Whoop\nFeature\tGarmin\tWhoop\nRecovery metric\tBody Battery (0-100)\tRecovery Score (0-100%)\nHRV tracking\tYes (nightly average)\tYes (detailed)\nSleep stages\tLight, Deep, REM, Awake\tLight, SWS, REM, Awake\nActivity tracking\tBuilt-in GPS, many sport modes\tStrain score (0-21)\nStress\tAll-day stress levels\tNot directly tracked\nAPI\tUnofficial (garminconnect)\tOfficial OAuth\nDevice types\tWatches, fitness trackers\tWearable band only\nReferences\nreferences/api.md — Garmin Connect API details (unofficial)\nreferences/health_analysis.md — Science-backed health data interpretation\ngarminconnect library — Python API wrapper\nGarmin Connect — Official web interface\nVersion Info\nCreated: 2026-01-25\nAuthor: EversonL & Claude\nVersion: 1.2.0\nDependencies: garminconnect, fitparse, gpxpy (Python libraries)\nLicense: MIT"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/eversonl/garmin-health-analysis",
    "publisherUrl": "https://clawhub.ai/eversonl/garmin-health-analysis",
    "owner": "eversonl",
    "version": "1.2.2",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/garmin-health-analysis",
    "downloadUrl": "https://openagent3.xyz/downloads/garmin-health-analysis",
    "agentUrl": "https://openagent3.xyz/skills/garmin-health-analysis/agent",
    "manifestUrl": "https://openagent3.xyz/skills/garmin-health-analysis/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/garmin-health-analysis/agent.md"
  }
}