You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Fixes a set of agent papercuts found while driving a live desktop:
- AT-SPI connect no longer fails when an AppArmor-confined snap app (e.g.
Slack) sits on the a11y bus: the atspi crate's default "p2p" feature
enumerates every peer during connect and one denied GetInterfaces call
aborted the whole AccessibilityConnection. Depend on atspi-connection
directly with p2p off (we never use P2P routing; see #31).
- Targeted press_key/type_text results now append focused-element feedback
(role, name, editable) read back from AT-SPI after the input, and warn
when no editable element holds focus — previously keystrokes could land
nowhere while the result reported verified window focus.
- Screenshot, click, and targeted input results warn when the target window
or coordinate is partially or fully off-screen. Monitor layout comes from
the GNOME Shell extension (logical space, used for window bounds) or the
captured frame size (physical space, used for click coordinates) — the
two spaces are never mixed, so fractional scaling cannot false-positive.
- New move_window / resize_window tools (GNOME Shell extension v2, which
also gains GetMonitorLayout) to recover off-screen windows. Old installed
extensions degrade with an explicit "rerun setup_window_targeting and
re-login" hint. resize_window unmaximizes first, handling both the
pre-49 (get_maximized + MaximizeFlags) and 49+ (is_maximized, flagless
unmaximize) mutter APIs.
- get_app_state now returns a compact readiness block by default and the
full diagnostics report only with verbose=true; failures point to the
flag instead of dumping portal/process diagnostics every call.
- scroll gains click-parity window targeting and window-relative
coordinates; press_key documents its full key grammar in the tool
description.
- Accessibility errors surface their full anyhow chain ({error:#}) instead
of the outermost context line.
- cargo update for RUSTSEC-2026-0190 (anyhow); justified cargo-audit
ignores for the build-time-only quick-xml advisories pulled in via
wayland-scanner (RUSTSEC-2026-0194/0195).
Copy file name to clipboardExpand all lines: README.md
+4-1Lines changed: 4 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -56,12 +56,15 @@ Screenshot payloads are size-bounded by default before they are returned to the
56
56
-`press_key` — keys / chords; can focus a window or terminal first
57
57
-`type_text` — literal text input, optionally targeted at a window or terminal
58
58
59
+
Targeted `press_key`/`type_text` results append focused-element feedback from AT-SPI (role, name, editable) and warn when no editable element holds focus. Click/screenshot/input results warn when the target window or coordinate is partially or fully off-screen. `get_app_state` returns a compact readiness block by default; pass `verbose: true` for the full diagnostics report.
60
+
59
61
**Semantic actions**
60
62
-`perform_action` — invoke any AT-SPI action exposed by an element (`Press`, `Activate`, `Toggle`, …); defaults to the primary action
61
63
-`set_value` — write to a settable accessibility element (text fields, sliders, spinners)
62
64
63
65
**Navigation**
64
66
-`activate_window` — focus a window by `window_id`, `pid`, `app_id`, `wm_class`, `title`, or terminal selectors
67
+
-`move_window` / `resize_window` — reposition or resize a window in desktop coordinates (GNOME Shell extension backend); useful to recover windows that are partially off-screen
65
68
66
69
### MCP safety contract
67
70
@@ -71,7 +74,7 @@ Screenshot payloads are size-bounded by default before they are returned to the
71
74
| --- | --- | --- |
72
75
| Read-only observation |`doctor`, `list_apps`, `list_windows`, `focused_window`, `get_app_state`|`readOnlyHint=true`; may reveal app, window, accessibility, and screenshot contents. `get_app_state` may trigger the desktop screenshot portal prompt. |
73
76
| Local setup mutators |`setup_accessibility`, `setup_window_targeting`|`readOnlyHint=false`, `destructiveHint=false`, `idempotentHint=true`; modifies user desktop configuration by enabling accessibility or installing/enabling the GNOME window-targeting extension. |
74
-
| UI state mutators |`activate_window`, `scroll`, `screenshot`|`readOnlyHint=false`, `destructiveHint=false`; changes focus or scroll position in the live desktop, or raises a window to capture it. |
77
+
| UI state mutators |`activate_window`, `move_window`, `resize_window`, `scroll`, `screenshot`|`readOnlyHint=false`, `destructiveHint=false`; changes focus, geometry, or scroll position in the live desktop, or raises a window to capture it. |
75
78
| Desktop action mutators |`click`, `drag`, `press_key`, `type_text`, `perform_action`, `set_value`|`readOnlyHint=false`, `destructiveHint=true`, `openWorldHint=true`; can trigger arbitrary actions in whatever local application is targeted. |
76
79
77
80
Annotations are safety hints, not an authorization system. MCP hosts should still ask the user before calls that could submit, delete, send, purchase, overwrite, or otherwise commit state.
0 commit comments