desktop-act · git:20260730.1482dc9 · 2026-07-30 · sha256 baf28c3da96b198e

desktop-act git:20260730.1482dc9A

Immutable. This exact content is served forever at /api/v1/blob/baf28c3da96b198e.

---
name: desktop-act
description: "Cross-OS computer-use MCP: multi-agent exclusive desktop leases, Xvnc pool on Linux, single-session macOS/Windows. Use for GUI/desktop automation and concurrent agent desktops."
---

# desktop-act

Computer-use primitives via `mcp__desktop-act__*` plus `act(goal)` (OAuth via
claude-agent-sdk — no Anthropic API key).

## Multi-agent (required pattern)

```text
ensure_desktop(owner_id="<agent-id>", geometry="2560x1440")  # exclusive seat
# … primitives with session_id …
heartbeat_desktop(session_id)   # long runs
release_desktop(session_id)     # on stop / idle done
```

If another agent holds every free seat, Linux **auto-spawns** a new Xvnc on the
next free display/port. Leases expire (`DESKTOP_ACT_LEASE_TTL`); reaper frees
the lock and **stops pool VNC** so idle seats do not thrash the host.

## Architecture

- Parent agent is the brain — primitives + screenshots, or hands-off `act(goal)`.
- **Linux:** X11 + Xvnc/websockify pool (`:50`–`:99`), file-locked leases.
- **macOS:** single interactive session (Screen Sharing → noVNC optional).
- **Windows:** full WinBackend (ImageGrab + pyautogui/SendInput); single
  interactive desktop only (no multi-seat pool). Needs a logged-in session.

## Watching the desktop

Pool session returns `novnc_url` (port base `DESKTOP_ACT_NOVNC_PORT_BASE`,
default **6082**). Host default display (often `:1`) is separate and is never
reaped by the idle reaper. Always prefer the returned URL over hardcoding ports.

## Install

- **With claude-ops:** `desktop-act@ops-marketplace` (co-installed by `/ops:setup`
  and `/ops:update` via `plugin-dependencies.json`).
- **Standalone:** marketplace add `Lifecycle-Innovations-Limited/desktop-act`,
  then `desktop-act@desktop-act`.

## When to use

| Task | Approach |
|------|----------|
| Local app you need to click/type into | `desktop-act` primitives |
| Concurrent agents needing isolated seats | Linux pool + `ensure_desktop(owner_id=…)` |
| Hands-off goal | `mcp__desktop-act__act(goal, max_iterations=…)` |
| Browser-only automation | Prefer browser MCP tools when no OS UI is required |

## Defaults

- `act` model: `claude-sonnet-5`
- `act` max_iterations: `20` (not `max_steps`)
- Python: `>=3.11`