This release includes 1 breaking change for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Topics
+11 more
ReleasePort's take
Light signalRelease v0.3.0 adds several new capabilities to the MCP API and tools, including a no‑vision mode, cross‑platform window management, universal text selection and retrieval, diagnostics reporting, role classification constants, expanded backend detection, thread‑safe public APIs, macOS timeout hardening, and faster Windows element search.
Why it matters: These feature additions broaden functional coverage (no‑vision mode, new APIs) and improve performance (Windows search acceleration, macOS timeout), directly benefiting developers building automation workflows across platforms.
Summary
AI summaryUpdates UIA, AT-SPI2, and CDP across a mixed release.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Feature | Medium |
Adds no-vision MCP mode via TOUCHPOINT_MODE=no-vision. Adds no-vision MCP mode via TOUCHPOINT_MODE=no-vision. Source: llm_adapter@2026-06-08 Confidence: high |
— |
| Feature | Medium |
Adds cross-platform window management APIs: minimize, fullscreen, close, move, resize. Adds cross-platform window management APIs: minimize, fullscreen, close, move, resize. Source: llm_adapter@2026-06-08 Confidence: high |
— |
| Feature | Medium |
Makes select_text work everywhere across all backends. Makes select_text work everywhere across all backends. Source: llm_adapter@2026-06-08 Confidence: high |
— |
| Feature | Medium |
Adds read_text MCP tool and tp.get_text_content() for direct element text retrieval. Adds read_text MCP tool and tp.get_text_content() for direct element text retrieval. Source: llm_adapter@2026-06-08 Confidence: high |
— |
| Feature | Medium |
Introduces tp.diagnostics() and matching MCP tool for backend health reporting. Introduces tp.diagnostics() and matching MCP tool for backend health reporting. Source: llm_adapter@2026-06-08 Confidence: high |
— |
| Feature | Medium |
Exports role‑classification sets: INTERACTIVE_ROLES, CONTAINER_ROLES, STRUCTURAL_ROLES. Exports role‑classification sets: INTERACTIVE_ROLES, CONTAINER_ROLES, STRUCTURAL_ROLES. Source: llm_adapter@2026-06-08 Confidence: high |
— |
| Feature | Medium |
Broadens role and state coverage on Windows and macOS to many more element kinds and states. Broadens role and state coverage on Windows and macOS to many more element kinds and states. Source: llm_adapter@2026-06-08 Confidence: high |
— |
| Feature | Medium |
Makes public API calls and MCP workflows thread‑safe by serializing shared state access. Makes public API calls and MCP workflows thread‑safe by serializing shared state access. Source: llm_adapter@2026-06-08 Confidence: high |
— |
| Feature | Medium |
Hardens macOS responsiveness with configurable ax_messaging_timeout (default 1 s). Hardens macOS responsiveness with configurable ax_messaging_timeout (default 1 s). Source: llm_adapter@2026-06-08 Confidence: high |
— |
| Feature | Medium |
Accelerates element search on large Windows desktops by skipping leaf controls and using direct filters. Accelerates element search on large Windows desktops by skipping leaf controls and using direct filters. Source: llm_adapter@2026-06-08 Confidence: high |
— |
| Bugfix | Medium |
Enables OS-level window management for CDP (browser/Electron) windows. Enables OS-level window management for CDP (browser/Electron) windows. Source: granite4.1:30b@2026-06-08-audit Confidence: low |
— |
| Bugfix | Medium |
Raises clear ValueError for malformed element IDs across all backends. Raises clear ValueError for malformed element IDs across all backends. Source: granite4.1:30b@2026-06-08-audit Confidence: low |
— |
| Bugfix | Medium |
Improves reliability of Windows text selection, avoiding offset drift and correctly handling multiline edits. Improves reliability of Windows text selection, avoiding offset drift and correctly handling multiline edits. Source: granite4.1:30b@2026-06-08-audit Confidence: low |
— |
| Bugfix | Medium |
Fixes multi-monitor screenshot clipping, expanding captures to full monitor area. Fixes multi-monitor screenshot clipping, expanding captures to full monitor area. Source: granite4.1:30b@2026-06-08-audit Confidence: low |
— |
| Bugfix | Low |
Fixes control of GTK4 applications that previously failed actions due to UUID‑style paths. Fixes control of GTK4 applications that previously failed actions due to UUID‑style paths. Source: granite4.1:30b@2026-06-08-audit Confidence: low |
— |
| Bugfix | Low |
Corrects wait_for behavior when wait_for_new=True, validates mode early, and de‑duplicates queries per polling cycle. Corrects wait_for behavior when wait_for_new=True, validates mode early, and de‑duplicates queries per polling cycle. Source: granite4.1:30b@2026-06-08-audit Confidence: low |
— |
Full changelog
Added
- No-vision MCP mode. Setting
TOUCHPOINT_MODE=no-visionlets agents
drive the desktop from a compact structuredsnapshot()of the active
window — plusdiff_snapshot()and automatic verify flags on actions —
instead of screenshots. Any model can now control the desktop, including
local models with no vision capability. - Cross-platform window management. New APIs
tp.minimize_window(),
tp.fullscreen_window(),tp.close_window(),tp.move_window(), and
tp.resize_window()(with matching MCP tools) let agents arrange and
control application windows on Linux, Windows, and macOS. select_textnow works everywhere. Native structured text selection
is complete across all backends — Linux, Windows, macOS, and web/Electron
— so agents can select substrings without mouse drags or triple-clicks on
any platform.- Read element text directly. The
read_textMCP tool and
tp.get_text_content()return the full text of an element or container
(article, document body, terminal) verbatim — no screenshot OCR needed. tp.diagnostics()(and a matching MCP tool) reports the health of
backends, input, CDP targets, timeouts, and optional dependencies, making
it easy to confirm a working setup or troubleshoot a misconfigured one.- Role-classification sets.
INTERACTIVE_ROLES,CONTAINER_ROLES, and
STRUCTURAL_ROLESare exported for grouping elements by kind (e.g. what an
agent can act on vs. layout containers).
Changed
- Broader role and state coverage on Windows and macOS. Both backends
now recognize many more element kinds (headings, landmarks, form roles,
labels, figures, notes, meters, split buttons, and more) and additional
states such as pressed, active, invalid, multi-selectable, and resizable —
bringing Windows and macOS much closer to parity with Linux. - Thread-safe, more reliable automation. Public API calls and complete
MCP tool workflows now serialize access to shared backend and session
state, so concurrent or worker-thread usage no longer corrupts state or
stalls. - macOS responsiveness hardening. macOS now uses a configurable
messaging timeout (ax_messaging_timeout/TOUCHPOINT_AX_MESSAGING_TIMEOUT,
default 1 second) applied throughout element traversal, so an unresponsive
app is detected and skipped instead of hanging the whole session. - Faster element search on large Windows desktops. Windows searches now
skip obvious leaf controls, use direct control-type filters for exact role
queries, and fully read only matched elements, reducing overhead on big
accessibility trees. tp.configure()is now also a getter — calling it with no arguments
returns a copy of the current configuration.
Removed
- The
elementsMCP tool has been replaced bysnapshot(), which returns
a compact structured tree of the active window (in both vision and no-vision
modes). Thetp.elements()Python API is unchanged.
Fixed
- CDP windows now support OS-level window management. Minimize, fullscreen,
close, move, and resize on a browser/Electron page are routed to the
underlying native OS window (resolved by owning process), with a clear error
only when no native window can be found. (Window activation was already
supported.) - GTK4 apps are now controllable. Some GTK4 apps expose elements under
UUID-style paths that were previously misread as malformed, so they appeared
in listings but every action failed. They now work correctly. - Consistent errors for malformed element IDs. All backends now raise a
clearValueErrorwhen given a structurally invalid element ID, instead of
some platforms silently returning nothing. - Reliable Windows text selection. Text selection reads and selects from a
single source to avoid offset drift, and falls back to a native message for
classic edit controls that don't expose the modern text pattern. Multiline
edit fields are no longer mislabeled as single-line, and ordinary controls
are no longer falsely marked invalid. wait_forcorrectness.wait_for(..., wait_for_new=True)now records a
correct baseline of existing matches (previously it could behave as a no-op),
modeis validated immediately, and repeated queries are de-duplicated within
each polling cycle to avoid redundant tree scans.- Multi-monitor screenshots. Captures of elements on monitors positioned
above or to the left of the primary display now expand correctly instead of
being clipped back to the primary display's origin.
Platform support after 0.3.0
| Feature | Linux (AT-SPI2) | Windows (UIA) | macOS (AX) | Web / Electron (CDP) |
|---|---|---|---|---|
| select_text | ✅ Full | ✅ Full | ✅ Full | ✅ Full |
| Window management | ✅ X11 + wmctrl | ✅ Full | ✅ Full | 🚧 Routed to OS window |
Breaking Changes
- Removed the `elements` MCP tool; use `snapshot()` instead.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About Touchpoint-Labs/touchpoint
Playwright for the entire OS. Gives AI agents the ability to see, find, and interact with UI elements in any desktop application.
Related context
Related tools
Beta — feedback welcome: [email protected]