Two weeks ago, I wrote about discovering Claude Coach and shipping a PR in one afternoon. I was excited. I’d found a project that combined two things I care about deeply — running and AI — and I’d contributed schema validation to make it more reliable.
Then I waited.
The Silence
My PR #2 sat open. No comments, no review, no merge. I understand — Felix has a day job at Anthropic, open source maintainership is volunteer work, and life gets busy. I’m not bitter about it. But I had plans for 2026.
I’m a sub-3 marathon runner coming off an inconsistent 2024. I wanted to build my base back, train smart, and maybe chase some PRs. I needed this tool to work now, not whenever someone got around to reviewing my code.
So I did what any impatient engineer would do: I forked it.
Why Fork Instead of Wait?
The schema validation PR was just the start. As I used Claude Coach more, I kept hitting walls:
- JSON generation was fragile — Claude would produce plans that looked right but broke the renderer
- No validation loop — The AI couldn’t detect or fix its own mistakes
- Tightly coupled to Claude — The skill assumed Claude as the only consumer
- Verbose output — Full workout plans as deeply nested JSON meant high token costs and entropy
I realized I didn’t just want to patch the existing system. I wanted to rebuild the core abstraction.
Endurance Coach: A Different Architecture
Over the past two weeks, I’ve been heads-down rewriting. The result is Endurance Coach — a project that acknowledges its lineage but doesn’t share the original architecture.
What Changed
Contract-first design. The system now exposes explicit, machine-consumable schemas. AI agents validate outputs and receive structured error feedback before proceeding. No more “render and pray.”
Template-based composition. Instead of generating massive JSON objects from scratch, the AI selects from a predefined library of workout building blocks. Plans are authored as concise YAML compositions. This turns unconstrained generation into constrained composition — dramatically reducing failures.
Agent-agnostic. It’s no longer “Claude Coach.” Any AI agent or orchestration framework can consume the tool. I use it with Clawdbot, Claude Code, and Claude.ai interchangeably.
Validation loops. The AI can now validate → receive errors → self-correct → validate again. This is how reliable structured output actually works.
The 1.3.0 Release
Today I shipped version 1.3.0. The changelog tells the story:
- Custom template support — Create your own workout building blocks
activity --lapscommand — Lap-by-lap analysis for interval sessions- Atomic Strava sync — Database transactions for reliable imports
- Intensity parsing 2.0 — Proper handling of power zones, HR zones, and RPE
- Modular CLI — Broke the monolith into clean, testable modules
- Comprehensive test suite — Because I intend to maintain this long-term
58 commits since forking. It’s been an intense two weeks.
Real-World Test: My Monday Track Workout
This morning I used Endurance Coach to analyze my Monday track session — 4x400m Easy-Under-Over repeats at the local track.
The activity --laps command pulled my Strava data and broke down each interval:
- Fastest lap: 3:30/km pace at 428W — strong top-end speed
- Peak HR: 198 bpm on the fast repeats
- Pattern detected: Recovery HR stayed elevated (182+ bpm) between sets
- Late-set fade: Set 4’s “under” pace dropped to 4:13/km vs 3:45-3:55/km earlier
The tool identified exactly what I felt: incomplete recovery between sets. But my Garmin data told a different story — 4.2 Aerobic Training Effect, “Highly Impacting VO2 Max.” The workout achieved its goal.
This is what I want Endurance Coach to be: smart enough to flag patterns, honest about the data, but contextual enough to understand that incomplete recovery was the point for a VO2 max session.
What’s Next: The Roadmap
I’m not building a plan generator. I’m building a coaching system — one that compounds knowledge over time.
Phase 1: Reflection as Data
Post-workout interviews that convert subjective athlete feedback into structured coaching signal. Three distinct outputs:
- Athlete Reflection Summary — What you said
- Coach Notes — What the coach thinks (may disagree with you)
- Coach Confidence — How certain the assessment is
The separation matters. Good coaches push back on athlete perception when the data tells a different story.
Phase 2: Intelligence Compounding
Pattern detection across workouts. The north star metric is Execution Reliability Score — how well planned training aligns with actual execution, and how perception aligns with data.
Flags like “accumulating fatigue detected” or “execution consistency improving” that inform future recommendations.
Phase 3: Strava Write-Back
Coach-authored workout titles and descriptions, published with athlete approval. Turning private judgment into public narrative creates accountability.
“VO2 Max Intervals — Strong Opening, Late Fade” tells a better story than “Morning Run.”
Why I’m Doing This
I’ve been running seriously since 2021. I’ve done two marathons (including a 2:59:56 at Auckland 2023), countless races, and logged over 10,000 km on Strava. I know what it’s like to train with a plan from TrainingPeaks. I know what it’s like to wing it. I know the difference good coaching makes.
Most runners can’t afford a personal coach. But we all have data — HR, pace, power, laps, perceived effort. The gap isn’t data collection; it’s interpretation. That’s what I want Endurance Coach to solve.
This is a free, open-source tool for runners who have at least a little technical know-how. If you can run npx commands and connect to Strava, you can use it.
Try It
npx skills add shiv19/endurance-coach-skill
Then ask your AI assistant:
Analyze my running history using the endurance-coach skill
The README has full setup instructions. Example plans are at shiv19.github.io/endurance-coach-skill.
Acknowledgments
Felix Rieseberg built something valuable with Claude Coach. Without his initial work, I wouldn’t have had a starting point. Open source is about building on each other’s ideas, and I’m grateful for the foundation.
If my original PR ever gets reviewed, I hope it helps the upstream project too. In the meantime, I have a tool that works for me — and hopefully for other runners who want smarter training.
From contributor to maintainer in two weeks. Sometimes the best path forward is your own.
10,505 km logged. Sub-3 marathon. Now building tools to help others train smarter.