Show HN: Offscreen - Give your agents a Mac screen of their own Mark Phelps released Offscreen, a beta tool that runs coding agents' macOS UI tests, iOS Simulator sessions and GUI app launches inside throwaway macOS virtual machines instead of on the user's own desktop. Offscreen requires an Apple silicon Mac running macOS 14 or later, full Xcode and Homebrew, and installs via `brew install --cask markphelps/tap/offscreen`; it consists of the `offscreen` CLI (aliased `ofs`), the `offscreend` daemon and a menu bar app, with jobs returning logs, screenshots and `.xcresult` bundles. The tool matters because agents running XCUITest or booting the simulator otherwise seize windows and focus on the developer's Mac, and Offscreen queues jobs from any number of agents, terminals and scripts into a fresh VM. Give your agents a Mac screen of their own. Offscreen runs UI tests, the iOS Simulator and GUI apps in throwaway VMs, so your desktop stays yours. When a coding agent runs XCUITest, boots the iOS Simulator, or launches the app it just built, it takes over your Mac: windows pop up, focus jumps, and you can't type until it finishes. Offscreen runs that work in a fresh macOS VM instead. Any number of agents, terminals and scripts share one queue, and each job gives you back logs, screenshots and .xcresult bundles. Note Offscreen is beta software. Commands, config and on-disk state may change between versions. Please open an issue https://github.com/markphelps/offscreen/issues if something breaks. You need an Apple silicon Mac with macOS 14 or later, full Xcode, and Homebrew https://brew.sh/ . Install Offscreen and build its VM image: brew install --cask markphelps/tap/offscreen installs the CLI, the daemon, the Offscreen menu bar app and Tart open -a Offscreen if macOS asks, allow "Offscreen Daemon" on the Local Network offscreen image build one-time: pulls a macOS + Xcode image, takes a while, go grab lunch The install also adds ofs as a shorter name for offscreen , so ofs run hello test-ui works too. Then try it on the example app. The example lives in this repository, so clone it to get the project; you don't build Offscreen itself: git clone https://github.com/markphelps/offscreen.git cd offscreen/examples/hello offscreen run hello test-ui The last command builds a small SwiftUI app on your Mac, runs its UI test inside a fresh VM, streams the output, and prints the job's artifact directory. Nothing opens on your desktop. The same example has two more tasks: offscreen run hello test-ios runs the test in an iOS Simulator inside the VM, and offscreen run hello launch opens the app and saves a screenshot. For problems, see the install guide https://github.com/markphelps/offscreen/blob/main/docs/install.md . It also covers building from source https://github.com/markphelps/offscreen/blob/main/docs/install.md build-from-source if you'd rather not use Homebrew. Offscreen has three parts: the offscreen CLI, the offscreend daemon that runs jobs, and the Offscreen menu bar app. The app owns the daemon: opening Offscreen starts it, and quitting Offscreen stops it. Its menu lists queued, running and recently finished jobs from both lanes, with Cancel, Reveal Artifacts and Copy Job ID for each, plus Restart Daemon and Quit Offscreen. If Offscreen isn't running, CLI commands say so: Offscreen isn't running. Open it with: open -a Offscreen . Anything that needs a logged-in Mac desktop: - macOS UI tests. XCUITest for Mac apps, with .xcresult bundles collected after each run. - iOS Simulator tests. XCUITest against an iPhone simulator inside the VM; the hello example runs on the default image with no extra setup. A fresh VM boots the simulator from scratch, so expect a few minutes per run, or warm it once in the golden image hello example https://github.com/markphelps/offscreen/blob/main/examples/hello/README.md offscreen-tasks . - Launch and look. Open the app your agent just built, drive it with AppleScript or System Events, and save screenshots for the agent or you to check. - One-off commands. offscreen run myapp --