For AI & agents
The Hub is built to be read by machines as much as by people — ready-made agent skills, and stable machine-readable endpoints for every dataset and page.
Skills for your assistant
A skill is a small folder of plain-text instructions — the open Agent Skills format — that teaches an assistant a Hub workflow it wouldn't know cold: which endpoint answers a question, how to subset a data cube without downloading it, what a valid metadata record looks like. Install one once and it loads whenever a task calls for it, instead of you re-explaining the Hub every session.
How do I use a skill?
Grab the skill's folder from the skills repository and drop it where your agent discovers skills — .claude/skills/ in a project for Claude Code; Gemini CLI, Codex, OpenCode, and others read the same format (see getting started) — or paste a skill's SKILL.md into any assistant's conversation.
- cdh-metadata
Generates a valid Climate Data Hub (CDH) YAML metadata record for a geospatial dataset. Use this skill whenever the user wants to: create or write CDH metadata, document a raster, vector, NetCDF, or Zarr file for the CDH catalog, produce a YAML metadata record following the CDH standard, prepare a dataset for upload to the Climate Data Hub, or fill in metadata fields. Trigger even when phrased informally: "write metadata for my file", "document this dataset", "create a YAML for CDH", "how do I add my data to the hub", "I need to describe my raster", "help me fill the metadata", or "generate the catalog record". This skill is the go-to for any CDH metadata authoring task — invoke it whenever a dataset + a CDH context appear together, even if the user does not use the word "metadata" explicitly.
Docs → - climate-dashboard
Builds a standalone interactive HTML climate dashboard from a CSV or NetCDF file — no Jupyter, no server, opens directly in any browser. Use this skill whenever the user wants to visualize climate data as a browser-viewable dashboard, especially when they say "dashboard", "HTML", "open in browser", "show results", "visualize the CSV", or when gcf-pipeline needs an HTML output. Works with CSV files from summarize_by_admin (columns: variable, time, value, optionally admin_unit) and NetCDF rasters. Auto-detects plot type from data shape. Produces KPI cards (mean, max, min), interactive Chart.js charts with filters, and a sortable data table — all in one self-contained HTML file. Always invoke this skill when the user has climate data and wants a dashboard or HTML visualization, even if they don't say "climate" explicitly.
Docs → - climate-data-download
Expert AI assistant for downloading climate data using the aggeodata Python package. Orchestrates downloads of CHIRPS precipitation, CHIRTS-ERA5 temperature, AgERA5 agrometeorological indicators (including hourly relative humidity), NASA POWER data, and Google Earth Engine (GEE) collections via MCP tools. Use this skill whenever a user asks to download climate or weather data — precipitation, temperature, humidity, solar radiation, wind speed, ET, VPD — for any country, region, or bounding box. Even if they don't say "download" explicitly, if they mention wanting climate data for an area and time period, this skill should trigger.
Docs → - gcf-pipeline
Full end-to-end climate data pipeline orchestrator: download → spatial processing → visualization, all in one workflow. Invoke this skill whenever the user wants to get AND see/visualize climate data together — even if they don't use technical terms. Strong trigger phrases: "download and visualize", "get and show", "I want to see [variable] for [country/year]", "full pipeline", "gcf-pipeline", "accumulated [variable] in [country]", "map [variable] over [country]", "show me [variable] for [year]". Also triggers for any prompt that clearly implies all three steps at once: fetching climate data, processing it spatially (masking, aggregating), AND plotting the results. Do NOT invoke if the user only wants to download (no visualization) or only wants to plot (data already loaded) — use the individual climate-data-download or notebook-plots skills for those cases instead.
Docs → - geospatial-cube-processor
Expert at writing geospatial processing functions inline into the user's existing Python script or notebook. Use this skill whenever the user wants to: mask or clip raster data to an admin boundary or country, stack or combine multiple xarray Datasets into a single cube, compute zonal statistics or aggregate raster values by region or time period, or export raster data as Cloud Optimized GeoTIFF (COG). Works with any gridded source — climate, soil, elevation, land use — as long as it uses standard lat/lon dimensions and EPSG:4326 CRS. Also triggers when the user mentions GADM boundaries, rioxarray clipping, xarray merging, zonal stats, or COG export in the context of spatial analysis. IMPORTANT: invoke this skill any time the user is working with xarray Datasets and wants to do spatial operations, even if they don't use these exact terms — phrases like "clip to Ethiopia", "combine my rasters", "average rainfall per district", or "save as GeoTIFF" are all strong signals.
Docs → - notebook-plots
Writes interactive Plotly visualization cells into a Jupyter notebook or Google Colab. Use whenever the user wants to plot, visualize, chart, or map climate or geospatial data. Trigger phrases: "plot", "visualize", "show me", "make a chart", "graph this", "map this", "dashboard", "seasonal pattern", "monthly chart", "compare regions", "time series". Also triggers automatically when the user has a CSV from summarize_by_admin (columns: variable, time, value — optionally admin_unit) and wants to see the results, even if they don't say "plot" explicitly. Handles: seasonal bar charts, multi-year time series, admin-unit comparisons, spatial raster maps, and multi-variable dashboards. IMPORTANT: invoke this skill any time the user wants to see data — even if their phrasing is casual ("can you show me the rainfall?", "what does the temperature look like?").
Docs → - sciplot-skill
Scientific visualization architect that transforms raw tabular data (CSV or similar) into elegant, publication-ready Python plotting code meeting the strict standards of high-impact journals (Nature, Science, Cell, Nature Communications). USE THIS SKILL whenever the user asks to: create a figure or plot from a data file, generate publication-quality charts, visualize CSV/tabular data scientifically, make scatter plots / boxplots / multi-panel figures, add statistical annotations (p-values, regression lines, confidence intervals), produce journal-ready figures, or requests any chart that needs to look "clean", "publication-quality", or "like a Nature paper". Also trigger when the user says things like "make a nice plot", "generate visualization code", "plot X vs Y from my data", or "create a figure for my manuscript".
Docs → - soil-data-download
Downloads SoilGrids global soil property rasters (clay, sand, silt, bulk density, organic carbon, pH, water content at multiple depths) and optionally stacks them into a validated soil datacube. Trigger this skill whenever the user mentions SoilGrids, soil texture, soil organic carbon, soil pH, soil water retention, soil depth layers (`0-5`, `5-15`, `15-30`, `30-60`, `60-100` cm), or asks to download / build / stack soil data for any country, region, or bounding box — even if they don't say 'SoilGrids' explicitly (e.g. 'I need clay and sand for Malawi', 'soil cube for Mzimba', 'download soil data for the Sahel'). Also trigger when the user hits a `reference_variable: non-null string required` schema error trying to use `climate-data-download` for soil — that pipeline is climate-only; this skill handles the soil path. Do NOT trigger for climate variables (precipitation, temperature, RH, ET) — use `climate-data-download` for those.
Docs → - spatial-crop-modeler
Expert orchestrator for spatial crop model simulations using ag-cube-cm + aggeodata. Use this skill whenever the user mentions: DSSAT, crop model, yield simulation, maize/wheat/bean/soybean yield, planting date analysis, spatial crop modeling, ag-cube-cm, SoilGrids, CHIRPS, CHIRTS, AgERA5, or any combination of climate/soil data with a process-based crop model. Trigger even if the user only says "run DSSAT" or "simulate yield" without mentioning the full stack — they almost certainly need this workflow. Also trigger when the user asks to interpret HWAM output or wants to understand why pixels were skipped.
Docs →
Machine-readable endpoints
Everything on the site has a stable, documented machine counterpart — no scraping required.
- /llms.txtllms.txt
A compact, AI-readable map of the site: every dataset, doc, tutorial, and use case with one-line descriptions. Point an agent here first.
- /llms-full.txtllms-full.txt
The whole Hub in one file — docs, tutorials, FAQ, and per-dataset metadata inlined, for agents that fetch once and don't crawl.
- /catalog.jsonCatalog index
The whole catalog as one schema.org DataCatalog document — every record as Dataset JSON-LD, the same markup Google Dataset Search reads.
- /catalog/<id>.jsonRecord metadata
Each record's full CDH metadata as JSON at a stable URL beside its page — variables, dimensions, assets, licensing.
- <page>/index.mdMarkdown twins
Markdown-sourced docs, tutorials, and use cases — plus every dataset page — served as plain markdown. Append index.md to the page URL.
- /.well-known/api-catalogAPI catalog
RFC 9727 linkset advertising the Hub's machine endpoints — the standard place for automated API discovery to start.
- /.well-known/agent-skills/index.jsonSkills discovery index
The skills above, published for automatic discovery — each entry carries a download URL and a sha256 digest agents verify before installing.
- document.modelContextWebMCP tools
Every page registers in-browser agent tools (WebMCP draft): search the catalog, fetch record metadata, and list skills — right from an open tab.
Also there: schema.org JSON-LD embedded in every dataset page, BibTeX citations per record, a sitemap, Content Signals in robots.txt welcoming AI use (search, ai-input, and ai-train), and cloud-native assets (Zarr, COG, Parquet) readable straight from object storage over HTTPS — with worked Python and R snippets on each record page.