Vercel Labs Releases Open-Source Desktop Control Tool for AI Agents
Vercel Labs has released agent-desktop, an Apache-2.0-licensed CLI and C library that lets AI agents operate apps on macOS, Windows and Linux through operating-system accessibility trees rather than screenshots. The tool returns structured JSON and requires no embedded LLM or vision model, with accessibility-based actions designed to avoid moving the pointer or taking focus. Its reported token savings are self-reported, lack independent benchmarking and do not address apps without accessible UI trees.
AI Brief
The release gives developers a concrete, model-agnostic option for desktop automation while exposing clear accessibility constraints and unverified efficiency claims.
Vercel Labs has released agent-desktop, an open-source CLI for AI agent computer use on macOS, Windows and Linux. agent-desktop reads each app through the operating system’s accessibility tree, not through screenshots. An agent gets a JSON snapshot with a ref for every element it can act on. Version 1.0.2 shipped on October 30, 2026, under Apache-2.0. For developers, any shell-capable coding agent can now drive native apps without a vision model.
Performance: Deterministic, retry-safe ref actions. No independent computer-use benchmark yet.
Best: 78% to 96% fewer tokens on dense Electron apps via skeleton traversal (self-reported).
What is agent-desktop?
agent-desktop is a Rust CLI and C library from Vercel Labs for reading and operating desktop apps. It is a tool that agents call, not an agent. It embeds no LLM and has no GUI. Every command prints one JSON envelope and exits. The observe, act and verify loop stays in your agent.
How does agent-desktop work?
Each command flows through a fixed chain. The CLI or C library calls agent-desktop-core, which reaches the OS only through a PlatformAdapter trait. One platform crate then talks to the native accessibility API:
macOS: AX API
Windows: UI Automation
Linux: AT-SPI
Core never imports a platform crate. Each binary is compiled to drive exactly one OS.
Snapshots and refs
A snapshot assigns qualified refs such as @s8f3k2p9:e8. The snapshot ID inside the ref makes it self-describing. A bare @e8 is rejected with INVALID_ARGS. When the UI changes, an action returns STALE_REF or AMBIGUOUS_TARGET. The agent then takes a fresh snapshot.
Dense apps can expose thousands of accessibility nodes. A --skeleton snapshot reads only 3 levels deep. Cut containers report a children_count and get a drill ref. snapshot --root then reads one region into the same snapshot.
The builder reported a 78% to 96% token cut versus full-tree dumps in Slack, VS Code and Notion. In Apple Maps, he reported 3,811 tokens per look falling to 273. A simulated 52-step task dropped from 198k to 31k tokens. These are self-reported figures, not an independent benchmark.
Headless by default
Ref actions go through the accessibility API without moving the pointer or taking focus. That is what lets agents work while you keep using the machine. The global --headed flag allows physical input when needed. Every ref action also auto-waits up to 5,000 ms for a visible, enabled, stable target.
Install with npm install -g agent-desktop. Bun, Yarn and pnpm work too. The package bundles native binaries for x64 and ARM64.
macOS: grant Accessibility permission with agent-desktop permissions --guide.
Windows: no grant needed for apps at your terminal’s integrity level.
Linux: needs a graphical session with at-spi2-core.
Agents learn the tool from bundled docs via agent-desktop skills get desktop. A skill is also listed on skills.sh. The C library lets Python, Swift, Go, Ruby and Node hosts call it in process. For Electron web contents, launch --cdp opens a DevTools port for agent-browser.
Key Takeaways
agent-desktop gives any agent computer use through OS accessibility trees.
It runs on macOS, Windows and Linux, x64 and ARM64, under Apache-2.0.
Headless ref actions never move your pointer or steal focus.
Skeleton snapshots cut tokens 78% to 96% (self-reported).
Apps without an accessibility tree remain out of reach.
Comments & Questions (0)
No comments yet
Be the first to comment!