Desktop waits for a change, and starts the app it needs.
Version 1.36.0 ·
It waits for an element to appear or go instead of polling, finds a run step's element when the step runs, and starts an app that is not running behind the one in front.
Share this release
Desktop waits for a change, and starts the app it needs. It waits for an element to appear or go instead of polling, finds a run step's element when the step runs, and starts an app that is not running behind the one in front. https://cupertino.mgcrea.io/changelog/1.36.0/
Added
Desktop can start an application that is not running.
apple_desktop_launchopens it behind whatever is in front and waits until it answers, up to 10 s, so its controls can be read and pressed while the person keeps their keyboard. It takes a bundle identifier and nothing else, is write-gated and scoped like the other driving tools, and shows the "Cupertino opened" notice. An application already running is left alone, one that takes the front anyway is sent back behind, and one never opened on this Mac is refused rather than stopping at a Gatekeeper dialog. With "Reach any application" on, any installed application can be started. A verb refused because an application is not running now says so and names the tool.Desktop can wait for a change instead of polling for it.
apple_desktop_wait_forblocks until an element matchingid,role,nameorvalueappears, or withstate: "absent"until it is gone, for up to a minute, and answers with the matches and their handles. It re-reads the tree every quarter second and sooner when the app posts a change. A timeout is an error saying what the last read saw, so arunstops there, and Esc in Claude Code ends it. It replaces chains ofwaitsteps andfind_elementscalls.A
runstep can name its element instead of passing a handle. A step that takes ahandlecan takematchandbundleIdinstead, and the element is found when the step runs, waiting up to two seconds by default for it to appear. A step can now press an item in a context menu the step before it opened, which a handle read before the run could never reach. A match that finds several elements fails the step unlessindexpicks one.find_elementsmatches onvalue. A static text keeps its text in its value rather than its name, so it could only be found by reading the whole tree.
Fixed
set_valuereaches SwiftUI text fields. Written while the field was not focused, the text showed in the field and read back as written, but the app's own state never received it, so a prompt typed into Drakar and sent went out empty.set_valuenow focuses a text field before writing, without bringing the app forward, and saysfocusedin its answer.Desktop says an app quit rather than calling it busy. A handle into an app that had crashed answered "did not answer in time. The app may be busy; retry". It now says the app quit, with its pid and the crash report when there is one.