Not in the top 1,000 by GitHub stars

dreamiurg/claude-mountaineering-skills

Automates mountain route research for North American peaks. Aggregates data from 10+ mountaineering sources to generate detailed route beta reports with weather, avalanche conditions, and trip reports.

History

Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.

View weekly changes

skills/route-researcher/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

4dd512b7ffd9 → 4dd512b7ffd9

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 4dd512b7ffd9

No earlier version was observed for comparison.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit 4dd512b7ffd901a7cd4df3724eba36b06dea32dc

git clone --filter=blob:none --no-checkout https://github.com/dreamiurg/claude-mountaineering-skills.git .hotskills/dreamiurg-claude-mountaineering-skills && git -C .hotskills/dreamiurg-claude-mountaineering-skills checkout --detach 4dd512b7ffd901a7cd4df3724eba36b06dea32dc # Copy each selected skill directory from .hotskills/dreamiurg-claude-mountaineering-skills into .claude/skills/<skill-name>/
git clone --filter=blob:none --no-checkout https://github.com/dreamiurg/claude-mountaineering-skills.git .hotskills/dreamiurg-claude-mountaineering-skills && git -C .hotskills/dreamiurg-claude-mountaineering-skills checkout --detach 4dd512b7ffd901a7cd4df3724eba36b06dea32dc # Copy each selected skill directory from .hotskills/dreamiurg-claude-mountaineering-skills into .agents/skills/<skill-name>/
35GitHub stars
0stars in 7 days
1skill in this repository
0commits in 30 days

Heat

0.3
  • Star growth, last 7 daysNot available
  • Star growth, last 24 hoursNot available
  • Rank movement, last 7 daysNot available
  • Commits, last 30 daysNot available
  • Accounts asking about it through MCP, last 7 daysNot available
  • Hot votes this weekNot available

Heat never changes the order by stars, and sponsorship never touches it. How heat works

Stars over time

Oct 25, 2026Oct 25, 202635

30-day change not yet available: not enough history.

Individual skills in this repository

How it works

route-researcher

When your agent uses it

Research mountain routes and generate comprehensive route beta reports for North American peaks, aggregating weather forecasts, avalanche conditions, daylight windows, trip reports, and access info from PeakBagger, SummitPost, WTA, AllTrails, and regional avalanche centers. Use when planning a climb, hike, or scramble, or when asked for route beta, trail conditions, peak research, or mountaineering trip planning.

What it loads into context

Frontmatter

91 tokens

Always available to the agent

SKILL.md

11,734 tokens

When the skill is activated

Reference documents

30,988 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. When to Use This Skill
  2. Progress Checklist
  3. Orchestration Workflow
  4. SummitPost Research
  5. Trip Report Extraction
  6. Output Format (return EXACTLY this JSON)
  7. Mountaineers Research (use the Mountaineers MCP FIRST — do not scrape)
  8. NWHikers Research (northwesthikers.net / nwhikers.net)
  9. Hike of the Week (hikeoftheweek.com — REQUIRES --render)
  10. Oregon Hikers Field Guide (oregonhikers.org — Oregon objectives only)
  11. Cascade Climbers (cascadeclimbers.com)
  12. Mountain Project (for technical/rock sections)
  13. Fallback
  14. Trip Report Extraction
  15. Output Format (return EXACTLY this JSON)
  16. Output Format (return EXACTLY this JSON)
  17. Error Handling Principles
  18. Execution Timeouts
  19. Quality Principles
  20. Implementation Notes

Scripts executed separately

  • tools/cloudscrape.py
  • tools/fetch_conditions.py
  • tools/test_cloudscrape.py
  • tools/test_fetch_conditions.py
  • tools/test_fetch_conditions_unit.py
  • tools/test_geodata_fetchers.py
  • tools/test_phase4.py
  • tools/test_phase5.py

Files

  • ../../.claude-plugin/hooks.jsonasset197 bytes
  • ../../.claude-plugin/marketplace.jsonasset864 bytes
  • ../../.claude-plugin/plugin.jsonasset823 bytes
  • ../../.claude-plugin/schemas/marketplace.schema.jsonasset2,851 bytes
  • ../../.claude-plugin/schemas/plugin.schema.jsonasset1,227 bytes
  • SKILL.mdcore46,611 bytes
  • SKILL.mdcore46,611 bytes
  • SKILL.mdcore46,611 bytes
  • SKILL.mdcore46,611 bytes
  • SKILL.mdcore46,611 bytes
  • SKILL.mdcore46,611 bytes
  • SKILL.mdcore46,611 bytes
  • SKILL.mdcore46,611 bytes
  • SKILL.mdcore46,611 bytes
  • SKILL.mdcore46,611 bytes
  • SKILL.mdcore46,611 bytes
  • SKILL.mdcore46,611 bytes
  • SKILL.mdcore46,611 bytes
  • SKILL.mdcore46,611 bytes
  • SKILL.mdcore46,611 bytes
  • SKILL.mdcore46,611 bytes
  • SKILL.mdcore46,611 bytes
  • SKILL.mdcore46,611 bytes
  • SKILL.mdcore46,611 bytes
  • SKILL.mdcore46,611 bytes
  • SKILL.mdcore46,611 bytes
  • SKILL.mdcore46,611 bytes
  • SKILL.mdcore46,611 bytes
  • SKILL.mdcore46,611 bytes
  • SKILL.mdcore46,611 bytes
  • SKILL.mdcore46,611 bytes
  • SKILL.mdcore46,611 bytes
  • SKILL.mdcore46,611 bytes
  • SKILL.mdcore46,611 bytes
  • SKILL.mdcore46,611 bytes
  • SKILL.mdcore46,611 bytes
  • assets/demo.gifasset4,261,689 bytes
  • assets/report-template.mddoc26,186 bytes
  • assets/trip-report-template.mddoc2,846 bytes
  • docs/architecture.mddoc11,347 bytes
  • examples/2025-10-23-mount-si.mddoc14,015 bytes
  • examples/2025-11-06-mount-adams.mddoc17,335 bytes
  • examples/2025-11-06-wolf-peak.mddoc13,246 bytes
  • examples/2026-01-29-mount-shuksan.mddoc13,074 bytes
  • examples/2026-01-29-tinkham-peak.mddoc13,355 bytes
  • tools/.python-versionasset5 bytes
  • tools/README.mddoc10,330 bytes
  • tools/cloudscrape.pyruns6,243 bytes
  • tools/fetch_conditions.pyruns35,278 bytes
  • tools/pyproject.tomlasset443 bytes
  • tools/test_cloudscrape.pyruns10,813 bytes
  • tools/test_fetch_conditions.pyruns3,632 bytes
  • tools/test_fetch_conditions_unit.pyruns555 bytes
  • tools/test_geodata_fetchers.pyruns23,785 bytes
  • tools/test_phase4.pyruns13,838 bytes
  • tools/test_phase5.pyruns18,389 bytes
  • tools/uv.lockasset32,149 bytes
Read SKILL.md

# Route Researcher

Research mountain peaks across North America and generate comprehensive route beta reports combining data from multiple sources including PeakBagger, SummitPost, WTA, AllTrails, weather forecasts, avalanche conditions, and trip reports.

**Data Sources:** This skill aggregates information from specialized mountaineering websites (PeakBagger, SummitPost, Washington Trails Association, AllTrails, The Mountaineers, and regional avalanche centers). The quality of the generated report depends on the availability of information on these sources. If your target peak lacks coverage on these websites, the report may contain limited details. The skill works best for well-documented peaks in North America.

## When to Use This Skill

Use this skill when the user requests:

- Research on a specific mountain peak
- Route beta or climbing information
- Trip planning information for peaks
- Current conditions for mountaineering objectives
View the complete source on GitHub

Skills included

  • route-researcher

Repository facts

License
MIT
Created
Oct 20, 2025
Last pushed
Jul 27, 2026
Forks
1
Open issues
15
Project activity
Slowing

Before you install

Network or broad shell

Automated signals, not a guarantee

Checked Nov 7, 2026

Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.

Show 30 notes
  • skills/route-researcher/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/route-researcher/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/route-researcher/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/route-researcher/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/route-researcher/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/route-researcher/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/route-researcher/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/route-researcher/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/route-researcher/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/route-researcher/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/route-researcher/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/route-researcher/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/route-researcher/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/route-researcher/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/route-researcher/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/route-researcher/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/route-researcher/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/route-researcher/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/route-researcher/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/route-researcher/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
Show all 474 signals by file

.claude-plugin/marketplace.json

  • Network accessline 4
    "owner": {     "name": "dreamiurg",     "url": "https://github.com/dreamiurg"
  • Network accessline 5
    "name": "dreamiurg",     "url": "https://github.com/dreamiurg"   },
  • Network accessline 6
    "url": "https://github.com/dreamiurg"
  • Network accessline 11
    "source": {         "source": "url",         "url": "https://github.com/dreamiurg/claude-mountaineering-skills.git"
  • Network accessline 12
    "source": "url",         "url": "https://github.com/dreamiurg/claude-mountaineering-skills.git"       },
  • Network accessline 13
    "url": "https://github.com/dreamiurg/claude-mountaineering-skills.git"

.claude-plugin/plugin.json

  • Network accessline 7
    "email": "dreamiurg@users.noreply.github.com"   },   "homepage": "https://github.com/dreamiurg/claude-mountaineering-skills",
  • Network accessline 8
    },   "homepage": "https://github.com/dreamiurg/claude-mountaineering-skills",   "repository": "https://github.com/dreamiurg/claude-mountaineering-skills",
  • Network accessline 9
    "homepage": "https://github.com/dreamiurg/claude-mountaineering-skills",
  • Network accessline 10
    "repository": "https://github.com/dreamiurg/claude-mountaineering-skills",

