(Yet Another) AI ChatGPT Coach

Hi Remi,

V5 is similar but more accurate. The data is processed outside of ChatGPT and returned in a way it cannot add in plausible markers or make up for gaps. If you give ChatGPT raw data, frankly anything can happen! see www.cliveking.net for further explanation or the documentation on github (which i try to keep up to date!)

Thanks for the feedback.

Clive

1 Like

I really miss that it can see todays workout(s) and wellness data.
Is it possible to add that back? Maybe limit it to the last 2-3 days.

Also need more data with the weekly pulls, avg. HR and avg. Power. as a minimum.

GPT:
The dataset I can currently access through the Unified Reporting Framework (URF) pipeline gives only summary-level metrics (duration, TSS, and distance) for each workout — not the actual HR and power samples from your Intervals.icu activities.

Edit:
I got hallucinations in the data. Made a weekly pull, and it’s making workouts up.
It also adds all workouts from a day together, cant see them apart, time etc.
It can different the timing for different sports on a weekly note, but not daily in the wekly summary.

Hi Hutmacher

For any report you have 42 days of wellness history, you can ask for more info on that after any report. It should always include today’s workout, although ChatGPT may decide not to show it in events data, however it is there. You can always ask it to analyse todays ride or workout etc.

Also remember you will get a better response with ChatGPT v5.2 than v4. I also note that even if you are a subscriber to ChatGPT there is a limit on v5.2 requests before it defaults back to v4 for a period of time. you can verify by asking “what version are you”.

For example:
:white_check_mark: Weekly Report Generated (URF v5.1)
:date: Period: Last 7 days (ending Dec 22, 2025)
:bar_chart: Framework: Unified Reporting Framework v5.1 (Tier-2 Finalized)


:man_lifting_weights: Training Summary

  • Total Load (TSS): 354
  • Training Hours: 9.4 h
  • Distance: 168.9 km
  • CTL / ATL / TSB: 71.4 / 51.5 / +20.0 → fresh and well-recovered
  • ACWR: 0.93 → productive
  • Monotony: 0.91 → healthy variation
  • Strain: 46 → optimal
  • FatigueTrend: −13.7 % → recovering phase

:gear: Intensity & Distribution

  • Z1–Z2 time: 47.7 %
  • Z3+ time: 52.2 %
  • Polarisation Index: 0.78 → mixed/optimal balance
  • ZQI (Zone Quality Index): 2.8 % → too low — add more tempo or VO₂ work
  • FatOx Efficiency: 0.69 → strong aerobic base
  • CUR (Carb Utilisation Ratio): 31 % → balanced metabolism
  • GR (Glucose Ratio): 1.83 → optimal glycolytic balance

:brain: Wellness & Recovery

  • Recovery Index: 0.82 → recovered
  • Stress Tolerance: 2.0 → low — load sustainably
  • Fatigue Resistance: 0.95 → excellent durability
  • FatigueTrend: −27.9 % → recovering; maintain steady volume

:person_biking: Key Sessions

Date Activity Load Duration Distance
Dec 20 Zwift – zAlpe × 2 138 TSS 2h 27m 55.6 km
Dec 18 Zwift – BaseCamp Tempo 99 TSS 1h 30m 50.2 km
Dec 16 Zwift – Endurance + 30/30 Tempo 63 TSS 1h 11m 37.1 km
Other Walks (Otto) 54 TSS 2 h 10 m 26 km

:puzzle_piece: Insights

  • Training Load: Consistent with prior 4 weeks — no overload detected
  • Polarisation (Seiler): 0.78 → balanced, but slightly below full 80/20 structure
  • Metabolic Efficiency: 22.5 MES → excellent aerobic economy
  • FatigueTrend: recovery state confirmed; appropriate for sustainable progress

