propose_workout
Generate a structured workout proposal for a route or time budget, with warm-up, intervals, and cool-down based on Garmin zones. Returns a preview for approval; writes to Garmin only after confirmation.
Instructions
Build a structured session for the athlete's route or time budget and file
it as a PROPOSAL - warm-up, work reps with targets, recovery jogs, cool-down -
sized so the whole thing adds up to the route. Targets come from the
athlete's own Garmin zones; anything not measured is listed as an assumption.
Use when the athlete asks for a workout ("plan me intervals for my 10 km",
"an easy 45 minutes", "a threshold session") or when the readiness verdict
calls for a different session than the one on the calendar.
Kinds: easy/long (one capped step), threshold (Z4 reps), vo2max (Z5 reps),
steady (>= 12 min even effort at threshold - the only shape Garmin measures
VO2max from). day defaults to today.
Returns the preview and a proposal id. NOTHING is written to Garmin: show
the preview, and only if the athlete says yes call apply_workout with the
id. On an impossible request (route too short) returns why, not a session.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | ISO date YYYY-MM-DD. Omit for the latest. | |
| kind | Yes | ||
| name | No | Workout name on the watch. Default: kind and structure, e.g. 'VO2max 4x4 min'. | |
| distance_km | No | Route length in km, e.g. 10 for a fixed 10 km loop. Give this OR duration_min. | |
| duration_min | No | Session length in minutes. Give this OR distance_km. | |
| replaces_schedule_id | No | A calendar entry this session REPLACES (the number after 'schedule' in get_training_readiness). Applying unschedules it first; the workout stays in the library. Use for the readiness swap: an easy run instead of the hard session the calendar had on a red or amber day. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes |