- Brand
- Unknown
- Category
- Pending
- Primary Subcategory
- Endurance Sport Training Planners
Integration details
Description
Connects ChatGPT to an IntervalCoach account for cycling, running and swimming training. What it does: - Reads the training plan, today's planned session and the readiness assessment behind it. - Reads recovery data (HRV, resting heart rate, sleep), completed activities with their analysis, and fitness trends. - Compares past planned sessions with what was done. - Creates, moves, rescales and edits workouts on the training calendar, adds races, and marks days as sick, injured or on holiday. - Shows the weather forecast for an upcoming outdoor session. Who it is for: endurance athletes who train with IntervalCoach and want to ask about or change their training in conversation. Limitations: - Works only on the signed-in athlete's own data; it cannot read or change anyone else's. - Changes to the calendar or settings are confirmed before they are applied. - It does not give medical advice, diagnose symptoms or recommend medication. - It cannot set threshold values such as FTP; those are set in the athlete's settings. - Weather forecasts reach about ten days ahead.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Category
- Pending
- Primary Subcategory
- Endurance Sport Training Planners
- Secondary Subcategories
- None listed
- Brand
- Unknown
- Access
- Account required
- First tracked
- 2026-11-05
- Tool count
- 31
- Market
- US
The broad Category that contains the Primary Subcategory.
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
Your score is coming
ChatGPT now suggests Plugins on its own when they match a user's request.Your Plugin Discovery Score measures how often yours appears, and it will show here as soon as it’s ready.
What discovery looks like

