Accruing data is easy.
Using it is hard.

Tracking apps log what already happened. Training plans assume a schedule and a life I don't have. So I built something that did. An AI running coach that uses my daily biometric data to keep marathon training on track through everything a training plan doesn't consider.

Top results
0% Plan adherence · 12 weeks 367 miles planned · 362.2 actual.
0 Consecutive daily briefings One briefing every day, Jan 24 through Apr 19.
01 How it works

The problem

Off-the-shelf plans assume a normal schedule.

Shift work doesn't have one.

Nights, post-call days, days that don't end at 5 — none of that, or how it affects the body, is in the plan.

Five days — shift reality vs. a rigid plan Collisions marked ×
Mon24
Tue25
Wed26
Thu27
Fri28
Reality
Night shift
7p – 7a
Night shift
7p – 7a
Post-call
recover
Post-call
recover
Day shift
9a – 5p
Template plan
AM lift + PM run
I'm asleep
Tempo 8 mi
Sleeping again...
Easy 5 mi
HRV in the tank
Intervals 6×800
readiness below 60
AM lift + run
collides with clinic

Five days. Five collisions. A static plan adjusts to none of them.

02 How it's wired

Multiple integrations.
One Frontier Model.

A scheduled Cloud function pulls yesterday's sleep, HRV, and readiness from Oura; yesterday's runs from Strava; weight from Withings; the next two weeks of clinical shifts from Google Calendar; and the morning's conditions from a weather API. Each source is provided by a custom-coded MCP server so the orchestrator calls them the same way.

It then pulls the activity, pace, and coach history from Firestore, every metric, every piece of advice the system gave, and the current active plan, and assembles a single prompt: biodata, calendar, active plan, strategy rules, recent history.

That prompt goes to one frontier model. The model alters the plan when needed, stores necessary memories, and sends the briefing. The briefing lands on the phone through Telegram. 86 days, 86 briefings, so far.

Data sources Orchestrator Delivery Body Oura · Strava · Withings Life Google Calendar World Weather API Sync Service Cloud Function · runs 6 AM daily + Frontier model Gemini · one call per day + Firestore metrics · advice · active plan 6 AM · DAILY Telegram briefing to phone
Data sources
BodyOura · Strava
Withings
LifeGoogle Calendar
WorldWeather API
6 AM · Daily
Sync Service
Cloud Function — one call per day
+ Frontier modelGemini
+ Firestoremetrics · advice · plan
Telegram briefing to phone
before wake-up
03 The constraints

The model optimizes against rules the user sets.

The coach is initialized to know what post-call means. The system follows user-defined constraints and works to balance those against realities of scheduling, weather, and biometrics.

Example 01 · OR service

Day-shift OR rotation
(7a – 7p)

→ training moves to evening

If the user is working all day, the coach adapts the plan. Lifts and easy runs land after 7 PM; nothing before.

Example 02 · Sequential nights

Nights Shifts

→ mandatory rest block

It knows shift starts and ends and that time between night shifts is not conducive to hard training

Example 03 · Post-call

Morning after a call shift

→ How fast can things resume?

Pulls HRV on recovery night to determine degree of recovery needed before restarting the plan

An example

Monday, March 2Closing Week 5 — Sequential Night Shifts

Calendar · the constraints the model saw
Mon · Mar 2 · 2026 WK 5 · D7
Recovery — sleep till noon post-call · protected
Research check-in 2 PM · 30 min
Active recovery — easy 4 mi RPE 3 · preserve Monday
Telegram · 6:04 AM
C
Coach
daily briefing
Status: Yellow Light (Post-Call). You just finished two sequential night shifts. Readiness sits at 62 — below the 75 threshold the plan respects for post-call training. Your autonomic system is still settling. Pushing a quality session today would cost more than it buys.
The Adjustment. Swapping today's track workout for Recovery 4 mi, Zone 2 only. Cap it at RPE 3/10 — if HR drifts above 145, walk it in. Tuesday's lower-body lift holds. The long run stays on Saturday — that's the anchor.
read · 6:04
04 What it did

HRV improved under a guided schedule.

Across 149 days of continuous Oura data, every recovery metric moved in the right direction. The best — HRV increase of 28.5% — is the signal I care about most.

HRV balance · pre vs post coach
+28.5%

An 18.4 ms rise in Oura HRV balance — sustained across three months.

81 days pre 68 days post 149 measured
64.7 83.1 Pre Post 81 days 68 days +28.5%

Recovery & readiness

100 75 50 25 0 69.6 74.7 RECOVERY INDEX +7.3% 75.2 77.9 READINESS +3.6% PRE POST

Every Oura recovery increased.

Adaptations across 86 coach runs

46 TOTAL ADAPTATIONS across 86 daily briefings 6 FORMAL REWRITES 40 ADVICE-LEVEL SHIFTS 34 WORKOUTS SHIFTED 67 WORKOUTS / 12 WK 86 CONSEC DAYS

Weekly miles · planned vs actual

98.7% adherence across 12 weeks
362.2 mi actual · 367 planned
Vacation step-back by design W1W2W3W4W5W6W7W8W9W10W11W12
Actual Planned

Weekly mileage rises through a training block and tapers before a goal race. The system chose the day-by-day shape; this is the cumulative result.