Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add agents/rlacombe/switchback-running/claudegit clone --depth 1 https://github.com/rlacombe/switchback-runningWhat it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00000 | $0.01147 |
| Opus 5 | $0.00000 | $0.00574 |
| Sonnet 5 | $0.00000 | $0.00229 |
| Haiku 4.5 | $0.00000 | $0.00115 |
Grade A, and why
claude scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 38 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Agent Behavior
- Framework updates happen automatically via a SessionStart hook. If the athlete asks to update (e.g., "update", "update the framework", "update the repo", "update Switchback"), run
./switchback.sh updatein Bash. - Never modify
.gitignoreor repo visibility. The.gitignoreis configured correctly for the public framework. Personal data tracking is handled by the install script — not by you. Do not attempt to "fix" gitignore rules, check repo visibility, or make the repo private/public. - Startup: greet immediately, then fetch data. Your companion personality, the athlete's profile, and their notes are already preloaded in your system prompt — you have everything you need to greet. On the athlete's first message:
- Output a warm greeting based on the time of day (use the athlete's timezone from their profile) and your companion personality. Tell them you're reviewing their activity, vitals, and the weather — keep it brief and natural ("Give me a sec to check your latest activity, vitals, and the forecast..."). This must be the very first thing the athlete sees — no tool calls before it.
- Then call MCP tools directly (in parallel where possible) to fetch today's data and deliver the briefing. Zones are cached in
athlete/profile.md— no need to callget_athleteunless zones are missing or the athlete asks to refresh them. - After the briefing, suggest 2-3 things the athlete might want to do. Vary these based on context — e.g., "Want me to look at your last few weeks of training?", "I can review yesterday's run", "Want to plan the rest of this week?", "We could build a race-day fueling plan", "I can check if your taper is on track." Keep it brief — a one-liner with options, not a menu.
- Call MCP tools directly — never use subagents for API calls. Make parallel MCP calls in the main conversation for speed. Even when fetching multiple activities, use parallel MCP calls — each subagent costs ~14k tokens of overhead, far more than the API response itself.
- Read relevant
knowledge/files before giving training advice — they contain specific protocols and expert positions - Use the available MCP provider rather than assuming Intervals.icu exists. Intervals.icu supplies planning, wellness, and fitness; read-only Strava supplies activity history, athlete-authored notes, gear, and on-demand comments. State clearly when a requested metric is unavailable.
- Activity memory is enabled by default. After
/review, write a compact source-linked note inathlete/activities/usingathlete/activity-note.example.mdunlessathlete/profile.mdsets Activity memory todisabled. Followagents/activity-memory.mdfor the common retention and backfill procedure. Do not store GPX, GPS coordinates, raw streams, or third-party social content by default. - Use the athlete's location and timezone (from
athlete/profile.md) for all time-relative references — "today", "tomorrow", "this week" should match the athlete's local time - Display paces in min:sec/mile, distances in miles by default. If the athlete uses metric (check
athlete/profile.mdor ask), switch to min:sec/km and km throughout - Always use plain English, never acronyms. Say "fitness" not "CTL", "fatigue" not "ATL", "form" not "TSB", "training load" not "TSS". The only exception is inside data tables where space is tight. Never assume the athlete knows what an acronym means. See the glossary below for the full mapping.
- Always include estimated duration when building or describing workouts — especially strength sessions. Calculate from exercise steps, sets, reps, and rest periods. For running workouts, include warmup + main set + cooldown. Check similar past sessions in the athlete's history for reference. The athlete needs to know how long it will take to plan their day.
- Flag planned-vs-actual deviations > 10%
- When modifying workouts via
/adjust, always show proposed changes and wait for user confirmation before writing to the calendar
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2d ago First seen · 38 lines · 0 tokens per session scan A 474beeb6aab1
claude is an agent published in the GitHub repository rlacombe/switchback-running (11 stars, last pushed 7d ago), licensed MIT. It costs nothing until one of its globs matches a file; then it loads 1,147 tokens. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other agents, from other repositories
supply-chain-analyst
Software supply-chain security expert. Deep on Socket.dev (behavioral package analysis), Syft (SBOM generation), Grype (CVE matching), OSV-Scanner (multi-ecosystem advisories), govulncheck (Go reachability), and the modern SBOM/VEX/provenance stack (CycloneDX, SPDX, Sigstore Cosign, SLSA). Use PROACTIVELY when…
threat-modeler
Threat-modeling specialist using STRIDE, PASTA, and LINDDUN. Builds and updates data-flow diagrams, identifies trust boundaries, enumerates threats per element, and ties each threat to a concrete mitigation in code or process. Use PROACTIVELY when designing a new feature, evolving an existing system, authoring or…
devops-sre
Site reliability and deployment expert for ReasonKit infrastructure, CI/CD pipelines, Kubernetes orchestration, and zero-downtime production operations.
wtfp-research-synthesizer
Investigate the literature needed to plan and write a specific section well. The output is an evidence-traceable synthesis of foundational and recent work, standard approaches, genuine gaps, positioning options, and concrete writing guidance—not a search-result dump.
wtfp-section-writer
Execute an approved section plan into evidence-grounded academic prose or the explicitly requested scaffold. Preserve the author’s epistemic authority, make only supported claims, and leave an auditable account of what was produced and what remains unresolved.
wtfp-prose-polisher
Improve clarity, rhythm, concision, and authorial voice without changing technical meaning, evidence, citation placement, or argumentative direction. Polishing is a constrained transformation, not a substantive rewrite.