(Yet Another) AI ChatGPT Coach

Hi Alan,

Yes, training plan endpoint is available but it’s not straight forward in intervals.icu to work with. Once you have created a plan you actually need to assign it to an athlete (yourself or someone you coach). Simply dragging the plan to your Calendar doesn’t assign the plan, it just adds the workouts as planned events. To assign the plan to yourself do the following:

  1. Open Plan:

  1. Assign it to yourself

  2. Then when you ask to show my training plan it will then show this.

Here is your currently attached training plan:


:clipboard: Plan Name: Test Plan

  • Plan ID: 726571
  • Owner: Clive King
  • Visibility: Private
  • Start Date: 30 March 2026
  • Duration: 1 week
  • Workouts: 2
  • Target Hours per Week: 3 hours
  • Activity Type: Ride
  • Primary Target: Power
  • Starting CTL: 90
  • Starting ATL: 100
  • Timezone: Europe/Zurich

This matches the two workouts already scheduled:

  • Abbey (Sweet Spot)
  • Acrodectes (VO2 60/60s)

There is no auto-rollout enabled, so the plan will not extend automatically beyond this 1-week block.

Regards

Clive

Mate really appreciate that. New to the platform so not aware I had to do that.

1 Like

Montis.icu CHANGE NOTE #30 FOR WEEK 9

Change Updates Week 9 · Issue #30 · revo2wheels/intervalsicugptcoach-public

Headline items:

30.1 Added Microcycle for the current ISO week in weekly report
30.2 Added ability to now generate a weekly report from any start date.
30.3 Normalised Subjective markers in pipeline
30.4 Integrated HRR (icu_hrr) into validated activity pipeline.

plus bug fixes.

regards

Clive

2 Likes

Thanks for the tips actually I was exploring plans shared by others on ICU and I find the UI a bit odd and difficult to use, but why not giving it a try for my next plan after my ‘A’ trail race later this month. Would Montis be able to help out build recovery weeks, then transition into a new plan? Right now I know my availability dates, I have couple of B and C races, and a draft high level approach provided by ChatGPT but nothing detailed at micro level.

Hi Alan,

I’ve added something simple for now where for a workout created it will calculate - carbs_per_hour (int g/h) based on the following. Unless you specify your own fuelling target in the workout request.

load_per_hour = TSS / (duration_min / 60)

Duration: A=<90 | B=90–150 | C=>150
Intensity: 0=<40 | 1=40–65 | 2=65–85 | 3=>85
 Int\Dur |  A  |  B  |  C
 -------------------------
 0       | 35  | 45  | 55
 1       | 55  | 67  | 77
 2       | 67  | 82  | 87
 3       | 80  | 92  | 100
 Clamp 30–110.

It will then add this to the workout cho/h value

Hope this helps.

Clive

1 Like

Hi Clive! It seems to me that the Threshold Pace calculation has reverted to its previous state…

I think I’m quite far from achieving the Olympic qualifying standard! :joy:

1 Like

It hasnt in the reports, but i know why this has occurred and will need to put a measure in place in the short term as its an intervals API issue itself. I will raise a bug with David as the units do not match the threshold value coming from the API. This is the source of the issue. In the meanwhile enjoy your qualifying run :face_with_tongue:

regards

Clive

1 Like

I’ve fixed it in our backend. Will need to raise an API bug. (EDIT turns out it’s not a bug but intentional, just misleading, units is as per UI value not API value)

Hi GigiVa

I just realised that I omitted to mention you can PIN the GPT app in ChatGPT view by selecting “keep in sidebar” in Mobile app select … top right


or in web or desktop app via the drop down

you will then see it pinned under GPT.

1 Like

Hi Clive,

How are you today ? C’est à nouveau moi :slight_smile:

I asked my friend Chad to explain you in english the error i frequently meet when i try to push suggested workouts from chatgpt to Intervals. Thanks again for you amazing work :slight_smile:

Issue: Planned workouts sometimes created as NOTE instead of WORKOUT (Ride) in Intervals.icu

When I push planned training sessions into Intervals.icu via the available API action (writeCalendarV1), I get inconsistent behavior:

  • Some planned cycling sessions are created correctly as category = “WORKOUT” and type = “Ride”, with a populated workout_doc (structured workout).
    :white_check_mark: These display properly in Intervals as a cycling workout.
  • Other sessions (even with valid structured workout text) are created as category = “NOTE”, with type = null and workout_doc = null.
    :cross_mark: These do not appear as workouts in Intervals, only as notes.

