Skip to main content
The difference between a reliable agent and a flaky one is grounding: acting on structured targets instead of guessed coordinates. VNC only sees pixels; Glasswarp surfaces real UI structure when the app exposes it.

UIA targets

When a Windows app exposes its UI through UI Automation, the host returns sparse click targets with roles, names, and bounds.

Set-of-Mark (SoM)

Draw numbered marks on a frame so a vision model can pick a target by id instead of estimating pixels.
som_annotate and the grid helpers need the grounding extra (pip install "glasswarp[grounding]", which pulls in Pillow).

The grounding ladder

1

Prefer host UIA targets

Most reliable — real controls with names and bounds.
2

Fall back to CV / grid targets

For canvases and games that expose no UIA, build targets client-side.
3

Use raw coordinates last

click(x, y) still works, but avoid guessing when a target exists.
Continue to Safety and consent.