:white_check_mark: Coaching Actions

  • Maintain ≥ 70 % Z1–Z2 volume
  • Extend Z2 endurance sessions to improve aerobic efficiency
  • Continue structured recovery focus (TSB ≈ +20 = fresh)
  • Watch StressTolerance (2.0) — avoid sudden load spikes
  • Maintain current long-ride structure for durability
  • Keep Polarisation ≥ 0.75 to support fat oxidation and recovery balance

:chart_increasing: Weekly Verdict

Status: Productive & recovering
Form: Fresh and ready for progressive loading
Priority: Sustain endurance volume; resume gradual build next week


*Then ask show wellness metrics or show all metrics (32+) !

OR list all events

OR ask to “analyse your last ride” or “workout”


:white_check_mark: Last Ride Analysis — Zwift: zAlpe ×2 (Dec 20, 2025)
:bar_chart: Source: Intervals.icu canonical dataset (URF v5.1 Tier-2)


:man_biking: Session Overview

Metric Value Interpretation
Type Virtual Ride (Climbing / Endurance) Structured indoor base + tempo block
Duration 2h 27m Extended endurance block
Distance 55.6 km Two ascents of Alpe du Zwift
TSS 138 Solid endurance session
Intensity Factor (est.) 0.76 Sub-threshold, aerobic focus
Normalized Power (NP) ~240 W Steady pacing, high aerobic control
Average Power ~210 W Sustainable tempo output
Estimated kJ ~1 850 kJ Strong caloric expenditure
Elevation Gain (approx.) 2 ,400 m Substantial climbing volume

:gear: Intensity Distribution

Zone Time % Comment
Z1 12 % Warm-up / recovery segments
Z2 35 % Core aerobic work — well controlled
Z3 42 % Tempo / low-threshold climbing
Z4–Z5 9 % Short surges near FTP
Z6+ <1 % Minimal anaerobic effort

:right_arrow: Polarisation = 0.78 → “mixed/optimal” distribution
Balanced between aerobic base and controlled tempo loading.


:brain: Physiological Impact

Metric Value Status
CTL Change +1.3 Productive gain
ATL Change +3.4 Temporary fatigue increase
TSB Post-Ride +17 → +13 Still fresh
FatOx Efficiency 0.69 Excellent metabolic efficiency
MES (Metabolic Efficiency Score) 22.5 Aerobically economical
Fatigue Resistance 0.95 High durability for sustained output

Interpretation:
This ride consolidated endurance conditioning while mildly stressing threshold metabolism — a perfect late-base session.


:microscope: Metabolic & HR Insights

  • Aerobic Decay: 0.02 → minimal drift (stable endurance)
  • Z2 Stability: 0.04 → steady pacing in endurance range
  • HR Drift %: <3 % → good aerobic control and fueling
  • FatOx Bias: dominant (CUR = 31 %, GR = 1.83)

:compass: Coaching Summary

:white_check_mark: Excellent aerobic base reinforcement — strong climbing economy
:white_check_mark: No excessive glycolytic bias — balanced metabolic profile
:warning: Slight threshold heaviness (42 % Z3) — include a pure Z2 ride next block
:white_check_mark: Fatigue Trend = –13.7 % — recovery phase maintained


:repeat_button: Next-Session Recommendation

  • Recovery Day (Z1 active / walk): maintain form, support glycogen restoration.

  • Then:

    • 90–100 min Z2 steady ride (IF ≈ 0.65 – 0.70)
    • Target 70–80 TSS, keep cadence > 85 rpm
    • Emphasize steady aerobic control over power spikes

Would you like me to render a power vs heart-rate efficiency chart for this ride to visualize your aerobic drift and pacing stability?

I hope this helps!

BR

Clive

I feel the workflow is broken compared to V3 atm.

Edit: - If you didn’t see my edits from the former post
I got hallucinations in the data. Made a weekly pull, and it’s making workouts up.
It also adds all workouts from a day together, can’t see them apart, time, etc.
It can differ the timing for different sports on a weekly note, but not daily in the weekly summary.

I am on 5.2

How, it says it can’t do that, doesn’t have the data?

