Skip to content
Data
Skill

/inspect-geo

Inspect any raster or vector geospatial file. Returns CRS, bounds, bands, resolution, dtype, attribute summaries, and band statistics. Supports GeoTIFF, Shapefile, GeoJSON, GeoPackage, GeoParquet, and more.

From plugin
geoai-skills
308 skills
Install
$ npx -y skills add opengeos/geoai-skills --skill inspect-geo --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/inspect-geo

Context preview

The summary Claude sees to decide when to auto-load this skill.

Inspect any raster or vector geospatial file. Returns CRS, bounds, bands, resolution, dtype, attribute summaries, and band statistics. Supports GeoTIFF, Shapefile, GeoJSON, GeoPackage, GeoParquet, and more.

SKILL.md

inspect-geo.SKILL.md
name: inspect-geo
description: >
  Inspect any raster or vector geospatial file. Returns CRS, bounds, bands,
  resolution, dtype, attribute summaries, and band statistics. Supports
  GeoTIFF, Shapefile, GeoJSON, GeoPackage, GeoParquet, and more.
argument-hint: <filepath> [question about the data]
allowed-tools: Bash

You are helping the user inspect a geospatial data file.

Filename given: `$0` Question: `${1:-describe the data}`

Follow these steps in order, stopping and reporting clearly if any step fails.

Step 1 -- Resolve the file path

If `$0` looks like an absolute path, use it directly. Otherwise search for it:

find "$PWD" -name "$0" -not -path '*/.git/*' 2>/dev/null
  • **Zero results** -> tell the user the file was not found and stop.
  • **More than one result** -> list all matches, ask the user to re-run with a fuller path, and stop.
  • **Exactly one result** -> use that full path as `RESOLVED_PATH`.

Step 2 -- Classify the file type

Determine whether the file is raster or vector based on its extension:

  • **Raster**: `.tif`, `.tiff`, `.img`, `.jp2`, `.vrt`, `.nc`, `.hdf`
  • **Vector**: `.geojson`, `.json`, `.shp`, `.gpkg`, `.parquet`, `.geoparquet`, `.fgb`, `.kml`

If the extension is ambiguous, try raster first, then vector.

Step 3 -- Run the appropriate inspection

Raster files

python3 -c "
import geoai

info = geoai.get_raster_info('RESOLVED_PATH')
for k, v in info.items():
    print(f'{k}: {v}')

print('---')
print('Band Statistics:')
stats = geoai.get_raster_stats('RESOLVED_PATH')
for k, v in stats.items():
    print(f'{k}: {v}')
"

Vector files

python3 -c "
import geoai

info = geoai.get_vector_info('RESOLVED_PATH')
for k, v in info.items():
    print(f'{k}: {v}')
"

Replace `RESOLVED_PATH` with the actual absolute path before running.

Step 4 -- Answer the user's question

Using the metadata retrieved in Step 3, answer:

`${1:-describe the data: summarize the file type, CRS, extent, and any notable properties.}`

For vector files, if the question references a specific attribute, run an additional analysis:

python3 -c "
import geoai
result = geoai.analyze_vector_attributes('RESOLVED_PATH')
print(result)
"

Step 5 -- Update state

Resolve the state directory:

STATE_DIR=""
test -f .geoai-skills/state.json && STATE_DIR=".geoai-skills"
PROJECT_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || echo "$PWD")"
PROJECT_ID="$(echo "$PROJECT_ROOT" | tr '/' '-')"
test -f "$HOME/.geoai-skills/$PROJECT_ID/state.json" && STATE_DIR="$HOME/.geoai-skills/$PROJECT_ID"

If `STATE_DIR` is set, update it with the inspected file info:

python3 -c "
import json, os
state_file = 'STATE_DIR/state.json'
state = {}
if os.path.exists(state_file):
    with open(state_file) as f:
        state = json.load(f)
state['last_inspected'] = {
    'path': 'RESOLVED_PATH',
    'type': 'TYPE',
}
with open(state_file, 'w') as f:
    json.dump(state, f, indent=2)
"

Replace `STATE_DIR`, `RESOLVED_PATH`, and `TYPE` (raster or vector) with actual values.

If no state directory exists yet, skip this step silently.

Step 6 -- Suggest next steps

After reporting, briefly mention:

  • For raster files: *"To process this raster (clip, mosaic, stack bands), use `/geoai-skills:process-raster`. To run AI detection on it, use `/geoai-skills:detect-objects`."*
  • For vector files: *"To download more vector data for this area, use `/geoai-skills:overture-data`."*

Keep suggestions brief and show them only once.

Error handling

  • If `python3` is not found or `import geoai` fails, delegate to `/geoai-skills:install-geoai`.
  • If rasterio or geopandas fails to read the file, try the GDAL/OGR fallback:
python3 -c "
import geoai
info = geoai.get_raster_info_gdal('RESOLVED_PATH')
for k, v in info.items():
    print(f'{k}: {v}')
"

Or for vectors:

python3 -c "
import geoai
info = geoai.get_vector_info_ogr('RESOLVED_PATH')
for k, v in info.items():
    print(f'{k}: {v}')
"
Read more
Ships withgeoai-skills

A Claude Code plugin that adds GeoAI-powered skills for geospatial data exploration, satellite imagery download, AI-based object detection, and session memory. Built on the GeoAI Python library.

Get the whole plugin
Stats
30
Stars
4
Forks
Maintained
Maintenance
MIT
License
1mo ago
Last commit
5mo ago
Created

Repo: opengeos/geoai-skills

Other skills on geoai-skills.