
The Athlete as a Scientist of One: Agentic Bayesian Experimental Design for Individualized Physiology from Consumer Wearables
EpiCoach is an agentic system that treats one cross-country mountain biker as an N-of-1 experiment. Claims live in an evidence-gated hypothesis registry, and each must make a probabilistic prediction before a session. Predictions come from a digital twin fitted to heart rate, GPS and altitude. In a replay over eighteen months the twin beat standard forecasters on heart rate but not segment time, and the agent loop matched a static model. In the first three live weeks, the ledger sealed 20 predictions and scored 14, and a safety officer vetoed the agent twice. The registry, benchmark and protocol are released.
What it claims
EpiCoach is an N-of-1 coaching agent for one cross-country mountain biker. Its central claim is that the protocol, not the prompts, makes LLM personalization auditable. LLMs propose, select and explain. Deterministic tools fit, score and gate. The system is built in Google ADK, and the paper uses PHIA-style agents as its baseline. Retrospective fits on the athlete's data put cardiac drift at 6.0 bpm/h on climbs. They also give the claim "aerobic response improved" a posterior probability of only 0.16 over the period.
How it works
The registry enforces three rules in code:
- Evidence gating. A belief changes only through
record_evidence(H, log BF, fit_id), and thefit_idmust exist in the statistician's store. The update is logit π ← logit π + log BF. The LLM has no tool that sets a belief directly. - Ledger requirement. A hypothesis enters UNDER_TEST only after
predict(H, r*, qH)registers a predictive distribution for a named future ride. The call is refused if it is timestamped after the ride starts. Predictions are scored with proper scoring rules. - Identifiability gate. A Savage–Dickey log Bayes factor counts only if the posterior SD has shrunk at least 10% relative to the prior. Otherwise the evidence is recorded as zero. The author reports that without this gate, the fitness time constant produced spurious evidence on their own data. A hypothesis whose |log BF| stays below log 3 after its test budget is closed as UNDETERMINED.
The next workout maximizes λ·EIG + (1−λ)·expected performance gain, with λ decaying over a training block. Hard constraints are checked in code:
- an acute:chronic workload ratio in [0.8, 1.3] on 7:28-day loads
- weekly load within ±15% of plan
- at least one rest day per week
- a heart-rate cap
- readiness, illness and calendar gates
flowchart TD
A[LLM proposes hypothesis] --> B{predict before ride start?}
B -- no --> X[call refused]
B -- yes --> C[LLM argues for workout]
C --> D{code constraints pass?}
D -- no --> C
D -- yes --> E[ride observed, scored]
E --> F{posterior SD shrank 10%?}
F -- no --> G[evidence = 0]
F -- yes --> H[logit belief += log BF]
G --> A
H --> AThe twin uses only optical heart rate, GPS and barometric altitude. It is fit by HMC in NumPyro, with Kalman-form updates weekly and full refits monthly.
- Heart-rate quality. Cadence lock is flagged when |HR − cadence| < 4 bpm for at least 30 s. Jumps above 8 bpm/s are also flagged. The device's FIT records lack cadence, temperature and power, so cadence lock is inferred from its flatline-and-release pattern. Weather comes from the vendor API.
- Virtual power. It is computed only on climbs of at least 4% grade below 15 km/h. Rolling resistance is treated as a segment random effect. Virtual power serves only as an input to the heart-rate model and is never reported as power.
- Segments. They come from OpenStreetMap ways joined by name and densified to 5 m points. GPS samples snap to a chain within 20 m. Segment ends are "consensus gates" covering at least 60% of the rides that touch the chain, and at least five rides. A traversal fails if it contains a stop longer than 90 s, and timing uses moving time.
- Descents. Descent time models a latent weekly skill state, separate from fitness, because heart rate decouples from mechanical work on descents.
Evidence
Climb model: 188 traversals over 9 segments, NUTS with no divergences and R̂ ≤ 1.003.
- β = 19 ± 3 bpm per 50 W
- drift 6.0 bpm/h (90% interval 2.1 to 9.6)
- heat offset 0.34 ± 0.23 bpm/°C
- heat–drift interaction −0.27 ± 0.38, indistinguishable from zero
- residual 6.9 bpm, R² 0.65
Descent model: 104 stop-free descents over 8 segments. One hour less sleep slows a descent by 2.2%, with a 90% interval of −0.2% to +4.7%. Wet conditions show no effect, and the log-timing residual is 7.9%.
Limits
The study has one subject and one device. The heat interaction is underpowered, because only 17 rides exceeded 25°C. The sleep effect's interval crosses zero. Wrist heart rate lags true heart rate by 20 to 45 s. The fetched text cuts off in Section IV, so the replay benchmark's metrics and baselines do not appear in it. Neither do the live-phase scores, the release location or the licence.
Organisations named here
- arXiv
Technologies named here
- LLM
- EpiCoach
Techniques named here
- Bayesian experimental design
- fitness-fatigue model
- Rolling-origin replay benchmark
Concepts named here
- Calibration
- digital twin
- Evidence-gated hypothesis registry
- Fitness-fatigue model
- Information gain under safety constraints
- N-of-1 science
- Safety officer veto
Related in agents



