Skip to content

Extract VM harness into standalone repo (Corer) #231

@obj-p

Description

@obj-p

Summary

Extract the VM harness under research/vm/ (plus the research/scripts/ research directions) into a new standalone repository called Corer ("like an apple corer"). This is a tracking issue only. No implementation is planned here.

The VM kit is a general-purpose headless macOS-VM-on-Apple-Silicon driver (boot / ssh / stop / install / snapshot). It has zero PreviewsMCP-specific shape and was always designed to be separable. See project-vm-kit-extractable memory (direction set by Jason 2026-05-17) and the "Big design decisions" section of research/vm/PROGRESS.md.

Why a separate repo

  • The wrapper's automation surface has no PreviewsMCP coupling. It is a general macOS-VM library.
  • Licensing void in this space is what made the custom wrapper necessary: Tart is Fair Source, UTM is GPL-3.0, macosvm is minimally maintained.
  • Keeping it in PreviewsMCP mixes a general tool with product-specific research.

Decisions (agreed)

  • Extraction method: clean snapshot. No git history carried over.
  • Scope: VM Kit plus the research/scripts/ research directions as subdirectories. Personal use only; not intended for external consumers. (Note: this is broader than the original memory, which framed extraction as the VM kit alone.)
  • Layout: research directions live as subdirectories (Xcode Previews today, future ones later).
  • Naming: library renamed to CorerKit or CorerVM (final pick TBD). CLI currently previewsvm.

Source branch

Snapshot from previews-research-3201, not previews-research. The -3201 branch is 437 lines ahead in research/vm/Sources/previewsvm/SetupCommand.swift.

What gets extracted

research/vm/ — self-contained Swift package PreviewsVM:

  • Library PreviewsVMKit (+ ObjC shim PreviewsVMObjC linking Virtualization)
  • CLI previewsvm (subcommands: boot, install, ssh, setup, snapshot, status, stop, plus test-keys / test-vnc smoke tests)
  • Only external dependency: swift-argument-parser
  • Intentionally not a target of the root Package.swift

research/scripts/ — research directions and analysis (Xcode Previews investigation: w3-w7 analysis, jit runtime findings, data captures, etc.).

research/scripts/provision-and-capture.sh and research/vm/build.sh — supporting scripts.

Design rule to preserve (from memory)

Keep PreviewsMCP-specific assumptions out. No references to the main Sources/ modules, no hard-coded Xcode-Previews internals, no coupling to the root Package.swift. Provisioning hooks (SIP disable, AMFI off, Xcode install) should stay parameterized / pluggable, not hardcoded. Extend the per-bundle config.json pattern instead of a repo-wide config.

References

  • Memory: project-vm-kit-extractable (direction set 2026-05-17)
  • Memory: project-vm-setup-assistant-via-snapshot, project-vm-sa-complete-macos-26-3-1 (SA sequence + provisioning findings)
  • research/vm/PROGRESS.md — "Big design decisions" section
  • research/vm/README.md — why the package is separate from root
  • prompts/jit-executor-research.md — original W1 harness brief

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions