mrkeyoor.com_
Tue 01 Sept 17:43 UTC
Automationevaluationupdated 25 Aug 2026

macos-harness review

macOS Harness gives a coding agent direct Python access to screenshots, keyboard and pointer events, Accessibility data, Apple Events, browser control, files, and shell commands on a Mac. Instead of shipping a tool for every application, it exposes a small set of low-level primitives and lets the agent write missing automation during the task.

+30stars / 7d
Verdict

Our Debian run built macOS Harness in 7 seconds, then passed 10 of 26 tests because the remaining 16 required unavailable macOS ApplicationServices bindings. Try it on a dedicated Mac when an agent needs to bridge browser and native applications, and treat every permission as production access. Skip it for unattended sensitive machines, fixed repetitive macros, or any workflow that cannot tolerate an experimental v0.1.2 input layer.

We ran it

Lab card: what happened when we ran macos-harnessScreenshot of macos-harness (github.com/browser-use/macos-harness)
Install✓ · 24s45 packages · 61 MB
Build✓ · 7s
Tests✗ · 6s10 passed · 16 failed of 26 (pytest)
Known vulns0(pip-audit)
Repo26 files~3,157 lines of source · 0.4 MB · 2 CI workflows · tests dir

Answers from our run

Does macos-harness build from source?

Dependencies installed in 24 seconds (45 packages), and the build succeeded in 7 seconds. We cloned commit b88e4d7 into a clean Debian container with 3 CPUs and no project-specific setup.

Do macos-harness's tests pass?

Not all of them: 10 of 26 passed and 16 failed when we ran the project's own test command (pytest). Some failures need services or credentials a bare container does not have.

Does macos-harness have known vulnerabilities in its dependencies?

pip-audit found none in the dependency tree at the time of our run.

Who should not use macos-harness?

Windows or Linux users: the README labels the project macOS-only, and 16 tests failed in our Debian sandbox because ApplicationServices bindings were unavailable.

What are the alternatives to macos-harness?

Open Interpreter, Browser Use, Hammerspoon. Our Debian run built macOS Harness in 7 seconds, then passed 10 of 26 tests because the remaining 16 required unavailable macOS ApplicationServices bindings.

Setup3/5Quick package setup, followed by macOS permission work
Docs4/5Short, direct workflow and privacy explanation
Community3/5Small project with current fixes and release work
Maturity2/5Experimental v0.1.2 with open native input fixes

Who it’s for

Mac users who want Codex or Claude Code to operate native and Electron applications.
Automation developers comfortable letting an agent write Python against low-level macOS APIs.
Teams testing background-window interaction without moving the physical pointer.
Browser Harness users who also need desktop, filesystem, and shell access in one process.

Who it’s NOT for

Windows or Linux users: the README labels the project macOS-only, and 16 tests failed in our Debian sandbox because ApplicationServices bindings were unavailable.
Security teams that cannot grant Screen Recording, Accessibility, and Apple Events permissions to an agent-controlled process.
Users who want fixed, app-specific actions and narrow permissions: the design deliberately gives the model raw primitives, Python, filesystem access, and subprocess access.
Anyone needing proven native click reliability today: issue 6 reports that coordinate clicks can have no effect in Finder and Calculator while Accessibility press works.
Operators who prohibit default telemetry unless centrally disabled: command category, success, duration, version, platform, and detected agent client are collected until telemetry is turned off.

Setup reality

Our sandbox installed 45 packages in 24 seconds, using 61 MB, at commit b88e4d7; the build succeeded in 7 seconds. Tests ran for 6 seconds: 10 passed and 16 failed out of 26. Every shown failure raised MacOSError because macOS ApplicationServices bindings were unavailable in Debian. Pip-audit found 0 known vulnerabilities.

Real use needs macOS, Python 3.12 through uv, and OS permissions reported by macos-harness doctor. Browser work also uses Browser Harness and a real logged-in Chrome session. Codex or Claude Code registers the printed skill to learn the commands.

The process can see apps, send input, call Apple Events, read files, and launch subprocesses. Anonymous telemetry is on by default but can be disabled. The README calls v0.1.2 experimental, and open work covers native clicking, Retina coordinates, and input behavior.

Six primitives expose an entire Mac

macOS Harness reduces desktop control to 6 ideas: see, key, type, click, Accessibility access, and AppleScript. A persistent Python process also exposes browser helpers, Path, and subprocesses. The agent can inspect a window, act on its owning process, query the accessibility tree, or write new Python when no prepared helper exists. This is a sharp design for odd, mixed application tasks because the extension mechanism is ordinary code rather than another tool protocol.

The same design makes the trust boundary unusually wide. An agent with screenshots, input events, Apple Events, file access, and shell commands can do meaningful work, including the wrong work. The README's lack of app-specific rails is intentional. Teams should use a separate macOS account or machine, keep valuable credentials out of reach, and require confirmation around destructive actions. A successful doctor check proves permission availability, not that an automation policy is safe.

Background control avoids 1 common desktop disruption

The README says the harness can capture a background application's window and send keyboard or coordinate input to its process without activating it. It can draw a click-through virtual pointer without moving the physical cursor. That is useful when an agent works beside a person rather than taking over the visible desktop, and it is more specific than generic screenshot-and-click automation.

Browser tasks are delegated to Browser Harness through Chrome DevTools Protocol, while native and Electron applications use macOS facilities such as CGWindow, CGEvent, Accessibility, and Apple Events. Keeping them in 1 Python process lets a workflow move between a logged-in website, a desktop application, and a local file. It also means a failure can cross those boundaries, so logs and approvals should distinguish browser navigation, native input, and shell execution.

What happened when we ran it

Our run cloned commit b88e4d7 into a fresh unprivileged Debian container with 3 CPUs and 8 GB of RAM. The repository was small: 26 files, about 3,157 lines of source, and a 0.4 MB checkout. Installation succeeded in 24 seconds, adding 45 packages and 61 MB. The build completed in 7 seconds, and pip-audit found 0 known vulnerabilities.

Pytest finished in 6 seconds with 10 passing and 16 failing tests out of 26. The displayed failures all raised macos_harness.macos.MacOSError because macOS ApplicationServices bindings were unavailable. They covered input refusal, physical event pairs, modifier transitions, clicking, Retina coordinate conversion, pointer controls, and screenshots. That result is a clean platform mismatch in the shown log, not evidence that those behaviors fail on a correctly prepared Mac.

The repository includes 2 CI workflow files, a tests directory, and no Dockerfile. A Dockerfile would not solve the central platform dependency because the useful APIs belong to macOS and its permission system. Our Debian run still checked packaging, compilation, platform-independent tests, and the error path for unavailable bindings. Native behavior needs a Mac with the declared dependencies and permissions.

Three macOS permissions define the risk

The install instruction targets Python 3.12 through uv, then asks the agent to register the generated skill and run macos-harness doctor. Screen capture, Accessibility, and Apple Events can expose UI contents or let the process act in other applications. macOS prompts and settings make those grants visible, but operators still need to decide which account, apps, directories, and browser profiles the agent may reach.

Anonymous telemetry is enabled by default. The project says it records command category, success, duration, package version, operating system and architecture, and the detected agent client. It says prompts, app names, screenshots, UI text, scripts, paths, and window titles are excluded. macos-harness telemetry disable turns collection off. That command belongs in managed setup when policy does not permit the default.

Version 0.1.2 is promising and plainly experimental

The latest published release was v0.1.2 on August 17, 2026, the same date as the last repository push. GitHub showed 762 stars and 7 open issues and pull requests combined. More recent activity included a v0.3.0 release pull request, Retina mapping changes, process-command privacy work, and a fix for dropped mouse events. Activity is current, though the release and README both place the project early in its life.

Issue 6 is the clearest operational warning: coordinate clicks were reported as doing nothing in native AppKit applications such as Finder and Calculator, while an Accessibility press on the same element worked. That is exactly the sort of app-dependent behavior a low-level harness encounters. macOS Harness is worth testing for varied desktop jobs that resist fixed integrations. For repeatable hotkeys or browser-only work, Hammerspoon or Browser Use gives you a narrower failure surface.

Alternatives

ProjectWhat it isPick it when
Open Interpreter gh↗A local agent that can execute code and control a computer across a broader set of systems.pick this instead when cross-platform computer use matters more than direct macOS-specific primitives.
Browser Use gh↗An agent framework focused on operating web browsers rather than the whole desktop.pick this instead when every task stays in the browser and native app permissions would add needless risk.
HammerspoonA mature macOS automation environment driven by explicit Lua configuration.pick this instead when you want deterministic scripts and hotkeys rather than agent-written actions.

What people are saying

  1. [velocity-scout] browser-use/macos-harness

Sources

  1. macOS Harness README
  2. macOS Harness v0.1.2 release
  3. Native AppKit click issue
  4. Retina coordinate fix

More automation reviews

rclone · lego · OpenCLI · web-access · Karabiner-Elements · WiiUDownloader · the whole board →