This happens even when:

  • the workout text uses the correct Intervals formatting (Warmup/Main set/Cooldown structure, correct indentation),
  • power targets are provided as %FTP,
  • duration and load are included,
  • and the session is clearly a bike workout.

Example from the last push:

  • 2026-03-04 and 2026-03-10 were created correctly as WORKOUT with type:"Ride" and workout_doc.
  • 2026-03-09, 2026-03-11, 2026-03-12 repeatedly fell back to NOTE, despite multiple formatting attempts (different bullet styles, different nesting, simplified versions).

I also tried adding fields like sub_type:"Ride" or indoor:true, but those either:

  • cause 400 JSON parse errors (connector schema rejects unknown keys), or
  • still result in NOTE.

So currently, the connector can sometimes parse a planned workout into a structured Ride workout, but fails unpredictably for other sessions.


Why this matters

The user specifically needs planned sessions to show up as Workouts (Ride) in Intervals, not as Notes—because:

  • workouts behave differently in the UI,
  • they can be executed/parsed as structured sessions,
  • and they integrate properly into the training plan view.

Desired fix / feature

The connector should allow explicitly setting:

  • category = WORKOUT
  • type = Ride
  • and/or directly passing a structured payload (workout_doc) instead of relying on text parsing.

A reliable solution would be either:

  1. Add support in writeCalendarV1 for explicit fields like sport/type/category, OR
  2. Support passing a structured workout_doc object directly.

Right now, we’re forced into a workaround: the user must manually open the NOTE in Intervals UI and convert it to a WORKOUT Ride via “Edit → Category WORKOUT → Sport Ride → Parse structured workout”.

here’s a paste-ready snippet showing the mismatch (WORKOUT vs NOTE) from the API response to the same writeCalendarV1 push.

[
{
“id”: 96388921,
“start_date_local”: “2026-03-04T00:00:00”,
“category”: “WORKOUT”,
“type”: “Ride”,
“name”: “Club ride + 3x3’ (110–115%)”,
“moving_time”: 3120,
“description”: “Warmup\n- 20m ramp 50-70% (121-170w)\n\nMain set\n3x\n- 3m 110-115% (267-279w)\n- 6m 55-60% (134-146w)\n\nThen\n- 35-55m 60-70% (146-170w) endurance (stay disciplined)\n\nCooldown\n- 5m 50% (121w)\n\nPlan B: si le groupe te fait sprinter, 1 seul effort 1-3min, puis tu te replaces.”,
“workout_doc”: {
“steps”: [
{ “ramp”: true, “power”: { “start”: 50, “end”: 70, “units”: “%ftp” }, “duration”: 1200 },
{
“reps”: 3,
“steps”: [
{ “power”: { “start”: 110, “end”: 115, “units”: “%ftp” }, “duration”: 180 },
{ “power”: { “start”: 55, “end”: 60, “units”: “%ftp” }, “duration”: 360 }
],
“duration”: 1620
},
{ “power”: { “value”: 50, “units”: “%ftp” }, “duration”: 300 }
],
“duration”: 3120
}
},
{
“id”: 96388922,
“start_date_local”: “2026-03-09T00:00:00”,
“category”: “NOTE”,
“type”: null,
“name”: “Openers répétabilité 30/30 (2x5)”,
“moving_time”: null,
“description”: “Warmup\n- 15m ramp 50-70% (121-170w)\n\nMain set\n2x\n- 5x\n - 30s 125% (304w)\n - 30s 55% (134w)\n- 6m 55-60% (134-146w)\n\nCooldown\n- 10m 50-55% (121-134w)\n\nFort = contrôlé (tu finis propre).”,
“workout_doc”: null
},
{
“id”: 96388923,
“start_date_local”: “2026-03-10T00:00:00”,
“category”: “WORKOUT”,
“type”: “Ride”,
“name”: “Endurance facile Z2 bas”,
“moving_time”: 3300,
“description”: “Warmup\n- 10m ramp 45-65% (109-158w)\n\nMain set\n- 40m 60-65% (146-158w)\n\nCooldown\n- 5m 50% (121w)”,
“workout_doc”: {
“steps”: [
{ “ramp”: true, “power”: { “start”: 45, “end”: 65, “units”: “%ftp” }, “duration”: 600 },
{ “power”: { “start”: 60, “end”: 65, “units”: “%ftp” }, “duration”: 2400 },
{ “power”: { “value”: 50, “units”: “%ftp” }, “duration”: 300 }
],
“duration”: 3300
}
},
{
“id”: 96388924,
“start_date_local”: “2026-03-11T00:00:00”,
“category”: “NOTE”,
“type”: null,
“name”: “Spécifique segments 1–5’ (4x2’ + 1x4’)”,
“moving_time”: null,
“description”: “Warmup\n- 15m ramp 50-75% (121-182w)\n\nMain set\n4x\n- 2m 120% (292w)\n- 4m 55-60% (134-146w)\n\n- 8m 55-60% (134-146w)\n\n- 4m 110% (267w)\n\nCooldown\n- 10m 50-55% (121-134w)\n\nSi sensations moyennes: faire 3x2’ au lieu de 4x2’.”,
“workout_doc”: null
},
{
“id”: 96388925,
“start_date_local”: “2026-03-12T00:00:00”,
“category”: “NOTE”,
“type”: null,
“name”: “Pré-course openers”,
“moving_time”: null,
“description”: “Warmup\n- 15m ramp 45-65% (109-158w)\n\nMain set\n3x\n- 30s 120% (292w) haute cadence\n- 3m 50-55% (121-134w)\n\nCooldown\n- 10m 50% (121w)\n\nBut: jambes vives, pas de fatigue.”,
“workout_doc”: null
}
]

