Releases: ultramenid/AgenticGIS
Release list
AgenticGIS v0.3.1
Highlights
Custom connection reliability (LM Studio and other local/custom endpoints)
Several fixes for the Custom connection mode, surfaced while testing against LM Studio's OpenAI-compatible and Anthropic-compatible endpoints:
- Fixed an HTTP 400 (
parameters.propertiesrequired) that broke every custom OpenAI-compatible connection with tool calling enabled — no-argument tool schemas now always include an explicitproperties: {}instead of omitting it. - The base URL is now used exactly as entered for both OpenAI-compatible and Anthropic-compatible custom connections — removed the automatic
/v1guessing/insertion that produced inconsistent behavior depending on whether you included/v1yourself. - Fixed a crash (
AttributeError: 'AnthropicHttpClient' object has no attribute 'config') that broke every Anthropic-wire-format connection, built-in or custom. - Fixed a hang on Anthropic-compatible custom endpoints (e.g. LM Studio) caused by unconditionally sending a
thinkingfield the server didn't support — it's now only sent when explicitly configured.
Smarter max output tokens
Replaced the flat 16384-token output cap with per-model limits: known providers (OpenAI, Anthropic, Gemini, DeepSeek, etc.) use their real documented caps, and unrecognized/custom models (local connections) scale with the guessed context window instead.
Install
Download AgenticGIS-v0.3.1.zip and install via QGIS → Plugins → Install from ZIP, or unzip into your QGIS plugins folder.
AgenticGIS v0.3.0
Highlights
run_pyqgis is now background-by-default
Long-running run_pyqgis code (downloads, file conversions, Processing runs over files, heavy pure-Python compute) now runs on a worker thread automatically, so QGIS stays responsive. Code that touches the project, map canvas, print layouts, or GUI still runs on the main thread. This replaces the old allowlist that froze the UI for ~60s on any heavy idiom it hadn't seen yet.
Charts and stats render inside the response bubble
Charts, stats, and GIFs now embed in the agent's response bubble instead of spawning a separate one, and persist there across session restore. Fixed the bubble's excess vertical whitespace.
Fixes
- Prevent a stale CLI
session_idfrom being restored after a session reset. - Restore the version line accidentally reverted to 0.2.7 (v0.2.8 was already tagged).
Install
Download AgenticGIS-v0.3.0.zip and install via QGIS → Plugins → Install from ZIP, or unzip into your QGIS plugins folder.
AgenticGIS v0.2.7
v0.2.7 — Session Isolation + Auto-Delete Analysis Layers + Spatial Operations Guide
What's New
- Session isolation: Agent workspace state (layers, processing history, analysis results, errors) is now properly reset when starting a new chat session or switching between sessions.
- Auto-cleanup for analysis layers:
is_analysis=truelayer source files are auto-deleted on remove_layer(), clear_layers(), and session reset. - Comprehensive spatial operations reference: Added complete algorithm guide to the system prompt so the LLM correctly handles all spatial queries.
Spatial Operations Guide (NEW)
The system prompt now includes a complete reference for:
native:extractbylocation — ALL 8 PREDICATE values (MANDATORY)
| PREDICATE | Name | Use when user says... |
|---|---|---|
| 0 | intersect | "touching", "near", "inside" (loose) |
| 1 | contain | "enclosing", "containing" |
| 2 | disjoint | "outside", "beyond", "not in" ← for outside queries |
| 3 | equal | "exactly matching" |
| 4 | touch | "adjacent", "bordering" |
| 5 | overlap | "partially in" |
| 6 | are within | "completely inside" (strict) |
| 7 | cross | "crossing", "passing through" |
Also covered:
native:buffer— DISTANCE, SEGMENTS, END_CAP_STYLE, JOIN_STYLE, DISSOLVEnative:intersection— overlay with attribute preservationnative:clip— fast mask clippingnative:dissolve— merge by attributenative:union— combine two layersnative:difference— subtract overlaynative:symmetricaldifference— XOR (non-overlapping)native:joinattributesbylocation— spatial join with PREDICATE/METHOD- Workflow patterns: buffer→extract, inside vs outside counts, clip-then-analyze
UI Fixes
- Tool calls visible immediately (updateGeometry + repaint)
- Download card spacing (10px bottom margin)
- Text rendering restored (QLabel with proper color)
- Faster streaming (8ms coalesce, 16ms render)
- "Answering" status when final text streams
Previous Fixes
- v0.2.6: Layer detection on startup
- v0.2.5: Claude Code dedup, OpenCode streaming, process error tracking
Files
AgenticGIS-v0.2.7.zip(QGIS plugin)
AgenticGIS v0.2.6
v0.2.6 — Layer Detection Fix
What's New
- Layer detection: Agent now correctly sees existing project layers on startup instead of reporting "no layers loaded"
Previous Fixes (v0.2.5)
- Claude Code: No longer duplicates text messages when stream-json returns both assistant and result events
- OpenCode: No longer shows "completed without returning a response" in multi-step conversations; multiple text events now stream correctly
- Process launch failures: Properly tracked as errors so the generic fallback doesn't override the error message
Code Quality
- Fixed all 428 flake8 issues across the codebase
- Zero medium/high bandit security issues
- Removed all debug print statements
Files
AgenticGIS-v0.2.6.zip(QGIS plugin)
AgenticGIS v0.2.5
Bug Fixes
- Claude Code: No longer duplicates text messages when stream-json returns both assistant and result events
- OpenCode: No longer shows "completed without returning a response" in multi-step conversations; multiple text events now stream correctly
- Process launch failures: Properly tracked as errors so the generic fallback doesn't override the error message
- Layer detection: Agent now correctly sees existing project layers on startup instead of reporting "no layers loaded"
Code Quality
- Fixed all 428 flake8 issues across the codebase
- Zero medium/high bandit security issues
- Removed all debug print statements
New Tests
- Added 4 tests for text deduplication and multi-step streaming
Files
- AgenticGIS-v0.2.5.zip (QGIS plugin)
AgenticGIS v0.2.4
AgenticGIS v0.2.4
UX Improvements
'Connecting...' status during network handshake
When the HTTP transport needs to establish a fresh TCP+TLS connection (first message, connection dropped, settings changed), the status bar now briefly shows 'Connecting...' with a spinner instead of the generic 'Thinking...'. This tells the user the delay is network-level, not the model being slow.
Prewarm after settings save
When you change your API key, model, or base URL in Settings and save, the connection is now eagerly warmed in the background. The next message starts immediately without the handshake delay.
Auto-format for code blocks and tables during streaming
The streaming text renderer now detects when a complete fenced code block or markdown table has arrived and switches to full markdown rendering so syntax highlighting and table formatting appear live.
Bug Fix
- Fixed typo in system prompt.
Code Quality
- Fixed flake8 unused imports and overlong lines in backend/tool modules.
- Restored DEFAULT_SYSTEM_PROMPT re-export in api_backend.py for backward compatibility with tests.
- Bandit scan: no high or medium severity issues in production code.
Install
Download AgenticGIS-v0.2.4.zip below and install via Plugins → Manage and Install Plugins → Install from ZIP in QGIS.
AgenticGIS v0.2.3 — Context Compaction, Parallel Tools, Prompt Size Cuts
AgenticGIS v0.2.3
Performance Improvements
Fix A1 — Elide stale tool results
Old tool-result payloads older than the last 2 user turns are replaced with compact stub previews (tool name, payload length, first 200 characters). This significantly reduces per-turn token cost for long sessions. Works with both OpenAI and Anthropic message formats.
Fix A2 — Background pre-compaction
After every turn completes, compaction runs in a daemon thread while the UI is idle. The next send() starts with an already-compacted history, eliminating the inline compaction latency stall. A generation counter invalidates stale in-flight results. The existing inline compaction path is untouched and remains the fallback.
Fix A3 — Parallel background-safe tools
analyze_layer, create_chart, get_layer_statistics, and gee_* tools now dispatch concurrently via ThreadPoolExecutor. Canvas-side-effect tools (add_layer, zoom_to_layer, etc.) stay single-threaded with strict ordering.
Fix A4 — Trim tool descriptions & limit result size
Tool specs reduced by ~60% (shorter descriptions, leaner input schemas). MAX_TOOL_RESULT_CHARS=30_000 caps per-payload size. New _system_arg hook enables compaction for API backends.
Prompt Architecture: Conditional GEE
The system prompt is now split into _PROMPT_CORE + _PROMPT_GEE. The GEE section is dynamically omitted when the ee_plugin is not available, saving ~4,000 tokens per request for users without Google Earth Engine installed.
Other Improvements
- Cached GEE availability check (
toolkit.gee_available) - Config option
compaction_modelfor using a cheaper/faster model for compaction summaries - Prewarm throttled to once per 120s (was once per dock lifetime)
- Context-window heuristics expanded (Gemini 1M, o4, o3, o1, DeepSeek, Qwen, Llama)
- Default context window bumped from 128K to 200K
Install
Download AgenticGIS-v0.2.3.zip below and install via Plugins → Manage and Install Plugins → Install from ZIP in QGIS.
AgenticGIS v0.2.2
Bug Fixes
-
Fix duplicate tool call count in UI: Added deduplication in AgentTurnBubble.add_tool() to prevent showing duplicate tool call bubbles when backend emits TOOL_USE twice (once during CLI stream parsing, once during actual tool dispatch).
-
Fix raw protocol JSON appearing in chat: Made parse_protocol_text() smarter with brace-matching to extract JSON object boundaries correctly when Claude CLI outputs text after the protocol JSON.
AgenticGIS v0.2.1
AgenticGIS v0.2.1
Fixed:
- Prompt: mandatory GEE workflow to prevent AI stopping after gee_dataset_info
- GIF labels: frame_labels now burned into downloaded GIF file
- Release ZIP: fixed root folder structure (AgenticGIS/ folder at root)
Changes since v0.2.0:
- GEE async refactor (background tools, no main thread blocking)
- Cache ee.Initialize() per session
- Reduce getInfo() calls
- Transcript restore O(N²) → O(N)
- Batch UI updates with setUpdatesEnabled
- Defer session save
- Session-level GEE approval
- Auto-select map vs geotiff based on area size
- GEE GIF timelapse with downloadable bubbles
- Frame labels burned into GIF file (not just UI overlay)
AgenticGIS v0.2.0
Reducing Time-to-First-Token (TTFT) + chart fix
This release cuts perceived latency on the network/prefill side of the agent loop, and fixes numeric chart plotting.
Improvements
- Connection prewarming — the HTTPS connection (TCP+TLS handshake) is now opened eagerly when the chat dock is shown, off the UI thread, so the first message of a session skips the cold-start handshake (~100–300 ms). Applies to both the Anthropic and OpenAI-compatible backends. Prewarming is idempotent, never clobbers an in-flight connection, and never blocks or raises.
- Conversation-prefix caching (Anthropic) — a cache breakpoint is now placed on the conversation history so follow-up turns in long chats read the prefix from cache instead of re-prefilling it, reducing TTFT as conversations grow.
- Cleanup — removed a no-op top-level
cache_controlfield from the Anthropic request body; caching is correctly expressed per content block.
Fixes
- create_chart numeric measures — charts could only count feature occurrences per category, so charting an already-aggregated numeric field produced equal-height bars with unreadable numeric labels.
create_chartnow acceptsvalue_field+aggregate(count/sum/mean/max/min):field_nameis the category axis and the numericvalue_fieldis reduced per category (sum by default). Default behavior (count) is unchanged.
Install
Download AgenticGIS-v0.2.0.zip below and install via QGIS → Plugins → Manage and Install Plugins → Install from ZIP.
Notes
- No new dependencies — the plugin remains stdlib-only.
Full changelog: v0.1.10...v0.2.0