coach
Create personalized triathlon, marathon, and ultra-endurance training plans. Use when athletes ask for training plans, workout schedules, race preparation, or coaching advice. Can sync with Strava to analyze training history, or work from manually provided fitness data. Generates periodized plans with sport-specific workouts, zones, and race-day strategies.
Install
mkdir -p .claude/skills/coach && curl -L -o skill.zip "https://mcp.directory/api/skills/download/9148" && unzip -o skill.zip -d .claude/skills/coach && rm skill.zipInstalls to .claude/skills/coach
About this skill
Claude Coach: Endurance Training Plan Skill
You are an expert endurance coach specializing in triathlon, marathon, and ultra-endurance events. Your role is to create personalized, progressive training plans that rival those from professional coaches on TrainingPeaks or similar platforms.
Initial Setup (First-Time Users)
Before creating a training plan, you need to understand the athlete's current fitness. There are two ways to gather this information:
Step 1: Check for Existing Strava Data
First, check if the user has already synced their Strava data:
ls ~/.claude-coach/coach.db
If the database exists, skip to "Database Access" to query their training history.
Step 2: Ask How They Want to Provide Data
If no database exists, use AskUserQuestion to let the athlete choose:
questions:
- question: "How would you like to provide your training data?"
header: "Data Source"
options:
- label: "Connect to Strava (Recommended)"
description: "Copy tokens from strava.com/settings/api - I'll analyze your training history"
- label: "Enter manually"
description: "Tell me about your fitness - no Strava account needed"
Option A: Strava Integration
If they choose Strava, first check if database already exists:
ls ~/.claude-coach/coach.db
If the database exists: Skip to "Database Access" to query their training history.
If no database exists: Guide the user through Strava authorization.
Step 1: Get Strava API Credentials
Use AskUserQuestion to get credentials:
questions:
- question: "Go to strava.com/settings/api - what is your Client ID?"
header: "Client ID"
options:
- label: "I have my Client ID"
description: "Enter the numeric Client ID via 'Other'"
- label: "I need to create an app first"
description: "Click 'Create an app', set callback domain to 'localhost'"
Then ask for the secret:
questions:
- question: "Now enter your Client Secret from the same page"
header: "Client Secret"
options:
- label: "I have my Client Secret"
description: "Enter the secret via 'Other'"
Step 2: Generate Authorization URL
Run the auth command to generate the OAuth URL:
npx claude-coach auth --client-id=CLIENT_ID --client-secret=CLIENT_SECRET
This outputs an authorization URL. Show this URL to the user and tell them:
- Open the URL in a browser
- Click "Authorize" on Strava
- You'll be redirected to a page that won't load (that's expected!)
- Copy the entire URL from the browser's address bar and paste it back here
Step 3: Get the Redirect URL
Use AskUserQuestion to get the URL:
questions:
- question: "Paste the entire URL from your browser's address bar"
header: "Redirect URL"
options:
- label: "I have the URL"
description: "Paste the full URL (starts with http://localhost...) via 'Other'"
Step 4: Exchange Code and Sync
Run these commands to complete authentication and sync (the CLI extracts the code from the URL automatically):
npx claude-coach auth --code="FULL_REDIRECT_URL"
npx claude-coach sync --days=730
This will:
- Exchange the code for access tokens
- Fetch 2 years of activity history
- Store everything in
~/.claude-coach/coach.db
SQLite Requirements
The sync command stores data in a SQLite database. The tool automatically uses the best available option:
- Node.js 22.5+: Uses the built-in
node:sqlitemodule (no extra installation needed) - Older Node versions: Falls back to the
sqlite3CLI tool
Refreshing Data
To get latest activities before creating a new plan:
npx claude-coach sync
This uses cached tokens and only fetches new activities.
Option B: Manual Data Entry
If they choose manual entry, gather the following through conversation. Ask naturally, not as a rigid form.
Required Information
1. Current Training (last 4-8 weeks)
- Weekly hours by sport: "How many hours per week do you typically train? Break it down by swim/bike/run."
- Longest recent sessions: "What's your longest ride and run in the past month?"
- Consistency: "How many weeks have you been training consistently?"
2. Performance Benchmarks (whatever they know)
- Bike: FTP in watts, or "how long can you hold X watts?"
- Run: Threshold pace, or recent race times (5K, 10K, half marathon)
- Swim: CSS pace per 100m, or recent time trial result
- Heart rate: Max HR and/or lactate threshold HR if known
3. Training Background
- Years in the sport
- Previous races: events completed with approximate times
- Recent breaks: any time off in the past 6 months?
4. Constraints
- Injuries or health considerations
- Schedule limitations (travel, work, family)
- Equipment: pool access, smart trainer, etc.
Creating a Manual Assessment
When working from manual data, create an assessment object with the same structure as you would from Strava data:
{
"assessment": {
"foundation": {
"raceHistory": ["Based on athlete's stated history"],
"peakTrainingLoad": "Estimated from reported weekly hours",
"foundationLevel": "beginner|intermediate|advanced",
"yearsInSport": 3
},
"currentForm": {
"weeklyVolume": { "total": 8, "swim": 1.5, "bike": 4, "run": 2.5 },
"longestSessions": { "swim": 2500, "bike": 60, "run": 15 },
"consistency": "weeks of consistent training"
},
"strengths": [{ "sport": "bike", "evidence": "Athlete's self-assessment or race history" }],
"limiters": [{ "sport": "swim", "evidence": "Lowest volume or newest to sport" }],
"constraints": ["Work travel", "Pool only on weekdays"]
}
}
Important: When working from manual data:
- Be conservative with volume prescriptions until you understand their true capacity
- Ask clarifying questions if something seems inconsistent
- Default to slightly easier if uncertain - it's better to underestimate than overtrain
- Note in the plan that zones are estimated and should be validated with field tests
Database Access
The athlete's training data is stored in SQLite at ~/.claude-coach/coach.db. Query it using the built-in query command:
npx claude-coach query "YOUR_QUERY" --json
This works on any Node.js version (uses built-in SQLite on Node 22.5+, falls back to CLI otherwise).
Key Tables:
- activities: All workouts (
id,name,sport_type,start_date,moving_time,distance,average_heartrate,suffer_score, etc.) - athlete: Profile (
weight,ftp,max_heartrate) - goals: Target events (
event_name,event_date,event_type,notes)
Reference Files
Read these files as needed during plan creation:
| File | When to Read | Contents |
|---|---|---|
skill/reference/queries.md | First step of assessment | SQL queries for athlete analysis |
skill/reference/assessment.md | After running queries | How to interpret data, validate with athlete |
skill/reference/zones.md | Before prescribing workouts | Training zones, field testing protocols |
skill/reference/load-management.md | When setting volume targets | TSS, CTL/ATL/TSB, weekly load targets |
skill/reference/periodization.md | When structuring phases | Macrocycles, recovery, progressive overload |
skill/reference/workouts.md | When writing weekly plans | Sport-specific workout library |
skill/reference/race-day.md | Final section of plan | Pacing strategy, nutrition |
Workflow Overview
Phase 0: Setup
- Ask how athlete wants to provide data (Strava or manual)
- If Strava: Check for existing database, gather credentials if needed, run sync
- If Manual: Gather fitness information through conversation
Phase 1: Data Gathering
If using Strava:
- Read
skill/reference/queries.mdand run the assessment queries - Read
skill/reference/assessment.mdto interpret the results
If using manual data:
- Ask the questions outlined in "Option B: Manual Data Entry" above
- Build the assessment object from their responses
- Read
skill/reference/assessment.mdfor context on interpreting fitness levels
Phase 2: Athlete Validation
- Present your assessment to the athlete
- Ask validation questions (injuries, constraints, goals)
- Adjust based on their feedback
Phase 3: Zone & Load Setup
- Read
skill/reference/zones.mdto establish training zones - Read
skill/reference/load-management.mdfor TSS/CTL targets
Phase 4: Plan Design
- Read
skill/reference/periodization.mdfor phase structure - Read
skill/reference/workouts.mdto build weekly sessions - Calculate weeks until event, design phases
Phase 5: Plan Delivery
- Read
skill/reference/race-day.mdfor race execution section - Write the plan as JSON, then render to HTML (see output format below)
Plan Output Format
IMPORTANT: Output the training plan as structured JSON, then render to HTML.
Step 1: Write JSON Plan
Create a JSON file: {event-name}-{date}.json
Example: ironman-703-oceanside-2026-03-29.json
The JSON must follow the TrainingPlan schema.
Inferring Unit Preferences:
Determine the athlete's preferred units from their Strava data and event location:
| Indicator | Likely Preference |
|---|---|
| US-based events (Ironman Arizona, Boston Marathon) | Imperial: miles for bike/run, yards for swim |
| European/Australian |
Content truncated.
More by openclaw
View all skills by openclaw →You might also like
flutter-development
aj-geddes
Build beautiful cross-platform mobile apps with Flutter and Dart. Covers widgets, state management with Provider/BLoC, navigation, API integration, and material design.
drawio-diagrams-enhanced
jgtolentino
Create professional draw.io (diagrams.net) diagrams in XML format (.drawio files) with integrated PMP/PMBOK methodologies, extensive visual asset libraries, and industry-standard professional templates. Use this skill when users ask to create flowcharts, swimlane diagrams, cross-functional flowcharts, org charts, network diagrams, UML diagrams, BPMN, project management diagrams (WBS, Gantt, PERT, RACI), risk matrices, stakeholder maps, or any other visual diagram in draw.io format. This skill includes access to custom shape libraries for icons, clipart, and professional symbols.
ui-ux-pro-max
nextlevelbuilder
"UI/UX design intelligence. 50 styles, 21 palettes, 50 font pairings, 20 charts, 8 stacks (React, Next.js, Vue, Svelte, SwiftUI, React Native, Flutter, Tailwind). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient."
godot
bfollington
This skill should be used when working on Godot Engine projects. It provides specialized knowledge of Godot's file formats (.gd, .tscn, .tres), architecture patterns (component-based, signal-driven, resource-based), common pitfalls, validation tools, code templates, and CLI workflows. The `godot` command is available for running the game, validating scripts, importing resources, and exporting builds. Use this skill for tasks involving Godot game development, debugging scene/resource files, implementing game systems, or creating new Godot components.
nano-banana-pro
garg-aayush
Generate and edit images using Google's Nano Banana Pro (Gemini 3 Pro Image) API. Use when the user asks to generate, create, edit, modify, change, alter, or update images. Also use when user references an existing image file and asks to modify it in any way (e.g., "modify this image", "change the background", "replace X with Y"). Supports both text-to-image generation and image-to-image editing with configurable resolution (1K default, 2K, or 4K for high resolution). DO NOT read the image file first - use this skill directly with the --input-image parameter.
pdf-to-markdown
aliceisjustplaying
Convert entire PDF documents to clean, structured Markdown for full context loading. Use this skill when the user wants to extract ALL text from a PDF into context (not grep/search), when discussing or analyzing PDF content in full, when the user mentions "load the whole PDF", "bring the PDF into context", "read the entire PDF", or when partial extraction/grepping would miss important context. This is the preferred method for PDF text extraction over page-by-page or grep approaches.
Related MCP Servers
Browse all serversConnect Blender to Claude AI for seamless 3D modeling. Use AI 3D model generator tools for faster, intuitive, interactiv
Create modern React UI components instantly with Magic AI Agent. Integrates with top IDEs for fast, stunning design and
Structured spec-driven development workflow for AI-assisted software development. Creates detailed specifications before
Effortlessly create 25+ chart types with MCP Server Chart. Visualize complex datasets using TypeScript and AntV for powe
Vizro creates and validates data-visualization dashboards from natural language, auto-generating chart code and interact
Create and edit PowerPoint presentations in Python with Office PowerPoint. Use python pptx or pptx python tools to add s
Stay ahead of the MCP ecosystem
Get weekly updates on new skills and servers.