HI Remi,

You touch on a subject that has already had me scratching my head today. I made some changes this morning and see its working again. My wife was complaining of the same issue :wink:

Can you let me know if you still are seeing parse 400 errors.

Clive

1 Like

Hi! I’ve been using Montis for a bit now, and I’m loving it. :slight_smile: At the moment, it seems like has disappeared from ChatGPT, though, it says it’s not available anymore. Are you aware, or am I missing something? Thanks for your help in advance!

2 Likes

Thanks Cas, I still see it thankfully in search. Otherwise best place to find it is via montis.icu
and the direct link https://chatgpt.com/g/g-6933fc6bcd008191bb52885be4d1927c-montis-icu-coach-v5-railway-t2-engine

Dont forget to PIN to sidebar, always easy to find then in mobile app, web or desktop app.

Clive

NEW - Weekly & Season Report Update — Energy System Progression (ESPE)

A new analysis component has been added to the training report: Energy System Progression (ESPE).

ESPE evaluates how your power-duration curve has changed over time by comparing two equal training windows. Instead of looking only at total load or recent sessions, it examines how different physiological systems are evolving across the power curve.

What it analyses

The system tracks performance changes at key durations that represent different energy systems:

  • 5 seconds — neuromuscular / anaerobic power
  • 1 minute — VO₂ capacity
  • 5 minutes — high-intensity aerobic power
  • 20 minutes — threshold power
  • 60 minutes — endurance durability

By comparing these anchors across time windows, ESPE determines:

  • Which systems are improving, stable, or declining
  • Whether your power curve is shifting toward endurance or anaerobic capacity
  • How balanced your overall energy system development is

What you will see in the report

The weekly report may now include:

  • Energy system status (anaerobic, VO₂, threshold, endurance)
  • Curve dynamics showing how your power curve is shifting
  • Adaptation state describing the current training effect (for example: aerobic consolidation or threshold development)
  • Derived metrics related to durability, reserve capacity, and system balance

These indicators help explain why your performance profile is changing, not just whether training load is increasing.

What this means for athletes

ESPE does not replace traditional metrics like CTL, ATL, or TSS. Instead, it adds a physiological layer that interprets how training is shaping your performance capabilities.

In practical terms, it helps answer questions such as:

  • Is endurance improving faster than high-intensity power?
  • Is VO₂ capacity maintaining or declining during base periods?
  • Is the power curve becoming more durable across longer efforts?

This information will be used progressively to support more precise training interpretation and future recommendations.


This is phase 2 of the Performance Intelligence upgrade and is the first part (v1) of ESPE

This works for RIDE and RUN (where power is used).

After you run a weekly/season report… Ask for a full ESPE analysis and you will get:


:gear: Energy System Progression — Full ESPE (Cycling)

Window: 85 d vs previous 85 d comparison
Curve Source: FFT power-duration curves
Model Quality: Good (R² = 0.84)

