GIS skill-pack for Hermes

Build GIS agents on Hermes.

A skill-pack and tool layer for the open-source Hermes agent from Nous Research. Esri Feature Layers, FEMA flood data, and PostGIS — wired into Hermes as tools and skills. Point it at the layers you already publish.

$ hermes gis init

hermes agent · GIS toolset enabled · learning loop on

› which zoning district covers 1234 J Street?

  <think> spatial lookup → query the zoning Feature Layer </think>

  <tool_call>
  {"name": "esri.feature_layer.query",
   "arguments": {"layer": "Zoning/2",
                 "where": "intersects('1234 J Street')"}}
  </tool_call>

  ← 1 feature · ZONE_CODE = C-3

  1234 J Street is in Zoning District C-3 (Central Business
  District). Mixed-use residential/commercial is permitted up
  to 65 feet. Full district text at /docs/zoning/c-3.

› what's the flood risk for that parcel?

  <tool_call>
  {"name": "fema.flood.assess",
   "arguments": {"apn": "007-1420-118"}}
  </tool_call>

  ← Zone X · minimal risk

  The parcel is in FEMA Flood Zone X. Minimal flood risk;
  no mandatory flood-insurance requirement.
hermes

Built on the open Hermes agent

The runtime is Nous Research's MIT-licensed Hermes agent — skills, a learning loop, and a toolset system. The GIS pack is a plugin, not a fork.

$ hermes gis init
added gis toolset (esri, fema, postgis)
added 6 skills to ~/.hermes/skills/gis

Your model, your endpoint

Hermes is model-agnostic. Run Hermes 4 on Nous Portal, route through OpenRouter, or point at your own vLLM server — no code changes.

$ hermes model
 Hermes-4-70B      Nous Portal
  Hermes-4-405B     OpenRouter
  Hermes-4-70B      http://localhost:8000

Your data stays put

The GIS tools query the Feature Layers and databases you already run. Nothing is copied to a vendor cloud; parcels stay in your PostGIS.

tools:
  postgis:
    url: $POSTGIS_URL   # your database
  esri:
    token: $ARCGIS_TOKEN

What you get

The GIS parts, wired into an agent that already ships.

hermes agentemits <tool_call>gis toolsetroutes the callesriFeature Layersfemaflood zonespostgisyour DB

A GIS toolset for Hermes

Esri Feature Layers, FEMA flood data, and PostGIS arrive as a single Hermes toolset. Enable it once and the agent can query the layers you publish through its normal tool-calling.

~/.hermes/skills/gis/zoning.md
# Zoning lookups

The zoning layer is Zoning/FeatureServer/2. The district
code field is ZONE_CODE; height limits are HEIGHT_LIMIT (ft).
Always cite the district code, and prefer the esri toolset
over raw SQL for anything address-based.

Skills that speak GIS

The pack ships agentskills.io-compatible skills that teach Hermes your layers, field names, and conventions. They're plain markdown in ~/.hermes/skills/, versioned in your repo like any other code.

tool schema
{
  "name": "esri.feature_layer.query",
  "arguments": {
    "layer": "Zoning/2",
    "where": "ZONING = 'C-3'",
    "outFields": ["APN", "ADDRESS", "HEIGHT_LIMIT"]
  }
}

Real function calling

Hermes 4 emits <tool_call> JSON in a single turn — no parsing hacks. The GIS tools declare typed schemas, so the agent calls FeatureLayer.query with the right arguments and gets structured features back.

$ hermes skills
gis/zoning        used 41×   last edited by loop 2d ago
gis/parcels       used 28×   last edited by you  6d ago
gis/flood-risk    used 12×   agentskills.io       v1

Skills that improve with use

Hermes has a learning loop: it curates skills from experience and refines them across sessions. Correct it once on how your parcel schema works and it remembers — no retraining, no prompt archaeology.

# serve Hermes 4 locally, then point Hermes at it
$ vllm serve NousResearch/Hermes-4-70B
$ hermes config set model.base_url http://localhost:8000

Run it where you run everything

The Hermes agent runs on a VPS, a GPU box, or serverless (Modal, Daytona). Point it at Hermes 4 on your own vLLM endpoint and nothing leaves your network — air-gapped GIS included.

Built on your stack

Made for the way GIS teams already work.

The GIS pack doesn't ask you to migrate anything. Its tools query the Feature Layers you already publish, respect your ArcGIS authentication, and read from the databases you already run. Yes, it works with your existing shapefiles.

~/.hermes/skills/gis/query.py
# the esri tool the agent calls under the hood
from hermes_gis import esri

parcels = esri.feature_layer.query(
    url="https://services.arcgis.com/org/Parcels/FeatureServer/0",
    where="ZONING = 'C-3'",
    out_fields=["APN", "ADDRESS", "HEIGHT_LIMIT"],
)
# 412 features → returned to Hermes as structured tool output

The stack behind it

  • NOUS HERMES
  • HERMES 4
  • AGENTSKILLS.IO
  • ESRI
  • FEMA
  • POSTGIS

Get started in 60 seconds

Three commands to a GIS agent.

curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash
hermes gis init
hermes

Already running Hermes? hermes gis init adds the pack to your existing install.