https://github.com/akesson/vm
For handling Parallels host - vm workflows in Claude
https://github.com/akesson/vm
Last synced: about 9 hours ago
JSON representation
For handling Parallels host - vm workflows in Claude
- Host: GitHub
- URL: https://github.com/akesson/vm
- Owner: akesson
- Created: 2026-07-09T14:05:55.000Z (about 20 hours ago)
- Default Branch: main
- Last Pushed: 2026-07-09T18:57:40.000Z (about 15 hours ago)
- Last Synced: 2026-07-09T19:08:55.186Z (about 15 hours ago)
- Language: Rust
- Size: 50.8 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# vm
Run commands in Parallels VMs against a synced copy of the current repo — one
tool, installed on the host **and** in every guest.
```sh
vm run --os windows -- cargo nextest run -p my-windows-crate
vm exec lin -- cargo clippy --fix --writeback
vm ls
```
## Model
- **The host working tree is the single source of truth.** Before every exec,
the dirty working tree (staging area untouched) is snapshotted as a git
commit object and pushed over ssh to a per-guest native checkout under the
guest's `work_root`. The guest resets to it and the tree hash is verified —
guests always run exactly what is on the host's disk.
- **Builds happen on guest-local disk.** No shared folders: no cross-platform
`target/` conflicts, native file watching and locking, native speed.
- **One-way by default.** Guests cannot corrupt the host tree; `--writeback`
explicitly returns source changes made in the guest (e.g. `clippy --fix`).
- **ssh is the transport, prlctl does what only it can**: VM lifecycle,
IP discovery, screenshots, snapshots, and first-time bootstrap.
- `vm run --os ` runs **natively** when the host already
is that OS — the same mise task works on a dev Mac, inside a VM, and on CI.
## Setup
Host config lives at `~/.config/vm/config.toml`:
```toml
[vm.win]
parallels_name = "Windows 11"
os = "windows"
user = "henrik"
work_root = 'C:\work'
[vm.lin]
parallels_name = "Ubuntu 24.04"
os = "linux"
user = "parallels"
work_root = "~/work"
```
`vm doctor` checks host and guests; `vm deploy ` builds and installs
the agent inside a guest.