This section shows the full Energy System Progression Engine (ESPE) output describing how each physiological system has changed over the last training block.


:battery: Power Duration Changes

Duration Change
5 s −19.4 %
1 min −4.7 %
5 min −2.0 %
20 min +2.0 %
60 min +5.1 %

Interpretation

  • Short explosive power (5s) has declined noticeably.
  • VO₂ power (≈5 min) is slightly reduced.
  • Sustained aerobic power (20–60 min) has improved significantly.

This is a classic endurance adaptation profile.


:dna: Curve Dynamics

Metric Value Meaning
Vertical Shift +0.11 Slight overall power increase
Rotation Index −6.88 Curve rotated toward endurance
Dominant Shift Aerobic rotation Power gains favor long durations

Interpretation

The curve rotation indicates the training block primarily improved durability and sustained aerobic power rather than explosive output.


:brain: System Status

Energy System Status Trend Meaning
Anaerobic Decline Less explosive / sprint work
VO₂ System Decline Reduced high-intensity stimulus
Threshold Moderate Gain FTP-range development
Aerobic Durability Strong Gain Improved fatigue resistance

Adaptation State: Aerobic consolidation

Adaptation Bias: Threshold dominant


:bar_chart: Derived System Metrics

Metric Value Interpretation
Glycolytic Bias Ratio 1.52 Moderate anaerobic bias relative to threshold
Aerobic Durability Ratio 0.82 Good endurance durability
Durability Gradient 0.94 Sustained power stable over long durations
System Balance Score 0.84 Balanced multi-system development
VO₂ Reserve Ratio 1.20 Healthy headroom above CP
PDR (5-min reserve) 58 W VO₂ capacity above threshold

:high_voltage: Critical Power Model

Metric Value
CP 294 W
FTP 300 W
W′ 15.6 kJ
Pmax 689 W

Interpretation:

  • Critical Power and FTP remain closely aligned.
  • W′ reserve remains healthy for repeated supra-threshold work.

:compass: ESPE Adaptation Summary

The current training phase shows a clear endurance-focused adaptation pattern:

  • Aerobic durability and long-duration power are improving strongly.
  • Threshold capacity is progressing moderately.
  • VO₂ and anaerobic systems are temporarily down-regulated due to lower stimulus.

This profile typically appears during aerobic consolidation blocks, where training prioritizes:

  • long steady endurance
  • threshold work
  • fatigue resistance

:white_check_mark: Bottom line:
Your physiology is currently shifting toward an endurance-specialist power curve, with improved fatigue resistance and long-duration output.


3 Likes

Change Note Week 10 #31

ADDED:

31.01 - API - Simple calc for “carbs_per_hour” when a workout is created in Intervals Calendar.

31.02 - ENGINE - ESPE has arrived. Major Update.

31.03 - REPORTS - Added interval.icu links to Power curves and Events

31.04 - API - Activities can now be retrieved with ID or Date (e.g. “i129985499”)

FIXED:

31.51 - API - Subtype caused enum error in Intervals endpoint preventing workout being created

31.52 - Reports - ISO week correction for microcycle

31.53 - Reports - Closing note adaptation instructions updated

31.54 - API - Major Upgrade to Staging and Production environment, full separation end to end across Caller → Cloudflare → Railway → APP (Transparent)

31.55 - FASTAPI - Fixed Error logging issues for Railway

31.56 - API - Major update to Calenderwritev1 to better handle event requirements and workout creation

31.57 - API - Major update to power curves to allow better handling of requests including last 84 days, s1, s2 etc (this is framework for ESPE)

31.58 - REPORTS - Fixed bug that showed completed events in current ISO week reports

31.59 - API - Fixed TZDATA issue where non standard timezones are used. e.g. US/Eastern

Strategy update for Montis (môn-tee) Coach.

  1. Training load creates stress
  2. Physiology measures recovery.
  3. Performance Intelligence models capability.
  4. ESPE reveals adaptation.
  5. ADE determines how training should change next.

More information is available here. Your feedback is always welcome.

BR, Bon Weekend

Clive

2 Likes

Hello Clive,
Any reason why all my runs from last week are showing :frowning: smiley?

I checked in Intervals and the Feel column is showing :slight_smile: (Good).
I don’t know if this is taken as input by the model for the AI Coach to provide feedback? (I’d expect it would, like a real coach would do?).

