skills$openclaw/garmin-connect
godsboy2.1kā˜…

by godsboy

garmin-connect – OpenClaw Skill

garmin-connect is an OpenClaw Skills integration for security workflows. Garmin Connect integration for Clawdbot: sync fitness data (steps, HR, calories, workouts, sleep) every 5 minutes using OAuth.

2.1k stars3.9k forksSecurity L1
Updated Feb 7, 2026Created Feb 7, 2026security

Skill Snapshot

namegarmin-connect
descriptionGarmin Connect integration for Clawdbot: sync fitness data (steps, HR, calories, workouts, sleep) every 5 minutes using OAuth. OpenClaw Skills integration.
ownergodsboy
repositorygodsboy/garmin-connect-fixed
languageMarkdown
licenseMIT
topics
securityL1
installopenclaw add @godsboy/garmin-connect-fixed
last updatedFeb 7, 2026

Maintainer

godsboy

godsboy

Maintains garmin-connect in the OpenClaw Skills directory.

View GitHub profile
File Explorer
11 files
.
scripts
garmin-auth-oauth.py
2.0 KB
garmin-auth.py
1.5 KB
garmin-cron.sh
434 B
garmin-formatter.py
3.0 KB
garmin-sync-oauth.py
4.3 KB
garmin-sync.py
5.4 KB
_meta.json
295 B
README.md
3.5 KB
requirements.txt
62 B
SKILL.md
4.0 KB
SKILL.md

name: garmin-connect description: "Garmin Connect integration for Clawdbot: sync fitness data (steps, HR, calories, workouts, sleep) every 5 minutes using OAuth."

Garmin Connect Skill

Sync all your Garmin fitness data to Clawdbot:

  • 🚶 Daily Activity: Steps, heart rate, calories, active minutes, distance
  • 😓 Sleep: Duration, quality, deep/REM/light sleep breakdown
  • šŸ‹ļø Workouts: Recent activities with distance, duration, calories, heart rate
  • ā±ļø Real-time sync: Every 5 minutes via cron

Quick Start

1. Install Dependencies

pip install -r requirements.txt

2. OAuth Authentication (One-time)

python3 scripts/garmin-auth.py your-email@gmail.com your-password

This saves your OAuth session to ~/.garth/session.json — fully local and secure.

3. Test Sync

python3 scripts/garmin-sync.py

You should see JSON output with today's stats.

4. Set Up 5-Minute Cron

Add to your crontab:

*/5 * * * * /home/user/garmin-connect-clawdbot/scripts/garmin-cron.sh

Or manually:

*/5 * * * * python3 /home/user/garmin-connect-clawdbot/scripts/garmin-sync.py ~/.clawdbot/.garmin-cache.json

5. Use in Clawdbot

Import and use in your scripts:

from scripts.garmin_formatter import format_all, get_as_dict

# Get all formatted data
print(format_all())

# Or get raw dict
data = get_as_dict()
print(f"Steps today: {data['summary']['steps']}")

Features

āœ… OAuth-based (secure, no password storage) āœ… All metrics: activity, sleep, workouts āœ… Local caching (fast access) āœ… Cron-friendly (5-minute intervals) āœ… Easy Clawdbot integration āœ… Multi-user support

Data Captured

Daily Activity (summary)

  • steps: Daily step count
  • heart_rate_resting: Resting heart rate (bpm)
  • calories: Total calories burned
  • active_minutes: Intensity minutes
  • distance_km: Distance traveled

Sleep (sleep)

  • duration_hours: Total sleep time
  • duration_minutes: Sleep in minutes
  • quality_percent: Sleep quality score (0-100)
  • deep_sleep_hours: Deep sleep duration
  • rem_sleep_hours: REM sleep duration
  • light_sleep_hours: Light sleep duration
  • awake_minutes: Time awake during sleep

Workouts (workouts)

For each recent workout:

  • type: Activity type (Running, Cycling, etc.)
  • name: Activity name
  • distance_km: Distance traveled
  • duration_minutes: Duration of activity
  • calories: Calories burned
  • heart_rate_avg: Average heart rate
  • heart_rate_max: Max heart rate

Cache Location

By default, data is cached at: ~/.clawdbot/.garmin-cache.json

Customize with:

python3 scripts/garmin-sync.py /custom/path/cache.json

Files

FilePurpose
garmin-auth.pyOAuth setup (run once)
garmin-sync.pyMain sync logic (run every 5 min)
garmin-formatter.pyFormat data for display
garmin-cron.shCron wrapper script
requirements.txtPython dependencies

Troubleshooting

OAuth authentication fails

  • Check email/password
  • Disable 2FA on Garmin account (or use app password)
  • Garmin servers might be rate-limiting — wait 5 minutes

No data appears

  1. Sync your Garmin device with the Garmin Connect app
  2. Wait 2-3 minutes for data to sync
  3. Check that data appears in Garmin Connect web/app
  4. Then run garmin-sync.py again

