OpenOwl is a free AI agent that controls your computer, and it runs on macOS as an MCP server your assistant connects to. Install it, connect Claude Code, and the assistant can take screenshots, find buttons, click them, type into any app, and read text off the screen through 42 tools.
Free here means a rate limit. The free tier gives you 50 tool calls per day, capped at 10 calls per minute. You pay nothing, you enter no card, and you keep every feature. The counter resets at midnight UTC, so if you burn all 50 by noon, you wait for the reset and the same 50 come back.
A tool call is one action. One screenshot costs a call, and so does one click or one type_text. A task that takes a screenshot, finds a button, and clicks it costs three.
Every tool works on the free tier. Pro drops the 50-a-day cap, and you get the same 42 tools either way.
| Free | Pro |
|---|
| Tool calls per day | 50 | No 50-a-day cap |
| Calls per minute | 10 | 60 |
| Tools available | 40 | 40 |
| Credit card | Not required | Required |
| Platform | macOS | macOS |
| Price | $0 | $19.99/month |
You need four things. Check them now. Skipping this list causes most setup failures.
A Mac. Apple Silicon and Intel both work. OpenOwl ships for macOS. No flag or workaround runs it on Windows or Linux.
Node.js and npm. Run node --version to confirm you have them. The npm package uses a postinstall script to fetch the binary.
An MCP client. Claude Code and Codex CLI both have tested configs, and this guide uses Claude Code. Any other MCP client connects through the generic stdio config.
Two macOS permissions. Accessibility and Screen Recording, both under System Settings > Privacy & Security. macOS grants these to the process that launches OpenOwl, which is your terminal, so grant them to Terminal, iTerm, or whichever app runs claude. macOS does not re-evaluate a grant for a running process, so restart the server after you flip the toggles.
npm install -g openowl
The postinstall script detects your architecture and downloads the prebuilt binary from GitHub Releases. You get a compiled binary. OpenOwl is written in Python and compiled with Nuitka into a native executable, so you manage no virtualenv and your machine resolves no dependencies.
Two failures show up at this step.
If npm asks for sudo on a global install, your npm prefix points at a system directory. Fix the prefix instead of running the install as root:
npm config set prefix ~/.npm-global
export PATH=~/.npm-global/bin:$PATH
If macOS Gatekeeper blocks the binary on first run, clear the quarantine attribute:
xattr -cr $(which owl)
Three steps: get a key, save it, register the server.
Sign up and copy your API key from the OpenOwl quick setup page. Keys look like owl-xxxx-xxxx-xxxx. Signing up generates one for you and fills it into the setup instructions.
Save it where the binary looks for it:
mkdir -p ~/.openowl
echo "owl-xxxx-xxxx-xxxx" > ~/.openowl/api.key
The binary also reads OPENOWL_API_KEY from the environment if you would rather keep the key out of a file.
Register OpenOwl with Claude Code:
claude mcp add owl --transport stdio -s user -- owl
The -s user flag registers it at user scope, so you get the server in every project rather than one directory. On Codex CLI, add this to ~/.codex/config.toml:
[mcp_servers.owl]
command = "owl"
Verify the binary responds:
owl --version
If your shell reports that owl is not found, your npm global bin directory is missing from PATH. If owl --version works but Claude Code lists no OpenOwl tools, restart Claude Code, which reads MCP config at startup.
Open Claude Code and ask for a screenshot:
claude "Take a screenshot of my desktop and tell me what you see"
That costs one call. If the response describes your desktop, your install works end to end: binary, API key, permissions, MCP registration.
If it returns a black rectangle or an empty image, you have not granted Screen Recording to your terminal app. Grant it, quit the terminal with Cmd+Q (closing the window leaves the process alive), then reopen.
Now try something that moves the mouse:
claude "Open System Settings, find the Bluetooth section, and click it"
Watch what the assistant does. It can call launch_app to open System Settings, find_element to locate the Bluetooth row in the accessibility tree, and click_element to click it. Three calls out of your 50.
OpenOwl targets elements through the macOS accessibility tree (AXUIElement) before it falls back to pixels. click_element runs a three-tier cascade: the accessibility tree first, then a fuzzy name match, then OCR. When an app paints its own interface into a canvas and exposes nothing to the accessibility tree, OCR still finds the text on screen.
Count the actions and you have your budget, because each tool invocation spends one call. A screenshot-and-describe request costs one. Launching an app and clicking a button costs three, and a form costs a call per field plus one more to submit.
Discovery is where the budget goes. You burn calls fast on an app you have never automated, because the assistant screenshots after each action to check its own work. Once you know the exact sequence, the same task costs a fraction of the discovery run.
Four ways to stretch the budget:
Use batch_actions. It runs a sequence of actions inside one tool invocation, so you spend one call for the whole sequence.
Pin the window with set_target_window. Scoping to one window stops the assistant from re-screenshotting the full desktop to reorient itself.
Record once, replay after. record_workflow captures a sequence and replay_workflow_tool runs it back without the discovery overhead.
Prefer find_element over screenshot loops. One call returns structured element data with names, roles, and coordinates. A screenshot spends the same call and sends an image to the model, which costs far more tokens.
OpenOwl free costs you nothing. You still pay for the stack around it.
Model tokens. Your assistant sends every screenshot to the model as an image, and images cost more tokens than text. A long session shows up on your Claude Code usage or your API bill, and the OpenOwl call counter never surfaces that number. For image-heavy work you hit the token cost before you hit the 50-call ceiling.
Your machine during runs. An agent driving your desktop owns the mouse and keyboard, so you cannot work in parallel on the same Mac while it clicks.
Permission maintenance. macOS can drop Accessibility and Screen Recording grants after app updates and OS upgrades. When automations stop working for no clear reason, check Privacy & Security first.
No rollover. Unused calls do not bank. Each day starts you at 50 again.
Machine limits. Each API key tracks machine IDs and caps how many machines it activates, so running one free key on a laptop and a desktop spends two activations.
Watch for three situations that mean you have outgrown the free tier.
You hit the cap before you finish one task. Exploratory work on an unfamiliar app runs past 50 calls in a single session, and pausing a debugging run until tomorrow throws away the context you built.
You want automations running on a schedule. A scrape that runs each night, or a watcher that reacts to a UI change, spends calls while you sleep, and 50 goes fast overnight.
A second Mac counts against your activation cap, so a laptop and a desktop on one free key spend two.
Pro costs $19.99 per month and drops the 50-a-day cap. You keep the same 42 tools and the same binary. Compare both tiers on the OpenOwl pricing page, then grab the binary from the download page once you have a key.
Start on free. 50 calls a day answers the question that matters more than price: whether desktop automation fits the way you work at all.
Free with a rate limit, and it does not expire. You get 50 tool calls per day, the counter resets at midnight UTC, and you enter no card to start. Pro drops the 50-a-day cap and keeps the same tools.
No. OpenOwl ships for macOS, on both Apple Silicon and Intel. The team distributes no Windows or Linux binary.
One invocation of one tool. A screenshot costs one call, and so does a click or a type_text. A task that screenshots, finds an element, and clicks it spends three of your 50.
You need an MCP client that can drive the tools, and most people use Claude Code. OpenOwl's free tier covers your tool calls. Your model tokens sit on a separate bill, and since screenshots reach the model as images, heavy sessions show up on your Claude usage.
Tool calls stop returning results until the counter resets at midnight UTC. Your assistant reports that you reached the limit, your files stay where they are, and you either wait or upgrade.