39:13 → 34:00: training an AI pacer on cycle-phase data
I started this project in February 2026 at a 5K time of 39:13. The goal: break 30 minutes. Today, three months in, my latest timed 5K is 34:00. Still a long way to go.
What's unusual isn't the running — it's the coach. It's a Gemini-powered agent I built that ingests three streams of data and outputs a workout plan for the next day: pace, distance, intensity, rest. The streams are heart rate (from a Fitbit), workout history (from Strava), and cycle-phase data (logged manually for now).
The reason this project is worth doing isn't the time. It's that almost every off-the-shelf training plan I tried treats my biology as a male athlete with a small calibration offset. That's not how the female endocrine system works, and the gap between "male athlete with adjustments" and "actual female athlete" is the whole reason I'm building this.
Raw training data is open-source on GitHub — every session, every metric.
What changes across the menstrual cycle
The high-level model the agent operates on (simplified for this post — the real prompt has more nuance):
- Follicular phase (post-period, ~days 1–13): estrogen rising, body more efficient at using carbohydrates, recovery faster. Higher tolerance for hard sessions. The agent prescribes the toughest workouts here.
- Ovulatory phase (~day 14): brief peak in performance for many athletes. Tactical hard effort — often a time trial.
- Luteal phase (~days 15–28): progesterone dominant, body temperature higher, perceived effort higher at the same pace, sleep often disrupted. The agent backs off intensity and adds easy volume.
- Menstrual phase (~days 1–5): prostaglandins can cause cramping and fatigue. The agent prescribes the lightest week of the cycle.
This is well-established in sports science. It's almost entirely absent from consumer running apps.
What the agent gets right
[1–2 specific examples where the agent made a non-obvious call that paid off. e.g. — "On day 21 I would have run my planned tempo despite poor sleep; the agent moved it to Thursday and Thursday was a personal best for that distance." Fill in with real examples from your training log.]
What the agent gets wrong
[1–2 specific failures. e.g. — "Early on it over-prescribed in luteal week because I hadn't tuned the cycle-phase weights yet" or "It treats every poor sleep night the same — doesn't distinguish anxiety vs. illness vs. travel." Fill in with real examples.]
What's next
I'm rebuilding the prompt structure to handle multi-week context, not just day-to-day. The current version has goldfish memory — it sees today's HRV but not last Wednesday's tempo run. Adding a retrieval layer for the last 14 days of training history.
Targeting sub-32 by end of summer, sub-30 by end of year.
If you're working on something adjacent — femtech, AI coaches, agent evals on personal data — reach me on X.