by opengeos
A multimodal AI agent for geospatial data analysis and interactive visualization
# Add to your Claude Code skills
git clone https://github.com/opengeos/GeoAgentLast scanned: 5/28/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-05-28T07:58:29.110Z",
"semgrepRan": false,
"npmAuditRan": true,
"pipAuditRan": false
}GeoAgent is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by opengeos. A multimodal AI agent for geospatial data analysis and interactive visualization. It has 377 GitHub stars.
Yes. GeoAgent passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/opengeos/GeoAgent" and add it to your Claude Code skills directory (see the Installation section above).
GeoAgent is primarily written in Python. It is open-source under opengeos on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh GeoAgent against similar tools.
No comments yet. Be the first to share your thoughts!
GeoAgent is a shared AI agent layer for geospatial Python packages, live map widgets, and QGIS plugins. With one consistent interface, projects such as leafmap, anymap, geoai, geemap, STAC, and NASA Earthdata can expose their tools to large language models, so each library no longer needs to build and maintain its own agent stack.
Built on Strands Agents, GeoAgent adds geospatial context, structured tool metadata, optional package adapters, provider configuration, and confirmation hooks that pause the agent before destructive, expensive, or otherwise irreversible operations.
See it in action:
Many geospatial libraries need the same agent features:
GeoAgent centralizes that layer so each package does not need to maintain its own agent framework.
| Concept | Purpose |
|---|---|
GeoAgent |
High-level facade around a Strands Agent. |
GeoAgentConfig |
Provider, model, temperature, token, and client settings. |
GeoAgentContext |
Runtime objects bound to the agent, such as a map or QGIS iface. |
@geo_tool |
Decorator that turns a Python function into a Strands tool with GeoAgent metadata. |
GeoToolRegistry |
Registry for tool metadata, safety flags, categories, and fast-mode filtering. |
for_leafmap |
Factory that binds tools to a leafmap.Map-compatible object. |
for_anymap |
Factory that binds tools to an anymap.Map-compatible object. |
for_qgis |
Factory that binds tools to qgis.utils.iface and an optional QgsProject. |
for_nasa_opera |
Factory that binds NASA OPERA search/display tools plus QGIS tools. |
for_stac |
Factory that binds STAC catalog search/asset tools plus optional QGIS loading. |
create_agent |
Factory for custom tools or package-specific integrations. |
Install the core package:
pip install GeoAgent
Core installs only the agent framework dependencies, mainly strands-agents
and pydantic. Geospatial packages and provider clients are optional extras:
| Extra | Purpose |
|---|---|
GeoAgent[openai] |
OpenAI model support through Strands. |
GeoAgent[anthropic] |
Anthropic Claude model support through Strands. |
GeoAgent[gemini] |
Google Gemini model support through Strands. |
GeoAgent[ollama] |
Local Ollama model support. |
GeoAgent[litellm] |
LiteLLM model support for many hosted and proxy providers. |
GeoAgent[openrouter] |
OpenRouter support for DeepSeek, Qwen, and other hosted models. |
GeoAgent[vllm] |
vLLM server support through the Strands community provider. |
GeoAgent[leafmap] |
leafmap live map integration. |
GeoAgent[anymap] |
anymap live map integration. |
GeoAgent[stac] |
STAC client dependencies. |
GeoAgent[earthdata] |
NASA Earthdata dependencies. |
GeoAgent[nasa-opera] |
NASA OPERA search dependencies. |
GeoAgent[geoai] |
geoai integration dependencies. |
GeoAgent[earthengine] |
Google Earth Engine dependencies. |
GeoAgent[ui] |
Solara UI dependencies. |
GeoAgent[browser] |
FastAPI WebSocket backend for browser MapLibre apps. |
GeoAgent[providers] |
OpenAI, Anthropic, Gemini, Ollama, LiteLLM, OpenRouter, and vLLM clients. |
GeoAgent[all] |
Most optional integrations. QGIS itself remains system-installed. |
Examples:
pip install "GeoAgent[leafmap,openai]"
pip install "GeoAgent[anymap,anthropic]"
pip install "GeoAgent[stac,earthdata,openai]"
For QGIS, install GeoAgent in the Python environment used by QGIS. The
GeoAgent[qgis] extra is a marker extra; QGIS is provided by the desktop
application or system package manager.
GeoAgent selects a provider from environment variables when no provider is specified:
| Provider | Environment |
|---|---|
| OpenAI | OPENAI_API_KEY, optional OPENAI_MODEL |
| ChatGPT/Codex OAuth | OPENAI_CODEX_ACCESS_TOKEN, optional OPENAI_CODEX_MODEL |
| Anthropic | ANTHROPIC_API_KEY, optional ANTHROPIC_MODEL |
| Google Gemini | GEMINI_API_KEY or GOOGLE_API_KEY, optional GEMINI_MODEL |
| LiteLLM | LITELLM_API_KEY, optional LITELLM_MODEL and LITELLM_BASE_URL |
| OpenRouter | OPENROUTER_API_KEY, optional OPENROUTER_MODEL and OPENROUTER_BASE_URL |
| vLLM | VLLM_BASE_URL, VLLM_MODEL_ID, optional VLLM_API_KEY |
| Ollama | OLLAMA_HOST or USE_OLLAMA=1, optional OLLAMA_MODEL |
Bedrock is not auto-detected. Pass provider="bedrock" explicitly; it then
uses the AWS credential chain, configured region, and Bedrock model access,
with optional BEDROCK_MODEL.
ChatGPT/Codex OAuth uses the Codex browser login flow and the Codex Responses backend.
vLLM support expects a running vLLM server. When using GeoAgent tools, start the server with vLLM tool-calling support enabled for the selected model and chat template.
For notebooks and Python scripts, log in once with the CLI:
geoagent codex login
or from Python/Jupyter:
from geoagent import login_openai_codex
login_openai_codex()
GeoAgent stores the refresh token in your user config directory and exports
OPENAI_CODEX_ACCESS_TOKEN for the current Python process. Later sessions can
reuse the stored login automatically, or explicitly call:
from geoagent import ensure_openai_codex_environment
ensure_openai_codex_environment()
You can also configure providers explicitly:
from geoagent import GeoAgentConfig, for_leafmap
agent = for_leafmap(
m,
config=GeoAgentConfig(
provider="openai",
model="gpt-5.5",
temperature=0,
max_tokens=4096,
),
)
Factories also accept provider= and model_id= shortcuts:
agent = for_leafmap(m, provider="gemini", model_id="gemini-3.1-pro-preview")
OpenRouter can be used for DeepSeek and Qwen models:
agent = GeoAgent(
config=GeoAgentConfig(
provider="openrouter",
model="deepseek/deepseek-chat",
)
)
qwen_agent = GeoAgent(
config=GeoAgentConfig(
provider="openrouter",
model="qwen/qwen3-32b",
)
)
Use GeoAgent directly when you do not need a map or package-specific toolset:
from geoagent import GeoAgent, GeoAgen