agentCLAWHUBUnverified

Wahoo Fitness Cloud API

Access Wahoo Fitness Cloud API to fetch workouts, download FIT files, and analyze training data (power, HR, cadence, GPS).

OpenClaw

Rank

62

Safety

84

Downloads

1.2k

Updated

Oct 11, 2026

Version

0.2.1

Source

CLAWHUB

About

What it does, and when to use it.

Capability contract not published. No trust telemetry is available yet. 1.2K downloads reported by the source. Last updated 10/11/2026.

Avoid when

  • Contract metadata is missing or unavailable for deterministic execution.

Risk flags: missing_or_unavailable_contract, trust_data_unavailable, schema_references_missing

Public facts

Every fact links back to the source it came from.

Vendor
Clawhubvendor · observed Oct 11, 2026
Protocol compatibility
OpenClawcompatibility · observed Oct 11, 2026
Adoption signal
1.2K downloadsadoption · observed Oct 11, 2026
Latest release
0.2.1release · observed May 26, 2026
Handshake status
UNKNOWNsecurity

Install and run

Setup complexity: low.

clawhub skill install s1755sfb9q331dk6dwfxy0qsen86093e:wahoo-cloud
  1. Install using `clawhub skill install s1755sfb9q331dk6dwfxy0qsen86093e:wahoo-cloud` in an isolated environment before connecting it to live workloads.
  2. No published capability contract is available yet, so validate auth and request/response behavior manually.
  3. Review the upstream CLAWHUB listing at https://clawhub.ai/tgmerritt/wahoo-cloud before using production credentials.

Contract: missing

curl -s "https://www.xpersona.co/api/v1/agents/clawhub-tgmerritt-wahoo-cloud/snapshot"

Documentation

CLAWHUB

146,504 characters of source documentation, loaded on request.

Extracted files

5 files captured from the source.

SKILL.md

---
name: wahoo-cloud
description: Access Wahoo Fitness Cloud API to fetch workouts, download FIT files, and analyze training data (power, HR, cadence, GPS).
homepage: https://cloud-api.wahooligan.com/
metadata: {"clawdbot":{"emoji":"🚴","requires":{"bins":["python3"],"env":["WAHOO_CLIENT_ID","WAHOO_CLIENT_SECRET"]},"primaryEnv":"WAHOO_CLIENT_ID"}}
---

# Wahoo Cloud Skill

Provides programmatic access to Wahoo Fitness Cloud data. This skill manages OAuth2 authentication, workout synchronization, and FIT file processing.

## 🚀 Agent Quickstart

When a user asks about their Wahoo workouts, training, or fitness data, use these workflows:

| User Intent | Action / Command |
| :--- | :--- |
| **"Sync my Wahoo workouts"** | `python3 {baseDir}/scripts/fetch_workouts.py` |
| **"Show my recent rides"** | Query the local SQLite DB: `$WAHOO_BASE_DIR/wahoo.db (default: ~/.wahoo/wahoo.db)` — schema below |
| **"Parse this FIT file"** | `python3 {baseDir}/scripts/parse_fit.py <PATH_TO_FIT>` |
| **"Connect/Set up Wahoo"** | 1. Verify `WAHOO_CLIENT_ID` and `WAHOO_CLIENT_SECRET` exist.<br>2. If missing, ask user to provide them.<br>3. Run `python3 {baseDir}/scripts/oauth_setup.py` |
| **"Token expired / persistent 401 errors"** | Run python3 {baseDir}/scripts/oauth_setup.py to re-authorize. Force-refresh without browser: python3 -c "import sys; sys.path.insert(0,'lib'); import wahoo_auth; wahoo_auth.refresh()" |

## 🛠 Key Workflows

### 1. Authentication & Setup
This skill requires a Wahoo Developer App. 
- **Credentials:** Must be provided as `WAHOO_CLIENT_ID` and `WAHOO_CLIENT_SECRET`.
- **OAuth Flow:** If tokens are missing or expired, run `scripts/oauth_setup.py`. This is an **interactive** process. You must present the URL to the user, wait for them to authenticate, and then ask them to paste the resulting redirect URL/code back into the terminal.
- **Token Storage:** Tokens are stored at $WAHOO_BASE_DIR/secrets/wahoo_tokens.json (controlled by WAHOO_BASE_DIR env var, default ~/.wahoo).

### 2. Data Synchronization
- **Command:** `python3 scripts/fetch_workouts.py`
- **Behavior:** Idempotent. It fetches new workouts, downloads FIT files, and populates the local SQLite database.
- **Database Path:** `$WAHOO_BASE_DIR/wahoo.db (default: ~/.wahoo/wahoo.db)`
- **Rate Limits:** The script automatically handles Wahoo's sandbox rate limits (25 req / 5 min) using exponential backoff.

### 3. Querying Training Data
Once synced, use the following SQL patterns to answer user questions:

- **Recent Workouts:** `SELECT * FROM workouts ORDER BY starts DESC LIMIT 10;`
- **Power/HR Series:** `SELECT timestamp, power_w, heart_rate, cadence FROM records WHERE workout_id = <id> ORDER BY timestamp;`
- **Elevation/GPS:** `SELECT timestamp, position_lat_deg, position_long_deg, enhanced_altitude_m FROM records WHERE workout_id = <id>;`

## ⚠️ Critical Constraints & Pitfalls

- **Rate Limiting:** Wahoo Sandbox is strict. Do not attempt to loop calls rapidly; rely on the `wahoo_ap

README.md

# Wahoo Skill

An agentic skill for synchronizing Wahoo fitness data into a local SQLite database. Designed to be high-signal for LLM agents and comprehensive for human developers.

## 🚀 Agent Quickstart (High-Signal)

Use these commands to interact with Wahoo data.

### Core Capabilities
- **Sync Data**: `python3 scripts/fetch_workouts.py [--limit N]`
  - Fetches workout metadata and downloads/parses FIT files.
  - `--limit N`: Only process the N most recent workouts (useful for testing/rate-limit avoidance).
- **Auth Setup**: `python3 scripts/oauth_setup.py`
  - Interactive OAuth2 flow to generate access and refresh tokens.

### Environment Variables
| Variable | Description | Default |
| :--- | :--- | :--- |
| `WAHOO_BASE_DIR` | Base directory for all Wahoo files (secrets, DB, FITs) | `~/.wahoo` |
| `WAHOO_CLIENT_ID` | Wahoo API Client ID | *Required* |
| `WAHOO_CLIENT_SECRET` | Wahoo API Client Secret | *Required* |

### Data Schema (SQLite)
The data is stored in `[WAHOO_BASE_DIR]/wahoo.db`.

**Key Tables:**
- `workouts`: Metadata (name, starts, distance, duration, power, heart rate, etc.)
- `laps`: Detailed lap-by-lap breakdown of each workout.
- `records`: High-resolution sensor data (power, heart rate, cadence, GPS).
- `device_info`: Hardware details used during the workout.
- `zones`: Heart rate and power zone data.
- `sync_log`: History of synchronization runs.

---

## 🛠 Developer Guide (Human-Centric)

## Overview
This skill provides a bridge between the Wahoo API and a local, structured SQLite database. It handles the complexities of OAuth2 token refreshing, paginated API requests, FIT file downloading, and intensive data parsing.

## Architecture

### 1. Authentication Flow
The skill uses the OAuth2 Authorization Code flow.
- **Tokens Location**: `[WAHOO_BASE_DIR]/secrets/wahoo_tokens.json`
- **Environment File**: `[WAHOO_BASE_DIR]/secrets/wahoo.env` (Optional, used to load credentials).

### 2. Sync Workflow
The `fetch_workouts.py` script follows this pipeline:
1. **Auth**: Ensures a valid access token is available (refreshes if necessary).
2. **Discovery**: Iterates through `/v1/workouts` to find new or updated metadata.
3. **Metadata Upsert**: Updates the `workouts` table with the latest summary data.
4. **FIT Processing**: 
   - If a workout lacks a local FIT file or parsed data:
   - Downloads the `.fit` file from the `fit_url` provided by Wahoo.
   - Uses `fit_parser` to extract high-resolution metrics.
   - Populates `laps`, `records`, `device_info`, and `zones` tables.

### 3. Database Schema
The schema is managed via `schema/wahoo_db_schema.sql` and incremental migrations defined in `scripts/fetch_workouts.py`.

## Installation & Setup

1. **Clone the repository.**
2. **Install dependencies**:
   ```bash
   pip install -r requirements.txt
   ```
3. **Configure Credentials**:
   Create a `.env` file in your `WAHOO_BASE_DIR` or set them in your shell:
   ```bash
   export WAHOO_CLIENT_ID='your_id'
   export WAHOO_CLIENT_SECR

_meta.json

{
  "ownerId": "kn705nhwfhwpf3p7cras3v44wd861fwr",
  "slug": "wahoo-cloud",
  "version": "0.2.1",
  "publishedAt": 1779828331856
}

LICENSE.md

MIT License

Copyright (c) 2026 Tyler Merritt

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

skill-card.md

## Description:

Access Wahoo Fitness Cloud API to fetch workouts, download FIT files, and analyze training data (power, HR, cadence, GPS).

This skill is ready for commercial/non-commercial use.

## Publisher:

