Start in 3 steps
From zero to a personal schedule
1 · Tell us where you're starting from
Optionally tell us your current weekly volume and years running — it gives your very first plan a realistic starting point instead of a generic beginner default.
2 · Connect your data
Connect Strava in Settings. In the iOS app you can add Apple Health (HRV, sleep, resting heart rate, and any workout your watch or phone records — runs, rides, walks, strength). Health workouts count towards your training load exactly like a Strava activity, so a watch-only day is never invisible to your plan; if the same workout also syncs from Strava, only one copy counts. The more sources, the sharper the coaching, though pace and distance alone are enough to start. Connecting Strava pulls in your last 90 days right away, and then keeps importing your full history automatically in the background — no need to keep the app open. For most athletes this finishes within minutes to a few hours; an especially large history (thousands of activities) can take up to about a day.
3 · Set your goal
Pick a goal (a race, or just “get fitter”) and the days you can train. Kurro builds your schedule right away — before you finish signing up, you already see exactly how it's calibrated to you and why it starts the way it does.
4 · Let Kurro learn you
Every run is analysed automatically: your fitness, fatigue, recovery and training zones build up from your own history, and any starting estimate is replaced by your real data as it arrives.
How your plan adapts
100% dynamic; you never have to replan manually
Your schedule isn’t a static PDF. It’s continuously adjusted to what you actually do and how you’re doing:
Always up to date
Your plan re-tunes after every sync, every night and whenever you change something, so the path to your goal is always current. Strava stays a faithful mirror: edit or delete an activity there and Kurro follows the next time it syncs, and a nightly catch-up sweep re-checks your last 30 days regardless, so nothing is left behind even if you never open the app in between. Catching up on health data after being offline for a few days (e.g. your phone was off) re-tunes the plan right away too, whenever it meaningfully changes your recent recovery picture. This nightly update runs for you even if you go a while without syncing anything at all, as long as you have an active goal, so a plan is never left stale just because nothing new came in. On rare occasions our own safety check rejects a proposed update outright and keeps your current plan rather than risk a broken one; we keep retrying automatically, and if that stretches on, your plan’s "what changed & why" list tells you honestly, naming the date your plan is from.
Around your life
Set which days you can’t train or want your long run, and the plan redistributes automatically; with hard-day spacing enabled (the default) it keeps your learned recovery gap — typically 1-3 days — between hard sessions, including across the boundary from one week into the next (so a Sunday long run isn’t followed by a Monday hard session — weeks aren’t treated as isolated Monday-to-Sunday cells). Turn that spacing off if you specifically want hard days back-to-back — the plan will honour it, at the week boundary too. You can also set a maximum number of running days in a row before a rest day is inserted (strength sessions don’t count, they’re non-impact) — the plan builds, extends and reshapes around missing days with this cap always honoured; a missed-session make-up can never breach it either, since it only ever swaps the TYPE of a day you were already training on, never adds a new training day. Dragging a session yourself onto a day that would push you past that limit still goes through (it’s your call), but we tell you so, the same way we tell you about any other day rule your move overrides. You can also state a soft preferred long-run day and preferred quality days (say, a Saturday long run and a Tuesday club session): the plan honours them whenever your day rules and hard-day spacing allow, and tells you honestly on the weeks it can’t — a preference never overrides your safety spacing or a day you blocked. If you like, set a preferred time of day too: your planned workouts will show at that time (and on a doubles day, the second run in the evening). It’s an optional hint — it only changes when in the day a session appears, never which day it lands on, so leaving it empty changes nothing.
Your run-day count, your way
Choose how many days a week you want to run and how it’s honoured: “Fixed” schedules that many every week when your availability allows it (and warns you when your volume or your blocked days make that impossible), while “Aspirational” (the default for new goals) grows toward your number as your volume builds, so early weeks are a few meaningful runs, not short filler. In Aspirational mode, if your plan currently funds fewer days than you asked for, the plan page tells you honestly how many, and that the extra day (or days) get added automatically as your weekly volume grows, no action needed unless you’d rather lower the count in your training preferences instead of waiting. Your rest day is placed for recovery: it lands right after (or, when that is not possible, right before) your heaviest session of the week, so a fixed “always Wednesday off” doesn’t creep in on its own by default and your body gets a real chance to absorb the hardest work. If you’d rather always keep the same day free, set a preferred free day in your training preferences: it still wins over that recovery placement whenever it can be honoured, though a genuinely better week (constraints, spacing) always comes first. Strength sessions are always added on top of your run days, never in place of one, and they build progressively through a training block, a little more work each week as your body adapts, instead of repeating the same session from week 1 to race week.
Responds to your form
Missed or harder runs shift your fitness and fatigue, and the coming weeks adjust accordingly, kept within safe limits. Falling behind never wipes the rest of your week, the runs that still fit stay planned, and a missed long run or key workout is rescheduled to a safe later day when one exists (clearly labelled as a make-up). A skipped or missed session doesn’t count as training you actually did, so on the next recompute the days around it are free to carry a proper hard session again, the plan never treats a session that never happened as a reason to keep going easy. For a skipped quality session (tempo, threshold, intervals, hill reps, goal-pace or fartlek) or a skipped fitness test specifically, an appropriate quality session, chosen the same way any quality day is, is offered again on another open day that same week, so the intended stimulus isn’t lost. A skipped long run is the one exception, it is not automatically re-offered mid-week. If the week genuinely has no room left for it, that day simply stays easy and the normal rotation (or, for a fitness test, the usual cadence) picks it back up the following occasion. The volume and intensity the plan asks of you next is driven by what you’ve actually run and how your body is responding, your training load, form and recovery trend, never by which sessions you did or didn’t complete: we assume you can pick a plan back up at full intent from one week to the next, so a missed session never itself makes the coming weeks more conservative. This never speeds up how fast your training is allowed to build back either way, safety always comes first.
Scaled to your level
From a walk/run start through to advanced: the workout mix, volume and intensity match your training history, and the quality work varies week to week. Coming back after months off, we recognise your past fitness from your personal bests and rebuild faster than from scratch, conservative volume to stay healthy, but never a blank-slate beginner plan. And as your fitness moves through a training block, your session sizing keeps pace with it rather than staying fixed at how you started. Tempo and goal-pace sessions in particular are sized to your actual weekly volume, so on a lower-volume week the hard effort (and its warm-up) is shorter, rather than always defaulting to a size meant for a much bigger week.
Two-a-day runs when the mileage warrants it
High-volume weeks can be run as doubles: on your biggest easy day the run is split into a main session plus a short easy shake-out, so the same distance lands as two better-recovered runs. It’s strictly opt-in and only kicks in once you’ve genuinely earned it - a sufficiently high fitness level and a genuinely high-volume week (around 100 km or more) - below either bar a single run carries the day just fine, so nothing changes. It never adds mileage on top: your weekly and daily totals stay exactly where your plan set them, keeping you inside the same safe ramp.
Tuned to your own responses
It learns your paces, the load you tolerate and the recovery you need, instead of one-size-fits-all rules.
Honest about your goal
A time goal is checked against what you can realistically reach by race day, so an impossible pace is never prescribed. And if you’ve turned long runs or speedwork off for a race that’s normally built on one of them, the plan page tells you honestly, it’s your setting, never overridden, just never left unsaid.
No quality work on a very light week, and the plan says why
Tempo, threshold and interval sessions only unlock once there’s enough weekly running behind them, below roughly 12 km/week there isn’t room for even one meaningful hard effort, so the plan honestly stays easy-only rather than forcing a token session. If that’s why your week has no quality work, the plan page names the threshold and exactly how far your current volume is from it, never a silent zero. Training for a race with a date set gets you at least one real quality session as soon as your volume can support one at all.
A long run has to actually be long
On a very light week, sizing your long run off your normal weekly volume can land on just a few minutes, and a few-minute “long run” is really just an easy run wearing the wrong label. Below that point the plan honestly runs it as a plain easy session instead. When that happens, the plan page tells you the minute threshold for a real long run at your distance and the weekly volume at which it comes back.
Your chosen run-day count has a minimum weekly size, and the plan is honest about which one wins
Every one of your run days has to genuinely hold something real: a proper long run plus every easy day at a meaningful minimum length. If your current volume target is thinner than that, the plan doesn’t force it to fit anyway — in most training weeks it raises that week’s volume up to what your chosen number of days actually needs, so every day still gets real running, and tells you it did. In a taper or the week around your race, it works the other way: your race-week volume is the one thing that must not be inflated to fund a day count, so instead the plan reduces how many days you run that week and says so honestly. Either way, you always know which one moved and why. Before you have any recent logged running to go on, that first case is capped: without evidence of what you can actually handle, the plan won’t raise a week’s volume without limit just to hold your full day count, so it runs fewer days instead, tells you why, and says roughly how many kilometres of logged running unlock the rest — this limit vanishes once your logged weeks reach that mark, it’s not a promise you get every day back immediately.
Occasionally, one or more weeks get fully replanned
Behind the scenes every recompute double-checks itself: it quietly rebuilds every upcoming week from scratch and compares each rebuild against what you actually see. Most of the time they agree and nothing happens. When they meaningfully disagree for a week, a different session type, sessions moved further apart than expected, or a noticeably different total volume, that week may be swapped for the freshly rebuilt version, anywhere across your plan, not just next week, and never touching a completed day, a race day, or a day you moved yourself. This is a "meaningfully different" check, not a "which one is better" judgement call, so a swap simply means the two versions disagreed enough to matter, never that the version you had was wrong. A week that was just replanned needs a bigger, clearer disagreement to be replanned again any time soon, and that heightened bar sticks around for a long stretch (about seven months) before quietly resetting, plenty for any realistic training block, so the plan settles rather than shifting back and forth. If that happens, tap "Why this workout?" on any session in that week and you'll see the actual reason it was replanned, never silently.
This week or next may re-place your key session for better coverage
For a race goal (10K and up, with enough weekly volume to genuinely support one), the plan can also compare, for the current week and the very next one only, a couple of ways of arranging that same week and pick whichever one gives you better coverage of the key stimulus it's built around (mainly, whether your long run actually lands somewhere). This mainly matters when your week is otherwise packed too tight for the long run to fit; most weeks already have room for it and nothing changes. It never touches any week further out, never crams in a session you missed in the past, and it always respects your long-run setting: if you've turned long runs off, it will never add one back. It's the same safety-checked machinery as every other recompute, so it can only pick an arrangement that still passes every plan-safety check, never something busier or riskier than what you already had.
Tune how calm or reactive that is (Volatility & Agility)
Two optional settings in your training preferences let you dial the behaviour above up or down, per your own taste. Volatility controls how big a difference needs to be before it's worth changing anything: lower it for a calmer, more stable plan that only reacts to bigger disagreements; raise it and smaller differences get applied too. Agility controls how soon a week that was just replanned is allowed to change again: lower it and a recent change sticks around longer; raise it and the plan is quicker to adjust again. Both default to a standard middle setting that matches how the plan has always behaved, and turning either all the way up can make your plan feel busier week to week, that trade-off is yours to make.
Every planned workout can explain itself. Tap “Why this workout?” on a session and you see the actual reasons the engine scheduled it — the training phase you’re in, why this session type, how your pace target was derived, why it’s this long, your current load, why this day, and anything the plan has learned about you personally. It’s the engine’s own arithmetic, not an AI-written summary, so it always matches what the plan really did.
One destination, an adapting route
Your goal stays fixed. The way there keeps adjusting to you.
Think of your plan as a route to a destination you set, not a fixed itinerary printed on day one. The destination, your goal and race day, stays put. The route itself keeps adjusting as new information comes in: a run you did, a rough night's sleep, a day you blocked off. That adjustment is never a full reset. What you have already done stays done, what you locked or moved yourself stays exactly where you put it, and your race day is never touched. Only the road still ahead of you gets re-drawn, and only as far as it needs to, to keep you heading toward the same destination in the safest, most realistic way given where you actually are right now.
You help shape that route too: your training days, your constraints, your preferred long-run day, the dials that control how calm or reactive it is. The engine plans the road, you set the boundaries it has to plan inside.
When life happens
Keep moving without an objective — and we’ll ask when the plan stops fitting you
“Life happened” maintenance mode
A new job, a house move, a stretch of low motivation — sometimes you just want to keep ticking over without chasing a goal. Turn on maintenance mode in settings and pick an end date: your plan switches to easy, unstructured running only — no hard workouts, no long-run pressure, a lighter weekly volume — for as long as you need. There are no realism warnings and nothing is counted against you: missing a maintenance run is never a “failure”. When it ends, we ease you back in the same way we treat a comeback — recognising the fitness you had and rebuilding faster than from scratch, but conservatively.
We ask when the plan seems wrong (opt-in)
The plan predicts roughly how much you’ll run each week. If your real training drifts far from that prediction for a few weeks running — way under, or way over — the honest move is to say so plainly instead of staying quiet about it. So, if you switch this on, we add a clear note to your readiness explanation: “the plan may be wrong about you right now — tell us what’s going on.” That’s all this switch does; it never changes your training itself. Whether your plan actually adapts to your real training happens through its own separate, ongoing recalibration, not through this switch. Off by default.
Week, month & rescheduling
Reading and shaping your calendar
Two views
Switch between a week view (full detail per day, with the target distance/duration and pace on every session) and a month view to see your whole block at a glance. Training for a race? Your plan is visible up to ~6 months ahead (26 weeks). If race day is further out than that, the visible weeks are a general fitness-building period, not the race-specific block yet: the plan rolls forward automatically, and the real race-specific build starts once your race comes within that ~6-month window. Otherwise it keeps a rolling 12-week window ahead and extends automatically (this isn't user-adjustable). Cards are coloured by intensity: green for easy/recovery, blue for long, amber for quality (tempo, threshold, intervals, hills, and an Easy Run + Strides session, since the strides push it past a plain easy effort), slate for strength.
Distance on effort-based sessions
Some sessions (like Fartlek) are prescribed by feel rather than a fixed pace, and Easy Run + Strides adds a few short accelerations on top of its main run. Their card and detail view still show a distance for planning purposes: an approximate figure, marked with “~”, estimated from a typical pace for that effort. A stored, exact distance never carries the “~”, it only appears once part of the number is an estimate.
Month view
Each day shows its planned distance alongside the session type, and every week row carries its own planned-km total in the margin. A day with more than one session shows a small coloured dot per session instead of stacking a full card for each, tap a dot to open that session.
Take a session to your watch
Any session with structured steps can be downloaded as a standard .fit workout file from its detail view (“Download .fit”). Import it into Garmin Connect, COROS, Polar Flow, or any platform that accepts FIT workout files, and your watch guides you through every step with a pace, heart-rate, or power target — whichever metric you've set your execution preference to in Settings (power requires a running power meter/pod so your profile has a running power number to work from). Using the iOS app with an Apple Watch? Then you don't need this: structured sessions are pushed to your watch automatically, alerting you the same way (power on the Apple Watch push itself is coming in a follow-up). A step prescribed only by effort (RPE, e.g. a hill-repeat “hard uphill”) has no exact number in the plan: on pace/heart-rate it gets a deliberately wide, forgiving range instead, roughly double the width of a normal target band, so it reads as “stay in this broad zone” rather than a precise number to hit; on power it uses the same band your session's work steps already carry. This is on BOTH watch paths (Garmin/COROS/Polar .fit AND the Apple Watch push), not a name-only hint. The SAME wide range is also shown next to the effort badge in the app itself, marked with “~” to make clear it's an indicative guide, not a tight target.
Moving sessions
Drag a planned workout to another day, or use the “Move to” picker in the workout detail. Set per-day constraints (rest days, max duration, no speedwork, no strength, no assessment/test, no long run) and the plan reshapes around them, a strength session lands elsewhere on a no-strength day, just as speedwork does on a no-speedwork day. Your move is final: even onto a day with a constraint, or a day that would put more running days in a row than your own “max consecutive days” setting allows, we warn you (and shorten the session if that day has a time limit) but never silently move it back, unlock the day to hand it back to the planner. Unlocking gives up your claim on that placement, not just a small tweak: the plan is free to choose the best session for that day again, and your whole upcoming week can reshape around it when a materially better version is found. Moving onto a day that already has a session of the same kind (a run onto a run, a strength onto a strength) replaces it, once you confirm: the replaced session is removed. If that day's session is locked or already done, the move is blocked instead, and your race day is always protected this way too, so it can never be swapped out by dragging something else onto it. You can't move a session into the past, since a past date would immediately count as a missed workout. A session you deliberately move counts fully toward its role for that week, whether it's your quality session, long run, test, strength day or easy volume, so the next recompute never plans a second one to make up for the one you already placed.
The day you moved a session away from is still open to the planner though, and a later recompute may fill it with a new session of its own. If that happens, you get a one-time prompt to keep that day free instead (a date-specific constraint, same as setting one yourself). Do nothing and it's left as-is, the new session simply stays.
Saving a day constraint while your plan is already mid-update can take a moment longer than usual to show up, occasionally the calendar still shows the old session briefly after you save. Watch for the “Updating your plan” indicator, once it clears your change has fully landed. What it says next tells you the actual outcome: if your change reshaped this week's plan you'll see a short note on what changed, and if it didn't (nothing structural needed to move) it says so explicitly, so you know the recompute genuinely ran either way.
Blocked off a range of days you no longer need, say a trip that got cancelled? Under your training preferences you can clear a whole date range of day-level constraints in one go instead of removing each day one by one, and the plan reshapes around the change immediately.
Locking a session on its day
Prefer to keep a session exactly where it is, without moving it? Use the lock toggle in the workout detail (a lock icon also shows on its card). A locked session is protected from every recompute the same way a moved or completed one is: the plan reshapes around it instead of touching it, and it can't be replaced by dragging something else onto that day. Unlock it any time to hand the day back to the planner. Locking is a pure “keep this here”, it's different from actually moving a session: it doesn't count as evidence about where the plan should place that type of session in future, and it never displaces a nearby fitness test.
AI coach & guardrails
A coach that knows your data, with limits that protect you
The coach sees your current context (form, recovery, planned workouts, goal) and answers concisely - it already knows your next season race, how your plan is phased week by week, and your running level/experience, without having to look them up. Alongside your predicted finish time from current fitness, it can also tell you what you're on course for if you complete the plan in full. When a question needs more detail, it can also look up your full readiness picture, recent plan changes, training load trend, races and personal bests, predicted race times, how your recent sessions actually went, your current week's schedule including rest days, your recent niggle history, and, if you've turned it on, your cycle phase. It only ever reads this data, never changes it on its own. A row of suggested questions always sits above the message box, whether your chat is empty or already going, tap one to fill it in and send it as-is or edit it first. A few are always there (e.g. “How am I doing?”, “What's my focus this week?”), and a couple more can show up based on your current situation, e.g. “Why is today amber?” on a lower-readiness day, a plan-adjustment prompt if you've logged a niggle, “Is my goal still realistic?” if a feasibility warning is active, or a prompt about your next long run or key session. The coach now also nudges you toward a natural next step: if you logged a run manually and haven't said how hard it felt, it asks “How hard did that feel, 1 to 10?”; after setting a new goal it can ask you to mark the days you can't train; while a trip is blocked off on your calendar it offers to ease your intensity; after a missed session it can offer to find a catch-up slot; and it'll point out when you haven't checked in yet today, when your threshold pace has gone stale, when you're heading into your taper, or when your training load looks uneven. Each of these disappears again on its own once you've handled it. These situational prompts only ever ask a read-only question, the same kind the coach already answers, never a suggestion to change a setting or disconnect anything. Around it sit deliberate safety guardrails:
- No medical diagnoses or treatment advice. For pain or injury signals it refers you to a professional.
- It ignores instructions hidden in your activity names or messages.
- Fair-use limits and input checks keep it safe and reliable. If a limit is reached, you keep chatting and reading as normal, only drafting new proposals pauses, and you’ll see a short notice explaining why.
The coach can also draft a change for you (a check-in, day constraints for a trip, a soft training-day preference, a hard recurring weekly rule for one or more weekdays, moving/locking/skipping a workout, pausing to a maintenance window, setting up or editing a training goal, resolving a post-race prompt, adding a race or a race result to your season, updating your other training-preference dials, overriding or resetting your runner level, logging a race-week taper feeling, logging a manual body-weight entry, logging an activity you didn't track with a device (including how hard it felt, which matters most when there's no watch data to go on), editing an activity, logging or removing a cycle-tracking day if you've turned that on, setting your own pace/heart-rate/power thresholds (or asking it to go back to figuring them out for you automatically), updating a setting like your max heart rate or resting heart rate (or a medication note that affects it), clearing a day-constraints rule for a date range or a weekday entirely, telling it which data source (power, heart rate, or pace) should win when more than one is available for working out your training load, or deleting a goal, a race, a race result, or an activity) - it never applies anything on its own. Every proposal shows up in the chat as its own card with what would change, and only takes effect once you tap Confirm; tap Reject and nothing changes. The card names the thing it is about, so when the coach proposes moving or skipping a session you see which session and which day it is, and before deleting an activity you see its name, sport and date, instead of having to take the coach's word for it. Proposals you don't act on expire after 30 minutes. Deleting something is permanent, so it asks twice: after the first Confirm it shows you exactly what would be affected and asks you to explicitly tap “Yes, permanently delete” before anything is actually removed, you can still back out with Reject right up to that second tap. Some settings, like your name, sex, birth year, timezone, or app theme, always stay something you change yourself in Settings, never through the coach. A short list of things stays deliberately off-limits to the coach entirely, because they are yours to decide directly: payments, deleting your account, privacy consent, connecting or disconnecting Strava or Apple Health, and generating a brand-new plan from scratch. Everything the coach can do, it does by proposing a change you confirm, never by acting on its own.
A flat, unqualified request like “I don't train on Thursdays” is set as a genuine, permanent weekly rule (the same weekly availability you can also set yourself under your training preferences) - the coach never turns it into a soft nudge it might just as easily set aside. If you only mean a preference (“I'd prefer to keep Mondays free if the plan allows”), say so, and it sets a soft nudge instead. Either way you always see, and confirm, exactly which kind of change is being proposed before it takes effect.
Your chat now runs in conversations: the coach only reads back what you and it said earlier in the SAME conversation, not everything you've ever asked. Use the “New conversation” button whenever you want a clean slate, your older messages aren't deleted, they just sit outside the conversation you're currently in. You can page back to an earlier conversation too: “Earlier conversations” lists your most recent ones with the question you opened them with, and tapping one reopens it so you can carry on there. Very old conversations aren't listed, but nothing is ever deleted.
The first time you open the coach on a new day it starts you with a short briefing: your readiness for today, what's on your plan, and one thing worth keeping an eye on if there is one. It's put together straight from your own data (no AI guesswork, so it costs nothing and never eats into your daily message limit), and if there's no readiness reading in yet it just says so rather than making one up. It only appears once per day, based on your own local day, not a server clock.
In Settings > External access you can generate a personal token so another AI app can read your training data or draft the same kind of changes on your behalf. By default it can only read and propose, the same as chatting with the coach yourself: you still confirm every change in the app. When you create a token you also pick how long it stays valid (30, 90 or 365 days, or no expiry) - 90 days is the default, so a token doesn't stay usable forever unless you deliberately choose that. Each token shows its expiry date in the list, and once it expires you just create a new one. For a short list of small, easily-reversible changes (a training-day preference, moving/locking/skipping a workout, or day constraints for a trip) you can flip a per-token switch to have those apply immediately, without a confirm tap. Anything that deletes something, or bigger changes like a new or edited goal, always still waits for your confirmation, that switch never touches those. Any token you created before this option existed was reset to read-only, so if you want one to draft changes you just turn on that permission (or make a new token) yourself.
Calibrated to you
See how your plan is personalised
The plan page has a Calibrated to you panel that lays out, in plain language, how your plan is tuned: your training paces, how fast your volume builds, the recovery you need between hard days, your long-run growth, how current our read on your fitness is, your level, and your goal versus what’s realistic by race day.
Each item is tagged Learned from you, From your data, Personalised or Default, so you always know what’s personalised and what’s still a safe starting point, and it shows how much of your plan is already tuned to you. Personalised means we haven’t learned the number from your data yet, but a rule has already tuned it to you — for example a steeper volume ramp because you’re returning to running, or a gentler one for masters age — so it’s never just a generic default.
You see this the moment your plan is created — the last onboarding step narrates it for you (“here's why your plan starts this way”) with the same panel underneath, so you know exactly what you're getting before you finish signing up.
One honest caveat: this panel covers what actually gets tuned to you. Your Fitness and Fatigue trend (which feed your weekly load and deload decisions) are built from standard, published time constants, not numbers fitted to your own data, so they aren't part of what's “calibrated” here; see “What your numbers mean” below for what those two are and where they come from.
You'll also notice a session's pace target shows as a small range (e.g. 4:51–5:09 /km) rather than a single exact number. That's deliberate honesty, not vagueness: every intensity zone is itself a range, and your session pace is shown at the same precision the zone actually has — never a single number dressed up as more exact than it is. Any pace inside the range is a good execution of that session.
It learns your body
Personal, not one-size-fits-all
The longer you use Kurro, the more it works from your patterns rather than generic rules:
Your paces
Your zones are nudged to match how you actually run your sessions.
How fast you can build
The plan ramps your volume at the rate you’ve shown you can absorb safely — and if a build once set your recovery back, it remembers the ceiling and won’t push you back into it.
Recovery you need
It learns how much each hard session type takes out of you and spaces your week accordingly.
The days that work for you
If your key sessions keep getting done on the days you move them to rather than the days the plan first picked, it takes the hint and leans harder on the days you actually complete — without ever crowding your hard days together.
Whether easing helps
When your recovery dips it eases a session — and it checks whether that easing actually restored you next day. If it does, it eases a little sooner for you; if it never seems to help, it stops cutting your sessions for no benefit.
Your long run
Grows at a pace you’ve handled well before, and is capped at a sensible time limit for your race distance, so a slower pace never turns it into a multi-hour session.
What actually limits you
From how your pace holds up as races get longer, the plan works out whether endurance or speed is your limiter — and, once it’s confident, reshapes the whole program around it: an endurance limiter earns more volume, a longer base and more long / medium-long work, while a speed limiter gets a shorter base, more strides and a longer sharpening block. Sit in the middle, or too little evidence, and nothing changes.
Your trajectory
How your fitness is trending, used to set realistic goals.
When a session type keeps not working
If one kind of workout keeps falling short, the plan stops just shrinking it and figures out why — usually re-testing your fitness so your paces are set from reality, and always telling you what it’s checking and why.
When you tag why you skipped a session, it’s put to use: “Sick”, “Injury”, “Weather” and “No time” are treated as life getting in the way (they never make the plan think you can’t handle the training), while “Tired” is taken as a real sign the session was too much. That’s the whole point of asking.
Safety always comes first: when there’s little data the plan stays on safe defaults, and it never pushes past what’s sensible for you.
Goals & realistic times
Aim high, honestly
Two ways to set a time
Set your own target time, or choose “the best time I can realistically reach” and let Kurro aim for your fastest realistic finish, setting and updating that target for you as you get fitter.
Judged against race day, not today
Your goal is measured against the fitness you can realistically reach by race day, and re-checked as you train. If a target is out of reach, the plan trains your fastest realistic race pace and tells you honestly. It will never prescribe an impossible pace.
Your realistic pace reacts to your training, not just the calendar
The realistic pace on your plan page now responds to the actual training ahead, not only your past results. A plan that ramps up your training meaningfully earns you a faster realistic pace than a flat one, and how consistently you complete the plan matters too: skipping a lot of the planned build gets less credit than following it closely. Consistently missing your long runs or quality sessions specifically (tempo, threshold, intervals, hill reps, goal-pace, fartlek) is read a little more conservatively than missing the same number of easy runs, since those sessions build fitness the easy days can't replace, this never changes the plain consistency percentage shown elsewhere, and it never speeds up how fast your training load is allowed to ramp back up. This means the number can move as your plan changes, even before you have run a single new session, because it reflects what the plan is asking of you, not just what you have already done.
If you picked “the best time I can realistically reach,” think of it as your race-day goal: it climbs as you complete your build-up, and it falls back if you miss it. The race pace your plan actually trains at also changes gently rather than jumping around from one day to the next, a single off day never crashes it, and a real, sustained shift in your training still shows up fully within a couple of weeks, it is never hidden.
Three scenarios, not one false-precise number
Instead of one falsely exact number, the plan page shows three scenarios in a fixed order. First, the best finish you can reach if you complete the plan in full, this is also the time shown next to your goal at the top of the page and, since it is your goal, the time the “Goal” line further down the page leads with too. Second, where you land if you keep training the way you are now, at your current consistency, shown right below it as its own clearly labelled line so you can see the gap honestly instead of only ever seeing the goal. Third, where you would still land if you stopped following the plan, roughly half of the planned build is then still credited from the momentum you have already built. Which of these you end up running is your decision, not fixed in advance: every week you complete moves you from the third toward the first. If your key long runs or quality sessions haven't been tracked yet, the second scenario stays visible and says so plainly instead of quietly disappearing, since “we don't know yet” and “you're executing perfectly” are not the same thing: it is instead estimated from your overall training completion so far, a more honest starting point than assuming you have hit every one of those sessions. A confidence indicator grows as you log more efforts, and a short note spells out what the second scenario is actually based on, either your recent consistency, or, when your key sessions haven't been tracked long enough yet, an honest estimate from your overall completion instead, alongside a physiological ceiling appropriate to your training age, so nothing about it is a hidden rule. At 0% confidence, the note says exactly why, e.g. too few qualifying recent efforts, or too little time between them, rather than a generic prompt to log more.
Deleting and recreating a goal doesn't erase your history
Your training history is yours, not the goal's: cancelling a goal and setting a new one keeps everything you have already run. What does change is the starting point for your consistency track record: a genuinely new goal starts from a neutral assumption rather than instantly reading as a perfect record, and earns its way back to your real trailing consistency over the next few weeks of training as you actually complete it (or, just as honestly, moves below neutral if that training doesn't happen). If this applies to your plan, the assumptions note next to your goal pace says so directly.
Starting a new block reuses a recent fitness test
Starting a fresh training block, whether that is a brand-new goal or a plan restart, used to schedule a fresh baseline fitness test right in week 1 whenever your fitness confidence was low, even if you had just completed a valid one. A genuinely recent test (within the last six weeks) is now reused instead of asking you to repeat it: that week-1 test is skipped, and your next check-in falls on the normal cadence for your level. Nothing else about the cadence changes, if your last test is older than that, or you have none on record, the usual week-1 check still applies exactly as before.
Planning ahead for your next level
Your training level (novice through elite) shapes the structure of your workouts, so the plan doesn't wait until you have already been training at a higher level for weeks before it gives you that structure. It also looks a little ahead, at the volume and long runs it has already scheduled for you, weighted by roughly how consistently you tend to complete your plan. When that points to a genuine step up, your Phase card, right under your current level, shows the week to expect the shift (the week of a real calendar date, not a plan-week number), alongside the assumptions behind it, one tap away.
This is deliberately cautious: it's shown as an indication with a confidence, never a guarantee. A single strong week never triggers it; your training needs to hold above the next level's thresholds for two weeks running before anything changes, and a planned recovery or taper week doesn't pull it back down on its own. But this is a running estimate, not a one-time promise: it is re-checked every time your plan updates, so if your actual consistency drops, the expected week can move later or disappear rather than promising a step up you have not earned.
How much volume: build as much as you can, or the minimum that works
For a race goal, you can choose whether the plan builds as much weekly volume and long-run distance as you can safely absorb (the default), or the smallest amount that still brings you to your goal. If you've set a manual target, that second option now deliberately builds in a safety margin rather than aiming for the bare middle-of-the-road projection, so it isn't a coin-flip. If you haven't set a manual target, there's no separate goal to hold that margin against, so it trains toward the plan's own best realistic finish instead. Either way, it never drops you below the volume you're already running, and if even a full training load can't realistically get you there, it falls back to the full build rather than quietly handing you a training load that was never going to work.
Set your own target weekly volume
By default, the typical peak weekly distance your plan builds toward comes from your race distance. You can set your own goal instead, anywhere from 25 to 120 km (or the equivalent in miles) per week, so a plan that would otherwise settle for a lighter typical peak can build toward the volume you actually want, or scale back from an overly ambitious one. This only moves the summit the build climbs toward: the same safe, gradual weekly build-up still applies on top, so it never fast-tracks you to a higher volume before you're ready for it. Leave it blank and nothing changes, your race distance keeps setting the typical peak, exactly as before.
What your numbers mean
Plain-English guide to the scores you’ll see
Fitness
Your built-up training over recent weeks; it rises slowly as you train consistently.
Fatigue
Your recent, short-term tiredness from the last several days of training.
Form
Fitness minus fatigue: whether you’re fresh and ready or carrying tiredness.
VO₂max & race predictions
An estimate of your aerobic engine, with predicted finish times for 5K–marathon and a confidence label.
Training load
One comparable “how hard was that” score per run, so a hilly run and a track session can be compared. It still works from pace alone when there’s no heart-rate data. Ran that same pace in the heat? If your heart rate came in higher than usual for it, that run automatically counts as more load, so a genuinely tougher hot-weather effort is never quietly under-counted.
Training zones
Your personal easy / tempo / threshold / interval paces and heart-rate zones, kept in step with your fitness. Your threshold page shows where the number came from (a demonstrated effort, never a race you didn’t run) and how confident we are in it. After a long break the paces ease toward a safe “assumed detraining” estimate and the plan says so - run a fitness test to recalibrate to your real current fitness. If you only track with Apple Health (no laps or Strava best-effort data), a completed fitness test now sticks properly: it converges to your real result over a few nights instead of drifting back toward your everyday running pace, and we can now read a pace estimate straight out of the recording's total duration to do that, since Apple Health doesn't give us the lap-level detail to isolate the test block itself the way Strava does. That estimate only ever nudges your paces in small, bounded steps, and if a particular recording can't be read cleanly, or looks too different from your recent pace to trust, we leave your paces unchanged and tell you why instead of guessing (recording the test with the Strava app, with laps, lets us read it precisely every time). If you train with a power meter, Settings also has a threshold-power field for both cycling (FTP) and running: leave it on auto-detect, or enter your own number if you know it better than we do. Once you have a running threshold power, your training-zones card gets a third power tab alongside pace and heart rate — five bands built from that number, an estimate (%CP/Stryd-style), not an exact measurement, so treat it as a training guide rather than a lab-grade wattage reading. A completed run with power data also gets its own “Power zones” card on the activity page, showing how long you spent in each zone during that specific run — shown only when you have a running threshold power set (not your cycling FTP). Your cycling FTP isn’t left out, though: once it’s set, the plan page shows its own separate “Cycling power zones” card, seven Coggan-style bands built from that number, so a triathlete sees one card for running power and a distinct one for cycling FTP, never blended together. Heart-rate-based training load needs a resting heart rate too: cycling falls back to your running value when its own isn’t set, but running never borrows from cycling, so if you haven’t set a resting heart rate for running (profile-wide, or specific to running), we price your running load using a 60 bpm assumption until you set your own under Settings, and we tell you on that page when this assumption is actually in effect.
Pace / heart rate / power targets
In Settings you pick which metric leads each workout’s target: Auto (whichever you have data for), Pace, Heart rate, or Power (only takes effect if you have a running threshold power set - otherwise it quietly behaves like Auto). Whichever leads, the plan-page chip still shows the other alongside it as a small companion reference (pace or heart rate; power is never shown as a companion), so you’re never down to one number. Choose Heart rate and it also becomes what gets sent to your Apple Watch as the alert for that session, not just the display on the plan page. Choose Power and the Watch alert becomes a power range instead, on hardware with a running-power sensor to read it; without one, the alert quietly falls back to pace or heart rate for that session, same graceful behaviour, never a failed sync. For a tempo/threshold/interval session the power range itself narrows in around that day’s actual goal pace (not just a generic zone), so the number on the plan page, the Watch alert, and a downloaded .fit file all agree - an easy/recovery run still shows the plain zone-based range, since power doesn’t track pace closely enough that far from threshold to make a tighter number meaningful. Pace targets work the same way: the window you see is sized to how precise that zone actually is (a tight window around threshold pace, a wider one for an easy or recovery jog), never a flat one-size-fits-all margin, and the plan page, the Watch alert, and a downloaded .fit file again all show the same window. One caveat: heart rate reacts slowly, on short, sharp intervals it can still be climbing toward the target as the rep ends, so pace (or effort) stays the sharper steering metric for that kind of work, even if heart rate leads your longer, steadier sessions. If you have a running threshold power set but pace or heart rate leads instead, quality sessions (tempo and harder) also show a rough “~X W” next to the pace target on the dashboard and plan page - an estimate of that pace in watts based on your own threshold, not a live power reading, so treat it as a ballpark rather than a precise number; it’s left off easy/recovery/long runs, where the estimate gets unreliable, and off entirely once power itself is your leading metric (you’re already seeing a proper power range there).
Intensity mix
Your easy / moderate / hard split over the last few weeks — how polarized your training is, at a glance. It’s based on activities where we can measure intensity (pace, heart rate or power); untracked activities like hikes and unmonitored swims still count toward how much of your training the score covers, and if most of your minutes are untracked we hold the score back rather than show a misleading one.
Each number has an in-app explainer with your personal range and trend. Tap any tile to learn what it means for you.
A note on what's what: fitness, fatigue, form, VO₂max and your training zones & thresholds follow established sport-science models (the fitness/fatigue impulse-response model, ACSM/Daniels, Friel zones). Your intensity mix(easy/moderate/hard split) is a Kurro guide based on 80/20-style training principles (the lumped easy-vs-everything-harder framing popularised by Matt Fitzgerald, not the stricter three-zone “polarized” model) — handy at a glance, but a heuristic rather than a clinical measurement.
Recovery & readiness
Train hard when you’re ready, ease back when you’re not
With Apple Health connected, your recovery score blends sleep, heart-rate variability, resting heart rate and breathing into one daily read of how recovered you are, each shown against your personal normal range. Your resting heart rate is your lowest resting heart rate during sleep (like Whoop and Oura measure it), not your average daytime heart rate, so if you're used to seeing a higher “resting heart rate” elsewhere, this number reads about 5-10 bpm lower on purpose, it's the more accurate recovery signal. It looks at trends, not just last night: a run of short nights builds into a growing sleep-debt drag rather than a string of separate small dings, and a skin-temperature rise that holds for several days (an early sign of illness or overreaching) pulls the score down, but a clearly elevated single night doesn’t get waved through just because the days around it were normal, it counts on its own too. A warm night is also never looked at in isolation: if it shows up together with a faster resting heart rate, faster breathing and/or lower blood oxygen on the same night, that combination is treated as a genuine acute-stress signal (a hangover or the start of an illness, say) and the score takes a separate, capped hit for it — one system running a little off is normal noise, several running a little off at once, the same night, usually isn’t, so the score is now more sensitive to that pattern than to any single mildly-off reading. We also catch a genuine illness signal — a real fever, or breathing that stays noticeably faster than usual — even if your own night-to-night spread happens to be wide, so a clear real-world change (not just an unusual-for-you one) still counts instead of getting lost in your personal noise band. Your body weight is also captured from Apple Health, or you can type it in yourself right on the weight tile among your other health metrics, and shown as its own trend against your normal range, tracked for the picture, not folded into the recovery score; a device reading for the same day always takes priority over a manual entry. Your weight is also used to give an estimated calorie count on your run and walk activities — clearly marked as an estimate (not a measured value), and it doesn't change your plan or recovery in any way. You can also add your height in Settings, it doesn't change your plan, recovery, or the calorie estimate, it's only there to give your coach useful context when you chat with it. If your watch reports a VO₂max, it's used only as a gentle sanity-check on the fitness estimate we compute from your runs when your own running data is still thin, it never overrides a number your training already supports. Beyond how long you slept, we also look at how efficient that sleep was - how much of your time in bed you actually spent asleep. Restless time awake in bed lowers the sleep part of your recovery score a little, and a genuinely good, efficient night is never marked down for it. If your device doesn't report time in bed (common on an Apple Watch without a separate sleep app), we show your sleep efficiency as “unknown” on the sleep tile instead of guessing, and it doesn't affect your score either way.
A daily readiness gate then adapts today’s session to how your body actually is: keep it as planned, ease it back, or switch to recovery. It also listens to how hard your sessions have felt — log your effort (RPE) and a run of consistently hard-feeling sessions nudges readiness down, and sustained over a couple of weeks it helps trigger that easier week (a strain your watch can’t see). No health data? The plan still adapts from your training and how your sessions go. One exception is deliberate: race day itself is never touched — a bad night before your race gets you advice (start conservatively, lean on your plan-B pacing), never a rewritten race plan.
Part of that gate compares your recent training load to your longer-term average, a common, widely-used way to spot a week that has ramped up faster than your body is used to. It's a useful pattern, not a hard scientific rule for you personally, so it's never the only thing deciding your day: it's one signal among several (alongside your recovery data, how consistent your training has been, and how hard sessions have actually felt), it only speaks up once you have enough training history to make it meaningful, and over time it's replaced by what YOUR training has actually shown you can handle, not a one-size-fits-all number.
It also looks a little ahead. On a red day, your very next hard session (within the coming two days) gets pre-emptively eased too, not just today’s, so a rough patch is handled before it compounds rather than waiting for that morning, and the deeper the red, the bigger the trim (scaled from roughly 5% up to about a third). If recovery hasn’t tipped red but has sat in amber for most of the last few days, a smaller, flat ease of about 10% steps in instead, catching the same slow build-up earlier and more gently. The two never stack, only one look-ahead ease ever applies to a given session, and neither kicks in until there’s enough recent health data to trust the read. Race day is always exempt.
Your say counts too. The morning “how fresh do you feel?” check-in genuinely moves today’s readiness — and deliberately not symmetrically: feeling wrecked weighs heavier than feeling great, so a rough day always protects you but a good mood never overrides what your body is telling us. If you don’t have a wearable, or your recovery data is thin, that same check-in also nudges your weekly volume, at low confidence and with the same asymmetry: a consistently rough week pulls next week’s volume back a touch, while a consistently great one barely moves it at all — this only ever fills the gap a wearable would otherwise cover, never overrides real recovery data when you have it.
Over time it also learns how you report. If you've consistently played down your hard days — logging “felt fine” while your body was working harder than you said — the app notices, and it watches for the classic warning sign: your easy-run heart rate drifting up for days while your reported effort stays low. When your body is reading harder than your story, it says so plainly (“your sessions are reading harder on your body than you're reporting”) and nudges today's readiness down a touch — a small, capped adjustment, never a takeover. It only ever kicks in once you've shown this pattern; if your effort logs already match your body, nothing changes.
You can also report a niggle right on the check-in — where it is (calf, achilles, knee…) and how bad (niggle, sore, or pain). That’s the first thing a coach asks, and it changes your plan two ways: it lowers today’s readiness, and it steers the plan around the sore spot for a few days — easing off speedwork and hills, and protecting your long run when it’s painful — then fades as the area settles. It never just stops your training; it eases and works around it, and always shows you what it changed.
On heart-rate medication (like a beta-blocker) or a condition that affects your heart rate? Flag it in Settings and the app stops trusting heart rate, which would otherwise quietly skew your recovery, zones and load — recovery then leans on your sleep and breathing, and your effort is read from pace instead. Nothing changes silently: your recovery detail explains what it did.
The weather is part of the picture as well: on a hot forecast day, today’s endurance run gets an eased pace target plus a note explaining why, so you can run by effort instead of chasing a pace the heat won’t allow. It now judges the feels-like temperature — factoring in humidity and wind, not just the number on the thermometer — and does the same on a genuinely cold day (warm up well and layer). Two more conditions can ease your pace the same way: training at altitude (thinner air makes the same effort cost more the higher you are above sea level) and poor air quality (on a bad-air day it eases pace so you run by effort, or take the session indoors). All of these add up but stay capped, and when a condition isn’t known it changes nothing. You can run to conditions instead of the clock.
Your plan also watches for the early warning signs of an injury before it happens. What actually drives it is your own reported evidence: recent niggles you’ve logged and sessions you skipped because something hurt (a stale “hurt” skip left on a session that's still planned, or one you later completed, doesn't count). Reporting the same sore spot for several days in a row doesn't pile up into a bigger flag than it deserves, though — it tops out at what one clear, equally serious report already says, while a genuinely different sore spot still adds its own signal. On its own, a busy or high-mileage week isn't treated as evidence of anything; it only makes the picture worse if real evidence (a niggle or a hurt-skip) is already there, and it never invents a trim from a spike alone. In the same way, simply missing a few sessions isn't read as an injury warning by itself — that already shows up elsewhere in how your plan adapts to your training, so we don't double-count it here. When there is enough real evidence, the coming week's build is gently trimmed and you're told exactly why in your plan's “Why this workout?” explanation. It's a nudge, never a hard stop, and it stays completely silent until real evidence backs it.
Race predictions
Estimated finish times with a confidence label
From your best recent efforts we estimate your 5K, 10K, half-marathon and marathon times, each with a high/medium/low confidence label reflecting how much recent evidence backs it (a distance with only a single old effort behind it reads “low”). This card lives on your training plan page and your goal prediction reads the same estimate, so you never see two different numbers for the same distance. Older efforts count for less, so a years-old personal best never drives today’s paces, and coming back after a break, your recent benchmark efforts carry the prediction even before you set new all-time bests. A recent effort only carries real weight, though, if it is actually close to your own best-ever pace at that distance: a routine, comfortable run that happens to land inside the recency window doesn’t count as fresh speed evidence the way a genuinely hard effort does.
How far your best efforts sit from the target distance matters too. A fast 5K can extrapolate to a marathon time on paper, but the further out that extrapolation reaches, the less we trust it: once your closest reference is too far from the goal distance (say, only a 5K time behind a marathon estimate), we would rather show nothing than a confident-looking number that isn’t actually earned, so that distance is simply left off the card until you have a closer benchmark. When you do have a usable reference near the target distance, the estimate stays and only the confidence moves. If your recent efforts disagree with each other once projected to the target (say, a fast assessment mile and a much slower training 5K), the confidence is lowered too, since averaging two contradicting reads of your fitness shouldn’t look more certain than either one alone; efforts that broadly agree, or a single effort with nothing to compare against, are unaffected. This combines with the extrapolation check above, so a moderately far reference that ALSO disagrees with another recent effort can push a distance below the same trust threshold and off the card entirely, the same honest choice as showing nothing rather than an unearned number. That confidence also reflects your endurance base, not just your speed: if your longest recent run is nowhere near the target distance we say so directly, with a note that speed supports this pace but endurance isn’t yet demonstrated, rather than showing a confident label you haven’t actually earned yet. In that case the predicted time itself is never hidden or changed, only the confidence label and that note.
Log a race result and your fitness re-anchors to it, and we show you how close our prediction landed. Your predictions also learn from that history: if they’ve run optimistic or pessimistic for you, future ones are corrected by a small, capped amount (you can see this in your plan-calibration panel). If a result looks like a bonk or a typo (far slower than your training suggests), it only nudges your paces instead of resetting them — and we say so on the plan page, so you can correct the time or confirm it was real.
Not every race ends in a finish time, and that’s okay to record too. You can log a race as DNF (you started but didn’t finish) or DNS (you didn’t start) with no time — race day is then recorded honestly instead of a random short run being counted as your race. A did-not-finish never changes your paces, zones or predictions; it’s just kept as part of your history.
What changed & why
See every adjustment your plan makes for you
Your plan quietly adjusts itself around your life and your body — a hard session eased when your recovery dips, a missed long run moved to another day, a hot forecast slowing tomorrow's pace. Instead of leaving those changes silent, your dashboard shows a short, plain-English list of what just changed and why: “Moved Thursday's quality session to Friday”, “Eased today's run — HRV below your normal range”. No hidden rules — you see the reason behind every move. And if your plan can't be safely updated for a stretch, you'll see that here too: the date your plan is from and that it hasn't changed since, never a silent freeze.
And once you've raced a goal, you get an honest receipt: the finish time we predicted when your plan was built, next to the time you actually ran — “we predicted 44:10, you ran 44:23” — and confirmation that the result taught your model to predict a little sharper next time. Nothing new is invented here; it's simply the work your plan was already doing, made visible.
What makes your plan recalculate
An honest list of what triggers a recompute, and what it can and can't touch
Your plan recalculates far more often than you'll ever notice, almost always within moments of something new happening. Here is exactly what starts it, and, just as importantly, what it never touches.
| Event | When it runs | What can change | What never changes |
|---|---|---|---|
| A new activity syncs (or you log one by hand) | Within moments of the sync or save | Your fitness, fatigue and recovery numbers, and the sessions still ahead of you | Anything already completed, a day you locked or moved yourself, and your race day |
| You miss a planned session | The next time your plan checks in (a sync, or the nightly update) | The sessions around it may be rearranged, and a missed key session or fitness test can be offered again that same week | Your prescribed volume and intensity going forward, a missed session never itself makes the coming weeks more conservative |
| You change a setting (training days, a constraint, a threshold, a dial) | Within moments of saving | The upcoming plan reshapes around the new setting | Anything already completed or locked, and your race day |
| The nightly update | Once a day, automatically, for every active goal, even if you never open the app | Day-to-day plan housekeeping (missed sessions, days you moved away from, extending your schedule) always runs. A full rebuild of your plan only happens on the nights your deeper fitness numbers refresh too, so your plan and your numbers are never out of step with each other | The same protections as above |
| Your morning check-in | Within moments of submitting it | Today’s session, and on a rough day, your next hard session too | Your race day, it is never touched by a check-in, good or bad |
This is the same list an admin-facing engine reference documents in full detail, so nothing here is a simplification that hides a different, less flattering internal truth.
Season races & tapers
Plan a season, not just one race
Add several races and mark each one’s priority. Your main race gets a full taper into race day; secondary races get a lighter mini-taper so you arrive fresh without derailing the bigger goal. For a real intermediate goal (a “B” race), your build volume itself softens a bit around it too, not just the days right around race day, so the week you race in is sized honestly instead of a full week that then quietly loses its planned volume; a lower-priority (“C”) race keeps that softening to the days immediately around it, and doesn't soften your build volume the way a B race does. Either way, a hard session or a long run still won't land on the day(s) right after any B or C race — your legs get a short, protected break before the plan asks anything hard of them again, even for a “lighter” C race. How many days that taper/recovery window actually covers scales with the secondary race's own distance — a short race gets a shorter window, a longer one gets a longer window — while priority still decides how much the plan adapts. Booking a race only a few weeks out also works: the plan compresses the early phases into the time you actually have and still tapers you, ending on race week. A strength session that lands in the days right around a secondary race's own taper/recovery window (before, on, or after it) is eased into the same light activation-and-mobility session your main taper already uses, so you never take a heavy strength day into or straight out of an all-out effort; cross-training sessions already on your plan keep their own schedule through that window, and the optional extra low-impact cross-training session (the one added for impact-sensitive athletes on a free day) simply isn't scheduled inside it, the same way it already sits out your main race taper. A session you've already locked or manually moved is never rewritten either way.
How deep that taper cuts isn’t a fixed rule — the plan looks ahead. Using your fitness and fatigue, it simulates how fresh you’ll be on race morning and adjusts how much it eases your volume so you land in the sweet spot for racing (fresh, but not detrained from resting too much). It only ever eases volume within the range the research supports (a 40–60% cut over the final week, keeping the hard sessions sharp), never adds load to chase freshness, and your plan page tells you the freshness it’s aiming for and why. On rare occasions where even the deepest safe taper still leaves you predicted to arrive under-fresh, the plan checks whether one extra taper week would genuinely fix that (without costing you meaningful fitness or peak volume) and, only when it clearly does, extends your taper by that one week. That decision on how many weeks your taper runs is made once, when the extra week is added (or when your plan is created/regenerated), not re-decided every night: your taper's length stays fixed from that point on, so it can never quietly shrink back mid-taper. What DOES keep adjusting on every recompute is how deep that fixed-length taper cuts and how much volume the weeks around it carry, exactly like the rest of your plan.
Race day itself is a full pacing and fuelling plan that keeps tracking your fitness right up to the race, and when a hot race day is in the forecast, your goal pace is eased for the expected heat (checked at the race’s own location) so you can race by effort instead of chasing a cool-weather time. On your race day, only the race itself is scheduled, so no other run ever gets planned onto it.
Prep that matches the course
Tell us what the course is like — flat, rolling, hilly, or trail — and whether it has a big net descent. A hilly or trail race adds more hill-strength work in the build phase so the climbs feel stronger on the day; a big-downhill course adds controlled downhill sessions closer to the race so your quads can take the pounding without fading late. Race day also gets a short terrain cue (run the climbs by effort, keep your legs light on the descents). Leave it on flat and your plan is exactly as before — nothing changes unless the course calls for it.
Race-prep protocols the pros use
As race day nears, your plan layers in the finishing touches good coaches insist on, each only when it actually helps, so a short or cool race is unchanged. Heat acclimation: if a hot day is in the forecast at the race location, your easy runs in the final couple of weeks are flagged to do in the heat of the day (easy effort, hydrate, expect a higher heart rate): the 10–14 days of heat exposure that let your body cope on race day. Gut training: on a half or marathon, your long runs that are long enough build up how much fuel you take in, roughly 30, then 60, then 90 g of carbs per hour, so your stomach is trained for the exact rate race day asks for. Once you have practised at least two of these steps, the race-day plan points back to the amount you actually practised; with fewer than that, it stays conservative and only asks for what you have genuinely tolerated in training. Tune-up race: for a half or marathon, your plan suggests slotting in a shorter race during the sharpening phase as a dress rehearsal: add it as a secondary race and it’ll taper you in and recover you after, without derailing your main goal.
Race week — your execution plan and a protected taper
In the final week your race day opens into a full execution plan: a km-by-km split table off your goal pace (endurance races get a gentle negative split - start controlled, finish quick), a fuelling schedule at the exact carb rate you practised on your long runs, and a plan-B pace to fall back on if the day goes sideways (heat, a bad patch) so you race the second half instead of blowing up. You can also log how the legs feel each day, and if you've felt flat or heavy before past races that turned into PRs, we'll show you - because taper legs are supposed to feel that way, and the freshness only shows up on the start line. And race week watches out for your taper: if you try to slot in a last-minute “confidence” tempo, we'll warn you, but never stop you - the fastest thing you can do that week is arrive fresh. (Outside race week nothing here applies; your plan is unchanged.)
On top of that, we don't plan any hard sessions ourselves in the final days before your race either (3 days out for a 5k/10k, 4 days out for a half or full marathon), just an optional short shakeout (15-20 easy minutes plus a few strides) the day before, if an easy run was already sitting on that day. Recovery afterwards works the same way: for a few days after your race, depending on the distance, your plan never puts speedwork or a long run on that day, whether the week is first generated, a missed key session is made up, or your plan reshuffles around a day you blocked, those days stay easy or recovery running so you still keep moving, just without any hard effort. A short race earns a few easy days, a half or full marathon earns more, since your body needs longer to absorb race-day fatigue the further you raced. If you move a hard session there yourself we'll warn you, but never stop you: it's your plan.
Your plan doesn't just stop the day you race. It now automatically keeps generating that easy recovery stretch as a genuine, short training week — real easy/recovery sessions instead of an empty gap — sized to the same distance-scaled window as the paragraph above (a few days for a shorter race, up to a week for a marathon), so you always have something sensible to follow the moment you cross the line. Once that recovery stretch is behind you, your plan page shows a simple, no-pressure prompt: set a new goal, or tell it to just keep you active with no specific race, nothing is ever decided for you, and the prompt shows up whether or not you finished the race, since your body went through it either way. Ignore it and it stays out of the way; dismiss it and it won't nag you again.
Easier weeks are part of the plan
Roughly every fourth week is deliberately easier, giving your body room to absorb the training — though never in the final build weeks before a race taper, when your plan peaks. As you build a history, this spacing adapts to how you actually absorb training: show that you handle longer blocks and the easy week comes a little less often; need to recover sooner and it comes a little more often. Training without a race? Your plan also eases off gradually whenever your recovery trend dips, rather than waiting for the calendar.
Cross-training & manual activities
Everything you do counts
A bike, swim or walk on an easy day counts as training, not a missed run (a hike counts as a walk too). Sports like padel, tennis or golf do not count toward an easy day, since they are not the same kind of aerobic training. It also works the other way around: if your plan has a cross-training day and you run instead, the run counts — running the day is never marked as non-adherence. And you can add activities that aren’t in Strava (or rate how a run felt, or mark one as a race), and they feed into your load and recovery just like synced runs, so your picture never has gaps. A rating or race flag you set in the app is yours: a later Strava sync keeps refreshing the objective facts but never overwrites what you edited by hand.
If the same workout arrives from two places — say Strava and your watch, or a manual entry that Strava later syncs — Kurro keeps the most complete recording and automatically sets the duplicate copy aside, so nothing is ever counted twice in your training load. The duplicate is also hidden from your activity list so you don't see the same run twice (an activity you excluded yourself still shows, marked as excluded).
One exception: an e-bike ride doesn't add to your training load. The motor does part of the work, so your heart rate and pace on an e-bike aren't an honest measure of effort the way they are on a regular ride — it still shows up in your history, just at zero load.
If a session got linked to the wrong activity — or a cross-training credit doesn't belong — opening that session and choosing “Undo completion” also clears that specific pairing, so the same activity won't be automatically re-linked to that session again. It can still, correctly, match or credit a different session on the same day. That's different from excluding an activity entirely (marking it as not real training): rejecting a pairing only says “not this session”, not “not training at all”.
Injured? Keep your fitness, then come back safely
Cross-training bridge & a pain-gated return to running
When you flag a painful niggle on your check-in, Kurro doesn't just shrink your week — it does what a good coach does: it keeps the aerobic work and changes the modality. Each run you'd have done is swapped for an equal-length session on the bike, elliptical or in the pool, matched to the same effort (an easy run becomes steady zone 2; a tempo becomes threshold intervals). Your fitness holds through the injury window instead of draining away, and every swapped session says exactly why.
As the pain settles you move onto a graded return-to-run: short walk/run intervals that build to continuous easy running and then to strides, over six stages. You only advance a stage when you can do it pain-free (3/10 or less) — and if it flares up, you step back down. It's a proper comeback protocol gated on how you actually feel, not a shrunk-down version of normal training, and once you finish it your full plan resumes. Your own settings are always respected.
Honest session tracking
The right run gets credited — and honest feedback comes back
Your key sessions are matched carefully. A short warm-up jog can’t “complete” your long run, a shake-out doesn’t count as your race, and an easy run never passes for a fitness test - those need to look like the real thing (the right length, a genuinely hard effort). When uploads arrive out of order, Kurro re-checks the day and links each session to the run that actually matches it. Anything you mark done yourself is always left exactly as you set it. Tapped “Mark as done” by mistake, or was a session auto-matched or cross-trained-credited to the wrong activity? Open that session and choose “Undo completion” to reopen it as planned (or as missed, if its date has already passed) — for an auto-matched or credited session you'll be asked to confirm first, since it clears the linked activity and its grading.
Completed sessions also get honest feedback: quality workouts and long runs show how well you hit the prescribed work (on / above / below target), and if an easy or recovery day was run well above easy effort you’ll see a gentle “too hot for an easy day” note, no penalty, just the reminder that easy days need to stay easy for the hard days to count. A long run with a prescribed faster finish gets the same courtesy the other way: if you ran it noticeably hotter than that pace called for, you’ll see a gentle “long run ran hot” note alongside your usual on/above/below verdict, still no points lost. Just like a hot easy day, this note also buys you a bit of extra recovery before your next hard session, and feeds the same repeated-pattern check described below. And if you run far more than planned, say 20 km on an 8 km easy day, the next days adjust so the extra load is respected.
Every finished session now gets a verdict, including fitness tests and races. A fitness test graded a genuine maximal effort shows how well-paced it was; a test that wasn’t run near-max is marked “not a maximal test” instead, it isn’t used to update your paces and doesn’t count against you, it just wasn’t a real test result. A completed race is checked against your goal pace: right on it, faster than planned (a pleasant surprise), or well off it, purely for your own record, it never changes your recovery plan (that stays owned by your taper and race-week protection). And a blown-up fitness test, or an easy day run well above easy effort, now also earns you a bit of extra recovery before your next hard session, exactly like an unplanned hard effort would.
These verdicts steer the plan itself, not just today's recovery. If a session type keeps coming in easier or harder than intended, Kurro doesn't just keep nudging the size, after a while it schedules an early fitness test to re-measure and reset your zones properly. And if one specific session type keeps not landing right while everything else is on track, it's temporarily paused from your rotation for a few weeks rather than repeatedly shrunk. Both only kick in on a genuine pattern, never off a single session.
The same applies to easy days: one hot easy run already gets you a gentle note and a bit of extra recovery, but if your easy/recovery days keep running hot, Kurro calls it out as a pattern, not just a one-off, and lets you know whether your easy pace zone is already tightening to reflect it. Again, one hot day never triggers this, only a real repeated pattern does. Long runs get the same repeated-pattern callout: if your long runs keep coming in hotter than their prescribed pace, you’ll see it flagged as a pattern rather than only a per-run note.
Theme & accent colour
Make it look the way you want
Settings → Appearance lets you pick system, light or dark, and one of three accent colours (the same orange, red and green as the Kurro logo). Both choices sync across your devices, and this is purely how the app looks: it never changes your plan, your scores, or how anything is calculated.
Metric or imperial units
Kurro adapts to your region, with a manual override
Kurro automatically detects whether your region uses metric (km, kg) or imperial (mi, lb) units and shows distance, pace and other measurements accordingly. You can override this any time in Settings → Profile (a “Units” picker with a “Detect” button to re-run the automatic detection). This is purely how numbers are displayed: it never changes your plan, your training load, or how anything is calculated internally.
Disconnecting Strava
What happens to your data when you disconnect
Disconnecting Strava (from Settings, or by revoking access from Strava's own side) deletes your Strava activities from Kurro and the fitness history built from them, your load curve, thresholds and recovery scores, within 30 days. If you still have activities from another source (your watch's own upload, or entries you added by hand), those are kept and your metrics are rebuilt from them instead of being deleted outright.
This is a real, non-reversible action, so you'll see a warning before you confirm it. If you want to keep a copy of your data first, use Strava's own bulk-export feature before disconnecting, or email privacy@kurro.run for a full export of your Kurro data.
Weekly digest email
A weekly summary of your plan, with a real off switch
Kurro can send a weekly email summarising your plan for the week ahead, what adapted and why, and a gentle nudge if you've had a couple of hard-to-get-to weeks. It's on by default when you sign up.
You can turn it off any time from Settings → Notifications, and every digest email also carries its own one-click unsubscribe link that works without logging in, no need to open the app first. Turning it off, either way, never changes your plan, your scores, or how anything is calculated: it only stops the email.
Withdrawing consent
Take back health data or AI coach consent, without deleting your account
Settings → “Manage consent” lets you withdraw your health-data or AI-coach consent at any time, separately from deleting your whole account. Withdrawing health data permanently deletes the health and training history we derived from it (activities, health metrics, recovery scores, thresholds and more); withdrawing AI coach permanently deletes your chat history and any pending proposals. Both take effect immediately and cannot be undone, so we ask for an explicit confirmation before either one runs.
The “Help improve the model” consent (cross-athlete model learning) is not shown as something to grant today, because nothing yet reads it to act on your data: asking for consent to something that never runs would undermine the consent we do need once it does. If you granted it in the past, you can still withdraw it from the same “Manage consent” card; nothing is deleted, since your data was never used.
What Kurro is (and isn’t)
Where we go deep, and where we deliberately don’t — so there are no surprises
Kurro is a running coach, and we’d rather be excellent at that than average at everything. A few boundaries are deliberate:
Built for runners, not multi-sport
Your goal and plan are about running. Rides, swims, walks and other activities still count fully towards your training load and recovery — and if you’re injured, your runs are swapped for equal-effort cross-training so you don’t lose fitness — but Kurro doesn’t build triathlon or duathlon plans with swim/bike goals of their own.
Any number of days a week — including 1 or 2
You’re not required to run three or more days a week. On one or two days a week the plan keeps things sensible: your available day becomes your key run, and it won’t try to cram multiple hard sessions into a tiny week.
Pregnancy: we step back and defer to your clinician
Kurro isn’t a pregnancy training tool. Rather than quietly applying normal running logic, the right move is to pause your plan and follow the guidance of your doctor or midwife, then pick back up when you’re cleared to. This is a deliberate safety boundary, not an oversight.
English for now
The app’s coaching text is in English today. Your own data and your local time zone work wherever you are; translated coaching is something we may add later.