Natural-language interface for searching satellite imagery metadata using STAC and the Google Agent Development Kit (ADK).
This repository is my submission for the “Agents Intensive Capstone Project” Kaggle competition.
This project uses uv for dependency management.
Install dependencies:
uv syncSearching satellite imagery normally requires detailed knowledge of:
- Bounding boxes and polygon AOIs
- Date ranges and seasonal interpretation
- Cloud cover thresholds
- STAC API structure (collections, filters, pagination)
This project implements an LLM-based agent that abstracts all of that. Users can ask in natural language, and the agent:
- Resolves location text into a bounding box (AOI)
- Interprets time ranges and cloud constraints
- Calls a real STAC API (Sentinel-2 L2A)
- Returns a structured result table with relevant scenes
The design focuses on:
- Deterministic tool usage
- Production-aligned prompting
- Full ADK evaluation (normal / clarification / boundary cases)
capstone/
├── README.md
├── README_jp.md
├── pyproject.toml
├── uv.lock
├── src/
│ └── capstone/
│ ├── agent/
│ │ ├── prompts.py
│ │ └── stac_agent_adk.py
│ ├── aoi/
│ │ ├── aoi_catalog.json
│ │ └── aoi_catalog.py
│ ├── tools/
│ │ └── stac_search.py
│ └── scripts/
│ ├── run_eval.py
│ └── eval/
│ ├── agent.py
│ ├── normal.evalset.json
│ ├── clarification.evalset.json
│ └── boundary.evalset.json
├── tests/
│ └── unit/
│ ├── test_aoi_catalog.py
│ ├── test_adk_eval.py
│ └── adk_test_cases.txt
└── doc/
├── TESTING.md
├── KAGGLE_BUILD_AND_TEST.md
└── 衛星データメタデータ検索エージェントの深掘り調査.pdf
The project uses Gemini via ADK. You only need:
- A Gemini API key
- A
.envfile in the project root
cp .env.example .envEdit:
GOOGLE_API_KEY=YOUR_KEYLoad:
set -a
source .env
set +aNo gcloud login or ADC credentials are required.
adk web src/capstone/scripts/Then:
- Open the printed URL in your browser
- You can chat with Agent. ex.) "Find Sentinel-2 images over eastern Hokkaido between 2023-06-15 and 2023-06-30 with less than 20% cloud cover." "Find high-resolution optical images over eastern Hokkaido in summer 2023 with less than 10% cloud."
- For local and CI testing: see doc/TESTING.md
- For Kaggle build & test instructions: see doc/KAGGLE_BUILD_AND_TEST.md
The agent currently supports the following STAC collection:
- Sentinel-2 Level-2A (optical)
(STAC collection ID:sentinel-2-l2a)
Other sensors (Sentinel-1 SAR, Landsat-8/9, PRISMA, MODIS, etc.) can be added.
Location resolution is based on a curated AOI catalog that maps
natural-language location hints (English + Japanese) to canonical bounding boxes.
The catalog includes:
- Country-level regions (Japan, USA mainland, UK, France, Germany)
- Major metropolitan areas (Tokyo, Osaka, Nagoya, Sapporo, Fukuoka)
- Regional subsets (Eastern Hokkaido)
- Special AOIs with default cloud-cover constraints
(e.g., japan_cloud_free_focused)
Rather than embedding the full JSON here, the complete list of supported AOIs is available at:
👉 src/capstone/aoi/aoi_catalog.json
Each entry defines:
idbboxnotealiases(English & Japanese)- optional
default_cloud_cover
You can extend coverage by editing aoi_catalog.json.