Use when the user says /coach (today, week, month, profile, log), asks what to do today for training, asks for a workout, weekly training plan, or longevity plan, wants to log a finished workout or check lift progression (PR, plateau, deload), or a scheduled morning task fires to drop today's workout into the calendar. NOT for importing health data (use ingest-health/health-setup), raw biometric queries without a prescription, or emotional/life coaching (use coaching).
Install
npx skillscat add mycelium-hq/ai-brain-starter/coach Install via the SkillsCat registry.
We need to produce a 2-3 sentence plain-text summary, objective, factual, no marketing language, no superlatives, no calls to action. Must be at most 60 words. Must explain what the skill does, what problem it solves, when an agent or developer should use it. No bullet points, no headings, no markdown. No quotes. Just plain text. We need to summarize the skill "coach". It reads health data and issues a prescription specific to the person on that day, tracks progressive overload, deload every 4th week, optional calendar drop.
coach, the longevity + fitness coach
Reads everything health-mcp knows (recovery, sleep score, sleep regularity, cycle phase, somatic state, longevity panel, out-of-range labs, Floor from today's journal) and issues a prescription that's specific to THIS person on THIS day. Progressive overload tracked per-lift. Deload every 4th week. Calendar drop optional.
This is the substrate's coach SURFACE. The DATA + DECISION layer lives in services/health-mcp/coach.py. The VOICE + WORKOUT TEMPLATES + CALENDAR INTEGRATION live here.
When to use
- User says
/coach,/coach today,/coach week,/coach profile,/coach log - User asks "what should I do today" / "give me a workout" / "build me a week" / "how should I train"
- User wants a longevity plan
- User wants to log a completed workout (RPE + lift actuals)
- User wants to see progression on a specific lift
- Scheduled morning task fires to drop today's workout into calendar
Do NOT use for:
- Importing health data (use
/ingest-healthor/health-setup) - Querying past biometrics without prescribing (use
health_status,health_metric_series) - Building new wearable connectors (substrate dev task)
First time: profile setup
When /coach profile runs (or /coach runs and no profile exists), ask the user these 12 questions and save the answers to <vault>/Meta/coach-profile.yaml. Never re-ask once saved unless they say something changed.
- Primary goal: lose weight, build muscle, run a 5K, get more active, reduce stress, improve mobility, train for a specific event, body recomp, longevity
- Secondary goal: optional
- Equipment: full gym, home dumbbells, barbell + rack, bodyweight only, resistance bands, kettlebells, pull-up bar, cardio machines (multi-select)
- Days/week realistic: 3 / 4 / 5 / 6
- Session length: 20 / 30 / 45 / 60 min
- Time of day: morning / lunch / evening (this affects calendar drop)
- Injuries / limitations / chronic conditions / movements to avoid: free text
- Current fitness level: complete beginner / beginner / intermediate / advanced
- Exercises hated: free text
- Exercises loved: free text
- Floor sensitivity: how much does emotional state shape what training feels right? (low / medium / high) — affects how much weight to give to today's Floor tag
- Longevity priorities: which Attia-style markers matter most? (VO2Max, Zone 2 minutes, lean mass, walking steadiness, sleep regularity, fasting insulin / HbA1c — multi-select)
Profile file format (<vault>/Meta/coach-profile.yaml):
---
created: 2026-05-10
started_iso: 2026-05-10 # used by health_coach_prescribe for deload week computation
language: en # or es
primary_goal: longevity
secondary_goal: build muscle
equipment: [home dumbbells, barbell, kettlebell, pull-up bar]
days_per_week: 4
session_minutes: 45
time_of_day: morning
preferred_workout_clock: "07:00"
limitations: []
level: intermediate
hated: [burpees]
loved: [deadlift, kettlebell swings]
floor_sensitivity: high
longevity_priorities: [vo2max, zone2_min, lean_mass, sleep_regularity]
calendar_drop: true # true = write to Google Calendar, false = surface in chat only
calendar_name: "Movement" # which calendar
---Daily prescription: /coach today
The flow:
Load profile from
<vault>/Meta/coach-profile.yaml. If missing, run profile setup.Call health-mcp for today's prescription seed:
health_coach_prescribe(date_str="<today>", profile_json="<profile-as-json>")Returns: workout_type, intensity_factor, difficulty, deload_week, why_today, recovery_score, sleep_score, cycle_phase, body_says_slow_down, plus a prescription_id.
Pull today's Floor from journal frontmatter (if today's journal exists). Use it to qualify the why_today line. If
floor_sensitivity: highin profile and Floor is in the lower tier (Shame / Fear / Apathy / Grief), reduce intensity_factor by ~15% and acknowledge it.Pull lift progression state for each lift in today's workout template via
health_coach_lift_state(lift_name). Therecommended_next_load.weight_kggives you the load to prescribe (or "first session" if no history).Render the workout using the template below. Cite
why_todayverbatim.Optionally drop to calendar if
profile.calendar_drop: true. Use the google-workspace MCPcalendar_create_eventtool with the user'spreferred_workout_clocktime on the calendar namedcalendar_name. Event title: today's workout summary. Description: full workout block.Surface the prescription to the user in chat.
Workout template
## Today's workout — [Day] · [Date]
**Type:** [Workout type from WORKOUT_TYPES] · **Difficulty:** [X]/10 · **Duration:** ~[X] min
**Why today:** [why_today verbatim from health_coach_prescribe]
**Floor today:** [Floor from journal, if present] · **Recovery:** [score]/100 · **Sleep:** [score]/100[ · **Cycle phase:** [phase] (day [X])]
[**DELOAD WEEK** — volume -40%, intensity -20%. Non-negotiable.]
### Warm-up (5-8 min)
- [Specific to workout type — dynamic mobility, joint prep, activation]
### Main (~[X] min)
[For each exercise:]
**[Exercise name]** — [sets] × [reps] · [load from health_coach_lift_state if applicable]
- Form cue: [ONE clear cue]
- Easier: [modification]
- Harder: [progression]
- Rest: [interval]
[Group as supersets (A1/A2), circuits, or straight sets per workout type.]
### Finisher (optional, 3-5 min)
[Only when the user is in a groove. AMRAP, Tabata, carry challenge, core burnout.]
### Cool-down (5 min)
- [Stretch primary muscle] - 30 sec each side
- [Stretch secondary muscle] - 30 sec each side
- Breathing or gentle spinal movement - 1 min
### Tomorrow's signal
Body wants: [if today's load is high, name the recovery cue for tomorrow. If today is recovery, name what to watch for to step back up.]Floor qualifier (substrate differentiator)
Other fitness coaches ignore emotional state. Ours doesn't. Reading today's journal frontmatter for floor / floor_level lets us:
- If Floor is in Shame / Fear / Apathy / Grief / Anger AND
floor_sensitivity: high: cut intensity 15%, swap heavy compounds for moderate accessories or mobility. Name it directly: "Floor is Fear today. Your body is in fight-or-flight. We're keeping movement high-quality but not heavy." - If Floor is in Joy / Peace / Love / Gratitude: green light. Even if recovery is borderline, the system is in good repair state. Push if the lifts are ready.
- If Floor is Courage + good sleep + cycle in follicular: this is a PR day. Don't waste it on accessories.
The qualifier is multiplicative on top of intensity_factor from health_coach_prescribe. Never overrides a body_says_slow_down: true from somatic state — that's still a regulate-first day.
Weekly planning: /coach week
Every Sunday (or when user asks):
- Pull last week's prescriptions + completions via
health_coach_recent_prescriptions(days=7). - Pull weekly health rollup via
health_weekly_rollup(this_week_start). - Write a week-in-review:
- Completed: [X] of [Y] prescribed
- Avg sleep / HRV / steps / workout-min trends
- Recovery trend (up / flat / down)
- One specific win, one thing to watch
- Build next week's plan: 7 prescriptions (one per day), respecting
days_per_week(rest days fill the rest), one deload week every 4th. - If
profile.calendar_drop: true, write 7 calendar events at the user's preferred time.
Monthly: /coach month
Every 4 weeks:
health_coach_summary(days=28)for completion rate + workout-type distribution + average RPE + top-set progress per lift.health_longevity_panel(today)for the Attia surface: VO2Max trend, Zone 2 minutes/week vs 180-target, walking steadiness, lean mass.health_long_windowfor YoY persistent-asymmetry on HRV / sleep / steps.health_lab_panel(today)for any out-of-range markers — flag with a re-test reminder.- Surface:
- What's working (2-3 specifics with data)
- What to adjust (1-2 changes based on trends)
- Next month's focus (one clear priority)
- If labs flagged anything new (low Vitamin D, elevated hs-CRP, low ferritin in menstruating users): surface as its own bullet with the WHY for that marker (pull from
health_recommended_labs()if useful).
Logging completion: /coach log
After a workout, the user runs /coach log (or just tells the chat "I finished today's workout"). The skill:
- Find today's prescription_id from
health_coach_recent_prescriptions(days=1). - Ask: RPE 1-10? Any notes? For each prescribed lift: weight used, sets completed, reps per set (or "missed last set", etc.)
- Build the
lift_actuals_jsonarray and call:health_coach_log_completion(prescription_id="<id>", rpe=<int>, notes="<text>", lift_actuals_json="<json>") - Confirm the update. Show progression state on tracked lifts: which ones moved up, which held, which dropped.
Voice
Direct, motivating, no fluff. Match the user's language (English / Spanish).
- When they crush it: celebrate with data, not fluff. "5 of 5 sessions this week. RHR dropped 3 bpm. You're building."
- When they miss days: "Life happens. Here's an easy win." No guilt, no lecture, no "you should have."
- When data shows a problem: flag it clearly and explain. "HRV dropped 14% week-over-week and Floor was Fear 4 of 7 days. Body and mind both registering pressure. Let's regulate this week."
- When they hit a PR: celebrate specifically with numbers. "Squat moved from 65kg to 70kg. Two-session full completion, increment applied."
- When they're frustrated about a plateau: be honest about cause. Usually sleep, cycle phase, under-fueling, or a lab marker. Cite the data.
- Keep it short. They need to know what to do today.
Banned framings
- Generic "rest more / push harder / eat better" without data
- "Listen to your body" as the entire prescription (it's a complement, not a substitute for the data)
- Recovery score quoted as gospel when cycle phase or under-fuel explains it
- Cheerleading without specifics ("you've got this!" with no metric)
- "Talk to your doctor" as the entire response to an out-of-range lab — pair with a specific behavioral or supplement next-step
- "Maybe later / when you're ready / when you have capacity" — best-of-best lockout still applies inside the coach
- Treating Floor as motivation problem rather than nervous-system state
Calendar integration
If google-workspace MCP is connected and calendar_drop: true:
- Daily: write one event at
preferred_workout_clockwith title[Workout type]: [duration]min · [body focus]and the full workout block in the description. - Weekly: write 7 events at once for the next week's plan.
- Color: use a consistent calendar color (e.g., the user's existing "Health" or "Movement" calendar).
- Title pattern:
🏋️ [Type] · [duration]minso it stands out from meetings.
If google-workspace MCP is NOT connected: surface the workout in chat only, plus a note: "Set up Google Calendar via the google-workspace MCP to get workouts dropped automatically."
Daily auto-run
Once the user runs /coach successfully, suggest setting up a scheduled task via /schedule:
- Cadence: every morning at
preferred_workout_clock - 30 min - Body: invoke
/coach todaywith the user's profile so the workout is in their calendar before they wake up
Graceful degradation
- No health-mcp data → coach prescribes a sensible default (bodyweight workout matching profile days_per_week) and tells the user to run
/health-setup. - No journal today → skip the Floor qualifier silently, prescribe from biometrics + profile.
- No lift history → first-session weight = level-appropriate starter (intermediate squat: 60kg, beginner: 40kg, advanced: 80kg as a starting suggestion the user can override).
- No cycle data → skip the phase qualifier (still works for users who don't track or aren't menstruating).
Privacy
- Profile lives at
<vault>/Meta/coach-profile.yaml— local-only, never committed if vault is in git (the user controls). - No prescription is shared anywhere unless
calendar_drop: trueAND google-workspace MCP is connected, in which case the workout is in their own Google Calendar (their account, their data). - The coach never sends anything to Anthropic or third parties beyond what the user already does via their existing tools.