// the find
opengeos/GeoAgent
A multimodal AI agent for geospatial data analysis and interactive visualization
GeoAgent is a shared agent layer for the opengeos Python ecosystem — leafmap, geemap, QGIS, STAC clients — giving all of them a consistent LLM interface without each library needing to maintain its own. It wraps Strands Agents and adds geospatial tool registries, confirmation hooks for destructive ops, and bindings to live map widgets and QGIS sessions. The target audience is GIS developers and data scientists who want natural-language control over geospatial workflows.
The confirmation hook design is the best part: tools are tagged as destructive, expensive, or long-running, and the agent pauses before running them unless you explicitly pass an approval callback. That's the right call for anything touching live map state or paid APIs. The factory pattern (for_leafmap, for_qgis, for_stac) binding live objects through closures is clean — LLM-visible tool arguments stay data-only, no object references leaking into prompts. Provider coverage is broad and environment-variable-driven, so switching from OpenAI to a local Ollama instance is one env var. The QGIS Qt thread marshaller for routing canvas and layer-tree calls to the GUI thread shows they've actually run this in QGIS and hit the real problem.
Strands Agents is a hard dependency from AWS Labs that is still in early development — if that project changes its tool-calling contract, every GeoAgent integration breaks. There's no mention of how tool results flow back when a tool's side effect is on the map widget (you asked it to add a layer — did it?), which matters when the model needs to chain tools. The auto-detection of providers by scanning env vars in priority order is fragile in environments where multiple keys are set for unrelated purposes. Documentation references gpt-5.5 and gemini-3.1-pro-preview in examples, which aren't real model IDs as of mid-2025 — that erodes trust in whether the examples are actually tested.