Coach AI¶
Your coach, wherever your agent lives.
Coach AI is not an app you run — it's a portable coaching agent definition that installs into agent
harnesses you already use (Claude Code and
Codex CLI). A small coach CLI configures a coach personality, a set of
skills (SKILL.md files), and live MCP connections to your fitness data. The harness's own reasoning,
memory, and scheduling (/loop, /schedule) do the rest.
How it works¶
There is no long-running "Coach AI process". At runtime there is just Claude Code or Codex CLI, configured with:
- A personality — coaching tone & philosophy, written into
CLAUDE.md/AGENTS.md. - Skills — step-by-step
SKILL.mdprocedures for readiness checks, workout generation, training evaluation, plan adjustments, goal research, and personality setup. - MCP servers — live connections to your fitness data (Garmin, Strava, Google/Outlook Calendar).
- A local
data/directory — goals, research notes, a thin daily plan, readiness logs, and the rendered coach personality. Nothing duplicates your workout history — your metrics source / calendar is the system of record.
flowchart TD
A["Choose a path<br/><b>garmin</b> — or —<br/><b>strava</b> + google/outlook calendar"] --> B["coach CLI<br/>setup_source · install"]
B --> C["Claude Code<br/>CLAUDE.md · .mcp.json · .claude/skills/"]
B --> D["Codex CLI<br/>AGENTS.md · ~/.codex/config.toml · skills.config"]
C --> E["Personality · capability-gated skills · MCP servers"]
D --> E
E <--> F["Metrics source<br/>(Garmin / Strava)"]
E <--> G["Workout-calendar source<br/>(Garmin / Google / Outlook)"]
E <--> H["Local data/<br/>goals · plan · readiness logs"]
Core principle: intelligence lives in the agent, not in Python
The Python in this repo only fetches, normalizes, and persists data (coach/analysis/assemble.py,
coach/storage/store.py) — it never computes a fitness score or a "should I train today" verdict. That
judgment is the agent's, every time, informed by your goals and the normalized data. See
Architecture & principles for the full reasoning.
Supported paths & capabilities¶
Coach AI ships two functional paths. A path = one metrics source + one workout-calendar source (Garmin covers both). The installer resolves the union of your configured sources' capabilities and uses it to gate and tailor every skill — nothing is faked when a capability is missing.
| Source | Status | Role(s) | Capabilities |
|---|---|---|---|
garmin |
functional | metrics + workout_calendar | readiness, hrv, sleep, body_battery, stress, training_load, vo2max, training_effect, structured_workouts |
strava |
functional | metrics (read-only) | activity_streams, prs, training_load |
google_calendar |
functional | workout_calendar | free_text_workouts |
outlook_calendar |
functional | workout_calendar | free_text_workouts |
apple_health / whoop |
scaffold | metrics | future — no MCP yet |
The two paths are not equal, and the coach says so up front:
- Garmin — full readiness/HRV/sleep/body-battery/training-load data, plus structured workouts pushed to the Garmin calendar and rescheduled in place.
- Strava + Google/Outlook Calendar — Strava supplies activity streams and PRs; the calendar is the workout
system-of-record, with each session written as a free-text event (
description/body). No readiness/HRV/ sleep/body-battery — those steps are skipped, not faked.
See Capabilities & paths for the full capability matrix.
Where to go next¶
-
Installation
Authenticate a source, run
coach setup, install into your harness, and set up the daily loop. -
Architecture & principles
The five design principles, the high-level architecture, and the harness installer contract.
-
Skills catalog
What each skill does, when it runs, and how it behaves on each path.
-
Daily workflow
Onboarding, the daily loop, and annotated example conversations.