All posts

May Update: Coach Mode, Mac app, Recovery Profile, and a Walking Goal

MR
Martijn Russchen
·12 min read

May was a deep month, the kind where features you have been building for a while finally click into place. Coach Mode opens the door to your human coach. The Mac app brings the full webapp to the desktop. Training Score is out of beta. And the work that started with HRV-CV and personal baselines now has a sequel: a recovery profile that learns how you personally bounce back from each kind of session. Here is what changed since the April update.

Coach Mode: bring your human coach onto IntervalCoach

The most-asked-for feature this year is live. You can now invite a human coach onto IntervalCoach. They see your dashboard, can edit your weekly plan, and talk through training with you in Coach+. Coaches use IntervalCoach for free; you pay for Max as the athlete, and the coach pays nothing on top of that.

The athlete-coach hand-off has always been the awkward seam in AI coaching tools. An AI can ramp your CTL toward a goal and adapt your daily session to your recovery, but it does not know how you feel on a wet Tuesday morning, and it cannot tell you to take the week off because your kid is in hospital. A human coach in the loop closes that gap. The AI handles the daily math; your coach handles the parts that matter most when the math gets it wrong.

Open Settings → Coach to invite someone, or read the launch post for how it works: Bringing your coach onto IntervalCoach →

IntervalCoach is now on the Mac

The native Mac app is on the Mac App Store, with the same features as iPhone and iPad but reshaped for the desktop. Sidebar navigation instead of a bottom tab bar, a native Settings window (⌘,), ⌘1-⌘5 to jump between Dashboard, Train Now, Coach+, Calendar, and More. Multi-window support so you can keep the calendar open next to the dashboard. macOS 14 Sonoma or later. If you already use the iPhone or iPad version, your session carries over.

Download from the Mac App Store →

Training Score is out of beta, on for everyone

A single 0-100 number on the dashboard that summarises how well you are training, with four sub-scores under the hood:

  • Fitness Base: your current eFTP or pace and CTL relative to where you have been.
  • Progressive Overload: whether your weekly TSS and ramp rate are actually building you toward your goal.
  • Consistency: how closely you have hit your last few weekly plan targets.
  • Load Management: monotony and intensity distribution, the same Foster monotony and strain math used to flag overtraining risk.

Tap the card to see the full breakdown plus a sentence on what is driving today's number up or down. There is a new Training Score history chart on the Analytics page so you can watch a build block lift Progressive Overload while Load Management slowly compresses, then flip the other way through a recovery week. Toggle individual sub-scores on and off to isolate one component. Post-workout emails now show your Training Score change for the week. A hard interval day that lifts Progressive Overload from 62 to 68 shows "+6 this week" right in the email summary. And Coach+ understands the score. Ask "why is my Load Management so low?" and the coach has the actual sub-score values, the weakest component, and the standard advice in context.

On by default for every Pro, Max, and trial athlete. No flag toggle needed. Read the deep-dive →

Personal recovery curves (beta)

Until now, when readiness flagged "behind baseline" we leaned on a generic textbook decay: a few days for tempo, three to five for threshold, and so on. Useful, but not yours. The new Recovery Profile card on Analytics fits an exponential decay to your own HRV, resting heart rate, and sleep deltas in the days after each hard session, and publishes a half-life per stimulus (tempo / sweet spot, threshold, VO2max, anaerobic, long endurance) once there are enough sessions (6+) to trust the fit. Curves with thin data still show but render dashed so you can see them firming up over time.

Two things follow from this:

  • The planner now respects your curves. If your threshold half-life is five days and the population default is three, the planner leaves more days between threshold sessions for you. If you recover faster, the population default stays as the floor; we never shrink it below the generic rule, just stretch when your data clearly says so. Only curves with stable confidence (≥40%) drive decisions; weak ones are ignored. The workout-selection log lines now call out "for your recovery curve" when a curve drove a decision, so the source is auditable.
  • A new "behind recovery curve" signal. When actual wellness is meaningfully worse than your published curves predicted for today, the daily adaptation caps intensity, even on a TSB that would otherwise read green.

For Max athletes: a "faster than X% of similar athletes" line per bucket compares your curves against your peer cohort (sex × age bracket, ≥10 athletes per cohort before benchmarks publish). Only the aggregate percentiles leave the cron. No per-athlete data is ever exposed in benchmarks.

Currently in beta: flip on "Recovery profile card" in Settings → Beta. Profiles are warmed for every Pro / Max athlete every Sunday, so the underlying signal works for the planner whether or not you have the card visible.

Walking and hiking are first-class sports

