Loading video...

Video Failed to Load

Go Home

Introducing agent-desktop Computer use for your agents ▲ E2E test desktop apps with agents ▲ Reads apps via the accessibility tree ▲ Drills into part of a window to save tokens ▲ Runs many agents on one app at once ▲ Works on macOS, Windows & Linux npm i...

70,781 views • 20 hours ago •via X (Twitter)

49 Comments

Lahfir ▲'s profile picture
Lahfir ▲20 hours ago

1/ Skeleton based drilling Agents don't need to see the whole screen, instead of exposing the entire screen, they can now drill through into only what they want.

Lahfir ▲'s profile picture
Lahfir ▲20 hours ago

2/ Multi-agent Run several agents on one desktop. Start a session with --multi-agent and give each agent an --agent-id. Each one gets its own cursor and label, so you can see who is doing what.

Lahfir ▲'s profile picture
Lahfir ▲20 hours ago

3/ Headless and headed Headless by default with an exception to few commands - `drag, menus, surfaces`

Lahfir ▲'s profile picture
Lahfir ▲20 hours ago

4/ With agent-browser agent-desktop pairs with agent-browser. agent-browser drives the web. agent-desktop drives native apps. Together your agent gets reliable computer use across the browser and the desktop.

Lahfir ▲'s profile picture
Lahfir ▲20 hours ago

Your agents can run agent-desktop in a Vercel Sandbox too. Start a Linux desktop in the cloud, run agent-desktop inside it, and get JSON back.

Lahfir ▲'s profile picture
Lahfir ▲20 hours ago

A ▲ Labs Experiment. Give your agents hands today npm i -g agent-desktop

Haki's profile picture
Haki19 hours ago

shoutout to @vercel team for making agent-browser

andré valle's profile picture
andré valle19 hours ago

reading apps through the accessibility tree is the smart move. way more reliable than guessing from screenshots

heath's profile picture
heath19 hours ago

I built helix, a personal tool to manage my AI agents, so I’m curious: what happens if two agents try to change the same app state at once?

Pranit's profile picture
Pranit19 hours ago

Yes sirrrrrr

Lahfir ▲'s profile picture
Lahfir ▲19 hours ago

lessgoo

Patrick's profile picture
Patrick17 hours ago

For those of you who might be using @omarchy tell Claude to "fork the repo and start installing and testing. Then every time you runs into an error or a limitation, code a solution and retest. Keep testing until the entire stack works" Thank me later.

Jeremiah's profile picture
Jeremiah18 hours ago

Tried it with Zed and it fumbled working in the background. MacOS Harness works better...

Lahfir ▲'s profile picture
Lahfir ▲18 hours ago

Was it taking the focus?

Jeremiah's profile picture
Jeremiah17 hours ago

It was at first and in the background it couldn't type into Zed since Zed exposes no accessibility ref for the editor while MacOS Harness sends keys straight to Zed's process. I had told it "open Zed and type out a joke then save it as a file."

Lahfir ▲'s profile picture
Lahfir ▲17 hours ago

'osascript' which I believe is what macos harness does, we should explore this. Thanks for the feedback

CoArena (YC S26)'s profile picture
CoArena (YC S26)13 hours ago

The window drill-down is a useful detail. Would love to see full-window vs drilled-down token counts at the same task completion rate, including screenshot fallbacks when controls are missing from the accessibility tree.

Juan Pinzón's profile picture
Juan Pinzón15 hours ago

There is focus problems on other frameworks using the accessibility tree any progress on this end?

Olgun's profile picture
Olgun19 hours ago

was thinking about to build something like that, awesome work

Pete Sena's profile picture
Pete Sena18 hours ago

Epic! There goes my whole weekend. LFG

Salem Sayed 🔻's profile picture
Salem Sayed 🔻11 hours ago

Hoping for hyperland support soon

adam's profile picture
adam18 hours ago

nice work

Lahfir ▲'s profile picture
Lahfir ▲18 hours ago

Thanks

Harsh Raj's profile picture
Harsh Raj18 hours ago

this is sick. what does it do on apps with half-labeled accessibility trees, fall back to screenshots?

Lahfir ▲'s profile picture
Lahfir ▲18 hours ago

It's like a iframe issue in web. Doesn't fallback automatically but you can get it working using --headed It's a really good surface to work on. Getting it working for poor accessible elements would be a banger

Harsh Raj's profile picture
Harsh Raj17 hours ago

ah got it, the iframe analogy helps. pretty cool shit you're working on. getting it to handle poorly labeled elements would be huge.

Lahfir ▲'s profile picture
Lahfir ▲17 hours ago

🫡

Anjana Supun's profile picture
Anjana Supun19 hours ago

This should be good

Marco D'Alia's profile picture
Marco D'Alia11 hours ago

great! will it works with agent-browser? Meaning it could for eg operate the browser and other apps together with an unified interface?

Lahfir ▲'s profile picture
Lahfir ▲11 hours ago

Yes! agent-desktop -> desktop apps, agent-browser -> browser surfaces / chromium apps

Marco D'Alia's profile picture
Marco D'Alia9 hours ago

nice, thanks!

Lucas Young's profile picture
Lucas Young10 hours ago

Drilling into just the place card (45 refs vs 75 for the whole window) is the part I want for long desktop runs. Couldn't try it on our headless Linux box yet since there's no AT-SPI bus there

Taesu's profile picture
Taesu19 hours ago

👀

Esteban Suárez's profile picture
Esteban Suárez15 hours ago

huge

Bragifer's profile picture
Bragifer11 hours ago

Running many agents on one app makes state isolation part of the test design. If one changes the screen while another asserts against it, a failure may reflect the test setup rather than an app bug.

Soph h's profile picture
Soph h19 hours ago

Great point!

Justin Wright's profile picture
Justin Wright15 hours ago

@bot check this out

Juliano | Building easi.run's profile picture
Juliano | Building easi.run15 hours ago

Background input looks useful for shared browser workflows. How do you handle a person taking over while an agent has actions queued? I'd want an explicit pause/hand-back signal before those actions resume, especially around logins and forms.

383degrees's profile picture
383degrees13 hours ago

stop moving the mouse lol. use a grid

DataMining's profile picture
DataMining12 hours ago

yeah reading the accessibility tree instead of guessing pixels is overdue. curious how often screenshot loops still win once the UI gets weird.

Sacha's profile picture
Sacha10 hours ago

i'm tired of javascript boss

Adar's profile picture
Adar12 hours ago

Bro how does it compare to Cua Driver?

Brian Gruber's profile picture
Brian Gruber18 hours ago

What is this sorcery?!

Lucky · CypherMonkey🐒's profile picture
Lucky · CypherMonkey🐒13 hours ago

Wowww

Shpeedle's profile picture
Shpeedle16 hours ago

nice man nice. how does it do with linux? I will have to try it out. I was doing something similar with boxcar: but I have not worked on it in a bit. Linux is a little trickier bc of wayland and an inconsistency in accessibility trees in app distributions.

Peter Prins's profile picture
Peter Prins8 hours ago

Wow, very cool! Looking forward to giving it a spin! Question: how does it handle permissions? E.g. How can I instruct it to never send e-mail or complete forms on websites?

Leo Piñeyro's profile picture
Leo Piñeyro16 hours ago

@ctatedev Really exciting stuff!

BreezeOg's profile picture
BreezeOg12 hours ago

accessibility tree instead of screenshots should save a ton of tokens

Danny Shmueli's profile picture
Danny Shmueli8 hours ago

Can it play an Unreal game for me? asking for my hospital game

Related Videos