In term of documentation on your site, I would also love to see more sample prompts to start discussions, or prompts to explore specific aspects. I find that beyond the first structured report output based on e.g. “run weekly report”, then discussion feels a bit more like generic ChatGPT? Or maybe I don’t use the Agent in a proper way to unleash its full potential that’s also possible forgive me.

Hi Ohmax,

Yes, it reflects your “feel”. Sorry i got the reference back to front, my bad. Now fixed
“feel_emoji”: {
5: “:disappointed_face:”,
4: “:slightly_frowning_face:”,
3: “:neutral_face:”,
2: “:slightly_smiling_face:”,
1: “:grinning_face_with_smiling_eyes:
}

Regards conversation starters ; sadly ChatGPT limits these, and I need to find a way to be more creative to get the next question prompted as part of final coaching note. There are some very handy questions for example (listed on website) Montis.icu Coach — Physiology-Governed Endurance Intelligence - Questions. It’s something that’s been on my mind to help Athletes get the best from app. Will explore possibilities some more.

Clive

1 Like

Tiny detail about the smileys no worries :upside_down_face:
I was exploring this morning different tapering strategies for my A trail race in two weeks and as I was chating with Montis I ended up with 3 options from the most agressive (risky) to the least one (conservative and risk of slight detraining). I imagine that marathon tapering should be well defined by scientific papers but for ultra trails perhaps not hence the ambiguity in the responses. On the other hand, what I really like with Montis chat is the fact the data in the background are accessible so I don’t need to copy/paste or upload much.

1 Like

Hi ohmax,

That’s exactly the point. The data is returned and even if it’s not always exposed in the report directly, it’s there for reference to questions. I always recommend that you do a weekly report, and for forward planning also the season report. The context of both is invaluable, especially combined with wellness data.

Taper will always depend on when your build phase started, whether you entered stimulated phase (like an overreach) and how well your body is adapting to stress, your wellness response (sleep HRV etc), how much you absorbed to improve your fitness.

With EPSE we are now monitoring power curves, if you use power data for run (it’s possible in Intervals) that can potentially provide some valuable data insight to your pacing strategy.

It may help to try looking at your hr to power curves (ask: “Get my Power to HR curves” after running a weekly report) and establish the Z2 base pace and HR zones that will allow you to run/ride all day!

e.g.

:green_circle: Your All-Day Zone 2

Metric Range
Power 205–220 W
% FTP (300 W) 68–73%
Heart Rate 128–134 bpm
Lactate ~1.8–2.0 mmol/L

You can also look at your Run pace curves by asking “get my Pace Curves for run” (or “for ride” for cyclists)

e.g.

Based on your trail curve:

Distance Estimated Flat Pace
5 km ~3:55–4:00/km
10 km ~4:10–4:20/km

That aligns well with your cycling VO₂max of ~72.


:white_check_mark: Big insight:
Your run speed is much higher than your run durability, which is typical for cyclists who run occasionally. :rofl::rofl:

You will know, like any endurance sport the success comes down to fuelling properly (This is so hard to get right on the day, and I’ve got it wrong so many times looking back). I’m better informed now, but it’s hard to sustain the modern intake needs :nauseated_face: Good luck in your Ultra and may the gods look after your knees :slight_smile:

I will hopefully get back to some running again soon, once the dog is bound to the lead again (Suisse rules in spring to summer) !

Br

Clive

2 Likes

Hi All,

Pre-weekend update to let you know that I have refactored the reports to reflect an aligned presentation layer that matches the Montis.icu stack framework now - this allows me to integrate future strategy more effectively for EPSE v2 and ADE v2.

For example; for weekly and season report:

:bar_chart: REPORT CONTEXT
:compass: TRAINING LOAD
:anatomical_heart: PHYSIOLOGY RESPONSE
:gear: PERFORMANCE INTELLIGENCE
:chart_increasing: ADAPTATION
:bullseye: ADAPTIVE DECISIONS

Wellness:
:bar_chart: REPORT CONTEXT
:anatomical_heart: PHYSIOLOGY RESPONSE
:gear: TRAINING STRESS CONTEXT

Summary:
:bar_chart: REPORT CONTEXT
:compass: TRAINING LOAD
:anatomical_heart: PHYSIOLOGY RESPONSE
:gear: PERFORMANCE INTELLIGENCE
:chart_increasing: ADAPTATION

Hope you approve! Bon Weekend, Clive

2 Likes