Skip to content

fletcherholt/ghost

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ghost

Ghost

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.

version licence macOS Claude Code


ghost-ax opening, typing into and closing an app while your screen never changes

Why

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.

What you get

  • ghost-ax, a focus free command line engine over the macOS Accessibility API.
  • Two Claude Code MCP servers: ghost (native apps, via Peekaboo) and ghost-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.

Install

git clone https://github.com/fletcherholt/ghost.git
cd ghost
./install.sh

The 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.

Usage

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.

How it works

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.

Performance

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.

Honest limits

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.

Uninstall

claude mcp remove ghost
claude mcp remove ghost-web
rm -rf ~/.claude/skills/ghost

BetterDisplay and Peekaboo can be removed with brew uninstall.

Requirements

macOS, Homebrew, Claude Code, and a claude.ai login for the headless browser MCP. Apple Silicon or Intel.

Licence

MIT. See LICENSE.

Packages

 
 
 

Contributors

Languages