{
  "schemaVersion": "1.0",
  "item": {
    "slug": "garmin-cli",
    "name": "Garmin Cli",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/voydz/garmin-cli",
    "canonicalUrl": "https://clawhub.ai/voydz/garmin-cli",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/garmin-cli",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=garmin-cli",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.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. 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. 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-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.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-cli"
    },
    "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-cli",
    "agentPageUrl": "https://openagent3.xyz/skills/garmin-cli/agent",
    "manifestUrl": "https://openagent3.xyz/skills/garmin-cli/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/garmin-cli/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. 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. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Garmin Connect CLI",
        "body": "This skill provides access to Garmin Connect health and fitness data through the gc CLI."
      },
      {
        "title": "Setup",
        "body": "Install via Homebrew tap:\nbrew tap voydz/homebrew-tap\nbrew install garmin-cli\n\n\n\nAuthentication:\ngc login --email user@example.com --password secret\n# With MFA:\ngc login --email user@example.com --password secret --mfa 123456\n\n\n\nVerify connection:\ngc status"
      },
      {
        "title": "Date Shortcuts",
        "body": "Most commands accept a date shortcut as first argument:\n\ntoday — current date\nyesterday — previous date\nweek — last 7 days (returns a date range)\nmonth — last 30 days (returns a date range)\nYYYY-MM-DD — specific date\n\nFor command groups with subcommands (activities, body, stress, heart, menstrual),\nuse --date on the parent command to avoid argument conflicts.\nAlternatively use --date, --start/--end flags."
      },
      {
        "title": "Output",
        "body": "All data commands support:\n\n--format json for machine-readable output (default: table)\n--output FILE to write to a file\n\nAlways use --format json when parsing output programmatically."
      },
      {
        "title": "Usage",
        "body": "# Authentication\ngc login --email EMAIL --password PASS [--mfa CODE | --wait-mfa]\ngc logout\ngc status\ngc status --profile\n\n# Daily Health\ngc health today\ngc steps today\ngc steps week\ngc steps --weekly --weeks N\ngc steps --start DATE --end DATE\ngc floors today\ngc intensity today\ngc intensity --weekly --weeks N\ngc events today\n\n# Heart Rate\ngc heart --date today\ngc heart resting --date today\n\n# Sleep\ngc sleep today\n\n# Stress & Body Battery\ngc stress --date today\ngc stress --weekly --weeks N\ngc stress all-day --date today\ngc battery today\ngc battery --start DATE --end DATE\ngc battery --events today\n\n# Vitals\ngc respiration today\ngc spo2 today\ngc blood-pressure today [--end DATE]\ngc lifestyle today\n\n# Hydration\ngc hydration today\n\n# Activities\ngc activities                                     # List recent (default 20)\ngc activities --limit N --offset N --type TYPE\ngc activities --start DATE --end DATE [--type TYPE]\ngc activities --date today                        # Activities for a date\ngc activities last                                # Most recent activity\ngc activities get ID                              # Activity summary by ID\ngc activities count                               # Total count\ngc activities details ID\ngc activities splits ID\ngc activities typed-splits ID\ngc activities split-summaries ID\ngc activities weather ID\ngc activities hr-zones ID\ngc activities power-zones ID\ngc activities exercise-sets ID\ngc activities types                               # List all activity types\ngc activities gear ID                             # Gear used for activity\ngc activities progress --start DATE --end DATE --metric distance|duration|elevation\ngc activities download ID --format fit|tcx|gpx|kml|csv [-o FILE]\ngc activities upload FILE                         # .fit, .gpx, .tcx\n\n# Body & Weight\ngc body --date today [--end DATE]\ngc body weighins --date today\ngc body weighins --start DATE --end DATE\n\n# Advanced Metrics\ngc metrics                                       # Metrics summary\ngc metrics --date today\ngc metrics vo2max today\ngc metrics hrv today\ngc metrics training-readiness today\ngc metrics morning-readiness today\ngc metrics training-status today\ngc metrics fitness-age today\ngc metrics race-predictions\ngc metrics race-predictions --start DATE --end DATE --type daily|monthly\ngc metrics endurance-score today [--end DATE]\ngc metrics hill-score today [--end DATE]\ngc metrics lactate-threshold                      # Latest\ngc metrics lactate-threshold --no-latest --start DATE --end DATE --aggregation daily|weekly|monthly|yearly\ngc metrics cycling-ftp\n\n# Note: `gc metrics` summary resolves `vo2max` from daily maxmet first and\n# falls back to `training-status.mostRecentVO2Max` when the selected date has\n# no new maxmet sample.\n\n# Devices\ngc devices                                        # List all devices\ngc devices last-used\ngc devices primary\ngc devices settings DEVICE_ID\ngc devices alarms\ngc devices solar DEVICE_ID today [--end DATE]\n\n# Goals, Records, Badges & Challenges\ngc records\ngc goals [--status active|future|past] [--limit N]\ngc badges earned\ngc badges available\ngc badges in-progress\ngc challenges adhoc [--start N --limit N]\ngc challenges badge [--start N --limit N]\ngc challenges available [--start N --limit N]\ngc challenges non-completed [--start N --limit N]\ngc challenges virtual [--start N --limit N]\n\n# Gear\ngc gear --user-profile USER_PROFILE_NUMBER        # List gear (profile number from gc status --profile)\ngc gear defaults USER_PROFILE_NUMBER\ngc gear stats GEAR_UUID\ngc gear activities GEAR_UUID [--limit N]\n\n# Workouts & Training Plans\ngc workouts [--start N --limit N]\ngc workouts get WORKOUT_ID\ngc workouts download WORKOUT_ID [-o FILE]\ngc workouts scheduled WORKOUT_ID\ngc workouts create --file workout.json\ngc workouts create --name \"Workout Name\" --sport cycling --steps '[{\"type\":\"warmup\",\"duration\":600},{\"type\":\"interval\",\"duration\":1200,\"target\":\"hr_zone:2\"},{\"type\":\"cooldown\",\"duration\":600}]'\ngc workouts update WORKOUT_ID --file workout.json\ngc workouts update WORKOUT_ID --name \"Workout Name\" --sport cycling --steps '[{\"type\":\"warmup\",\"duration\":600},{\"type\":\"interval\",\"duration\":1200},{\"type\":\"cooldown\",\"duration\":600}]'\ngc workouts delete WORKOUT_ID\ngc training-plans\ngc training-plans get PLAN_ID\ngc training-plans adaptive PLAN_ID\n\n## Workouts Steps JSON Schema (`--steps`)\n\n`--steps` expects a JSON array of step objects. Each step can be shorthand or Garmin-shaped.\n\nShorthand step example:\n```json\n{\"type\":\"interval\",\"duration\":1200,\"target\":\"hr_zone:2\"}\n\nSupported shorthand fields:\n\ntype: warmup, interval, recovery, cooldown, rest, repeat\nduration: seconds (implies endCondition = time)\ntarget: hr_zone:2, power_zone:3, pace_zone:4, heart_rate:150, power:220, cadence:90, no_target\n\nGarmin-shaped fields (optional):\n\nstepType: {\"stepTypeKey\":\"warmup\"} (or any Garmin stepType object)\nstepOrder: integer\nendCondition: {\"conditionTypeKey\":\"time|distance|calories|heart_rate|cadence|power|iterations\"}\nendConditionValue: number\ntargetType: {\"workoutTargetTypeKey\":\"no.target|heart.rate|power|speed|cadence|open|heart.rate.zone|power.zone|pace.zone\"}\ntargetValue: number\n\nFor advanced Garmin payloads (repeat groups, nested steps, etc.), prefer --file with the full Garmin schema."
      },
      {
        "title": "Menstrual Cycle",
        "body": "gc menstrual --date today\ngc menstrual calendar --start DATE --end DATE\ngc menstrual pregnancy"
      },
      {
        "title": "Raw API",
        "body": "gc api /biometric-service/biometric/latestFunctionalThresholdPower/CYCLING\ngc api /metrics-service/metrics/maxmet/daily/DATE/DATE\ngc api /metrics-service/metrics/trainingstatus/aggregated/DATE\ngc api --method POST --body '{\"foo\":\"bar\"}' /some/endpoint\n\n## Examples\n\n**Get today's health summary as JSON:**\n```bash\ngc health today --format json\n\nGet last week's steps as JSON for analysis:\n\ngc steps week --format json\n\nFind the user's most recent run:\n\ngc activities --limit 5 --type running --format json\n\nCall a raw Garmin Connect API endpoint:\n\ngc api /biometric-service/biometric/latestFunctionalThresholdPower/CYCLING\ngc api /metrics-service/metrics/maxmet/daily/2026-03-03/2026-03-03\ngc api /metrics-service/metrics/trainingstatus/aggregated/2026-03-03\ngc api --method POST --body '{\"foo\":\"bar\"}' /some/endpoint\n\nGet detailed info about a specific activity:\n\ngc activities get 12345678 --format json\n\nDownload an activity as GPX:\n\ngc activities download 12345678 --format gpx -o run.gpx\n\nCheck training readiness and HRV:\n\ngc metrics training-readiness today --format json\ngc metrics hrv today --format json\n\nGet sleep and body battery for yesterday:\n\ngc sleep yesterday --format json\ngc battery yesterday --format json"
      },
      {
        "title": "Workout creation (concise)",
        "body": "Prefer --file with a Garmin-shaped JSON payload.\nGet a valid payload by exporting an existing workout:\ngc workouts get WORKOUT_ID --format json > workout.json\n\n\nIf using flags, --steps can be the exact workoutSteps JSON array from the API\nor a shorthand array with type, duration (seconds), and optional target (e.g. hr_zone:2).\n--sport-id is optional when --sport is provided; the CLI resolves the id from activity types.\n\nGarmin workout shape (minimal example):\n\n{\n  \"workoutName\": \"Zone 2 Ride\",\n  \"sportType\": {\n    \"sportTypeKey\": \"cycling\",\n    \"sportTypeId\": 17\n  },\n  \"workoutSegments\": [\n    {\n      \"segmentOrder\": 1,\n      \"sportType\": {\n        \"sportTypeKey\": \"cycling\",\n        \"sportTypeId\": 17\n      },\n      \"workoutSteps\": [\n        {\n          \"stepOrder\": 1,\n          \"stepType\": { \"stepTypeKey\": \"warmup\" },\n          \"endCondition\": { \"conditionTypeKey\": \"time\" },\n          \"endConditionValue\": 600\n        },\n        {\n          \"stepOrder\": 2,\n          \"stepType\": { \"stepTypeKey\": \"interval\" },\n          \"endCondition\": { \"conditionTypeKey\": \"time\" },\n          \"endConditionValue\": 3600\n        }\n      ]\n    }\n  ]\n}\n\nExample creations:\n\n# Create from file (recommended)\ngc workouts create --file workout.json\n\n# Create with flags using exact Garmin steps JSON\ngc workouts create \\\n  --name \"Zone 2 Ride\" \\\n  --sport cycling \\\n  --sport-id 17 \\\n  --steps '[{\"stepOrder\":1,\"stepType\":{\"stepTypeKey\":\"warmup\"},\"endCondition\":{\"conditionTypeKey\":\"time\"},\"endConditionValue\":600},{\"stepOrder\":2,\"stepType\":{\"stepTypeKey\":\"interval\"},\"endCondition\":{\"conditionTypeKey\":\"time\"},\"endConditionValue\":3600}]'\n\nHow to discover format and valid values for workout creation:\n\nSport type keys/ids (used in sportType):\n\ngc activities types --format json\n\n\nWorkout step/target enums are not hardcoded in the CLI.\n\nExport an existing workout and reuse the exact values:\ngc workouts get WORKOUT_ID --format json\n\n\nUse the returned stepType, endCondition, and targetType fields verbatim.\n\nList devices and get solar data:\n\ngc devices --format json\ngc devices solar DEVICE_ID today --format json"
      }
    ],
    "body": "Garmin Connect CLI\n\nThis skill provides access to Garmin Connect health and fitness data through the gc CLI.\n\nSetup\n\nInstall via Homebrew tap:\n\nbrew tap voydz/homebrew-tap\nbrew install garmin-cli\n\n\nAuthentication:\n\ngc login --email user@example.com --password secret\n# With MFA:\ngc login --email user@example.com --password secret --mfa 123456\n\n\nVerify connection:\n\ngc status\n\nDate Shortcuts\n\nMost commands accept a date shortcut as first argument:\n\ntoday — current date\nyesterday — previous date\nweek — last 7 days (returns a date range)\nmonth — last 30 days (returns a date range)\nYYYY-MM-DD — specific date\n\nFor command groups with subcommands (activities, body, stress, heart, menstrual), use --date on the parent command to avoid argument conflicts. Alternatively use --date, --start/--end flags.\n\nOutput\n\nAll data commands support:\n\n--format json for machine-readable output (default: table)\n--output FILE to write to a file\n\nAlways use --format json when parsing output programmatically.\n\nUsage\n# Authentication\ngc login --email EMAIL --password PASS [--mfa CODE | --wait-mfa]\ngc logout\ngc status\ngc status --profile\n\n# Daily Health\ngc health today\ngc steps today\ngc steps week\ngc steps --weekly --weeks N\ngc steps --start DATE --end DATE\ngc floors today\ngc intensity today\ngc intensity --weekly --weeks N\ngc events today\n\n# Heart Rate\ngc heart --date today\ngc heart resting --date today\n\n# Sleep\ngc sleep today\n\n# Stress & Body Battery\ngc stress --date today\ngc stress --weekly --weeks N\ngc stress all-day --date today\ngc battery today\ngc battery --start DATE --end DATE\ngc battery --events today\n\n# Vitals\ngc respiration today\ngc spo2 today\ngc blood-pressure today [--end DATE]\ngc lifestyle today\n\n# Hydration\ngc hydration today\n\n# Activities\ngc activities                                     # List recent (default 20)\ngc activities --limit N --offset N --type TYPE\ngc activities --start DATE --end DATE [--type TYPE]\ngc activities --date today                        # Activities for a date\ngc activities last                                # Most recent activity\ngc activities get ID                              # Activity summary by ID\ngc activities count                               # Total count\ngc activities details ID\ngc activities splits ID\ngc activities typed-splits ID\ngc activities split-summaries ID\ngc activities weather ID\ngc activities hr-zones ID\ngc activities power-zones ID\ngc activities exercise-sets ID\ngc activities types                               # List all activity types\ngc activities gear ID                             # Gear used for activity\ngc activities progress --start DATE --end DATE --metric distance|duration|elevation\ngc activities download ID --format fit|tcx|gpx|kml|csv [-o FILE]\ngc activities upload FILE                         # .fit, .gpx, .tcx\n\n# Body & Weight\ngc body --date today [--end DATE]\ngc body weighins --date today\ngc body weighins --start DATE --end DATE\n\n# Advanced Metrics\ngc metrics                                       # Metrics summary\ngc metrics --date today\ngc metrics vo2max today\ngc metrics hrv today\ngc metrics training-readiness today\ngc metrics morning-readiness today\ngc metrics training-status today\ngc metrics fitness-age today\ngc metrics race-predictions\ngc metrics race-predictions --start DATE --end DATE --type daily|monthly\ngc metrics endurance-score today [--end DATE]\ngc metrics hill-score today [--end DATE]\ngc metrics lactate-threshold                      # Latest\ngc metrics lactate-threshold --no-latest --start DATE --end DATE --aggregation daily|weekly|monthly|yearly\ngc metrics cycling-ftp\n\n# Note: `gc metrics` summary resolves `vo2max` from daily maxmet first and\n# falls back to `training-status.mostRecentVO2Max` when the selected date has\n# no new maxmet sample.\n\n# Devices\ngc devices                                        # List all devices\ngc devices last-used\ngc devices primary\ngc devices settings DEVICE_ID\ngc devices alarms\ngc devices solar DEVICE_ID today [--end DATE]\n\n# Goals, Records, Badges & Challenges\ngc records\ngc goals [--status active|future|past] [--limit N]\ngc badges earned\ngc badges available\ngc badges in-progress\ngc challenges adhoc [--start N --limit N]\ngc challenges badge [--start N --limit N]\ngc challenges available [--start N --limit N]\ngc challenges non-completed [--start N --limit N]\ngc challenges virtual [--start N --limit N]\n\n# Gear\ngc gear --user-profile USER_PROFILE_NUMBER        # List gear (profile number from gc status --profile)\ngc gear defaults USER_PROFILE_NUMBER\ngc gear stats GEAR_UUID\ngc gear activities GEAR_UUID [--limit N]\n\n# Workouts & Training Plans\ngc workouts [--start N --limit N]\ngc workouts get WORKOUT_ID\ngc workouts download WORKOUT_ID [-o FILE]\ngc workouts scheduled WORKOUT_ID\ngc workouts create --file workout.json\ngc workouts create --name \"Workout Name\" --sport cycling --steps '[{\"type\":\"warmup\",\"duration\":600},{\"type\":\"interval\",\"duration\":1200,\"target\":\"hr_zone:2\"},{\"type\":\"cooldown\",\"duration\":600}]'\ngc workouts update WORKOUT_ID --file workout.json\ngc workouts update WORKOUT_ID --name \"Workout Name\" --sport cycling --steps '[{\"type\":\"warmup\",\"duration\":600},{\"type\":\"interval\",\"duration\":1200},{\"type\":\"cooldown\",\"duration\":600}]'\ngc workouts delete WORKOUT_ID\ngc training-plans\ngc training-plans get PLAN_ID\ngc training-plans adaptive PLAN_ID\n\n## Workouts Steps JSON Schema (`--steps`)\n\n`--steps` expects a JSON array of step objects. Each step can be shorthand or Garmin-shaped.\n\nShorthand step example:\n```json\n{\"type\":\"interval\",\"duration\":1200,\"target\":\"hr_zone:2\"}\n\n\nSupported shorthand fields:\n\ntype: warmup, interval, recovery, cooldown, rest, repeat\nduration: seconds (implies endCondition = time)\ntarget: hr_zone:2, power_zone:3, pace_zone:4, heart_rate:150, power:220, cadence:90, no_target\n\nGarmin-shaped fields (optional):\n\nstepType: {\"stepTypeKey\":\"warmup\"} (or any Garmin stepType object)\nstepOrder: integer\nendCondition: {\"conditionTypeKey\":\"time|distance|calories|heart_rate|cadence|power|iterations\"}\nendConditionValue: number\ntargetType: {\"workoutTargetTypeKey\":\"no.target|heart.rate|power|speed|cadence|open|heart.rate.zone|power.zone|pace.zone\"}\ntargetValue: number\n\nFor advanced Garmin payloads (repeat groups, nested steps, etc.), prefer --file with the full Garmin schema.\n\nMenstrual Cycle\n\ngc menstrual --date today gc menstrual calendar --start DATE --end DATE gc menstrual pregnancy\n\nRaw API\n\ngc api /biometric-service/biometric/latestFunctionalThresholdPower/CYCLING gc api /metrics-service/metrics/maxmet/daily/DATE/DATE gc api /metrics-service/metrics/trainingstatus/aggregated/DATE gc api --method POST --body '{\"foo\":\"bar\"}' /some/endpoint\n\n\n## Examples\n\n**Get today's health summary as JSON:**\n```bash\ngc health today --format json\n\n\nGet last week's steps as JSON for analysis:\n\ngc steps week --format json\n\n\nFind the user's most recent run:\n\ngc activities --limit 5 --type running --format json\n\n\nCall a raw Garmin Connect API endpoint:\n\ngc api /biometric-service/biometric/latestFunctionalThresholdPower/CYCLING\ngc api /metrics-service/metrics/maxmet/daily/2026-03-03/2026-03-03\ngc api /metrics-service/metrics/trainingstatus/aggregated/2026-03-03\ngc api --method POST --body '{\"foo\":\"bar\"}' /some/endpoint\n\n\nGet detailed info about a specific activity:\n\ngc activities get 12345678 --format json\n\n\nDownload an activity as GPX:\n\ngc activities download 12345678 --format gpx -o run.gpx\n\n\nCheck training readiness and HRV:\n\ngc metrics training-readiness today --format json\ngc metrics hrv today --format json\n\n\nGet sleep and body battery for yesterday:\n\ngc sleep yesterday --format json\ngc battery yesterday --format json\n\nWorkout creation (concise)\nPrefer --file with a Garmin-shaped JSON payload.\nGet a valid payload by exporting an existing workout:\ngc workouts get WORKOUT_ID --format json > workout.json\n\nIf using flags, --steps can be the exact workoutSteps JSON array from the API or a shorthand array with type, duration (seconds), and optional target (e.g. hr_zone:2).\n--sport-id is optional when --sport is provided; the CLI resolves the id from activity types.\n\nGarmin workout shape (minimal example):\n\n{\n  \"workoutName\": \"Zone 2 Ride\",\n  \"sportType\": {\n    \"sportTypeKey\": \"cycling\",\n    \"sportTypeId\": 17\n  },\n  \"workoutSegments\": [\n    {\n      \"segmentOrder\": 1,\n      \"sportType\": {\n        \"sportTypeKey\": \"cycling\",\n        \"sportTypeId\": 17\n      },\n      \"workoutSteps\": [\n        {\n          \"stepOrder\": 1,\n          \"stepType\": { \"stepTypeKey\": \"warmup\" },\n          \"endCondition\": { \"conditionTypeKey\": \"time\" },\n          \"endConditionValue\": 600\n        },\n        {\n          \"stepOrder\": 2,\n          \"stepType\": { \"stepTypeKey\": \"interval\" },\n          \"endCondition\": { \"conditionTypeKey\": \"time\" },\n          \"endConditionValue\": 3600\n        }\n      ]\n    }\n  ]\n}\n\n\nExample creations:\n\n# Create from file (recommended)\ngc workouts create --file workout.json\n\n# Create with flags using exact Garmin steps JSON\ngc workouts create \\\n  --name \"Zone 2 Ride\" \\\n  --sport cycling \\\n  --sport-id 17 \\\n  --steps '[{\"stepOrder\":1,\"stepType\":{\"stepTypeKey\":\"warmup\"},\"endCondition\":{\"conditionTypeKey\":\"time\"},\"endConditionValue\":600},{\"stepOrder\":2,\"stepType\":{\"stepTypeKey\":\"interval\"},\"endCondition\":{\"conditionTypeKey\":\"time\"},\"endConditionValue\":3600}]'\n\n\nHow to discover format and valid values for workout creation:\n\nSport type keys/ids (used in sportType):\ngc activities types --format json\nWorkout step/target enums are not hardcoded in the CLI.\nExport an existing workout and reuse the exact values:\ngc workouts get WORKOUT_ID --format json\n\nUse the returned stepType, endCondition, and targetType fields verbatim.\n\nList devices and get solar data:\n\ngc devices --format json\ngc devices solar DEVICE_ID today --format json"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/voydz/garmin-cli",
    "publisherUrl": "https://clawhub.ai/voydz/garmin-cli",
    "owner": "voydz",
    "version": "1.0.5",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/garmin-cli",
    "downloadUrl": "https://openagent3.xyz/downloads/garmin-cli",
    "agentUrl": "https://openagent3.xyz/skills/garmin-cli/agent",
    "manifestUrl": "https://openagent3.xyz/skills/garmin-cli/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/garmin-cli/agent.md"
  }
}