Computer use (opt-in)
Let the assistant observe and drive your desktop through a consent-gated, frame-grounded loop on Linux GNOME Wayland and macOS.
Cluster Build can observe your desktop and drive it — clicking, scrolling,
typing, and pressing keys — through a single native computer tool, available
in interactive sessions on Linux GNOME Wayland and on macOS 26 or newer. It's
off by default and requires two separate consent prompts before it can see or
touch anything.
Computer use is not browser control — the built-in Playwright provider still
owns web pages. The computer tool is for native applications that can't be
reached through the browser.
Enabling it
cluster config set computer_enabled trueor set it directly in ~/.cluster/config.toml:
[computer]
enabled = trueThe interactive TUI only advertises computer when this is enabled and a
supported native backend is available. Headless surfaces — cluster exec, cron
runs, local child agents, and app-server sessions — never advertise it,
regardless of this setting.
Linux setup
The Linux backend targets an already logged-in GNOME Wayland session. It needs
gnome-screenshot for capture and a readable, writable /dev/uinput for
pointer input, which a one-time machine setup installs:
version="$(cluster --version | awk '{print $2}')"
base="https://assets.cluster.app/serve/cstatic-assets/releases/cli/${version}"
curl -fLO "${base}/setup-linux-computer.sh"
curl -fLO "${base}/70-cluster-uinput.rules"
chmod +x setup-linux-computer.sh
./setup-linux-computer.shKeep both files together — the script installs the udev uaccess rule next to
it. It currently supports Debian/Ubuntu. Capture is prompt-free: no XDG portal
picker is opened, and nothing is shared with the compositor beyond the session
Cluster is already running in. Without the helper or the input-device grant,
the backend stays unavailable and the tool is never advertised.
macOS setup
macOS attributes Screen Recording and Accessibility to an application launched
through Launch Services, not reliably to a terminal child process. The release
therefore ships the cluster executable inside a background-only Cluster.app,
with ~/.local/bin/cluster symlinked to it — one binary, not a second CLI. The
foreground CLI launches that same binary through Launch Services as a
short-lived local broker and talks to it over a private, owner-scoped Unix
socket under ~/.cluster/computer/. Running a cluster binary from outside the
app bundle leaves computer use unavailable.
Two macOS privacy grants are required, both in System Settings → Privacy & Security:
- Screen & System Audio Recording — for
observeand every post-action screenshot. - Accessibility — for
click,scroll,type, andkey.
They're reported as separate errors, so a missing grant names the one to fix.
Grant it and restart cluster. The desktop session must be unlocked — Cluster
holds the display awake for the run but never bypasses the login window.
What's implemented
observecaptures the desktop and returns a screenshot plus aframe_id. Linux captures the full desktop; macOS captures the primary display, and secondary displays aren't supported yet.clickperforms a left click at image coordinates grounded against a specificframe_id, then returns a fresh screenshot. An optionalclick_countof1(default) or2requests a single or double click; other values are rejected.scrollscrolls at a grounded point, up to 10 wheel steps per axis.typetypes literal printable ASCII text (tab and newline included, up to 1000 characters) into the application focused in that frame.keypresses one bounded key — a letter, digit,f1–f12, or a named navigation key such asenter,escape, orarrow_up— optionally withctrl,alt,shift, ormetaheld.waitdelays up to 10 seconds (duration_msin1..=10000) before capturing a fresh screenshot, with no input performed. It's for applications whose visual state changes asynchronously — not a background task or an unbounded polling primitive. Cancelling awaitmid-delay performs no capture; the next action must observe again.
Drag and free pointer movement are not exposed. Windows has no backend.
Every action is validated against the frame it was grounded on: a stale
frame_id, out-of-bounds coordinates, or display geometry that changed since
the observation is rejected rather than acted on.
Consent
Two prompts gate this feature independently, each scoped to the current process — separate from the OS-level grants above, which are machine-level and persist:
- Capture — approves sending a screenshot of the desktop to the model.
Required before the first
observe. - Control — approves sending pointer and keyboard input to the desktop.
Required before the first
click,scroll,type, orkey, separately from capture.
wait only requires capture consent, like observe.
Approving one does not approve the other, and neither persists past the
process — restarting cluster asks again. Set computer_unattended to treat
your machine-level setup plus that explicit opt-in as standing authorization
and skip both prompts; leave it off for interactive use. Screenshots and
action results follow the same private, local session storage as other tool
results; nothing is uploaded except as model request content for the active
turn.
Plan mode
observe is read-only and allowed in plan mode.
wait is likewise allowed in plan mode.
click, scroll, type, and key are mutating actions and are denied in
plan mode like any other mutating tool.
Next steps
- Advanced configuration — the rest of
config.toml. - Interactive sessions — plan mode and workspace trust, which govern when tools may run at all.