Athlete calendar activity proposal
Objective
Create a new per-athlete calendar layer at athlete/calendar/ that holds one Markdown file per day at YYYY-MM-DD.md.
This proposal, the related skills, and any supporting processes must be athlete-agnostic. The path pattern is standardized per athlete, but the design itself must not depend on any single athlete, sport block, race calendar, or named athlete implementation.
Each daily file should contain the planned activities or events for that date in a clean, uniform, system-neutral format that can be:
- created and revised by whatever authorized process is responsible for populating the calendar
- consumed by downstream systems that need clean daily activity objects
- manipulated safely by multiple agents without depending on fragile prose parsing
This calendar layer should sit between high-level planning and external system execution.
It should not replace:
- long-range planning documents
- rolling planning summaries
- canonical daily logs
- athlete-facing messages
It should become the canonical per-day plan artifact for future planned activities.
Scope boundary
This proposal is only about the calendar layer itself:
- directory structure
- file format
- activity and event schema
- templates
- storage rules
- revision rules for calendar files
- the unified skill that adds, edits, deletes, and moves calendar items
This proposal is explicitly not about:
- who decides what activities should exist
- what planning process chooses which future items to create
- who is responsible for approving the plan content
- how external systems publish, sync, or schedule those items after the calendar files exist
- athlete-facing communication behavior derived from those files
The calendar is the storage and representation layer for calendar items. Upstream planning logic and downstream publishing logic are out of scope.
Why a calendar layer is needed
The current planning stack has a gap between strategy documents and executable daily activities.
Today, the system has:
- long-range block planning
- rolling short-term planning
- daily logs for what happened
- TrainingPeaks creation tooling
What it does not yet have is a canonical daily plan object that is:
- durable
- per-date
- multi-activity capable
- neutral with respect to TrainingPeaks implementation details
- simple for other agents and automation to revise
That missing layer makes several jobs harder than they should be:
- storing future daily activity objects in a consistent format
- revising one future day without rewriting broad planning prose
- representing multiple same-day items cleanly
- giving downstream systems one stable daily source to read
Proposed directory
Create a new directory per athlete:
athlete/calendar/
Optional supporting directory:
athlete/calendar/archives/
Important requirement:
- the storage path is athlete-scoped, but the calendar model, workflow rules, and skill behavior must remain generic across all athletes
- no part of this proposal should require athlete-specific assumptions, hard-coded athlete references, or athlete-specific source-file names
- the optional
archives/directory is part of the calendar area and may be used to hold calendar files moved out of the active calendar set for future reference
Primary file contract:
- one file per day
- file name:
YYYY-MM-DD.md - one file may contain zero, one, or many planned activities or events
Archive contract:
- archived files may be moved from
athlete/calendar/intoathlete/calendar/archives/ - files in
archives/should generally be ignored by normal calendar-writing, calendar-reading, and calendar-maintenance workflows unless a task explicitly asks to inspect archived material - the archive is for possible future reference, not for active planning
These files are planning artifacts, not execution logs. Historical strategy should stay outside the calendar files.
Design principles
1. One daily file, many activities
The calendar should use one file per date, not one file per activity.
That keeps all same-day objects together, including cases such as:
- bike session plus gym session
- race plus pre-ride
- travel plus opener
- rest day plus physio event
2. Activities are discrete calendar objects
Each activity inside a day file should represent one object that could reasonably stand alone in an external training or coaching calendar, or even a personal calendar of an athlete.
Use a separate activity when it should exist independently, for example:
- on-bike workout
- gym session
- race
- pre-ride
- travel day event
- full rest day note
Do not split out tiny support items as independent activities unless they genuinely need to be managed as separate calendar objects. For example, pre-ride activation and post-ride mobility should usually remain inside the parent workout unless there is a specific reason to schedule them separately.
3. Calendar files are system-neutral
Calendar files should contain the plan content and reference metadata needed to represent, create, revise, or later correlate external activities.
They may contain durable reference fields or other data values when those fields are useful to the calendar item itself, for example:
- a TrainingPeaks ID after the external item has been created
- other external reference IDs if the calendar item must be correlated with another system later
- additional notes, comments, flags, or metadata fields that help describe or track the item
They should not contain:
- API payload details
- MCP instructions
- operator workflow notes
- step-by-step process instructions
- transient sync mechanics that describe how a tool should perform the integration
The calendar may hold durable item metadata, but it should not describe the mechanics of how another process publishes or updates the item.
4. No strategy prose inside activity files
Calendar files should not carry high-level planning rationale such as:
- block intent
- seasonal strategy
- long-range progression comments
- planning-process notes
Those belong in:
- long-range planning documents
- rolling plans
- specialist notes
- daily logs when explaining revisions
Calendar files should stay tightly focused on the activity to be executed.
5. Stable, machine-friendly structure
The format should be simple enough that:
- humans can read it quickly
- agents can edit it safely
- other tools can parse it without depending on freeform prose
The best balance here is a fixed Markdown section layout with activity titles as headings, consistent bullet fields, and stable activity IDs stored as metadata when needed.
Proposed daily file structure
Recommended top-level structure:
# YYYY-MM-DD
## Controlled threshold re-entry
- Id: 2026-04-14-controlled-threshold-re-entry
- Title: Controlled threshold re-entry
- Kind: workout
- Discipline: bike
- Surface: road
- Priority: key
- Planned time: unscheduled
- Duration: 1:45-2:00
- Distance: ~45-55 km
- Intensity: Z2 warm-up, then Z4 controlled
### Objective
Controlled threshold re-entry.
### Workout plan
- 25-30 min progressive warm-up
- 3 x 8 min at controlled threshold, smooth and seated
- 4 min easy between efforts
- Finish with 30-40 min Z2
- No pushing beyond controlled threshold breathing
### Supporting work
- 10 min activation before the ride if useful: glute bridge, dead bug, calf isometrics
- 10 min mobility after the ride
### Recovery
- Light afternoon only
- Avoid stacking errands or extended time on feet
### Fueling
- 70-140 g carbohydrate before the ride depending on meal timing
- 90 g carbohydrate per hour during the session
- 30 g protein plus 80-90 g carbohydrate post-ride
### Notes
This session should feel like controlled pressure, not a test.
Proposed activity schema
Each activity should use the same core fields.
Required fields:
- activity title, expressed as the
##section heading and not including the date Title, matching the activity heading textKind
Usually required when relevant:
Id, format:YYYY-MM-DD-<title-tokenized>SurfaceDistanceIntensityLocationDisciplinePriorityPlanned timeDuration
Optional metadata fields when relevant:
TrainingPeaks ID- other external reference IDs
- additional item flags, notes, or data fields needed for durable reference
ID rule:
- the
Idvalue should be built from the file date plus a tokenized form of the activity title - example:
Tempo durability ridebecomes2026-04-16-tempo-durability-ride - use lowercase words joined by hyphens
Required content sections:
ObjectiveExecutionsection, usingWorkout planfor workouts andEvent detailsfor non-workout eventsNotes
Conditionally required sections:
Supporting workRecoveryFuelingConstraints
Standard enum suggestions:
Kind values:
workoutstrengthrecoveryeventracetravelrest
Discipline values:
bikemtbcxstrengthmobilityrecoverytraveloff-bike
Priority values:
keysupportmaintenanceoptionalinformational
Planned time values:
unscheduled- explicit clock time when known
- coarse timing such as
morning,afternoon, orevening
Start-time rule:
- a planned start time is not required by default
- whoever or whatever creates the calendar item may include a start time when one is known or useful
- for most training activities, start time will often be left to the athlete to manage
Candidate calendar item types
The calendar should support more than standard training sessions. Useful item types that may belong in the calendar, and may later be mirrored into TrainingPeaks or another coaching system, include:
- on-bike workouts
- strength sessions
- mobility or recovery sessions when they are meaningful standalone calendar objects
- race days
- pre-rides
- testing sessions
- travel days
- transfer or arrival events before races or camps
- full rest days
- medical, physio, or treatment appointments when they materially affect the athlete day
- equipment-related events, such as bike fit, mechanic appointment, or race-bike pickup, when they are operationally important
- administrative or logistics reminders that should appear in the athlete training calendar, if the system chooses to represent them there
The proposal does not decide which of these items should exist on a given day. It only defines how such items should be represented once a process decides to store them in the calendar.
These examples are illustrative only.
The calendar layer and the calendar-manager skill do not decide whether a gym session, race, travel event, rest day, physio appointment, or other item should exist as a calendar object.
If an item is provided for creation, the calendar system should store it using the required format and template.
Heading structure
Use this heading hierarchy inside each daily file:
# YYYY-MM-DDfor the date file heading## Activity titlefor each activity or event in that day### Objective,### Workout plan,### Event details, and other activity subsections
Do not add a wrapper heading such as ## Activities above the actual activity entries.
Do not put the date into the activity heading text.
Keep the Title field aligned with the activity heading text.
Activity variants
The format should stay consistent, but the middle content should vary by activity type.
Workout activity
Use for on-bike sessions, run sessions, gym sessions, and other training tasks.
The calendar layer does not decide when a gym session should exist as a separate activity. If a gym session is prescribed as a calendar item, it should be created as provided.
Sections:
- header fields
### Objective### Workout plan### Supporting work, when needed### Recovery, when needed### Fueling, when needed### Notes
Event activity
Use for travel, race day, pre-ride, rest day, testing appointment, physio, or other planned non-training calendar objects.
The calendar layer does not decide when these items should exist. If they are provided for creation, they should be represented using the event format.
Sections:
- header fields
### Objective### Event details### Constraints, when needed### Recovery, when needed### Fueling, when needed### Notes
Rest day activity
A rest day should still have a daily file and should usually include one explicit rest activity rather than leaving the file empty.
That makes the calendar complete and unambiguous.
Rules for splitting versus embedding
To keep the calendar usable, define one clear rule:
Create a separate activity only when it should be independently visible, editable, or publishable.
Examples:
On-bike sessionplusLower-body strength sessionshould usually be two activities.Travel to race venueplusPre-ride openershould usually be two activities.Activation before the rideshould usually stay inside the bike activity.10 min evening mobilityshould usually stay embedded unless explicitly scheduled as a separate calendar object.
Revision model
The calendar layer should support both:
- creation of new daily files
- revision of existing future daily files
Revision rules should stay structural and content-focused:
- edit the affected daily file or files directly
- preserve unaffected day files
- replace stale activity details instead of appending contradictory versions
- treat the calendar as the current planned state, not as a revision-history ledger
Archive handling rules:
- when a calendar file should be retained for reference but removed from the active calendar set, it may be moved into
athlete/calendar/archives/ - archived files should not be treated as active daily calendar files by default
- any process that scans the active calendar should exclude
archives/unless archived reference material is explicitly requested - if an archived file is moved into
calendar/archives/and a file with the same name already exists there, the moved file should be renamed with an incremented index, for exampleYYYY-MM-DD-1.md
If revision history is needed later, it should live outside the calendar content unless a small standardized Revision note field is adopted explicitly.
Proposed skill
calendar-manager, required
Purpose:
- create calendar day files under
athlete/calendar/YYYY-MM-DD.md - add activities or events to a day file
- edit existing activities or events without breaking the format contract
- delete activities or events when they should be removed from the active calendar
- move activities or events when they belong on a different day
- create, revise, and maintain the canonical template structure for calendar files
This skill should be the single calendar-layer skill for normal calendar operations. It should consolidate the responsibilities that would otherwise be split across separate creation, revision, move, delete, or template-management skills.
This skill should not decide whether a given item ought to exist. It should only apply the expected file format, naming convention, archive behavior, and item template when instructed to create or revise calendar content.
Core operations this skill should cover:
- add an activity to an existing daily file
- create a new daily file and add one or more activities
- edit activity metadata or content sections
- delete an activity from a daily file
- move an activity from one daily file to another
- rewrite a future daily file when the plan changes materially
- move retired day files into
calendar/archives/when they should be preserved but ignored in active planning
Minimal implementation recommendation
The smallest useful first implementation is:
- create the new
calendar-managerskill - standardize one daily calendar template with activity variants
- define the add, edit, delete, and move rules for calendar items
- test the pattern on representative calendar entries without introducing athlete-specific rules into the contract
- keep the skill unified unless a real operational need appears to split it later
That gives the system a clean planning object model without overbuilding the first version.
Recommended template behavior
The template should enforce these rules:
- one
# YYYY-MM-DDheading per file - one
## Activity titleheading per activity - one fixed field block per activity
- one fixed detail-section pattern per activity kind
- activity titles should not contain the date
- each activity should include
Id:andTitle:metadata lines - the
Id:value should use the date plus tokenized title format
The active template contract applies to files in the live calendar/ directory.
Files moved into calendar/archives/ should be preserved as reference artifacts and generally ignored during normal active-calendar operations.
This structure is rigid enough for automation but still comfortable for human editing.
Example multi-activity day
# 2026-04-16
## Tempo durability ride
- Id: 2026-04-16-tempo-durability-ride
- Title: Tempo durability ride
- Kind: workout
- Discipline: bike
- Surface: road
- Priority: key
- Planned time: unscheduled
- Duration: 2:00
- Distance: ~50-60 km
- Intensity: Z2 with sustained Z3 work
### Objective
Tempo durability support.
### Workout plan
- 30 min warm-up in Z2
- 2 x 20 min steady tempo
- 8 min easy between efforts
- Stay seated and rhythm-based
- Finish the remaining time in Z2
### Recovery
- Elevate legs after the ride
### Fueling
- 75 g carbohydrate per hour on the bike
### Notes
This is a key ride session.
## Lower-body strength session
- Id: 2026-04-16-lower-body-strength-session
- Title: Lower-body strength session
- Kind: strength
- Discipline: strength
- Surface: gym
- Priority: support
- Planned time: after ride
- Duration: 40-45 min
### Objective
Support force production and strength rhythm without compromising the next day.
### Workout plan
- Trap-bar deadlift 3 x 5 @ 72-77% 1RM, cap at RPE 6-7
- Goblet squat or short-ROM squat 3 x 5-6 @ RPE 6-7
- Romanian deadlift 2 x 6 @ 65-70% 1RM, cap at RPE 6
- Supported split squat 2 x 5 each side @ RPE 5-6 if ankle response remains calm
### Recovery
- If the ankle grumbles during loading, reduce split-squat volume first
### Notes
Primary strength exposure of the week.
Risks to avoid
1. Turning calendar files into mini strategy documents
If future activity files become full of block rationale and coaching philosophy, they will become hard to maintain and harder for tools to revise.
2. Embedding external-system details
If raw integration instructions, publish-state chatter, or sync notes are written directly into the calendar content, the files will become cluttered and brittle.
Durable reference metadata, such as a TrainingPeaks ID, is not the problem by itself. The real risk is storing tool-specific operational instructions instead of stable item data.
3. Over-fragmenting activities
If every warm-up, activation, and mobility item becomes its own activity, the calendar will become noisy and external calendar publishing will be poor.
4. Keeping the format too loose
If each day file is freeform prose, other agents and processes will not be able to revise it safely.
5. Treating archived files as active calendar inputs
If normal calendar readers or writers do not ignore calendar/archives/, archived files may be mistaken for active planning artifacts and create duplicate or stale downstream behavior.
Resolved decisions
- planned start times are optional by default and should be included only when whoever creates the calendar item chooses to provide one
- the calendar layer does not decide whether gym sessions, races, travel events, rest days, or other operational items should exist as calendar objects; it only stores them when instructed
- Markdown is the canonical contract; no separate machine-readable mirror is required by this proposal
- archived files should retain the same content structure when moved into
calendar/archives/; if a same-name file already exists there, the moved file should be renamed with an incremented index such asYYYY-MM-DD-1.md
Recommendation
Adopt the new athlete/calendar/YYYY-MM-DD.md layer as the canonical per-day planning object model.
Implement it with:
- one daily file per date
- one or more neutral activities per file
- fixed Markdown structure with title-based activity headings, explicit
IdandTitlefields, and stable item IDs when needed - no strategy prose, no implementation/process instructions, and no execution logging
- optional durable reference metadata when needed, including external IDs such as a TrainingPeaks ID
Keep the proposal scoped to the calendar layer itself:
- how calendar items are structured
- how they are stored
- how they are revised
- how the
calendar-managerskill is responsible for adding, editing, deleting, moving, and maintaining them
Do not use this proposal to define who plans the items, who approves them, or what upstream logic decides which items should exist.