GPT: - just after I pull a weekly, monthly or 42 days report, it says something like this:
I can’t see your live Intervals.icu activity feed by default — that data sits behind your private athlete profile and must be fetched through a Cloudflare action.

Right now, no “today” dataset is loaded in memory, so I can’t directly display what’s on your account (bike, SkiErg, walk, etc.).

You’ve got two easy options, depending on what you want to view:

Option What It Does Command
1. Weekly fetch Pulls the last 7 days of actual recorded workouts (including today) with durations, modality, TSS, etc. run a full weekly report
2. Planned lookup Shows what’s scheduled for today and the coming days (from your Intervals.icu calendar). look up my planned workouts for this week

If you want to see what you actually did today, just say:

run a full weekly report (with today’s data)

and I’ll pull the verified record from your Intervals.icu profile.
Would you like me to fetch that now?

If I do that: run a full weekly report (with today’s data)
It hallucinates and missing workouts, skierg, walks
Maybe thats why it hallucinates, because it nows I did walks and Skierg, but cant see that data

Edit: No matter what, it feels stupid compared to V3, this needs exact naming to pull the right data. It can’t figure out what I need from normal conversation.

GPT:
Me: Why is there no SkiErg or walks in this report? Why is there no avg. HR or avg. Power
GPT: We can also fix that: I can run the detailed 7-day full activity fetch, which returns your actual per-session metrics (bike + SkiErg + walk), including average HR, power, and NP.
Me: run a 7-day full report (with detailed activities)

data is not correct and there is hallucinations.

1 Like

Sometimes ChatGPT privacy rules insist you must authorise the connection even though you have one already via sign in - this is frustrating but not much i can do about it. State:

“i authorise my connection”

it will respond like this

:white_check_mark: Excellent — your authorization is acknowledged.

Your Intervals.icu connection is now active and verified through the secure Cloudflare → Railway pathway.
That means I can now:

  • Access your live athlete profile, activities, and wellness feeds (no manual upload needed).
  • Pull 7-day full, 42-day wellness, or 90-day season datasets automatically.
  • Route them directly to the Unified Reporting Framework v5.1 renderer for accurate, canonical analysis.

To confirm we’re fully synced — would you like me to:

  1. :repeat_button: Fetch and analyze your most recent ride (live from Intervals), or
  2. :bar_chart: Generate a fresh weekly URF report with updated wellness and load data?

If your data is still missing i can check the backend logs to see any issues.

Clive

Me: i authorise my connection

GPT:
blabla do some of this

  • run a full weekly report
  • run a 7-day full report (with detailed activities)
  • run a 42-day wellness report

Me: run a 7-day full report (with detailed activities)

Data not correct, missing workouts, hallucinates etc.

Regards the rollup of workouts in a day, ChatGPT sometimes rolls this up - yes - its not my specification I just pass it the final data, if you ask:

list all events

then you will get something like this

Date Activity Duration Distance (km) Load (TSS) Notes
Dec 22 2025 Dog walk 0h 58m 5.5 km 10 Active recovery / aerobic mobility
Dec 20 2025 Zwift – zAlpe ×2 2h 27m 55.6 km 138 Major endurance + tempo climbing session
Dec 19 2025 Dog walk . 0h 52m 5.2 km 8 Recovery walk
Dec 18 2025 Zwift – Group Workout: BaseCamp Lower-Cadence Tempo with High-Cadence Surges 1h 31m 50.2 km 99 Sub-threshold & neuromuscular cadence work
Dec 16 2025 Zwift – Group Workout: BaseCamp Aerobic Endurance with 30-30 Tempo 1h 11m 37.1 km 63 Aerobic + tempo intervals
Dog walk 0h 49m 6.0 km 12 Low-intensity recovery
Dog walk 0h 50m 5.1 km 13 Active recovery
Dog walk 0h 44m 4.3 km 11 Weather-limited short walk

Yes I get something like that, but the data is not correct, don’t match with intervals.icu.
Missing workouts, and makes workouts up.

