Install
$ agentstack add skill-opengeos-geoai-skills-process-raster ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
You are helping the user process geospatial raster data using geoai.
Input: $@
Follow these steps in order.
Step 1 -- Determine the operation
Parse $@ to identify the requested operation:
| Operation | Triggers | Required inputs | |---|---|---| | clip | "clip", "crop", "subset", --bbox present | input raster + bbox | | stack | "stack", "combine bands" | list of input rasters | | mosaic | "mosaic", "merge" | input directory or list of rasters | | raster-to-vector | "to vector", "vectorize", "polygonize" | input raster | | vector-to-raster | "to raster", "rasterize", "burn" | input vector + pixel size |
If the operation is unclear from the input, ask the user to specify.
Step 2 -- Resolve input file(s)
For single-file operations (clip, raster-to-vector, vector-to-raster):
find "$PWD" -name "INPUT_FILENAME" -not -path '*/.git/*' 2>/dev/null
For multi-file operations (stack, mosaic), if a directory is given:
find "INPUT_DIR" -name "*.tif" -o -name "*.tiff" 2>/dev/null | sort
If the user recently inspected or downloaded a file and did not specify an input, check the state file for context:
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 exists, read the last inspected or downloaded file:
python3 -c "
import json
with open('STATE_DIR/state.json') as f:
state = json.load(f)
if 'last_inspected' in state:
print(f'Last inspected: {state[\"last_inspected\"][\"path\"]}')
if 'downloaded_files' in state:
for f in state['downloaded_files']:
print(f'Downloaded: {f}')
"
Step 3 -- Execute the operation
Clip by bounding box
python3 -c "
import geoai
result = geoai.clip_raster_by_bbox(
input_raster='INPUT_PATH',
output_raster='OUTPUT_PATH',
bbox=[MINX, MINY, MAXX, MAXY],
)
print(f'Clipped raster saved to: {result}')
info = geoai.get_raster_info(result)
for k, v in info.items():
print(f'{k}: {v}')
"
Default output: ./clipped_.tif
Stack bands
python3 -c "
import geoai
result = geoai.stack_bands(
input_files=['FILE1', 'FILE2', 'FILE3'],
output_file='OUTPUT_PATH',
)
print(f'Stacked raster saved to: {result}')
info = geoai.get_raster_info(result)
for k, v in info.items():
print(f'{k}: {v}')
"
Mosaic GeoTIFFs
python3 -c "
import geoai
result = geoai.mosaic_geotiffs(
input_dir='INPUT_DIR',
output_file='OUTPUT_PATH',
)
print(f'Mosaic saved to: {result}')
info = geoai.get_raster_info(result)
for k, v in info.items():
print(f'{k}: {v}')
"
Raster to vector
python3 -c "
import geoai
gdf = geoai.raster_to_vector(
raster_path='INPUT_PATH',
output_path='OUTPUT_PATH',
)
print(f'Vectorized: {len(gdf)} features')
print(f'Saved to: OUTPUT_PATH')
print(f'Columns: {list(gdf.columns)}')
"
Default output: ./.gpkg
Vector to raster
python3 -c "
import geoai
result = geoai.vector_to_raster(
vector_path='INPUT_PATH',
output_path='OUTPUT_PATH',
pixel_size=PIXEL_SIZE,
)
print(f'Rasterized: {result}')
info = geoai.get_raster_info(result)
for k, v in info.items():
print(f'{k}: {v}')
"
Default pixel size: 1.0 (or infer from context). Default output: ./.tif
Replace all placeholder values with actual paths and parameters before running.
Step 4 -- Update state
If a state directory exists, update it with the output file path using the same state resolution pattern as Step 2.
Step 5 -- Report and suggest
Report:
- Operation performed
- Input and output file paths
- Key properties of the output (dimensions, CRS, band count, feature count)
Then suggest: "Use /geoai-skills:inspect-geo to examine the result in detail."
Error handling
import geoaifails -> delegate to/geoai-skills:install-geoai.- File not found -> use
findto locate, suggest corrected path. - CRS mismatch (for stack/mosaic) -> report the issue and suggest reprojecting first.
- Insufficient disk space -> report the error.
- Memory error (very large rasters) -> suggest processing in tiles or using a smaller extent.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: opengeos
- Source: opengeos/geoai-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.