Free SKILL.md scraped from GitHub. Clone the repo or copy the file directly into your Claude Code skills directory.
npx versuz@latest install vivekkarmarkar-claude-code-os-skills-find-bus-static-fetchgit clone https://github.com/VivekKarmarkar/claude-code-os.gitcp claude-code-os/SKILL.MD ~/.claude/skills/vivekkarmarkar-claude-code-os-skills-find-bus-static-fetch/SKILL.md--- name: find-bus-static-fetch description: Find the next Cambus from a start location to an end location in Iowa City, with explicit algorithm-trace output. Uses a bundled Python solver with Route 42 (daytime) and Route 43 (night) loop data hardcoded. Loop topology is BAKED IN — the solver handles it natively without inference. Supports `--lab` (Aspire → Seamans Center), `--home` (Seamans Center → Aspire), or custom `--start/--end` strings, with optional `--time-lower` and `--time-upper` time bracket. Use when user asks "next bus from X to Y" in Iowa City context or invokes `/find-bus-static-fetch` directly. --- # find-bus-static-fetch Find the next Cambus bus from a start location to an end location in Iowa City. The actual routing logic lives in a bundled Python script (`cambus_router.py`) — invoke that, don't re-derive the algorithm from the markdown. ## How to invoke ```bash python3 ~/.claude/skills/find-bus-static-fetch/cambus_router.py <args> ``` Pass through the user's arguments. The script handles everything: substring matching, equivalences, serving alternates, loop topology, time-window filtering, minimum-time optimization, and tick-box trace output. ## Argument forms - `--lab` — Aspire → Seamans Center preset - `--home` — Seamans Center → Aspire preset - `--start "<text>" --end "<text>"` — custom query - `--time-lower HH:MM` and/or `--time-upper HH:MM` — optional time bracket. If both omitted, defaults to `[now − 5 min, now + 55 min]` in Iowa local CDT/CST. - `--label <text>` — optional label for output (e.g., "P1.A"). Defaults to "P1" or "lab"/"home" for presets. ## Interview mode If the user invokes the skill with NONE of (--lab, --home, --start) AND no explicit start/end, ask via the active channel (Telegram, terminal, voice): "Where do you want to go, and from where?" Then parse the response into start and end strings and invoke the script. ## What the script does (for reference; do NOT re-implement) 1. **String match** — substring resolution. Prefers exact name matches (so "Aspire" → Aspire stop, NOT "Hawkeye Park Rd at Aspire"). 2. **Equivalence** — Schaeffer Hall ↔ Downtown Interchange. 3. **Serving** — Seamans Center location is served by [Seamans Center, Schaeffer Hall, Main Library] per user preference. 4. **Loop topology** — Route 42 (40-min cycle, daytime) and Route 43 (60-min cycle, night) are both LOOPS. The script handles cross-terminus journeys natively (e.g., Schaeffer Hall → Aspire stays on the bus through the loop terminus). Single physical bus, no transfer. 5. **Minimum-time optimization** — among multiple valid options (direct match, equivalence, serving alternates), picks the one with earliest arrival. 6. **Output** — tick-box trace format: ``` <label> <start> → <end> ☑/☐ String match ☑/☐ Equivalence ☑/☐ Serving ☑/☐ Minimize time ✓/✗ Route <name>, board from <stop> <time> → arr <stop> <time> (<duration> min) [stays on bus through loop terminus] ``` ## What's encoded in cambus_router.py - Route 42 Hawkeye-Pentacrest (daytime): 40-min loop, stops with offsets, weekday Fall Service cycle start times. - Route 43 Hawkeye Interdorm (night, 9:10 PM – 1:02 AM): 60-min loop, 35 stops including Aspire, Seamans Center, Schaeffer Hall/Downtown Interchange, Main Library, Mayflower Hall. - User preferences: equivalences, serving, departure-pref ordering. ## What's NOT in this skill - Iowa City Transit or Coralville Transit data (per user preference: Cambus only). - Real-time / live data (this is the static-fetch variant; a future `/find-bus-live` could add GTFS-RT). - Routes 31, 34, 35, 36, 41, 51, 52, 53, 54 — not yet encoded. Add when needed by appending to `ROUTES` dict in the script. ## Source data Route 43 schedule came from a one-time WebFetch of `transitapp.com/en/region/iowa-city/cambus/bus-43` (the Transit App page is the source of truth, since the Trillium-hosted GTFS feed is incomplete and missing Route 43). Route 42 schedule came from the Trillium GTFS feed (which is complete for daytime routes). If schedules change, re-fetch and update `ROUTES` in `cambus_router.py`.