Some percentage of FTP listed in a generated workout comes up as “undefined”. I think its related to when a Ramp up or down is suggested.
Also the text could use some language refinement (I’m assuming this is a copy of the email summary sent), but on the website, you dont need to have “Hi xxxxxxxxxx..”
Also, I think recovery and cooldown sections should drop the target RPM rates. Last thing I want to do after say intervals is hit a specific RPM just to cool down or recover. Recovery set almost needs to be a “free ride” type
IntervalCoach reads HRV from the Intervals.icu wellness API, specifically the rMSSD field. The 36 you’re seeing is likely the raw rMSSD value, which is a different metric than what you might be seeing on Intervals.icu’s page.
HRV Status (0-100 score): Garmin’s proprietary index
rMSSD (raw, typically 20-80ms): The actual heart rate variability measurement
Overnight vs morning test: These can produce different numbers too
Could you check your Intervals.icu Wellness page (not the Garmin app) and see what value it shows for today’s HRV? That’s what IntervalCoach reads. If the numbers match there, then the difference is just that Intervals.icu is showing the Garmin Status score elsewhere while IntervalCoach shows the raw rMSSD.
Good point. The “Rest Day” label there is meant to say “nothing more to do today”, but I agree it’s confusing after you’ve just completed a workout. It reads like you should have rested instead of training.
I’ll clean that up so either the “Today” section hides entirely after workout completion (since the message above already says “focus on recovery”), or it says something clearer like “Done for today” instead of “Rest Day”.
Workout durations: You’re right, those are off by too much. If you’ve set 2h for cycling, the workouts should stay close to that. I’ve logged this as a bug and will look into why the planner is overshooting on some days and undershooting on others — likely related to how it balances TSS targets against your time availability.
Consecutive training days slider: Great idea. Right now there’s a default maximum of 3 consecutive training days before a rest day is inserted. I’ve added a feature request to make this configurable in Settings, so you could set it to 4 to match your preferred pattern of 3x cycling + 1x gym before rest.
Hi, thanks for the detailed feedback and glad you’re enjoying the look!
1. 65% volume increase: The calculation compares your total TSS from the last 7 days to the 7 days before that. Looking at your calendar, last week’s sessions totaled less than this week’s (which includes that big 271 TSS Saturday ride). The 65% figure should be accurate — the warning message also shows both TSS totals so you can verify. If the previous week was light (e.g., ~325 TSS) and this week hit ~538, that’s a 65% jump. It’s a rolling 7-day comparison, so it can spike when you have one big day in a lighter week.
2. Race distance (96,561 km): This is a formatting bug — your event is ~96.6 km (60 miles), but the AI reformatted the number with a comma making it look like 96 thousand km. We recently fixed the underlying distance conversion (INT-309), but your cached analysis may still have the old text. Try going to Analytics and forcing a refresh. I’ve also logged a follow-up to round the distance cleanly so the AI can’t misformat it.
3. Progressive Overload (Tempo declining): You’re absolutely right — comparing 210W over a 4+ hour ride to 220W over a 1 hour ride isn’t a decline. Maintaining that power for 4x the duration is actually harder. The current comparison doesn’t account for ride duration, which makes it misleading for rides of very different lengths. I’ve logged this to improve the comparison logic so it either accounts for duration or only compares similar-length rides.
Great suggestion, a 30W indoor/outdoor difference is very common and can really throw off training zones.
Right now IntervalCoach uses a single FTP value for all workouts (you can choose between your manual FTP and estimated eFTP in Settings). I’ve added a feature request to support separate indoor and outdoor FTP values. Since Intervals.icu already stores both (under Ride and VirtualRide sport settings), the plan is to pull both values and automatically apply the correct one depending on whether the workout is indoor or outdoor.
Your analysis is spot on. Two things went wrong here:
Core-only days: Monday and Friday were assigned only Core Stability workouts with no endurance session. Those days should have had both core AND a swim/run/bike session — core workouts alone contribute almost zero TSS.
TSS compensation: With Mon and Fri contributing effectively 0 TSS, the AI tried to hit the ~700 weekly target by overloading Saturday. The result — 18x 800m (14.4km main set) for an 8h43m swim — is obviously way beyond any reasonable swim session.
I’ve logged this as a high-priority bug (INT-343). The fix needs three things:
Core workouts should supplement, not replace endurance sessions
A per-session safety cap so no single workout can exceed a reasonable duration/TSS limit
Better TSS distribution across available training days
Good catch — those TSS numbers are clearly wrong. The actual week-over-week change is about 29% (396→510), not 378%.
The root cause is that the volume warning uses a rolling 7-day window (calculated in UTC) instead of proper Monday-Sunday calendar weeks like Intervals.icu. This causes activities near the week boundary to get shifted into the wrong “week” — in your case, about 250 TSS of activities moved from “last week” into “this week,” inflating the comparison. Cache staleness may also compound the issue.
I’ve logged this as a high-priority bug. The fix will align the comparison with calendar weeks using your timezone, which is the same approach we already used for other week-boundary calculations.
IntervalCoach uses two HRV lookback windows:
7-day average: Compares today’s HRV against your recent 7-day average to spot short-term trends (needs at least 3 data points)
30-day baseline: Calculates your personal “normal” range using a 30-day average plus standard deviation. This is used for z-score deviation analysis — flagging when you’re significantly above or below your baseline (needs at least 7 data points within 30 days)
With only about a week of data, the 7-day trend is working but the 30-day baseline analysis won’t have enough data yet. So yes, adding more historical HRV values would definitely be worthwhile — ideally at least 3-4 weeks of data. The more data points you have, the more accurate the “normal range” detection becomes, which helps the system distinguish between a genuinely low HRV day (flagging for recovery) and normal daily variation.
Good catch! All your zones are at the maximum level (10.0), so the “strongest” and “focus areas” labels are essentially random — they’re based on array position, not actual differences. The system only looks at the level number, not the trend, to pick strengths vs focus areas.
I’ll fix this so it uses the trend as a tiebreaker when levels are equal, and suppresses the labels entirely when zones are too close to differentiate meaningfully.
I found two issues: the auto-detection of which week you’re in can be off by one, and when you manually correct it, the training plan view updates but the dashboard still reads from a cached value. I’m fixing both so they stay in sync.
It’s in the works, should be live this week!
JustTrain needs to use the phase from your weekly plan instead of calculating it independently. It’s on my list as a high priority fix.
You’ve been added!
Thanks for the detailed feedback, all good points. Let me go through them:
“undefined% FTP” on ramps - That’s a bug. The warmup and cooldown use a ramp (e.g., 40-75% FTP), but the workout structure card doesn’t know how to display a range, so it shows “undefined”. I’ll fix that.
Chatty warmup/cooldown text - You’re right, the “Hi n0rt0nthec4t let’s build in…” text makes sense in the daily email but is a bit much for the calendar/website view. I’ve added it to my list to clean up on the website side.
RPM in recovery/cooldown - Good call. After hard intervals you should just spin at whatever feels comfortable. I’ll update the workout generation so recovery and cooldown segments don’t prescribe a specific cadence.
Good catch, I thought I’d fixed this but I missed one spot. The post-workout analysis prompt wasn’t updated with the previous fix, so it’s still defaulting to “the athlete” instead of “you.”
@mrusschen one issue that should be an easy win is the ability to increase the number of planned sessions per week. At the moment it’s capped at 7, which feels a bit restrictive, especially for triathlon.
A more polished approach could be to link the number of sessions to the total weekly availability defined by the user, using some simple planning guardrails, for example:
• avoid two sessions in the same day unless required to reach the target weekly TSS
• allow one brick session every two weeks during base, and every week during build
• avoid workouts shorter than 45 minutes
• etc.
Related to this, I’ve noticed that IC never plans brick sessions, which are a pretty standard component of triathlon training (e.g. bike + run back-to-back).
I’m working on improving the planning system today. As part of it, I rolled out the multiple sessions on 1 day feature already which allows you to schedule multiple sport sessions on the same day.
There’s an option to disable daily adaptations in your settings, I don’t have an option to preview these yet, so if you want to stick to your weekly plan the best would be to disable the daily changes for now.
I’ll explore a more refined way of giving people to option to preview this.
Apologies, in an attempt to tweak the weekly workout generator I broke the system. I’ve deployed a fix earlier this evening and it should be back to normal now.
Hi! What do you recommend? Leave Garmin Nighttime automatically loaded into Intervals. Or HRV4TRAINING in the morning (but I don’t think it automatically loads into Intervals).
By the way, Garmin’s Nighttime HRV has been very low for a week, while the morning HRV is increasing. I don’t know why I’m on Taper…
The flip from “Rest Day” to “Significant Fatigue - Dial Back” that happens within seconds of opening the page is a bug on my end: the dashboard loads in two stages, and the quick first render shows a basic status that gets overwritten when the full AI assessment arrives. I’m going to fix that so the status doesn’t jump around.
This one is actually showing the same data, just displayed differently. The -52% on the dashboard is your Form as a percentage of fitness: (TSB / CTL) = (-30 / 58) = -52%. Intervals.icu allows you to choose between the raw TSB and the % of fitness. Both are correct, your underlying numbers (CTL 58, ATL 88) match.
Hi, I am trying the IntervCoach app.
I noticed it overwrites the workout description instead of adding its own analysis as text.
this is quite unfortunate, I feel.
One more thing:
Do you think it would be beneficial if there would be an overview of the items that you are currently working on to avoid reporting things twice and/or seeing progress on bugs that one has reported?
First of all thanks for this work . I’m testing InteralCoach since 2 days , so I’m still playing with it. I saw a few things that could be improved and i hope to be able to give more feedbacks soon.
On the mean time I have a request / sugestion that is very important to me.
When adding an objective (a race), at the moment it doesn’t seem to work properly for Trail running. For instance your can’t add an elevation , and this is a key aspect during trail races. Also you can set up the FTP, but here it’s not relevant for trail running .
Finally I didn’t see any objective in terms of time. I guess than if you goal is 10h or 30h to finish a 100k trail with 4000 Meters of elevation , the training plan won’t be the same !
And finally finally, and this is for all sports, would be amazing to be able to add a B objective . For instance I have my main objective in may, and i planned a "smaller " event at the end of february . So if both events could be took into acount that would be amazing. Speaking of ultra trail , most people plan “intermediary race” before the main objectif to "see where they are "