.claude-plugin/schemas/marketplace.schema.json

  • Network accessline 1
    {   "$schema": "https://json-schema.org/draft-07/schema#",
  • Network accessline 2
    "$schema": "https://json-schema.org/draft-07/schema#",

.claude-plugin/schemas/plugin.schema.json

  • Network accessline 1
    {   "$schema": "https://json-schema.org/draft-07/schema#",
  • Network accessline 2
    "$schema": "https://json-schema.org/draft-07/schema#",

skills/route-researcher/SKILL.md

  • Network accessline 32
    - [ ] Phase 2: Peak Information Retrieval (coordinates and details obtained) - [ ] Phase 3: Data Gathering (parallel execution)   - [ ] Phase 3a: Python conditions fetch (weather, air quality, daylight, avalanche, peakbagger stats/ascents)
  • Network accessline 33
    - [ ] Phase 3: Data Gathering (parallel execution)   - [ ] Phase 3a: Python conditions fetch (weather, air quality, daylight, avalanche, peakbagger stats/ascents)   - [ ] Phase 3b: Researcher agents (3 in parallel - web sources + trip repor
  • Network accessline 34
    - [ ] Phase 3a: Python conditions fetch (weather, air quality, daylight, avalanche, peakbagger stats/ascents)
  • Network accessline 56
    uvx --with patchright --from "git+https://github.com/dreamiurg/peakbagger-cli.git@v1.10.0" peakbagger peak search "{peak_name}" --format json
  • Network accessline 103
    uvx --with patchright --from "git+https://github.com/dreamiurg/peakbagger-cli.git@v1.10.0" peakbagger peak show {peak_id} --format json
  • Network accessline 192
    uvx --with patchright --from "git+https://github.com/dreamiurg/peakbagger-cli.git@v1.10.0" peakbagger peak ascents {peak_id} --format json --with-tr --limit 20
  • Network accessline 199
    uvx --with patchright --from "git+https://github.com/dreamiurg/peakbagger-cli.git@v1.10.0" peakbagger ascent show {ascent_id} --format json
  • Network accessline 441
    1. **State DOT pass report** (WA → WSDOT): fetch the relevant pass page, e.g. `https://wsdot.com/travel/real-time/mountainpasses/mt.-baker` (SR-542) or `.../north-cascades` (SR-20). Read `RoadCondition` / `TravelAdvisoryActive` / restrictio
  • Network accessline 442
    2. **USFS forest alerts/conditions**: fetch `https://www.fs.usda.gov/{region}/{forest-shortname}/alerts` (e.g. `r06/mbs/alerts`) and `/conditions`; search the page for the road number / trailhead name → closure milepost, reason, seasonal ga
  • Network accessline 443
    3. **NPS road conditions** (if in/through a national park): fetch `https://www.nps.gov/{park-code}/planyourvisit/road-conditions.htm` (e.g. `noca`, `mora`, `olym`) → per-road OPEN/CLOSED + milepost.
  • Network accessline 484
    **Example (Route Description):** > "The standard route follows the East Ridge (Class 3). A [Sep 2025 party](https://www.peakbagger.com/climber/ascent.aspx?aid=12345) found a well-cairned use trail branching right at 4,800 ft—the correct tur
  • Network accessline 485
    > "The standard route follows the East Ridge (Class 3). A [Sep 2025 party](https://www.peakbagger.com/climber/ascent.aspx?aid=12345) found a well-cairned use trail branching right at 4,800 ft—the correct turn—through talus they called 'tedi
  • Network accessline 526
    - Google Maps **place** (named entity): `https://www.google.com/maps/search/?api=1&query={URL-encoded name + address}` — use this (not bare coordinates) for hospitals, ranger stations, campgrounds, and any named place, so the link resolves 
  • Network accessline 527
    - Gaia GPS: `https://www.gaiagps.com/map/?loc=14/{lon}/{lat}` (zoom/lon/lat).
  • Network accessline 528
    - CalTopo: `https://caltopo.com/map.html#ll={lat},{lon}&z=14&b=mbt`.
  • Network accessline 826
    uvx --with patchright --from "git+https://github.com/dreamiurg/peakbagger-cli.git@v1.10.0" peakbagger <command> --format json
  • Network accessline 864
    https://www.google.com/maps/search/?api=1&query={latitude},{longitude}
  • Network accessline 870
    https://caltopo.com/map.html#ll={latitude},{longitude}&z=14&b=mbt
  • Network accessline 876
    https://www.gaiagps.com/map/?loc=14/{longitude}/{latitude}
  • Network accessline 882
    https://peakvisor.com/hiking-map?custom=14%2F{latitude}%2F{longitude}#14/{latitude}/{longitude}
  • Network accessline 887
    - Google Maps: `https://www.google.com/maps/search/?api=1&query=48.7768,-121.8144`
  • Network accessline 888
    - CalTopo: `https://caltopo.com/map.html#ll=48.7768,-121.8144&z=14&b=mbt`
  • Network accessline 889
    - Gaia GPS: `https://www.gaiagps.com/map/?loc=14/-121.8144/48.7768`
  • Network accessline 890
    - PeakVisor: `https://peakvisor.com/hiking-map?custom=14%2F48.7768%2F-121.8144#14/48.7768/-121.8144`
  • Network accessline 899
    https://www.google.com/maps/search/?api=1&query={latitude},{longitude}
  • Network accessline 902
    Example: `https://www.google.com/maps/search/?api=1&query=48.5123,-121.0456`
  • Network accessline 907
    https://www.google.com/maps/search/?api=1&query={trailhead_name}+{state}
  • Network accessline 910
    Example: `https://www.google.com/maps/search/?api=1&query=Cascade+Pass+Trailhead+WA`

skills/route-researcher/assets/report-template.md

  • Network accessline 64
    - [NPS road conditions]({nps_roads_link}) — if accessed via a national park - [CalTopo]({caltopo_trailhead_link}) (enable "Closures" layer) · [Google Maps]({google_maps_trailhead_link}) - [Recreation.gov](https://www.recreation.gov/) — perm
  • Network accessline 65
    - [CalTopo]({caltopo_trailhead_link}) (enable "Closures" layer) · [Google Maps]({google_maps_trailhead_link}) - [Recreation.gov](https://www.recreation.gov/) — permits/reservations - {Ranger station phone — for direct confirmation when web 
  • Network accessline 66
    - [Recreation.gov](https://www.recreation.gov/) — permits/reservations
  • Network accessline 73
    {Build the table below. Link each **Resource name** to its official website if available, otherwise to a Google Maps **place** search by name + address — `https://www.google.com/maps/search/?api=1&query={URL-encoded name + address}` — NOT b
  • Network accessline 92
    | Campground | Distance | Type | Operator | Map | |------------|----------|------|----------|-----| | [{name}]({website_or_google_maps_place}) | {distance_miles} mi | {camp_type or —} | {operator or —} | [Google Maps](https://www.google.com
  • Network accessline 94
    | [{name}]({website_or_google_maps_place}) | {distance_miles} mi | {camp_type or —} | {operator or —} | [Google Maps](https://www.google.com/maps/search/?api=1&query={lat},{lon}) · [Gaia](https://www.gaiagps.com/map/?loc=14/{lon}/{lat}) |
  • Network accessline 98
    **Location-linking rule (applies report-wide):** Every named place this report brings up — campground, backcountry/high camp, bivy site, trailhead, named feature — MUST be accompanied by map links: at minimum [Google Maps] and [Gaia GPS]. B
  • Network accessline 233
    {If not available:} Daylight calculations not available. Check sunrise/sunset times for your planned date at [Sunrise-Sunset.org](https://sunrise-sunset.org/us/{location}) or [TimeAndDate.com](https://www.timeanddate.com/sun/).
  • Network accessline 234
    Daylight calculations not available. Check sunrise/sunset times for your planned date at [Sunrise-Sunset.org](https://sunrise-sunset.org/us/{location}) or [TimeAndDate.com](https://www.timeanddate.com/sun/).
  • Network accessline 328
    - [Open-Meteo Weather]({open_meteo_weather_link}) - Detailed mountain weather data (source for this report) - [Open-Meteo Air Quality]({open_meteo_air_quality_link}) - Air quality forecast for this location - [Windy](https://www.windy.com/?
  • Network accessline 330
    - [Windy](https://www.windy.com/?{latitude},{longitude},10) - Visual wind/precip map
  • Network accessline 334
    - [NWAC Mountain Weather](https://nwac.us/mountain-weather-forecast/)
  • Network accessline 349
    {If not available:} **Avalanche forecast not available.** Check [NWAC.us](https://nwac.us) for current conditions.
  • Network accessline 350
    **Avalanche forecast not available.** Check [NWAC.us](https://nwac.us) for current conditions.
  • Network accessline 405
    - [PeakBagger Ascents](https://www.peakbagger.com/climber/PeakAscents.aspx?pid={peak_id}) - Individual climb logs with optional GPX tracks and reports
  • Network accessline 449
    *Research completed {timestamp} using [route-researcher v{version}](https://github.com/dreamiurg/claude-mountaineering-skills/tree/main/skills/route-researcher) from the [Claude Mountaineering Skills](https://github.com/dreamiurg/claude-mou

skills/route-researcher/assets/trip-report-template.md

  • Network accessline 3
    > Generated with the [mountaineering route-researcher skill](https://github.com/dreamiurg/claude-mountaineering-skills).

skills/route-researcher/examples/2025-10-23-mount-si.md

  • Network accessline 25
    Mount Si rises to **4,192 ft (1,278 m)** with 304 ft (93 m) of prominence in the Cascade Range, Washington. The peak is located at 47.506875°N, -121.738965°W ([Google Maps](https://www.google.com/maps/search/?api=1&query=47.506875,-121.7389
  • Network accessline 29
    **Sources:** [PeakBagger](https://www.peakbagger.com/peak.aspx?pid=2087), [AllTrails](https://www.alltrails.com/trail/us/washington/mount-si-trail), [WTA](https://www.wta.org/go-hiking/hikes/mount-si), [SummitPost](https://www.summitpost.or
  • Network accessline 37
    **Directions:** From I-90, take exit 32 and turn left onto 436th Ave SE. Follow to its end at SE North Bend Way and turn left. In 0.3 miles, turn right onto SE Mt. Si Road and follow 2.4 miles to the large trailhead parking lot on the left.
  • Network accessline 103
    - [Mountain-Forecast.com](https://www.mountain-forecast.com/peaks/Mount-Si/forecasts/1278) - Summit-level forecast with multiple elevations
  • Network accessline 104
    - [Open-Meteo Weather](https://open-meteo.com/en/docs#latitude=47.506875&longitude=-121.738965&elevation=1278&hourly=&daily=temperature_2m_max,temperature_2m_min,precipitation_sum&timezone=auto) - Detailed mountain weather data (source for 
  • Network accessline 105
    - [Open-Meteo Air Quality](https://open-meteo.com/en/docs/air-quality-api#latitude=47.506875&longitude=-121.738965&hourly=&daily=&timezone=auto) - Air quality forecast for this location
  • Network accessline 106
    - [NOAA Point Forecast](https://forecast.weather.gov/MapClick.php?textField1=47.506875&textField2=-121.738965) - Official NWS forecast and alerts
  • Network accessline 116
    - **2025-10-07** - [Netherly - Mount Si via Mount Teneriffe Trail](https://www.wta.org/go-hiking/trip-reports/trip_report-2025-10-08.141759527204)
  • Network accessline 117
    - **2025-09-26** - [ChristinaL - Mount Si](https://www.wta.org/go-hiking/trip-reports/trip_report-2025-09-27.091903021314)
  • Network accessline 118
    - **2025-09-24** - [HikerCass - Mount Si](https://www.wta.org/go-hiking/trip-reports/trip_report-2025-09-24.173643149150)
  • Network accessline 119
    - **2025-09-20** - [mollywc - Mount Si](https://www.wta.org/go-hiking/trip-reports/trip_report-2025-09-27.154843755618)
  • Network accessline 120
    - **2025-09-14** - [TheOFamily - Mount Si (Cougar sighting)](https://www.wta.org/go-hiking/trip-reports/trip_report-2025-09-14.143957154905)
  • Network accessline 124
    - **2025-01-14** - [Emma Meersman](https://www.peakbagger.com/climber/ascent.aspx?aid=2746168) - 📝 52 words, 📍 GPX
  • Network accessline 125
    - **2025-03-03** - [Wendy Kahn](https://www.peakbagger.com/climber/ascent.aspx?aid=2978055) - 📝 11 words
  • Network accessline 126
    - **2025-03-14** - [Paul Pottorff](https://www.peakbagger.com/climber/ascent.aspx?aid=2917662) - 📝 9 words
  • Network accessline 130
    - **2025-10-07** - [WTA: Netherly](https://www.wta.org/go-hiking/trip-reports/trip_report-2025-10-08.141759527204)
  • Network accessline 131
    - **2025-09-26** - [WTA: ChristinaL](https://www.wta.org/go-hiking/trip-reports/trip_report-2025-09-27.091903021314)
  • Network accessline 132
    - **2025-09-24** - [WTA: HikerCass](https://www.wta.org/go-hiking/trip-reports/trip_report-2025-09-24.173643149150)
  • Network accessline 133
    - **2025-09-20** - [WTA: mollywc](https://www.wta.org/go-hiking/trip-reports/trip_report-2025-09-27.154843755618)
  • Network accessline 134
    - **2025-09-14** - [WTA: TheOFamily - Cougar sighting](https://www.wta.org/go-hiking/trip-reports/trip_report-2025-09-14.143957154905)
  • Network accessline 138
    - [PeakBagger Ascents](https://www.peakbagger.com/climber/PeakAscents.aspx?pid=2087) - Individual climb logs with optional GPX tracks and reports
  • Network accessline 139
    - [Washington Trails Association](https://www.wta.org/go-hiking/hikes/mount-si) - User-submitted trip reports with photos and conditions (2,815+ reports)
  • Network accessline 140
    - [Mountaineers.org](https://www.mountaineers.org/activities/routes-places/mount-si-main-trail) - Route information and trip reports
  • Network accessline 141
    - [AllTrails](https://www.alltrails.com/trail/us/washington/mount-si-trail) - User reviews and recent activity (18,339 reviews)
  • Network accessline 142
    - [SummitPost](https://www.summitpost.org/mount-si/150709) - Route-specific trip reports and photos
  • Network accessline 156
    **Trailhead Direct:** Seasonal weekend bus service from Seattle (16th Ave E & E Denny Way) to Mount Si, Mount Teneriffe, and Little Si trailheads. Check [trailheaddirect.org](https://trailheaddirect.org/mount-si/) for current schedules.
  • Network accessline 167
    - PeakBagger: https://www.peakbagger.com/peak.aspx?pid=2087
  • Network accessline 168
    - Washington Trails Association: https://www.wta.org/go-hiking/hikes/mount-si
  • Network accessline 169
    - SummitPost: https://www.summitpost.org/mount-si/150709
  • Network accessline 170
    - Mountaineers: https://www.mountaineers.org/activities/routes-places/mount-si-main-trail
  • Network accessline 171
    - Open-Meteo Weather API: https://open-meteo.com
  • Network accessline 172
    - Open-Meteo Air Quality API: https://air-quality-api.open-meteo.com
  • Network accessline 173
    - NOAA/NWS: https://forecast.weather.gov
  • Network accessline 174
    - Sunrise-Sunset.org API: https://sunrise-sunset.org
  • Network accessline 178
    *Research completed 2025-10-23 using [route-researcher v3.0.0](https://github.com/dreamiurg/claude-mountaineering-skills/tree/main/skills/route-researcher) from the [Claude Mountaineering Skills](https://github.com/dreamiurg/claude-mountain

skills/route-researcher/examples/2025-11-06-mount-adams.md

  • Network accessline 31
    - **Isolation:** 45.75 miles (73.63 km) - **Location:** Yakima County, Washington, Cascade Range - **Coordinates:** 46.202494, -121.490746 ([Google Maps](https://www.google.com/maps/search/?api=1&query=46.202494,-121.490746) | [USGS Topo](h
  • Network accessline 32
    - **Location:** Yakima County, Washington, Cascade Range - **Coordinates:** 46.202494, -121.490746 ([Google Maps](https://www.google.com/maps/search/?api=1&query=46.202494,-121.490746) | [USGS Topo](https://ngmdb.usgs.gov/topoview/viewer/#1
  • Network accessline 33
    - **Coordinates:** 46.202494, -121.490746 ([Google Maps](https://www.google.com/maps/search/?api=1&query=46.202494,-121.490746) | [USGS Topo](https://ngmdb.usgs.gov/topoview/viewer/#17/46.202494/-121.490746))
  • Network accessline 34
    - **PeakBagger:** [Mount Adams](https://www.peakbagger.com/peak.aspx?pid=2365)
  • Network accessline 46
    **Directions:** [View on Google Maps](https://www.google.com/maps/search/?api=1&query=Cold+Springs+Campground+WA)
  • Network accessline 157
    - [Open-Meteo Weather](https://open-meteo.com/en/docs#latitude=46.202494&longitude=-121.490746&elevation=3743&hourly=&daily=temperature_2m_max,temperature_2m_min,precipitation_sum&timezone=auto)
  • Network accessline 158
    - [Open-Meteo Air Quality](https://open-meteo.com/en/docs/air-quality-api#latitude=46.202494&longitude=-121.490746&hourly=&daily=&timezone=auto)
  • Network accessline 159
    - [NOAA Point Forecast](https://forecast.weather.gov/MapClick.php?textField1=46.202494&textField2=-121.490746)
  • Network accessline 160
    - [NWAC Mountain Weather](https://nwac.us/mountain-weather-forecast/)
  • Network accessline 170
    - [Northwest Avalanche Center (NWAC)](https://nwac.us) - Check the Mt Adams East zone
  • Network accessline 200
    - **2025-09-27** - [Paul Pottorff](https://www.peakbagger.com/climber/ascent.aspx?aid=3000345) - Late season ascent. Water plentiful up to Pikers Peak. Microspikes on approach shoes caused toe issues on steep rock descent. Emphasized helmet
  • Network accessline 202
    - **2025-08-31** - [Abraham Guz](https://www.peakbagger.com/climber/ascent.aspx?aid=2967425) - Alpine start from Lunch Counter (3 AM). Mixed rock and snow route. Fairly icy conditions - some with microspikes wished they had crampons. Route-
  • Network accessline 204
    - **2025-08-05** - [Ben Caseley](https://www.peakbagger.com/climber/ascent.aspx?aid=2932434) - Late afternoon start to Lunch Counter, late summit start next day (8:30 AM). Glissade chute from Pikers melting out and becoming too fast with li
  • Network accessline 206
    - **2025-07-26** - [Cam Smith](https://www.peakbagger.com/climber/ascent.aspx?aid=2918617) - Started 3 AM from Cold Springs. Strong winds above 7,400 ft requiring layers the entire time. Snow from 8,000 ft, crampons on. Lunch Counter had ~3
  • Network accessline 208
    - **2025-07-19** - [Anisa Daher](https://www.peakbagger.com/climber/ascent.aspx?aid=2909281) - Trail runner approach, boot swap at snow field after main switchback. Boot pack to false summit semi-easy to find. Flat traverse to dirt switchba
  • Network accessline 212
    - **PeakBagger:** [Mount Adams Climber's Log](https://www.peakbagger.com/climber/climber.aspx?pid=2365) - 651 trip reports available
  • Network accessline 213
    - **Washington Trails Association:** [Mount Adams South Climb Trip Reports](https://www.wta.org/go-hiking/hikes/mount-adams-south-climb)
  • Network accessline 214
    - **SummitPost:** [Mount Adams Trip Reports](https://www.summitpost.org/mount-adams/trip-reports/150198)
  • Network accessline 215
    - **AllTrails:** [Mount Adams South Climb Reviews](https://www.alltrails.com/trail/us/washington/mount-adams-south-climb-trail) - 2,430 reviews
  • Network accessline 236
    - Cost: $20 per person (16 years and older) for single climbing trip - Free for children under 16 - **Purchase online:** [Recreation.gov](https://www.recreation.gov/activitypass/4280e9ae-d010-11ea-8e82-82c0c22bed90)
  • Network accessline 238
    - **Purchase online:** [Recreation.gov](https://www.recreation.gov/activitypass/4280e9ae-d010-11ea-8e82-82c0c22bed90)
  • Network accessline 286
    - Roads typically clear May-September - Expect snow closures approximately October-April - Check current conditions with Gifford Pinchot National Forest: [Road Conditions](https://www.fs.usda.gov/r06/giffordpinchot/recreation/trailhead-sout
  • Network accessline 288
    - Check current conditions with Gifford Pinchot National Forest: [Road Conditions](https://www.fs.usda.gov/r06/giffordpinchot/recreation/trailhead-south-climb)
  • Network accessline 301
    - **PeakBagger:** [Mount Adams](https://www.peakbagger.com/peak.aspx?pid=2365)
  • Network accessline 302
    - **PeakBagger CLI:** Peak data, ascent statistics, and trip reports (v1.7.0) - **Washington Trails Association:** [Mount Adams South Climb](https://www.wta.org/go-hiking/hikes/mount-adams-south-climb) - **The Mountaineers:** [Mount Adams/S
  • Network accessline 303
    - **Washington Trails Association:** [Mount Adams South Climb](https://www.wta.org/go-hiking/hikes/mount-adams-south-climb)
  • Network accessline 304
    - **The Mountaineers:** [Mount Adams/South Spur](https://www.mountaineers.org/activities/routes-places/mount-adams-south-spur)
  • Network accessline 305
    - **AllTrails:** [Mount Adams South Climb Trail](https://www.alltrails.com/trail/us/washington/mount-adams-south-climb-trail)
  • Network accessline 306
    - **SummitPost:** [Mount Adams](https://www.summitpost.org/mount-adams/150198)
  • Network accessline 310
    - **NOAA/National Weather Service:** Supplemental weather data - **Recreation.gov:** Permit information - **US Forest Service:** [Gifford Pinchot National Forest - Mt. Adams](https://www.fs.usda.gov/r06/giffordpinchot/recreation/trailhead-s
  • Network accessline 312
    - **US Forest Service:** [Gifford Pinchot National Forest - Mt. Adams](https://www.fs.usda.gov/r06/giffordpinchot/recreation/trailhead-south-climb)

skills/route-researcher/examples/2025-11-06-wolf-peak.md

  • Network accessline 25
    Wolf Peak rises to **5,813 ft (1,772 m)** with 257 ft (78 m) of prominence in the Snohomish County, Washington Cascades. The peak is located at 48.016465°N, -121.513745°W ([Google Maps](https://www.google.com/maps/search/?api=1&query=48.016
  • Network accessline 29
    **Sources:** [PeakBagger](https://www.peakbagger.com/peak.aspx?pid=52059), [Mountaineers](https://www.mountaineers.org/activities/routes-places/vesper-sperry-wolf-peaks), [WTA](https://www.wta.org/go-hiking/hikes/vesper-peak)
  • Network accessline 37
    **Directions:** From Granite Falls, drive the Mountain Loop Highway approximately 28 miles east, then turn right onto Sunrise Mine Road (Forest Road 4065) for 2.3 miles to its end at the Sunrise Mine Trailhead. [View on Google Maps](https:/
  • Network accessline 123
    - [Mountain-Forecast.com](https://www.mountain-forecast.com/peaks/Wolf-Peak-Washington/forecasts/1772) - Summit-level forecast with multiple elevations
  • Network accessline 124
    - [Open-Meteo Weather](https://open-meteo.com/en/docs#latitude=48.016465&longitude=-121.513745&elevation=1772&hourly=&daily=temperature_2m_max,temperature_2m_min,precipitation_sum&timezone=auto) - Detailed mountain weather data (source for 
  • Network accessline 125
    - [Open-Meteo Air Quality](https://open-meteo.com/en/docs/air-quality-api#latitude=48.016465&longitude=-121.513745&hourly=&daily=&timezone=auto) - Air quality forecast for this location
  • Network accessline 126
    - [NOAA Point Forecast](https://forecast.weather.gov/MapClick.php?textField1=48.016465&textField2=-121.513745) - Official NWS forecast and alerts
  • Network accessline 127
    - [NWAC Mountain Weather](https://nwac.us/mountain-weather-forecast/) - Mountain weather forecast for Cascades
  • Network accessline 131
    **Avalanche forecast not available.** The peak is at moderate elevation (5,813 ft) but does feature steep terrain above Vesper Lake. During winter months (November-April), check [NWAC.us](https://nwac.us) for current avalanche conditions in
  • Network accessline 141
    - **2025-09-25** - [Dmytro Gaivoronsky](https://www.peakbagger.com/climber/ascent.aspx?aid=2996186) - 📝 200 words, 📍 GPX
  • Network accessline 142
    - **2025-08-31** - [Zachary Richardson](https://www.peakbagger.com/climber/ascent.aspx?aid=2966508) - 📝 19 words, 📍 GPX
  • Network accessline 143
    - **2025-08-18** - [Ricky Han](https://www.peakbagger.com/climber/ascent.aspx?aid=2951146) - 📝 31 words, 📍 GPX
  • Network accessline 144
    - **2025-08-08** - [Nick 🏞<U+FE0F>](https://www.peakbagger.com/climber/ascent.aspx?aid=2934575) - 📝 28 words
  • Network accessline 148
    - **2025-11-02** - [gobozov - Vesper Peak trip (winter conditions)](https://www.wta.org/go-hiking/trip-reports/trip_report-2025-11-02.222647712135)
  • Network accessline 149
    - **2025-10-21** - [Veronica84 - Vesper Peak trip (snow conditions)](https://www.wta.org/go-hiking/trip-reports/trip_report-2025-10-21.161641757167)
  • Network accessline 150
    - **2024-08-13** - [Wolf Peak traverse in fog](https://www.wta.org/go-hiking/trip-reports/trip_report-2024-08-13.114053402236)
  • Network accessline 151
    - **2022-09-25** - [Vesper, Sperry & Wolf Peaks traverse](https://www.wta.org/go-hiking/trip-reports/trip_report.2022-09-25.0747962189)
  • Network accessline 155
    - [PeakBagger Ascents](https://www.peakbagger.com/climber/PeakAscents.aspx?pid=52059) - Individual climb logs with optional GPX tracks and reports
  • Network accessline 156
    - [Washington Trails Association](https://www.wta.org/go-hiking/hikes/vesper-peak) - User-submitted trip reports with photos and conditions
  • Network accessline 157
    - [Mountaineers.org](https://www.mountaineers.org/activities/routes-places/vesper-sperry-wolf-peaks) - Route information and trip reports
  • Network accessline 169
    - PeakBagger: https://www.peakbagger.com/peak.aspx?pid=52059
  • Network accessline 170
    - Mountaineers.org: https://www.mountaineers.org/activities/routes-places/vesper-sperry-wolf-peaks
  • Network accessline 171
    - Washington Trails Association: https://www.wta.org/go-hiking/hikes/vesper-peak
  • Network accessline 172
    - SummitPost: https://www.summitpost.org/wolf-peak/971797
  • Network accessline 179
    *Research completed 2025-11-06 using [route-researcher v1.0.0](https://github.com/dreamiurg/claude-mountaineering-skills/tree/main/skills/route-researcher) from the [Claude Mountaineering Skills](https://github.com/dreamiurg/claude-mountain

skills/route-researcher/examples/2026-01-29-mount-shuksan.md

  • Network accessline 25
    Mount Shuksan rises to **9,129 ft (2,783 m)** with 4,404 ft (1,342 m) of prominence in Washington State, North Cascades. The peak is located at 48.831095, -121.602955 ([Google Maps](https://www.google.com/maps/search/?api=1&query=48.831095,
  • Network accessline 29
    **Sources:** [PeakBagger](https://www.peakbagger.com/peak.aspx?pid=1630), [WTA](https://www.wta.org/go-hiking/hikes/mt-shuksan), [SummitPost](https://www.summitpost.org/mount-shuksan/150347), [AllTrails](https://www.alltrails.com/trail/us/w
  • Network accessline 37
    **Directions:** [View on Google Maps](https://www.google.com/maps/search/?api=1&query=Shannon+Ridge+Trailhead+WA)
  • Network accessline 137
    - [Mountain-Forecast.com](https://www.mountain-forecast.com/peaks/Mount-Shuksan/forecasts/2783) - Summit-level forecast
  • Network accessline 138
    - [Open-Meteo Weather](https://open-meteo.com/en/docs#latitude=48.831095&longitude=-121.602955&elevation=2783&hourly=&daily=temperature_2m_max,temperature_2m_min,precipitation_sum&timezone=auto) - Detailed mountain weather data
  • Network accessline 139
    - [NOAA Point Forecast](https://forecast.weather.gov/MapClick.php?textField1=48.831095&textField2=-121.602955) - Official NWS forecast
  • Network accessline 140
    - [NWAC Mountain Weather](https://nwac.us/mountain-weather-forecast/) - Cascades mountain weather
  • Network accessline 148
    **Check [NWAC North Cascades Avalanche Forecast](https://nwac.us/avalanche-forecast/#north-cascades) for current danger ratings by elevation band.**
  • Network accessline 158
    - **2025-09-05** - [Cam Smith](https://www.peakbagger.com/climber/ascent.aspx?aid=2973475) - 📝 278 words, 📍 GPX - Detailed late season beta: bare ice conditions, crevasse navigation, SE Ridge route
  • Network accessline 159
    - **2026-01-19** - [Zachary Richardson](https://www.peakbagger.com/climber/ascent.aspx?aid=3101256) - 📝 114 words - Winter ascent: snowshoes required, solid snow/ice conditions
  • Network accessline 160
    - **2025-08-17** - [Ben C](https://www.peakbagger.com/climber/ascent.aspx?aid=2950323) - 📝 123 words, 📍 GPX
  • Network accessline 161
    - **2025-08-25** - [Maureen Seeley](https://www.peakbagger.com/climber/ascent.aspx?aid=2969121) - 📝 119 words
  • Network accessline 169
    - [PeakBagger Ascents](https://www.peakbagger.com/climber/PeakAscents.aspx?pid=1630) - Individual climb logs with optional GPX tracks and reports
  • Network accessline 170
    - [Washington Trails Association](https://www.wta.org/go-hiking/hikes/mt-shuksan) - User-submitted trip reports with photos and conditions
  • Network accessline 171
    - [Mountaineers.org](https://www.mountaineers.org/activities/routes-places/north-cascades-national-park-cross-country-zones/high-occupancy-xc-zones/mount-shuksan-sulphide-glacier) - Route information and trip reports
  • Network accessline 172
    - [AllTrails](https://www.alltrails.com/trail/us/washington/mountt-shuksan-sulphide-glacier) - User reviews and recent activity
  • Network accessline 173
    - [SummitPost](https://www.summitpost.org/mount-shuksan/150347) - Route-specific trip reports and photos
  • Network accessline 185
    - PeakBagger: https://www.peakbagger.com/peak.aspx?pid=1630
  • Network accessline 186
    - WTA: https://www.wta.org/go-hiking/hikes/mt-shuksan
  • Network accessline 187
    - SummitPost: https://www.summitpost.org/mount-shuksan/150347
  • Network accessline 188
    - AllTrails: https://www.alltrails.com/trail/us/washington/mountt-shuksan-sulphide-glacier
  • Network accessline 189
    - Mountaineers.org: https://www.mountaineers.org/activities/routes-places/north-cascades-national-park-cross-country-zones/high-occupancy-xc-zones/mount-shuksan-sulphide-glacier
  • Network accessline 196
    *Research completed 2026-01-29 using [route-researcher v1.0](https://github.com/dreamiurg/claude-mountaineering-skills/tree/main/skills/route-researcher) from the [Claude Mountaineering Skills](https://github.com/dreamiurg/claude-mountainee

skills/route-researcher/examples/2026-01-29-tinkham-peak.md

  • Network accessline 25
    Tinkham Peak rises to **5,398 ft (1,645 m)** with 677 ft (206 m) of prominence in the Cascade Range, King County, Washington. The peak is located at 47.349185, -121.454685 ([Google Maps](https://www.google.com/maps/search/?api=1&query=47.34
  • Network accessline 29
    **Sources:** [PeakBagger](https://www.peakbagger.com/peak.aspx?pid=2222), [WTA](https://www.wta.org/go-hiking/hikes/tinkham-peak), [AllTrails](https://www.alltrails.com/trail/us/washington/tinkham-peak-tinkham-east-boot-trail), [Mountaineer
  • Network accessline 37
    **Directions:** [View on Google Maps](https://www.google.com/maps/search/?api=1&query=Mirror+Lake+Trailhead+Snoqualmie+Pass+WA)
  • Network accessline 129
    - [Mountain-Forecast.com](https://www.mountain-forecast.com/peaks/Tinkham-Peak/forecasts/1645) - Summit-level forecast with multiple elevations
  • Network accessline 130
    - [Open-Meteo Weather](https://open-meteo.com/en/docs#latitude=47.349185&longitude=-121.454685&elevation=1645&hourly=&daily=temperature_2m_max,temperature_2m_min,precipitation_sum&timezone=auto) - Detailed mountain weather data (source for 
  • Network accessline 131
    - [Open-Meteo Air Quality](https://open-meteo.com/en/docs/air-quality-api#latitude=47.349185&longitude=-121.454685&hourly=&daily=&timezone=auto) - Air quality forecast for this location
  • Network accessline 132
    - [NOAA Point Forecast](https://forecast.weather.gov/MapClick.php?textField1=47.349185&textField2=-121.454685) - Official NWS forecast and alerts
  • Network accessline 133
    - [NWAC Mountain Weather](https://nwac.us/mountain-weather-forecast/) - Cascades mountain weather (winter season)
  • Network accessline 139
    **Avalanche forecast not available.** Check [NWAC.us](https://nwac.us) for current conditions before travel.
  • Network accessline 149
    - **2024-09-15** - [Patty Cokus](https://www.peakbagger.com/climber/ascent.aspx?aid=2654835) - 461 words - Loop via Silver-Abiel-Tinkham, noted wet conditions, scrambly summit
  • Network accessline 150
    - **2024-08-25** - [Jared Jones](https://www.peakbagger.com/climber/ascent.aspx?aid=2652913) - 413 words - Multi-peak loop with detailed route description
  • Network accessline 151
    - **2024-08-09** - [Jamie Yelland](https://www.peakbagger.com/climber/ascent.aspx?aid=2601903) - 230 words - Silver/Abiel/Tinkham in that order
  • Network accessline 152
    - **2024-08-31** - [Paul Kallmann](https://www.peakbagger.com/climber/ascent.aspx?aid=2630390) - 218 words - Mountaineers scramble, Windy Pass approach
  • Network accessline 153
    - **2025-09-07** - [Francisco Madera](https://www.peakbagger.com/climber/ascent.aspx?aid=2976953) - 169 words, 📍 GPX - Recent detailed beta on difficulty
  • Network accessline 157
    - **2025-11-16** - [Mirror and Cottonwood Lakes, Tinkham Peak, Twilight Lake](https://www.wta.org/go-hiking/trip-reports/trip_report-2025-11-17.013746275873) - Clockwise loop, late season conditions
  • Network accessline 158
    - **2025-09-26** - [Tinkham Peak](https://www.wta.org/go-hiking/trip-reports/trip_report-2025-09-30.071521868992) - Detailed route description, road conditions
  • Network accessline 159
    - **2025-09-20** - [Silver Peak, Tinkham Peak](https://www.wta.org/go-hiking/trip-reports/trip_report-2025-09-20.190840024989) - Multi-peak with photos
  • Network accessline 163
    - [PeakBagger Ascents](https://www.peakbagger.com/climber/PeakAscents.aspx?pid=2222) - Individual climb logs with optional GPX tracks and reports
  • Network accessline 164
    - [Washington Trails Association](https://www.wta.org/go-hiking/hikes/tinkham-peak) - User-submitted trip reports with photos and conditions (80 reports)
  • Network accessline 165
    - [AllTrails](https://www.alltrails.com/trail/us/washington/tinkham-peak-tinkham-east-boot-trail) - User reviews and recent activity (514 reviews)
  • Network accessline 169
    - **SummitPost access blocked:** WebFetch returned 403 and cloudscrape.py returned limited HTML content. Check [SummitPost](https://www.summitpost.org/tinkham-peak/151401) manually for additional route beta.
  • Network accessline 171
    - **No PeakBagger route data:** The peak has no formal routes in PeakBagger database - route information synthesized from trip reports. - **Limited detailed PeakBagger reports:** Most PeakBagger reports are <100 words. WTA provides more com
  • Network accessline 173
    - **Mountaineers.org trip report extraction not attempted:** Check [Mountaineers](https://www.mountaineers.org/activities/routes-places/mirror-lake-tinkham-peak) manually for additional route information.
  • Network accessline 177
    - PeakBagger: https://www.peakbagger.com/peak.aspx?pid=2222
  • Network accessline 178
    - Washington Trails Association: https://www.wta.org/go-hiking/hikes/tinkham-peak
  • Network accessline 179
    - AllTrails: https://www.alltrails.com/trail/us/washington/tinkham-peak-tinkham-east-boot-trail
  • Network accessline 180
    - The Mountaineers: https://www.mountaineers.org/activities/routes-places/mirror-lake-tinkham-peak
  • Network accessline 181
    - Open-Meteo Weather API: https://open-meteo.com/
  • Network accessline 182
    - Sunrise-Sunset.org API: https://sunrise-sunset.org/
  • Network accessline 186
    *Research completed 2026-01-29 using [route-researcher v3.5.0](https://github.com/dreamiurg/claude-mountaineering-skills/tree/main/skills/route-researcher) from the [Claude Mountaineering Skills](https://github.com/dreamiurg/claude-mountain

skills/route-researcher/tools/README.md

  • Network accessline 25
    # Default: fast httpx fetch (browser-like headers, no browser)
  • Network accessline 26
    uv run python cloudscrape.py "https://www.peakbagger.com/peak.aspx?pid=1798"
  • Network accessline 28
    # --render: Patchright headless browser for JS-rendered / Cloudflare-challenged pages uv run python cloudscrape.py --render "https://www.hikeoftheweek.com/some-hike"
  • Network accessline 29
    uv run python cloudscrape.py --render "https://www.hikeoftheweek.com/some-hike"
  • Network accessline 67
    # Standard fetch — fast, no browser uv run python cloudscrape.py "https://www.peakbagger.com/peak.aspx?pid=1798" | grep -i "elevation"
  • Network accessline 68
    uv run python cloudscrape.py "https://www.peakbagger.com/peak.aspx?pid=1798" | grep -i "elevation"
  • Network accessline 70
    # JS-rendered / Cloudflare page uv run python cloudscrape.py --render "https://www.hikeoftheweek.com/mount-baker"
  • Network accessline 71
    uv run python cloudscrape.py --render "https://www.hikeoftheweek.com/mount-baker"
  • Network accessline 231
    "error": "Connection timeout",   "note": "Check service.com manually for current data",   "url": "https://service.com/relevant-page"
  • Network accessline 232
    "note": "Check service.com manually for current data",   "url": "https://service.com/relevant-page" }
  • Network accessline 233
    "url": "https://service.com/relevant-page"

skills/route-researcher/tools/cloudscrape.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 160
    try:         with httpx.Client(
  • Network accessline 161
    with httpx.Client(

skills/route-researcher/tools/fetch_conditions.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 18
    OPEN_METEO_WEATHER_URL = "https://api.open-meteo.com/v1/forecast"
  • Network accessline 19
    OPEN_METEO_AQ_URL = "https://air-quality-api.open-meteo.com/v1/air-quality"
  • Network accessline 48
    "patchright",     "--from",     "git+https://github.com/dreamiurg/peakbagger-cli.git@v1.10.0",
  • Network accessline 49
    "--from",     "git+https://github.com/dreamiurg/peakbagger-cli.git@v1.10.0",     "peakbagger",
  • Network accessline 50
    "git+https://github.com/dreamiurg/peakbagger-cli.git@v1.10.0",
  • Network accessline 70
    try:         with httpx.Client(timeout=30.0) as client:
  • Network accessline 71
    with httpx.Client(timeout=30.0) as client:
  • Network accessline 123
    "forecast": forecast,                 "timezone": data.get("timezone"),                 "source_url": f"https://open-meteo.com/en/docs#latitude={lat}&longitude={lon}",
  • Network accessline 124
    "timezone": data.get("timezone"),                 "source_url": f"https://open-meteo.com/en/docs#latitude={lat}&longitude={lon}",             }
  • Network accessline 125
    "source_url": f"https://open-meteo.com/en/docs#latitude={lat}&longitude={lon}",
  • Network accessline 141
    try:         with httpx.Client(timeout=30.0) as client:
  • Network accessline 142
    with httpx.Client(timeout=30.0) as client:
  • Network accessline 174
    "rating": rating,                     "concerns": concerns,                     "source_url": f"https://open-meteo.com/en/docs/air-quality-api#latitude={lat}&longitude={lon}",
  • Network accessline 175
    "concerns": concerns,                     "source_url": f"https://open-meteo.com/en/docs/air-quality-api#latitude={lat}&longitude={lon}",                 }
  • Network accessline 176
    "source_url": f"https://open-meteo.com/en/docs/air-quality-api#latitude={lat}&longitude={lon}",
  • Network accessline 289
    return {         "region": region,         "url": f"https://nwac.us/avalanche-forecast/#{region}",
  • Network accessline 290
    "region": region,         "url": f"https://nwac.us/avalanche-forecast/#{region}",         "note": "Check NWAC for current avalanche danger ratings before entering avalanche terrain",
  • Network accessline 291
    "url": f"https://nwac.us/avalanche-forecast/#{region}",
  • Network accessline 321
    FCC_AREA_URL = "https://geo.fcc.gov/api/census/area"
  • Network accessline 322
    OVERPASS_URL = "https://overpass-api.de/api/interpreter"
  • Network accessline 323
    USFS_DISTRICTS_URL = (     "https://apps.fs.usda.gov/arcx/rest/services/EDW/EDW_RangerDistricts_01/MapServer/0/query" )
  • Network accessline 324
    "https://apps.fs.usda.gov/arcx/rest/services/EDW/EDW_RangerDistricts_01/MapServer/0/query"
  • Network accessline 340
    seen: dict[str, dict] = {}         errors = 0  # consecutive failed requests (API likely down)         with httpx.Client(timeout=30.0) as client:
  • Network accessline 341
    errors = 0  # consecutive failed requests (API likely down)         with httpx.Client(timeout=30.0) as client:             for lat, lon in points:
  • Network accessline 342
    with httpx.Client(timeout=30.0) as client:
  • Network accessline 371
    return {                 "error": "FCC Area API returned no data for any sampled point.",                 "note": "County lookup failed; check https://geo.fcc.gov/api/census/area",
  • Network accessline 372
    "error": "FCC Area API returned no data for any sampled point.",                 "note": "County lookup failed; check https://geo.fcc.gov/api/census/area",                 "counties": [],
  • Network accessline 373
    "note": "County lookup failed; check https://geo.fcc.gov/api/census/area",
  • Network accessline 416
    "User-Agent": (         "claude-mountaineering-skills/route-researcher "         "(https://github.com/dreamiurg/claude-mountaineering-skills)"
  • Network accessline 417
    "claude-mountaineering-skills/route-researcher "         "(https://github.com/dreamiurg/claude-mountaineering-skills)"     ),
  • Network accessline 418
    "(https://github.com/dreamiurg/claude-mountaineering-skills)"
  • Network accessline 429
    with httpx.Client(timeout=35.0, headers=_OVERPASS_HEADERS) as client:
  • Network accessline 517
    try:             with httpx.Client(timeout=20.0) as client:
  • Network accessline 518
    with httpx.Client(timeout=20.0) as client:

skills/route-researcher/tools/test_cloudscrape.py

  • Executable scriptline 1
    Executable file
  • Network accessline 65
    patch.object(cloudscrape, "_CHROMIUM_INSTALLED", True),         ):             result = runner.invoke(cli, ["https://example.com", "--render", "--timeout", "1"])
  • Network accessline 67
    result = runner.invoke(cli, ["https://example.com", "--render", "--timeout", "1"])
  • Network accessline 91
    patch.object(cloudscrape, "_CHROMIUM_INSTALLED", True),         ):             result = runner.invoke(cli, ["https://example.com", "--render", "--timeout", "1"])
  • Network accessline 93
    result = runner.invoke(cli, ["https://example.com", "--render", "--timeout", "1"])
  • Network accessline 116
    result = runner.invoke(cli, ["https://example.com"])
  • Network accessline 132
    result = runner.invoke(cli, ["https://example.com"])
  • Network accessline 149
    mock_client.__exit__ = MagicMock(return_value=False)             mock_response = MagicMock()             mock_response.raise_for_status.side_effect = httpx.HTTPStatusError(
  • Network accessline 150
    mock_response = MagicMock()             mock_response.raise_for_status.side_effect = httpx.HTTPStatusError(                 "403 Forbidden",
  • Network accessline 151
    mock_response.raise_for_status.side_effect = httpx.HTTPStatusError(
  • Network accessline 159
    result = runner.invoke(cli, ["https://example.com"])
  • Network accessline 173
    with patch("cloudscrape._fetch_with_render") as mock_render:             mock_render.return_value = "<html>rendered</html>"             result = runner.invoke(cli, ["https://example.com", "--render"])
  • Network accessline 175
    result = runner.invoke(cli, ["https://example.com", "--render"])
  • Network accessline 185
    with patch("cloudscrape._fetch_with_render") as mock_render:             mock_render.return_value = "<html/>"             runner.invoke(cli, ["https://example.com", "--render"])
  • Network accessline 187
    runner.invoke(cli, ["https://example.com", "--render"])
  • Network accessline 189
    mock_render.assert_called_once_with("https://example.com", 30, False)
  • Network accessline 195
    with patch("cloudscrape._fetch_with_render") as mock_render:             mock_render.return_value = "<html/>"             runner.invoke(cli, ["https://example.com", "--render", "--timeout", "60"])
  • Network accessline 197
    runner.invoke(cli, ["https://example.com", "--render", "--timeout", "60"])
  • Network accessline 199
    mock_render.assert_called_once_with("https://example.com", 60, False)
  • Network accessline 205
    with patch("cloudscrape._fetch_with_render") as mock_render:             mock_render.return_value = "<html/>"             runner.invoke(cli, ["https://example.com", "--render", "--headed"])
  • Network accessline 207
    runner.invoke(cli, ["https://example.com", "--render", "--headed"])
  • Network accessline 209
    mock_render.assert_called_once_with("https://example.com", 30, True)
  • Network accessline 213
    runner = CliRunner()         result = runner.invoke(cli, ["https://example.com", "--headed"])
  • Network accessline 214
    result = runner.invoke(cli, ["https://example.com", "--headed"])
  • Network accessline 223
    with patch("cloudscrape._fetch_with_render") as mock_render:             mock_render.side_effect = Exception("Patchright not available")             result = runner.invoke(cli, ["https://example.com", "--render"])
  • Network accessline 225
    result = runner.invoke(cli, ["https://example.com", "--render"])
  • Network accessline 235
    with patch("cloudscrape._fetch_with_render") as mock_render:             mock_render.side_effect = ImportError("No module named 'patchright'")             result = runner.invoke(cli, ["https://example.com", "--render"])
  • Network accessline 237
    result = runner.invoke(cli, ["https://example.com", "--render"])
  • Network accessline 267
    result = runner.invoke(cli, ["https://example.com", "--timeout", "60"])

skills/route-researcher/tools/test_fetch_conditions.py

  • Executable scriptline 1
    Executable file

skills/route-researcher/tools/test_fetch_conditions_unit.py

  • Executable scriptline 1
    Executable file

skills/route-researcher/tools/test_geodata_fetchers.py

  • Executable scriptline 1
    Executable file
  • Network accessline 162
    "emergency": "yes",                 "phone": "+1-360-734-5400",                 "website": "https://www.peacehealth.org/st-joseph",
  • Network accessline 163
    "phone": "+1-360-734-5400",                 "website": "https://www.peacehealth.org/st-joseph",                 "addr:housenumber": "2901",
  • Network accessline 164
    "website": "https://www.peacehealth.org/st-joseph",
  • Network accessline 229
    peace = next(h for h in result["hospitals"] if h["name"] == "PeaceHealth St. Joseph")         assert peace["website"] == "https://www.peacehealth.org/st-joseph"
  • Network accessline 230
    assert peace["website"] == "https://www.peacehealth.org/st-joseph"

skills/route-researcher/tools/test_phase4.py

  • Executable scriptline 1
    Executable file

skills/route-researcher/tools/test_phase5.py

  • Executable scriptline 1
    Executable file

skills/route-researcher/tools/uv.lock

  • Network accessline 10
    name = "anyio" version = "4.13.0" source = { registry = "https://pypi.org/simple" }
  • Network accessline 11
    version = "4.13.0" source = { registry = "https://pypi.org/simple" } dependencies = [
  • Network accessline 12
    source = { registry = "https://pypi.org/simple" }
  • Network accessline 15
    { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/19/14/2c5dd9f512b66549ae92767a9c7b330ae88e1932ca57876909410251fe13/anyio-4.13.0.tar.gz", hash = "sha256:334b
  • Network accessline 16
    ] sdist = { url = "https://files.pythonhosted.org/packages/19/14/2c5dd9f512b66549ae92767a9c7b330ae88e1932ca57876909410251fe13/anyio-4.13.0.tar.gz", hash = "sha256:334b70e641fd2221c1505b3890c69882fe4a2df910cba14d97019b90b24439dc", size = 231
  • Network accessline 17
    sdist = { url = "https://files.pythonhosted.org/packages/19/14/2c5dd9f512b66549ae92767a9c7b330ae88e1932ca57876909410251fe13/anyio-4.13.0.tar.gz", hash = "sha256:334b70e641fd2221c1505b3890c69882fe4a2df910cba14d97019b90b24439dc", size = 23162
  • Network accessline 18
    wheels = [     { url = "https://files.pythonhosted.org/packages/da/42/e921fccf5015463e32a3cf6ee7f980a6ed0f395ceeaa45060b61d86486c2/anyio-4.13.0-py3-none-any.whl", hash = "sha256:08b310f9e24a9594186fd75b4f73f4a4152069e3853f1ed8bfbf58369f4ad7
  • Network accessline 19
    { url = "https://files.pythonhosted.org/packages/da/42/e921fccf5015463e32a3cf6ee7f980a6ed0f395ceeaa45060b61d86486c2/anyio-4.13.0-py3-none-any.whl", hash = "sha256:08b310f9e24a9594186fd75b4f73f4a4152069e3853f1ed8bfbf58369f4ad708", size = 114
  • Network accessline 23
    name = "astral" version = "3.2" source = { registry = "https://pypi.org/simple" }
  • Network accessline 24
    version = "3.2" source = { registry = "https://pypi.org/simple" } dependencies = [
  • Network accessline 25
    source = { registry = "https://pypi.org/simple" }
  • Network accessline 27
    { name = "tzdata", marker = "sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/04/d1/1adbf06a38dc339e41a1666f6c7135924594c20fd46e060fb263248c564d/astral-3.2.tar.gz", hash = "sha256:9b7c3b412e9e69d172cfb2
  • Network accessline 28
    ] sdist = { url = "https://files.pythonhosted.org/packages/04/d1/1adbf06a38dc339e41a1666f6c7135924594c20fd46e060fb263248c564d/astral-3.2.tar.gz", hash = "sha256:9b7c3b412e9e69d172cfb24be0e6addcc9f1bd01a28db8bebe66d75ccc533d88", size = 48075
  • Network accessline 29
    sdist = { url = "https://files.pythonhosted.org/packages/04/d1/1adbf06a38dc339e41a1666f6c7135924594c20fd46e060fb263248c564d/astral-3.2.tar.gz", hash = "sha256:9b7c3b412e9e69d172cfb24be0e6addcc9f1bd01a28db8bebe66d75ccc533d88", size = 48075, 
  • Network accessline 30
    wheels = [     { url = "https://files.pythonhosted.org/packages/2d/80/d6edd9c3259913cfe39aff2bea4da65de5ad0235a578405e37aabace5f2c/astral-3.2-py3-none-any.whl", hash = "sha256:cb7b49a3f0d4c64ae666be131276d2a3226134c598db10e672028cf8ff855f83
  • Network accessline 31
    { url = "https://files.pythonhosted.org/packages/2d/80/d6edd9c3259913cfe39aff2bea4da65de5ad0235a578405e37aabace5f2c/astral-3.2-py3-none-any.whl", hash = "sha256:cb7b49a3f0d4c64ae666be131276d2a3226134c598db10e672028cf8ff855f83", size = 38325
  • Network accessline 35
    name = "certifi" version = "2026.4.22" source = { registry = "https://pypi.org/simple" }
  • Network accessline 36
    version = "2026.4.22" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/25/ee/6caf7a40c36a1220410afe15a1cc64993a1f864871f698c0f93acb72842a/certifi-2026.4.22.tar.gz", hash = "sha256:8d
  • Network accessline 37
    source = { registry = "https://pypi.org/simple" }
  • Network accessline 38
    sdist = { url = "https://files.pythonhosted.org/packages/25/ee/6caf7a40c36a1220410afe15a1cc64993a1f864871f698c0f93acb72842a/certifi-2026.4.22.tar.gz", hash = "sha256:8d455352a37b71bf76a79caa83a3d6c25afee4a385d632127b6afb3963f1c580", size = 
  • Network accessline 39
    wheels = [     { url = "https://files.pythonhosted.org/packages/22/30/7cd8fdcdfbc5b869528b079bfb76dcdf6056b1a2097a662e5e8c04f42965/certifi-2026.4.22-py3-none-any.whl", hash = "sha256:3cb2210c8f88ba2318d29b0388d1023c8492ff72ecdde4ebdaddbb13a
  • Network accessline 40
    { url = "https://files.pythonhosted.org/packages/22/30/7cd8fdcdfbc5b869528b079bfb76dcdf6056b1a2097a662e5e8c04f42965/certifi-2026.4.22-py3-none-any.whl", hash = "sha256:3cb2210c8f88ba2318d29b0388d1023c8492ff72ecdde4ebdaddbb13a31b1c4a", size 
  • Network accessline 44
    name = "click" version = "8.3.3" source = { registry = "https://pypi.org/simple" }
  • Network accessline 45
    version = "8.3.3" source = { registry = "https://pypi.org/simple" } dependencies = [
  • Network accessline 46
    source = { registry = "https://pypi.org/simple" }
  • Network accessline 48
    { name = "colorama", marker = "sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/bb/63/f9e1ea081ce35720d8b92acde70daaedace594dc93b693c869e0d5910718/click-8.3.3.tar.gz", hash = "sha256:398329ad4837b2ff7cb
  • Network accessline 49
    ] sdist = { url = "https://files.pythonhosted.org/packages/bb/63/f9e1ea081ce35720d8b92acde70daaedace594dc93b693c869e0d5910718/click-8.3.3.tar.gz", hash = "sha256:398329ad4837b2ff7cbe1dd166a4c0f8900c3ca3a218de04466f38f6497f18a2", size = 3280
  • Network accessline 50
    sdist = { url = "https://files.pythonhosted.org/packages/bb/63/f9e1ea081ce35720d8b92acde70daaedace594dc93b693c869e0d5910718/click-8.3.3.tar.gz", hash = "sha256:398329ad4837b2ff7cbe1dd166a4c0f8900c3ca3a218de04466f38f6497f18a2", size = 328061
  • Network accessline 51
    wheels = [     { url = "https://files.pythonhosted.org/packages/ae/44/c1221527f6a71a01ec6fbad7fa78f1d50dfa02217385cf0fa3eec7087d59/click-8.3.3-py3-none-any.whl", hash = "sha256:a2bf429bb3033c89fa4936ffb35d5cb471e3719e1f3c8a7c3fff0b831430561
  • Network accessline 52
    { url = "https://files.pythonhosted.org/packages/ae/44/c1221527f6a71a01ec6fbad7fa78f1d50dfa02217385cf0fa3eec7087d59/click-8.3.3-py3-none-any.whl", hash = "sha256:a2bf429bb3033c89fa4936ffb35d5cb471e3719e1f3c8a7c3fff0b8314305613", size = 1105
  • Network accessline 56
    name = "colorama" version = "0.4.6" source = { registry = "https://pypi.org/simple" }
  • Network accessline 57
    version = "0.4.6" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb
  • Network accessline 58
    source = { registry = "https://pypi.org/simple" }
  • Network accessline 59
    sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 276
  • Network accessline 60
    wheels = [     { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57a
  • Network accessline 61
    { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size
  • Network accessline 65
    name = "greenlet" version = "3.5.0" source = { registry = "https://pypi.org/simple" }
  • Network accessline 66
    version = "3.5.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/3c/3f/dbf99fb14bfeb88c28f16729215478c0e265cacd6dc22270c8f31bb6892f/greenlet-3.5.0.tar.gz", hash = "sha256:d41964737
  • Network accessline 67
    source = { registry = "https://pypi.org/simple" }
  • Network accessline 68
    sdist = { url = "https://files.pythonhosted.org/packages/3c/3f/dbf99fb14bfeb88c28f16729215478c0e265cacd6dc22270c8f31bb6892f/greenlet-3.5.0.tar.gz", hash = "sha256:d419647372241bc68e957bf38d5c1f98852155e4146bd1e4121adea81f4f01e4", size = 196
  • Network accessline 69
    wheels = [     { url = "https://files.pythonhosted.org/packages/8b/0f/a91f143f356523ff682309732b175765a9bc2836fd7c081c2c67fedc1ad4/greenlet-3.5.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:8f1cc966c126639cd152fdaa52624d2655f492
  • Network accessline 70
    { url = "https://files.pythonhosted.org/packages/8b/0f/a91f143f356523ff682309732b175765a9bc2836fd7c081c2c67fedc1ad4/greenlet-3.5.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:8f1cc966c126639cd152fdaa52624d2655f492faa79e013fea161
  • Network accessline 71
    { url = "https://files.pythonhosted.org/packages/95/82/800646c7ffc5dbabd75ddd2f6b519bb898c0c9c969e5d0473bfe5d20bcce/greenlet-3.5.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:362624e6a8e5bca3b8233e45eef339
  • Network accessline 72
    { url = "https://files.pythonhosted.org/packages/ca/ac/354867c0bba812fc33b15bc55aedafedd0aee3c7dd91dfca22444157dc0c/greenlet-3.5.0-cp311-cp311-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5ecd83806b0f4c2f53b1018e0005cd
  • Network accessline 73
    { url = "https://files.pythonhosted.org/packages/c9/ab/192090c4a5b30df148c22bf4b8895457d739a7c7c5a7b9c41e5dd7f537f2/greenlet-3.5.0-cp311-cp311-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fa94cb2288681e3a11645958f1871d48ee
  • Network accessline 74
    { url = "https://files.pythonhosted.org/packages/ff/b0/815bece7399e01cadb69014219eebd0042339875c59a59b0820a46ece356/greenlet-3.5.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0ff251e9a0279522e62f617641286939
  • Network accessline 75
    { url = "https://files.pythonhosted.org/packages/24/11/05eb2b9b188c6df7d68a89c99134d644a7af616a40b9808e8e6ced315d5d/greenlet-3.5.0-cp311-cp311-manylinux_2_39_riscv64.whl", hash = "sha256:64d6ac45f7271f48e45f67c95b54ef73534c52ec041fcda8edf52
  • Network accessline 76
    { url = "https://files.pythonhosted.org/packages/10/80/3b2c0a895d6698f6ddb31b07942ebfa982f3e30888bc5546a5b5990de8b2/greenlet-3.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6d874e79afd41a96e11ff4c5d0bc90a80973e476fda1c2c6498566
  • Network accessline 77
    { url = "https://files.pythonhosted.org/packages/44/0e/f354af514a4c61454dbc68e44d47544a5a4d6317e30b77ddfa3a09f4c5f3/greenlet-3.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0ed006e4b86c59de7467eb2601cd1b77b5a7d657d1ee55e30fe30d7
  • Network accessline 78
    { url = "https://files.pythonhosted.org/packages/fa/6a/87f38255201e993a1915265ebb80cd7c2c78b04a45744995abbf6b259fd8/greenlet-3.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:703cb211b820dbffbbc55a16bfc6e4583a6e6e990f33a119d2cc8b83211119c8",
  • Network accessline 79
    { url = "https://files.pythonhosted.org/packages/e3/f8/450fe3c5938fa737ea4d22699772e6e34e8e24431a47bf4e8a1ceed4a98e/greenlet-3.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:6c18dfb59c70f5a94acd271c72e90128c3c776e41e5f07767908c8c1b74ad339",
  • Network accessline 80
    { url = "https://files.pythonhosted.org/packages/ef/32/f2ce6d4cac3e55bc6173f92dbe627e782e1850f89d986c3606feb63aafa7/greenlet-3.5.0-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:db2910d3c809444e0a20147361f343fe2798e106af8d9d8506f53
  • Network accessline 81
    { url = "https://files.pythonhosted.org/packages/b7/aa/caed9e5adf742315fc7be2a84196373aab4816e540e38ba0d76cb7584d68/greenlet-3.5.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ec9ea74e7268ace7f9aab1b1a4e73
  • Network accessline 82
    { url = "https://files.pythonhosted.org/packages/c7/af/90ae08497400a941595d12774447f752d3dfe0fbb012e35b76bc5c0ff37e/greenlet-3.5.0-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:54d243512da35485fc7a6bf3c178fd
  • Network accessline 83
    { url = "https://files.pythonhosted.org/packages/3f/e9/4eeadf8cb3403ac274245ba75f07844abc7fa5f6787583fc9156ba741e0f/greenlet-3.5.0-cp312-cp312-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:41353ec2ecedf7aa8f682753a41919f871
  • Network accessline 84
    { url = "https://files.pythonhosted.org/packages/2b/e0/2e13df68f367e2f9960616927d60857dd7e56aaadd59a47c644216b2f920/greenlet-3.5.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d280a7f5c331622c69f97eb167f3357
  • Network accessline 85
    { url = "https://files.pythonhosted.org/packages/ee/ef/f913b3c0eb7d26d86a2401c5e1546c9d46b657efee724b06f6f4ac5d8824/greenlet-3.5.0-cp312-cp312-manylinux_2_39_riscv64.whl", hash = "sha256:58c1c374fe2b3d852f9b6b11a7dff4c85404e51b9a596fd9e89cf
  • Network accessline 86
    { url = "https://files.pythonhosted.org/packages/82/f7/393c64055132ac0d488ef6be549253b7e6274194863967ddc0bc8f5b87b8/greenlet-3.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1eb67d5adefb5bd2e182d42678a328979a209e4e82eb9357570818
  • Network accessline 87
    { url = "https://files.pythonhosted.org/packages/b8/4b/eaf7735253522cf56d1b74d672a58f54fc114702ceaf05def59aae72f6e1/greenlet-3.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2628d6c86f6cb0cb45e0c3c54058bbec559f57eaae699447748cb39
  • Network accessline 88
    { url = "https://files.pythonhosted.org/packages/4c/fe/4fb3a0805bd5165da5ebf858da7cc01cce8061674106d2cf5bdab32cbfde/greenlet-3.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:d4d9f0624c775f2dfc56ba54d515a8c771044346852a918b405914f6b19d7fd8",
  • Network accessline 89
    { url = "https://files.pythonhosted.org/packages/cb/cb/baa584cb00532126ffe12d9787db0a60c5a4f55c27bfe2666df5d4c30a32/greenlet-3.5.0-cp312-cp312-win_arm64.whl", hash = "sha256:83ed9f27f1680b50e89f40f6df348a290ea234b249a4003d366663a12eab94f2",
  • Network accessline 90
    { url = "https://files.pythonhosted.org/packages/0c/58/fc576f99037ce19c5aa16628e4c3226b6d1419f72a62c79f5f40576e6eb3/greenlet-3.5.0-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:5a5ed18de6a0f6cc7087f1563f6bd93fc7df1c19165ca01e9bde5
  • Network accessline 91
    { url = "https://files.pythonhosted.org/packages/4a/ba/b28ddbe6bfad6a8ac196ef0e8cff37bc65b79735995b9e410923fffeeb70/greenlet-3.5.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a717fbc46d8a354fa675f7c1e8134
  • Network accessline 92
    { url = "https://files.pythonhosted.org/packages/09/06/4b69f8f0b67603a8be2790e55107a190b376f2627fe0eaf5695d85ffb3cd/greenlet-3.5.0-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ddc090c5c1792b10246a78e8c2163e
  • Network accessline 93
    { url = "https://files.pythonhosted.org/packages/6a/15/a643b4ecd09969e30b8a150d5919960caae0abe4f5af75ab040b1ab85e78/greenlet-3.5.0-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4964101b8585c144cbda5532b1aa644255
  • Network accessline 94
    { url = "https://files.pythonhosted.org/packages/8a/17/a3918541fd0ddefe024a69de6d16aa7b46d36ac19562adaa63c7fa180eff/greenlet-3.5.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2094acd54b272cb6eae8c03dd87b3fa1
  • Network accessline 95
    { url = "https://files.pythonhosted.org/packages/77/18/3b13d5ef1275b0ffaf933b05efa21408ac4ca95823c7411d79682e4fdcff/greenlet-3.5.0-cp313-cp313-manylinux_2_39_riscv64.whl", hash = "sha256:7022615368890680e67b9965d33f5773aade330d5343bbe255601
  • Network accessline 96
    { url = "https://files.pythonhosted.org/packages/ee/e1/bd0af6213c7dd33175d8a462d4c1fe1175124ebed4855bc1475a5b5242c2/greenlet-3.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5e05ba267789ea87b5a155cf0e810b1ab88bf18e9e8740813945ce
  • Network accessline 97
    { url = "https://files.pythonhosted.org/packages/9b/2a/0789702f864f5382cb476b93d7a9c823c10472658102ccd65f415747d2e2/greenlet-3.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0ecec963079cd58cbd14723582384f11f166fd58883c15dcbfb342e
  • Network accessline 98
    { url = "https://files.pythonhosted.org/packages/b2/8f/22bf9df92bbff0eb07842b60f7e63bf7675a9742df628437a9f02d09137f/greenlet-3.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:728d9667d8f2f586644b748dbd9bb67e50d6a9381767d1357714ea6825bb3bf5",
  • Network accessline 99
    { url = "https://files.pythonhosted.org/packages/b6/b7/9c5c3d653bd4ff614277c049ac676422e2c557db47b4fe43e6313fc005dc/greenlet-3.5.0-cp313-cp313-win_arm64.whl", hash = "sha256:47422135b1d308c14b2c6e758beedb1acd33bb91679f5670edf77bf46244722b",
  • Network accessline 100
    { url = "https://files.pythonhosted.org/packages/94/5e/a70f31e3e8d961c4ce589c15b28e4225d63704e431a23932a3808cbcc867/greenlet-3.5.0-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:f35807464c4c58c55f0d31dfa83c541a5615d825c2fe3d2b95360
  • Network accessline 101
    { url = "https://files.pythonhosted.org/packages/af/a6/046c0a28e21833e4086918218cfb3d8bed51c075a1b700f20b9d7861c0f4/greenlet-3.5.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:55fa7ea52771be44af0de27d8b80c0
  • Network accessline 102
    { url = "https://files.pythonhosted.org/packages/47/f8/4af27f71c5ff32a7fbc516adb46370d9c4ae2bc7bd3dc7d066ac542b4b15/greenlet-3.5.0-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a97e4821aa710603f94de0da25f250
  • Network accessline 103
    { url = "https://files.pythonhosted.org/packages/fb/89/2dadb89793c37ee8b4c237857188293e9060dc085f19845c292e00f8e091/greenlet-3.5.0-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:bf2d8a80bec89ab46221ae45c5373d5ba0
  • Network accessline 104
    { url = "https://files.pythonhosted.org/packages/a3/59/1bd6d7428d6ed9106efbb8c52310c60fd04f6672490f452aeaa3829aa436/greenlet-3.5.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8f52a464e4ed91780bdfbbdd2b97197f
  • Network accessline 105
    { url = "https://files.pythonhosted.org/packages/82/35/75722be7e26a2af4cbd2dc35b0ed382dacf9394b7e75551f76ed1abe87f2/greenlet-3.5.0-cp314-cp314-manylinux_2_39_riscv64.whl", hash = "sha256:1bae92a1dd94c5f9d9493c3a212dd874c202442047cf96446412c
  • Network accessline 106
    { url = "https://files.pythonhosted.org/packages/83/e4/b903e5a5fae1e8a28cdd32a0cfbfd560b668c25b692f67768822ddc5f40f/greenlet-3.5.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:762612baf1161ccb8437c0161c668a688223cba28e1bf038f4eb47
  • Network accessline 107
    { url = "https://files.pythonhosted.org/packages/0e/e3/5ec408a329acb854fb607a122e1ee5fb3ff649f9a97952948a90803c0d8e/greenlet-3.5.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:57a43c6079a89713522bc4bcb9f75070ecf5d3dbad7792bfe422393
  • Network accessline 108
    { url = "https://files.pythonhosted.org/packages/91/20/6b165108058767ee643c55c5c4904d591a830ee2b3c7dbd359828fbc829f/greenlet-3.5.0-cp314-cp314-win_amd64.whl", hash = "sha256:3bc59be3945ae9750b9e7d45067d01ae3fe90ea5f9ade99239dabdd6e28a5033",
  • Network accessline 109
    { url = "https://files.pythonhosted.org/packages/4e/62/1c498375cee177b55d980c1db319f26470e5309e54698c8f8fc06c0fd539/greenlet-3.5.0-cp314-cp314-win_arm64.whl", hash = "sha256:a96fcee45e03fe30a62669fd16ab5c9d3c172660d3085605cb1e2d1280d3c988",
  • Network accessline 110
    { url = "https://files.pythonhosted.org/packages/78/a8/4522939255bb5409af4e87132f915446bf3622c2c292d14d3c38d128ae82/greenlet-3.5.0-cp314-cp314t-macosx_11_0_universal2.whl", hash = "sha256:a10a732421ab4fec934783ce3e54763470d0181db6e3468f9103
  • Network accessline 111
    { url = "https://files.pythonhosted.org/packages/15/5e/8744c52e2c027b5a8772a01561934c8835f869733e101f62075c60430340/greenlet-3.5.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7fc391b1566f2907d17aaebe78f88
  • Network accessline 112
    { url = "https://files.pythonhosted.org/packages/00/ef/7b4c39c03cf46ceca512c5d3f914afd85aa30b2cc9a93015b0dd73e4be6c/greenlet-3.5.0-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:680bd0e7ad5e8daa8a4aa89f68fd6
  • Network accessline 113
    { url = "https://files.pythonhosted.org/packages/5f/5c/0602239503b124b70e39355cbdb39361ecfe65b87a5f2f63752c32f5286f/greenlet-3.5.0-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1aa4ce8debcd4ea7fb2e150f3036588c4
  • Network accessline 114
    { url = "https://files.pythonhosted.org/packages/0b/b5/c7768f352f5c010f92064d0063f987e7dc0cd290a6d92a34109015ce4aa1/greenlet-3.5.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ddb36c7d6c9c0a65f18c7258634e0c4
  • Network accessline 115
    { url = "https://files.pythonhosted.org/packages/38/51/8699f865f125dc952384cb432b0f7138aa4d8f2969a7d12d0df5b94d054d/greenlet-3.5.0-cp314-cp314t-manylinux_2_39_riscv64.whl", hash = "sha256:728a73687e39ae9ca34e4694cbf2f049d3fbc7174639468d0f67
  • Network accessline 116
    { url = "https://files.pythonhosted.org/packages/ef/d0/079ebe12e4b1fc758857ce5be1a5e73f06870f2101e52611d1e71925ce54/greenlet-3.5.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e5ddf316ced87539144621453c3aef229575825fe60c604e62bed
  • Network accessline 117
    { url = "https://files.pythonhosted.org/packages/6d/89/6c2fb63df3596552d20e58fb4d96669243388cf680cff222758812c7bfaa/greenlet-3.5.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:4a448128607be0de65342dc9b31be7f948ef4cc0bc8832069350ab
  • Network accessline 118
    { url = "https://files.pythonhosted.org/packages/15/32/77ee8a6c1564fc345a491a4e85b3bf360e4cf26eac98c4532d2fdb96e01f/greenlet-3.5.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d60097128cb0a1cab9ea541186ea13cd7b847b8449a7787c2e2350da0cb82d86"
  • Network accessline 122
    name = "h11" version = "0.16.0" source = { registry = "https://pypi.org/simple" }
  • Network accessline 123
    version = "0.16.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45
  • Network accessline 124
    source = { registry = "https://pypi.org/simple" }
  • Network accessline 125
    sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250,
  • Network accessline 126
    wheels = [     { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86
  • Network accessline 127
    { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515
  • Network accessline 131
    name = "httpcore" version = "1.0.9" source = { registry = "https://pypi.org/simple" }
  • Network accessline 132
    version = "1.0.9" source = { registry = "https://pypi.org/simple" } dependencies = [
  • Network accessline 133
    source = { registry = "https://pypi.org/simple" }
  • Network accessline 136
    { name = "h11" }, ] sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff
  • Network accessline 137
    ] sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 8
  • Network accessline 138
    sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 854
  • Network accessline 139
    wheels = [     { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1
  • Network accessline 140
    { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 7
  • Network accessline 144
    name = "httpx" version = "0.28.1" source = { registry = "https://pypi.org/simple" }
  • Network accessline 145
    version = "0.28.1" source = { registry = "https://pypi.org/simple" } dependencies = [
  • Network accessline 146
    source = { registry = "https://pypi.org/simple" }
  • Network accessline 151
    { name = "idna" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e
  • Network accessline 152
    ] sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141
  • Network accessline 153
    sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 14140
  • Network accessline 154
    wheels = [     { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59
  • Network accessline 155
    { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 735
  • Network accessline 159
    name = "idna" version = "3.15" source = { registry = "https://pypi.org/simple" }
  • Network accessline 160
    version = "3.15" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/82/77/7b3966d0b9d1d31a36ddf1746926a11dface89a83409bf1483f0237aa758/idna-3.15.tar.gz", hash = "sha256:ca962446ea538f7
  • Network accessline 161
    source = { registry = "https://pypi.org/simple" }
  • Network accessline 162
    sdist = { url = "https://files.pythonhosted.org/packages/82/77/7b3966d0b9d1d31a36ddf1746926a11dface89a83409bf1483f0237aa758/idna-3.15.tar.gz", hash = "sha256:ca962446ea538f7092a95e057da437618e886f4d349216d2b1e294abfdb65fdc", size = 199245, 
  • Network accessline 163
    wheels = [     { url = "https://files.pythonhosted.org/packages/d2/23/408243171aa9aaba178d3e2559159c24c1171a641aa83b67bdd3394ead8e/idna-3.15-py3-none-any.whl", hash = "sha256:048adeaf8c2d788c40fee287673ccaa74c24ffd8dcf09ffa555a2fbb59f10ac8"
  • Network accessline 164
    { url = "https://files.pythonhosted.org/packages/d2/23/408243171aa9aaba178d3e2559159c24c1171a641aa83b67bdd3394ead8e/idna-3.15-py3-none-any.whl", hash = "sha256:048adeaf8c2d788c40fee287673ccaa74c24ffd8dcf09ffa555a2fbb59f10ac8", size = 72340,
  • Network accessline 168
    name = "iniconfig" version = "2.3.0" source = { registry = "https://pypi.org/simple" }
  • Network accessline 169
    version = "2.3.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c7
  • Network accessline 170
    source = { registry = "https://pypi.org/simple" }
  • Network accessline 171
    sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20
  • Network accessline 172
    wheels = [     { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53
  • Network accessline 173
    { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 
  • Network accessline 177
    name = "packaging" version = "26.2" source = { registry = "https://pypi.org/simple" }
  • Network accessline 178
    version = "26.2" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/d7/f1/e7a6dd94a8d4a5626c03e4e99c87f241ba9e350cd9e6d75123f992427270/packaging-26.2.tar.gz", hash = "sha256:ff452ff5a3
  • Network accessline 179
    source = { registry = "https://pypi.org/simple" }
  • Network accessline 180
    sdist = { url = "https://files.pythonhosted.org/packages/d7/f1/e7a6dd94a8d4a5626c03e4e99c87f241ba9e350cd9e6d75123f992427270/packaging-26.2.tar.gz", hash = "sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661", size = 228
  • Network accessline 181
    wheels = [     { url = "https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0
  • Network accessline 182
    { url = "https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e", size = 1
  • Network accessline 186
    name = "patchright" version = "1.59.1" source = { registry = "https://pypi.org/simple" }
  • Network accessline 187
    version = "1.59.1" source = { registry = "https://pypi.org/simple" } dependencies = [
  • Network accessline 188
    source = { registry = "https://pypi.org/simple" }
  • Network accessline 192
    ] wheels = [     { url = "https://files.pythonhosted.org/packages/4d/1d/e6a4b7ff95c35617495a9b686cbf78a968f26ad51c91cef6b2a5eee88f3e/patchright-1.59.1-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:de2e0ea51a270e77ef6588bea1370510695cb94
  • Network accessline 193
    wheels = [     { url = "https://files.pythonhosted.org/packages/4d/1d/e6a4b7ff95c35617495a9b686cbf78a968f26ad51c91cef6b2a5eee88f3e/patchright-1.59.1-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:de2e0ea51a270e77ef6588bea1370510695cb94fe
  • Network accessline 194
    { url = "https://files.pythonhosted.org/packages/4d/1d/e6a4b7ff95c35617495a9b686cbf78a968f26ad51c91cef6b2a5eee88f3e/patchright-1.59.1-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:de2e0ea51a270e77ef6588bea1370510695cb94fe6ef848bc7e587d3
  • Network accessline 195
    { url = "https://files.pythonhosted.org/packages/de/55/0b4bb56c141f2906e212c5b31f21ba6107a98105240c173b54d72c74f480/patchright-1.59.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e93fe960714c39152ea3300b7a2c3882cb8d1f992f6120db53406b5590
  • Network accessline 196
    { url = "https://files.pythonhosted.org/packages/72/fc/98ad4f09613051b8c673701043ba6744a213175b01399e555b73de742006/patchright-1.59.1-py3-none-macosx_11_0_universal2.whl", hash = "sha256:bfaad3600817f271ccab34db9f33bb8148c649a157bad28b72709
  • Network accessline 197
    { url = "https://files.pythonhosted.org/packages/3b/cc/f62063e59db98b154d9faf79603164d548f5117c95acc9d2a8104df9607a/patchright-1.59.1-py3-none-manylinux1_x86_64.whl", hash = "sha256:f0a7ee31e56391a96cd81f9ac1db130e8166c6083b7f3fb3bc9ba19d80
  • Network accessline 198
    { url = "https://files.pythonhosted.org/packages/ac/74/2965635dd1d461243281e1774f78d865c2d1df24808cbe3b27a5ede64d7e/patchright-1.59.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69165d20308a045ddf1ad5124676252
  • Network accessline 199
    { url = "https://files.pythonhosted.org/packages/e8/c2/959acc3fd3d867af4e567bb5e0cc63d4b1ca17fe4b7f673b3eef52fbf287/patchright-1.59.1-py3-none-win32.whl", hash = "sha256:56d9f2f3325f7205dfe6d22abc0969378225cd58b6ce29e7a7e3526c1d78c160", siz
  • Network accessline 200
    { url = "https://files.pythonhosted.org/packages/19/b1/1e7a4844ed6bc6bd3653c6e708f614a2b27ac54875ebd0e9c7badf7d25b6/patchright-1.59.1-py3-none-win_amd64.whl", hash = "sha256:3af6515b6103aedd1cdd09be7fa08ac028a954c6687d73fdee92570ae580fe4c",
  • Network accessline 201
    { url = "https://files.pythonhosted.org/packages/10/95/b148a41c6a099cd3d9f11a0641e4f10d50141cb8dca052f75f64dc631634/patchright-1.59.1-py3-none-win_arm64.whl", hash = "sha256:e259fae74b59a89ee020703ba142b8b5dd81a08f1c95ee3cda92829026057092",
  • Network accessline 205
    name = "pluggy" version = "1.6.0" source = { registry = "https://pypi.org/simple" }
  • Network accessline 206
    version = "1.6.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b762
  • Network accessline 207
    source = { registry = "https://pypi.org/simple" }
  • Network accessline 208
    sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412
  • Network accessline 209
    wheels = [     { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd47
  • Network accessline 210
    { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 205
  • Network accessline 214
    name = "pyee" version = "13.0.1" source = { registry = "https://pypi.org/simple" }
  • Network accessline 215
    version = "13.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [
  • Network accessline 216
    source = { registry = "https://pypi.org/simple" }
  • Network accessline 218
    { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/8b/04/e7c1fe4dc78a6fdbfd6c337b1c3732ff543b8a397683ab38378447baa331/pyee-13.0.1.tar.gz", hash = "sha256:0b931f7c14535667ed4c7e0d531716368715e860b98877
  • Network accessline 219
    ] sdist = { url = "https://files.pythonhosted.org/packages/8b/04/e7c1fe4dc78a6fdbfd6c337b1c3732ff543b8a397683ab38378447baa331/pyee-13.0.1.tar.gz", hash = "sha256:0b931f7c14535667ed4c7e0d531716368715e860b988770fc7eb8578d1f67fc8", size = 3165
  • Network accessline 220
    sdist = { url = "https://files.pythonhosted.org/packages/8b/04/e7c1fe4dc78a6fdbfd6c337b1c3732ff543b8a397683ab38378447baa331/pyee-13.0.1.tar.gz", hash = "sha256:0b931f7c14535667ed4c7e0d531716368715e860b988770fc7eb8578d1f67fc8", size = 31655,
  • Network accessline 221
    wheels = [     { url = "https://files.pythonhosted.org/packages/a0/c4/b4d4827c93ef43c01f599ef31453ccc1c132b353284fc6c87d535c233129/pyee-13.0.1-py3-none-any.whl", hash = "sha256:af2f8fede4171ef667dfded53f96e2ed0d6e6bd7ee3bb46437f77e3b5768922
  • Network accessline 222
    { url = "https://files.pythonhosted.org/packages/a0/c4/b4d4827c93ef43c01f599ef31453ccc1c132b353284fc6c87d535c233129/pyee-13.0.1-py3-none-any.whl", hash = "sha256:af2f8fede4171ef667dfded53f96e2ed0d6e6bd7ee3bb46437f77e3b57689228", size = 1565
  • Network accessline 226
    name = "pygments" version = "2.20.0" source = { registry = "https://pypi.org/simple" }
  • Network accessline 227
    version = "2.20.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd0
  • Network accessline 228
    source = { registry = "https://pypi.org/simple" }
  • Network accessline 229
    sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 49
  • Network accessline 230
    wheels = [     { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946
  • Network accessline 231
    { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 
  • Network accessline 235
    name = "pytest" version = "9.0.3" source = { registry = "https://pypi.org/simple" }
  • Network accessline 236
    version = "9.0.3" source = { registry = "https://pypi.org/simple" } dependencies = [
  • Network accessline 237
    source = { registry = "https://pypi.org/simple" }
  • Network accessline 243
    { name = "pygments" }, ] sdist = { url = "https://files.pythonhosted.org/packages/7d/0d/549bd94f1a0a402dc8cf64563a117c0f3765662e2e668477624baeec44d5/pytest-9.0.3.tar.gz", hash = "sha256:b86ada508af81d19edeb213c681b1d48246c1a91d304c6c81a4276
  • Network accessline 244
    ] sdist = { url = "https://files.pythonhosted.org/packages/7d/0d/549bd94f1a0a402dc8cf64563a117c0f3765662e2e668477624baeec44d5/pytest-9.0.3.tar.gz", hash = "sha256:b86ada508af81d19edeb213c681b1d48246c1a91d304c6c81a427674c17eb91c", size = 157
  • Network accessline 245
    sdist = { url = "https://files.pythonhosted.org/packages/7d/0d/549bd94f1a0a402dc8cf64563a117c0f3765662e2e668477624baeec44d5/pytest-9.0.3.tar.gz", hash = "sha256:b86ada508af81d19edeb213c681b1d48246c1a91d304c6c81a427674c17eb91c", size = 15721
  • Network accessline 246
    wheels = [     { url = "https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl", hash = "sha256:2c5efc453d45394fdd706ade797c0a81091eccd1d6e4bccfcd476e2b8e0ab5
  • Network accessline 247
    { url = "https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl", hash = "sha256:2c5efc453d45394fdd706ade797c0a81091eccd1d6e4bccfcd476e2b8e0ab5d9", size = 375
  • Network accessline 278
    name = "typing-extensions" version = "4.15.0" source = { registry = "https://pypi.org/simple" }
  • Network accessline 279
    version = "4.15.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha25
  • Network accessline 280
    source = { registry = "https://pypi.org/simple" }
  • Network accessline 281
    sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", 
  • Network accessline 282
    wheels = [     { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883b
  • Network accessline 283
    { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548"
  • Network accessline 287
    name = "tzdata" version = "2026.2" source = { registry = "https://pypi.org/simple" }
  • Network accessline 288
    version = "2026.2" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/ba/19/1b9b0e29f30c6d35cb345486df41110984ea67ae69dddbc0e8a100999493/tzdata-2026.2.tar.gz", hash = "sha256:9173fde7d
  • Network accessline 289
    source = { registry = "https://pypi.org/simple" }
  • Network accessline 290
    sdist = { url = "https://files.pythonhosted.org/packages/ba/19/1b9b0e29f30c6d35cb345486df41110984ea67ae69dddbc0e8a100999493/tzdata-2026.2.tar.gz", hash = "sha256:9173fde7d80d9018e02a662e168e5a2d04f87c41ea174b139fbef642eda62d10", size = 1982
  • Network accessline 291
    wheels = [     { url = "https://files.pythonhosted.org/packages/ce/e4/dccd7f47c4b64213ac01ef921a1337ee6e30e8c6466046018326977efd95/tzdata-2026.2-py2.py3-none-any.whl", hash = "sha256:bbe9af844f658da81a5f95019480da3a89415801f6cc966806612cc71
  • Network accessline 292
    { url = "https://files.pythonhosted.org/packages/ce/e4/dccd7f47c4b64213ac01ef921a1337ee6e30e8c6466046018326977efd95/tzdata-2026.2-py2.py3-none-any.whl", hash = "sha256:bbe9af844f658da81a5f95019480da3a89415801f6cc966806612cc7169bffe7", size 

How the signals fit together

Facts from a static read of the files at the pinned commit. They describe what the code does, not why.

Some files could not be read; the facts below still hold.

Declared and executed: 2 facts
Signal confidence: 277 facts

and 227 more

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeNativeManifest .claude-plugin/marketplace.json.claude/skills/<skill-name>/
CodexNativeManifest AGENTS.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md skills/route-researcher/SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md skills/route-researcher/SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md skills/route-researcher/SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard SKILL.md skills/route-researcher/SKILL.md.opencode/skills/<skill-name>/
  • Native The repository ships a manifest, folder or frontmatter field for this agent.
  • Compatible A standard SKILL.md that this agent can read.
  • Unknown No evidence either way.

Derived automatically from paths, manifests and frontmatter. Not tested on each agent.