Skip to content

v1.1.0 — Cheaper observation, verified clicks

Choose a tag to compare

@jslatten jslatten released this 23 Aug 00:00
· 6 commits to main since this release

Screenshot, input, window, clipboard, and app-launch control for Claude on Linux desktops.

This release is about token cost. A review of a real session found the action tools already near-optimal while the observation tools dominated; everything below was measured on a 4768x1440 dual-monitor KDE Wayland desktop.

Fixed: crops reported the wrong coordinate space

Capturing a single monitor or region described itself as downscaled "from 4768x1440" and gave no crop origin. For a monitor starting at desktop x=2208, every coordinate read off that image was wrong by 2208px — and the failure looked like a mis-aimed click rather than a bad conversion. Crops now state where they start and how to convert back:

Screenshot 1193x671, downscaled 0.466x from 2560x1440, cropped from desktop (2208, 0).
Desktop coords: x = 2208 + ix/0.466, y = 0 + iy/0.466.

If you used monitor: or region: before, this is the reason to upgrade.

click now reports what it hit

It previously returned success unconditionally, so a click on empty desktop or the wrong monitor read exactly like one that worked, and only a screenshot could tell them apart. It now names the window under the point, resolving overlaps with KWin's stackingOrder, and says when a point is empty desktop. Backends without stacking order report ambiguity rather than naming a window they cannot confirm. Costs about 15 tokens; replaces a 789–1470 token verification screenshot.

Screenshots gained a pixel cap

Clamping only the longest side made cost depend on aspect ratio — the whole desktop fit in 1400x423 (789 image tokens) while one 2560x1440 monitor became 1400x788 (1470). Cropping to a single screen cost nearly twice as much as capturing both, which is backwards. LCU_MAX_IMAGE_PIXELS (default 800,000) applies alongside the dimension limit.

The dimension default stays at 1400. Dropping it to 1000 was tested and rejected: at 1000 a full-desktop capture becomes 1000x302, where terminal text is unreadable, for a saving of only ~390 tokens.

Cheaper listings

Before After
list_applications (default) 2,661 tok 634
list_windows (filtered) 568 tok 79
screenshot, one monitor 1,470 tok 1,067

list_windows takes query and limit. list_applications defaults to 25 results and omits exec and categories unless detail: "full" — two thirds of the payload, and not needed to launch anything.

Also

get_desktop_info reports focus_policy, because text arriving in the wrong window looks identical whether the cause is focus-follows-mouse, focus stealing prevention, or a click that missed.

Install

Download linux-computer-use-1.1.0.mcpb and open it with Claude Desktop, then restart Claude Desktop — the tool list is cached, and without a restart the updated tools will not appear.

For system setup that a bundle cannot do itself (a udev rule for /dev/uinput, or the GNOME Shell extension), ask Claude to "set up computer use", or clone the repo and run ./scripts/setup.sh.

Verifying

python3 scripts/selftest.py opens a test window and drives the real backends against it. Results depend on whether that window takes keyboard focus, so run it from a terminal you are sitting at and expect the input checks to vary if it does not.

Checksum

bcf9be54a17093fc35d3f7839e4c43544d3881bae40474d7532d42525e986e17  linux-computer-use-1.1.0.mcpb