agentsclimarketplace

Weekly review

Skill kaustin923/agent-fitness-coach/.claude/skills/weekly-review

Compute and write the weekly training and nutrition review for the last completed Monday–Sunday week, with grounded numbers, a per-run grade table, the weight trend, and up to three plan-adjustment suggestions. Use when it's Monday, the athlete asks "how did my week go", or a full week of data has just been synced.From its SKILL.md

Install
npx -y skills add kaustin923/agent-fitness-coach --skill weekly-review

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.

SKILL.md

9.1 KB, ~2.1k tokens by cl100k_base, as published. Nobody here has run it

Weekly review

The weekly review is where coaching honesty lives. Its one non-negotiable discipline: compute every number first, then write prose around the frozen numbers. Language models fudge arithmetic and hallucinate weekdays; a review whose narrative disagrees with its own table destroys trust faster than any missed workout.

When to run

  • Monday morning (or the athlete's preferred review day, from athlete/profile.md), covering the last completed Monday–Sunday.
  • On demand, any time the athlete asks how their week went.
  • As a scheduled Monday routine (see guides/07-going-further.md).

Inputs

Files read:

  • athlete/plan.json and athlete/log.json — planned vs actual for the week; fitness block for the 4-week trend.
  • athlete/macros.md and the athlete/food-log/YYYY-MM.md file(s) covering the week.
  • athlete/weight-log.csv — the week plus the prior week for trend.
  • athlete/health/daily.csv and athlete/health/workouts.csv — if present, for energy balance, the weekly activity trend (steps, active kcal), and unplanned training.
  • athlete/profile.md, athlete/goals.md, athlete/state/sent-markers.json.

Template: templates/weekly-review.md — the review file follows its structure exactly.

MCP tools: none directly; run strava-sync first if log.json's fitness.syncedDate predates the reviewed Sunday.

Ask the user: nothing. The review is computed from files. If a skipped session has no recorded reason, you may ask about it after presenting the review, not before.

Procedure

  1. Date ritual and week boundary. Run date +%F, build the weekday↔date table for this week and next with python. Then compute the reviewed week: the last completed Monday–Sunday. Convention (matches the shipped app): when today is Sunday, the reviewed week ends today. In python, with wd = today.isoweekday() (Mon=1 … Sun=7): monday = today - timedelta(days=6) if wd == 7, else monday = today - timedelta(days=wd - 1 + 7); sunday = monday + timedelta(days=6). Print both boundary dates with their weekday names.

  2. Freshen data. If the sync is stale, run strava-sync (and healthkit-import if that's the athlete's source) before computing anything.

  3. Compute the numbers — all of them, in one python pass, before writing a single sentence:

    • Completion: actionable days in the week (exclude Rest and pure recovery placeholders per reference/tracking.md, ## Completion stats), completed count, completion %, and the list of skipped/missed days with any recorded reasons. Full-week denominator, never week-to-date.
    • Mileage: planned miles vs actual miles, using the credit rule — a done day counts its matched activity distance, a done day without a match counts planned distance, an un-done day counts zero (## Completion stats). Report the delta.
    • Per-run grade table: one row per run day — weekday+date, session, planned miles, actual miles, average pace, grade. Use the grades sync already wrote into plan.json actual.grade; if any run is ungraded, grade it now with the blended-expected-pace formula in reference/tracking.md (## Run grading) — never by eyeball.
    • Macro adherence: days within the bands in reference/formulas.md (## Macro adherence bands), servings-scaled totals, counted over logged days only; also days logged and average daily calories/protein across logged days.
    • Energy balance: when health data exists, average net balance vs TDEE and its band (reference/formulas.md, ## Energy balance bands).
    • Weight trend: per reference/formulas.md (## Weight trend math), this week vs prior week.
    • Streaks: both, clearly named, per reference/tracking.md (## Adherence and streaks) — the training streak (consecutive planned training days completed) and the logging streak (consecutive days with food logged).
    • Activity trend: when health/daily.csv covers both weeks, this week's steps and active kcal vs the prior week's — the >10% week-over-week move feeds step 8's celebration.
    • 4-week volume trend: the weekly buckets from log.json's fitness block, with the trend label thresholds from ## Current fitness (ramping at ≥110% of baseline, backing off at ≤80%).
    • Next week preview: focus, planned miles, and the 2–3 key sessions from plan.json. Run mid-week (allowed), the reviewed week is still the last completed one, so "next week" is already partially elapsed: label the section "The week ahead", preview only days ≥ today, and never "preview" a session that's already completed.
  4. Apply the plan-free-but-trained guard. If there is no active plan (or the week had zero actionable planned days) but health/workouts.csv or the activity log shows real training, credit that training explicitly and skip completion % entirely. Never let a review say "0/0 — you didn't train" to someone who trained off-plan.

  5. Derive adjustment suggestions (max 3) per reference/training-rules.md (## Plan adjustment rules): completion below 60% → suggest reducing weekly frequency; the same weekday skipped 2+ times → suggest moving that day's session; skips citing fatigue → suggest reducing volume; completion at or above 80% → no suggestions, full stop. Each suggestion carries a reason and a specific, offered action ("Want me to move Thursday's tempo to Saturday?"), not a vague "consider adjusting". Suggestions are offers about the plan, never verdicts about the athlete — the athlete decides, and a choice they already made and recorded (plan.json meta.methodology, the profile's athlete-choices notes) isn't re-litigated unless this week's data raises a new, specific concern.

  6. Write the review file to athlete/reviews/YYYY-Www.md, named by the ISO week of the reviewed Monday (python: f"{y}-W{w:02d}" from monday.isocalendar()). Fill templates/weekly-review.md — Training (the computed stats block, the grade table, plan-vs-actual), Nutrition (macro adherence and days logged, with the energy-balance band from step 3 recorded as an "Energy balance:" line inside ## Nutrition), Weight (the trend line from step 3), Goals (progress against athlete/goals.md), and Next week — plus 2–4 highlights, 0–3 concerns (an empty concerns section is a fine outcome), a 4–6 sentence narrative, and the suggestions. Re-running for the same week overwrites the same file — one review per week, always current.

  7. Update goal progress. Refresh current values in athlete/goals.md that these computations already produced (logging streak, training streak, macro-adherence days, workout count, distance, weight) — the row format and lifecycle live in reference/tracking.md, ## Goals.

  8. Narrate in chat. A short summary built strictly around the frozen numbers: headline (sessions completed, completion %, miles actual vs planned), one grade highlight, one nutrition line, the weight trend, and the suggestion count. If it's Monday and weekly activity (steps or active kcal) moved more than 10% week-over-week, celebrate it once — record the marker in athlete/state/sent-markers.json so it never repeats (reference/insight-rules.md, ## Celebrations).

  9. Offer follow-through. If suggestions exist, offer to apply them via plan-adjust. Either way, offer to regenerate the dashboard. If plan.json has meta.race_date within 21 days, offer (or run) the race-prep skill.

Rules

  • Numbers first, prose second. If a sentence disagrees with a computed value, the sentence is wrong — fix the sentence, never the number.
  • Weekday names come from the date table verbatim. A review that says "Thursday, July 3" when July 3 was a Friday is the kind of error athletes remember.
  • Tone: encouraging but honest. Reference specific data points. Acknowledge skips gently — ask what happened, offer a path — and never guilt the athlete. Proactive-messaging etiquette is in reference/insight-rules.md.
  • A great week needs no fixing. At ≥80% completion, say so and stop; do not invent improvements to sound useful.
  • Never present zeros as failures: unlogged food days mean "no fuel data this week", not "you ate nothing"; a week with no weigh-ins means "no weight data this week", not a problem to fix. Adaptive-engagement rules apply here exactly as in chat.
  • All distances, paces, and weights in the athlete's declared units.
  • Never claim the review file is written unless the write happened this turn.

Output

The chat summary from step 8, plus the path to the review file. Suppress suggestions if you ended by asking about a skipped session; otherwise close with 2–3 next actions, such as:

  • "Want me to apply the Thursday-to-Saturday move? I'll run plan-adjust."
  • "I can regenerate your dashboard with this week baked in."
  • "Fancy a small goal for next week — say, 4 of 5 sessions?"

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 326,144. 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.