Virtual display for macOS · Built for AI agents

Give your AI agents eyes.

AI agents need to see the screen and interact with apps. On a headless Mac, that's impossible — until now. Mirage creates a persistent virtual display so your agents can work unattended, around the clock.

Coming Soon See how it works

Signed binary coming soon · macOS 13+ · Apple Silicon & Intel · No dummy plug

Your AI agents
🤖
Claude Computer Use
● seeing screen
👁
Peekaboo / Vision AI
● capturing UI
🌐
Browser automation
● clicking, typing
powered by
Virtual display
Mirage.
3840×2160 · always on
What becomes possible
✅ ScreenCaptureKit returns frames
✅ UI automation has a window to click
✅ Screenshots work over SSH/VNC
✅ Agent runs 24/7, no monitor needed

Works with

OpenClaw Claude Computer Use OpenAI Operator Peekaboo Playwright ScreenCaptureKit AnyDesk / NoMachine Any VNC client Your custom agent
Why it matters

Agents need two things.
Mirage provides both.

Without a display, AI agents are flying blind. Mirage is the missing layer between your agent and your Mac.

SEE

👁 See

For an AI agent to understand what's on screen, it needs frames to capture. Without a display, ScreenCaptureKit returns nothing. Every screenshot is blank.

  • Enabled Screenshot capture over SSH
  • Enabled Real-time screen streaming
  • Enabled Vision model context (what's on screen)
  • Enabled UI element detection
ACT

🖱 Act

Clicking, typing, and navigating require windows to exist. Without a display, apps refuse to render — leaving agents with nothing to interact with.

  • Enabled Mouse click and drag
  • Enabled Keyboard input to any app
  • Enabled Browser automation (full DOM)
  • Enabled App window management

Invisible to macOS — in the best way

Mirage registers as a real display via CoreGraphics. It appears in system_profiler SPDisplaysDataType, CGGetActiveDisplayList, and every screen capture API. macOS can't tell the difference — so your agents can't either.


Without Mirage

Your agent is stuck.

Running a Mac mini headlessly for AI workloads means hitting the same three walls, over and over.

📷

Blank screenshots

ScreenCaptureKit and CGWindowListCreateImage return empty frames. Your agent calls "take a screenshot" and gets nothing back.

🪟

Apps won't render

Without a display, macOS won't create window layers. Browsers, Electron apps, and GUI tools launch but never actually paint their UI.

🔌

Dummy plugs are fragile

$8 HDMI adapters fall out, cap at 1080p, and disappear when you need them. Not infrastructure you want to depend on.


What you get

Everything you need.
Nothing you don't.

🖥️

4K virtual display

3840×2160 at 60Hz. High enough resolution that vision models can read small UI elements clearly.

Always on

Runs as a LaunchAgent. Starts at login, survives reboots, never sleeps. Your agents run 24/7.

🪶

Featherweight

A single daemon under 1MB. No menu bar icon, no update nags, no bloat. It runs silently in the background.

🍺

Homebrew native

Install, update, and remove with Homebrew. Fits naturally into your existing dev toolchain.

🔒

Fully local

No telemetry, no cloud, no network calls. Mirage creates a display and stays silent. Your screen activity is yours.

🛠

CLI friendly

Designed for developers. Check status, restart, or reconfigure without touching a GUI — over SSH, from a script, or from your agent itself.


How it works

Running in three steps.

Step 01

Install via Homebrew

One command installs the signed binary and registers the LaunchAgent automatically.

brew tap jkjoplin/mirage && brew install mirage
Step 02

Mirage starts itself

A virtual 4K display appears immediately and persists across reboots. No configuration needed.

launchctl list | grep mirage
com.mirage.display ✓ running
Step 03

Your agents can see

Every screen capture API returns real frames. Point your agents at the Mac and let them work.

system_profiler SPDisplaysDataType
Resolution: 3840x2160 (Mirage)

Pricing

Simple. One-time. Fair.

No subscription. No seat licensing. Pay once, use on all your Macs forever.

Open Source
$0
Build it yourself from source
  • 1920×1080 virtual display
  • LaunchAgent config included
  • Full source on GitHub
  • No signed binary
  • Homebrew tap (builds from source)
  • Community support only
View on GitHub

Requires macOS 13 Ventura or later · Apple Silicon & Intel · Works on Mac mini, Mac Studio, Mac Pro