Install
openclaw skills install fit-mateTRIGGER when: user asks about workout plans, exercise routines, fat loss, muscle gain, body recomposition, meal planning for fitness, calorie or macro tracking, home or gym training, hydration or sleep tracking, smartwatch/workout data analysis, or weekly fitness progress reviews. DO NOT TRIGGER when: user asks for medical diagnosis, physical therapy prescriptions, clinical disease nutrition, urgent symptom triage, eating disorder treatment, pregnancy/postpartum programming, minor-specific coaching, mental health counseling, or sports competition prep. FIRST ASK: if no profile exists, collect height, weight, target weight, age, goal, training location, days per week, city, diet restrictions, and injuries/medical conditions before generating a plan.
openclaw skills install fit-mateUse this skill as a practical coaching system, not a lifestyle lecture. Keep the main interaction focused on:
Load references only when needed:
data/. This file is the single source of truth for runtime storage.standard accountability. Use strict or military only if user_profile.accountability_level explicitly says so.Stop normal coaching flow and clearly recommend urgent medical care if the user reports any of:
Do not create detailed programming beyond general low-risk guidance when the user is dealing with:
Exercise pain rule:
Nutrition safety:
1200 kcal/day for women or under 1500 kcal/day for men.20% of TDEE and no more than 750 kcal/day.10% of TDEE.{baseDir} means the absolute path of the skill directory containing SKILL.md.{baseDir}/data/.{baseDir} cannot be determined, ask the user to confirm the storage directory before writing files.YYYY-MM-DD.Hot files:
user_profile.jsoncurrent_plan.jsoncurrent_status.jsoncache/progress_summary.jsoncache/personal_bests.jsonCold files:
data/logs/<domain>/YYYY-MM.jsondata/weekly_reports/Performance rules:
12 full months as the active raw-log window. Older monthly files are cold archive by default.1 adjacent month per domain./progress may read at most the 3 most recent month files per domain by default./report may read at most the month file(s) overlapping the requested week, usually 1-2 files per domain./progress should read cache/progress_summary.json first and only regenerate it from recent windows if missing or stale./log should use cache/personal_bests.json for PR checks instead of rescanning all workout history./report should read only the month file(s) overlapping the requested week, not all archived logs.user_profile.json, current_plan.json, current_status.json, and files in data/cache/ may be overwritten in place. Monthly log files are append-or-update stores.Staleness rules:
current_status.json is stale only when:
today_date is not the current local dateupdated_atcache/progress_summary.json is stale only when:
section_updated_at.<section>source_windows for that sectioncache/personal_bests.json is stale only when:
updated_atflags, not the whole file.When /fitness-coach is invoked:
{baseDir}/data/user_profile.json.current_status.json first for:
next_actions suggestionscurrent_status.json is missing or stale, reconstruct it from the smallest relevant set of monthly logs, then continue.weekly_reports/ during startup.If the user asks for a command that depends on profile data and the profile is missing or incomplete, ask only for the missing fields required for that command.
/fitness-coach setup)Collect information in small groups, conversationally, not as a wall of questions.
Basic metrics
Goal context
Training environment
Diet context
Health and risk factors
Accountability settings
Calculate and explain:
Persist the profile using the exact schema in references/data-schema.md, then initialize:
current_status.jsoncache/progress_summary.jsoncache/personal_bests.jsonThis table is the default read budget. If a row says no raw logs by default, do not open extra files "just in case."
| Command | Read first | Allowed raw-log scope | Writes |
|---|---|---|---|
/fitness-coach | user_profile.json, current_status.json | only the smallest current or adjacent month slice needed if status is missing or stale | none |
/fitness-coach setup | none beyond onboarding inputs | none | user_profile.json, current_status.json, initialized cache files |
/fitness-coach plan | user_profile.json, current_plan.json, references/training.md | none by default | current_plan.json, current_status.json |
/fitness-coach diet | user_profile.json; current_status.json only if tailoring today's intake; references/nutrition-regions.md when relevant | none by default | none |
/fitness-coach meal <type> | user_profile.json; references/nutrition-regions.md when relevant | none by default | none |
/fitness-coach eat | user_profile.json, current_status.json, current food month file | 1 food month by default | current food month file, current_status.json, nutrition section of cache/progress_summary.json |
/fitness-coach water | user_profile.json, current_status.json, current hydration month file | 1 hydration month by default | current hydration month file, current_status.json, hydration section of cache/progress_summary.json |
/fitness-coach sleep | user_profile.json, current_status.json, current sleep month file | current plus previous sleep month only if the streak crosses a month boundary | current sleep month file, current_status.json, sleep section of cache/progress_summary.json |
/fitness-coach log | current_plan.json, current_status.json, cache/personal_bests.json, current workout and or weight month file | workout fallback: at most 1 recent workout month if PR cache is missing or stale | current workout and or weight month file, current_status.json, affected progress-summary sections, cache/personal_bests.json when needed |
/fitness-coach watch | current_plan.json, current_status.json, references/watch-analysis.md, current watch month file | 1 watch month by default | current watch month file, current_status.json if recovery changed, recovery section of cache/progress_summary.json |
/fitness-coach checkin | user_profile.json, current_plan.json, current_status.json | only the smallest current or adjacent month slice needed if status is missing or stale | none |
/fitness-coach progress | cache/progress_summary.json | at most 3 recent month files per domain by default; never read weekly_reports/ | only stale sections of cache/progress_summary.json if regeneration is needed |
/fitness-coach adjust | user_profile.json, current_plan.json, current_status.json, cache/progress_summary.json | exact recent windows for the affected domains only; at most 3 recent month files per domain by default | current_plan.json, current adjustments month file, current_status.json, affected progress-summary sections |
/fitness-coach report | user_profile.json, current_plan.json, references/report-template.md plus exact report-week logs | only the month file(s) overlapping the requested week, usually 1-2 files per domain | data/weekly_reports/week_YYYY-MM-DD.pdf |
/fitness-coach planscheduled_weekday for each training day in current_plan.json so /fitness-coach checkin can map the plan to real calendar days.current_plan.json.current_status.json so it reflects the active plan and next expected session./fitness-coach dietcurrent_status.json if you need to tailor the rest of today's meals around what the user already ate or drank.mix; otherwise bias toward the chosen cooking mode./fitness-coach meal <type>Use this for a single quick meal idea, not a full-day plan.
breakfast, lunch, dinner, snack./fitness-coach eatdata/logs/food/YYYY-MM.json for the local month.high, medium, or low15-25%current_status.jsonnutrition section of cache/progress_summary.jsonflags only if nutrition adherence logic depends on the updated data/fitness-coach waterdata/logs/hydration/YYYY-MM.json.user_profile.water_target_ml when available.water_target_ml is missing, calculate it before logging:
body weight (kg) x 33 ml+500 ml+300-500 ml+300 ml+200 ml2800 ml, 3000 ml, or 3500 ml, then save it back to the profile if the profile is being updated.current_status.jsonhydration section of cache/progress_summary.jsonflags only if hydration compliance warnings depend on the updated data/fitness-coach sleepdata/logs/sleep/YYYY-MM.json.7-9h recovery target6h6h for 3+ consecutive nights, recommend reducing upcoming training intensity to roughly 50-60% until sleep improves.current_status.jsonsleep section of cache/progress_summary.jsonrecovery section only if saved recovery status explicitly depends on sleepflags only if sleep warnings depend on the updated data/fitness-coach logUse this for workout completion and/or body-weight logging.
data/logs/workout/YYYY-MM.json.data/logs/weight/YYYY-MM.json.PR detection:
cache/personal_bests.json first.is_pr: true for that exercise entry, celebrate it in the response, and update cache/personal_bests.json.After writing, refresh:
current_status.jsontraining section when workout data changedweight section when body-weight data changedflags only if adherence, plateau, or recovery warnings changedcache/personal_bests.json when workout data changed/fitness-coach watchdata/logs/watch/YYYY-MM.json.current_status.json if recent recovery context changedrecovery section of cache/progress_summary.jsonflags only if recovery warnings depend on the updated data/fitness-coach checkincurrent_plan.json, and current_status.json first.current_status.json is missing or stale, rebuild it from the smallest relevant monthly log slice before continuing.current_plan.json.standard as the default.user_profile.checkin_time is morning or evening, treat that as the default check-in style unless the user explicitly asks for the other one.user_profile.checkin_time is both or missing, determine session type from current local time: before 14:00 = morning check-in; 14:00 and after = evening check-in.current_plan.json includes scheduled_weekday, use that mapping first when deciding whether today is a training day or rest day. If it does not, fall back to recent logs plus days_per_week./fitness-coach progresscache/progress_summary.json first.flags.30-90 days as needed30 days7-30 days7-14 days7-14 days7-14 days/progress; use cache first and raw logs only for the exact missing window./fitness-coach adjustUse this when the user asks for changes or when the data clearly supports reassessment.
Common triggers:
3+ weeksActions:
current_plan.jsondata/logs/adjustments/YYYY-MM.jsoncurrent_status.jsonflags/fitness-coach reportuser_profile.json and current_plan.json for target context and next-week focus.Coach Verdict section to match neighboring cards. If that section is longer, let the PDF grow vertically or spill onto a second page.{baseDir}/data/weekly_reports/week_YYYY-MM-DD.pdf.scripts/generate_weekly_report_pdf.py to generate the PDF directly from a compact report-summary payload..pdfgen-venv and install Python PDF dependencies automatically; do not require browser print, office apps, or OS-level PDF tools when this path is available.Before reading or writing any file, follow references/data-schema.md.
Important: