Examples

Real examples for the Claude Code skills of the pegel plugin, one per skill: a request, the pegel commands the skill ran, and the answer Claude gave.

Every example ran against the live API on 6 October 2026: pegel-river-overview and pegel-stations-geojson with pegel 0.3.0, pegel-trend and pegel-water-level-check with 0.4.0. The data changes, so your results will differ; the ids and keys shown work for trying the requests yourself. Long lists are shortened.

To try them, install the CLI and the plugin — see SKILLS.md.

Skills: pegel-river-overview · pegel-stations-geojson · pegel-trend · pegel-water-level-check

pegel-river-overview

Is anything on the Rhine flooding or running low right now? Show me all the gauges.

pegel --compact waters | jq -r '.[] | [.shortname, .longname] | @tsv'          # RHEIN
pegel --compact stations list --waters RHEIN --include-timeseries --include-current > rhein.json
jq -r --argjson dir 1 'sort_by(.km == null, (.km // 0) * $dir)[] | … | @tsv' rhein.json   # km, gauge, level, unit, state, time, comment
jq -r 'def epoch: …; .[] | … | select($c != null and (now - ($c.timestamp | epoch)) > 7200) | …' rhein.json   # stale: none

The skill fetched the river once and ran both of its recipes on the saved answer. The Rhine’s km grow downstream, so the table reads source to mouth. Every W series gave its unit as cm, and no reading was stale, null (no value) or flagged as a gauge fault (commented).

RHEIN — 36 gauges, 0 high, 24 low water (as of 6 Oct 2026, 00:45–01:00 local time; none stale)
  Every gauge with a mean-low reference from IFFEZHEIM (km 336.2) down to EMMERICH (km 851.9)
  reports low. RHEINWEILER and KEHL-KRONENHOF on the Upper Rhine are normal. 10 gauges have
  no mean-low/high reference (unknown), among them KONSTANZ-RHEIN, Basel-Rheinhalle, LOBITH
  and PANNERDENSE KOP.

  km       gauge               level    state
  0.5      KONSTANZ-RHEIN      228 cm   unknown
  186.2    RHEINWEILER         200 cm   normal
  292.2    KEHL-KRONENHOF      182 cm   normal
  336.2    IFFEZHEIM            46 cm   low ⬇
  443.37   WORMS               -25 cm   low ⬇
  546.23   KAUB                  4 cm   low ⬇
  591.49   KOBLENZ               0 cm   low ⬇
  654.8    BONN                 67 cm   low ⬇
  688      KÖLN                 51 cm   low ⬇
  744.2    DÜSSELDORF            2 cm   low ⬇
  851.9    EMMERICH            -19 cm   low ⬇
  867.3    PANNERDENSE KOP     584 cm   unknown
  … 24 more in the full table

  Levels are in cm relative to each gauge's own zero, so they can't be compared between gauges.

Next steps offered: the trend at one gauge (e.g. KAUB) with pegel-trend.

pegel-stations-geojson

Make me a GeoJSON of the Mittellandkanal gauges with their current water levels, for QGIS.

pegel --compact waters | jq -r '.[] | select(.longname | test("MITTELLAND")) | [.shortname, .longname] | @tsv'   # MLK
pegel --compact stations list --waters MLK --include-timeseries --include-current > mlk-raw.json   # 31 stations
jq '{type:"FeatureCollection", features: [ .[] | select(.longitude != null and .latitude != null) | … ([.timeseries[]? | select(.shortname=="W")][0]) as $w … ]}' mlk-raw.json > pegel-mlk.geojson
jq -r '.[] | select(.longitude == null or .latitude == null) | .shortname' mlk-raw.json   # none

The skill read each point’s unit from its series instead of assuming cm, and that mattered here: most canal gauges give the water surface in metres above sea level (m+NN), three give centimetres. It kept the 4 stations without a W series with a null level. pegel-mlk.geojson didn’t exist yet, so no confirmation was needed.

