{"id":32477071,"url":"https://github.com/dreamiurg/peakbagger-cli","last_synced_at":"2026-07-09T03:31:25.572Z","repository":{"id":320075979,"uuid":"1080003777","full_name":"dreamiurg/peakbagger-cli","owner":"dreamiurg","description":"Search, explore, and analyze mountain peak data from PeakBagger.com in your terminal","archived":false,"fork":false,"pushed_at":"2026-07-02T03:10:43.000Z","size":779,"stargazers_count":4,"open_issues_count":0,"forks_count":2,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-02T04:10:20.455Z","etag":null,"topics":["cli","climbing","hiking","mountains","peakbagging","python","statistics"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dreamiurg.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"ko_fi":"Q3N622FHZM"}},"created_at":"2025-10-20T18:10:59.000Z","updated_at":"2026-07-02T03:10:46.000Z","dependencies_parsed_at":"2025-10-21T21:07:36.523Z","dependency_job_id":"3083a730-b6e6-4e0a-8c76-16a75c3cd4eb","html_url":"https://github.com/dreamiurg/peakbagger-cli","commit_stats":null,"previous_names":["dreamiurg/peakbagger-cli"],"tags_count":28,"template":false,"template_full_name":null,"purl":"pkg:github/dreamiurg/peakbagger-cli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dreamiurg%2Fpeakbagger-cli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dreamiurg%2Fpeakbagger-cli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dreamiurg%2Fpeakbagger-cli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dreamiurg%2Fpeakbagger-cli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dreamiurg","download_url":"https://codeload.github.com/dreamiurg/peakbagger-cli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dreamiurg%2Fpeakbagger-cli/sbom","scorecard":{"id":1245459,"data":{"date":"2026-04-01T19:08:36Z","repo":{"name":"github.com/dreamiurg/peakbagger-cli","commit":"5fb7cc9217a14f376e1e282c917c5de02068bb9b"},"scorecard":{"version":"v5.3.0","commit":"c22063e786c11f9dd714d777a687ff7c4599b600"},"score":7.6,"checks":[{"name":"Code-Review","score":1,"reason":"Found 3/28 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#binary-artifacts"}},{"name":"Maintained","score":8,"reason":"10 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 8","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#maintained"}},{"name":"Dependency-Update-Tool","score":10,"reason":"update tool detected","details":["Info: detected update tool: Dependabot: .github/dependabot.yml:1"],"documentation":{"short":"Determines if the project uses a dependency update tool.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#dependency-update-tool"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#security-policy"}},{"name":"Token-Permissions","score":10,"reason":"GitHub workflow tokens follow principle of least privilege","details":["Info: jobLevel 'actions' permission set to 'read': .github/workflows/codeql.yml:22","Info: jobLevel 'contents' permission set to 'read': .github/workflows/codeql.yml:23","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/dependabot-auto-merge.yml:12","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/release.yml:13","Info: jobLevel 'contents' permission set to 'read': .github/workflows/scorecard.yml:25","Info: jobLevel 'actions' permission set to 'read': .github/workflows/scorecard.yml:26","Info: topLevel 'contents' permission set to 'read': .github/workflows/ci.yml:24","Info: topLevel permissions set to 'read-all': .github/workflows/codeql.yml:13","Info: found token with 'none' permissions: .github/workflows/dependabot-auto-merge.yml:1","Info: topLevel 'contents' permission set to 'read': .github/workflows/dependency-review.yml:6","Info: found token with 'none' permissions: .github/workflows/release.yml:1","Info: topLevel permissions set to 'read-all': .github/workflows/scorecard.yml:15"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":8,"reason":"dependency not pinned by hash detected -- score normalized to 8","details":["Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:133","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:143","Info:  20 out of  20 GitHub-owned GitHubAction dependencies pinned","Info:  11 out of  11 third-party GitHubAction dependencies pinned","Info:   0 out of   2 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#pinned-dependencies"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#vulnerabilities"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#cii-best-practices"}},{"name":"SAST","score":8,"reason":"SAST tool detected but not run on all commits","details":["Info: SAST configuration detected: CodeQL","Warn: 15 commits out of 26 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#sast"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#signed-releases"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/release.yml:24"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#packaging"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#fuzzing"}},{"name":"Branch-Protection","score":4,"reason":"branch protection is not maximal on development and all release branches","details":["Info: 'allow deletion' disabled on branch 'main'","Info: 'force pushes' disabled on branch 'main'","Warn: 'branch protection settings apply to administrators' is disabled on branch 'main'","Info: 'stale review dismissal' is required to merge on branch 'main'","Warn: branch 'main' does not require approvers","Warn: codeowners review is not required on branch 'main'","Warn: 'last push approval' is disabled on branch 'main'","Info: 'up-to-date branches' is required to merge on branch 'main'","Info: status check found to merge onto on branch 'main'","Info: PRs are required in order to make changes on branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#branch-protection"}},{"name":"Contributors","score":6,"reason":"project has 2 contributing companies or organizations -- score normalized to 6","details":["Info: found contributions from: co-founder \u0026 cto, semantic-release"],"documentation":{"short":"Determines if the project has a set of contributors from multiple organizations (e.g., companies).","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#contributors"}},{"name":"CI-Tests","score":10,"reason":"26 out of 26 merged PRs checked by a CI test -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project runs tests before pull requests are merged.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#ci-tests"}}]},"last_synced_at":"2026-04-02T07:54:12.264Z","repository_id":320075979,"created_at":"2026-04-02T07:54:12.265Z","updated_at":"2026-04-02T07:54:12.265Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35286002,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-09T02:00:07.329Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","climbing","hiking","mountains","peakbagging","python","statistics"],"created_at":"2025-10-26T22:49:39.320Z","updated_at":"2026-07-09T03:31:25.566Z","avatar_url":"https://github.com/dreamiurg.png","language":"Python","funding_links":["https://ko-fi.com/Q3N622FHZM","https://ko-fi.com/Q3N622FHZM'"],"categories":[],"sub_categories":[],"readme":"# peakbagger-cli\n\n[![PyPI](https://img.shields.io/pypi/v/peakbagger.svg)](https://pypi.org/project/peakbagger/)\n\nA command-line interface for searching and retrieving mountain peak data from [PeakBagger.com](https://www.peakbagger.com).\n\n\u003e **Other projects you might like:** [PNW Climb Planner](https://dreamiurg.net/pnw-climb-planner.html) · [mountaineers-mcp](https://github.com/dreamiurg/mountaineers-mcp) · [mountaineers-assistant](https://github.com/dreamiurg/mountaineers-assistant) · [claude-mountaineering-skills](https://github.com/dreamiurg/claude-mountaineering-skills)\n\n\u003ca href='https://ko-fi.com/Q3N622FHZM' target='_blank'\u003e\u003cimg height='36' style='border:0px;height:36px;' src='https://storage.ko-fi.com/cdn/kofi5.png?v=6' border='0' alt='Buy Me a Coffee at ko-fi.com' /\u003e\u003c/a\u003e\n\n## Features\n\n- 🔍 **Search peaks** by name with instant results\n- 📊 **Detailed peak info** including elevation, prominence, isolation, and location\n- 📈 **Ascent statistics** - analyze climbing activity, seasonal patterns, and trip reports\n- 🎨 **Beautiful output** with formatted tables and colors\n- 🤖 **JSON output** for automation and scripting\n- 🛡️ **Respectful scraping** with configurable rate limiting\n\n\u003e **For contributors**: See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup and guidelines.\n\n## Installation\n\n### Using uvx (Recommended)\n\nRun directly without installation:\n\n```bash\nuvx peakbagger peak search \"Mount Rainier\"\nuvx peakbagger peak show 2296\n```\n\n### From PyPI\n\n```bash\npip install peakbagger\n```\n\n### Cloudflare bypass (optional)\n\nPeakBagger.com sits behind a Cloudflare challenge that the default HTTP client\ncannot always pass. If you hit a `403`, install the `browser` extra, which adds a\nstealth-browser fallback (it briefly opens a real Chrome window to clear the\nchallenge, then caches the result):\n\n```bash\npip install 'peakbagger[browser]'   # requires Google Chrome installed\n```\n\n## Usage\n\n### Search for peaks\n\n```bash\npeakbagger peak search \"Mount Rainier\"\npeakbagger peak search \"Denali\" --format json\npeakbagger peak search \"Whitney\" --full  # Fetch full details for all results\n```\n\n### Get peak details\n\n```bash\npeakbagger peak show 2296  # Mount Rainier\npeakbagger peak show 2296 --format json\n```\n\nOutput includes elevation, prominence, coordinates, routes, and peak lists.\n\n### List peak ascents\n\n```bash\npeakbagger peak ascents 1798  # Mount Pilchuck\npeakbagger peak ascents 1798 --within 1y  # Last year only\npeakbagger peak ascents 1798 --with-gpx  # Only ascents with GPS tracks\npeakbagger peak ascents 1798 --with-tr   # Only with trip reports\npeakbagger peak ascents 1798 --limit 50  # First 50 ascents\n```\n\nFilters: `--after DATE`, `--before DATE`, `--within PERIOD` (e.g., `3m`, `1y`, `10d`)\n\n### Analyze ascent statistics\n\n```bash\npeakbagger peak stats 1798\npeakbagger peak stats 1798 --within 5y\npeakbagger peak stats 1798 --reference-date 2024-07-15 --seasonal-window 30\n```\n\nShows temporal breakdown, seasonal patterns, and monthly distribution.\n\n### Get ascent details\n\n```bash\npeakbagger ascent show 12963\npeakbagger ascent show 12963 --format json\n```\n\nIncludes trip reports and route information.\n\n### Get trip reports for a peak\n\n```bash\npeakbagger trip-reports 1798  # Mount Pilchuck\npeakbagger trip-reports 1798 --limit 5 --min-words 100\npeakbagger trip-reports 1798 --within 1y --format json\n```\n\nFilters: `--after DATE`, `--before DATE`, `--within PERIOD` (e.g., `3m`, `1y`, `10d`)\n\n## Examples\n\n### Automation with jq\n\n```bash\n# Extract specific fields\npeakbagger peak show 2296 --format json | jq '.elevation.feet'\npeakbagger peak search \"Rainier\" --format json | jq '.[].pid'\npeakbagger trip-reports 1798 --format json | jq '.[].text'\n\n# Find peaks on a specific list\npeakbagger peak show 2296 --format json | jq '.peak_lists[] | select(.list_name | contains(\"Bulger\"))'\n```\n\n### Batch processing\n\n```bash\nfor pid in 2296 271 163756; do\n  peakbagger peak show $pid --format json \u003e\u003e peaks.json\ndone\n```\n\n**More examples**: See [`examples/`](examples/) for complete scripts including CSV export and filtering.\n\n## Configuration\n\n### Logging\n\n```bash\n# Show HTTP requests\npeakbagger --verbose peak search \"Mount Rainier\"\npeakbagger -v peak show 2296\n\n# Show detailed debug info\npeakbagger --debug peak search \"Mount Rainier\"\n\n# Suppress all output except data\npeakbagger --quiet peak search \"Mount Rainier\"\npeakbagger -q peak show 2296\n```\n\nLogs go to stderr, so you can redirect separately:\n\n```bash\n# Save JSON output, show logs on screen\npeakbagger -v peak show 2296 --format json \u003e peak.json\n\n# Save output and logs separately\npeakbagger -v peak show 2296 --format json \u003e peak.json 2\u003e logs.txt\n```\n\n### Rate Limiting\n\nDefault: 2 seconds between requests. Adjust as needed:\n\n```bash\npeakbagger peak search \"Rainier\" --rate-limit 3.0  # 3 seconds\n```\n\n## Ethical Use\n\nUse this tool for **personal and educational purposes** only. Please:\n\n- ✅ Respect the default rate limits (or increase them)\n- ✅ Use for personal research and trip planning\n- ✅ Attribute data to PeakBagger.com\n- ❌ Don't mass-scrape or create bulk datasets\n- ❌ Don't use for commercial purposes without permission\n- ❌ Don't bypass rate limits to hammer the server\n\nPeakBagger.com provides this data as a free service to the climbing community. Use this tool responsibly.\n\n## Troubleshooting\n\n**Cloudflare blocks** (`403`): Install the stealth-browser fallback with\n`pip install 'peakbagger[browser]'` (requires Google Chrome). On the next `403`\nit opens a real Chrome window once to clear the challenge and caches the result.\n\n**No results**: Try different search terms or verify the peak ID is correct.\n\n**Installation issues**: Requires Python 3.12+ (`python3 --version`).\n\n## Data Source\n\nAll data is scraped from [PeakBagger.com](https://www.peakbagger.com). The site aggregates peak information from USGS,\nLIDAR data, and user contributions.\n\n**Limitations**: No official API (scrapes HTML), rate-limited for respectful use, data accuracy depends on\nPeakBagger.com.\n\n## Support\n\n- **Bug Reports \u0026 Features**: [GitHub Issues](https://github.com/dreamiurg/peakbagger-cli/issues)\n- **Questions**: [GitHub Discussions](https://github.com/dreamiurg/peakbagger-cli/discussions)\n\n## License\n\nMIT License - see [LICENSE](LICENSE) file for details.\n\n---\n\n## More from @dreamiurg\n\n- 🏔️ **[PNW Climb Planner](https://dreamiurg.net/pnw-climb-planner.html)** — pick a Washington peak, see the odds of a climbable day from 20 years of weather data, and line up backups ([the story behind it](https://dreamiurg.net/2026/07/01/picking-backup-climbs.html))\n- **[mountaineers-mcp](https://github.com/dreamiurg/mountaineers-mcp)** — mountaineers.org for AI assistants: activities, courses, routes, trip reports\n- **[mountaineers-assistant](https://github.com/dreamiurg/mountaineers-assistant)** — Chrome extension with your Mountaineers climbing stats, local-only\n- **[claude-mountaineering-skills](https://github.com/dreamiurg/claude-mountaineering-skills)** — automated route research: weather, hazards, and trip reports in one report\n- more at [dreamiurg.net/projects](https://dreamiurg.net/projects/)\n\nMade by [@dreamiurg](https://dreamiurg.net) in Seattle. If this project saved you time, you can [buy me a coffee](https://ko-fi.com/Q3N622FHZM) — appreciated, never expected.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdreamiurg%2Fpeakbagger-cli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdreamiurg%2Fpeakbagger-cli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdreamiurg%2Fpeakbagger-cli/lists"}