A granted seat can get its own Linux desktop. It clicks, types, and takes screenshots. You solve CAPTCHAs. Default host: Docker on this machine. Same desktop can run on a VPS so work continues with the laptop shut. Setup: Computer host. This is not Browser control. It is not granted by *. Works on Claude, Grok CLI, Codex CLI, and OpenAI-compat (Qwen / Ollama / local). Not Navi — but Navi decides which seats get one: at staff time (compose_office named seats with computer: true) or later with seat_computer. Ask her, or flip it yourself in the Directory.
Computer is off unless you set PORTO_COMPUTER=1 and the host is up. Quit Docker, or miss the VPS endpoint, and chat still works. The next Computer tool is a typed refuse.

Before you start

Follow Computer host first. Short version for local Docker:
  1. Docker Desktop is running on the API machine.
  2. The desktop image exists: porto/computer:v1.
  3. PORTO_COMPUTER=1 is in backend/.env (API and runner both source this file).
  4. You restarted the API after setting the flag.
Check:
You want "ok": true and "image": { "present": true }. Local Docker also shows "host": "local_docker" and "live_view": "loopback". A VPS host shows "host": "vps" and "live_view": "screenshots". If the report says image_missing, build the image on that engine (see Computer host). Then restart the API. GET /computerz is public, like /browserz. Start / stop / live view require the same owner bind as chat.

1. Add the operator seat

1

Open Add agent

In the room, click + Add agent.
2

Pick Claude, Grok CLI, or Qwen (local)

Not Navi. Connect the host in Settings first. A local Qwen seat needs a vision model (VL), not a text-only tag.
3

Pick a role that is not Navi

Engineer is fine. Computer is never on by default. The preview lists Use a Computer under what this seat cannot do.
A * engineer still does not get Computer.

2. Turn Computer on

The fastest path is the Directory row. Hover the seat. Click Computer (the monitor, next to Tools). That grants Computer and starts a desktop for that seat. The panel says Idle — this seat has a Computer; ask it in chat. Take over and Watching only after the seat actually uses the desktop. Navi has no Computer control. Or do it from Tools:
  1. Click the seat name. Open Tools.
  2. Find the caution row Computer.
  3. Flip the switch on.
  4. Wait for the next turn. The grant applies then. Ask the seat to use the desktop, or click Computer on the Directory row to start it now.
The Tools tab is one Computer column, not ten computer_* names. Navi has no Computer column. Turning Computer on (Tools, Settings, or Directory) opens a short popup: Computer needs Docker Desktop. If Docker is not installed, the popup has a copyable install command for this computer and a download link. If Docker is installed but not running, it says Docker Desktop needs to be running. Chat still works.

3. Ask it to use the desktop

The next turn after the grant, the seat is told it has a Computer and when to use it. Computer is the real page (LinkedIn, JS apps, tabs, named clicks). web_search is facts. You do not have to say “use the Computer.” Mention the seat in chat. Example:
Open computer/fixtures/form_captcha.html on the Computer. Fill name and email from the resume at the project root. When the mock “I am not a robot” box appears, request a human.
What happens:
  • Porto starts one Docker desktop for that seat.
  • The agent opens Chromium on that desktop (same profile; new tab when CDP is up). It can snapshot the page, click named refs, attach a file from /home/computer/inbox, and you will see the cursor move.
  • Each click or type writes a JPEG under artifacts/computer/{agent_id}/shots/.
  • Those shots show in chat. Do not read_file them. Vault PDF / Word / Excel read_file returns markdown.
The live desktop is the right-side Computer panel: ?panel=computer&seat={agent_id}. Directory Watch, or click Computer on the row, opens it. While the agent has the floor, the view is watch-only. Take over gives you the floor: a pointer dot, clicks, and typing. Cmd+V / Cmd+C / Cmd+X (Ctrl on Windows and Linux) work in the live view like any desktop: paste lands in one shot, copy reaches your own clipboard. The footer Paste and Copy buttons do the same when the browser refuses clipboard access. The lock is server-side (x11vnc restarts without -viewonly). The iframe query string is display only. On local Docker, the desktop mounts the project vault and the code root (/host/project, /host/code). Put the resume in the project. A VPS desktop does not get those laptop paths.

4. When it needs you

The agent hands you the floor. The turn ends. You see:
  • A Computer needs you card in chat
  • Inbox computer hold
  • Cover chip Your turn
Then:
  1. Open live view from the card, or ?view=computer&seat=….
  2. Click the box / finish the login in the live view.
  3. Press I’m finished.
The seat wakes at once with a fresh screenshot. It does not poll. Cancel ends the hold without saying you finished. Keep the cover focused while you work. Live view is laptop-only (127.0.0.1) on local Docker. A VPS host, or a remote browser, gets screenshots. Interactive remote watch is not in this release.

5. Stop or wipe

You can also tell the agent: “stop the Computer” or “wipe the Computer”.

If Computer is off

Quit Docker and porto chat still works.

Rules that will not bend

  • One Computer per granted seat.
  • * does not grant Computer. The token must be computer.
  • You solve your own CAPTCHA. porto will not bypass it.
  • Occupancy lives at ~/.porto/computer/, not in the project tree.
  • The Computer container never gets docker.sock.
  • A VPS host skips laptop path mounts and loopback live view. Setup: Computer host.
  • Claude Messages, Grok/Codex CLI, and OpenAI-compat (Qwen / Ollama / local) see screenshot pixels. Gemini has no tool loop.