Skip to content

winuse 0.2.7

Latest

Choose a tag to compare

@straygizmo straygizmo released this 30 Oct 10:45

winuse 0.2.7 makes select_item and set_checked answer for themselves: both read the result back and say what reached the app, and a single_action switch stops them from acting twice for callers that must not resend an unconfirmed action. The winuse-gate plugin gains the winuse-operator subagent, which drives the app for Claude Code's main conversation so UI trees and screenshots stay out of its context.

Changes

  • select_item reads the selection back. The result reports item (the label that was matched and acted on), selected (what the container reports afterwards), method (mouse, selection, dom), actions (how many inputs reached the app) and outcome. done means the read-back named the item. A read-back that names another item is an error quoting what is selected, so a success result always means the item is selected. outcome: "unknown" with note means the container exposes no way to read its selection (no UIA Selection / Value pattern or SelectionItem state, no Java AccessibleSelection). The read-back is retried for about half a second for apps that update asynchronously.
  • UIA combo boxes are committed with a click. Selecting a popup item through the SelectionItem pattern and collapsing the popup leaves Win32 and Qt combo boxes on their old value, which earlier versions reported as success. select_item now clicks the item in the open popup, the way a user commits it, with the pattern path as the fallback; lists, tabs and trees keep the pattern first and the click as the fallback.
  • select_item single_action. With single_action: true the tool stops after the first path that delivered an input instead of trying the other one when the read-back disagrees; the mismatch error then says that no other method was tried. A mismatch error always names the paths delivered (2 actions delivered: mouse, selection).
  • set_checked reads the state back. The result reports method (toggle, selection_item, action, dom), toggles (0 when the control already had the state), checked (the state read back) and outcome. A toggle now gets about half a second to take before the next one is sent, so an asynchronously updating control is no longer toggled three times in a row; the default still sends up to 3 and then fails naming the toggles delivered and the state seen. single_action: true sends at most one toggle and reports outcome: "unknown" with note when the state still differs, instead of toggling again or failing.
  • winuse-gate plugin 0.2.0: the winuse-operator subagent. The main Claude Code conversation hands it the window and the goal; it reads trees and screenshots, drives the app and runs the assertions in its own context, and returns a short text report. Its passing assertions count for the gate (the hooks fire inside the subagent with the parent session id). The winuse-e2e skill now delegates the driving to it. Update the plugin with /plugin update winuse-gate@winuse.

Scenarios recorded with 0.2.6 replay unchanged. Behaviour changes for existing clients: select_item on a UIA combo box clicks the popup item instead of selecting it through the pattern, and a selection the app refused is now an error instead of a success; set_checked returns an object instead of a bare success, and takes up to about half a second longer when a toggle does not take at once.

Install

  1. Install the .NET 10 runtime (or SDK).
  2. Unzip winuse-0.2.7-win-x64.zip into a folder.
  3. Register with Claude Code: claude mcp add winuse -- <folder>\winuse.exe --mcp
  4. Set JEV_API_KEY, or CLOUDFLARE_ACCOUNT_ID and CLOUDFLARE_API_TOKEN, as user environment variables, then run winuse doctor.

Upgrading: unzip over the previous folder; no settings change.

Known issues

  • The combo box read-back and single_action are verified against Win32 controls and the Swing test fixture, not yet on the Qt app that reported them.
  • The operator subagent is Claude Code only; other MCP clients keep calling the tools directly.

Full changelog: CHANGELOG.md