Computer Use

A computer your agent can see and operate.

Full desktops, Linux, Windows and macOS, with screenshot, mouse, keyboard and scroll as first-class API calls. Your agent drives real GUI apps, installers and legacy software, and you can hand the same machine to a person over a 60fps stream.

npx sandal new --runtime vm --os ubuntu-desktop
H.264 stream
60 fps
H.264 stream
Linux · Win · Mac
3 OSes
Linux · Win · Mac
resume
<200ms
resume
control
OS-level
control
The problem

Browser automation isn’t computer use.

A headless browser can click a web page. It cannot open a desktop app, run an installer, operate legacy software or a native file dialog. Agents doing real work need a whole computer, isolated, pausable, and drivable by both a model and a human.

  • Agent control

    Beyond the browser

    Most real tasks live in native apps and OS chrome the browser can’t reach. Computer use operates the whole machine.

  • Computer use

    Model and human, one machine

    An agent drives most of the time; a person needs to take the wheel for the hard moment. Both need the same live desktop.

  • Isolation

    Isolated and cheap to keep

    A desktop per task must be sandboxed and free while idle, or the approach doesn’t scale past a demo.

How it works

See it, operate it, hand it off.

The same loop a person runs at a desk, screenshot, decide, act, exposed as function calls with return values.

computer-use.tsDrive the desktop
const vm = await sandal.sandboxes.create({
runtime: "vm", template: "ubuntu-desktop",
});
// see the screen the way the agent does
const png = await vm.computer.screenshot();
// operate it at OS level
await vm.computer.click(420, 220);
await vm.computer.type("quarterly-report.xlsx");
await vm.computer.hotkey("cmd", "s");
  1. 01

    Boot a desktop

    Create a VM with a real windowing system on Linux, Windows or macOS. Warm claim under 200ms.

  2. 02

    See

    Screenshot at full resolution on demand, or open a 60fps stream, the pixels the agent reasons over.

  3. 03

    Operate

    Move, click, drag, type, key-combo and scroll at OS level, not through a browser shim.

  4. 04

    Hand off

    Drop the live desktop into your product with one component, or send a signed link so a human can take over, then pause to $0.

Capabilities

The whole desktop, as an API.

  • 01

    Vision + input

    Screenshot, move, click, type, scroll and hotkeys, the full set, on one channel.

  • 02

    60fps remote desktop

    Stream over WebRTC for human-in-the-loop, or connect RDP/VNC.

  • 03

    Linux, Windows, macOS

    The same primitives across all three desktops; only the OS underneath changes.

  • 04

    Any GUI app

    Installers, native apps, legacy software, a browser, if it runs on a machine, the agent can drive it.

  • 05

    Scoped stream tokens

    The stream is signed for one VM with the scopes you set and dies with the machine.

  • 06

    Pause-to-zero

    A configured desktop pauses to $0 between tasks and resumes exactly where it was.

Built on Sandal

The products that power it.

Computer use is powered by Sandal’s VM and device surfaces.

Live desktop stream
CodeFileEditSelectionViewGoTerminalWindowHelpWed 16:45
agent.py · sandbox
Explorersandboxagent.pybrowser.pyvision.pytestsREADME.md

1from sandal import Sandbox

2

3# boot a desktop the agent can see

4vm = Sandbox.create(desktop=True)

5vm.screenshot("before.png")

6

7vm.click(x=412, y=280)

8vm.type("hello from the agent")

9vm.key("cmd+s")

10

11# read the screen back

12frame = vm.stream.latest()

13assert frame.contains("Saved")

zsh, sandal

➜ sandbox sandal desktop --stream

connecting to vm_7c31…

✓ stream open · 60fps · 18ms latency

screenshot → before.png

click(412, 280) · type · cmd+s

✓ saved

➜ sandbox

60fps
Get started

Hand your agent a desktop.

Not a browser, a whole computer it can see and operate, on any OS. Paused costs nothing.

npx sandal new --runtime vm --os ubuntu-desktop