Automation-grade control for live QGIS.

HotWings runs inside QGIS and exposes a localhost-only bridge for Python execution, screenshots, messaging, and plugin management. It is designed for engineers who need deterministic outcomes with auditability and safety.

Localhost only Token auth Main-thread safe Audit logs
Quick start
curl -H "Authorization: Bearer <token>" \
  http://127.0.0.1:45454/status

curl -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"code": "print(QgsProject.instance())"}' \
  http://127.0.0.1:45454/exec

Designed for production

  • Safe main-thread execution.
  • Rolling logs + message outbox.
  • Plugin reload controls.
  • Screenshot pipeline for automation.

Built on first principles

Determinism

Every request is executed on the QGIS UI thread so actions are predictable and API safe.

Auditability

Size-based rolling logs and attachment storage give you a clear activity trail.

Local-first security

Localhost binding + token auth by default. No cloud dependencies.

Operator control

Human messages and clipboard capture keep your team in the loop.

Core capabilities

Live Python runtime

Send exec/eval requests into the current QGIS session with full access to QgsProject, layers, and UI.

Local-only security

Bind to 127.0.0.1, require a token, and keep your automation entirely on your machine.

Audit-ready logging

Every request is logged locally with size-based rollovers for recent activity review.

Outbox messages

Send notes or screenshots from QGIS to Codex via a clean message queue API.

Plugin management

Create or reload plugins by writing to the HotWings managed directory and calling enable/reload.

Screenshot pipeline

Capture the canvas or UI with cropping, scaling, and format controls for automation pipelines.

Clear architecture, predictable behavior

HotWings keeps a strict boundary: external tools talk to a localhost server, which marshals work onto the QGIS main thread. You get determinism without unsafe background mutations.

  • HTTP bridge listens on localhost with a rotating token.
  • Requests are queued and executed on the UI thread.
  • Results return structured output + tracebacks.
  • Attachments stored on disk for auditability.

Runtime flow

Terminal Codex / CLI HotWings API localhost + token QGIS UI Main thread QGIS Runtime QgsProject API Local storage logs + attachments

Security + reliability focus

HotWings is designed for professional environments where auditability and deterministic behavior matter. It keeps a conservative surface area and stays local by default.

Localhost binding only
Token auth required
Main-thread execution
No token logging
Rolling audit logs
Attachment caps

Download + install

Step 1 — Download

Grab the latest plugin bundle and drop it into your QGIS plugins directory.

Download HotWings

Step 2 — Enable

Open QGIS → Plugins → Manage and Install Plugins → Enable HotWings.

Step 3 — Connect

Copy the token from the HotWings dock and call /status to confirm the bridge is live.

Compatibility + checks

QGIS

3.22+ (LTR recommended)

OS

macOS, Windows, Linux

Security

Localhost only + token auth

Logging

Rolling audit logs & outbox

Checksums and signed bundles will be listed here when downloads are published.

API quickstart

Status check

curl -H "Authorization: Bearer <token>" \
  http://127.0.0.1:45454/status

Execute Python

curl -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"code": "print(QgsProject.instance())"}' \
  http://127.0.0.1:45454/exec

Capture screenshot

curl -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"target":"canvas","format":"png"}' \
  http://127.0.0.1:45454/screenshot