mrkeyoor.com_
Mon 02 Nov 22:45 UTC
Automationevaluationupdated 02 Nov 2026

agent-desktop review

Agent Desktop is a CLI and C library that lets an AI agent read and operate desktop applications through the operating system's accessibility tree. It returns JSON snapshots with references to controls, while your agent decides what to do and checks the result. The current README documents macOS, Windows and Linux support, with different capabilities and permissions on each.

Verdict

Our Agent Desktop build failed after 116 seconds and the test command also stopped in compilation, so this run does not validate desktop control on any platform. The current accessibility-tree interface is worth a focused trial if you already own the agent loop and can meet the target desktop's session requirements. Start with read-only snapshots on that desktop, then verify a bounded action before allowing the agent to operate important applications.

We ran it

Lab card: what happened when we ran agent-desktopScreenshot of agent-desktop (agent-browser.dev/desktop)
Install✓ · 21s145 packages
Build✗ · 116s
Tests✗ · 25sran, no count parsed
Repo3681 files~416,687 lines of source · 60.2 MB · 8 CI workflows · tests dir

Answers from our run

Does agent-desktop build from source?

Dependencies installed in 21 seconds (145 packages), and the build failed. We cloned commit 9eb9b29 into a clean Debian container with 3 CPUs and no project-specific setup.

Do agent-desktop's tests pass?

No. The project's own test command exited unsuccessfully after 25 seconds, and its output did not expose an individual test count.

Who should not use agent-desktop?

Operators expecting an ordinary SSH shell to see Linux desktop apps: the install guide requires the graphical session's bus, display and runtime environment.

What are the alternatives to agent-desktop?

Peekaboo, nut.js. Our Agent Desktop build failed after 116 seconds and the test command also stopped in compilation, so this run does not validate desktop control on any platform.

SetupN/AThe source build and test commands failed in macOS-crate compilation; a supported host-scoped or packaged installation was not reproduced.
Docs4/5Under the body rubric, explicit platform limits, permission instructions, snapshot references and retry rules support 4; the documented runtime behavior was not exercised.
CommunityN/ARecent repository and pull-request activity was visible, but maintainer responsiveness and support quality were not assessed.
MaturityN/AThe failed source run supplies no live accessibility, action-delivery or recovery validation from which to judge operational maturity.

Who it’s for

Agent builders who already have a planning loop and want structured desktop observations and actions.
Teams that can run inside the target desktop session and grant the required OS permissions.
Developers willing to handle stale references, ambiguous windows and explicit retry decisions in their own agent.
Applications that need a C library interface rather than spawning the CLI for each command.

Who it’s NOT for

Operators expecting an ordinary SSH shell to see Linux desktop apps: the install guide requires the graphical session's bus, display and runtime environment.
Wayland workflows requiring app pointer input or native window control: the guide says these are refused or unsupported.
Agents needing persistent key-down or mouse-down actions: the README says held-input commands refuse to run until a daemon can release them.
Teams wanting a complete autonomous planner inside the CLI: the README leaves the observe, act and verify loop in the caller.

Setup reality

Our November 2, 2026 run at 9eb9b29 installed 145 dependencies in 21 seconds. The build failed with exit 101 after 116 seconds, and tests failed with exit 101 after 25 seconds. Both tails ended in agent-desktop-macos compilation errors, including unresolved accessibility_sys references; they did not report completed test cases.

The documented npm and native-archive routes include platform helpers; neither was validated by this source run. macOS needs Accessibility permission, Windows input must match the target's integrity level, and Linux needs a graphical session with at-spi2-core. The native CLI examples require no model-provider credential; the optional JEV helper sends screen descriptions to a configured provider.

The recorded sandbox had 3 CPUs, 12 GB RAM and image label lab-rust:1, which does not establish the actual OS or Rust version. Current development guidance says platform adapters build only on their own OS and scopes Cargo commands accordingly. The supplied tails do not establish the exact cause of our macOS-crate errors or validate that documented route.

Agent Desktop leaves the planning loop in your agent

Agent Desktop returns JSON snapshots with references to desktop controls, then lets the caller act on those references and observe again. That is a useful integration shape if you already have an agent deciding what to do. You get an interface to desktop applications without making screenshot coordinates the only way to identify a target. The README leaves the planning and verification loop in your agent.

The current platform table covers macOS, Windows and Linux. Their capabilities differ, and none was exercised by our sandbox run. Choose the target desktop before designing the workflow. In particular, Linux graphical-session access and Wayland restrictions can decide whether the interface covers your task at all.

What happened when we ran it

Our Agent Desktop run installed 145 dependencies in 21 seconds at commit 9eb9b29 on November 2, 2026. The build failed with exit 101 after 116 seconds. Its tail named agent-desktop-macos and reported 122 errors and 74 warnings, including an unresolved accessibility_sys reference in renderer_probe.rs.

