The plumbing described in how this works, as plain downloadable Python — also on GitHub with the prompt template and the Claude skills bundled: Pacane/running-plan-kit. No packaging, no framework — read them top to bottom, adapt to your own plan (the structure they expect comes from the prompt template). They hold no credentials: API keys come from the environment or Emacs auth-source, the Garmin OAuth token lives in your home directory. Use at your own risk; they were built for my setup, in conversation with an AI, and it shows in the best way.

sync_plan_intervals.py

499 lines — intervals.icu bridge — pushes the plan as structured workouts; pulls completed runs, daily wellness (RHR/HRV/sleep/load) and the agenda back into org files; sets strength load from RPE so lifting counts in CTL/ACWR. Auth via env var or Emacs auth-source.

sync_strength_garmin.py

317 lines — Garmin Connect bridge — creates the strength sessions (A/B/ISO) as native watch workouts (animations, rep counting, rest timers) and schedules them on the calendar, skipping race weekends.

generate_training_pages.py

517 lines — this blog’s generator — turns the org data into the run log, calendar, live week table, health page and per-run posts. (Yes, it publishes itself.)