Every OpenSnow forecast, snow report, and Daily Snow post — plus powder scoring, storm tracking, and historical trends no other tool has.
The OpenSnow CLI puts the same hyper-local mountain forecasts trusted by millions of skiers directly into your terminal. Sync resort data to a local SQLite store, then score powder days, rank resorts, and track storms offline. The Daily Snow digest brings expert meteorologist forecasts to your terminal without opening a browser.
Created by @davemorin (Dave Morin).
The recommended path installs both the opensnow-pp-cli binary and the pp-opensnow agent skill (Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, and other agents supported by the upstream skills CLI) in one shot:
npx -y @mvanhorn/printing-press-library install opensnowFor CLI only (no skill):
npx -y @mvanhorn/printing-press-library install opensnow --cli-onlyFor skill only — installs the skill into the same agents as the default command above, but skips the CLI binary (use this to update or reinstall just the skill):
npx -y @mvanhorn/printing-press-library install opensnow --skill-onlyTo constrain the skill install to one or more specific agents (repeatable — agent names match the skills CLI):
npx -y @mvanhorn/printing-press-library install opensnow --agent claude-code
npx -y @mvanhorn/printing-press-library install opensnow --agent claude-code --agent codexIf npx isn't available (no Node, offline), install the CLI directly via Go (requires Go 1.26.4 or newer):
go install github.com/mvanhorn/printing-press-library/library/productivity/opensnow/cmd/opensnow-pp-cli@latestThis installs the CLI only — no skill.
Download a pre-built binary for your platform from the latest release. On macOS, clear the Gatekeeper quarantine: xattr -d com.apple.quarantine <binary>. On Unix, mark it executable: chmod +x <binary>.
Install the CLI binary first. The installer writes binaries to a per-user managed bin directory by default: $HOME/.local/bin on macOS/Linux and %LOCALAPPDATA%\Programs\PrintingPress\bin on Windows.
npx -y @mvanhorn/printing-press-library install opensnow --cli-onlyThen install the focused Hermes skill.
From the Hermes CLI:
hermes skills install mvanhorn/printing-press-library/cli-skills/pp-opensnow --forceInside a Hermes chat session:
/skills install mvanhorn/printing-press-library/cli-skills/pp-opensnow --forceRestart the Hermes session or gateway if the newly installed skill is not visible immediately.
Install both the CLI binary and the focused OpenClaw skill. The installer defaults binaries to a per-user bin directory ($HOME/.local/bin on macOS/Linux, %LOCALAPPDATA%\Programs\PrintingPress\bin on Windows):
npx -y @mvanhorn/printing-press-library install opensnow --agent openclawRestart the OpenClaw session or gateway if the newly installed skill is not visible immediately.
This CLI ships an MCPB bundle — Claude Desktop's standard format for one-click MCP extension installs (no JSON config required).
To install:
- Download the
.mcpbfor your platform from the latest release. - Double-click the
.mcpbfile. Claude Desktop opens and walks you through the install. - Fill in
OPENSNOW_API_KEYwhen Claude Desktop prompts you.
Requires Claude Desktop 1.0.0 or later. Pre-built bundles ship for macOS Apple Silicon (darwin-arm64) and Windows (amd64, arm64); for other platforms, use the manual config below.
Manual JSON config (advanced)
If you can't use the MCPB bundle (older Claude Desktop, unsupported platform), install the MCP binary and configure it manually.
go install github.com/mvanhorn/printing-press-library/library/other/opensnow/cmd/opensnow-pp-mcp@latestAdd to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"opensnow": {
"command": "opensnow-pp-mcp",
"env": {
"OPENSNOW_API_KEY": "<your-key>"
}
}
}
}OpenSnow API access is partnership-only. Set your API key with opensnow-pp-cli auth set-token <key>. The key is stored locally and passed as a query parameter on every request. Access level 5 covers point-based forecasts; level 10 unlocks named locations, snow reports, and Daily Snow.
Alternatively, set the environment variable:
export OPENSNOW_API_KEY=your-api-keyContact hello@opensnow.com to request API partnership access.
# Set your OpenSnow API key (partnership access required)
opensnow-pp-cli auth set-token YOUR_API_KEY
# Verify API key is valid and API is reachable
opensnow-pp-cli doctor
# Get the 5-day forecast for Alta
opensnow-pp-cli forecast get-detail alta
# Get Steamboat's latest snow report
opensnow-pp-cli snow-report steamboat
# Read the Colorado Daily Snow forecast
opensnow-pp-cli daily-reads content get-daily-snow colorado
# Save your favorite resorts
opensnow-pp-cli favorites add alta steamboat telluride
# See your dashboard
opensnow-pp-cli dashboardThese capabilities aren't available in any other tool for this API.
-
powder-score— Rate upcoming days 1-10 for powder quality by combining forecast snow totals, wind, temperature, and historical averagesWhen an agent needs to recommend the single best day to ski this week, this command gives a scored ranking instead of raw forecast numbers
opensnow-pp-cli powder-score alta --days 5 --agent
-
powder-rank— Rank all synced resorts by powder potential, combining expected snowfall, base depth, and terrain opennessWhen an agent needs to answer 'where should I ski this weekend in Colorado', this gives a ranked list with scores
opensnow-pp-cli powder-rank --slugs vail,aspen,telluride --agent
-
storm-track— Show storm progression — when snow starts, peaks, and ends — by correlating rolling hourly forecasts over timeWhen planning travel around a storm, this shows exactly when to arrive and when the storm window closes
opensnow-pp-cli storm-track telluride --agent
-
overnight— Check the semi-daily forecast for the overnight period at favorited resorts — the powder hunter's morning ritualThe first question every skier asks: 'How much snow fell overnight?' This answers it for all favorites in one call
opensnow-pp-cli overnight --agent
-
dashboard— One-command view of all favorited locations with current temp, 24h snow, 5-day total, and operating statusReplaces opening the OpenSnow app — one command shows everything an agent needs about the user's preferred mountains
opensnow-pp-cli dashboard --agent
-
diff— Compare current snow report against the last-synced version to see what changed: new snow, lifts opened or closed, status changesAgents monitoring resort conditions can detect meaningful changes without parsing raw reports
opensnow-pp-cli diff alta --agent
-
history— Show snowfall trends, season totals vs averages, and base depth progression from cached report snapshotsWhen planning a trip weeks out, historical context shows whether the mountain is trending up or down
opensnow-pp-cli history steamboat --days 30 --agent
-
digest— Pull all Daily Snow posts for favorited regions, strip HTML to clean text, and show a summary digestExpert forecasts from OpenSnow meteorologists, rendered for agents and terminals instead of requiring a browser
opensnow-pp-cli digest --region colorado --agent
| Command | Description |
|---|---|
forecast get-by-point |
Forecast for any lng,lat coordinate and elevation (access level 5) |
forecast get-detail |
5-day forecast for a named location with current, hourly, and daily periods (access level 10) |
forecast get-snow-detail |
5-day day + night snowfall forecast split into 6am-6pm and 6pm-6am segments (access level 10) |
| Command | Description |
|---|---|
snow-report |
Latest resort-reported snowfall, base depth, operating status, and conditions (access level 10) |
| Command | Description |
|---|---|
daily-reads content get-daily-snow |
Most recent Daily Snow post by an OpenSnow meteorologist for a region |
| Command | Description |
|---|---|
powder-score |
Rate upcoming days 1-10 for powder quality at a resort |
powder-rank |
Rank multiple resorts by best powder day potential |
storm-track |
Track storm progression: start, peak, and end times |
overnight |
Overnight snow forecast for all favorited resorts |
| Command | Description |
|---|---|
dashboard |
Summary view of all favorites: temp, snow, base depth, status |
compare |
Side-by-side metrics for multiple resorts |
diff |
What changed since last sync: new snow, lift status |
history |
Snowfall trends and base depth from cached snapshots |
digest |
Daily Snow posts for favorite regions as clean text |
| Command | Description |
|---|---|
doctor |
Check API key validity and connectivity |
auth set-token |
Save API key to config |
auth status |
Show current authentication status |
sync |
Sync resort data to local SQLite for offline use |
favorites add |
Add resort slugs to favorites list |
favorites list |
List all favorited resorts |
favorites remove |
Remove a resort from favorites |
# Human-readable table (default in terminal, JSON when piped)
opensnow-pp-cli snow-report alta
# JSON for scripting and agents
opensnow-pp-cli snow-report alta --json
# Filter to specific fields
opensnow-pp-cli snow-report alta --json --select status_display,precip_snow_24h,base_depth
# CSV for spreadsheets
opensnow-pp-cli snow-report alta --csv
# Dry run — show the request without sending
opensnow-pp-cli snow-report alta --dry-run
# Agent mode — JSON + compact + no prompts in one flag
opensnow-pp-cli snow-report alta --agentThis CLI is designed for AI agent consumption:
- Non-interactive - never prompts, every input is a flag
- Pipeable -
--jsonoutput to stdout, errors to stderr - Filterable -
--select id,namereturns only fields you need - Previewable -
--dry-runshows the request without sending - Read-only by default - this CLI does not create, update, delete, publish, send, or mutate remote resources
- Offline-friendly - sync/search commands can use the local SQLite store when available
- Agent-safe by default - no colors or formatting unless
--human-friendlyis set
Exit codes: 0 success, 2 usage error, 3 not found, 4 auth error, 5 API error, 7 rate limited, 10 config error.
# Morning powder check — what fell overnight at all favorites
opensnow-pp-cli overnight
# Best powder day this week at Alta
opensnow-pp-cli powder-score alta --days 5
# Rank Colorado resorts for this weekend
opensnow-pp-cli powder-rank --slugs vail,aspen,telluride,steamboat
# Is a storm coming to Telluride?
opensnow-pp-cli storm-track telluride
# Side-by-side comparison of Vail vs Aspen vs Breckenridge
opensnow-pp-cli compare vail aspen breckenridge
# What changed at Alta since last check?
opensnow-pp-cli diff alta
# Read the Colorado Daily Snow expert forecast
opensnow-pp-cli daily-reads content get-daily-snow colorado
# Get a forecast for an exact GPS coordinate
opensnow-pp-cli forecast get-by-point -111.5838,40.5884 --elev 8530
# Show day + night snowfall detail for Steamboat
opensnow-pp-cli forecast get-snow-detail steamboat
# Sync data locally for offline use
opensnow-pp-cli sync
# Snowfall trends over the last month
opensnow-pp-cli history steamboat --days 30
# Pipeline: get Alta forecast as JSON, extract snow totals
opensnow-pp-cli forecast get-detail alta --json --select precip_snow
# Agent workflow: dashboard for all favorites as compact JSON
opensnow-pp-cli dashboard --agentopensnow-pp-cli doctorVerifies configuration, credentials, and connectivity to the OpenSnow API. Reports API key status, access level, and reachability.
Config file: ~/.config/opensnow-pp-cli/config.toml
Environment variables:
| Name | Required | Description |
|---|---|---|
OPENSNOW_API_KEY |
Yes | OpenSnow API key (partnership access) |
OPENSNOW_BASE_URL |
No | Override API base URL (default: https://api.opensnow.com) |
OPENSNOW_CONFIG |
No | Override config file path |
Authentication errors (exit code 4)
- Run
opensnow-pp-cli doctorto check credentials - Verify the environment variable is set:
echo $OPENSNOW_API_KEY - Set your key:
opensnow-pp-cli auth set-token <key>
Not found errors (exit code 3)
- Check the resort slug is correct (case-sensitive)
- Try common slugs: alta, steamboat, vail, aspen, telluride, aspenhighlands
- 401 Unauthorized on every request — Run
opensnow-pp-cli auth set-token <key>— the API key must be set before any request - 403 Forbidden on /forecast/detail — Your API key has access level 5 — named-location endpoints require level 10. Contact hello@opensnow.com to upgrade.
- Empty snow report (all nulls) — Resort may be closed for the season. Check status_display field — 'Closed' or 'Summer Operations' means no active snow data.
- No results for a location slug — Slugs are case-sensitive and specific. Try common names: alta, steamboat, aspenhighlands. Email hello@opensnow.com for the full slug list.
This CLI was built by studying these projects and resources:
- jwise/snow — Python (15 stars)
- meccaLeccaHi/snow_scraper — Python (8 stars)
Generated by CLI Printing Press