Two verbs, and evidence for both
Thursday, September 10, 2026
Give an agent the smallest possible surface and make every action return evidence it worked. Two verbs beat twenty. Coordinates are the enemy, because a click at the right pixel on the wrong window looks exactly like success.
I wanted Claude Code to use my Mac. Not to write code about my Mac. To use it.
I gave it two verbs. snapshot and act.
That is the whole surface.
No coordinates
The obvious way is to screenshot the screen and click at x and y.
It is also the worst way.
A coordinate is correct until something moves. A window shifts, a font renders differently, a notification slides in. The click still happens. It lands somewhere else.
And it looks exactly like success.
So elements are addressed by identity instead. A role and a name. If the element is gone, the call fails loudly rather than clicking whatever moved into its place.
Evidence, or it did not happen
Every action returns proof it happened.
This is the part I would keep if I had to throw out everything else.
A click that landed nowhere has to be distinguishable from one that worked. Otherwise every recipe built on top is folklore. It worked once. Nobody knows why. Nobody can tell when it stopped.
Three rungs
There are three ways in, and they are not equal.
Accessibility, for native apps. Chrome's debug protocol, for pages. Screenshots, last.
Screenshots are last on purpose. A screenshot can only be acted on with coordinates, and coordinates are the thing I removed.
A probe() call reports which rungs are alive on your machine, because the answer differs per machine and guessing wastes an hour.
The permissions catch
Accessibility and Screen Recording are granted to your terminal application. Not to Claude Code.
Neither takes effect until you quit and reopen that terminal.
I lost time to this. It is in the README now, in bold, because it is the first thing that goes wrong.