Walking and hiking are now toggleable sports in Settings → Training Schedule alongside cycling, running, swimming, and strength. When a day is set to Walk or Hike, the planner generates a duration-based session for that day, and uploads it to Intervals.icu with the correct activity type. You can also pick Walk or Hike in TrainNow for an on-demand session, with no interval structure, just time on feet with a Z1-Z2 HR recommendation in the description.

Walks and hikes count toward weekly load. Apple Health and Strava strip HR data when they push a walk to Intervals.icu, which left IntervalCoach unable to compute TSS. A 90-minute walk would show as 0 TSS on your dashboard. A conservative duration-based floor now credits walks at 15 TSS/hour and hikes at 25 TSS/hour. When Intervals.icu has computed a higher value from HR streams, we use that instead.

Walking can also replace a planned hard session. When the daily readiness check flags suppressed HRV or the "low motivation + high stress" combination, IntervalCoach can swap today's planned ride or run for a walk instead of just dialling back the intensity. The swap only happens when you have Walk on your schedule for that day. If not, the recommendation stays advisory.

Walks and hikes as goal events. Set the Camino de Santiago, Vierdaagse Nijmegen, Kennedy Mars, a multi-day Alpine trek, Kilimanjaro prep, or a local charity walk as a goal on your Intervals.icu calendar and IntervalCoach detects it, generates a time-on-feet-focused plan with a new GOAL_HIKE phase model (12-week Build → 4-week Peak with the longest walks and any back-to-back days → 2-week Taper). There is also a new Long Walk / Multi-day Hike non-race goal template if you do not have a specific event on the calendar. Detection covers Camino, Vierdaagse, Kennedy Mars, Kilimanjaro, Everest Base Camp, GR20, West Highland Way, Moonwalk, Wanderung, randonnée, escursione, trilho, and a long list of localised pilgrimage / charity-walk patterns across 12 languages. Read the goal templates piece →

Race weeks, race management, and your library workouts

Race week now runs a single deterministic day-by-day protocol that A and B races share. A races engage at D-7 (last key session → moderate endurance → easy recovery × 2 → rest × 2 → openers → race day). B races engage at D-4 with the same D-4 to D-0 prescriptions. Rest days and race day itself are excluded from the dayPlan, so the cron generates and uploads nothing on those dates. Clean rest. C events are still trained through. HRV dips and sleep disruption during the taper are now framed as expected on the dashboard ("taper tantrums") rather than triggering alarm-style readiness messages the day before a race. And B races finally stop inheriting the full A-race taper. They now get a 1-week Pre-Race Taper, with depth governed by your taper profile setting.

Full in-app race management. A unified "+ Add" picker appears inline on each day in the training-plan week table, and as a hover "+" in the top-right of every future day on the calendar. Clicking it gives you Workout or Race as options. From any race event you can edit name, date, start time, priority (A/B/C), sport, indoor/outdoor, distance, target time, and load (TSS), the same fields Intervals.icu's own dialog exposes. Or delete the race entirely. Every change writes back to Intervals.icu so nothing drifts out of sync. Race events in the event-detail dialog also got a visual refresh: a large colored A/B/C priority badge replaces the generic trophy avatar, and the stats grid shows Distance / Target Time / Load.

Your Intervals.icu workout library is now part of the inventory. For athletes who have spent time curating workouts in Intervals.icu (coach-built sessions, purchased packs like High North Performance, or your own favourites), those workouts now appear in the TrainNow Library tab and are treated as peer candidates whenever the AI picks a workout for you: daily cron, rolling updates, weekly plan generation. When your library workout matches the slot within ±10%, we upload your version verbatim. Outside that, the warmup, cooldown, and inter-interval recovery scale to fit the slot, without touching the work intervals. Each library workout is matched to its closest catalog twin (same sport + intensity bucket, closest TSS/hr) and inherits its phase fit, so a VO2max-style library workout is treated as primary in Build phase and avoided in Base. You can flip the whole library off in one click in Settings → Integrations, or pick exactly which folders contribute.

Calendar mutations now appear instantly. Drag-and-drop a workout to a new day, edit or delete a race, create a new race or workout: the calendar reflects every change immediately and a silent background reconcile follows up. No more full-page loading spinner on every save.

Agent Log out of beta + Coach+ memory got sharper

Agent Log is on for everyone: free, trial, Pro, Max. It is a timeline of every coaching decision behind your training: today's readiness call, why this workout got picked, what changed when fresh wellness data arrived mid-morning, every adaptation you approved or skipped. We expanded retention from 14 to 60 days, grouped pre-planned future workouts under the day they were decided rather than the day they happen ("this is what the planner decided today, for Sat May 30"), surface the actual reason the planner picked that workout (recency rotation, focus area, training phase) plus the top alternatives that lost. Read the launch post →

