weather‑skills.org 32 skills MIT license github

A curated skill library for weather and climate data

Let your AI assistant fetch, transform, and visualize weather data — with provenance you can audit.

Curated, standards-compliant Agent Skills that run in any AI environment with a code-execution runtime and uv. Initiated by Rhiza Research. A community working group will steward the catalog.

artifact record
artifact
weekly.png
produced by
ecmwf-fetch → aggregate-temporal → plot
provenance
weather_skills_history — append-only JSON chain
standards
CF conventions · Zarr v3

Stamped on every envelope Zarr and plot PNG.

01

See it run

From a plain-language request, the agent picks and composes skills. This is a real session, replayed: resolve Senegal's bounding box → fetch IMERG → clip to the region → aggregate to weekly totals → plot — then a follow-up adds The Gambia by merging the mask, no re-fetch needed.

agent session
02

Standards and review

Three mechanisms back the catalog: reviewed contributions, open standards, and auditable provenance.

Reviewed contributions

Every skill enters the catalog through a pull request reviewed against the contribution guidelines and validated by CI checks. A working group of weather and climate data practitioners will oversee a formal submission and review process.

Open standards

Skills read and write CF-compliant Zarr stores. The CF conventions themselves are the contract — not a repo-specific subset — so producers must emit valid CF and consumers must read any valid CF representation of the envelope's canonical shapes, including non-standard model calendars.

Auditable provenance

Every zarr-writing skill appends to weather_skills_history, an append-only JSON chain recording the skill, its version, its arguments, and a hash of its input. Plot PNGs embed the same chain in their metadata, and the provenance skill renders any chain as a human-readable lineage, the raw JSON, or a runnable reproduction script.

03

Runs anywhere

Skills are plain Python scripts whose inline dependency blocks are resolved by uv run --script on each invocation, so any AI environment with a code-execution runtime can invoke them. The skills live at github.com/rhiza-research/forecasting-skills; pick the install path that matches your environment.

As a CLI tool

For ad-hoc command-line use (no agent involved), install the skills as a single forecasting-skills binary:

# One-shot, no install — list available skills
uvx --from git+https://github.com/rhiza-research/forecasting-skills forecasting-skills

# Run one
uvx --from git+https://github.com/rhiza-research/forecasting-skills forecasting-skills <skill> [args]

Or install once and invoke directly:

uv tool install git+https://github.com/rhiza-research/forecasting-skills
forecasting-skills                          # list
forecasting-skills <skill> [args]           # run one

As an agent skill set

For use by an LLM agent, install the SKILL.md files into your project with skillkit:

# List what skillkit discovers in the repo
npx skillkit install rhiza-research/forecasting-skills --list

# Install all skills to the current project
npx skillkit install rhiza-research/forecasting-skills --all --yes

# Install just a subset
npx skillkit install rhiza-research/forecasting-skills --skill=ecmwf-fetch

As a plugin

For Claude Code, install the plugin from the in-repo marketplace:

claude plugin marketplace add rhiza-research/forecasting-skills
claude plugin install rhiza-forecasting@weather-skills
04

Pipeline and envelope

Pipelines chain three kinds of skills: fetchers pull data from a source and write a standard envelope, transforms operate on any envelope, and visualization skills render the result. A fourth group, agent capabilities, supports pipelines without producing an envelope — resolving a region name to a bounding box or composing results into an email report. A user states the goal in natural language and the agent picks and composes skills from the set.

  1. fetch

    source → envelope

    • arco-era5-fetch
    • chirps-fetch
    • cmip6-fetch
    • +8 more
  2. transform

    envelope → envelope

    • aggregate-temporal
    • clip-region
    • coarsen
    • +10 more
  3. visualize

    envelope → PNG

    • plot
    • plot-compare
    • plot-mediogram
    • +1 more

Example — a forecast for one country fetched, aggregated to weekly totals, and plotted; satellite observations clipped to the same bbox:

# Resolve the country bbox once, reuse it across the fetch and the clip.
KENYA_BBOX=$(forecasting-skills resolve-region KEN)

forecasting-skills ecmwf-fetch \
    --date 2026-02-13 \
    --bbox "$KENYA_BBOX" \
    --output /tmp/ecmwf.zarr
forecasting-skills aggregate-temporal \
    --input /tmp/ecmwf.zarr \
    --period weekly \
    --method sum \
    --output /tmp/ecmwf_weekly.zarr
forecasting-skills plot \
    --input /tmp/ecmwf_weekly.zarr \
    --variable tp \
    --output /tmp/weekly.png

forecasting-skills imerg-fetch \
    --start 2025-12-24 \
    --end 2026-02-13 \
    --output /tmp/imerg.zarr
forecasting-skills clip-region \
    --input /tmp/imerg.zarr \
    --bbox "$KENYA_BBOX" \
    --output /tmp/imerg_kenya.zarr

The weather-skills envelope is a CF-compliant Zarr v3 store with two canonical shapes. Consumers rely only on dimensions, coordinates, data variables, and weather_skills_* attributes — never on per-variable codec encoding — which keeps skills independent across library versions. The full contract is documented in ENVELOPE.md.

