FahrenheitResearch

hermes-weather-plugin

Hermes Agent weather plugin with 13 tools for NWS data, radar, soundings, and ECAPE, backed by Rust for heavy computations.

42 stars2 forks3 open issuesPython

Repository last updated Apr 5, 2026

Overview

The Hermes Weather Plugin provides a comprehensive set of 13 meteorological tools for the Hermes Agent ecosystem. It offers real-time access to NWS observations, forecasts, alerts, model imagery, NEXRAD radar, soundings, and verified calculations like ECAPE. The plugin is designed for developers and meteorologists who need high-fidelity weather data integrated into an agent workflow.

Architecturally, the plugin is Python-first but offloads computationally intensive tasks—such as radar rendering, model image generation, and thermodynamic calculations—to Rust binaries. On first use, an automated bootstrap process compiles these Rust backends from source, caching them locally. This eliminates the need for manual builds and ensures a streamlined setup.

The plugin supports multiple radar backends (rustdar and nexrad), a wide range of NWP models, and includes tools for severe weather outlooks from the SPC. It is packaged for Hermes plugin autodiscovery via pip and requires only a Rust toolchain for the initial bootstrap.

Highlights

  • 13 tools for NWS forecasts, radar, alerts, and calculations
  • Rust-backed ECAPE, soundings, and parcel profiles
  • Automated bootstrap compiles Rust binaries on first use
  • Supports rustdar and nexrad radar backends
  • Verified model subsets for soundings and ECAPE

Features

Comprehensive Data Tools

Retrieve current conditions, 7-day forecasts, METAR, global weather via Open-Meteo, and SPC severe outlooks.

Model Imagery and Radar

Generate model field PNGs with wrf-rust and render NEXRAD Level 2 radar images with storm-analysis overlays.

Meteorological Calculations

Compute CAPE/CIN, LCL/LFC/EL, bulk shear, SRH, and ECAPE using Rust-backed metrust and ecape-rs.

Automated Bootstrap

On first use, the plugin compiles required Rust binaries (radar-render, run_case, nexrad-render-cli) into ~/.hermes/weather/bin.

Flexible Configuration

Override binary paths via environment variables like RADAR_RENDER_PATH or ECAPE_RS_RUNNER for prebuilt binaries.

Installation

Commands are reproduced exactly as published by the project maintainers. Always check the upstream repository for the current instructions.

Then start Hermes normally:
Hermes should auto-discover the plugin through the Python entry point.

## Runtime model

The plugin is Python-first, but several heavy paths use Rust binaries or Rust-backed Python packages.

- Data tools call NWS, SPC, METAR, and Open-Meteo directly from Python.
- `wx_model_image` uses `rusbie` for model access, tries the newer `wrf-rust` render path first, and falls back to `rustweather` where needed for GRIB model-map rendering.
- `wx_radar_image` and `wx_storm_image` use a radar backend binary.
- `wx_ecape` uses the `ecape-rs` runner.
- `wx_calc` and `wx_sounding` use `metrust` in-process.

If a required Rust binary is missing, the plugin will try to build it on first use into:

- `~/.hermes/weather/bin`

and cache downloaded source/build work under:

- `~/.hermes/weather/src`

## First-use bootstrap

The plugin can bootstrap these binaries automatically:

- `radar-render` from `rustdar`
- `run_case` from `ecape-rs`
- bundled `nexrad-render-cli`

This requires a working Rust toolchain (`cargo`, `rustc`) on the user machine unless they point the plugin at prebuilt binaries.

If you already have binaries installed, set optional overrides:
Windows PowerShell:
## Tools

### Data

| Tool | What it returns |
|------|-----------------|
| `wx_conditions` | Current observed conditions |
| `wx_forecast` | NWS 7-day or hourly forecast |
| `wx_alerts` | Active NWS alerts |
| `wx_metar` | Raw and decoded METAR |
| `wx_brief` | Conditions + short forecast + alert count |
| `wx_global` | Global weather via Open-Meteo |
| `wx_severe` | SPC categorical outlook + active watches |