Coach+ now tags every memory with context. Notes you give Coach+ (preferences, constraints, injuries, recurring patterns) now carry tags so each note only surfaces in the situation it applies to: which sport, which intensity bucket (easy / tempo / threshold / VO2 / sprint), specific days of the week, indoor vs outdoor, and an optional expiry for temporary states. "No intensity on weekends" only kicks in when planning Sat/Sun; "knee twinges on hill repeats" only surfaces when scheduling threshold-or-harder running, not on Z2 spins. Ask Coach+ about today's threshold workout and it grounds the answer in your threshold-related notes, not your unrelated swim preference.

A new weekly job dedupes near-duplicate memories that accumulate over months of chat ("I prefer mornings" said three different ways) into one canonical entry. Settings → Coach Memories now shows each note's tags as small badges, plus how many times Coach+ has heard you confirm it.

The daily workout pipeline now reads from those memories too. Notes the coach has accumulated about you (that VO2max sessions feel brutal in build, that you respond well to 2x20 sweet spot at 88%, that thresholds run hot the week after a poor sleep window) already shaped your weekly plan, but the daily pick and the coaching explanation in your email were blind to them. They are now threaded into the daily pipeline and ranked by semantic relevance to today's specific situation.

A few more improvements

  • Dashboard reshuffled. Today's plan and a new "This Week — Load" card (Done / Remaining / Forecast / Target) sit in the top band, the upcoming-7-days calendar gets full horizontal width below them, and the wellness side panel trimmed from five stacked cards to two. A new 14-day readiness ribbon on the Health card shows a green / amber / red pill for each of the last 14 days. The Plan Goal card now shows your projected fitness and form on race day right at the top, alongside a countdown ring.
  • Analytics page now has a Day / Week / Month resolution selector. Pull TSS, HRV, HRV stability, and resting heart rate into the granularity you want, including a monthly view on the 90-day and 1-year ranges.
  • Brick workouts on JustTrain. A Brick option now sits alongside Ride / Run / Swim / Strength. Transition (sweet-spot bike → short Z2 run) or Long endurance (Z2 ride → Z2 run). Both halves upload as two back-to-back calendar events.
  • Per-sport default workout start time in Settings → Training. Each row reads and writes directly to your Intervals.icu sport settings, so downstream tools that read your calendar (Hexis, Zwift, MyWhoosh) see the same time.
  • "After HRV and sleep sync" daily-email timing. For athletes whose Garmin or Wahoo syncs after their preferred email time. The daily briefing is held until both fields arrive from your wearable, with an 11am-local fallback.
  • Three new Coach+ proactive nudges (Pro/Max): a "goal at risk" mid-week check, a "tomorrow asks a lot from you" evening prep, and a "tomorrow you move into a new phase" heads-up. Each opens Coach+ pre-filled with the matching question.
  • Billat 15/15 VO2max workout added. The classic short-interval protocol from the original Billat paper. Available for both running and cycling, sits in Build and Peak.
  • VO2max recovery jog for running fixed to true E-pace (mid-low easy band) per Daniels' Running Formula, so HR actually drops between reps.
  • Cycling threshold workouts respect periodization phase. Long L4 reps (e.g. 3×20 at FTP) are now phase-gated. Base caps at 10-min reps with 30-min total L4; Build caps at 15-min reps with 45-min total L4; Peak unlocks the classic 3×20.

Bug fixes and reliability

The biggest reliability wins this month sat in the weekly planner. Recovery, Deload, and Taper weeks were being systematically over-budgeted because a "skip enforcement when target is below 150 TSS" safety valve was catching legitimate small-target weeks. Taper weeks at 80-130 TSS were consistently planning at 226. Race-week and pre-race-taper plans were doubling up against the same floor and producing ~2× the appropriate workout volume around your race. Both are now fixed. FTP / ramp / run TT / swim CSS tests had been silently dropping out of weekly plans for non-Whoop athletes because a stale "today's recovery must be green" gate was checked at plan-generation time rather than on test day; that gate has moved to the day the test is actually scheduled. The fitness-chart CTL projection no longer flatlines through weeks loaded with race events (race load is carried through as a single-day spike on the actual race date). Walking and hiking workouts now show the correct icon everywhere. The Dashboard's "This Week — Load" card no longer double-counts today's workout. Sleep duration no longer reads "7h 60m" when you slept ~8 hours. And a stack of language-related fixes: Agent Log on iOS no longer shows raw translation keys, the daily email greeting matches the local time of day, and signal copy is now translated everywhere instead of falling back to English.

These are just the highlights. See all 200+ changes in the full changelog.

More coming soon. Questions or ideas? Just reply to this email.