Browser Use Ships macOS Harness to Give AI Full Desktop Control

Browser-use just open-sourced a six-primitive Python harness that hands an LLM direct control of macOS without app-specific tools or wrappers.

·
·
Browser Use Ships macOS Harness to Give AI Full Desktop ControlPRO
  • Browser-use released macOS Harness, an MIT-licensed Python package that gives an LLM direct control of a Mac.
  • Six primitives (see, key, type, click, ax, script) replace app-specific tool schemas entirely.
  • Uses CGWindow, CGEvent to a PID, Accessibility API, Apple Events, and CDP under the hood.
  • Captures background windows and sends input without stealing focus or moving your real cursor.
  • Installs via uv tool install macos-harness; skill file teaches Codex or Claude Code the workflow automatically.
  • Anonymous telemetry is on by default but excludes prompts, screenshots, paths, and app names.

The team behind Browser Use, best known for their Browser Harness project, has shipped a Mac equivalent. macOS Harness is a small MIT-licensed Python package that hands an LLM the keys to your entire desktop, and it takes a deliberately minimalist approach: no adapters for Slack, no plugins for Final Cut, no pre-baked recipes for anything. The pitch is a thin harness that lets an LLM complete almost any task on a Mac by writing whatever glue is missing, mid-task. One Python process connected directly to macOS, your real browser, and your files.

The whole Mac in six calls

Instead of exposing a growing catalogue of tool schemas, the harness reduces desktop control to a handful of primitives. Everything the model can do to your Mac routes through six calls: mac.see, mac.key, mac.type, mac.click, mac.ax, and mac.script. A typical session looks like this:

macos-harness <<'PY'
frame = mac.see("Spotify")
mac.key("cmd+k", app="Spotify")
mac.type("Alessia Cara", app="Spotify")
mac.click(640, 420, app="Spotify")
item = mac.ax.at(640, 420, app="Spotify")
mac.script('tell application "Spotify" to play')
print(browser.page_info())
print(list(Path.home().iterdir()))
PY

Everything runs inside one persistent Python process, so browser, Path, and subprocess sit alongside the mac.* calls. When the model needs something the primitives don't cover, it writes ordinary Python on the spot rather than waiting for a maintainer to add an integration.

Pro article

This story is for Pro members

You've reached the end of the free preview. Upgrade to AlphaSignal Pro to read the full article - and everything else behind the paywall.

Comments

avatar