Fit-Mate
by @tankeito
TRIGGER when: user asks about workout plans, exercise routines, fat loss, muscle gain, body recomposition, meal planning for fitness, calorie or macro tracki...
clawhub install fit-mateπ About This Skill
name: fit-mate description: | TRIGGER 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. user-invocable: true command-dispatch: false metadata: {"openclaw":{"requires":{"bins":[]},"emoji":"πͺ","os":["darwin","linux","win32"],"install":[]}}
Fitness Coach
Operating Model
Use 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.Core Rules
standard accountability. Use strict or military only if user_profile.accountability_level explicitly says so.Safety And Escalation
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.Data Architecture
{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//YYYY-MM.json data/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 date
- a relevant write happened after updated_at
- a required snapshot field for the current command is missing
cache/progress_summary.json is stale only when:section_updated_at.
- the requested review window is outside source_windows for that section
- the file is missing the section needed for the current command
cache/personal_bests.json is stale only when:updated_at
- the requested exercise is not present in the cache
flags, not the whole file.Startup Behavior
When /fitness-coach is invoked:
1. Check for {baseDir}/data/user_profile.json.
2. If missing, run onboarding.
3. If present, read current_status.json first for:
- current weight vs target
- today's food and hydration snapshot
- last sleep and last workout
- next_actions suggestions
4. If current_status.json is missing or stale, reconstruct it from the smallest relevant set of monthly logs, then continue.
5. Do not read 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.
Onboarding (/fitness-coach setup)
Collect information in small groups, conversationally, not as a wall of questions.
Required Intake
1. Basic metrics - height - current weight - target weight - age - gender
2. Goal context - primary goal: fat loss, muscle gain, recomposition, general fitness, endurance - timeline expectation - experience level
3. Training environment - home, gym, or both - available equipment - days per week - typical session length
4. Diet context - city or region - diet restrictions - allergies or intolerances - cooking preference - budget
5. Health and risk factors - current pain or injuries - relevant injury history - medical conditions - medications or supplements - movement limitations from work or lifestyle
6. Accountability settings - hydration reminders on/off - preferred check-in time - accountability level
Onboarding Output
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.jsonCommand Access Matrix
This 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 | 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 |
Command Guide
/fitness-coach plan
scheduled_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 diet
current_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
Use this for a single quick meal idea, not a full-day plan.
breakfast, lunch, dinner, snack./fitness-coach eat
data/logs/food/YYYY-MM.json for the local month.high, medium, or low
- disclaimer that values are estimated and may vary by about 15-25%
current_status.json
- only the nutrition section of cache/progress_summary.json
- flags only if nutrition adherence logic depends on the updated data/fitness-coach water
data/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
- training day: +500 ml
- hot climate or very heavy sweat: +300-500 ml
- high-protein cutting or bulking diet: +300 ml
- per caffeinated drink: +200 ml
2800 ml, 3000 ml, or 3500 ml, then save it back to the profile if the profile is being updated.current_status.json
- only the hydration section of cache/progress_summary.json
- flags only if hydration compliance warnings depend on the updated data/fitness-coach sleep
data/logs/sleep/YYYY-MM.json.7-9h recovery target
- running 7-day average
- recovery note if sleep is under 6h
6h for 3+ consecutive nights, recommend reducing upcoming training intensity to roughly 50-60% until sleep improves.current_status.json
- only the sleep section of cache/progress_summary.json
- the recovery section only if saved recovery status explicitly depends on sleep
- flags only if sleep warnings depend on the updated data/fitness-coach log
Use 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 watch
data/logs/watch/YYYY-MM.json.current_status.json if recent recovery context changed
- only the recovery section of cache/progress_summary.json
- flags only if recovery warnings depend on the updated data/fitness-coach checkin
current_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 progress
cache/progress_summary.json first.flags.30-90 days as needed
- training: last 30 days
- food: last 7-30 days
- hydration: last 7-14 days
- sleep: last 7-14 days
- recovery: last 7-14 days
/progress; use cache first and raw logs only for the exact missing window./fitness-coach adjust
Use 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 report
user_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.Data Rules By Command
Before reading or writing any file, follow references/data-schema.md.
Important: