Analyze one or more cycling, running, or hiking FIT/KML activity tracks, generate evidence-based single or aggregate reports, open the bundled local Ride Relief report page when the environment supports it, enrich results with user-confirmed public location context, and create shareable PNG or H.264 MP4 route stories on request. Use whenever a user wants to analyze, compare, visualize, or export .fit or .kml activities, including requests that mention a workout but do not yet include track files.
npx skills add https://github.com/op7418/guizang-sports-skill --skill fit-ride-studio
Turn local cycling, running, and hiking tracks into an evidence-based report and local visual experience. Follow this sequence:
Enter the export composer only when the user asks for a shareable image, animation, or video. Ride Relief is the web app bundled inside this Skill, not a separate product to install.
<skill-root>/samples/demo.kml. State that it is fictional data..fit or .kml was supplied, ask in the user's language for either an attachment or a local path. Example in Chinese: “请把 .fit 或 .kml 拖进对话,或告诉我文件路径(例如 ~/Downloads/ride.fit);可以一次给多个。”Resolve <skill-root> as the directory containing this SKILL.md. Run from that directory:
node scripts/check-install.mjs
Handle its single-line status deterministically:
OK — continue.NEED_INSTALL — run npm ci, rerun the check, then continue. Use the lock file; do not substitute npm install.UNSUPPORTED_NODE — explain the reported Node requirement and stop before running the app.ERROR — report the missing/broken Skill files and reinstall or update the Skill before continuing.Treat npm ci as internal preparation, not a routine user step. If a sandbox blocks network access, request network permission when the environment supports approvals. If permission is unavailable, tell the user to run npm ci once from <skill-root>. If the Skill directory is read-only, explain that a writable installation or checkout is required; do not loop on installation or claim success.
Run the deterministic analyzer:
node scripts/analyze-fit.mjs --format json <fit-or-kml-path> [more-track-paths...]
Use --format markdown when a ready-to-read local report is sufficient. Use --keep-duplicates only after the user confirms matching activities are distinct. Read references/report-contract.md when interpreting fields, checking weighting rules, or changing report behavior.
Start with the result, not dependency or parser details.
For one activity, present:
For multiple activities, present:
Keep absent data distinct from zero. Say “未记录” / “not recorded” or “覆盖不足” / “insufficient coverage,” never zero when a sensor was unavailable. Do not invent FTP, power zones, heart-rate zones, VO₂max, training load, recovery status, or medical conclusions unless the user supplies the necessary thresholds and explicitly requests that analysis.
Apply these rules:
LineString or gx:Track and retain the source basename.Choose two to six evidence-backed deep dives. Omit empty or speculative dimensions.
When place-aware advice would materially improve the result, read references/location-enrichment.md. Confirm ambiguous public place names, search by the confirmed name rather than coordinates, and time-stamp live conditions. Do not treat an old activity as evidence that a route is currently open.
Attempt this automatically after successful analysis, but adapt to the environment.
public/skill-analysis.json.node scripts/prepare-report.mjs --track <selected-track> --analysis <temporary-report-json>
url and session; the URL expires after 24 hours, stale files are cleaned on the next staging run, and nothing is stored in the repository.http://127.0.0.1:5174/ and treat it as this project only when the returned HTML contains both <title>Route Relief and id="fit-input". Otherwise start npm run dev from <skill-root>. The server uses port 5174 with strictPort; if another application owns the port, report the conflict instead of silently switching ports.Fit Ride Studio Skill analysis badge, recommendation layout, and clipping. Without visual capability, skip visual claims and ask the user to inspect the opened page.Apply these fallbacks honestly:
Track the terminal/process handle used to start Vite. Before finishing, state whether the local server remains running and how to stop that exact process (for example, Ctrl+C in its terminal). Do not use a broad kill command. Clean a staged report after the user is finished when practical:
node scripts/prepare-report.mjs --cleanup <session-id>
Opening the report page does not authorize export or switching to 导出创作.
Read references/export-workflow.md before operating the export UI.
samples/demo.kml, state that it is synthetic, analyze it, and open the local report when reachable.Take op7418/fit-ride-studio from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.
The instructions reference npm.
Without those the skill loads but fails at the first command.