Gridded envelope

(number?, step|time,
 latitude, longitude)

forecasts, satellite grids, reanalyses

Station envelope

(time, station_id)
latitude(station_id)
longitude(station_id)

in-situ station observations

05

Skill catalog

Generated from each skill's SKILL.md. Entries marked requires credentials read API credentials from environment variables; each skill's compatibility notes name the specific variables.

Fetchers ingress — source → envelope

arco-era5-fetch
Fetch ARCO-ERA5 reanalysis (temperature, wind, precipitation, pressure, and more) for a date range and region from the public, credential-free Google Cloud Zarr store, and write a weather-skills envelope Zarr. Use when a task needs multi-variable gridded reanalysis ground truth for comparison, verification, or downstream clipping/aggregation/plotting.
chirps-fetch
Fetch CHIRPS precipitation observations for a date range — the validated final product back to 1998, with a preliminary fallback for very recent days — and write a weather-skills envelope Zarr. Use when a task needs CHIRPS rainfall, recent or historical, e.g. to compare against a forecast or station data, or to build a reference period.
cmip6-fetch
Fetch a CMIP6 climate-model projection (e.g. temperature, precipitation) for a date range and region from the public, credential-free Pangeo Google Cloud catalog, and write a weather-skills envelope Zarr. Use when a task needs climate-projection grids (historical or future scenario) for downstream clipping, aggregation, comparison, or plotting.
dynamical-fetch
Fetch a dataset from the dynamical.org open weather catalog (GFS, GEFS, ECMWF IFS-ENS, AIFS, ICON-EU, MRMS, and their analyses) and write a weather-skills envelope Zarr. Use when a task needs credential-free forecast or analysis grids for downstream clipping, aggregation, comparison, or plotting.
ecmwf-fetch requires credentials
Fetch an ECMWF S2S precipitation forecast (control + perturbed ensemble) for a date and bbox from the ECMWF Data Stores (ECDS), writing a weather-skills envelope Zarr. Use when a task needs raw S2S forecast precipitation for downstream aggregation, clipping, downscaling, or plotting. To fetch over a country, get its bbox from the resolve-region skill first.
ghcn-daily-fetch
Fetch NOAA GHCN-Daily global in-situ station observations (precipitation, max/min/avg temperature) for a date range and region, and write a station-schema weather-skills envelope Zarr. Use when a task needs credential-free worldwide daily station data, e.g. to compare against gridded satellite, reanalysis, or forecast data.
imerg-fetch requires credentials
Fetch live IMERG satellite precipitation for a date range and write a weather-skills envelope Zarr. Use when a task needs recent half-hourly/daily IMERG rainfall, e.g. for station-vs-satellite comparison or verification.
oisst-fetch
Fetch NOAA OISST v2.1 daily sea-surface temperature for a date range and region from NOAA PSL's public OPeNDAP server, and write a weather-skills envelope Zarr. Use when a task needs credential-free gridded SST observations, e.g. for ocean analysis or comparison against forecasts/reanalysis.
openaq-fetch requires credentials
Fetch OpenAQ air-quality station observations (PM2.5, PM10, NO2, O3, SO2, CO) for a date range and region, and write a station-schema weather-skills envelope Zarr. Use when a task needs in-situ air-quality and atmospheric-composition data, e.g. to compare against gridded model output.
smap-fetch requires credentials
Fetch NASA SMAP SPL3SMP_E daily 9 km volumetric soil moisture for a bounded region and short date range via Earthdata, and write a fully CF-1.13 weather-skills envelope Zarr. Use when a task needs gridded land-surface soil-moisture observations, e.g. for drought or agricultural analysis, or comparison against models.
tahmo-fetch requires credentials
Fetch TAHMO station observations for one or more African countries and write a weather-skills envelope Zarr (station schema). Use when a task needs in-situ station rainfall/temperature/humidity/pressure, e.g. to compare against gridded satellite or forecast data.

Transforms envelope → envelope

