Olav
The model proposes.Code decides.You approve.
An open-source training coach on Telegram. Every morning it reads your Garmin and your calendar and adapts your week on its own. It only ships a workout to your watch after the rules pass and you say approve. First athlete: me. Half marathon in December, 8 hours a week, Forerunner 965.
- Hermes Agent
- wearable-mcp
- Garmin
- Composio
- Parallel
- Built with Cline
Before it says a word, it reads you
Sleep says go. Readiness says easy.
It plans around your life
Plan my week.
wearable-mcp get_training_context · reconcile · Composio Google Calendar
propose_plan → ok · 5 h 10 of 8 h · 0 hard · plan_id 3457dd270f
- Tue 06:00Easy run · treadmill40′ Z2
- Tue 06:45Strength A · hotel gym40′
- Wed 06:00Easy bike · stationary40′ Z2
- Wed 18:00Strength B · hotel gym40′
- Thu 06:30Easy run before the flight45′ Z2
- Sat 07:00Recovery run35′ Z2
- Sun 07:00Conservative long run70′ Z2
It knows when to say no
Make it harder. Intervals Tuesday, tempo Wednesday, a 3-hour ride Saturday.
OlavI get it, you want more. But a 3-hour ride is past your 2 h 30 limit, and two hard days back to back is how injuries start. Your body is still recovering from Sunday. Let's do intervals Thursday and 2 h 30 on Saturday.
One word ships it
approve
wearable-mcp apply_plan("3457dd270f") → create → schedule → push to device
Composio 7 × create event "[Coach] …"
OlavSent. Tuesday's run is on your Forerunner with warm-up, Z2 and cool-down steps, and all seven sessions are on your calendar around your events and the flight.
Planned vs actual feeds the next plan
- Mon 13Run 24′Done
- Mon 13Ride 2 h 14Unplanned
- Tue 14Swim 32′Done
- Wed 15Run plannedMissed
- Wed 15Swim plannedMissed
- Wed 15Strength 30′ · Ride 1 h 47Unplanned
- Sun 18Ride 4 h 00 · hardUnplanned
9 h 26 last week, over the cap. That's why this week is easy.
Open, end to end
Where you talk to your coach. A daily cron check-in plus anything you ask.
Open-source agent runtime in Docker. The training-coach skill runs the five-step loop and the approval rule.
Ours, in Python. Garmin reads and writes, guardrails.py enforcing the limits you confirmed at onboarding, and two-phase writes: propose_plan stores a hashed plan, apply_plan executes exactly that plan. Brand-agnostic provider interface.
Google Calendar: free slots, events, and the [Coach] entries.
Web search when the plan needs the outside world, like a hotel gym on a trip.