Features / Desktop and computer use

A desktop your agent can see and use.

Every sandbox runs a 1920×1080 desktop with Google Chrome. Agents take screenshots, click, type and scroll through the CLI, the API or MCP. Playwright and Puppeteer connect to the same Chrome, and you can watch it all in your browser.

curl -fsSL https://pols.so/install.sh | sh
Screenshot of the whole desktop
345 ms
Each click, type, key or scroll action
90–160 ms
Playwright connected to Chrome
1.8 s

Measured on 30 September 2026 against our sandbox host. Playwright ran on a machine outside the data centre.

Three ways in

  1. Pixels

    pols computer takes a screenshot and sends clicks, drags, typing, key chords and scrolling, at pixel coordinates from the top left. It works for any application, file dialogs included.

  2. Chrome over CDP

    pols browser cdp returns a WebSocket URL for Playwright or Puppeteer, valid for 5 minutes and only for that sandbox. Chrome's debugging port listens only inside the VM; pols relays the connection.

  3. Your own eyes

    pols desktop prints a link to the desktop in your browser. Watch an agent work, or take over the mouse. The link lasts 12 hours and ends when the sandbox stops.

From the CLI or from code

An agent loop is a screenshot, an action and another screenshot to check the result. Over MCP, the same actions are the tools computer_screenshot, computer_click, computer_type and so on, andbrowser_cdp for the browser.

For web pages, CDP is faster and more reliable: selectors instead of coordinates.

pols CLI
$ pols computer screenshot web -o before.png
$ pols computer click web 960 540
$ pols computer type web 'hello world'
$ pols computer key web Return
$ pols computer screenshot web -o after.png
TypeScript
import { createPolsClient } from "@peweo/pols";
import { chromium } from "playwright";

const pols = createPolsClient({
  apiKey: process.env.POLS_API_KEY!,
});
const { websocket_url } = await pols.browser.cdp("web");

const browser = await chromium.connectOverCDP(websocket_url);
const [context] = browser.contexts();
const page = await context.newPage();
await page.goto("https://example.com");

More of pols

  • Forks and templates

    Copy a sandbox into a second running VM in 0.64 s, or save it as a template.

  • HTTPS ports and SSH

    Any port at its own HTTPS address, private until you share it. SSH with your own keys.

  • Hosted in Germany

    Disks, templates and the encrypted vault stay on our servers in Germany.

Start with one machine.

Install the CLI, sign up, and give your agent somewhere to work.

curl -fsSL https://pols.so/install.sh | sh