Wrote pegel-mlk.geojson (14.8 KB): one FeatureCollection with 31 gauge points on the MITTELLANDKANAL.
  No station lacked coordinates.
  Properties: shortname, longname, km, agency, water, level, unit, state, comment, measuredAt
  Units differ: 24 gauges report the canal surface in m+NN (metres above sea level), 50.29–65.15;
    VELSDORF 5603 and KANALBRÜCKE 5611 are in cm (apparently the same surface, about 56 m above
    sea level, in centimetres), WARBER GRABEN -2 cm. Don't color or size points by level across
    units: filter unit == "m+NN" first, or color by state.
  state:  unknown 27 (no mean-low/high reference on the canal) ·
          no W series 4 (MINDEN, WESER, ANDERTEN, SÜLFELD; level null)
  No gauge reported a fault (no comment).
  Checks: parses as one FeatureCollection; coordinates are numeric [lon, lat],
          lon 7.605–11.689, lat 52.230–52.479.

Next steps offered: open the file at https://geojson.io, or a map of just the m+NN levels.

pegel-trend

Is the Rhine at Pannerdense Kop rising or falling? Show me the last week.

pegel --compact stations list --fuzzy-id pannerdense             # PANNERDENSE KOP, RHEIN km 867.3
pegel --compact timeseries "PANNERDENSE KOP" W | jq '{unit, comment}'   # cm, no comment
pegel --compact measurements "PANNERDENSE KOP" W --start P7D | jq 'def epoch: …; (map(select(.value != null))) as $p | …'

PANNERDENSE KOP names a single station, so the CLI’s check of the name (one extra lookup before each per-station request) let both calls through. The 7-day window held 125 points, all with a value, but only from 5 Oct 17:00: the gauge sent nothing for the rest of the week. The skill checked the age of the last reading and reported the window it actually got instead of a week-long trend.

PANNERDENSE KOP (RHEIN km 867.3, Rijkswaterstaat), water level W in cm
  582 cm at 6 Oct 13:40 (8 min old); 584 cm at 5 Oct 17:00
  →  −2 cm over 20 h 40 min: steady
  range 582–587 cm (max 5 Oct 17:20, min 6 Oct 12:20); 125 readings at 10-min spacing
  The requested week came back as its last 21 hours: no readings before 5 Oct 17:00,
  so a week-long trend can't be read from these data.

Next steps offered: a CSV of the readings for charting, or the water-level verdict via pegel-water-level-check.

pegel-water-level-check

How high is the water right now at Rinteln, at Münster OW on the Dortmund-Ems-Kanal, and in Neustadt in Holstein?

pegel --compact stations list --fuzzy-id rinteln                 # RINTELN, WESER km 163.2
pegel --compact stations list --fuzzy-id münster                 # MÜNSTER OW and MÜNSTER UW, DEK
pegel --compact stations list --fuzzy-id neustadt                # stderr: INFO  [pegel.api] "NEUSTADT" names 2 stations …
pegel --compact stations get RINTELN --include-current | jq '.timeseries[] | select(.shortname == "W") | {unit, comment, currentMeasurement}'
pegel --compact stations get "MÜNSTER OW" --include-current | jq '…'   # unit m+NN
pegel --compact stations get 9610080 --include-current | jq '…'        # NEUSTADT on the OSTSEE

The search for “neustadt” found two stations named NEUSTADT, on the LEINE (48800200) and on the OSTSEE (9610080), next to NEUSTADT GLEWE OP; the CLI’s note on stderr said a lookup by that name is refused. Neustadt in Holstein is on the Baltic coast, so the skill used the OSTSEE gauge’s number. One call per gauge gave the reading together with its series’ unit and comment: MÜNSTER OW’s level is in m+NN, not cm, and RINTELN was flagged commented, a gauge fault, with the reason in its comment.

Water levels, 6 Oct 2026 around 13:45 local time:
  RINTELN     (WESER, km 163.2)               gauge fault ⚠  "Funktionsstörung, fehlerhafte Messwerte"
                                              (malfunction, faulty readings): reported 89 cm,
                                              unreliable, no verdict                     13:45
  NEUSTADT    (OSTSEE, Neustadt in Holstein)  511 cm      normal                         13:45
  MÜNSTER OW  (Dortmund-Ems-Kanal, km 70.3)   56.52 m+NN  no flood reference (unknown)   13:30
              the canal surface 56.52 m above sea level: a height, not a depth in cm

"Neustadt" names two gauges: NEUSTADT on the LEINE (48800200) and NEUSTADT on the OSTSEE
(9610080, used here).

Next steps offered: the trend at NEUSTADT (number 9610080) over the last week with pegel-trend.

View the source on GitHub →