feat: add cycling-training Claude skill (MCP companion)
Modular cycling-training skill: periodization logic, workout design, and research-backed protocols that companion an Intervals.icu MCP server (the server owns all data + computed metrics; the skill owns knowledge + reasoning). Structure: - SKILL.md router + README (companion-to-MCP architecture, install steps) - references/: durability, mtb-xco-demands, strength-for-cyclists, vo2max-intervals, periodization, data-confounds, citations - assets/: base + build plan templates, durability field-test protocol Every quantitative claim carries an inline citation; citations.md is the single source of truth with PMID/DOI, each verified against PubMed on 2026-07-20. Notable honesty flags baked in: - VO2 rep-length: running (Fleckenstein 2025) vs cycling (Ronnestad) conflict documented rather than asserted; cycling evidence favors short intervals. - 'Yu et al. 2025' (frequency > distribution) could not be found; not cited. - Under-researched doses (durability, taper TSB, CTL ramp) flagged 'track response'. - HR-confound doc forbids naive decoupling<5% / RHR+5 rules. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TqrhBhC3GEcKyaw8RTk8G6
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
# Durability field test — fatigued-state power on a fixed hill
|
||||
|
||||
A repeatable field test for **fatigue resistance**: how much of your fresh power survives after
|
||||
substantial work. Fatigued-state power discriminates real-world cycling performance better than
|
||||
fresh power (see `references/durability.md` and `references/citations.md`).
|
||||
|
||||
> ⚠️ **Under-researched dose.** The *concept* is well supported; the *optimal* kJ pre-load and
|
||||
> effort length are not standardized. Treat the numbers below as a sensible, repeatable default —
|
||||
> hold them **constant** across tests so the comparison is valid, and track your own response.
|
||||
|
||||
## The protocol
|
||||
|
||||
**Fresh baseline (do once, on a rested day):**
|
||||
- Warm up, then a maximal **1-minute effort** on your chosen fixed hill.
|
||||
- Record: average power, the segment, gearing, and conditions. This is your *fresh* anchor.
|
||||
|
||||
**Fatigued test (the actual durability measure):**
|
||||
1. Ride until you have accumulated **~1,500 kJ of work** (typically ~2.5 h; read the kJ total from
|
||||
the MCP `get_activity_*` data / head unit — do **not** estimate it by feel). Keep this ride
|
||||
mostly endurance so the fatigue is from *duration*, not a second hard effort.
|
||||
2. Immediately do the **same 1-minute maximal effort on the same hill**, same gearing.
|
||||
3. Record average power.
|
||||
|
||||
**The number that matters:**
|
||||
```
|
||||
Durability % = fatigued 1-min power ÷ fresh 1-min power × 100
|
||||
```
|
||||
Higher = more durable. Track the *trend* across a season, not a single value.
|
||||
|
||||
## Keep it a valid comparison (hold these constant)
|
||||
|
||||
| Variable | Why it must be fixed |
|
||||
|---|---|
|
||||
| The hill / segment & gearing | Grade and cadence change the power–speed relationship |
|
||||
| The **1,500 kJ** pre-load | The whole point is matched accumulated work |
|
||||
| Nutrition during the pre-load | Glycogen status drives fatigued power; fuel it consistently |
|
||||
| Time of day, rough temperature | Heat and circadian effects move power (`references/data-confounds.md`) |
|
||||
|
||||
## Reading it
|
||||
|
||||
- **Prescribe and judge from power, not HR.** HR after 1,500 kJ is confounded by cardiac drift,
|
||||
heat, and fueling — use it only as a secondary decoupling signal (`references/data-confounds.md`).
|
||||
- A rising durability % across a block, with fresh power flat or up, is the signal you want.
|
||||
- A durability % that only holds when overall training load is high is *expected* — durability
|
||||
depends on sustained load, unlike fresh power (see Spragg et al. in `references/citations.md`).
|
||||
|
||||
## Logging it back to Intervals.icu
|
||||
|
||||
Record the fresh and fatigued efforts as tagged activities/intervals, or note the durability % in
|
||||
the activity message / wellness comment, so the MCP server can retrieve the series later. This
|
||||
skill does not store data — Intervals.icu does.
|
||||
@@ -0,0 +1,62 @@
|
||||
# Plan template — base mesocycle (backward-mapped from an A-race)
|
||||
|
||||
A fill-in skeleton for a **base** block. This is a *knowledge template*, not a calculator — pull
|
||||
every number (current CTL/ATL/TSB, FTP, MAP, TSS) from the Intervals.icu MCP server and reason with
|
||||
the logic in `references/periodization.md`.
|
||||
|
||||
## Step 0 — anchor to the A-race (backward mapping)
|
||||
|
||||
```
|
||||
A-race date: __________
|
||||
Weeks until A-race: __________
|
||||
Race demands: (road/TT? MTB/XCO? marathon? — see references/mtb-xco-demands.md)
|
||||
Target race-week TSB: +5 to +15 (see periodization.md → taper)
|
||||
Current CTL / ATL / TSB: ____ / ____ / ____ (from MCP get_athlete_summary)
|
||||
```
|
||||
Work **backwards**: peak → build → base. Base's job is to raise sustainable CTL and aerobic
|
||||
durability so the build block has something to sharpen.
|
||||
|
||||
## Step 1 — mesocycle rhythm
|
||||
|
||||
| Athlete profile | Loading rhythm |
|
||||
|---|---|
|
||||
| Younger / high recoverability | **3:1** (3 build weeks : 1 recovery week) |
|
||||
| **Masters / higher life stress** | **2:1** (2 build : 1 recovery) — favors recovery |
|
||||
|
||||
Pick one and hold it. Recovery weeks are ~40–60% of the preceding load week's TSS.
|
||||
|
||||
## Step 2 — weekly shape (base phase)
|
||||
|
||||
Base is **mostly low intensity with a small hard dose kept alive.** Distribution is a principle,
|
||||
not a recipe (Seiler — see `references/periodization.md`): let volume, training age, and life
|
||||
stress set the exact split.
|
||||
|
||||
```
|
||||
Weekly TSS target: ____ (ramp CTL ~3–7 pts/week; see periodization.md → CTL ramp)
|
||||
Long endurance ride: 1 × ____ h (durability driver — see references/durability.md)
|
||||
Endurance / Z2 rides: __ × ____ h
|
||||
Aerobic-support intensity: 1 × threshold OR sub-threshold session (keep top-end from decaying)
|
||||
Strength: 2 × /week heavy (see strength-for-cyclists.md; from-zero ramp if new)
|
||||
Recovery / off: as needed
|
||||
```
|
||||
|
||||
## Step 3 — build in durability early
|
||||
|
||||
- Progressively lengthen the long ride; late in base, place **fatigued-state efforts late** in the
|
||||
long ride (hard work after accumulated kJ) — see `references/durability.md`.
|
||||
- Fuel these to spare glycogen; the point is durability, not depletion.
|
||||
- Schedule the durability field test (`field-test-durability.md`) at the **start and end** of base
|
||||
to measure the block.
|
||||
|
||||
## Step 4 — strength through base
|
||||
|
||||
- Base is the ideal time to build heavy-strength capacity: 2×/week, heavy compound lifts, 3–6 reps.
|
||||
- Sequence strength-first or on separate days to mute interference (`references/strength-for-cyclists.md`).
|
||||
- Plan to **preserve** (not abandon) strength into build/in-season — 1×/week maintenance.
|
||||
|
||||
## Checkpoints (pull from MCP, judge with the skill)
|
||||
|
||||
- [ ] CTL ramp within target (not runaway) — `get_athlete_summary`
|
||||
- [ ] Recovery weeks actually recovered — wellness trend, `references/data-confounds.md`
|
||||
- [ ] Durability % improving across the block — `field-test-durability.md`
|
||||
- [ ] Strength load progressing — logged sessions
|
||||
@@ -0,0 +1,64 @@
|
||||
# Plan template — build block (VO2 + durability + strength)
|
||||
|
||||
A fill-in skeleton for a **build** mesocycle that sharpens the aerobic engine while preserving the
|
||||
base's durability and strength gains. A *knowledge template*, not a calculator — pull all metrics
|
||||
(CTL/ATL/TSB, FTP, MAP, TSS) from the Intervals.icu MCP server; reason with the referenced docs.
|
||||
|
||||
## Position in the season
|
||||
|
||||
Build sits between base and peak (backward-mapped from the A-race — see
|
||||
`assets/plan-template-base.md` and `references/periodization.md`). Its job: raise sustained power at
|
||||
and above threshold, add race-specific top-end, and keep durability from base intact.
|
||||
|
||||
```
|
||||
Weeks of build: __________
|
||||
Weeks until A-race: __________
|
||||
Current CTL / ATL / TSB: ____ / ____ / ____ (MCP get_athlete_summary)
|
||||
Primary limiter this block: (VO2max? threshold? repeatability? — pick ONE emphasis)
|
||||
Race demands: (road/TT steady? MTB/XCO intermittent? — mtb-xco-demands.md)
|
||||
```
|
||||
|
||||
## Mesocycle rhythm
|
||||
|
||||
Same as base: **3:1** (higher recoverability) or **2:1** (masters / high life stress). Build weeks
|
||||
carry more *intensity*, so recovery weeks matter more, not less.
|
||||
|
||||
## Weekly shape (build phase)
|
||||
|
||||
Fewer but sharper hard sessions. **Frequency of hard sessions matters more than the exact
|
||||
polarized-vs-pyramidal label** (Yu et al. — see `references/periodization.md`). A common shape:
|
||||
|
||||
```
|
||||
VO2max session: 1–2 × /week (see references/vo2max-intervals.md for rep length / work:rest)
|
||||
Threshold / race-specific: 1 × /week (or fold into the durability ride for MTB)
|
||||
Long durability ride: 1 × ____ h with hard efforts placed LATE (references/durability.md)
|
||||
Endurance / Z2: fill remaining volume — protect the low end
|
||||
Strength (maintenance): 1 × /week heavy, low volume (references/strength-for-cyclists.md)
|
||||
Recovery / off: as needed
|
||||
```
|
||||
|
||||
### VO2max prescription (from `references/vo2max-intervals.md`)
|
||||
- Goal is **maximizing time ≥90% VO2max**, not just "going hard."
|
||||
- Bias toward **longer reps (~3–5 min, ≈140 s optimum region)** at ~0.85 work:rest for rebuilding
|
||||
sustained aerobic power; they accumulate more time >90% VO2max than 30/30s at matched intensity.
|
||||
- Prescribe from **power**; for MTB, HR will lag and mislead (`references/data-confounds.md`).
|
||||
|
||||
## Keep durability alive
|
||||
|
||||
- Maintain at least one long ride; add fatigued-state efforts late (hard work after accumulated
|
||||
kJ). Durability decays if overall load drops (Spragg et al. — `references/citations.md`).
|
||||
- Re-run the durability field test (`assets/field-test-durability.md`) at block end to confirm it
|
||||
held while you added intensity.
|
||||
|
||||
## Preserve strength (don't drop it)
|
||||
|
||||
- **1×/week heavy maintenance** retains in-season strength gains; interference is muted with
|
||||
strength-first/separate-day sequencing and at older age (`references/strength-for-cyclists.md`).
|
||||
|
||||
## Checkpoints (pull from MCP, judge with the skill)
|
||||
|
||||
- [ ] VO2 sessions actually spending time ≥90% VO2max (power sustained across reps) — streams/intervals
|
||||
- [ ] TSB not chronically buried — `get_athlete_summary`; screen wellness (`data-confounds.md`)
|
||||
- [ ] Durability % holding or rising — `field-test-durability.md`
|
||||
- [ ] Race-specific demand rehearsed (steady TT vs intermittent MTB) — `mtb-xco-demands.md`
|
||||
- [ ] Strength maintained — logged sessions
|
||||
Reference in New Issue
Block a user