Permission denied on cron

chmod +x scripts/garmin-cron.sh
chmod +x scripts/garmin-sync.py
chmod +x scripts/garmin-auth.py

Cache file not found

Run garmin-sync.py at least once to create cache:

python3 scripts/garmin-sync.py

Usage Examples

from scripts.garmin_formatter import format_all, get_as_dict

# Get formatted output
print(format_all())

# Get raw data
data = get_as_dict()
if data:
    print(f"Sleep: {data['sleep']['duration_hours']}h")
    print(f"Steps: {data['summary']['steps']:,}")

License

MIT — Use, fork, modify freely.


Made for Clawdbot | Available on ClawdHub

README.md

Garmin Connect Integration for Clawdbot

Sync your Garmin fitness data (steps, HR, calories, workouts, sleep) automatically to Clawdbot every 5 minutes.

Quick Start

1. Install Dependencies

pip install -r requirements.txt

2. Authenticate with OAuth

Run the authentication script:

python3 scripts/garmin-auth.py your-email@gmail.com your-password

This saves your OAuth session to ~/.garth/session.json (local, secure).

āš ļø Keep this file safe — it contains your Garmin OAuth token.

3. Test

python3 scripts/garmin-sync.py

You should see JSON output with your current Garmin data.

4. Set Up Cron (5-minute sync)

Add to your crontab:

*/5 * * * * python3 /path/to/scripts/garmin-sync.py

5. Use in Your Scripts

Import Garmin data in any Clawdbot script:

from garmin_connect_clawdbot.scripts.garmin_formatter import format_all, get_as_dict

# Get all formatted data
all_data = format_all()
print(all_data)

# Or get raw dictionary
data = get_as_dict()
steps = data['summary']['steps']
sleep_hours = data['sleep']['duration_hours']

Features

  • āœ… OAuth-based authentication (secure)
  • āœ… Real-time sync every 5 minutes
  • āœ… Sleep quality tracking (duration, deep/REM/light sleep)
  • āœ… Daily activity metrics (steps, HR, calories, distance)
  • āœ… Workout tracking (all activity types)
  • āœ… Body battery monitoring
  • āœ… Local caching (JSON)
  • āœ… Easy Clawdbot integration

Scripts

ScriptPurpose
garmin-auth.pyOAuth authentication (run once)
garmin-sync.pySync all data from Garmin
garmin-formatter.pyFormat data for display
garmin-cron.shWrapper for cron jobs

Data Caching

Data is cached locally in JSON format for quick access without constant API calls.

Data Structure

The cached data contains:

  • summary: Daily activity (steps, heart rate, calories, active minutes, distance)
  • sleep: Sleep metrics (duration, quality, deep/REM/light sleep breakdown)
  • workouts: Recent activities (type, distance, duration, calories, heart rate)

Usage Examples

Format All Data

from scripts.garmin_formatter import format_all

output = format_all()  # Returns formatted string
print(output)

Access Raw Data

from scripts.garmin_formatter import get_as_dict

data = get_as_dict()
if data:
    print(f"Sleep: {data['sleep']['duration_hours']}h")
    print(f"Steps: {data['summary']['steps']:,}")
    print(f"Workouts: {len(data['workouts'])} activities")

Format Specific Metrics

from scripts.garmin_formatter import format_daily_summary, format_sleep, format_workouts

# Use individually
print(format_daily_summary())
print(format_sleep())
print(format_workouts())

Troubleshooting

Authentication Failed

  • Check email/password
  • Ensure 2FA is OFF on Garmin (or use app-specific password)
  • Garmin servers might rate-limit — wait 5 minutes

No Sleep Data

  • Sync your Garmin device with the Garmin Connect app
  • Sleep must be tracked while wearing device
  • Data available ~1 hour after waking

Missing Workouts

  • Sync device → Garmin Connect app
  • Confirm workout saved in Garmin app
  • Check garmin-sync.py logs

Data not syncing

Run the sync script manually:

python3 scripts/garmin-sync.py

Check the output for errors.

License

MIT — Use freely, fork, modify as needed.


Made for Clawdbot | Available on ClawdHub

Permissions & Security

Security level L1: Low-risk skills with minimal permissions. Review inputs and outputs before running in production.

Requirements

  • OpenClaw CLI installed and configured.
  • Language: Markdown
  • License: MIT
  • Topics:

FAQ

How do I install garmin-connect?

Run openclaw add @godsboy/garmin-connect-fixed in your terminal. This installs garmin-connect into your OpenClaw Skills catalog.

Does this skill run locally or in the cloud?

OpenClaw Skills execute locally by default. Review the SKILL.md and permissions before running any skill.

Where can I verify the source code?

The source repository is available at https://github.com/openclaw/skills/tree/main/skills/godsboy/garmin-connect-fixed. Review commits and README documentation before installing.