agentsclimarketplace

Nutrition setup

Skill kaustin923/agent-fitness-coach/.claude/skills/nutrition-setup

Give this repo to Claude and it becomes your training coach: real periodized plans, Strava + Apple Health data, progress tracking and grading — files are the database, skills are the features, the agent is the app.

Install
npx -y skills add kaustin923/agent-fitness-coach --skill nutrition-setup

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Compute and save daily macro targets (calories, protein, carbs, fat) to athlete/macros.md through a short goal-and-rate interview plus deterministic math. Use when the user asks to set up or recalculate their macros, when their goal changes, after a weight shift of 2 kg or more, or when another skill needs targets that don't exist yet.

SKILL.md

10.3 KB, as published. Nobody here has run it

Nutrition setup

You are setting the athlete's daily macro targets. The interview is conversational and short; the math is deterministic and yours to run in python — never in your head. The app this is distilled from let a model chat about macros but recomputed every number server-side before saving; you are both halves now, so behave like the server: formulas from reference/formulas.md, executed as code, presented as numbers, saved only on explicit confirmation.

When to run

  • The user asks to set up, calculate, or recalculate their macros.
  • athlete/macros.md doesn't exist and another skill (food-log, daily-checkin) needs targets.
  • food-log recorded a weigh-in that moved 2 kg or more against the previous entry and the athlete accepted the recalc offer.
  • The athlete's goal changed, or weekly-review flagged a sustained mismatch between the weight trend and the target rate.

Distinguish the two flows by whether athlete/macros.md already exists: first-time setup starts from the goal question; an update starts by acknowledging the current targets and asking what prompted the change.

