Use ONLY when the user is a COACH and asks to review their athletes — phrases like "review my athletes", "how are my athletes doing", "weekly check-in on my squad", "any athletes flagged". Pulls each athlete's profile, PMC and recent sessions via Koval MCP and renders a coach dashboard with alerts for overreach or inactivity.
Role gate: Only run this skill if getMyProfile().role == "COACH". Otherwise reply: "This skill is for coaches — your account is set as ATHLETE."
Step 0 — Load coach profile. Read coach-profile.md if present. Pull the coach's configured overreachTsb (default -25), detrainedTsb (default +25) and missedSessionAlertN (default 7 days) — use these instead of the hardcoded values below. Also honour the configured language and voice when writing the action items. If missing, suggest running koval-coach-onboarding once and proceed with defaults.
getMyProfile — confirm the user is a COACH. Abort otherwise.listAthletes to get the coach's athlete roster.getAthleteProfile(athleteId) → name, FTP, current CTL/ATL/TSBgetAthletePmc(athleteId, from=today-14d, to=today) → for last-week TSS sum and form trendgetAthleteRecentSessions(athleteId, limit=3) → most recent 3 sessionscoach-profile.md, defaults shown):
overreachTsb (default -25)missedSessionAlertN days (default 7)detrainedTsb (default +25)## Squad review — week of <monday>
**<N> athletes** · <X red> · <Y yellow> · <Z green>
| Athlete | Form (TSB) | 7d TSS | Last session | Flag |
|---|---|---|---|---|
| Alice | -12 | 420 | Mon · VO2 4×4 | 🟢 |
| Bob | -32 | 580 | Sun · 4h endurance | 🔴 Overreached |
| Carla | +8 | 90 | (8d ago) | 🟡 Inactive |
### Action items
- **Bob** — TSB -32, prescribe 2-3 easy days
- **Carla** — no activity in 8 days, send a check-in message
Keep prose minimal — the table + action items are the value.
—, flag as 🟡 New athlete (no data).getAthletePowerCurve added in.