Install
$ agentstack add skill-zwjbendn-weight-loss-skill-weekly-report ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Weekly Report
> ⚠️ SILENT OPERATION: Never narrate internal actions, skill transitions, or tool calls to the user. No "Let me check...", "Now I'll transition to...", "Reading your profile...". Just do it silently and respond with the result.
A personalized end-of-week progress report that turns 7 days of scattered data into a clear, motivating snapshot. The report is data-driven but human — celebrate consistency, normalize fluctuations, and give exactly one or two things to focus on next week.
Principles
- Show, don't lecture. Let the data speak. Keep commentary short.
- Celebrate consistency over perfection. 5 out of 7 days logged is great — don't focus on the 2 missed.
- One week is noise, trends are signal. Never draw dramatic conclusions from a single week.
- Personalize everything. Use the user's name, units, food history, and goals — never a generic template dump.
- Actionable > informational. Every suggestion must be something the user can do next week.
Trigger Strategy
Schedule
Auto-generate every Monday at 9:00 AM (user's local time), covering the previous Monday–Sunday. Read timezone.json to determine the user's local time and correctly calculate the Mon–Sun date range. If the user's quiet hours extend past 9 AM, delay to end of quiet hours.
Manual Trigger
User can request a report at any time:
"weekly report"/"week summary"/"how was my week"→ generate for the most recent completed Mon–Sun"report for last week"/"上周报告"→ same"report for Feb 10–16"→ generate for that specific range
Pre-send Checks
- User in Stage 4 (silent)? → skip auto-send, but still generate if manually requested
- Less than 2 days of data in the period? → send a short message instead:
"Not enough data for a full report this week — let's make next week count! 💪" - All clear → generate and send
Data Sources
Reads from USER.md
| Field | Purpose | |-------|---------| | Basic Info > Name | Greeting / header personalization | | Health Flags | Skip weight section if ED-related flags |
Reads from health-profile.md
| Field | Purpose | |-------|---------| | Body > Unit Preference | Display unit for weight (kg or lb) | | Goals > Target Weight | Progress percentage calculation | | Meal Schedule > Meals per Day | Expected logs per day (for logging rate calc) | | Meal Schedule | Which meals to expect | | Diet Config > Food Restrictions | Context for suggestions | | Activity & Lifestyle > Exercise Habits | Context for suggestions |
Reads from PLAN.md
| Field | Purpose | |-------|---------| | Daily Calorie Range | On-target / below / over classification | | Protein Range | Macro analysis | | Fat Range | Macro analysis | | Carb Range | Macro analysis | | Weight Loss Rate | Expected weekly loss for progress assessment | | Diet Mode | Context for suggestions |
Reads from data (workspace)
| Path | How | Purpose | |------|-----|---------| | data/meals/YYYY-MM-DD.json | nutrition-calc.py load --date YYYY-MM-DD for each day in range | Logging status, food descriptions, estimated calories per meal | | data/weight.json | weight-tracker.py load --from YYYY-MM-DD --to YYYY-MM-DD --display-unit | Weight readings for the week | | habits.active | direct read | Current active habits for habit progress section | | habits.daily_log.{date} | direct read | Daily habit completion/miss/no_response records | | habits.graduated | direct read | Recently graduated habits for achievements section |
Note: Weight data is read via the weight-tracking skill's weight-tracker.py script at {weight-tracking:baseDir}/scripts/weight-tracker.py. Read health-profile.md > Body > Unit Preference for the display unit. Meal data is read via nutrition-calc.py load from the diet-tracking-analysis skill.
Report Structure
The report has 6 sections. Generate them in order. Each section adapts to the user's actual data — skip or simplify sections with no data. The header (title, date range, greeting) is handled by the HTML template's .report-header and the in-chat summary — not a separate section.
Section 1: Logging Overview
Show each day of the week with a status indicator. See .logging-grid in the HTML template.
Data logic:
- For each day (Mon–Sun), call
nutrition-calc.py load --date YYYY-MM-DDto check: - If at least 1 meal has
status: "logged"→ ✅ - If all meals are
"skipped"or"no_reply"or no log exists → ❌ - Count total days with ✅ →
{X}/7 days logged
Commentary rules:
- 7/7 →
"Perfect week! 🎉"/"满勤!🎉" - 5-6/7 →
"Nice consistency!"/"记录很稳!" - 3-4/7 →
"Solid start — let's aim for one more day next week."/"不错的开始,下周争取多记一天。" - 1-2/7 →
"Every logged day counts. Small steps!"/"每记一天都有价值,慢慢来!"
Section 2: Calorie Analysis
Show daily calorie intake vs target range with bar chart. See .calorie-table and .calorie-bar in the HTML template.
Data logic:
- For each day, call
nutrition-calc.py load --date YYYY-MM-DDand sumcalacross all meals - Compare against
Daily Calorie RangefromPLAN.md: - Below range min →
📉 Below(bar class:below) - Within range →
✅ On Target(bar class:on-target) - Above range max →
📈 Over(bar class:over) - Days with no data →
—(skip from calculations) - Bar width =
(day_calories / max_calories_in_week) * 100%
Commentary rules:
- Average within range →
"Right on track this week."/"这周热量控制得很好。" - Average below range →
"A bit under — make sure you're eating enough to sustain energy."/"稍微偏低,注意吃够保持精力。" - Average above range →
"Slightly over, but a few small adjustments can close the gap."/"略微超标,小调整就能回来。" - Only 1-2 days of data → Show what's available but note:
"Limited data this week — the more you log, the more useful this gets."
Section 3: Weight Progress
Show weight readings and net change. See .weight-table and .weight-change in the HTML template.
Data logic:
- Call
weight-tracker.py load --from --to --display-unitto collect all entries within the period - If 2+ readings: calculate change = last reading − first reading
- If 1 reading: show it, compare to previous week's last reading if available
- If 0 readings: skip this section entirely (remove the card), add a gentle note
Commentary rules:
- Loss within expected rate (from
PLAN.mdweekly rate) →"Right on pace."/"进度刚好。" - Loss faster than expected →
"Great progress — just make sure you're not undereating."/"进度不错,注意别吃太少。" - No change or slight gain →
"Weight fluctuates — one week doesn't define the trend. 💛"/"体重会波动,一周说明不了什么。💛" - No readings →
"No weigh-ins this week — want to add one next week?"/"这周没有称重记录,下周要不要试试?"
Never: compare to target weight in a pressuring way, criticize a gain, or suggest the user weigh more often than 2x/week.
Section 4: Macronutrient Analysis
Compare average daily macro intake against target ranges. See .macro-table in the HTML template.
Data logic:
- Calculate average daily protein, fat, carb from logged meals across the week
(use meal_totals from food logs or daily_summary data)
- Compare each macro's average against the range from
PLAN.md - Classify:
Below Range/In Range/Above Range
Commentary rules:
- All in range →
"Balanced macros this week — keep it up!"/"三大营养素都在范围内,继续保持!" - Protein below → always flag:
"Protein is a bit low — try adding an egg, yogurt, or chicken breast to one meal."/"蛋白质偏低,试试每天多加一个鸡蛋或一份鸡胸肉。" - Fat over →
"Fat ran a little high — check cooking oils and snacks."/"脂肪偏高,留意下烹饪用油和零食。" - Insufficient data ( Health Flags
containsavoidweightfocusorhistoryofed`: - Skip Section 3 (Weight Progress) entirely
- In calorie section, focus on consistency of eating, not numbers
- Achievements: focus on variety and balance, not restriction
Workspace
Writes
| Path | When | |------|------| | logs.weekly_report.{start_date} | After generating the report — store the full report JSON (see references/data-schemas.md) | | habits.lifestyle_gaps | When behavioral patterns are detected during weekly analysis (consumed by habit-builder) |
Output
Delivery (two parts)
The weekly report is delivered in two parts:
Part 1: Natural Language Summary (in-chat message)
Send a concise 3–5 sentence summary in the chat as plain text. This summary should give the user a quick snapshot without needing to open the full report.
Structure:
- Greeting + date range
- Key stats (days logged, average calories, weight change)
- One highlight (biggest win of the week)
- One suggestion (most impactful thing to try next week)
- Pointer to the full HTML report
Example (Chinese):
小明,这是你 2月10日–16日 的周报摘要:这周记录了5/7天,平均摄入
1,766 kcal,体重下降了 0.4 kg。亮点是连续5天坚持记录饮食,蛋白质
摄入可以再提高一些——试试早餐加个鸡蛋。完整报告已生成,请查看附件 👇
Example (English):
Hi Ming, here's your week in review (Feb 10–16): You logged 5/7 days,
averaged 1,766 kcal/day, and dropped 0.4 kg. Highlight: 5-day logging
streak! One thing to try: add an egg to breakfast to boost protein.
Full report attached below 👇
Part 2: HTML Report (file attachment)
Generate a self-contained HTML file using the template at templates/weekly-report.html. Write the file to data/reports/weekly-report-{start_date}.html and attach it in the response. The HTML report contains all 6 sections with full detail, charts, and styling.
HTML generation rules:
- Replace all
{{PLACEHOLDER}}values with actual data - The file must be fully self-contained (all CSS inline, no external dependencies)
- Follow the template structure — do not add or remove sections
- Adapt language to user's locale (read from
locale.json) - Skip sections with no data (remove the entire card, do not show empty cards)
- For the calorie bar chart: calculate bar widths as percentage of the max value in the week
Report JSON (stored to workspace)
After displaying the report to the user, write a structured JSON summary to logs.weekly_report.{start_date} for cross-session reference and trend analysis. Schema in references/data-schemas.md.
Skill Routing
See SKILL-ROUTING.md for the full conflict resolution system. This skill is Priority Tier P4 (Reporting). Key scenarios:
- Weekly report + exercise weekly summary (Pattern 3): This skill is the primary owner of weekly summaries. Exercise weekly data (sessions, duration, calories burned, WHO comparison) is incorporated as a section within this report.
exercise-tracking-planningdoes NOT produce a separate weekly summary when this skill is generating. - Monday auto-report: Include exercise data from the week. No separate exercise summary needed.
- User requests "weekly summary": Route here, not to exercise-tracking's weekly summary.
Performance
- Report generation: single message, no back-and-forth
- In-chat summary: 3–5 sentences, scannable in under 10 seconds
- HTML report: aim for 40–60 lines of visible content
- Commentary: 1–2 sentences per section, max
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: zwjbendn
- Source: zwjbendn/weight-loss-skill
- License: MIT
- Homepage: https://nanorhino.com/
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.