Inputs

  • athlete/profile.md — sex, birth year, height, weight, units, goal, activity level. Each input can be a stated fact or a recorded entry from the profile's assumptions: list (the onboarding skill defines the format) — assumptions are fully computable; they just get the one-line caveat in Phase 5. If a field is neither, offer to fill it in one question or to proceed on a sensible assumption written to the profile first — the athlete picks; nobody gets sent back to onboarding. The one exception is birth year: age can't be assumed (18+ is a hard line — reference/safety.md ## The hard lines), so ask for it. Never compute from a silent placeholder — every default that touches a formula is recorded in the profile as an assumption before the math runs, never a bare zero.
  • athlete/macros.md — existing targets, if any (selects the update flow, and becomes the History entry).
  • athlete/health/daily.csv — wearable energy data, if healthkit-import has run.
  • athlete/weight-log.csv — the latest weigh-in beats a stale profile weight; if they disagree, use the most recent weigh-in and update the profile.
  • reference/formulas.md — every formula, constant, and guardrail. This skill cites; that file decides.
  • reference/safety.md — hard floors and destructive-action rules.

Procedure

  1. Date ritual. Compute today with date +%F (the effective date on saved targets is the athlete's local calendar day) and build the weekday↔date table per the COACH.md ritual.

  2. Phase 1 — goal. First-time: ask their main goal, offering exactly: Lose fat / Build muscle / Maintain weight / Endurance training. Update flow: summarize current targets in one line and ask what prompted the update, then whether the goal has changed. Classify the answer tolerantly — lose/cut/lean/deficit → cut; gain/build/bulk/muscle → bulk; endurance/race/cardio → endurance; otherwise maintain — never exact-match a label, and carry the confirmed goal forward explicitly rather than re-inferring it later. Goal change first: if the confirmed goal differs from athlete/profile.md, update the profile before any math. Never recalc-then-discover-the-goal-was-wrong.

  3. Phase 2 — rate. Only for weight-change goals:

    • Cut: offer 0.5 lb/wk ("Recommended") / 1.0 / 1.5 / 2.0 lb/wk ("Aggressive"); for metric athletes offer 0.25 / 0.5 / 0.75 / 1.0 kg/wk. Default 1.0 lb/wk if they defer.
    • Bulk: lean bulk (+200 kcal/day, slower with less fat gain — the default) or standard (+400 kcal/day, faster).
    • Maintain: no delta; skip this phase.
    • Endurance/race: no rate question — a flat +200 kcal over maintenance funds the training; frame it as fueling, not surplus chasing.
    • A rate beyond the menu (or beyond the guardrail caps in reference/formulas.md): advise once, then build what they chose. Give one concise, specific risk note — what that pace usually costs (muscle loss, flat training, adherence collapse) — and on a clear confirmation compute at their chosen rate, recording the choice as a rationale bullet in athlete/macros.md and an athlete choices note in athlete/profile.md. Never re-warn on later turns, never quietly steer the numbers back toward the default. The calorie floors are the exception — targets never drop below them (reference/safety.md ## The hard lines), so a very aggressive rate may simply land on the floor; say so plainly.
  4. Phase 3 — profile confirm. Read their stats back in their declared units — height, weight, age, sex, activity source (wearable data or self-reported level) — and ask if it looks right. Anything that changed gets written to athlete/profile.md before you compute. This is the moment weight drift gets caught, so don't skip it in the update flow.

  5. Phase 4 — compute, in python. Translate reference/formulas.md into a throwaway script and run it. No mental arithmetic anywhere in this phase — the original system deterministically overwrote every model-computed number for a reason. The pipeline, with each step's numbers defined in the cited section:

    1. BMR — ## BMR (Mifflin-St Jeor) (sex "other" averages the male and female results).
    2. Maintenance — ## Maintenance calories (TDEE): if athlete/health/daily.csv has active-energy values for at least 7 of the last 28 days, maintenance = BMR + mean daily active kcal over the available days; otherwise BMR × the athlete's multiplier from ## Activity multipliers. Record which path you used — you must disclose it.
    3. Delta — ## Goal deltas and guardrails: convert the chosen rate to kcal/day (7700 kcal per kg of body weight, ≈500 kcal/day per lb/wk). The deficit/surplus caps defined there apply by default; a rate beyond them that the athlete confirmed after the Phase-2 risk note is applied as chosen, not clamped. The calorie floors always apply — hard lines, not defaults. Record the requested vs applied delta and the reason for any difference (cap, floor, or athlete's confirmed choice).
    4. Split — ## Macro split: protein by goal-specific g/kg, fat with its floor, carbs from the remaining calories, the negative-carb cascade if calories run out, the final clamps — and recompute final calories from the macros (4/4/9) so the saved numbers are internally consistent. Sanity-check the output against the hard floors in reference/safety.md (## The hard lines) before presenting; if the floors bind, say so instead of shaving them.
  6. Phase 5 — present, then confirm-save. Show the numbers only, as a four-bullet card:

    • Calories: 2,191
    • Protein: 142 g
    • Carbs: 264 g
    • Fat: 63 g

    Follow with 3–5 short transparency bullets: which maintenance method was used (and how many days of wearable data); how the rate translated to kcal/day, explicitly called an approximation; whether a floor bound or a cap applied and why — or that an athlete-chosen rate beyond the default caps was honored (state it once, neutrally: it's their call); and, if any input came from the profile's assumptions: list, the one-line caveat ("built on an assumed height of 5'9" — correct me anytime and I'll recompute"). Then ask before saving — "Want me to save these?" — and write athlete/macros.md only on an explicit affirmative ("save them", "looks good"). The file gets: current targets, method + rationale bullets, effective date (today, athlete-local), and the previous targets moved into a History section with their date range. Confirm from what the file now says.

Rules

  • Deterministic math beats model math. Every number that reaches the athlete or a file came out of a python run this turn. If you catch yourself typing a computed number from memory, stop and run the script.
  • Two-phase commit. Calculate previews; saving requires the athlete's explicit confirmation. Never save on the same turn you first present, unless they pre-confirmed in the same message ("calculate and save it").
  • Goal change first, per reference/safety.md ## Confirm-before-destructive: replacing macro targets is a confirm-first action, and an implied goal change is written to the profile before the recalc, both confirmed together in one message.
  • Disclose the method. "Based on your watch data (19 of the last 28 days)" or "based on your activity level, since I don't have wearable data yet" — transparency about estimation is a hard requirement, not a nicety. Assumed profile fields get the same treatment: one caveat line, then no nagging.
  • Frame TDEE as an estimate. Maintenance is a directional signal, never a precise truth. Always mention targets can be adjusted later.
  • Floors are floors; caps are advice. Never present targets below the hard floors, and never eliminate a macro group — both are hard lines (reference/safety.md ## The hard lines), held warmly but held; a custom target below a floor gets the floor offered as the most aggressive option there is. The deficit/surplus caps are strong defaults, not walls: when the athlete wants more aggressive numbers, give the one Phase-2 risk note, then on a clear confirmation build their numbers, record the choice, and don't bring it up again.
  • Keep replies short. Two to three sentences per turn during the interview (the COACH.md ladder); the numbers card and its bullets are the only long message.
  • Units. Interview and present in the athlete's declared units; the stored weight math runs in kg.

Output

After saving, confirm in one line with the effective date ("Saved — 2,191 kcal, 142P/264C/63F, effective 2026-07-06"). Then suggest 2–3 natural next actions (skip if you just asked a question):

  • "Tell me what you eat today and I'll log it against these targets" (food-log).
  • If weigh-in prompts are off and the goal is cut or bulk: "Want a weekly weigh-in nudge? Trend data keeps these targets calibrated."
  • If they train: "Your weekly review will show macro adherence alongside training" (weekly-review), or offer the dashboard for a visual.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.