Help us improve
Share bugs, ideas, or general feedback.
From aicoach-framework
Syncs intervals.icu workout names to Strava and writes follower-friendly insights blocks for endurance activities. Supports date range, specific activity ID, and dry-run flags.
npx claudepluginhub airbone42/360-data-athlete --plugin aicoach-frameworkHow this command is triggered — by the user, by Claude, or both
Slash command
/aicoach-framework:stravaThe summary Claude sees in its command listing — used to decide when to auto-load this command
# /strava — Sync titles + insights to Strava Mirrors the intervals.icu workout name to Strava (all activity types) and writes a follower-friendly 3–5 line insights block plus a random-gerund footer for endurance activities (`Run`, `VirtualRun`, `Ride`, `VirtualRide`). Idempotent: re-running on an activity that already carries the `🔬 360° Insights` anchor skips the description, the title update stays available. ## Arguments $ARGUMENTS Optional. Accepted forms: - (empty) — last 2 days (today + yesterday) - `--days N` — last N days - `--activity-id i...` — a specific ...
/insightsGenerates weekly or monthly insights from journal entries using pattern recognition and panel feedback.
/progress-reportGenerates structured progress reports for personal trainers, summarizing body composition changes, strength metrics, adherence analysis, and recommending program adjustments.
/cyberfit-logLogs completed training by exercise ID or name via Python CLI, displays XP gains, level ups, and achievement unlocks.
/reportGenerates an end-of-day or weekly activity summary from the local activity log, grouping features, bugs, tests, decisions, and token usage into a structured report.
/weekly-briefGenerates a weekly briefing summarizing key trends, wins, risks, and week-over-week changes from your Amplitude instance for team sharing.
/standupGenerates a standup update from your recent Slack messages, categorizing into Done, Doing, and Blockers sections for review and editing.
Share bugs, ideas, or general feedback.
Mirrors the intervals.icu workout name to Strava (all activity types) and
writes a follower-friendly 3–5 line insights block plus a random-gerund
footer for endurance activities (Run, VirtualRun, Ride,
VirtualRide). Idempotent: re-running on an activity that already
carries the 🔬 360° Insights anchor skips the description, the title
update stays available.
$ARGUMENTS Optional. Accepted forms:
--days N — last N days--activity-id i... — a specific intervals.icu activity ID--dry-run — preview, no pushLaunch the aicoach-framework:strava-publisher agent in a pane. Pass
the argument string verbatim plus a reminder of what the agent has to
do — the agent loads its own playbook from agents/strava-publisher.md
and reads the necessary configs itself.
The pane start prompt should carry:
Arguments: {ARGS or "(default: --days 2)"}
Task:
1. Call strava_pending.py with the arguments.
2. For each entry, decide: title and/or insights block.
3. fetch_activity.py + strava_coupling.py in parallel (endurance only).
4. Compose the insights block (language per
config/athlete_preferences.md → Coach response language; default
English; follower-friendly, max 3–5 lines + random-gerund footer).
5. Push via strava_apply.py (or --dry-run if the athlete set it).
6. Return a compact summary to chat.
Source files you see in the agent body:
- config/athlete_preferences.md (language)
- config/exercise_log.md (video-verdict snippets, optional)
- app/data/gerunds.json (footer wordlist)
The head coach invokes this command right after the coach-analyst
pane in the /analyse flow (step 6.6). At that moment the freshly
analysed activity is the natural candidate. Manual invocation stays
available at any time:
/strava # last 2 days
/strava --days 7 # larger range, e.g. after a trip
/strava --activity-id i12... # retroactively for a specific session
/strava --dry-run # don't push, just see what would happen
The legacy scripts/sync_strava_titles.py has been retired — its
title-sync and surface-mismatch logic now live in
app/utils/strava_titles.py and are reused by strava_pending.py.