{
  "schemaVersion": "1.0",
  "item": {
    "slug": "garmer",
    "name": "Garmer",
    "source": "tencent",
    "type": "skill",
    "category": "数据分析",
    "sourceUrl": "https://clawhub.ai/garrza/garmer",
    "canonicalUrl": "https://clawhub.ai/garrza/garmer",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/garmer",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=garmer",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md",
      "examples/basic_usage.py",
      "examples/moltbot_integration.py",
      "pyproject.toml",
      "references/REFERENCE.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/garmer"
    },
    "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/garmer",
    "agentPageUrl": "https://openagent3.xyz/skills/garmer/agent",
    "manifestUrl": "https://openagent3.xyz/skills/garmer/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/garmer/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": "Garmer - Garmin Data Extraction Skill",
        "body": "This skill enables extraction of health and fitness data from Garmin Connect for analysis and insights."
      },
      {
        "title": "Prerequisites",
        "body": "A Garmin Connect account with health data\nThe garmer CLI tool installed (see installation options in metadata)"
      },
      {
        "title": "Authentication (One-Time Setup)",
        "body": "Before using garmer, authenticate with Garmin Connect:\n\ngarmer login\n\nThis will prompt for your Garmin Connect email and password. Tokens are saved to ~/.garmer/garmin_tokens for future use.\n\nTo check authentication status:\n\ngarmer status"
      },
      {
        "title": "Daily Summary",
        "body": "Get today's health summary (steps, calories, heart rate, stress):\n\ngarmer summary\n# For a specific date:\ngarmer summary --date 2025-01-15\n# Include last night's sleep data:\ngarmer summary --with-sleep\ngarmer summary -s\n# JSON output for programmatic use:\ngarmer summary --json\n# Combine flags:\ngarmer summary --date 2025-01-15 --with-sleep --json"
      },
      {
        "title": "Sleep Data",
        "body": "Get sleep analysis (duration, phases, score, HRV):\n\ngarmer sleep\n# For a specific date:\ngarmer sleep --date 2025-01-15"
      },
      {
        "title": "Activities",
        "body": "List recent fitness activities:\n\ngarmer activities\n# Limit number of results:\ngarmer activities --limit 5\n# Filter by specific date:\ngarmer activities --date 2025-01-15\n# JSON output for programmatic use:\ngarmer activities --json"
      },
      {
        "title": "Activity Detail",
        "body": "Get detailed information for a single activity:\n\n# Latest activity:\ngarmer activity\n# Specific activity by ID:\ngarmer activity 12345678\n# Include lap data:\ngarmer activity --laps\n# Include heart rate zone data:\ngarmer activity --zones\n# JSON output:\ngarmer activity --json\n# Combine flags:\ngarmer activity 12345678 --laps --zones --json"
      },
      {
        "title": "Health Snapshot",
        "body": "Get comprehensive health data for a day:\n\ngarmer snapshot\n# For a specific date:\ngarmer snapshot --date 2025-01-15\n# As JSON for programmatic use:\ngarmer snapshot --json"
      },
      {
        "title": "Export Data",
        "body": "Export multiple days of data to JSON:\n\n# Last 7 days (default)\ngarmer export\n\n# Custom date range\ngarmer export --start-date 2025-01-01 --end-date 2025-01-31 --output my_data.json\n\n# Last N days\ngarmer export --days 14"
      },
      {
        "title": "Utility Commands",
        "body": "# Update garmer to latest version (git pull):\ngarmer update\n\n# Show version information:\ngarmer version"
      },
      {
        "title": "Python API Usage",
        "body": "For more complex data processing, use the Python API:\n\nfrom garmer import GarminClient\nfrom datetime import date, timedelta\n\n# Use saved tokens\nclient = GarminClient.from_saved_tokens()\n\n# Or login with credentials\nclient = GarminClient.from_credentials(email=\"user@example.com\", password=\"pass\")"
      },
      {
        "title": "User Profile",
        "body": "# Get user profile\nprofile = client.get_user_profile()\nprint(f\"User: {profile.display_name}\")\n\n# Get registered devices\ndevices = client.get_user_devices()"
      },
      {
        "title": "Daily Summary",
        "body": "# Get daily summary (defaults to today)\nsummary = client.get_daily_summary()\nprint(f\"Steps: {summary.total_steps}\")\n\n# Get for specific date\nsummary = client.get_daily_summary(date(2025, 1, 15))\n\n# Get weekly summary\nweekly = client.get_weekly_summary()"
      },
      {
        "title": "Sleep Data",
        "body": "# Get sleep data (defaults to today)\nsleep = client.get_sleep()\nprint(f\"Sleep: {sleep.total_sleep_hours:.1f} hours\")\n\n# Get last night's sleep\nsleep = client.get_last_night_sleep()\n\n# Get sleep for date range\nsleep_data = client.get_sleep_range(\n    start_date=date(2025, 1, 1),\n    end_date=date(2025, 1, 7)\n)"
      },
      {
        "title": "Activities",
        "body": "# Get recent activities\nactivities = client.get_recent_activities(limit=5)\nfor activity in activities:\n    print(f\"{activity.activity_name}: {activity.distance_km:.1f} km\")\n\n# Get activities with filters\nactivities = client.get_activities(\n    start_date=date(2025, 1, 1),\n    end_date=date(2025, 1, 31),\n    activity_type=\"running\",\n    limit=20\n)\n\n# Get single activity by ID\nactivity = client.get_activity(12345678)"
      },
      {
        "title": "Heart Rate",
        "body": "# Get heart rate data for a day\nhr = client.get_heart_rate()\nprint(f\"Resting HR: {hr.resting_heart_rate} bpm\")\n\n# Get just resting heart rate\nresting_hr = client.get_resting_heart_rate(date(2025, 1, 15))"
      },
      {
        "title": "Stress & Body Battery",
        "body": "# Get stress data\nstress = client.get_stress()\nprint(f\"Avg stress: {stress.avg_stress_level}\")\n\n# Get body battery data\nbattery = client.get_body_battery()"
      },
      {
        "title": "Steps",
        "body": "# Get detailed step data\nsteps = client.get_steps()\nprint(f\"Total: {steps.total_steps}, Goal: {steps.step_goal}\")\n\n# Get just total steps\ntotal = client.get_total_steps(date(2025, 1, 15))"
      },
      {
        "title": "Body Composition",
        "body": "# Get latest weight\nweight = client.get_latest_weight()\nprint(f\"Weight: {weight.weight_kg} kg\")\n\n# Get weight for specific date\nweight = client.get_weight(date(2025, 1, 15))\n\n# Get full body composition\nbody = client.get_body_composition()"
      },
      {
        "title": "Hydration & Respiration",
        "body": "# Get hydration data\nhydration = client.get_hydration()\nprint(f\"Intake: {hydration.total_intake_ml} ml\")\n\n# Get respiration data\nresp = client.get_respiration()\nprint(f\"Avg breathing: {resp.avg_waking_respiration} breaths/min\")"
      },
      {
        "title": "Comprehensive Reports",
        "body": "# Get health snapshot (all metrics for a day)\nsnapshot = client.get_health_snapshot()\n# Returns: daily_summary, sleep, heart_rate, stress, steps, hydration, respiration\n\n# Get weekly health report with trends\nreport = client.get_weekly_health_report()\n# Returns: activities summary, sleep stats, steps stats, HR trends, stress trends\n\n# Export data for date range\ndata = client.export_data(\n    start_date=date(2025, 1, 1),\n    end_date=date(2025, 1, 31),\n    include_activities=True,\n    include_sleep=True,\n    include_daily=True\n)"
      },
      {
        "title": "Health Check Query",
        "body": "When a user asks \"How did I sleep?\" or \"What's my health summary?\":\n\ngarmer snapshot --json"
      },
      {
        "title": "Activity Analysis",
        "body": "When a user asks about workouts or exercise:\n\ngarmer activities --limit 10"
      },
      {
        "title": "Trend Analysis",
        "body": "When analyzing health trends over time:\n\ngarmer export --days 30 --output health_data.json\n\nThen process the JSON file with Python for analysis."
      },
      {
        "title": "Data Types Available",
        "body": "Activities: Running, cycling, swimming, strength training, etc.\nSleep: Duration, phases (deep, light, REM), score, HRV\nHeart Rate: Resting HR, samples, zones\nStress: Stress levels, body battery\nSteps: Total steps, distance, floors\nBody Composition: Weight, body fat, muscle mass\nHydration: Water intake tracking\nRespiration: Breathing rate data"
      },
      {
        "title": "Error Handling",
        "body": "If not authenticated:\n\nNot logged in. Use 'garmer login' first.\n\nIf session expired, re-authenticate:\n\ngarmer login"
      },
      {
        "title": "Environment Variables",
        "body": "GARMER_TOKEN_DIR: Custom directory for token storage\nGARMER_LOG_LEVEL: Set logging level (DEBUG, INFO, WARNING, ERROR)\nGARMER_CACHE_ENABLED: Enable/disable data caching (true/false)"
      },
      {
        "title": "References",
        "body": "For detailed API documentation and MoltBot integration examples, see references/REFERENCE.md."
      }
    ],
    "body": "Garmer - Garmin Data Extraction Skill\n\nThis skill enables extraction of health and fitness data from Garmin Connect for analysis and insights.\n\nPrerequisites\nA Garmin Connect account with health data\nThe garmer CLI tool installed (see installation options in metadata)\nAuthentication (One-Time Setup)\n\nBefore using garmer, authenticate with Garmin Connect:\n\ngarmer login\n\n\nThis will prompt for your Garmin Connect email and password. Tokens are saved to ~/.garmer/garmin_tokens for future use.\n\nTo check authentication status:\n\ngarmer status\n\nAvailable Commands\nDaily Summary\n\nGet today's health summary (steps, calories, heart rate, stress):\n\ngarmer summary\n# For a specific date:\ngarmer summary --date 2025-01-15\n# Include last night's sleep data:\ngarmer summary --with-sleep\ngarmer summary -s\n# JSON output for programmatic use:\ngarmer summary --json\n# Combine flags:\ngarmer summary --date 2025-01-15 --with-sleep --json\n\nSleep Data\n\nGet sleep analysis (duration, phases, score, HRV):\n\ngarmer sleep\n# For a specific date:\ngarmer sleep --date 2025-01-15\n\nActivities\n\nList recent fitness activities:\n\ngarmer activities\n# Limit number of results:\ngarmer activities --limit 5\n# Filter by specific date:\ngarmer activities --date 2025-01-15\n# JSON output for programmatic use:\ngarmer activities --json\n\nActivity Detail\n\nGet detailed information for a single activity:\n\n# Latest activity:\ngarmer activity\n# Specific activity by ID:\ngarmer activity 12345678\n# Include lap data:\ngarmer activity --laps\n# Include heart rate zone data:\ngarmer activity --zones\n# JSON output:\ngarmer activity --json\n# Combine flags:\ngarmer activity 12345678 --laps --zones --json\n\nHealth Snapshot\n\nGet comprehensive health data for a day:\n\ngarmer snapshot\n# For a specific date:\ngarmer snapshot --date 2025-01-15\n# As JSON for programmatic use:\ngarmer snapshot --json\n\nExport Data\n\nExport multiple days of data to JSON:\n\n# Last 7 days (default)\ngarmer export\n\n# Custom date range\ngarmer export --start-date 2025-01-01 --end-date 2025-01-31 --output my_data.json\n\n# Last N days\ngarmer export --days 14\n\nUtility Commands\n# Update garmer to latest version (git pull):\ngarmer update\n\n# Show version information:\ngarmer version\n\nPython API Usage\n\nFor more complex data processing, use the Python API:\n\nfrom garmer import GarminClient\nfrom datetime import date, timedelta\n\n# Use saved tokens\nclient = GarminClient.from_saved_tokens()\n\n# Or login with credentials\nclient = GarminClient.from_credentials(email=\"user@example.com\", password=\"pass\")\n\nUser Profile\n# Get user profile\nprofile = client.get_user_profile()\nprint(f\"User: {profile.display_name}\")\n\n# Get registered devices\ndevices = client.get_user_devices()\n\nDaily Summary\n# Get daily summary (defaults to today)\nsummary = client.get_daily_summary()\nprint(f\"Steps: {summary.total_steps}\")\n\n# Get for specific date\nsummary = client.get_daily_summary(date(2025, 1, 15))\n\n# Get weekly summary\nweekly = client.get_weekly_summary()\n\nSleep Data\n# Get sleep data (defaults to today)\nsleep = client.get_sleep()\nprint(f\"Sleep: {sleep.total_sleep_hours:.1f} hours\")\n\n# Get last night's sleep\nsleep = client.get_last_night_sleep()\n\n# Get sleep for date range\nsleep_data = client.get_sleep_range(\n    start_date=date(2025, 1, 1),\n    end_date=date(2025, 1, 7)\n)\n\nActivities\n# Get recent activities\nactivities = client.get_recent_activities(limit=5)\nfor activity in activities:\n    print(f\"{activity.activity_name}: {activity.distance_km:.1f} km\")\n\n# Get activities with filters\nactivities = client.get_activities(\n    start_date=date(2025, 1, 1),\n    end_date=date(2025, 1, 31),\n    activity_type=\"running\",\n    limit=20\n)\n\n# Get single activity by ID\nactivity = client.get_activity(12345678)\n\nHeart Rate\n# Get heart rate data for a day\nhr = client.get_heart_rate()\nprint(f\"Resting HR: {hr.resting_heart_rate} bpm\")\n\n# Get just resting heart rate\nresting_hr = client.get_resting_heart_rate(date(2025, 1, 15))\n\nStress & Body Battery\n# Get stress data\nstress = client.get_stress()\nprint(f\"Avg stress: {stress.avg_stress_level}\")\n\n# Get body battery data\nbattery = client.get_body_battery()\n\nSteps\n# Get detailed step data\nsteps = client.get_steps()\nprint(f\"Total: {steps.total_steps}, Goal: {steps.step_goal}\")\n\n# Get just total steps\ntotal = client.get_total_steps(date(2025, 1, 15))\n\nBody Composition\n# Get latest weight\nweight = client.get_latest_weight()\nprint(f\"Weight: {weight.weight_kg} kg\")\n\n# Get weight for specific date\nweight = client.get_weight(date(2025, 1, 15))\n\n# Get full body composition\nbody = client.get_body_composition()\n\nHydration & Respiration\n# Get hydration data\nhydration = client.get_hydration()\nprint(f\"Intake: {hydration.total_intake_ml} ml\")\n\n# Get respiration data\nresp = client.get_respiration()\nprint(f\"Avg breathing: {resp.avg_waking_respiration} breaths/min\")\n\nComprehensive Reports\n# Get health snapshot (all metrics for a day)\nsnapshot = client.get_health_snapshot()\n# Returns: daily_summary, sleep, heart_rate, stress, steps, hydration, respiration\n\n# Get weekly health report with trends\nreport = client.get_weekly_health_report()\n# Returns: activities summary, sleep stats, steps stats, HR trends, stress trends\n\n# Export data for date range\ndata = client.export_data(\n    start_date=date(2025, 1, 1),\n    end_date=date(2025, 1, 31),\n    include_activities=True,\n    include_sleep=True,\n    include_daily=True\n)\n\nCommon Workflows\nHealth Check Query\n\nWhen a user asks \"How did I sleep?\" or \"What's my health summary?\":\n\ngarmer snapshot --json\n\nActivity Analysis\n\nWhen a user asks about workouts or exercise:\n\ngarmer activities --limit 10\n\nTrend Analysis\n\nWhen analyzing health trends over time:\n\ngarmer export --days 30 --output health_data.json\n\n\nThen process the JSON file with Python for analysis.\n\nData Types Available\nActivities: Running, cycling, swimming, strength training, etc.\nSleep: Duration, phases (deep, light, REM), score, HRV\nHeart Rate: Resting HR, samples, zones\nStress: Stress levels, body battery\nSteps: Total steps, distance, floors\nBody Composition: Weight, body fat, muscle mass\nHydration: Water intake tracking\nRespiration: Breathing rate data\nError Handling\n\nIf not authenticated:\n\nNot logged in. Use 'garmer login' first.\n\n\nIf session expired, re-authenticate:\n\ngarmer login\n\nEnvironment Variables\nGARMER_TOKEN_DIR: Custom directory for token storage\nGARMER_LOG_LEVEL: Set logging level (DEBUG, INFO, WARNING, ERROR)\nGARMER_CACHE_ENABLED: Enable/disable data caching (true/false)\nReferences\n\nFor detailed API documentation and MoltBot integration examples, see references/REFERENCE.md."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/garrza/garmer",
    "publisherUrl": "https://clawhub.ai/garrza/garmer",
    "owner": "garrza",
    "version": "1.0.2",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/garmer",
    "downloadUrl": "https://openagent3.xyz/downloads/garmer",
    "agentUrl": "https://openagent3.xyz/skills/garmer/agent",
    "manifestUrl": "https://openagent3.xyz/skills/garmer/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/garmer/agent.md"
  }
}