detect-objects
Run pre-trained AI models on geospatial imagery. Detect buildings, cars, ships, solar panels, agriculture fields, or use…
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.
Claude Code
$ npx -y skills add opengeos/geoai-skills --skill inspect-geo --agent claude-code
Codex
$ npx skills add opengeos/geoai-skills --skill inspect-geo -a codex -y
Cursor
$ npx skills add opengeos/geoai-skills --skill inspect-geo -a cursor -y
Gemini CLI
$ npx skills add opengeos/geoai-skills --skill inspect-geo -a gemini-cli -y
GitHub Copilot
$ npx skills add opengeos/geoai-skills --skill inspect-geo -a github-copilot -y
OpenCode
$ npx skills add opengeos/geoai-skills --skill inspect-geo -a opencode -y
Windsurf
$ npx skills add opengeos/geoai-skills --skill inspect-geo -a windsurf -y
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.
If `$0` looks like an absolute path, use it directly. Otherwise search for it:
find "$PWD" -name "$0" -not -path '*/.git/*' 2>/dev/null
Determine whether the file is raster or vector based on its extension:
If the extension is ambiguous, try raster first, then vector.
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}')
"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.
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)
"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.
After reporting, briefly mention:
Keep suggestions brief and show them only once.
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}')
"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.
Run pre-trained AI models on geospatial imagery. Detect buildings, cars, ships, solar panels, agriculture fields, or use…
Download NAIP aerial imagery for a bounding box. Specify coordinates as minx,miny,maxx,maxy in WGS84 and optionally a year.
Verify that the geoai Python package is installed and functional. If not, provide installation instructions. Optionally check…
Download Overture Maps data (buildings, places, roads, land use, water, etc.) for a bounding box. Returns a GeoDataFrame saved as…
Process raster data: clip by bounding box, stack multiple bands, mosaic GeoTIFFs, or convert between raster and vector formats.
Search past Claude Code session logs to recover context from previous conversations. Finds past decisions, data paths, CRS info,…
Use this skill to extract structured Markdown/JSON from PDFs and document images—tables with cell-level precision, formulas as…
Estimates intracellular metabolic fluxes from steady-state carbon-13 isotope-tracing measurements using validated atom maps,…