Garmin Connect Fixed OpenClaw Skill - ClawHub
Do you want your AI agent to automate Garmin Connect Fixed workflows? This free skill from ClawHub helps with clawdbot tools tasks without building custom tools from scratch.
What this skill does
Garmin Connect integration for Clawdbot: sync fitness data (steps, HR, calories, workouts, sleep) every 5 minutes using OAuth.
Install
npx clawhub@latest install garmin-connect-fixedFull SKILL.md
Open original| name | description |
|---|---|
| garmin-connect | 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 [email protected] 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.