Context / Focus for Today
AI Coach power-up day. Added 9 tools that let the coach actually do things — create workouts, check training load, look up activities. Implemented email OTP for passwordless login. Switched CI to self-hosted runner for faster builds.
Things I Got Done Today
AI Coach Tools — Multi-Turn Calling
Major upgrade: the AI coach can now use tools to take actions, not just give advice.
- PR #302 feat: AI Coach tools with multi-turn tool calling — the coach can now call tools, see results, and respond intelligently
- feat: Add 9 AI Coach tools with multi-turn tool calling:
get_training_context— fetch user's current fitness, goals, recent loadget_upcoming_workouts— check what's scheduledget_recent_activities— review completed sessionscreate_workout— build and schedule workoutsupdate_workout— modify existing workoutsdelete_workout— remove workoutsget_training_load— ATL/CTL/TSB analysisget_activity_details— deep dive on a specific activitysearch_activities— find activities by criteria
- test: Add coach tools test suite — comprehensive tests for all tool handlers
Optimistic Event Updates
Instant UI feedback when the AI coach makes changes.
- feat(ai-coach): optimistic event updates via SSE response (Option B) — calendar updates appear immediately as the AI streams
- fix: refresh events after AI Coach response — ensure calendar stays in sync
- fix: use result.content to capture tool call JSON for workout creation — proper parsing of tool responses
Email OTP Passwordless Login
New authentication option for users who don't want passwords.
- feat: add email OTP passwordless login — enter email, receive code, you're in
- Magic link alternative for users who prefer codes over links
Self-Hosted CI Runner
Moved CI to self-hosted infrastructure for faster builds.
- ci: Switch CI jobs to self-hosted runner — no more waiting for GitHub-hosted runners
- ci: Trigger CI with self-hosted runner — verified working
- ci: Test self-hosted runner — initial setup and validation
AI Coach Testing
Better tooling for development and debugging.
- feat: Add API key auth option for AI Coach testing — test the coach without browser auth
- Add system prompt guidance for context/analysis tools — clearer instructions for when to use each tool
- fix: add event tool guidance to AI coach system prompt — explicit rules for calendar modifications
Polish
- Center checkmarks in comparison chart — visual alignment fix
- Update Strava footer link to use club vanity URL — cleaner link
- docs: add SSH X11 forwarding fix for clipboard image paste — dev environment notes
Commits Today
- 1 PR merged (#302 — AI Coach tools)
- Major: 9 AI Coach tools with multi-turn tool calling
- Major: Email OTP passwordless authentication
- Major: Optimistic event updates via SSE streaming
- CI: Migrated to self-hosted runner
Notes / Observations
- Tools change everything. The AI coach went from "advisor" to "assistant" — it can now actually create workouts, check your load, and modify your schedule. The multi-turn flow means it can use a tool, see the result, and make intelligent follow-up decisions.
- Optimistic UI is magic. When the coach creates a workout, it appears on the calendar instantly via SSE — no page refresh, no waiting. Feels responsive and modern.
- OTP > magic links for some users. Some people don't like clicking email links (spam filters, corporate email clients). A 6-digit code is simpler and more universal.
- Self-hosted CI is faster. GitHub's shared runners have queue times. Our self-hosted runner starts immediately and has all dependencies cached.
Momentum Score: 9 / 10
AI Coach tools are a game-changer — this is the "agentic" future we've been building toward. Multi-turn tool calling means the coach can have a real conversation: "What's my training load?" → fetches data → "You're a bit fatigued, let me adjust tomorrow's workout" → updates calendar. All seamless. Email OTP rounds out the auth options. Strong feature day.