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.)