### Images

| Tool | What it returns |
|------|-----------------|
| `wx_model_image` | Model field PNG rendered with `wrf-rust` |
| `wx_radar_image` | NEXRAD Level 2 radar image through the configured radar backend |
| `wx_storm_image` | Reflectivity image with storm-analysis overlays and metadata |

### Calculations

| Tool | What it returns |
|------|-----------------|
| `wx_calc` | Rust-backed meteorological calculations through `metrust` |
| `wx_sounding` | Model sounding plus derived parameters |
| `wx_ecape` | ECAPE, NCAPE, CAPE, CIN, LFC, EL, storm motion, optional parcel path |

## Model support

Verified model subsets currently exposed in Hermes:

- `wx_model_image`
  - `aigfs`, `gdas`, `gefs`, `gfs`, `graphcast`, `hiresw`, `hrrr`, `hrrrak`, `nam`, `nbm`, `rap`
- `wx_sounding`
  - `gdas`, `gfs`, `graphcast`, `hrrr`, `hrrrak`, `rrfs`
- `wx_ecape`
  - same verified profile subset as `wx_sounding`

Models outside those sets may exist lower in the backend stack, but they are not exposed until their Hermes extraction path is verified.

## Radar

Hermes keeps a stable radar tool contract and routes it through the configured radar backend.

Current backends:

- `rustdar` (default)
- `nexrad`

Supported radar products:

- both backends: `ref`, `vel`, `sw`, `zdr`, `rho`, `phi`
- `rustdar` only: `srv`, `vil`

## Soundings and ECAPE

`wx_sounding` downloads a verified model pressure-level profile and computes:

- CAPE/CIN: surface-based, mixed-layer, most-unstable
- LCL/LFC/EL
- LI, K-index, Total Totals
- bulk shear and SRH
- precipitable water, lapse rates, freezing level
- standard pressure-level profile output

`wx_ecape` runs the parity-verified `ecape-rs` runner on the same profile.

Defaults:

- `cape_type=most_unstable`
- `storm_motion_type=right_moving`
- `pseudoadiabatic=true`

Supported storm-motion modes:

- `right_moving`
- `left_moving`
- `mean_wind`
- `user_defined`

Set `include_parcel_profile=true` to return the aligned parcel path arrays.

## Packaging notes

This package is intended to be installed with `pip` from GitHub, not copied manually into `~/.hermes/plugins`.

The package exposes the Hermes plugin entry point directly, ships `plugin.yaml`, ships the bundled `nexrad-render-cli` source, installs the bundled skill on first load, and bootstraps Rust binaries on demand.

## Stack

Requirements

  • Python 3.8+
  • Rust toolchain (cargo, rustc) for first-use binary builds
  • pip install from GitHub

How it's built

The plugin is structured as a Python package with a plugin.yaml for Hermes autodiscovery. Heavy tasks are delegated to Rust binaries: rustdar or nexrad-render-cli for radar, wrf-rust for model images, metrust for in-process calculations, and ecape-rs for ECAPE. The bootstrap process in bootstrap.py checks for required binaries and builds them from source using cargo if missing, caching source under ~/.hermes/weather/src.

Data tools use the requests library to call NWS, SPC, METAR, and Open-Meteo APIs. Model image retrieval uses rusbie for model access and falls back to rustweather for GRIB rendering. The radar backend is configurable via the RADAR_BACKEND environment variable (default rustdar).

The plugin ships with bundled source for nexrad-render-cli under radar_backends/. Python dependencies include numpy, metrust, rusbie, rustweather, and wrf-rust. A Rust toolchain is required only for first-use builds.

Source

This summary was written for Neura Market from the project's own repository. Install commands, identifiers and licence details are reproduced unchanged. The FahrenheitResearch/hermes-weather-plugin repository is the authoritative source and the place to file issues or contribute.

Category: Web & Search

Related Hermes plugins