How lope classifies your runs
Every time you sync a run, lope decides what kind of run it was — Easy, Long Run, Threshold, VO2max, Race, Recovery, or Strides — without you needing to tag anything. Here's exactly how, and why a run named “Morning Run” can still come back as Threshold.
The seven run types
lope sorts every running activity into one of seven types. Each one carries a different physiological purpose and a different recovery cost.
Aerobic base building. Most of your weekly mileage should land here.
The longest run of the week. Builds endurance and durability.
Sustained hard effort at or near lactate threshold. Tempo and cruise intervals.
Short, very hard intervals. Pushes the aerobic ceiling.
A race or hard time trial. Treated as a benchmark, not training.
A short, deliberately easy run after a hard session.
Short, fast pickups. Maintains neuromuscular economy.
The cascade
lope checks signals in priority order. The first match wins, so stronger signals override weaker ones. The whole flow runs in a few milliseconds per activity.
Race tag from Strava
If the activity is tagged with Strava's race workout type, or the name contains race / time trial / parkrun, it's a Race. (race pace is excluded — that's a workout name, not a race.)
Strides shorthand
If the name says “strides” and the run is 1.5 miles or shorter, it's a Strides session. Longer runs that contain strides stay classified by the rest of the cascade — see Why “easy run + strides” stays Easy below.
VO2max keywords
Names matching VO2 / intervals / repeats / track / fartlek / hill repeats / specific distances like 4x800 or 6x400 — that's VO2max work.
Threshold keywords
Names matching threshold / tempo / cruise / lactate / steady / progression / marathon pace — that's Threshold work.
Strava workout_type tags
If you've manually tagged the run as a workout in Strava, lope respects it. Workout-tagged runs go to Threshold or VO2max based on intensity (HR zones, pace ratio, distance).
Long-run threshold
If the distance crosses your personalized long-run threshold (next section), it's a Long Run.
Recovery signals
If the name says recovery / shake-out / jog AND the effort was easy, it's Recovery. Or, a very short run (under ~3-4 miles for most people) at very easy pace and HR is also Recovery.
HR/pace fallback
If avg HR is in Zone 3 or above, max HR is in Zone 4+, or pace is significantly faster than your typical easy speed, it's at minimum a Threshold effort. This catches the runs you didn't name or tag — the ones that would otherwise quietly slip into Easy.
Default to Easy
If none of the above triggered, it's Easy. Gray zone analysis (separately) catches Easy runs that drift too fast.
Source: src/lib/classifier.ts in the lope app.
Your personalized long-run threshold
What counts as a Long Run depends on you. A 9-mile run is a long run for someone averaging 25 miles a week, and a routine mid-week run for someone averaging 60. lope sets your threshold based on your own training, not a fixed number.
Base formula: 25% of your average weekly mileage over the last 8 weeks. Clamped between 5 and 16 miles so it never gets unreasonable.
Personalization: if you ever manually mark a run as “Long Run” that lope had labeled differently, lope takes the smallest such distance and uses 90% of it as a personal floor. Future runs at or above that distance auto-classify as Long Run going forward.
One manual override is enough — lope doesn't require you to mark several runs before learning. The smallest distance you've confirmed as a Long Run becomes the new floor.
The HR/pace fallback (why “Morning Run” can come back as Threshold)
A common pattern: you head out for a run, push hard for 13 miles, log it as “Morning Run”, and don't tag it as a workout in Strava. Without name keywords or a workout_type tag, a simpler classifier would call this Easy — even if your average HR was 167 (Z3) and your max was 182 (Z5).
lope reads the data instead. If the run met any of these, it's flagged as at minimum Threshold:
- Average HR in Zone 3 or above
- Max HR in Zone 4 or above
- Average pace 18% or more faster than your typical easy pace
The “typical easy pace” is the median speed of your last 40 easy or recovery runs (Z2 or below) over the last 90 days — so it adapts as your fitness changes.
Strides — and why “easy run + strides” stays Easy
Strides are short, fast pickups (typically 8-20 seconds at near-mile-pace effort, with full recovery between). They're neuromuscular work — they keep your top-end speed sharp without taxing your aerobic system. Most coached runners do them 2-3 times a week, attached to the end of an easy run.
lope handles strides at two levels:
Pure stride sessions
A standalone short run named “strides” or similar, 1.5 miles or shorter, classifies as Strides.
Strides attached to an easy run
A 6-mile easy run with 6×100m strides at the end stays classified as Easy. The strides don't reclassify the whole run as a speed workout, because they aren't enough volume to change the run's purpose.
Lap-level stride detection
Even though the run is Easy, lope scans the laps for stride-like patterns: any lap shorter than ~241m (about 200m) where pace is 1.2× faster than your typical easy pace. Those laps count toward your Speed Maintenance score even though the run itself stays Easy.
Net effect: you can attach strides to an easy run, log it as “Tuesday easy + strides”, and lope will (a) keep the run correctly categorized as Easy, (b) credit you for the strides toward your speed score, and (c) factor the stride volume into the coach's assessment of your top-end work. You don't have to do anything special to make it work.
If lope gets it wrong
You can override any run's classification from the activity detail page in the app. Your overrides are saved and feed back into the personalization — especially for the long-run threshold, where one manual “this is a long run” is enough to lower the floor for future runs.
The classifier is intentionally biased toward calling things harder rather than easier. A misclassified Threshold that should have been Easy is annoying; a misclassified Easy that should have been Threshold quietly understates your training stress and skews the coach's read of your week.
Why this matters for the coaching
The classifier's output flows into nearly every other lope feature. Your weekly summaries reference it (“38 miles, all easy runs in zone”). The coach checks 80/20 intensity distribution against it. Gray zone alerts trigger when your Easy runs drift too hard. Your Foundation score weights heavy easy mileage; your Speed Maintenance score weights stride sessions and VO2max work. Getting the classification right is upstream of all of it — which is why the cascade is the way it is.