Skip to content

v0.2.0 — the write path

Choose a tag to compare

@edxleon edxleon released this 28 Oct 16:54
· 117 commits to main since this release

The write path. runcoach can now put a session on your watch, and take it back off.

uv tool install git+https://github.com/edxleon/runcoach-ai@v0.2.0
claude mcp add runcoach -- runcoach mcp
# "plan me an easy 40 minutes for tomorrow" -> you see the session -> "yes" -> it is on the watch

What is new

  • propose_workout builds a structured session for your route or time budget from your own Garmin zones. propose_week files a polarised week as one package, and on a red day a proposal can replace the hard session on the calendar. Proposing never writes anything.
  • apply_workout uploads, schedules, pushes to the watch and reads the workout back to verify structure and targets. undo_workout takes it off the calendar again. In the app it is one button on the coach card ("Put on watch", two taps); in Claude Code it is your "yes". The app's own coach runs cannot call either write tool (--disallowedTools, pinned by a test).
  • Job, card and proposal files are written thread-safely: two writers in the same server process no longer share a temp file (a double tap on "Put on watch" could raise FileNotFoundError).
  • The coach comments on Garmin's auto-detected rep count in one clause at most and then judges the session the athlete says they ran.
  • garminconnect 0.3.20. The check on the vendor's exceptions now fails on a new exception and no longer on one that went away.

What is verified

  • 672 Python tests and 60 frontend tests on Linux, Windows and macOS × Python 3.12 and 3.13, plus a job that installs the wheel as a user would and drives the installed tool.
  • The write path against a real account, on 2026-10-28: one easy session through runcoach mcp, proposed, uploaded, scheduled, pushed, seen on the watch, read back and verified, then undone. A second, independent Garmin client cross-checked every step.
  • Eval suite: 14/18 on the current sonnet with a haiku judge, twice, with a different four failing each time. Across four runs every case passed at least once; the failures read as a strict judge rather than a wrong coach, with one exception that is fixed (above). The badge says 14/18 because that is what the last run said.

What is not

  • propose_week as a package and the red-day swap that unschedules a calendar entry have not been run against a real account, only against the fake client the suite uses.
  • One athlete, one account, one watch. garminconnect tracks an unofficial API; runcoach doctor says so when Garmin changes underneath it.

Not affiliated with Garmin. A training tool, not medical advice.