download-data — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited download-data (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
You are helping the user download NAIP aerial imagery using geoai.
Input: $@
Follow these steps in order.
Extract the bounding box from the first argument (comma-separated minx,miny,maxx,maxy).
Parse optional flags from remaining arguments:
--year YYYY -> download year (default: most recent available)--output DIR -> output directory (default: ./naip_data/)--max-items N -> maximum number of items to download (default: 10)If the input is natural language (e.g. "download NAIP imagery for Knoxville, TN"), extract or infer the bounding box. If you cannot determine the bbox, ask the user for coordinates.
Confirm the bounding box has 4 numeric values and represents a valid geographic extent:
minx < maxx and miny < maxyIf validation fails, report the issue and ask for corrected coordinates.
python3 -c "
import geoai, os
bbox = (MINX, MINY, MAXX, MAXY)
output_dir = 'OUTPUT_DIR'
os.makedirs(output_dir, exist_ok=True)
result = geoai.download_naip(
bbox=bbox,
output_dir=output_dir,
year=YEAR,
max_items=MAX_ITEMS,
)
if isinstance(result, list):
for f in result:
size_mb = os.path.getsize(f) / (1024 * 1024) if os.path.exists(f) else 0
print(f'{f} ({size_mb:.1f} MB)')
print(f'Total files: {len(result)}')
elif isinstance(result, str):
size_mb = os.path.getsize(result) / (1024 * 1024) if os.path.exists(result) else 0
print(f'{result} ({size_mb:.1f} MB)')
else:
print(f'Result: {result}')
"Replace MINX, MINY, MAXX, MAXY, OUTPUT_DIR, YEAR, and MAX_ITEMS with actual values.
For the year parameter:
--year was specified, use that value (e.g. year=2022)year=None to get the most recent availableIf a state directory exists, update it with the downloaded file paths:
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:
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.setdefault('downloaded_files', [])
state['downloaded_files'].extend(DOWNLOADED_FILES)
with open(state_file, 'w') as f:
json.dump(state, f, indent=2)
"Summarize the download:
Then suggest: "Use `/geoai-skills:inspect-geo` to examine the downloaded imagery, or `/geoai-skills:detect-objects` to run AI models on it."
/geoai-skills:install-geoai.--max-items or using a smaller bounding box.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.