Manage the BODY add-on — the single owner of your body identity, your weight + body-composition history, and your GOAL. It drives the `body` MCP: set/read your FREE-TEXT objective (what you're after in your own words — fat loss, muscle gain, recomposition — plus an optional target weight) via set_body_objective / get_body_objective; set/read your identity (sex, date of birth, height, training status, whether you lift) via set_body_profile / get_body_profile; log weigh-ins + body composition (...
Scanned 9/2/2026
Install to Claude Code
npx -y skills add philipyaz/cos --skill body-profile --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Body Profile?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/philipyaz-body-profile)More formats (shields.io, HTML) on the badges page.
---
name: body-profile
description: >
Manage the BODY add-on — the single owner of your body identity, your weight + body-composition
history, and your GOAL. It drives the `body` MCP: set/read your FREE-TEXT objective (what you're
after in your own words — fat loss, muscle gain, recomposition — plus an optional target weight)
via set_body_objective / get_body_objective; set/read your identity (sex, date of birth, height,
training status, whether you lift) via set_body_profile / get_body_profile; log
weigh-ins + body composition (weight, body-fat %, lean mass, waist) via log_weight / list_weights;
and read the deterministic physiology facts (age, BMR, maintenance TDEE, BMI, trend) via
get_body_status. The goal is PROSE, not a pick-list. Use when the user says "set my goal", "I
want to build muscle / lose fat / recomp / maintain", "I'm 178 cm", "log my weight", "I'm 18%
body fat", "my waist is 84 cm", "what's my BMR / maintenance / body status", or otherwise asks
to define their body goal, identity, or weight. Not medical advice.
---
# Body (the shared body space)
This skill owns the **body** add-on — the foundational space that **Nutrition & Chef** and **Fitness**
both read. It holds three things: your **identity** (`db.bodyProfile` — sex, date of birth, height,
training status, whether you lift), your **weight + body-composition series** (`db.weights` — weigh-ins
with optional body-fat % / lean mass / waist), and your **objective** (`db.bodyObjective` — a
**free-text** goal + an optional target weight). It writes **only** through the **`body`** MCP — never
`bash`/`curl`. The **/body** page is the read twin.
> **The goal is FREE TEXT — never a pick-list.** Write the user's objective **in their own words** in
> `goalText` (*"lose some fat but keep my strength"*, *"lean recomposition — drop body fat, hold ~80
> kg"*, *"build muscle, I lift 4×/week"*). The only structured anchor is a **target weight** (optional —
> recomp/maintenance legitimately have none). Do **not** force the goal into "lose / gain / maintain"
> categories; capture what they said.
> **This skill owns the goal/identity/weight — NOT the targets.** It does not compute calorie or macro
> targets. Those are **authored by the Nutrition chef** (`nutrition-chef` skill → `save_nutrition_targets`),
> which reads your goal here + the physiology facts (`get_body_status`) + your dietary profile
> (`get_diet_profile`). So: set the goal/identity/weight here; ask the chef *"what's my calorie target?"*
> there. The Fitness coach likewise reads your training status + weight + goal cross-add-on.
> **Gate — usually already on.** Writes are add-on-gated (a disabled add-on 404s, surfaced as "Not
> found."). But **body HARD auto-enables** whenever Nutrition or Fitness is enabled, so it is on in
> practice. If a write 404s with everything else off, enable it at the board's **/addons** catalog.
> **NOT MEDICAL ADVICE.** Body status (BMR, maintenance, BMI, fat-free mass) is an **informational
> estimate**, not medical guidance. Record what the user states; don't prescribe a weight or rate; defer
> medical conditions, pregnancy/breastfeeding, an eating-disorder history, or a user under 18 to a
> clinician or registered dietitian.
---
## STEP 0 — Read the mode switch (always first)
Read `config/auto-sync.json` → `{ "autoSync": <bool> }` (default **ON / auto** if missing). State the
mode once. A single write (one `set_body_objective`, one `log_weight`, one `set_body_profile`) is
**low-stakes — just do it** in either mode. In approval mode, confirm a **bulk/wholesale** change in
chat first. All reads (`get_body_objective`, `get_body_profile`, `get_body_status`, `list_weights`)
need no confirmation.
---
## JOB 1 — The objective (the free-text goal + the target anchor)
`get_body_objective` / `set_body_objective`. The objective is a **singleton** (one per board);
`set_body_objective` **replaces** it (`createdAt` is sticky).
- **`goalText`** — the goal in the user's OWN words (prose). May be empty, but capture what they said.
- **`targetWeightKg`** — the one structured anchor: a number, or omit/`null` when there's no scale
target (recomp / maintenance / "just eat better"). Honor their unit (the body profile's `weightUnit`)
but the field is **kilograms**.
- **`targetDate`** — optional `YYYY-MM-DD` deadline, or `null`.
- **`activity`** *(required)* — the TDEE multiplier: `sedentary | light | moderate | very_active |
extra_active`. Default to **`moderate`** if unknown.
**Read it back** with `get_body_objective`. To tweak it, re-`set` the whole thing (re-state the
unchanged fields). A single objective write is low-stakes — do it directly, then confirm and offer to
ask the chef for daily targets.
> **Example.** *"I want to lose a bit of fat but keep my strength — get to about 78 kg."* (auto): →
> `set_body_objective { goalText: "Lose some fat but keep my strength.", targetWeightKg: 78, activity:
> "moderate" }`. Confirm, then offer: *"want me to set your daily calorie + macro targets?"* (that's the
> `nutrition-chef` skill).
---
## JOB 2 — Identity (the BMR inputs)
`get_body_profile` / `set_body_profile`. A **singleton**; create-or-replace. Required:
- **`sex`** (`male | female`) — the Mifflin-St Jeor sex constant.
- **`dateOfBirth`** (`YYYY-MM-DD`) — store the **DOB**, not an age; age is derived fresh at read time.
- **`heightCm`** — BMR + BMI input.
- **`trainingStatus`** (`novice | intermediate | advanced`) — resistance-training experience (this is
the deduped successor to the old fitness "level"; the coach reads it from here).
- **`resistanceTrains`** (boolean) — does the user lift at all? (gates whether muscle-gain / recomp is
realistic — nutrition is permissive, training is causal).
- **`weightUnit`** (`kg | lb`, optional) — display/entry preference; storage stays kg.
Gather what's missing conversationally before writing. A single profile write is low-stakes.
> **Example.** *"I'm a 34-year-old man, 180 cm, I lift 3×/week, intermediate."* (auto): convert the age
> to a DOB (*"so born around 1992?"* — confirm if it matters) → `set_body_profile { sex: "male",
> dateOfBirth: "1992-01-01", heightCm: 180, trainingStatus: "intermediate", resistanceTrains: true }`.
---
## JOB 3 — Weigh-ins + body composition
`log_weight` (UPSERT BY DAY) / `list_weights` / `delete_weight`. One entry per `date` — re-logging a day
**updates** it.
- **`date`** (`YYYY-MM-DD`, default today). Pass **exactly one** of **`weightKg`** or **`weightLb`**
(pounds → kg server-side). Honor the user's unit.
- Optional body composition: **`bodyFatPct`** (3–60), **`leanMassKg`** (from a DXA / smart scale),
**`waistCm`** (the scale-independent recomp signal). Log these when the user gives them — they power
the chef's FFM-anchored protein + recomp tracking.
- Optional **`note`**. A single weigh-in is low-stakes — log it, then report the new trend from
`get_body_status`.
`list_weights(from?, to?)` renders the series (newest last) with the trend.
> **Example.** *"I weighed 79.4 this morning, 18% body fat, waist 84."* (auto): → `log_weight { date:
> "2026-06-22", weightKg: 79.4, bodyFatPct: 18, waistCm: 84 }`. Report it + the trend.
---
## JOB 4 — Read the physiology facts (`get_body_status`)
`get_body_status` returns the deterministic **FACTS** — derived **age**, current + EWMA-trend weight,
**BMR** (Mifflin-St Jeor), estimated + measured **TDEE** (and which basis is in use), **BMI**, **fat-free
mass**, latest **waist**. It is **NOT** a recommendation — there is no calorie/macro target here. Use it
to answer *"what's my maintenance / BMR / BMI / body status?"*, and remind the user that the daily
**targets** come from the **`nutrition-chef`** skill (which reads these facts + the goal + the dietary
profile and authors the numbers). Carry the not-medical-advice framing.
---
## Conventions (guardrails recap)
- **`body` MCP only, via the tools.** Never `bash`/`curl`. The **/body** page is the read twin.
- **The goal is FREE TEXT** (`goalText`) + an optional target weight — never a pick-list. Capture the
user's own words.
- **Singletons, create-or-REPLACE** (objective + profile) — read first, re-state the kept fields, write
the merged whole. Weigh-ins **upsert by day**.
- **This skill sets the goal/identity/weight; it does NOT compute targets.** The daily calorie/macro
targets are authored by **`nutrition-chef`** (`save_nutrition_targets`), reading your goal +
`get_body_status` + `get_diet_profile`. Hand off there for *"what should I eat?"*.
- **Gate:** writes are add-on-gated, but body **hard auto-enables** under Nutrition/Fitness, so it is
usually on. A lone 404 → enable it at **/addons**.
- **NOT MEDICAL ADVICE.** Record what's stated; defer medical conditions, pregnancy/breastfeeding,
eating-disorder history, or an under-18 user to a clinician/dietitian.
- **Report** what you wrote (the goal/profile fields, the `WEIGHT-id` + trend) and offer the natural next
step (ask the chef for targets; ask the coach for a plan).
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!