🎁 Get the FREE AI Skills Starter Guide β€” Subscribe β†’
BytesAgainBytesAgain
πŸ¦€ ClawHub

Garmin Cli

by @voydz

Access Garmin Connect health, fitness, and activity data via a non-interactive CLI.

Versionv1.0.5
Downloads2,315
Installs6
Stars⭐ 1
TERMINAL
clawhub install garmin-cli

πŸ“– About This Skill


name: garmin description: Access Garmin Connect health, fitness, and activity data via a non-interactive CLI. metadata: {"clawdbot":{"emoji":"⌚","requires":{"bins":["gc"]}}}

Garmin Connect CLI

This skill provides access to Garmin Connect health and fitness data through the gc CLI.

Setup

1. Install via Homebrew tap:

    brew tap voydz/homebrew-tap
    brew install garmin-cli
    

2. Authentication:

    gc login --email user@example.com --password secret
    # With MFA:
    gc login --email user@example.com --password secret --mfa 123456
    

3. Verify connection:

    gc status
    

Date Shortcuts

Most commands accept a date shortcut as first argument:

  • today β€” current date
  • yesterday β€” previous date
  • week β€” last 7 days (returns a date range)
  • month β€” last 30 days (returns a date range)
  • YYYY-MM-DD β€” specific date
  • For 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.

    Output

    All data commands support:

  • --format json for machine-readable output (default: table)
  • --output FILE to write to a file
  • Always use --format json when parsing output programmatically.

    Usage

    # Authentication
    gc login --email EMAIL --password PASS [--mfa CODE | --wait-mfa]
    gc logout
    gc status
    gc status --profile

    Daily Health

    gc health today gc steps today gc steps week gc steps --weekly --weeks N gc steps --start DATE --end DATE gc floors today gc intensity today gc intensity --weekly --weeks N gc events today

    Heart Rate

    gc heart --date today gc heart resting --date today

    Sleep

    gc sleep today

    Stress & Body Battery

    gc stress --date today gc stress --weekly --weeks N gc stress all-day --date today gc battery today gc battery --start DATE --end DATE gc battery --events today

    Vitals

    gc respiration today gc spo2 today gc blood-pressure today [--end DATE] gc lifestyle today

    Hydration

    gc hydration today

    Activities

    gc activities # List recent (default 20) gc activities --limit N --offset N --type TYPE gc activities --start DATE --end DATE [--type TYPE] gc activities --date today # Activities for a date gc activities last # Most recent activity gc activities get ID # Activity summary by ID gc activities count # Total count gc activities details ID gc activities splits ID gc activities typed-splits ID gc activities split-summaries ID gc activities weather ID gc activities hr-zones ID gc activities power-zones ID gc activities exercise-sets ID gc activities types # List all activity types gc activities gear ID # Gear used for activity gc activities progress --start DATE --end DATE --metric distance|duration|elevation gc activities download ID --format fit|tcx|gpx|kml|csv [-o FILE] gc activities upload FILE # .fit, .gpx, .tcx

    Body & Weight

    gc body --date today [--end DATE] gc body weighins --date today gc body weighins --start DATE --end DATE

    Advanced Metrics

    gc metrics # Metrics summary gc metrics --date today gc metrics vo2max today gc metrics hrv today gc metrics training-readiness today gc metrics morning-readiness today gc metrics training-status today gc metrics fitness-age today gc metrics race-predictions gc metrics race-predictions --start DATE --end DATE --type daily|monthly gc metrics endurance-score today [--end DATE] gc metrics hill-score today [--end DATE] gc metrics lactate-threshold # Latest gc metrics lactate-threshold --no-latest --start DATE --end DATE --aggregation daily|weekly|monthly|yearly gc metrics cycling-ftp

    Note: gc metrics summary resolves vo2max from daily maxmet first and

    falls back to training-status.mostRecentVO2Max when the selected date has

    no new maxmet sample.

    Devices

    gc devices # List all devices gc devices last-used gc devices primary gc devices settings DEVICE_ID gc devices alarms gc devices solar DEVICE_ID today [--end DATE]

    Goals, Records, Badges & Challenges

    gc records gc goals [--status active|future|past] [--limit N] gc badges earned gc badges available gc badges in-progress gc challenges adhoc [--start N --limit N] gc challenges badge [--start N --limit N] gc challenges available [--start N --limit N] gc challenges non-completed [--start N --limit N] gc challenges virtual [--start N --limit N]

    Gear

    gc gear --user-profile USER_PROFILE_NUMBER # List gear (profile number from gc status --profile) gc gear defaults USER_PROFILE_NUMBER gc gear stats GEAR_UUID gc gear activities GEAR_UUID [--limit N]

    Workouts & Training Plans

    gc workouts [--start N --limit N] gc workouts get WORKOUT_ID gc workouts download WORKOUT_ID [-o FILE] gc workouts scheduled WORKOUT_ID gc workouts create --file workout.json gc workouts create --name "Workout Name" --sport cycling --steps '[{"type":"warmup","duration":600},{"type":"interval","duration":1200,"target":"hr_zone:2"},{"type":"cooldown","duration":600}]' gc workouts update WORKOUT_ID --file workout.json gc workouts update WORKOUT_ID --name "Workout Name" --sport cycling --steps '[{"type":"warmup","duration":600},{"type":"interval","duration":1200},{"type":"cooldown","duration":600}]' gc workouts delete WORKOUT_ID gc training-plans gc training-plans get PLAN_ID gc training-plans adaptive PLAN_ID

    Workouts Steps JSON Schema (--steps)

    --steps expects a JSON array of step objects. Each step can be shorthand or Garmin-shaped.

    Shorthand step example:

    json {"type":"interval","duration":1200,"target":"hr_zone:2"}
    
    Supported shorthand fields:
    
  • type: warmup, interval, recovery, cooldown, rest, repeat
  • duration: seconds (implies endCondition = time)
  • target: hr_zone:2, power_zone:3, pace_zone:4, heart_rate:150, power:220, cadence:90, no_target
  • Garmin-shaped fields (optional):

  • stepType: {"stepTypeKey":"warmup"} (or any Garmin stepType object)
  • stepOrder: integer
  • endCondition: {"conditionTypeKey":"time|distance|calories|heart_rate|cadence|power|iterations"}
  • endConditionValue: number
  • targetType: {"workoutTargetTypeKey":"no.target|heart.rate|power|speed|cadence|open|heart.rate.zone|power.zone|pace.zone"}
  • targetValue: number
  • For advanced Garmin payloads (repeat groups, nested steps, etc.), prefer --file with the full Garmin schema.

    Menstrual Cycle

    gc menstrual --date today gc menstrual calendar --start DATE --end DATE gc menstrual pregnancy

    Raw API

    gc 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

    Examples

    Get today's health summary as JSON:

    gc health today --format json
    

    Get last week's steps as JSON for analysis:

    gc steps week --format json
    

    Find the user's most recent run:

    gc activities --limit 5 --type running --format json
    

    Call a raw Garmin Connect API endpoint:

    gc api /biometric-service/biometric/latestFunctionalThresholdPower/CYCLING
    gc api /metrics-service/metrics/maxmet/daily/2026-03-03/2026-03-03
    gc api /metrics-service/metrics/trainingstatus/aggregated/2026-03-03
    gc api --method POST --body '{"foo":"bar"}' /some/endpoint
    

    Get detailed info about a specific activity:

    gc activities get 12345678 --format json
    

    Download an activity as GPX:

    gc activities download 12345678 --format gpx -o run.gpx
    

    Check training readiness and HRV:

    gc metrics training-readiness today --format json
    gc metrics hrv today --format json
    

    Get sleep and body battery for yesterday:

    gc sleep yesterday --format json
    gc battery yesterday --format json
    

    Workout creation (concise)

  • Prefer --file with a Garmin-shaped JSON payload.
  • Get a valid payload by exporting an existing workout:
  •   gc workouts get WORKOUT_ID --format json > workout.json
      
  • If 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).
  • --sport-id is optional when --sport is provided; the CLI resolves the id from activity types.
  • Garmin workout shape (minimal example):

    {
      "workoutName": "Zone 2 Ride",
      "sportType": {
        "sportTypeKey": "cycling",
        "sportTypeId": 17
      },
      "workoutSegments": [
        {
          "segmentOrder": 1,
          "sportType": {
            "sportTypeKey": "cycling",
            "sportTypeId": 17
          },
          "workoutSteps": [
            {
              "stepOrder": 1,
              "stepType": { "stepTypeKey": "warmup" },
              "endCondition": { "conditionTypeKey": "time" },
              "endConditionValue": 600
            },
            {
              "stepOrder": 2,
              "stepType": { "stepTypeKey": "interval" },
              "endCondition": { "conditionTypeKey": "time" },
              "endConditionValue": 3600
            }
          ]
        }
      ]
    }
    

    Example creations:

    # Create from file (recommended)
    gc workouts create --file workout.json

    Create with flags using exact Garmin steps JSON

    gc workouts create \ --name "Zone 2 Ride" \ --sport cycling \ --sport-id 17 \ --steps '[{"stepOrder":1,"stepType":{"stepTypeKey":"warmup"},"endCondition":{"conditionTypeKey":"time"},"endConditionValue":600},{"stepOrder":2,"stepType":{"stepTypeKey":"interval"},"endCondition":{"conditionTypeKey":"time"},"endConditionValue":3600}]'

    How to discover format and valid values for workout creation:

  • Sport type keys/ids (used in sportType):
  • - gc activities types --format json
  • Workout step/target enums are not hardcoded in the CLI.
  • - Export an existing workout and reuse the exact values:
        gc workouts get WORKOUT_ID --format json
        
    - Use the returned stepType, endCondition, and targetType fields verbatim.

    List devices and get solar data:

    gc devices --format json
    gc devices solar DEVICE_ID today --format json
    

    πŸ’‘ Examples

    Get today's health summary as JSON:

    gc health today --format json
    

    Get last week's steps as JSON for analysis:

    gc steps week --format json
    

    Find the user's most recent run:

    gc activities --limit 5 --type running --format json
    

    Call a raw Garmin Connect API endpoint:

    gc api /biometric-service/biometric/latestFunctionalThresholdPower/CYCLING
    gc api /metrics-service/metrics/maxmet/daily/2026-03-03/2026-03-03
    gc api /metrics-service/metrics/trainingstatus/aggregated/2026-03-03
    gc api --method POST --body '{"foo":"bar"}' /some/endpoint
    

    Get detailed info about a specific activity:

    gc activities get 12345678 --format json
    

    Download an activity as GPX:

    gc activities download 12345678 --format gpx -o run.gpx
    

    Check training readiness and HRV:

    gc metrics training-readiness today --format json
    gc metrics hrv today --format json
    

    Get sleep and body battery for yesterday:

    gc sleep yesterday --format json
    gc battery yesterday --format json
    

    βš™οΈ Configuration

    1. Install via Homebrew tap:

        brew tap voydz/homebrew-tap
        brew install garmin-cli
        

    2. Authentication:

        gc login --email user@example.com --password secret
        # With MFA:
        gc login --email user@example.com --password secret --mfa 123456
        

    3. Verify connection:

        gc status