What is agent-desktop?
agent-desktop is an open-source tool from Vercel Labs that gives an AI agent hands on a desktop computer. It sits in the Computer & Browser Use category of the Agents & Automation tools and is open-source, written in Rust and licensed Apache-2.0. To get started: install the CLI.

Overview
agent-desktop is an open-source tool from Vercel Labs that gives an AI agent hands on a desktop computer. It is a command-line program and a C library that read the user interface of native apps on macOS, Windows and Linux and act on it: click, type, scroll, manage windows, read notifications and the clipboard. It is a tool that agents call, not an agent itself, and it contains no model. For web pages, the same team points you to its sibling project, agent-browser.
The key design choice is the accessibility tree. Instead of matching pixels in screenshots, agent-desktop reads each app through the operating system's own accessibility APIs — the AX API on macOS, UI Automation on Windows and AT-SPI on Linux. A snapshot returns JSON with a snapshot ID and a ref for every element an agent can act on, and actions target those refs (for example `@s8f3k2p9:e8`). The trade-off is stated plainly: an app that publishes no accessibility tree is invisible to it.
Every CLI call runs as its own process, and the reasoning loop stays in the agent: observe with a snapshot, act on a ref, then snapshot again to verify. Errors such as `STALE_REF` and `AMBIGUOUS_TARGET` tell the agent to look again. Ref actions are headless by default, so they do not move the pointer or steal focus; a global `--headed` flag switches to physical input. The binary also ships its own skill docs matched to its version, which an agent can load with `agent-desktop skills get desktop`.
What it does
- Reads native desktop apps through the OS accessibility tree on macOS (AX API), Windows (UI Automation) and Linux (AT-SPI) — no pixel matching
- JSON snapshots with a snapshot ID and a ref per actionable element; bare refs like `@e8` are rejected so stale targets are caught
- About 60 commands with the same names on every platform: observation, ref actions, keyboard and mouse, apps and windows, notifications, clipboard, waits and sessions
- Headless by default — ref actions don't move the pointer or take focus — with a global `--headed` flag for physical input
- Version-matched agent skill docs built into the binary (`agent-desktop skills get desktop`)
- An in-process C library (`libagent_desktop_ffi`) for calling it from other languages, shown with a Python `ctypes` example
- Native binaries for x64 and ARM64, installed through npm, Bun, Yarn or pnpm
Getting started
agent-desktop supports macOS 13 or later, Windows 10 1809 / Windows Server 2019 or later, and Ubuntu 24.04 or later. On macOS it needs Accessibility permission; on Linux it needs a graphical session with `at-spi2-core`.
Install the CLI
Install the package globally (Bun, Yarn and pnpm work too), then check the version and what your platform supports.
npm install -g agent-desktop
agent-desktop version
agent-desktop statusGrant permissions on macOS
macOS requires Accessibility permission for the terminal that runs agent-desktop. The built-in guide walks you through it. Windows needs no extra grant for apps at the terminal's integrity level.
agent-desktop permissions --guideObserve, act, verify
Take a snapshot of an app's interactive elements, act on a ref from that snapshot, then snapshot again to confirm the change. Refs are tied to the snapshot they came from.
agent-desktop snapshot --app Finder -i # interactive elements, each with a ref
agent-desktop click @s8f3k2p9:e8 # act on a ref from that snapshot
agent-desktop snapshot --app Finder -i # observe again to verifyHand it to your agent
Load the version-matched skill guide into your agent first, list the running apps, and map dense apps with a compact skeleton before drilling into a region.
agent-desktop skills get desktop
agent-desktop list-apps
agent-desktop snapshot --skeleton --app Slack -i --compactCommands and code are distilled from the project's own documentation — always check the official repo for the latest.
When to use it
- Letting a coding agent such as OpenCode write a note in a native text editor, save it, and confirm the file in Finder
- Automating desktop apps that have no API, by acting on their accessibility elements instead of screen coordinates
- Giving an agent the same command set on a Mac, a Windows machine and a Linux desktop
- Calling desktop automation in-process from a Python or other program through the C library
How agent-desktop compares
agent-desktop alongside other open-source computer & browser use tools AI/TLDR tracks, ranked by GitHub stars.
| Tool | Stars | What it does |
|---|---|---|
| Browser Use | ★ 120k | A Python library that lets agents control a real browser to read pages and complete tasks online from natural-language instructions. |
| Open Interpreter | ★ 68.8k | A lightweight coding agent that runs code on your own computer to carry out tasks from natural-language requests. |
| Chrome DevTools MCP | ★ 54.7k | The Chrome team's MCP server that lets a coding agent control and inspect a live Chrome browser — performance traces, network requests, console messages and Puppeteer-backed automation. |
| UI-TARS Desktop | ★ 39.5k | ByteDance's multimodal agent stack and desktop app that controls a computer's graphical interface using vision-language models. |
| CloakBrowser | ★ 32.7k | Stealth Chromium build with source-level fingerprint patches that drops into Playwright or Puppeteer code, so agents and scrapers browse without tripping bot detection. |
| invisible_dots | ★ 32.4k | Self-hosted AI agents that each run in their own QEMU VM with a desktop and a stealth Firefox, on any OpenRouter model. |
| AIHawk | ★ 32.4k | Browser agent on a stealth Firefox that takes plain-language tasks and clicks, types and reads real pages - usable as an MCP server from Claude Code, Codex or Gemini CLI, or via its own web UI. |
| agent-desktop | — | A computer-use CLI and C library that lets AI agents read and operate desktop apps through the OS accessibility tree |
