Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add joevstaas/awesome-claude-skills --skill vannmiljogit clone --depth 1 https://github.com/joevstaas/awesome-claude-skillsWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/joevstaas/awesome-claude-skills/vannmiljo)<a href="https://agentmods.dev/skills/joevstaas/awesome-claude-skills/vannmiljo"><img src="https://agentmods.dev/badge/skills/joevstaas/awesome-claude-skills/vannmiljo/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/joevstaas/awesome-claude-skills/vannmiljo"><img src="https://agentmods.dev/badge/skills/joevstaas/awesome-claude-skills/vannmiljo.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00033 | $0.02526 |
| Opus 5.5 | $0.00013 | $0.01010 |
| Sonnet 5.5 | $0.00007 | $0.00505 |
| Haiku 4.5 | $0.00003 | $0.00253 |
Grade A, and why
vannmiljo scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 1mo ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 200 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Vannmiljo Data Pipeline Skill
Use this skill when working with Vannmiljo (Norwegian water monitoring) data — scraping, GeoJSON building, or ingesting into ODP.
Project Overview
The Vannmiljo project extracts water quality monitoring data from Miljodirektoratet's Vannmiljo database and ingests it into the Ocean Data Platform (ODP).
Pipeline: Vannmiljo web scraper → GeoJSON files → ODP datasets
Source: vannmiljo.miljodirektoratet.no Field documentation: vannmiljokoder.miljodirektoratet.no/files/Om_VMS_Registreringsfelt.htm
Project Structure
Vannmiljo/
├── geojson_builder.py # Builds GeoJSON from scraped Vannmiljo data
├── ingest_holmestrandsfjorden.py # Ingest script for Holmestrandsfjorden
├── test_column_metadata.py # Test script for ODP column metadata
├── input_polygons/ # GeoJSON polygons defining areas of interest
│ ├── holmestrandsfjorden.geojson
│ ├── fordefjorden.geojson
│ └── langoya.geojson
└── output/ # Generated GeoJSON files with measurements
└── holmestrandsfjorden_alle_stasjoner.geojson
PyArrow Schema for Vannmiljo Data
All Vannmiljo datasets share the same schema. All columns are pa.string() except water_location_id (int64). The id column is a generated UUID primary key.
import pyarrow as pa
VANNMILJO_SCHEMA = pa.schema([
pa.field("id", pa.string(), nullable=False),
pa.field("water_location_id", pa.int64(), nullable=True,
metadata={"description": "Unik ID for vannlokaliteten i Vannmiljo"}),
pa.field("water_location_code", pa.string(), nullable=True,
metadata={"description": "Kode som knytter registreringen til en bestemt vannlokalitet"}),
pa.field("station_name", pa.string(), nullable=True,
metadata={"description": "Navn på målestasjonen"}),
pa.field("station_description", pa.string(), nullable=True,
metadata={"description": "Beskrivelse av vannlokaliteten"}),
pa.field("act_info", pa.string(), nullable=True,
metadata={"description": "Aktivitetsinformasjon for stasjonen"}),
pa.field("faktaark_url", pa.string(), nullable=True,
metadata={"description": "URL til stasjonens faktaark i Vannmiljo"}),
pa.field("betegnelse", pa.string(), nullable=True,
metadata={"description": "Betegnelse for provetakingsaktiviteten"}),
pa.field("aktivitet", pa.string(), nullable=True,
metadata={"description": "Overvåkings- eller kartleggingsaktivitet registreringen tilhorer"}),
pa.field("oppdragsgiver", pa.string(), nullable=True,
metadata={"description": "Ansvarlig for anskaffelsen av overvåkingsoppdraget"}),
pa.field("oppdragstaker", pa.string(), nullable=True,
metadata={"description": "Utforer av overvåkingen"}),
pa.field("parameter_id", pa.string(), nullable=True,
metadata={"description": "ID for parameteren som er målt eller observert"}),
pa.field("parameter", pa.string(), nullable=True,
metadata={"description": "Navn på parameteren som er målt eller observert"}),
pa.field("cas_nr", pa.string(), nullable=True,
metadata={"description": "CAS-nummer for kjemisk komponent"}),
pa.field("medium", pa.string(), nullable=True,
metadata={"description": "Medium parameteren er målt i (vann, sediment, biota, partikler)"}),
pa.field("vitenskapelig_navn", pa.string(), nullable=True,
metadata={"description": "Vitenskapelig (latinsk) navn på art/takson"}),
pa.field("provetakingsmetode", pa.string(), nullable=True,
metadata={"description": "Standard provetakingsmetode benyttet"}),
pa.field("analysemetode", pa.string(), nullable=True,
metadata={"description": "Standard analysemetode benyttet"}),
pa.field("provenr", pa.string(), nullable=True,
metadata={"description": "Provenummer for replikate prover"}),
pa.field("filtrert_prove", pa.string(), nullable=True,
metadata={"description": "Om vannproven er filtrert gjennom 0,45 um filter"}),
pa.field("opprinnelse", pa.string(), nullable=True,
metadata={"description": "Opprinnelse for registreringen"}),
pa.field("provedato", pa.string(), nullable=True,
metadata={"description": "Tidspunkt for provetaking"}),
pa.field("operator", pa.string(), nullable=True,
metadata={"description": "Verdioperator: = (påvist), < (under grense), > (over område), ND (ikke påvist)"}),
pa.field("verdi", pa.string(), nullable=True,
metadata={"description": "Målt eller observert verdi"}),
pa.field("enhet", pa.string(), nullable=True,
metadata={"description": "Enhet for registrert verdi"}),
pa.field("listenavn", pa.string(), nullable=True,
metadata={"description": "Navn på verdilisten parameteren tilhorer"}),
pa.field("ovre_dyp", pa.string(), nullable=True,
metadata={"description": "Ovre dybdegrense i meter (vann) eller centimeter (sediment)"}),
pa.field("nedre_dyp", pa.string(), nullable=True,
metadata={"description": "Nedre dybdegrense i meter (vann) eller centimeter (sediment)"}),
pa.field("deteksjonsgrense", pa.string(), nullable=True,
metadata={"description": "Deteksjonsgrensen til den aktuelle måleverdi"}),
pa.field("kvantifiseringsgrense", pa.string(), nullable=True,
metadata={"description": "Kvantifiseringsgrensen for den aktuelle måleverdi"}),
pa.field("kommentarer", pa.string(), nullable=True,
metadata={"description": "Kommentarer knyttet til registreringen (maks 2000 tegn)"}),
pa.field("sist_endret", pa.string(), nullable=True,
metadata={"description": "Dato for siste endring av registreringen"}),
pa.field("geometry", pa.string(), nullable=True,
metadata={
"isGeometry": "1",
"index": "1",
"description": "Punkt-geometri for målestasjonen (WKT)",
}),
])
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 1mo ago First seen · 200 lines · 33 tokens per session scan A 3e0d4730625e
vannmiljo is a skill published in the GitHub repository joevstaas/awesome-claude-skills (6 stars, last pushed 5d ago), licensed MIT. It adds 33 tokens to every session and 2,526 once invoked, about $0.0001 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
arboreto
Infers candidate gene regulatory networks from bulk or single-cell expression data using AertsLab Arboreto GRNBoost2 and GENIE3. Use for transcription factor-target association ranking, compatible Dask execution, sparse expression inputs, and network stability checks.
torchdrug
Builds and troubleshoots TorchDrug 0.2.1 workflows for molecular graphs, property prediction, self-supervised pretraining, molecule generation, retrosynthesis, protein representation learning, and knowledge graph reasoning. Use when code imports torchdrug or needs its datasets, models, tasks, or Engine.
deepspot-m
Generates transcriptome-wide virtual spatial transcriptomics from H&E histology with DeepSpot-M. Used for predicted log1p-CPM expression from 224x224 tiles at about 20x, querying the released protein-coding gene panel by symbol, and whole-slide prediction after resolution-aware tiling with histolab.
pyhealth
Builds and validates PyHealth clinical machine-learning pipelines for EHR, signals, imaging, and medical codes. Use for PyHealth dataset loading, MIMIC-III/IV, eICU or OMOP prediction tasks, patient-level evaluation, mortality/readmission/length-of-stay modeling, medication recommendation, sleep staging, Trainer…
nemo-mbridge-perf-expert-parallel-overlap
Validate and use MoE expert-parallel communication overlap in Megatron-Bridge, including overlapmoeexpertparallelcomm, delaywgradcompute, and flex dispatcher backends such as DeepEP and HybridEP.
ml-training-recipes
Battle-tested PyTorch training recipes for all domains — LLMs, vision, diffusion, medical imaging, protein/drug discovery, spatial omics, genomics. Covers training loops, optimizer selection (AdamW, Muon), LR scheduling, mixed precision, debugging, and systematic experimentation. Use when training or fine-tuning…