{"id":"0d7f7f62-7983-4bfc-a668-ee9767676210","entityType":"agent","slug":"clawhub-godsboy-garmin-connect-fixed","name":"Garmin Connect (Fixed)","canonicalUrl":"https://www.xpersona.co/agent/clawhub-godsboy-garmin-connect-fixed","canonicalPath":"/agent/clawhub-godsboy-garmin-connect-fixed","generatedAt":"2026-10-09T20:38:49.171Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"description":"Garmin Connect integration for Clawdbot: sync fitness data (steps, HR, calories, workouts, sleep) every 5 minutes using OAuth. Skill: Garmin Connect (Fixed) Owner: GodsBoy Summary: Garmin Connect integration for Clawdbot: sync fitness data (steps, HR, calories, workouts, sleep) every 5 minutes using OAuth. Tags: latest:1.1.0 Version history: v1.1.0 | 2026-01-28T07:43:19.022Z | user Fork of garmin-connect v1.0.0 with fixes: Fixed daily summary 403 error (display_name was None - now fetches from socialProfile endpoint). Fixed requirements.txt","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.8K downloads reported by the source. Last updated 4/15/2026.","installCommand":"clawhub skill install kn70jpv4vft60w34b6sa1p6dqh8024yf:garmin-connect-fixed","sourceUrl":"https://clawhub.ai/GodsBoy/garmin-connect-fixed","homepage":"https://clawhub.ai/GodsBoy/garmin-connect-fixed","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/GodsBoy/garmin-connect-fixed","kind":"source"}],"safetyScore":84,"overallRank":62,"popularityScore":65,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Garmin Connect integration for Clawdbot: sync fitness data (steps, HR, calories, workouts, sleep) every 5 minutes using OAuth. Skill: Garmin Connect (Fixed) Own"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"stars":null,"forks":null,"downloads":1822,"packageName":null,"latestVersion":"1.1.0","tractionLabel":"1.8K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-02-28T20:07:01.151Z","emptyReason":null},"lastUpdatedAt":"2026-04-15T00:45:39.800Z","lastCrawledAt":"2026-02-28T20:07:01.151Z","lastIndexedAt":null,"nextCrawlAt":"2026-03-01T20:07:01.151Z","lastVerifiedAt":null,"highlights":[{"version":"1.1.0","createdAt":"2026-01-28T07:43:19.022Z","changelog":"Fork of garmin-connect v1.0.0 with fixes: Fixed daily summary 403 error (display_name was None - now fetches from socialProfile endpoint). Fixed requirements.txt (garminconnect>=0.3.2 doesn't exist, corrected to >=0.2.38). All data (steps, HR, calories, sleep, workouts) now works. Contributed by @GodsBoy7777.","fileCount":10,"zipByteSize":10838}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install kn70jpv4vft60w34b6sa1p6dqh8024yf:garmin-connect-fixed","setupComplexity":"medium","setupSteps":["Python environment detected. Create a strict virtual environment (`python -m venv .venv`) before installing dependencies to prevent system-level package conflicts.","Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-godsboy-garmin-connect-fixed/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-godsboy-garmin-connect-fixed/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-godsboy-garmin-connect-fixed/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-godsboy-garmin-connect-fixed/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-godsboy-garmin-connect-fixed/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-godsboy-garmin-connect-fixed/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-09T20:38:49.171Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-godsboy-garmin-connect-fixed/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-godsboy-garmin-connect-fixed/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-godsboy-garmin-connect-fixed/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-godsboy-garmin-connect-fixed/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"readme":"Skill: Garmin Connect (Fixed)\n\nOwner: GodsBoy\n\nSummary: Garmin Connect integration for Clawdbot: sync fitness data (steps, HR, calories, workouts, sleep) every 5 minutes using OAuth.\n\nTags: latest:1.1.0\n\nVersion history:\n\nv1.1.0 | 2026-01-28T07:43:19.022Z | user\n\nFork of garmin-connect v1.0.0 with fixes: Fixed daily summary 403 error (display_name was None - now fetches from socialProfile endpoint). Fixed requirements.txt (garminconnect>=0.3.2 doesn't exist, corrected to >=0.2.38). All data (steps, HR, calories, sleep, workouts) now works. Contributed by @GodsBoy7777.\n\nArchive index:\n\nArchive v1.1.0: 10 files, 10838 bytes\n\nFiles: README.md (3570b), requirements.txt (62b), scripts/garmin-auth-oauth.py (2066b), scripts/garmin-auth.py (1548b), scripts/garmin-cron.sh (434b), scripts/garmin-formatter.py (3112b), scripts/garmin-sync-oauth.py (4453b), scripts/garmin-sync.py (5563b), SKILL.md (4107b), _meta.json (139b)\n\nFile v1.1.0:SKILL.md\n\n---\nname: garmin-connect\ndescription: \"Garmin Connect integration for Clawdbot: sync fitness data (steps, HR, calories, workouts, sleep) every 5 minutes using OAuth.\"\n---\n\n# Garmin Connect Skill\n\nSync all your Garmin fitness data to Clawdbot:\n- 🚶 **Daily Activity**: Steps, heart rate, calories, active minutes, distance\n- 😴 **Sleep**: Duration, quality, deep/REM/light sleep breakdown\n- 🏋️ **Workouts**: Recent activities with distance, duration, calories, heart rate\n- ⏱️ **Real-time sync**: Every 5 minutes via cron\n\n## Quick Start\n\n### 1. Install Dependencies\n\n```bash\npip install -r requirements.txt\n```\n\n### 2. OAuth Authentication (One-time)\n\n```bash\npython3 scripts/garmin-auth.py your-email@gmail.com your-password\n```\n\nThis saves your OAuth session to `~/.garth/session.json` — fully local and secure.\n\n### 3. Test Sync\n\n```bash\npython3 scripts/garmin-sync.py\n```\n\nYou should see JSON output with today's stats.\n\n### 4. Set Up 5-Minute Cron\n\nAdd to your crontab:\n\n```bash\n*/5 * * * * /home/user/garmin-connect-clawdbot/scripts/garmin-cron.sh\n```\n\nOr manually:\n\n```bash\n*/5 * * * * python3 /home/user/garmin-connect-clawdbot/scripts/garmin-sync.py ~/.clawdbot/.garmin-cache.json\n```\n\n### 5. Use in Clawdbot\n\nImport and use in your scripts:\n\n```python\nfrom scripts.garmin_formatter import format_all, get_as_dict\n\n# Get all formatted data\nprint(format_all())\n\n# Or get raw dict\ndata = get_as_dict()\nprint(f\"Steps today: {data['summary']['steps']}\")\n```\n\n## Features\n\n✅ OAuth-based (secure, no password storage)\n✅ All metrics: activity, sleep, workouts\n✅ Local caching (fast access)\n✅ Cron-friendly (5-minute intervals)\n✅ Easy Clawdbot integration\n✅ Multi-user support\n\n## Data Captured\n\n### Daily Activity (`summary`)\n- `steps`: Daily step count\n- `heart_rate_resting`: Resting heart rate (bpm)\n- `calories`: Total calories burned\n- `active_minutes`: Intensity minutes\n- `distance_km`: Distance traveled\n\n### Sleep (`sleep`)\n- `duration_hours`: Total sleep time\n- `duration_minutes`: Sleep in minutes\n- `quality_percent`: Sleep quality score (0-100)\n- `deep_sleep_hours`: Deep sleep duration\n- `rem_sleep_hours`: REM sleep duration\n- `light_sleep_hours`: Light sleep duration\n- `awake_minutes`: Time awake during sleep\n\n### Workouts (`workouts`)\nFor each recent workout:\n- `type`: Activity type (Running, Cycling, etc.)\n- `name`: Activity name\n- `distance_km`: Distance traveled\n- `duration_minutes`: Duration of activity\n- `calories`: Calories burned\n- `heart_rate_avg`: Average heart rate\n- `heart_rate_max`: Max heart rate\n\n## Cache Location\n\nBy default, data is cached at: `~/.clawdbot/.garmin-cache.json`\n\nCustomize with:\n```bash\npython3 scripts/garmin-sync.py /custom/path/cache.json\n```\n\n## Files\n\n| File | Purpose |\n|------|---------|\n| `garmin-auth.py` | OAuth setup (run once) |\n| `garmin-sync.py` | Main sync logic (run every 5 min) |\n| `garmin-formatter.py` | Format data for display |\n| `garmin-cron.sh` | Cron wrapper script |\n| `requirements.txt` | Python dependencies |\n\n## Troubleshooting\n\n### OAuth authentication fails\n\n- Check email/password\n- Disable 2FA on Garmin account (or use app password)\n- Garmin servers might be rate-limiting — wait 5 minutes\n\n### No data appears\n\n1. Sync your Garmin device with the Garmin Connect app\n2. Wait 2-3 minutes for data to sync\n3. Check that data appears in Garmin Connect web/app\n4. Then run `garmin-sync.py` again\n\n### Permission denied on cron\n\n```bash\nchmod +x scripts/garmin-cron.sh\nchmod +x scripts/garmin-sync.py\nchmod +x scripts/garmin-auth.py\n```\n\n### Cache file not found\n\nRun `garmin-sync.py` at least once to create cache:\n```bash\npython3 scripts/garmin-sync.py\n```\n\n## Usage Examples\n\n```python\nfrom scripts.garmin_formatter import format_all, get_as_dict\n\n# Get formatted output\nprint(format_all())\n\n# Get raw data\ndata = get_as_dict()\nif data:\n    print(f\"Sleep: {data['sleep']['duration_hours']}h\")\n    print(f\"Steps: {data['summary']['steps']:,}\")\n```\n\n## License\n\nMIT — Use, fork, modify freely.\n\n---\n\nMade for [Clawdbot](https://clawd.bot) | Available on [ClawdHub](https://clawdhub.com)\n\nFile v1.1.0:README.md\n\n# Garmin Connect Integration for Clawdbot\n\nSync your Garmin fitness data (steps, HR, calories, workouts, sleep) automatically to Clawdbot every 5 minutes.\n\n## Quick Start\n\n### 1. Install Dependencies\n\n```bash\npip install -r requirements.txt\n```\n\n### 2. Authenticate with OAuth\n\nRun the authentication script:\n\n```bash\npython3 scripts/garmin-auth.py your-email@gmail.com your-password\n```\n\nThis saves your OAuth session to `~/.garth/session.json` (local, secure).\n\n⚠️ **Keep this file safe** — it contains your Garmin OAuth token.\n\n### 3. Test\n\n```bash\npython3 scripts/garmin-sync.py\n```\n\nYou should see JSON output with your current Garmin data.\n\n### 4. Set Up Cron (5-minute sync)\n\nAdd to your crontab:\n\n```bash\n*/5 * * * * python3 /path/to/scripts/garmin-sync.py\n```\n\n### 5. Use in Your Scripts\n\nImport Garmin data in any Clawdbot script:\n\n```python\nfrom garmin_connect_clawdbot.scripts.garmin_formatter import format_all, get_as_dict\n\n# Get all formatted data\nall_data = format_all()\nprint(all_data)\n\n# Or get raw dictionary\ndata = get_as_dict()\nsteps = data['summary']['steps']\nsleep_hours = data['sleep']['duration_hours']\n```\n\n## Features\n\n- ✅ OAuth-based authentication (secure)\n- ✅ Real-time sync every 5 minutes\n- ✅ Sleep quality tracking (duration, deep/REM/light sleep)\n- ✅ Daily activity metrics (steps, HR, calories, distance)\n- ✅ Workout tracking (all activity types)\n- ✅ Body battery monitoring\n- ✅ Local caching (JSON)\n- ✅ Easy Clawdbot integration\n\n## Scripts\n\n| Script | Purpose |\n|--------|---------|\n| `garmin-auth.py` | OAuth authentication (run once) |\n| `garmin-sync.py` | Sync all data from Garmin |\n| `garmin-formatter.py` | Format data for display |\n| `garmin-cron.sh` | Wrapper for cron jobs |\n\n## Data Caching\n\nData is cached locally in JSON format for quick access without constant API calls.\n\n### Data Structure\n\nThe cached data contains:\n\n- **summary**: Daily activity (steps, heart rate, calories, active minutes, distance)\n- **sleep**: Sleep metrics (duration, quality, deep/REM/light sleep breakdown)\n- **workouts**: Recent activities (type, distance, duration, calories, heart rate)\n\n## Usage Examples\n\n### Format All Data\n\n```python\nfrom scripts.garmin_formatter import format_all\n\noutput = format_all()  # Returns formatted string\nprint(output)\n```\n\n### Access Raw Data\n\n```python\nfrom scripts.garmin_formatter import get_as_dict\n\ndata = get_as_dict()\nif data:\n    print(f\"Sleep: {data['sleep']['duration_hours']}h\")\n    print(f\"Steps: {data['summary']['steps']:,}\")\n    print(f\"Workouts: {len(data['workouts'])} activities\")\n```\n\n### Format Specific Metrics\n\n```python\nfrom scripts.garmin_formatter import format_daily_summary, format_sleep, format_workouts\n\n# Use individually\nprint(format_daily_summary())\nprint(format_sleep())\nprint(format_workouts())\n```\n\n## Troubleshooting\n\n### Authentication Failed\n\n- Check email/password\n- Ensure 2FA is **OFF** on Garmin (or use app-specific password)\n- Garmin servers might rate-limit — wait 5 minutes\n\n### No Sleep Data\n\n- Sync your Garmin device with the Garmin Connect app\n- Sleep must be tracked while wearing device\n- Data available ~1 hour after waking\n\n### Missing Workouts\n\n- Sync device → Garmin Connect app\n- Confirm workout saved in Garmin app\n- Check `garmin-sync.py` logs\n\n### Data not syncing\n\nRun the sync script manually:\n\n```bash\npython3 scripts/garmin-sync.py\n```\n\nCheck the output for errors.\n\n## License\n\nMIT — Use freely, fork, modify as needed.\n\n---\n\nMade for [Clawdbot](https://clawd.bot) | Available on [ClawdHub](https://clawdhub.com)\n\nFile v1.1.0:_meta.json\n\n{\n  \"ownerId\": \"kn70jpv4vft60w34b6sa1p6dqh8024yf\",\n  \"slug\": \"garmin-connect-fixed\",\n  \"version\": \"1.1.0\",\n  \"publishedAt\": 1769586199022\n}\n\nFile v1.1.0:requirements.txt\n\ngarminconnect>=0.2.38\nrequests>=2.28.0\npython-dateutil>=2.8.2","readmeExcerpt":"Skill: Garmin Connect (Fixed) Owner: GodsBoy Summary: Garmin Connect integration for Clawdbot: sync fitness data (steps, HR, calories, workouts, sleep) every 5 minutes using OAuth. Tags: latest:1.1.0 Version history: v1.1.0 | 2026-01-28T07:43:19.022Z | user Fork of garmin-connect v1.0.0 with fixes: Fixed daily summary 403 error (display_name was None - now fetches from socialProfile endpoint). Fixed requirements.txt ","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"pip install -r requirements.txt"},{"language":"bash","snippet":"python3 scripts/garmin-auth.py your-email@gmail.com your-password"},{"language":"bash","snippet":"python3 scripts/garmin-sync.py"},{"language":"bash","snippet":"*/5 * * * * /home/user/garmin-connect-clawdbot/scripts/garmin-cron.sh"},{"language":"bash","snippet":"*/5 * * * * python3 /home/user/garmin-connect-clawdbot/scripts/garmin-sync.py ~/.clawdbot/.garmin-cache.json"},{"language":"python","snippet":"from scripts.garmin_formatter import format_all, get_as_dict\n\n# Get all formatted data\nprint(format_all())\n\n# Or get raw dict\ndata = get_as_dict()\nprint(f\"Steps today: {data['summary']['steps']}\")"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: garmin-connect\ndescription: \"Garmin Connect integration for Clawdbot: sync fitness data (steps, HR, calories, workouts, sleep) every 5 minutes using OAuth.\"\n---\n\n# Garmin Connect Skill\n\nSync all your Garmin fitness data to Clawdbot:\n- 🚶 **Daily Activity**: Steps, heart rate, calories, active minutes, distance\n- 😴 **Sleep**: Duration, quality, deep/REM/light sleep breakdown\n- 🏋️ **Workouts**: Recent activities with distance, duration, calories, heart rate\n- ⏱️ **Real-time sync**: Every 5 minutes via cron\n\n## Quick Start\n\n### 1. Install Dependencies\n\n```bash\npip install -r requirements.txt\n```\n\n### 2. OAuth Authentication (One-time)\n\n```bash\npython3 scripts/garmin-auth.py your-email@gmail.com your-password\n```\n\nThis saves your OAuth session to `~/.garth/session.json` — fully local and secure.\n\n### 3. Test Sync\n\n```bash\npython3 scripts/garmin-sync.py\n```\n\nYou should see JSON output with today's stats.\n\n### 4. Set Up 5-Minute Cron\n\nAdd to your crontab:\n\n```bash\n*/5 * * * * /home/user/garmin-connect-clawdbot/scripts/garmin-cron.sh\n```\n\nOr manually:\n\n```bash\n*/5 * * * * python3 /home/user/garmin-connect-clawdbot/scripts/garmin-sync.py ~/.clawdbot/.garmin-cache.json\n```\n\n### 5. Use in Clawdbot\n\nImport and use in your scripts:\n\n```python\nfrom scripts.garmin_formatter import format_all, get_as_dict\n\n# Get all formatted data\nprint(format_all())\n\n# Or get raw dict\ndata = get_as_dict()\nprint(f\"Steps today: {data['summary']['steps']}\")\n```\n\n## Features\n\n✅ OAuth-based (secure, no password storage)\n✅ All metrics: activity, sleep, workouts\n✅ Local caching (fast access)\n✅ Cron-friendly (5-minute intervals)\n✅ Easy Clawdbot integration\n✅ Multi-user support\n\n## Data Captured\n\n### Daily Activity (`summary`)\n- `steps`: Daily step count\n- `heart_rate_resting`: Resting heart rate (bpm)\n- `calories`: Total calories burned\n- `active_minutes`: Intensity minutes\n- `distance_km`: Distance traveled\n\n### Sleep (`sleep`)\n- `duration_hours`: Total sleep time\n- `duration_minutes`: Sleep in minutes\n- `quality_percent`: Sleep quality score (0-100)\n- `deep_sleep_hours`: Deep sleep duration\n- `rem_sleep_hours`: REM sleep duration\n- `light_sleep_hours`: Light sleep duration\n- `awake_minutes`: Time awake during sleep\n\n### Workouts (`workouts`)\nFor each recent workout:\n- `type`: Activity type (Running, Cycling, etc.)\n- `name`: Activity name\n- `distance_km`: Distance traveled\n- `duration_minutes`: Duration of activity\n- `calories`: Calories burned\n- `heart_rate_avg`: Average heart rate\n- `heart_rate_max`: Max heart rate\n\n## Cache Location\n\nBy default, data is cached at: `~/.clawdbot/.garmin-cache.json`\n\nCustomize with:\n```bash\npython3 scripts/garmin-sync.py /custom/path/cache.json\n```\n\n## Files\n\n| File | Purpose |\n|------|---------|\n| `garmin-auth.py` | OAuth setup (run once) |\n| `garmin-sync.py` | Main sync logic (run every 5 min) |\n| `garmin-formatter.py` | Format data for display |\n| `garmin-cron.sh` | Cron wrapper script |\n| `requirements.txt` | Python dependencies |\n\n##"},{"path":"README.md","content":"# Garmin Connect Integration for Clawdbot\n\nSync your Garmin fitness data (steps, HR, calories, workouts, sleep) automatically to Clawdbot every 5 minutes.\n\n## Quick Start\n\n### 1. Install Dependencies\n\n```bash\npip install -r requirements.txt\n```\n\n### 2. Authenticate with OAuth\n\nRun the authentication script:\n\n```bash\npython3 scripts/garmin-auth.py your-email@gmail.com your-password\n```\n\nThis saves your OAuth session to `~/.garth/session.json` (local, secure).\n\n⚠️ **Keep this file safe** — it contains your Garmin OAuth token.\n\n### 3. Test\n\n```bash\npython3 scripts/garmin-sync.py\n```\n\nYou should see JSON output with your current Garmin data.\n\n### 4. Set Up Cron (5-minute sync)\n\nAdd to your crontab:\n\n```bash\n*/5 * * * * python3 /path/to/scripts/garmin-sync.py\n```\n\n### 5. Use in Your Scripts\n\nImport Garmin data in any Clawdbot script:\n\n```python\nfrom garmin_connect_clawdbot.scripts.garmin_formatter import format_all, get_as_dict\n\n# Get all formatted data\nall_data = format_all()\nprint(all_data)\n\n# Or get raw dictionary\ndata = get_as_dict()\nsteps = data['summary']['steps']\nsleep_hours = data['sleep']['duration_hours']\n```\n\n## Features\n\n- ✅ OAuth-based authentication (secure)\n- ✅ Real-time sync every 5 minutes\n- ✅ Sleep quality tracking (duration, deep/REM/light sleep)\n- ✅ Daily activity metrics (steps, HR, calories, distance)\n- ✅ Workout tracking (all activity types)\n- ✅ Body battery monitoring\n- ✅ Local caching (JSON)\n- ✅ Easy Clawdbot integration\n\n## Scripts\n\n| Script | Purpose |\n|--------|---------|\n| `garmin-auth.py` | OAuth authentication (run once) |\n| `garmin-sync.py` | Sync all data from Garmin |\n| `garmin-formatter.py` | Format data for display |\n| `garmin-cron.sh` | Wrapper for cron jobs |\n\n## Data Caching\n\nData is cached locally in JSON format for quick access without constant API calls.\n\n### Data Structure\n\nThe cached data contains:\n\n- **summary**: Daily activity (steps, heart rate, calories, active minutes, distance)\n- **sleep**: Sleep metrics (duration, quality, deep/REM/light sleep breakdown)\n- **workouts**: Recent activities (type, distance, duration, calories, heart rate)\n\n## Usage Examples\n\n### Format All Data\n\n```python\nfrom scripts.garmin_formatter import format_all\n\noutput = format_all()  # Returns formatted string\nprint(output)\n```\n\n### Access Raw Data\n\n```python\nfrom scripts.garmin_formatter import get_as_dict\n\ndata = get_as_dict()\nif data:\n    print(f\"Sleep: {data['sleep']['duration_hours']}h\")\n    print(f\"Steps: {data['summary']['steps']:,}\")\n    print(f\"Workouts: {len(data['workouts'])} activities\")\n```\n\n### Format Specific Metrics\n\n```python\nfrom scripts.garmin_formatter import format_daily_summary, format_sleep, format_workouts\n\n# Use individually\nprint(format_daily_summary())\nprint(format_sleep())\nprint(format_workouts())\n```\n\n## Troubleshooting\n\n### Authentication Failed\n\n- Check email/password\n- Ensure 2FA is **OFF** on Garmin (or use app-specific password)\n- Garmin servers might rate-limit — wait 5 minutes\n\n### No Sleep Da"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn70jpv4vft60w34b6sa1p6dqh8024yf\",\n  \"slug\": \"garmin-connect-fixed\",\n  \"version\": \"1.1.0\",\n  \"publishedAt\": 1769586199022\n}"},{"path":"requirements.txt","content":"garminconnect>=0.2.38\nrequests>=2.28.0\npython-dateutil>=2.8.2"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Garmin Connect integration for Clawdbot: sync fitness data (steps, HR, calories, workouts, sleep) every 5 minutes using OAuth. Skill: Garmin Connect (Fixed) Owner: GodsBoy Summary: Garmin Connect integration for Clawdbot: sync fitness data (steps, HR, calories, workouts, sleep) every 5 minutes using OAuth. Tags: latest:1.1.0 Version history: v1.1.0 | 2026-01-28T07:43:19.022Z | user Fork of garmin-connect v1.0.0 with fixes: Fixed daily summary 403 error (display_name was None - now fetches from socialProfile endpoint). Fixed requirements.txt","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1019,"uniquenessScore":45,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-09T20:38:49.171Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}