In the previous post, I explained how IntervalCoach builds your weekly plan: goal-driven phases, weekly TSS targets, and a rolling four-week calendar of workout slots. But a plan written on Sunday does not know that you slept terribly on Wednesday, or that your recovery tanked after Tuesday's race. That is where daily adaptation comes in.
Every morning, before your workout email goes out, a five-step pipeline checks whether the planned workout still makes sense for how you are feeling right now. If it does, you get the original workout. If it does not, the system adapts it.
Here is how each step works.
Step 1: Are you sick or injured?
The first check is the simplest. The system looks at your Intervals.icu calendar for a SICK or INJURED event. If one is active today, the pipeline stops immediately. No workout, no nudging. You get a rest day email with recovery guidance.
The interesting part is what happens after you recover. The system does not throw you back into full training. Instead, it applies a gradual ramp:
- Days 0-2 after recovery: 30% of normal training load, Zone 1-2 only
- Days 3-5: 50% load, up to Zone 3
- Days 6-10: 75% load, up to Zone 4
- Day 11+: Back to normal
This prevents the common mistake of feeling better and immediately jumping back into hard intervals.
Step 2: What is on your calendar?
Next, the system checks what is already on your calendar for today:
- A or B race: No workout generated. You get a race day email with pre-race advice.
- C event (group ride, fun ride): That is your workout for today. No need to pile on more training.
- External workout from another source: If you have your own workout planned, the system respects it.
- Weekly plan workout: This is the most common case. The system checks whether conditions have changed enough since the plan was created to justify adapting it.
That last point is important. The system does not re-evaluate your workout from scratch every day. It compares your current recovery and fatigue to what they were when the plan was created. Small fluctuations? Keep the original. Significant shift? Adapt.
Step 3: Should you rest?
This is the heart of the adaptation system. Multiple signals feed into a readiness assessment that decides: train as planned, modify the workout, or skip it entirely.
The signals it checks:
Recovery score. If you use Whoop, your recovery percentage feeds directly in. Below 34% (red) is a strong rest signal. Between 34-67% (yellow) means caution. Above 67% (green) is good to go.
Training Stress Balance (TSB). This is the relationship between your long-term fitness load and short-term fatigue. A TSB below -20 means you are fatigued. Below -25 combined with yellow recovery? Automatic rest day.
Sleep. The system does not just look at hours slept. It compares your sleep to your personal baseline using a z-score. Someone who normally sleeps 6 hours and got 5.5 is in a different situation than someone who normally sleeps 8 and got 5.5. A z-score below -1.0 triggers load reduction.
HRV and resting heart rate. These physiological signals can override sleep data. If you slept poorly but your HRV is above baseline and resting heart rate is normal, your body is telling you it has recovered. The system trusts physiology over self-reported sleep. Beyond single-day readings, the system also tracks your HRV coefficient of variation (HRV-CV) over a rolling window. A volatile HRV-CV indicates autonomic instability, a stronger fatigue marker than one low reading. Critically volatile HRV-CV triggers an automatic rest day.
SpO2 and skin temperature. Wearable biometric data adds another layer. Blood oxygen below 95% is a warning. Skin temperature elevated more than 0.5 degrees above your 30-day baseline flags potential illness before you even feel symptoms.
Consecutive training days. Five or more days in a row with only moderate recovery? Time for a break.
Training monotony. If your daily training load has been too similar day after day, overuse risk increases. High monotony combined with moderate fatigue triggers a rest recommendation.
Acute-to-chronic workload ratio. A spike above 1.5 means your recent load has jumped too fast relative to what your body is adapted to. The system reduces load to lower injury risk.
Respiratory rate. An elevated overnight respiratory rate (above 18 breaths/min) can indicate early illness or stress, even when other metrics look fine.
Deep sleep and sleep debt. Beyond total sleep hours, the system checks deep sleep specifically (under 1.5 hours is a deficit) and accumulated sleep debt. Significant sleep debt over multiple days compounds fatigue signals.
Subjective wellness. If you log how you feel in Intervals.icu (soreness, fatigue, stress, mood on a 1-5 scale), the system uses those too. When multiple subjective markers are bad at the same time, the compound signal is stronger than any individual one.
Workout feedback. If your recent workouts have consistently felt harder than expected (high RPE scores), the system treats that as a signal that your body is under more stress than the numbers alone suggest.
Load-recovery ratio. The system compares your acute training load (recent days) against your chronic load (longer trend) using exponentially weighted moving averages. When recent load outpaces what your body is adapted to, it flags the imbalance before it turns into overreaching.
Aerobic durability. By tracking how your aerobic efficiency trends over time (power-to-heart-rate coupling), the system can detect early signs of overtraining. If your efficiency is declining despite consistent training, something is off and the system adjusts.
Plan consistency. The system tracks how closely you have been following the plan. Low adherence is not punished, but it changes the context: if you have been skipping sessions, the system does not try to cram missed volume into remaining days.
In total, the system tracks over 60 distinct signals across 11 categories. Not all apply to every athlete. If you do not use a wearable or do not log wellness data in Intervals.icu, the system relies more on TSB, training patterns, and workout feedback. It works with what it has. The more data you provide, the more precise the adaptation.
How signals become decisions
Raw signals alone do not make decisions. A priority-ordered rules engine evaluates all active signals and produces concrete actions. The rules fall into three tiers:
Rest triggers (highest priority). Active illness, critical SpO2, red recovery, chronic fatigue, volatile HRV-CV, or deep fatigue combined with yellow recovery. When any of these fire, the system stops evaluating further rules and prescribes rest. No workout, no negotiation.
Intensity caps and load reduction (medium priority). Return-to-training ramp, elevated biometrics (SpO2, skin temp, respiratory rate), poor sleep, sleep debt, or compound subjective distress. These accumulate: if poor sleep reduces your TSS by 20% and elevated skin temp caps you at Zone 3, both apply. The most restrictive combination wins.
Monitoring (lowest priority). High soreness extends your warm-up. Consecutive training days and declining workout effectiveness get flagged for the coaching note but do not change the workout structure.
This layered approach means the system never overreacts to a single data point. A bad night of sleep with normal HRV results in a modest load reduction, not a rest day. But a bad night of sleep combined with red recovery and high fatigue triggers rest, because the compound signal is clear.
If the decision is to rest, any scheduled workout gets replaced with a light recovery session and you get an email explaining why.
Step 4: How should the workout change?
If you are training but conditions are not perfect, the system applies two types of modification:
Intensity caps limit how hard you can go. Depending on the signals, the system restricts your workout to certain zones:
| Condition | Max zone | Example |
|---|---|---|
| Return to training (day 1-2) | Zone 2 | Light spinning only |
| Red recovery or HRV crisis | Zone 2 | Easy aerobic work |
| Moderate fatigue | Zone 3 | No threshold or VO2max |
| Deep sleep deficit | Zone 4 | Threshold OK, no sprints |
| Normal | Full | No restrictions |
TSS multipliers reduce the overall training load. A multiplier of 0.75 means the workout targets 75% of its original stress score. When the reduction is moderate (above 70%), the system keeps the same duration but lowers intensity. Only under significant fatigue does the session get shorter. This keeps your schedule predictable.
These constraints are applied before the workout is generated. The coaching note in your email explains what was adjusted and why, but the adjustments are already baked into the intervals you see.
Step 5: Generating the adapted workout
With all constraints in place, the system generates the actual workout. The previous post covered how the weekly plan selects workout types based on training phase, stimulus spacing, and weekly TSS targets.
What is specific to daily adaptation is how the selected workout gets shaped by today's constraints. If the plan calls for threshold intervals but your intensity cap is Zone 3, the system picks a tempo or sweet spot workout instead. If your TSS multiplier is 0.85, it might keep the same interval structure but remove one repeat or shorten the main set.
The result is a structured workout with warm-up, intervals, and cool-down, uploaded directly to your Intervals.icu calendar. It syncs to Zwift and other apps with full power or pace targets.
Mid-week steering
The adaptation pipeline does not only respond to how you feel. It also tracks whether you are on pace for your weekly TSS target.
Daily load delta. After each training day, the system compares what you actually did versus what was planned. If yesterday's session was significantly harder than planned (more than 30% over target), today's session gets scaled down by up to 30%. If you went easy or skipped yesterday, today's session gets a modest boost of up to 15%. This prevents the week from snowballing in either direction after one off-plan day.
Weekly reallocation. On a wider scale, the system checks your cumulative TSS against the weekly target. If the drift exceeds 15% of the weekly target, it redistributes the remaining TSS across the days left in the week. Running behind? Remaining sessions get scaled up (capped at 1.3x). Running ahead? They get scaled down (floored at 0.7x). Small drifts within 15% are left alone to avoid over-correcting.
This means if you crush a long Saturday ride that blows past the plan, Sunday's recovery spin stays light. And if a Wednesday rest day means you are behind, Thursday and Friday sessions absorb the difference rather than piling everything onto the weekend.
What this looks like in practice
Monday morning. Your weekly plan says threshold intervals. Your Whoop shows 45% recovery (yellow). TSB is -16 (tired but not fatigued). The system keeps the threshold workout but reduces TSS by 15%. You get the same type of session with one fewer interval.
Wednesday. Recovery dropped to 28% (red) after poor sleep. The system cancels the planned VO2max session, replaces it with a 45-minute easy spin, and your email explains: "Recovery is in the red zone today. Swapping hard intervals for an easy ride to let your body catch up."
Thursday. Recovery is back to 72% (green), TSB has recovered to -8. Full training resumes. But you have only completed 35% of your weekly TSS target with three days left. The weekly reallocation kicks in, scaling up Thursday's session by about 20% to get the week back on track.
Saturday. You went on a group ride that was way harder than planned, 180 TSS instead of the planned 120. The daily load delta catches this. Sunday's planned endurance ride gets scaled down by 25%, keeping the weekly total close to target without overloading you.
This is the cycle that plays out every day. The plan sets the direction. The adaptation pipeline adjusts the execution. You get workouts that respect both where your training should be going and where your body actually is today.
If you want to see this in action, check the coaching note at the top of your daily email. It explains exactly why you got the workout you did. That transparency is intentional. I want you to understand the reasoning, not just follow instructions.