Get alerts for IntervalCoach
Get updates when IntervalCoach’s Discoverability Score or category rank changes.
Competing in ChatGPT Endurance Sport Training Planners
View Category31 tools agents can invoke
Full breakdown of a single completed activity: power, HR, zones, TSS, intervals, duration. Resolve the activity yourself ("latest" or via searchActivities / getDailyState) — never ask the athlete for an ID. A planned FTP or ramp test carries `testResult`, the report the athlete sees on the activity page (result, delta vs their FTP, setting, validity checks, freshness, earlier results, their use/keep choice, next test). For "how did my test go?" quote `testResult` and never recompute the FTP from `bestEfforts`; when `valid` is false there is no new FTP, say which check failed.
getActivity
Remove ALL scheduled workouts in a date range as ONE approved operation, optionally only those whose name contains a given text. This is the right tool when the athlete asks for a bulk clear in their own words — migrating from another training platform ("delete all the Athletica sessions"), or clearing a stretch of calendar before a rebuild. Use it INSTEAD of repeated the single-workout tools (moveWorkout, swapWorkouts, scaleWorkout, convertWorkoutTargets, setWorkoutIndoor, deleteWorkout) deletes, which are capped per turn on purpose. Races (A/B/C) are kept unless you set includeRaces: true. Set it ONLY when the athlete explicitly asked for races to be removed ("delete all my races"), and name every race in the range (name, priority, date) in your reply BEFORE the call, so the one approval covers exactly those races. Never set it for a workouts-only clear; a single race is still createRace / updateRace / deleteRace. Do NOT clear first when the athlete wants their plan REPLACED by specific sessions (a block, a week you designed together): create each session with replaceWorkoutsOnDate: true, which swaps the planned session on that day in the same approved write. A clear followed by approval-gated creates lets the plan refill those days first, and every create is then refused. State the scope (dates, and the name filter if any) in your reply BEFORE calling, so the athlete knows exactly what they are approving. Afterwards, report the real count returned — never a guess.
clearWorkouts
Retrieve stored coaching insights about the athlete (preferences, constraints, injury notes, schedule patterns). Check this before asking the athlete something they may have already told you.
getCoachingMemory
Start a support conversation with the IntervalCoach team FOR the athlete, in their name. The athlete approves the exact message first; support replies in the in-app messenger and by email. USE THIS when: an action failed and the error text does not explain it (a calendar write that failed for no stated reason, a rebuild that did not run, data that looks wrong); the athlete reports something broken ("my plan creates no workouts", "the app shows the wrong number"); or the question is about the account, subscription, invoices or refunds, which you cannot act on. Do NOT use it for coaching questions, for anything a tool can do, or after ONE hand-off already went out this turn. Before calling, tell the athlete in one sentence what you are sending and why. Never for linking or pairing a completed activity to a race or a planned workout: neither you nor the team can do that, pairing happens in Intervals.icu. Tell the athlete to open the activity on Intervals.icu and set its sub-type to Race; that is what marks it as the race for us. `summary` is the problem in the athlete's own words (their language), 1-4 sentences; `whatWasTried` lists ONLY tools you actually called this turn and what they returned, never a check you did not make (the hand-off records the tools called this turn, so support sees them); `errorText` is the verbatim error from a failed tool result. An athlete saying a rebuild did not happen, has not gone through, or that nothing changed is NOT a broken action: call `getUpcomingWorkouts` first (it reports whether a rebuild is running and how far along), and hand off only when it reports no rebuild running and the calendar is unchanged. This tool refuses a rebuild complaint made without that read. LOOK BEFORE YOU HAND OFF. A problem report with nothing read in this conversation is refused: read what the complaint is about first (calendar → getUpcomingWorkouts, an activity → searchActivities/getActivity, readiness or signals → getDailyState, the plan → getPlan), and for anything about a device, Garmin, Zwift, Strava, syncing or where something is in the app, call searchKnowledge first. When the athlete's description is vague ("laps don't sync", "it's wrong"), ask one specific question before handing off. When a tool result already states the cause (a Strava-sourced empty activity, a lost calendar permission, a rebuild skipped for lack of training data), that IS the answer: explain it and give its fix; a hand-off is refused until you have. `topic`: "problem" (default) for something broken or wrong; "account" for subscription, billing, invoices, refunds or cancelling (but give the cancel path from the system prompt first: cancelling is self-serve); "feedback" for a feature request or general feedback. One conversation keeps one support thread: a later hand-off in the same chat is added to it.
contactSupport
Change a planned workout's target unit (heart rate, power or pace) in place, keeping its structure ("make it heart-rate based"). Give targetMode and optionally date (default today).
convertWorkoutTargets
Add a race or goal event (priority A, B or C) to the calendar. Requires name, date, priority and sport. Look the race up with lookupRace first so distance and course come from the catalog. startTime is the clock time the race starts ("14:20"); targetTime is the finish time aimed for ("3h30m").
createRace
Create a workout and add it to the calendar. Two modes: leave `structure` empty for a template-based workout (give sport + durationMinutes + optional workoutType/instructions); provide `structure` (an explicit list of segments) to build an exact interval structure, e.g. "2×30min @ 95%". Use structure whenever the athlete specifies a precise set/interval layout, or asks for swim equipment (pull buoy, paddles, fins, kickboard) — templates have no steps for it; write the equipment into those steps' labels. The result carries `workout.tss`, the load the created session actually adds up to (absent for HR-zone, Strength, Walk and Hike sessions): quote that when you mention its TSS, never a number you estimated or passed in yourself. IMPORTANT — pick a duration appropriate to the SPORT, never copy a cycling session's minutes onto a run or swim. Runs are typically 30-75 min (only exceed ~90 min for an explicit long-run request); swims 30-75 min; rides can run long (up to 3-4h). When adapting a bike week to running (e.g. the athlete is travelling without a bike), scale by effort/training load, NOT 1:1 by minutes — a 3-hour ride becomes roughly a 45-75 min run, not a 3-hour run. Strength, Walk and Hike are supported too, but as TEMPLATE-ONLY sessions: pass sport plus an optional durationMinutes and do NOT pass `structure` (they have no interval/pace DSL). A Strength session uploads as a real WeightTraining workout with an exercise list — use it whenever the athlete asks for a strength/gym/home workout, never substitute a Run. FITNESS TESTS: when the athlete asks for or agrees to a fitness test, you MUST pass the matching test key as workoutType — lthrTest (LTHR/lactate threshold HR test, Ride or Run; the measured result is saved to their settings automatically afterwards), ftpTest (FTP test, Ride: runs in the athlete's own protocol from their settings, ramp or 20-minute; for an explicitly requested 20-minute test also say "20-minute" in instructions), rampTest (an explicitly requested ramp test, Ride), runTimeTrialTest (threshold-pace time trial, Run), swimCssTest (CSS test, Swim). NEVER schedule a regular workout and present it as a test; if no listed test fits, say a template for that test does not exist yet. ACTIVITIES WE CANNOT COACH: when the athlete wants something on the calendar that IntervalCoach has no coaching for (a tennis match, a football game, a ski day, a dance class), do NOT substitute a proxy sport and do NOT generate a template for it. Call with `placeholder: true` plus `activity` (what it really is: tennis, padel, football), `name` (the athlete's own words for it), `date`, `durationMinutes` and `targetTSS`. That blocks the time out with no structure and no targets at all, and the week is planned around its load. A placeholder is only for activities we cannot coach — for Ride/Run/TrailRun/Swim/Walk/Hike/Strength use the normal modes above. WRONG-FEELING TARGETS: if the athlete says the paces/powers are still too fast or too slow AFTER you already regenerated the session, do NOT regenerate again — targets are percentages of their threshold settings (threshold pace / Critical Speed, FTP), so the anchor is off, not the workout. Check getPerformanceProfile (includeZones: true), explain which threshold drives the targets, and offer to fix the anchor (updateSettings pacePreference/ftpPreference, or Settings → Zones & Thresholds).
createWorkout
The athlete's current state for today: fitness (CTL/ATL/TSB), the 0-100 readiness score (day-anchored; `state` "provisional" = morning forecast) with its per-factor rows vs the athlete's own 30-day baseline, wellness snapshot (HRV, resting HR, sleep), training phase, goal, and recent activities. Cite the readiness score exactly and explain it via its non-neutral factors — call it the "readiness score", never "recovery score", and never cite a device recovery percentage. Use this as the default "how am I / what should I do today?" read. An `availability` block means the athlete is already marked SICK or INJURED for those dates: it is authoritative, so never say they are not marked and never offer markUnavailable for a range it covers. `wellness.slowDrift`, when present, is what the fatigue warning about a slow HRV drop / resting-HR rise is built on: medians of the last `recentWindowDays` against the `referenceWindowDays` before them, a multi-week decline versus the previous two months. It is a different comparison from the readiness score's 30-day baseline, so both can be true at once; quote its numbers and `checkWindow` (days off of `days`, warning needs `threshold`) when asked about that warning. Set include to expand: "signals" adds the active training constraints (illness/load/fatigue) the system applied, "briefing" adds the persisted long-form daily briefing if one exists, "wellnessTrend" adds 7-day wellness averages and baseline deviations, "connections" adds what is connected to Intervals.icu (Garmin, Strava, Zwift…), which of those deliver activities, whether Strava is the only route in, and which devices receive planned workouts, with `findings` to tell the athlete. Include it for a missing or empty activity, a workout not reaching a watch or app, or "how do I connect my Garmin".
getDailyState
Remove a stored coaching insight by its key (e.g. when it is no longer true).
deleteCoachingMemory
Remove a race from the calendar. Give eventId (from getPlan include "goal"), and its date when known.
deleteRace
Delete one planned workout. Give date or eventId; eventId is required when the day holds more than one session. reason="unavailable" when the athlete cannot train that day: the day is then also kept free so the plan does not fill it again. Races are deleted with deleteRace.
deleteWorkout
Change ONLY the warm-up and/or cool-down (or only the main set) of workouts already on the calendar, keeping every other section exactly as it is, in place. Use it for "change my warm-up", "make the cool-down 15 minutes", "no ramp in the warm-up", "add openers to tomorrow's warm-up", and for a change across several sessions ("restyle the warm-ups for the rest of my week") in ONE call (at most 7 sessions): eventIds when every session gets the same steps, edits when each gets its own (e.g. keeping each warm-up's length). One call means one approval card. Never rebuild a whole session with createWorkout for a change to one section. Give eventId (or eventIds) from getUpcomingWorkouts, or date (+ sport). Send only the sections that change, each as its new steps: {minutes (or seconds / meters), target: {kind, value | low+high, ramp}, label}, or a repeat block {reps, steps: [...]}. Target kinds: pct-ftp, watts, power-zone (ride; also run/row power), pct-pace, pace-zone (run, swim), hr-zone, pct-hr (% max HR), pct-lthr, freeride (ride: out of ERG), none (by feel). Zones are numbers (2 = Z2). A ramp is low+high with ramp: true. When the result refuses a session (its structure cannot be edited section by section), tell the athlete why and do NOT rebuild it with createWorkout. If a session has no warm-up/cool-down section of its own, the result says so: ask the athlete before calling again with addMissingSections: true.
editWorkoutSections
Look up a real race in the IntervalCoach race catalog by name or place, to get its verified date, distance, elevation gain, location and official website. USE THIS FIRST whenever the athlete names a specific race you do not already have details for ("I'm riding the Marmotte in July", "how should I taper for Roth?", "what's the climbing like in the Vätternrundan?") — BEFORE calling `createRace / updateRace / deleteRace`, so the race gets created with the real distance and course profile instead of asking the athlete to type them in. Returns up to `limit` upcoming matches, each tagged `confidence`: "exact" (the name matches), "likely" (a strong fuzzy match, e.g. a spelling variant), "possible" (a weak or location-only match). CRITICAL: treat this as the ONLY source of truth for a race's facts. If it returns no matches, say plainly that the race is not in the catalog and ASK the athlete for the distance/date — never fill in a distance, elevation, date or URL from your own memory, and never present a "possible" match as confirmed (name it and ask "did you mean X?"). Covers approved, upcoming races only, so a past race or a very local event may legitimately be absent.
lookupRace
Mark the athlete as sick, injured, or on holiday for a date range by creating an availability entry on their Intervals.icu calendar. USE THIS whenever the athlete reports being ill or injured — the daily coach only respects these calendar entries, NOT coaching memories. A memory alone will not stop tomorrow's training plan. A problem limited to ONE sport is not unavailability ("sore knee, can't run, cycling is fine", "shoulder hurts when swimming"): a SICK/INJURED entry stops ALL training and starts a return-from-illness ramp afterwards. Pass the sports they can still do in stillAbleToTrain and the entry is refused; instead remove the affected sport from the schedule days with updateSettings (trainingSchedule.<day>.allowedSports) and save a coaching memory with the reason. The start date may be today or a few days in the past ("I've been sick since Tuesday"). If the athlete doesn't know how long they'll be out, mark a conservative range (e.g. 3-4 days for illness) and tell them to say when they're better so you can adjust it.
markUnavailable
Move a planned workout to a different day ("move today's ride to Saturday"). Give fromDate and toDate (YYYY-MM-DD); add eventId (from getUpcomingWorkouts) when fromDate holds more than one session. To exchange the sessions on two days use swapWorkouts, never two moves. Races are moved with updateRace.
moveWorkout
Current ability: cycling peak powers (5s/1min/5min/20min), FTP, W', strengths/weaknesses, and season-vs-last-season power comparison (for "am I stronger than last year?"); or running Critical Speed, D', best efforts. Set includeZones to add power/pace/HR zone boundaries.
getPerformanceProfile
Trends over time. Pick a view: "fitness" (eFTP/CTL/TSS/HRV/TID/EF over a range), "weight" (body-weight trend), "workouts" (recent workout effectiveness + progressive overload), "patterns" (best days, recovery spacing, recurring patterns), "benchmarks" (how the athlete ranks vs peers — Max only).
getPerformanceTrends
Planned-versus-done for a PAST window: every IntervalCoach session that was on the calendar, whether it was done (paired or same-sport activity that day), done as another sport, or skipped, with completion rate and actual-vs-planned load per session type (endurance/tempo/threshold/vo2max/…), per sport and per ISO week. Use for "how is my adherence", "did I do my threshold sessions", "planned vs completed", "how did my block go", and year-over-year adherence comparisons (call it once per period, e.g. this year and last year, and compare the buckets). Only sessions before today count; upcoming ones are excluded and reported in `futureExcluded`. A `coverage` block says how many activities in the window were unreadable Strava-stripped shells: when it flags a year as unreliable, say the comparison for that period cannot be trusted rather than reporting its numbers as training history.
getPlanAdherence
The athlete's personal recovery picture: per-stimulus recovery half-lives, when they're ready for the next quality session of each type, today's position vs their own curve, PLUS 7-day wellness (HRV/RHR/sleep) trend and baseline deviations. Use for "when can I go hard again?", "am I recovered?", "is my HRV/sleep degrading?".
getRecovery
Reshape the weekly plan in the background (sessions are written one at a time, roughly two minutes each: a week is minutes, an empty month around 40 minutes). By default non-destructive: committed sessions this week are preserved or adapted in place, never wiped. Only use when the athlete explicitly asks to regenerate, and NOT right after updateSettings (that already adapts the plan). rebuild: true runs the full Rebuild, the same as the Rebuild button on the Training Plan page: upcoming IntervalCoach sessions are deleted from today and planned again around the current settings, while sessions the athlete created or asked you to build, races and completed activities stay. Use it when the calendar does not match the plan or the schedule (a missing session, a sport on the wrong day, a week that never filled) and the athlete wants it fixed now; say before the card that upcoming sessions will be replaced. It counts toward the 3 Rebuilds per rolling 24 hours. releaseClearedDays: true (only with rebuild) also plans the days the athlete emptied by removing a session; use it only when getPlan or getUpcomingWorkouts lists keptFreeDays and the athlete wants those days planned. fromScratch: true (only with rebuild) also clears older IntervalCoach sessions a normal Rebuild keeps and sessions you built for the athlete; offer it when sessions still ignore the athlete's schedule after a normal Rebuild, and say what it clears. The reason is a log note and steers nothing: which sport each day gets follows the athlete's recent training and each day's allowedSports in trainingSchedule. To shift the mix toward one sport, change allowedSports per day with updateSettings, and never promise a sport mix a regenerate cannot deliver. To get fewer or more of a KIND of session ("too many recovery spins", "more long rides"), first save it with saveCoachingMemory, category workout_preference, which the plan build reads; then regenerate if the athlete wants the change now. Sessions already on the calendar change only when the plan rebuilds them.
regeneratePlan
Store a durable coaching insight (a stable preference, constraint, or pattern) so future conversations remember it. Optionally scope it to a sport / intensity / days / environment, or set an expiry for temporary facts. IMPORTANT — a memory is context for YOUR OWN reasoning in later conversations. It does NOT change what the planner schedules, which days get workouts, or any automatic behaviour. If the athlete wants the SYSTEM to stop or start doing something, the change must go through the tool that owns it: fitness tests → updateSettings ftpTestFrequency ("never"), but only to stop testing altogether; a single date ("not this Saturday") is a the single-workout tools (moveWorkout, swapWorkouts, scaleWorkout, convertWorkoutTargets, setWorkoutIndoor, deleteWorkout) delete on that date instead; which days they train → updateSettings trainingSchedule; illness/injury/holiday → markUnavailable; one-off dates → updateSettings blackoutDates. Call that tool, and save a memory alongside it only as a note to yourself. A specific session format the athlete agreed (an interval structure, a work total, a rotation that changes week by week) is NOT something the planner reads from memory: place those sessions on the calendar yourself with createWorkout (structure, and replaceWorkoutsOnDate for the planned session on that date) for each date it applies to. Rebuilds keep sessions placed that way. Only confirm the sessions you actually placed; for later weeks, say plainly that they are not on the calendar yet and offer to add them. NEVER tell the athlete that saving a memory will stop, prevent, or instruct the system to do anything — say what you actually changed, or say plainly that you cannot change it and point at the Settings control.
saveCoachingMemory
Make a planned workout easier or harder by scaling its intensity targets; its duration never changes. percentage is how much to change BY (20 with "easier" = targets × 0.8), 1-50. A request about duration ("make it an hour") is not a scale: use createWorkout with durationMinutes and replaceWorkoutsOnDate.
scaleWorkout
Find past activities by filters (sport, training stimulus, recency, TSS, duration, distance), by the name the athlete recorded them under (nameQuery), or by likeness to one session (similarTo). Returns a summary list, not full detail; use getActivity for a deep dive on one.
searchActivities
Answer product + training-concept questions. Searches the Help Center, training glossary and blog for `query`; if `metric` is given, also returns that metric's definition plus the athlete's current value (CTL, ATL, TSB, FTP, eFTP, ramp rate, TSS, IF).
searchKnowledge
Switch a planned session between indoor (trainer, Zwift, treadmill) and outdoor in place, so its targets resolve against the indoor or outdoor threshold. Give date or eventId, and indoor true or false.
setWorkoutIndoor
Exchange the planned workouts on two days in one call ("swap Tuesday and Thursday"). Give fromDate and toDate (YYYY-MM-DD); eventId / otherEventId only when a day holds more than one session.
swapWorkouts
The training plan: phases, weekly TSS targets vs actuals, CTL projection, taper timing, and why each week's TSS target is what it is (tssBase plus per-week tssSteps, explained in tssStepsLegend): use it for "why is this week 200 TSS and next week 400?". Set include "goal" to add goal-event progress and on-track/behind reasoning, "pacePlan" (with eventId) to add a cached race-day pacing strategy.
getPlan
The athlete's scheduled workouts for the next N days (their plan ahead). Use for "what's coming up?" / "what's tomorrow?". Each workout carries `owner`: "plan" (the weekly plan wrote it), "plan-moved" (a plan session the athlete moved), "requested" (built on the athlete's request, e.g. through you), "intervalcoach" (written by IntervalCoach, no plan marker), or "other" (NOT IntervalCoach: the athlete made it in Intervals.icu, or another app or coach put it there). The calendar shows everything on Intervals.icu, the Training Plan page only IntervalCoach's sessions, so an "other" session explains a difference between them. Never delete or change an "other" session as a plan conflict without asking the athlete whose it is; rebuilds and day settings do not touch it.
getUpcomingWorkouts
Change a race already on the calendar: date, priority, distance, target time or any other field. Give eventId (getPlan include "goal" lists every goal race with its eventId) and only the fields that change.
updateRace
Update training settings/preferences and availability. Pass any of the preference fields to change them (schedule, whether a weekly plan is generated, how the season is divided into phases, sessions/week, FTP/pace method, workout targets, fitness-test frequency, whether workouts from their Intervals.icu library are used, whether workout analyses are added to activity descriptions on Intervals.icu and Strava, sport focus, diet, coaching instructions, language). CANNOT set an FTP / threshold VALUE: `ftpPreference` only chooses WHICH value is used (the athlete's manual FTP, or our estimated eFTP) — it does not write a number. Nothing in Coach+ can set ANY threshold value — FTP, eFTP, LTHR, threshold pace, Critical Speed (CS) or CSS. They all live in the athlete's Intervals.icu profile. If they ask you to change one to a number, say plainly that you cannot and point them at Settings → Zones & Thresholds there (setting ftpPreference or pacePreference to "manual" then makes the plan follow the value they set). NEVER report a threshold as updated, and NEVER record the number in coachingInstructions as a substitute — that write is rejected, and it would change no target anyway. A one-week or one-off absence ("I'm away Wednesday and Friday this week") is NOT a schedule change: trainingSchedule turns those weekdays off EVERY week from now on. Use blackoutDates for specific dates, or markUnavailable for illness/injury/holiday. To stop scheduling fitness tests, set ftpTestFrequency to "never" — a coaching memory does NOT stop them. Use that setting ONLY when the athlete wants automatic tests to stop altogether: it is permanent and applies to every future test. A request naming a date or a single occasion ("no ramp test this Saturday", "skip the test this time") is NOT that — delete that day's test with the single-workout tools (moveWorkout, swapWorkouts, scaleWorkout, convertWorkoutTargets, setWorkoutIndoor, deleteWorkout) and leave the setting alone. Either way, say which one you are doing before the card goes up: an athlete approving a permanent change must know it is permanent. WEEKLY availability ("I can't train Mondays", "I commute Tue, can train Wed-Fri", "my long ride is Saturday") MUST go through trainingSchedule — the planner reads day availability ONLY from there; writing it into coachingInstructions/memory does NOT change which days get workouts. Use blackoutDates + blackoutAction only for specific one-off dates. For illness/injury/holiday use markUnavailable instead — that creates the calendar entry the daily coach respects. A non-race training goal (General Fitness, Return to Sport, Off-Season Base, Weight Management, Speed/Power Block, FTP/Threshold, Getting Started, Maintenance, Long Walk) is removed with clearTrainingGoal: true. It has no event id, so createRace / updateRace / deleteRace and any race-delete action do NOT apply to it, and its absence there is not a reason to tell the athlete it cannot be removed. The athlete can also do it themselves at Settings → Goals & Training → Custom Goal → Clear. Changes adapt the plan automatically — do not also call regeneratePlan.
updateSettings
Weather forecast for an upcoming outdoor workout (or a date) at the athlete's location. Use for "what's the weather for my ride?", deciding whether to move/swap a session or go indoors (rain, heat, wind), or picking the best day/time to train outdoors. Returns temperature + feels-like, an hour-by-hour strip from the start time, wind speed + direction, rain chance/amount, and UV. Forecast horizon ~10 days. Pass eventId (from getUpcomingWorkouts) to pin the exact date + start time. Location: lat/lon you pass, else the athlete's last-known device location, else where their latest outdoor activity started, else the coarse location the host attached to this call. If the athlete names a place, pass its approximate lat/lon. On reason "no_location", ask where they will train and call again with lat/lon.
getWeather
IntervalCoach ChatGPT Plugin FAQ
How the directory, categories and Discoverability Score work.
Read the methodologyHow do I improve IntervalCoach's ChatGPT Plugin discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are IntervalCoach alternatives on ChatGPT?
As of 2026-11-05, IntervalCoach competes with AgentRunCoach, AI Endurance, Athlete Space, Basketball Assistant, Boulie, Coach to Wrist, COROS, Eixo Run and 25 more in ChatGPT Endurance Sport Training Planners, ranked by public Discoverability Score.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.


