Open source · MIT licensed

Double your Mac capacity. Same hardware.

Run 2 macOS VMs per Mac with APFS cloning, ephemeral runner pools, warm-pool scrub validation, and Kubernetes orchestration. Open source, $0 forever.

spooktacular
# Create ephemeral GitHub runners on your Mac fleet
$ kubectl get rp
NAME READY BUSY MIN MAX MODE PHASE
ios-ci-runners 2 0 2 4 ephemeral Healthy
 
# Verify host readiness
$ spook doctor
Apple Silicon (arm64)
macOS 15.4.0 · TLS configured · Capacity: 0/2
 
# Clone a VM in 48ms
$ spook clone base runner-01
com.apple.finder Finder running
com.apple.Safari Safari running
424
Tests in 53 suites
15+
CLI commands
~15K
Lines of Swift
$0
Forever

Built for real workflows

Four primary use cases, each with dedicated templates and CLI commands.

CI/CD Runners

Ephemeral GitHub Actions runners. Clone from a base image, run one job, destroy. 2x capacity per Mac.

AI Agents

Give computer-using agents a full macOS desktop. Guest agent provides clipboard, exec, and app control over VirtIO.

Remote Desktop

Personal macOS desktops for developers. Metal GPU, auto-resize display, audio, shared folders.

DevOps

HTTP API with Bearer auth. Kubernetes operator for declarative VM management. Templates and snapshots.

Rich Guest Agent

12 HTTP API endpoints running inside the guest VM over VirtIO socket. No SSH, no network configuration, no open ports.

New

Clipboard Sync

Get and set the guest clipboard from the host. Works over VirtIO -- no SSH, no VNC, no screen scraping required.

View source →
New

Remote Exec

Run commands inside the guest and stream output back. Full GUI session access via LaunchAgent. No SSH keys to manage.

View source →
New

App Control

List, launch, and quit macOS apps by bundle ID. Perfect for AI agents that need to interact with GUI applications.

View source →
New

Port Discovery

List all listening TCP ports inside the guest with process names. Know exactly what services are running without guessing.

View source →
New

File Transfer

Push files to the guest and pull files from the guest. Transfer build artifacts, configs, and data without shared folders.

View source →
New

Health Monitoring

Connection status with uptime tracking. Know instantly if the guest agent is responsive and how long it has been running.

View source →

How we compare

Feature parity with commercial tools. MIT licensed, $0 forever.

Feature Spooktacular GhostVM Tart Anka
LicenseMIT (free)ProprietaryFair SourceProprietary
Guest agent (clipboard, exec, apps)YesYesNoPartial
APFS cloneYes (48ms)YesYesYes
HTTP APIYes + Bearer authBasicNoYes
Kubernetes operatorYesNoOrchardYes
Templates4 built-inNoNoPaid
Setup Assistant automationYesYesYesYes
SwiftUI GUILiquid GlassNoNoYes
Price$0$$$$0-$36KContact sales

See full comparison →

Apple allows 2 VMs per Mac

The macOS Software License Agreement permits running up to two additional copies of macOS in virtual machines on each Apple-branded computer running Apple Silicon.

1x
Host Mac
+2x
macOS VMs
3x
Total capacity

Spooktacular enforces this limit via CapacityCheck.swift. Apple's EULA Section 2B(iii) explicitly permits virtualization on Apple Silicon. No additional licenses required.

Enterprise Operating Model

Security Model

Mandatory mTLS for controller-to-node traffic. Three-tier guest agent authorization (read / runner / break-glass). Keychain-backed secrets. TLS certificate hot reload.

Isolation Semantics

Ephemeral: destroy after each job. Warm pool: scrub + validate, destroy on failure. Persistent: named identity with snapshots. Failed scrub = VM destroyed, never reused.

EC2 Mac Mapping

One Dedicated Host → one Spooktacular node → two VM slots. Ephemeral mode = your Replace Root Volume equivalent, but faster. SSM for fleet operations.

Runner Scale Sets

RunnerPool CRD maps to GitHub ARC runner scale sets. Ephemeral runners with auto-registration, job detection via webhooks, and automatic deregistration.

Full security model and deployment classes →

Ready to double your Mac capacity?

424 tests. 15+ CLI commands. $0. Install and create your first VM in under 20 minutes.