Me: Run Detailed 7-Day Report
result: data not correct missing data, hallucinates.

OK understood - please send me screenshots in a PM I will investigate for you.

Thanks I like the report format and your project. However I’m not cycling I’m only running (road+trails) and also doing strength/mobility exercices. Would your agent support my profile? What I’d be after, is a 7day report on the Monday, with also analysis on how the last 7 days went versus the trend on 42days. What I’ve not done yet, is to create all upcoming workouts and cycles in Intervals, so that AI can give recommendation on what to adjust for next +7 days. Typically right now I have some open chats on GPT to feed back progress on my plan and then I adjust manually my calendar workouts in Stryd that will push updated session on my watch to do.

I have started to explore Gemini, however as my chat history is in GPT and I’m on week 9 of a 21 week training plan, it’s hard to switch and migrate to another AI.

It should support running only but i dont have ONLY runs in my profile, so feel free to test! It should use your HR zones. A 7 day report is always a rolling report from whenever its asked right now. Depending on the metric, different data is used, 7, 28, 42 or 90 days is used.

for example:

1 Like

@Clive_King So here’s another problem that I ran into.

I asked it to analyse today’s 30 minute recovery ride. It responded:
Talked to intervalsicugptcoach.clive-a5a.workers.dev

:man_biking: Today’s Workout Analysis — Recovery Ride

Date: 23 Dec 2025 | Duration: 30 min (1,802 s) | Distance: 10.9 km | Training Load: 16 TSS

:light_bulb: Session Summary

Metric Value Interpretation
Effort Type Recovery / Low Intensity Very light spin; active recovery purpose met
Intensity Distribution Z1–Z2: 90.4 % Z3+: 9.6 % Excellent recovery structure
FatOx Efficiency 0.63 (optimal) Efficient aerobic metabolism maintained
Polarisation Index 0.90 Strong endurance focus
Recovery Index 0.72 (moderate) Slight fatigue present, recovery ongoing
ACWR 0.94 Productive training balance
Fatigue Trend −13.4 % Recovering phase confirmed

Note the intensity distribution – 9.6% in Z3. But intervals.icu has this correct:
Z1 Endurance i1 0% - 67% … 30m3s 100.0%

Something’s gone wrong somewhere…

Hi, good job, I’ve been using the V3 for a while I I find the V5 more solid.
I still struggle to plan workout in the calendar, I continue to get errors. Sny suggestion?

Can’t make it work, error:

:cross_mark: no valid activities after moving_time normalization.

tried reconnect, logout, login. Any tips?

Thanks, Calendar is coming. In progress, and am testing this at the moment.

BR

Clive

1 Like

please share the chatgpt conversation link in a DM . I will investigate for you.

BR

Clive

Congratulations! It looks like you have a really nice project. Thank you for the extensive documentation on GitHub as well.

I currently do not have any Garmin devices, so I rely heavily on my Whoop data, which is being fetched by intervals.icu. Unfortunately, it seems that your app is unable to access this data:

  • HRV: :cross_mark: Not available (no Garmin Health data)

Analysis:
Without HRV or sleep data, readiness relies primarily on subjective and training-derived signals. Resting HR and TSB values indicate good parasympathetic recovery.

:crescent_moon: Recovery Balance

|Sleep quality|⚪ Not tracked|No data source (Garmin Health disabled)|

Is this something you might consider integrating in the future?
Thanks
Olivier

1 Like

Another remark: I think the intervals API is struggling to find the latest run I made. When I ask “how my run was today”, it refers to the one before and if i insist, the one I have to make tomorrow.
I really hope these comments are useful!

Will add to my todo list. It should not care where it comes from so will look at data again. You can raise an enhancement request here: New Issue select LABEL enhancement.

BR

Clive

Yes, i see that sometimes in ChatGPT itself, it’s not intervals. Sometimes I ask to show me my last ride and it shows day before or another day also. In my case I had the last ride/run as a workout, not just a ride! It’s how it processes the data i give it, love AI somedays!