Skip to main content
Glama

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

TableJSON Schema
NameRequiredDescriptionDefault
dayNoISO date YYYY-MM-DD. Omit for the latest.
kindYes
nameNoWorkout name on the watch. Default: kind and structure, e.g. 'VO2max 4x4 min'.
distance_kmNoRoute length in km, e.g. 10 for a fixed 10 km loop. Give this OR duration_min.
duration_minNoSession length in minutes. Give this OR distance_km.
replaces_schedule_idNoA 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

TableJSON Schema
NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full weight and delivers: NOTHING is written to Garmin, only a preview plus proposal id is returned, day defaults to today, impossible requests return a reason rather than a session, and targets derive from the athlete's Garmin zones with unmeasured items listed as assumptions. This is exceptional transparency for an unannotated tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence earns its place: purpose, target source, usage triggers, kind definitions, default, return value, safety guarantee, and failure mode. The structure front-loads the core action and then layers behavioral context without redundancy. It is compact despite conveying a large amount of decision-relevant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter tool with an output schema, the description covers the full lifecycle (proposal, preview, apply, failure mode, zone assumptions, readiness swap). The only notable gap: both distance_km and duration_min are optional, and the description does not state what happens if neither is provided. This is minor but prevents a perfect score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is high at 83%, so baseline is 3. The description adds real value for the one undocumented parameter, kind, by defining easy/long, threshold (Z4 reps), vo2max (Z5 reps), and steady (>=12 min at threshold, the only shape Garmin measures VO2max from). It also clarifies the day default. This pushes it above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens by naming a specific verb ('Build') and resource ('a structured session ... file it as a PROPOSAL'), and then situates it against the sibling workflow by saying nothing is written to Garmin and apply_workout is the follow-up. This strongly differentiates it from apply_workout, propose_week, and analyze_workout without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit trigger conditions: 'Use when the athlete asks for a workout' with concrete examples, plus the readiness-verdict swap scenario. It also routes to apply_workout only after athlete approval. It does not explicitly say 'don't use this for weekly planning (propose_week)' or other exclusions, but the alternative is clearly identified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.