it uses your Mac without taking it over.
Invisible, non interfering computer use for Claude Code on macOS. Claude drives your real native apps and the web while you keep working. Apps run hidden, input goes straight into the interface through the Accessibility API, and your cursor never moves. It is a drop in replacement for the built in computer use, which hides your apps, locks the machine and runs on your real screen.
The built in computer use on macOS grabs a machine wide lock, hides every other app, runs on your actual screen and asks permission for each app every session. While it works, you cannot use your computer.
Ghost takes the opposite approach. It reads and controls apps through the Accessibility tree, so:
- You never see the app open. It runs hidden, or on an off screen virtual display.
- Your cursor never moves and your focused app never changes.
- You can carry on working in your own apps while Ghost works in others, with zero interference.
- It is fast. Most actions take about a fifth of a second, not the seconds per step of a screenshot loop.
- Web tasks run in a separate headless browser you physically cannot touch.
ghost-ax, a focus free command line engine over the macOS Accessibility API.- Two Claude Code MCP servers:
ghost(native apps, via Peekaboo) andghost-web(a headless, isolated browser). - A Claude Code skill so Claude routes every GUI task to Ghost automatically.
- An off screen virtual display so apps can render where you will never see them.
git clone https://github.com/fletcherholt/ghost.git
cd ghost
./install.shThe installer is idempotent and walks you through everything: it installs the dependencies (Peekaboo and BetterDisplay) through Homebrew, copies the engine and skill into place, registers the Claude Code MCP servers, creates the off screen display, and opens the two macOS permission panes so you can grant Accessibility and Screen Recording once. Restart Claude Code afterwards so the tools load.
Inside Claude Code you do not call anything by hand. Ask for what you want and Claude uses Ghost automatically:
open my notes and add a line to today's page, do not take over my screen
Under the hood that is the ghost-ax engine, which you can also use directly:
ghost-ax open "Notes" ~/file.txt # launch an app invisibly, optionally opening a file
ghost-ax type "Notes" "some text" # insert text at the caret, no keystrokes, no focus change
ghost-ax press "Notes" "Done" # focus free click of a button by its label
ghost-ax menu "Notes" "File" "New" # invoke a menu item without opening the menu
ghost-ax wait "Notes" "AXButton" "Save" 10 # block until an element appears
ghost-ax read "Notes" # read the focused field
ghost-ax dump "Notes" # list every element, to discover labels
ghost-ax stage "Notes" # move the windows onto the invisible display
ghost-ax quit "Notes"Run ghost-ax with no arguments for the full command list.
Accessibility, not pixels. Ghost reads the Accessibility tree of the target app and acts on elements directly: it presses buttons, sets values and invokes menu items through Accessibility actions. Because it never synthesises mouse or keyboard events for these, the shared cursor never moves and keyboard focus is never stolen. That is what lets you type in one app while Ghost types in another.
Invisible apps. Apps are launched hidden. Reading an existing app or opening a file is completely invisible. The Accessibility layer keeps working on a hidden window, and a window can be captured for vision without ever being shown.
Off screen display. For cases that need a rendered window, Ghost creates a virtual display through BetterDisplay that is not mirrored to your monitor. Windows are moved there, so they render where you cannot see them, and Ghost captures that display when it needs to look.
The web. Browser tasks route to a headless, isolated browser through the ghost-web MCP server. It is a separate process with no shared input, so it is untouchable by construction and fast.
Measured on Apple Silicon:
- type, read, exists, wait: about 0.2 seconds.
- press, set: about 0.3 to 0.7 seconds.
- stage: about 0.16 seconds once the display coordinate is cached.
The floors are app launch (about one to one and a half seconds, set by macOS) and any Peekaboo call (about half a second of startup), which is why Ghost prefers the Accessibility engine for everything it can.
These are inherent macOS constraints, each with a working fallback. None of them crash.
- A few apps expose keypads or canvases that are not reachable through the Accessibility tree (Calculator is the classic example). Ghost falls back to vision based clicks on the off screen display for those, which is slower.
- Some apps have a process name that differs from the app name (Visual Studio Code runs as a process called Code). Use the process name.
- Reading rich text content (for example Stickies) can return empty. Typing and acting still work.
claude mcp remove ghost
claude mcp remove ghost-web
rm -rf ~/.claude/skills/ghostBetterDisplay and Peekaboo can be removed with brew uninstall.
macOS, Homebrew, Claude Code, and a claude.ai login for the headless browser MCP. Apple Silicon or Intel.
MIT. See LICENSE.