[tgmerritt](https://clawhub.ai/user/tgmerritt)

### License/Terms of Use:

MIT

## Use Case:

Developers and agents use this skill to connect to Wahoo Fitness Cloud, synchronize workout data, parse FIT files, and answer training questions from a local SQLite database.

### Deployment Geography for Use:

Global

## Known Risks and Mitigations:

Risk: OAuth tokens and detailed workout or GPS data may be exposed on shared machines, synced folders, or agent workspaces.

Mitigation: Use a private WAHOO_BASE_DIR with restrictive permissions and avoid placing the database, FIT files, or token files in shared locations.

Risk: OAuth setup output and logs can reveal sensitive authentication details.

Mitigation: Avoid logging OAuth setup sessions or sharing terminal output from authorization and token setup.

Risk: The default OAuth scopes may be broader than a user's immediate task requires.

Mitigation: Reduce WAHOO_SCOPES where possible before authorizing the skill.

Risk: Dependency installation may be fragile because the dependency name and version are not pinned in requirements.txt.

Mitigation: Fix and pin the FIT parsing dependency before running pip install in a production or shared environment.

## Reference(s):

- [Wahoo Fitness Cloud API](https://cloud-api.wahooligan.com/)
- [ClawHub Skill Page](https://clawhub.ai/tgmerritt/skills/wahoo-cloud)

## Skill Output:

**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]

**Output Format:** [Markdown with shell commands, SQL examples, configuration guidance, and local file paths]

**Output Parameters:** [1D]

**Other Properties Related to Output:** [May create or update local OAuth token files, FIT downloads, and a SQLite workout database when the documented commands are run.]

## Skill Version(s):

0.2.1 (source: server-resolved release evidence)

## Ethical Considerations:

Users should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.
Github ReposUpdated 1d agoRank 70

AionUi

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!

MCPOPENCLAW
Github ReposUpdated 6mo agoRank 70

activepieces

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

OPENCLAW
Github ReposUpdated 6mo agoRank 70

cherry-studio

AI productivity studio with smart chat, autonomous agents, and 300+ assistants.

MCPOPENCLAW
Github ReposUpdated 7mo agoRank 70

CopilotKit

The Frontend for Agents & Generative UI. React + Angular

OPENCLAW

Machine-readable data

The same record, as JSON, for agents and crawlers.

{
  "facts": [
    {
      "factKey": "vendor",
      "category": "vendor",
      "label": "Vendor",
      "value": "Clawhub",
      "href": "https://clawhub.ai/tgmerritt/skills/wahoo-cloud",
      "sourceUrl": "https://clawhub.ai/tgmerritt/skills/wahoo-cloud",
      "sourceType": "profile",
      "confidence": "medium",
      "observedAt": "2026-10-11T02:53:13.526Z",
      "isPublic": true
    },
    {
      "factKey": "protocols",
      "category": "compatibility",
      "label": "Protocol compatibility",
      "value": "OpenClaw",
      "href": "https://www.xpersona.co/api/v1/agents/clawhub-tgmerritt-wahoo-cloud/contract",
      "sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-tgmerritt-wahoo-cloud/contract",
      "sourceType": "contract",
      "confidence": "medium",
      "observedAt": "2026-10-11T02:53:13.526Z",
      "isPublic": true
    },
    {
      "factKey": "traction",
      "category": "adoption",
      "label": "Adoption signal",
      "value": "1.2K downloads",
      "href": "https://clawhub.ai/tgmerritt/wahoo-cloud",
      "sourceUrl": "https://clawhub.ai/tgmerritt/wahoo-cloud",
      "sourceType": "profile",
      "confidence": "medium",
      "observedAt": "2026-10-11T02:53:13.526Z",
      "isPublic": true
    },
    {
      "factKey": "latest_release",
      "category": "release",
      "label": "Latest release",
      "value": "0.2.1",
      "href": "https://clawhub.ai/tgmerritt/wahoo-cloud",
      "sourceUrl": "https://clawhub.ai/tgmerritt/wahoo-cloud",
      "sourceType": "release",
      "confidence": "medium",
      "observedAt": "2026-05-26T20:45:31.856Z",
      "isPublic": true
    },
    {
      "factKey": "handshake_status",
      "category": "security",
      "label": "Handshake status",
      "value": "UNKNOWN",
      "href": "https://www.xpersona.co/api/v1/agents/clawhub-tgmerritt-wahoo-cloud/trust",
      "sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-tgmerritt-wahoo-cloud/trust",
      "sourceType": "trust",
      "confidence": "medium",
      "observedAt": null,
      "isPublic": true
    }
  ],
  "events": [
    {
      "eventType": "release",
      "title": "Release 0.2.1",
      "description": "Make skill runtime-agnostic: align WAHOO_BASE_DIR defaults, remove OpenClaw-specific refs from published libs, add --limit flag, restore error reference table, fix SKILL.md doc errors, add requirements.txt",
      "href": "https://clawhub.ai/tgmerritt/wahoo-cloud",
      "sourceUrl": "https://clawhub.ai/tgmerritt/wahoo-cloud",
      "sourceType": "release",
      "confidence": "medium",
      "observedAt": "2026-05-26T20:45:31.856Z",
      "isPublic": true
    }
  ]
}

Record generated Oct 11, 2026.

Sponsored

Ads related to Wahoo Fitness Cloud API and adjacent AI workflows.