aggregate-temporal
Roll up a weather-skills envelope Zarr along its time axis (or forecast step axis) into fixed windows (daily, weekly, dekadal, monthly) with a chosen reducer. Use whenever any dataset needs to be resampled to a canonical aggregation period before plotting or comparison.
clip-region
Spatially subset a gridded weather-skills envelope Zarr to an explicit lat/lon bbox. Use when you need to restrict any dataset (forecast, satellite, reanalysis) to a custom bounding box before downstream aggregation or plotting. To clip to a country, get its bbox from the resolve-region skill first.
coarsen
Coarsen or align a weather-skills envelope Zarr by linearly interpolating it onto a target grid defined by a resolution and an offset (target points at offset + k*resolution). Geometry-only — it changes grid spacing/alignment and adds no information. Use to make a grid coarser or to put two datasets on the same grid for comparison.
concat
Concatenate two or more weather-skills envelope Zarr stores along a named dimension, optionally assigning coordinate values to the new axis. Use when combining ensemble members, stitching time windows, or merging per-country fetches into a single dataset.
convert-calendar
Convert a weather-skills envelope Zarr's time axis to a target CF calendar by wrapping xarray's Dataset.convert_calendar. Use to align two datasets onto a common calendar before comparison — e.g. converting a model-calendar forecast (noleap/360_day) to the standard calendar of observations. Converting to a standard calendar yields a datetime64 axis; converting to a model calendar yields a cftime axis. Dates not representable in the target calendar are dropped.
deaccumulate
Convert a cumulative-since-init forecast variable (e.g. ECMWF S2S tp) along its step axis into per-step differences, so each step value represents the period since the previous step rather than the accumulation since initialization.
difference
Subtract one weather-skills envelope Zarr from another (A − B) with xarray inner-join alignment and broadcasting — e.g. anomalies as a field minus its baseline mean, or a scenario-minus-historical change map. Use whenever two envelopes must be compared cell-by-cell as a difference field.
downscale
Downscale a weather-skills envelope Zarr onto a finer-or-equal grid, adding information via a chosen --algorithm (linear-interpolation or q-q empirical quantile mapping). The target is given by an integer factor, a target resolution, or a reference dataset's grid. Equal resolution is accepted as a no-op on geometry (q-q still applies its mapping). Use when a task needs higher spatial resolution; to make a grid coarser, use the coarsen skill.
reduce
Collapse one or more named dimensions of a weather-skills envelope Zarr with a statistic (mean, std, min, max, sum, median) — e.g. ensemble spread as the std across number, model disagreement as the std across a model dim, or a time-mean baseline for anomalies. Use whenever a dataset needs a statistical reduction along a named dimension.
rename
Rename one data variable in a weather-skills envelope Zarr to a new name, writing a new envelope. The renamed variable keeps its values and attributes; all other variables, coordinates, and dimensions pass through unchanged.
select
Select entries along one named dimension of a weather-skills envelope Zarr, by integer position or by coordinate value. A single selection collapses the dimension and drops the coordinates it leaves scalar, so outputs from different sources are ready to concat — e.g. pick the same forecast week from several model envelopes before merging them along a new model dim.
step-to-time
Realize a forecast envelope's step lead-time axis as wall-clock valid times (time = init + step), replacing the step dim with a time dim. Use it to compare a forecast against observations — e.g. before plot-compare, plot-timeseries, or difference against a time-based dataset.
unit-convert
Convert one data variable in a weather-skills envelope Zarr to a target units string (e.g. a precipitation flux kg m-2 s-1 to a depth rate mm/day), updating the variable's values and its units attribute.

Visualization envelope → PNG

plot
Render a 2D heatmap or 1D time series PNG from any gridded or station weather-skills envelope Zarr. Use when you need to visualize a single dataset as a map or as a time/step profile.
plot-compare
Render a side-by-side multi-panel comparison PNG of two weather-skills envelope Zarr stores (gridded-vs-gridded or station-vs-gridded). Use for sat-vs-station validation, model-vs-obs comparison, or cross-source QC.
plot-mediogram
Render an ECMWF-style mediogram PNG comparing a forecast ensemble against an m-climate (historical) ensemble at a single lat/lon. Two-layer boxplots per time step show an extremes box underneath (p0–p100 whiskers, p10–p90 box, p50 median) with a wider p25–p75 IQR box overlaid on top, whose visible black caps mark the IQR edges.
plot-timeseries
Render a single PNG with one 1D trace per input Zarr overlaid on a shared time axis. Use when you want to compare a variable across multiple weather-skills envelope Zarrs as line traces. Inputs whose variable still has non-time dims after selection must list those dims via repeated --reduce flags; no silent averaging.

Agent capabilities no envelope output — capabilities the agent uses alongside pipelines

email-report
Assemble an email message with optional file attachments and write it to disk as a standards-compliant .eml file. Mocks actual SMTP delivery — does not send. Use at the end of a pipeline to materialize what would have been sent.
provenance
Inspect the weather_skills_history provenance chain stamped on a weather-skills artifact (an envelope Zarr or a plot PNG) and render it as a human-readable lineage, the raw JSON chain, or a runnable reproduction script. Use when you need to answer "how did this file come to exist, and how do I regenerate it?" — especially for a PNG, whose chain lives in binary tEXt chunks an editor can't open.
resolve-region
Resolve an ISO 3166-1 alpha-3 country code to a lat/lon bbox (and optionally a boundary polygon GeoJSON) from a bundled Natural Earth 1:110m admin-0 dataset. Use when you need to turn a country into a --bbox N/W/S/E value (or a polygon mask) for clip-region, ecmwf-fetch, plot, or plot-compare.
submit-feedback
Build a prefilled GitHub new-issue link the user clicks to file feedback under their own GitHub account. You supply the title and body; the skill URL-encodes them and checks that the link fits GitHub's length limit. Use when a user wants to report a bug or suggestion about the skills.
06

Governance

The library will be overseen by a working group of weather and climate data practitioners. A submission and review process will define how new skills are proposed, tested against the envelope contract, and admitted to the catalog.

Until that process is in place, contributions go through the repository directly: open an issue or a pull request.

An interactive way to try the skills from this site is planned.

Submit a skill →