Nutrition Daily Plan - Proposal
Summary
Create a new nutrition-daily-plan skill that runs each morning at 08:00 in the athlete's local timezone and produces a fully detailed daily nutrition plan saved as a standalone Markdown file at athlete/logs/daily-nutrition/YYYY-MM-DD.md. This plan is a forward-looking fueling prescription for the current day, built from the previous day's intake and training results, today's planned training, the athlete's physiology and health context, and short and long-term performance goals.
The plan gives the athlete a single document they can reference throughout the day: a calculated energy target derived from their actual metrics, per-window macro targets with specific gram values, concrete meal and snack options with full ingredients and instructions, a per-hour on-bike fuel schedule, verified GF/DF product lists, and a carry-forward note for tomorrow. It is separate from the morning plan message and the nutrition review, and serves a different purpose: it is a daily fueling guide, not a coaching summary.
The reference document for this proposal is the sample Nutrition Analysis document provided alongside this proposal, which establishes the canonical template for section structure, calculation methodology, table formatting, and content depth.
Problem Statement
The current nutrition workflow produces two athlete-facing nutrition artifacts:
- Nutrition review (08:15 cron): a retrospective Telegram message reviewing yesterday's intake against yesterday's training.
- Morning plan (08:55 cron): a broader coaching brief that mentions fueling at a high level.
Neither gives the athlete a forward-looking, practical fueling plan for the day. The athlete receives a coaching verdict on yesterday and a session prescription for today, but no detailed answer to: "What exactly should I eat today, when, how much, and why?" The reference document demonstrates the full detail level that is both achievable and genuinely useful.
Proposed Solution
New skill: nutrition-daily-plan
A new skill at skills/nutrition-daily-plan/SKILL.md that owns the creation of the daily nutrition plan document.
New file output per day
Each run produces one file at athlete/logs/daily-nutrition/YYYY-MM-DD.md with the following frontmatter:
---
label: YYYY-MM-DD
---
The document title (H1 heading) is always # Nutrition Plan.
A one-line subtitle follows the title stating the date and the athlete's dietary restrictions in force:
# Nutrition Plan
[Date in long form]. All foods [dietary restriction list].
Example: April 28, 2026. All foods gluten-free and dairy-free.
New cron job
A new isolated cron job fires at 08:00 in the athlete's local timezone daily. This runs before the nutrition review (08:15) and morning plan (08:55), so the plan is available as reference material when those crons fire. It does not block either.
Document Structure
Each daily nutrition plan file contains the following sections in this order. Section headings match the reference document's H2 style: short, specific, and context-named rather than generic.
Section 1: Frontmatter and Title
---
label: YYYY-MM-DD
---
# Nutrition Plan
[Date in long form]. All foods [dietary restriction list].
Section 2: Daily Snapshot
A compact metadata block at the top of the document:
- Date: athlete-local date
- Training day type: rest / easy / moderate / hard / race
- Today's session: one-line description from TrainingPeaks or calendar
- Session metrics: duration, TSS, IF when available
- Yesterday's intake: one-line total (kcal, carbs, protein, fat) from previous day
## Nutrition -> ### Summary - Yesterday's gap: main shortfall from previous day carry-forward
- Context flags: list only those active today - travel, race-eve, race-day, LEA watch, health flag
Section 3: Daily Energy Target
Heading: ## Daily energy target
Derived from the athlete's current metrics and today's training load. The table presents two parallel energy estimates - one using Mifflin-St Jeor and one using Harris-Benedict (for sedentary athletes or general population contexts) or Cunningham (for lean-mass-based estimation in highly trained athletes) - so both methodologies are visible side by side for comparison. The operating target is derived from the higher or more contextually appropriate estimate, with the rationale stated in the Notes column. All numeric columns are right-aligned.
Method selection guidance:
- Mifflin-St Jeor (1990): the current clinical default for most populations. Uses total body mass. Generally preferred for athletes without a reliable FFM measurement.
- Harris-Benedict (1919, revised Roza & Shizgal 1984): older formula, tends to overestimate BMR slightly. Useful as a comparison reference.
- Cunningham (1980): uses fat-free mass (FFM) directly. More accurate for trained athletes when a reliable FFM value is available. If FFM is estimated rather than measured, note the assumption explicitly.
When FFM is not available, use Mifflin-St Jeor and Harris-Benedict as the two comparison columns. When a reliable FFM value exists, use Mifflin-St Jeor and Cunningham.
## Daily energy target
| Component | Mifflin-St Jeor (kcal) | Harris-Benedict / Cunningham (kcal) | Notes |
|---|---:|---:|---|
| BMR (X kg / X cm / X y) | ~X | ~X | [method name for col 2, e.g. Harris-Benedict revised] |
| Non-training lifestyle (x1.4) | ~X | ~X | |
| Training expenditure | +X | +X | TSS X, IF X, duration X |
| **Operating target** | **~X kcal** | **~X kcal** | [which estimate is used and why] |
Below the table, two plain-text lines (not bullets, not headings):
Energy availability floor: ≥45 kcal/kg FFM (~X kg FFM) = X kcal. Use X as operating target. Anything under 3,800 is a red flag.
The LEA floor threshold (≥45 kcal/kg FFM) is derived from the IOC consensus on Relative Energy Deficiency in Sport (RED-S). This citation must be noted in references/energy-target-methodology.md and reflected in the Notes column of the Operating target row when the floor is the binding constraint.
When an intentional overshoot applies, add a second plain-text line explaining the fallback:
Intentional overshoot given [reason, e.g. LEA history and tomorrow's poor eating environment]. If the athlete can only hit X kcal, drop [specific window] to X g CHO and trim [specific window]. Keep [priority window] intact.
If body mass is unavailable, note the assumption inline in the BMR row and flag it in the Notes column. If FFM is estimated rather than measured, note that in the Cunningham column header or the Notes column.
Section 4: Full-Day Macro Targets
Heading: ## Full-day macro targets
Rates derived from body mass, session type, and health context. All g/kg rates must be traceable to a recognised sports nutrition protocol or evidence base. The canonical sources are the IOC/ACSM/DC sport nutrition consensus (Thomas et al. 2016) for carbohydrate and protein periodisation, and the IOC RED-S framework for the fat floor minimum. The methodology source for each macro rate must be documented in references/energy-target-methodology.md.
Where the applied rate differs from the consensus range (e.g. elevated carbohydrate for a multi-day loading block, or elevated protein during a body composition phase), state the reason in a plain-text line below the table. All numeric columns right-aligned.
## Full-day macro targets
| Macro | Rate | Total | Calories | % daily |
|---|---:|---:|---:|---:|
| Carbohydrate | X g/kg | X g | X kcal | X% |
| Protein | X g/kg | X g | X kcal | X% |
| Fat | ~X g/kg | X g | X kcal | X% |
| **Total** | | | **~X kcal** | |
A comparison line follows showing yesterday's actuals versus today's targets:
| Yesterday actual | Today target |
|---|---|
| ~X kcal / X g carbs / X g protein / X g fat | ~X kcal / X g carbs / X g protein / X g fat |
Section 5: Timing Breakdown
Heading: ## Timing breakdown
A quantitative per-window macro table with right-aligned numeric columns. Window names reflect the actual session type (e.g. "Pre-ride" not "Pre-session" on a ride day).
## Timing breakdown
| Window | CHO (g) | Protein (g) | Fat (g) | kcal |
|---|---:|---:|---:|---:|
| Pre-ride (90-120 min before) | X | X | X | X |
| During ride (X h total) | X | 0 | 0 | X |
| Post-ride 0-30 min | X | X | X | X |
| Post-ride meal (60-90 min) | X | X | X | X |
| Dinner | X | X | X | X |
| Evening snack | X | X | X | X |
| **Total** | **X** | **X** | **X** | **~X** |
When an intentional overshoot applies, a single italic note follows the table:
*Intentional overshoot given [reason]. If the athlete can only hit X kcal, drop [window] to X g CHO and trim [window]. Keep [priority window] intact.*
On rest days, the during-session and post-session rows are omitted. On race days, the during-race row reflects race-specific fueling rates.
Section 6: Pre-Session Meal
Heading format: ## Pre-[ride/session/race] meal ([timing window]) - GF/DF
Example: ## Pre-ride meal (90-120 min before ride) - GF/DF
A macro summary line appears immediately after the heading:
## Pre-ride meal (90-120 min before ride) - GF/DF
~X kcal | X g carbs | X g protein | X g fat
Two options follow as a Retype Column component. Each option includes a specific named recipe, weighted ingredients, step-by-step instructions, and a description. Where GF/DF certification matters for a specific ingredient, include a brand-specific certification note as an italic line immediately after the ingredient list:
||| Option 1
### [Meal Name] - GF/DF
\~X kcal | X g carbs | X g protein | X g fat
**Ingredients**
- GF-certified rolled oats (dry): 80 g, cooked in 350 mL unsweetened oat milk
- Banana: 1 medium
- Maple syrup: 30 g
- Almond butter: 20 g
- Hemp hearts: 15 g
- Black coffee: 250 mL + 400 mL water with pinch of salt
*Oats must be certified GF (Bob's Red Mill GF, GF Harvest, or Nature's Path GF).*
**Instructions**
1. Step one.
2. Step two.
**Description**
[One paragraph: nutritional rationale for the pre-session window, how the macros support today's session, any relevant health-context note.]
||| Option 2
### [Meal Name] - GF/DF
\~X kcal | X g carbs | X g protein | X g fat
**Ingredients**
- ...
**Instructions**
1. ...
**Description**
[One paragraph.]
|||
Section 7: During-Session Fueling
Heading format: ## During [ride/race] - [rate] g CHO per hour
Example: ## During ride - 80-100 g CHO per hour
This section is omitted when the session is under 60 minutes; replace with a one-line note.
A summary line states the total session target:
X-hour total target: ~X g CHO, ~X kcal
A per-hour fuel schedule table follows with right-aligned CHO column:
| Hour | Fuel | CHO |
|---|---|---:|
| 0:00-1:00 | [product + quantity] | X g |
| 1:00-2:00 | [product + quantity] | X g |
| 2:00-3:00 | [product + quantity] | X g |
| [last segment] | [product + quantity] | X g |
Below the table, plain-text fluid and sodium targets on one line:
Fluids: X-X mL/hr, X-X mg sodium/hr.
Then a GF/DF product verification block as plain text (not a structured table):
Verified GF + DF options: [product list with brief notes]. Avoid [product] ([reason]) and [product] ([reason]).
Example: Verified GF + DF options: Maurten (all products), SiS Beta Fuel/Go Isotonic, Skratch Sport Hydration, Spring Energy (verify per flavour), Untapped maple gels. Avoid Clif Bloks (whey traces possible) and GU Roctane (check milk content).
When a documented underfueling pattern exists in recent logs, add a coaching flag immediately after the product list:
**Coaching flag:** Given documented underfueling pattern, confirm on-bike fueling execution in hours [X-Y] today.
Section 8: Post-Session Recovery
Heading format: ## Post-[ride/session/race] recovery ([window]) - GF/DF
Example: ## Post-ride recovery (0-2h) - GF/DF
This section has two distinct phases that must not be collapsed.
Phase 1: Immediate shake (within 20 min)
A single specific recipe - no Column options. This is an acute protocol window where consistency and speed matter more than choice. The macro summary appears on the bold label line:
**Immediate shake (within 20 min):** ~X kcal | X g carbs | X g protein
- 30 g pea + rice protein blend (Vega Sport, NOW Sports Pea, or Naked Pea - all GF/DF)
- 1 frozen banana
- 40 g GF rolled oats
- 30 g dates (3 medjool)
- 250 mL oat milk + 250 mL water
- 10 g cocoa powder, cinnamon, pinch salt
Phase 2: Real meal (60-90 min after)
Two options as a Retype Column component. Macro summary on the bold label line:
**Real meal (60-90 min after):** ~X kcal | X g carbs | X g protein
||| Option 1
### [Meal Name] - GF/DF
\~X kcal | X g carbs | X g protein | X g fat
**Ingredients**
- ...
**Instructions**
1. ...
**Description**
[One paragraph.]
||| Option 2
...
|||
Section 9: Dinner
Heading format: ## [Context-named dinner] - GF/DF
The dinner heading is context-named, not generic. When the dinner has a specific priority (e.g. the night before a long drive, a race-eve loading dinner, or a post-race recovery priority), name it accordingly:
## Recovery dinner (priority - last night before 16h drive) - GF/DF## Race-eve dinner (carbohydrate loading) - GF/DF## Post-race recovery dinner - GF/DF## Dinner - GF/DF(when no special context applies)
A macro summary line appears immediately after the heading. Two options follow as a Retype Column component using the standard format. Each option's Description must include the nutritional rationale for any notable ingredient choices (e.g. salmon for EPA/DHA omega-3s, white rice over brown for glycogen resynthesis speed before travel or racing, tart cherry juice for recovery).
Section 10: Evening Snack
Heading format: ## Evening snack ([timing]) - GF/DF
Example: ## Evening snack (90 min before bed) - GF/DF
A macro summary line appears after the heading. Two options follow as a Retype Column component.
When the evening snack is non-negotiable due to LEA history, glycogen debt, or a poor eating environment forecast for tomorrow, add an italic non-negotiable note immediately after the Column block:
*Night snack is non-negotiable: [one or two sentences stating the specific reason - LEA pattern, glycogen debt, thyroid/health context, or tomorrow's eating environment risk.]*
Example: *Night snack is non-negotiable: LEA pattern + final-session glycogen debt + tomorrow's poor eating environment = high overnight catabolism risk. Fed sleep supports T4→T3 thyroid conversion.*
Section 11: Supplement and Hydration Notes
Heading: ## Supplement and hydration notes
Contents:
- Supplement timing relevant to today: iron, vitamin D, magnesium, omega-3, etc. Derived from the athlete profile or recent intake patterns when known.
- Minimum daily hydration target derived from session length, body mass estimate, and current conditions.
- Electrolyte sodium target in mg when session is 90+ min or conditions are warm.
- Recovery drink rationale when applicable: tart cherry juice (~3-4 g EPA/DHA), beet juice (nitrate loading pre-race), etc.
- A one-line hydration environment note from live Open-Meteo weather data for the athlete's current location.
Section 12: Travel-Day Pack List (conditional)
Heading: ## Travel-day pack list (for [tomorrow/today])
This section is added only when athlete/context/travel-schedule.md indicates travel today or tomorrow. It is omitted entirely on non-travel days.
Contents: a flat bullet list of specific foods to pack or prepare, with quantities and any timing guidance:
## Travel-day pack list (for tomorrow)
- 4 hard-boiled eggs
- 6 GF/DF rice cake packs with almond butter and jam
- 2 cooked rice + chicken containers (eat by hour 6)
- 1 kg mixed fruit (apples, bananas, oranges)
- 200 g GF-certified trail mix
- 3 L water + 6 electrolyte tabs
Travel-day target: ~X kcal, ~X g/kg CHO. Do not allow drift to a rest-day X kcal pattern.
The final line is always a plain-text target statement with an explicit warning against energy drift. Items use the athlete's actual available or preferred foods where known from logged intake or the recipe index.
Section 13: Carry-Forward Note
Heading: ## Carry-forward
A single short paragraph naming the one thing from today's plan that most needs to carry into tomorrow, tied to the next day's planned session type when available from the rolling 7-day plan or calendar.
Coaching Flags
Coaching flags are inline bold-label advisory notes that can appear in any section. They are used for documented patterns, recurring gaps, or acute risks that warrant specific attention beyond the standard plan content.
Format:
**Coaching flag:** [One or two sentences. Name the documented pattern, the risk, and the specific check or action required today.]
Use coaching flags for:
- Documented underfueling in hours 3-4 of long rides
- Three or more consecutive days below fat target
- First long session after illness, deload, or travel
- Race-week hydration risk in an unfamiliar climate
- Confirmed LEA period requiring intentional overshoot
- Any acute health-context flag that materially changes execution risk today
Do not add coaching flags for routine observations that are already addressed by the standard plan content.
Section Ordering Summary
Dual-Option Format Rules
All meal and snack windows (sections 6, 8 phase 2, 9, 10) use the Retype Column component to present two options. The exception is the Phase 1 immediate recovery shake in section 8, which is a single protocol recipe.
All meal and snack options must be reviewed and approved by the nutrition agent before being written into the output file. See Nutrition Agent Review Requirement above.
Rules for all Column option pairs:
- Both options are gluten-free and dairy-free without exception. Include
- GF/DFin each option title. - All ingredient quantities in grams or mL; no vague quantities.
- Where GF/DF certification is required for a specific ingredient (oats, bread, pasta, soy sauce, etc.), include a brand-specific certification note as an italic line immediately after the ingredient list.
- Each pair must offer genuinely different meal character: different protein source, different carbohydrate base, or different preparation style. Do not just swap one ingredient.
- Each Description paragraph must state the nutritional rationale tied to today's specific session and any health-context relevance.
- Prefer saved recipes from
athlete/recipes/as Option 1 candidates before generating novel meals. - Adapt to the athlete's current food environment: home kitchen, hotel, travel, race venue.
Data Sources the Skill Must Read
In order before writing the plan:
- Previous day's canonical daily log:
athlete/logs/daily/YYYY-MM-DD.md(yesterday) - Current day's canonical daily log:
athlete/logs/daily/YYYY-MM-DD.md(today, create if missing) - Today's calendar file:
athlete/calendar/YYYY-MM-DD.md(if it exists) - Rolling 7-day plan:
athlete/rolling-7-day.md - TrainingPeaks: today's planned workout and yesterday's completed workout - TSS, IF, duration, coach comments
- Athlete profile:
athlete/PROFILE.md- body mass, height, age, dietary restrictions, health constraints - Season goals:
athlete/context/season-goals.md - Travel schedule:
athlete/context/travel-schedule.md - Delivery config:
athlete/delivery-config.md(athlete-local timezone) - Previous daily nutrition plan:
athlete/logs/daily-nutrition/YYYY-MM-DD.md(yesterday) - Recipe index:
athlete/recipes/(prefer saved recipes before generating novel options) - Open-Meteo weather for athlete's current location (hydration environment note)
- Race calendar:
athlete/context/race-calendar.md(race-day and race-eve detection) - Previous 3 daily logs: detect recurring gaps - fat intake trend, underfueling pattern, protein distribution
Fallback rules:
- If body mass is missing from the athlete profile, use the most recently logged value found anywhere in recent daily logs or athlete notes, then fall back to a conservative estimate based on the athlete's stated typical in-season body mass from
athlete/PROFILE.md. Flag the source and assumption explicitly in the BMR row Notes column in section 3. Do not wait for updated data or prompt for it; proceed with the best available value. - If TrainingPeaks data is unavailable, derive session context from the calendar file and rolling 7-day plan. Note the fallback in section 2.
- If any source is missing, write
[data unavailable - reason]as a placeholder in the affected section and continue with remaining sections.
Integration with Existing Workflow
The nutrition daily plan is not a Telegram message. It is a document the athlete accesses via the Retype portal or on request. No direct Telegram delivery of the full plan document.
Protocol Variants
Travel days
The Travel-Day Pack List section (section 12) is added. Meal options in all windows shift to items sourced without a full kitchen: rice cakes, hard-boiled eggs, fruit, pre-packaged GF/DF items, rice and protein containers. The meal option descriptions reflect realistic travel sourcing.
Race day and race-eve
The plan activates a race-day or race-eve variant. Key differences: pre-race meal timing adjusted to race start, during-race fueling section reflects race-specific CHO rates, post-race recovery section is the dinner priority, and a race-venue food environment note is added where relevant. The Daily Snapshot flags the race context clearly.
Rest day
Sections 6 (pre-session meal), 7 (during-session), and 8 (post-session recovery) are omitted. Daily Targets use rest-day energy and carbohydrate values. The Recovery Nutrition Priority (carried into section 9 dinner rationale) focuses on protein distribution, fat adequacy, and next-day preparation.
Race-week carbohydrate loading
When the rolling 7-day plan indicates a loading phase, macro targets and timing tables reflect elevated carbohydrate targets. The rationale in sections 4 and 5 explicitly states the loading purpose and duration.
File and Directory Structure
athlete/
logs/
daily-nutrition/
2026-04-28.md
2026-04-29.md
...
skills/
nutrition-daily-plan/
SKILL.md
references/
document-template.md canonical full template with all sections and example content
energy-target-methodology.md Mifflin-St Jeor method, FFM estimation, LEA floor, overshoot logic
timing-targets.md per-window CHO/protein/fat/kcal derivation by session type
meal-option-guidelines.md GF/DF authoring rules, weight standards, Column format, certification notes
product-verification.md verified and disallowed GF/DF on-bike and recovery products
Nutrition Agent Review Requirement
All meal ideas, food suggestions, snack options, recipe options, on-bike fuel choices, recovery shake ingredients, supplement recommendations, and product verification lists must be reviewed by the nutrition agent or nutrition role before being written into the daily nutrition plan.
This is a mandatory workflow step, not optional. The skill must not generate meal or food content from general knowledge alone and write it directly into the output file. The sequence is:
- Coach Luca coordinates the plan structure and derives energy and macro targets.
- The nutrition agent reviews and approves all proposed meal options, snack options, on-bike fuel choices, recovery shake recipes, and product lists for the specific athlete context: dietary restrictions, health constraints, training load, and any active flags.
- If the nutrition agent modifies or rejects a proposed option, Coach Luca incorporates the revision before the plan is written.
- The final plan is written only after nutrition agent review is complete for all food-content sections.
The nutrition agent review applies to:
- Section 6: Pre-session meal options
- Section 7: During-session fuel schedule and product verification list
- Section 8: Immediate recovery shake recipe and real meal options
- Section 9: Dinner options
- Section 10: Evening snack options
- Section 11: Supplement recommendations and recovery drink suggestions
- Section 12: Travel-day pack list items
The nutrition agent review does not apply to sections 3, 4, and 5 (energy targets, macro targets, timing breakdown), which are Coach Luca's calculation outputs. However, the nutrition agent may flag concerns about any calculated target if they conflict with the athlete's health context or known contraindications.
Skill Operating Rules
Channel text rule
The nutrition-daily-plan skill runs in an isolated session. Its only permitted channel text output is NO_REPLY. It writes the plan file, logs a ## System event in the current day's canonical daily log, and exits silently. It never calls the message tool.
Failure handling
If the plan cannot be completed, the skill writes a partial plan with [data unavailable - reason] placeholders in affected sections rather than failing entirely. A ## System event in the canonical daily log records what was unavailable and what was omitted.
Attribution
The nutrition daily plan is an internal coaching document. Attribution footers are not required in the plan file itself. The ## System event records that the plan was generated by the nutrition-daily-plan skill.
Proposed Implementation Sequence
- Create
skills/nutrition-daily-plan/SKILL.mdwith the full skill definition - Create
skills/nutrition-daily-plan/references/document-template.mdwith the canonical plan template including example content for each section - Create
skills/nutrition-daily-plan/references/energy-target-methodology.mdwith the Mifflin-St Jeor method, FFM estimation, LEA floor (IOC RED-S basis), macro g/kg rate sources (IOC/ACSM/DC Thomas et al. 2016), overshoot logic, and citation requirements for sections 3 and 4 - Create
skills/nutrition-daily-plan/references/timing-targets.mdwith per-window CHO/protein/fat/kcal derivation rules by session type - Create
skills/nutrition-daily-plan/references/meal-option-guidelines.mdwith GF/DF authoring rules, the Column format, certification note style, and ingredient weight standards - Create
skills/nutrition-daily-plan/references/product-verification.mdwith verified and disallowed GF/DF product lists for on-bike and recovery contexts - Create
athlete/logs/daily-nutrition/directory - Register the new cron job at 08:00 athlete-local time
- Run a manual test for the current date to validate output quality before enabling the daily schedule
- Update
retype.ymlif the Retype portal should expose the new directory - Optionally update the morning-plan cron prompt to reference the daily nutrition plan