2.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.
Skill Snapshot
| name | garmin-connect |
| description | Garmin Connect integration for Clawdbot: sync fitness data (steps, HR, calories, workouts, sleep) every 5 minutes using OAuth. OpenClaw Skills integration. |
| owner | godsboy |
| repository | godsboy/garmin-connect-fixed |
| language | Markdown |
| license | MIT |
| topics | |
| security | L1 |
| install | openclaw add @godsboy/garmin-connect-fixed |
| last updated | Feb 7, 2026 |
Maintainer

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 countheart_rate_resting: Resting heart rate (bpm)calories: Total calories burnedactive_minutes: Intensity minutesdistance_km: Distance traveled
Sleep (sleep)
duration_hours: Total sleep timeduration_minutes: Sleep in minutesquality_percent: Sleep quality score (0-100)deep_sleep_hours: Deep sleep durationrem_sleep_hours: REM sleep durationlight_sleep_hours: Light sleep durationawake_minutes: Time awake during sleep
Workouts (workouts)
For each recent workout:
type: Activity type (Running, Cycling, etc.)name: Activity namedistance_km: Distance traveledduration_minutes: Duration of activitycalories: Calories burnedheart_rate_avg: Average heart rateheart_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
| File | Purpose |
|---|---|
garmin-auth.py | OAuth setup (run once) |
garmin-sync.py | Main sync logic (run every 5 min) |
garmin-formatter.py | Format data for display |
garmin-cron.sh | Cron wrapper script |
requirements.txt | Python 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
- Sync your Garmin device with the Garmin Connect app
- Wait 2-3 minutes for data to sync
- Check that data appears in Garmin Connect web/app
- Then run
garmin-sync.pyagain
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.
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
| Script | Purpose |
|---|---|
garmin-auth.py | OAuth authentication (run once) |
garmin-sync.py | Sync all data from Garmin |
garmin-formatter.py | Format data for display |
garmin-cron.sh | Wrapper 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.pylogs
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.
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.