The test command failed with exit 101 after 25 seconds. Its tail ended with the same macOS-library compilation summary. These are failed commands, not a count of failed test cases. The supplied record contains no completed-case summary, so it cannot support a passing-test claim or a conclusion about action correctness.

The compiler output also listed several Rust error codes. The unresolved module is a concrete failure location, but the tail does not establish why the crate reached that state. The README now says each platform adapter builds only on its own OS and scopes development commands to host packages. That instruction matters for the next attempt. It does not prove which command or environment condition caused this one to fail.

Our recorded sandbox had 3 CPUs, 12 GB RAM and image label lab-rust:1. Actual runtime and OS versions require the raw logs. The checkout occupied 60.2 MB, with 3,681 files and approximately 416,687 source lines. The scan found 8 CI workflow files and a tests directory, with no Dockerfile. We did not observe a live desktop, inspect a screenshot or verify a delivered click.

Snapshot references require fresh observations

The README rejects bare element references and associates each usable reference with its snapshot. When the UI changes, the documented response can be STALE_REF or AMBIGUOUS_TARGET. Your agent needs to take another snapshot and choose again. That contract is more useful than silently clicking a nearby control, provided the implementation behaves as documented. Our run did not verify it.

Multiple windows also require a decision. The documented error supplies candidate window IDs, and the caller chooses one explicitly. For a dense application, the skeleton view and branch drill-down offer a way to inspect a smaller region. Evaluate those operations against the actual application your agent must use, including screens that change while the agent is reasoning.

Errors carry retry information, and the README says to retry only when the disposition marks it safe. A failed command should therefore enter your agent's recovery logic rather than trigger an unconditional repeat. Held-key and held-mouse commands are another explicit boundary: their names exist, but the README says they refuse to run until a daemon can own release of the input.

Linux needs the user's graphical session

The installation guide says a TTY or SSH shell without the graphical session's environment cannot see its apps. Linux requires at-spi2-core; its primary documented target is Ubuntu with GNOME. Plan where the process runs before evaluating its application coverage.

Wayland has a narrower action surface. On Wayland, app pointer input refuses and native window control is unsupported. Semantic accessibility actions remain documented, while clipboard handling needs wl-clipboard. If your task depends on physically dragging inside an application or moving its window, that distinction can rule out the deployment even though the platform table says Linux is supported.

macOS requires Accessibility permission, with additional grants for screenshots and Notification Center operations. Windows can send input only at the appropriate integrity level. These are operating conditions for the tool. A successful dependency installation cannot establish that the running terminal has them.

Desktop observations can contain private application data

The README warns that snapshots, clipboard reads and screenshots can contain private desktop content. Treat the returned JSON and debug artifacts accordingly when connecting the CLI to agent logs. The optional JEV helper sends screen descriptions to a configured model provider, separately from the native CLI. Decide which observations the agent needs before forwarding them elsewhere.

The documented package and archive routes bundle native helpers. For a direct archive deployment, the installation guide says to keep the executable and helper together and replace both from the same release. That packaging requirement deserves attention in a deployment script, but we did not reproduce either route.

Peekaboo and nut.js change who owns the workflow

Peekaboo is a macOS CLI and menu-bar app with screen capture, accessibility inspection and native UI automation. It also has an agent mode and an MCP interface. Evaluate it when those entry points are part of the requirement. Its README requires macOS 15 or later for the released app and CLI.

nut.js provides keyboard, mouse and image-matching automation. Its README limits Linux support to X11 and distinguishes source availability from subscription-based prebuilt packages. It fits a different integration decision: writing programmatic UI scripts with those interfaces. We have no comparative reliability result for either alternative.

Documentation earns 4 on our editorial scale: 1 means essential guidance is absent, 2 means major gaps, 3 means a usable path with gaps, 4 means detailed guidance with explicit limits, and 5 requires corroboration through the reviewed workflow. Setup, support quality and operational maturity remain unassessed. On your target desktop, capture a read-only snapshot and confirm the intended control is identifiable before granting the agent a mutation task.

Alternatives

ProjectWhat it isPick it when
PeekabooA macOS CLI and menu-bar application for screen capture, accessibility inspection and native UI automation, with an agent and MCP interface.Choose this when a Mac app, its own agent mode or MCP access is central to your workflow; its released CLI and app require macOS 15 or later.
nut.jsA native UI automation toolkit with keyboard, mouse and image-matching interfaces.Evaluate this when you want programmatic input and image matching in your own scripts; its README limits Linux to X11 and puts prebuilt packages behind subscription plans.

What people are saying

  1. [github-trending] vercel-labs/agent-desktop
  2. [github-trending] abcwyc/pi-agent-desktop

Sources

  1. Agent Desktop README
  2. Installation and platform permissions
  3. Peekaboo README
  4. nut.js README
  5. Repository metadata
  6. Recent issue and pull-request activity

More automation reviews

Microsoft-Rewards-Script · moli · MatrixMedia · skill-recorder · BPB-Wizard · wenzi-xiaohongshu-workflow · the whole board →