GuestKit
Offline VM intelligence. Migration assurance you can prove.
Score boot readiness before power-on. Generate reviewable fix plans. Repair disks offline. Certify cutover with a signed Passport — then hand off to hyper2kvm / HyperSDK.
Demos · Wiki · Feature guide · Quick start · GHCR · Docs · zyvor.dev
disk.qcow2 / .vmdk / .vhdx
│
▼
┌───────────────────┐ doctor 0–100 migrate-plan YAML
│ Pure-Rust engine │ ──────────────────► passport emit
│ NBD/loop mount │ rescue / plan apply (offline)
└───────────────────┘
│
CLI · TUI · Python · Web · Agent
70+ commands · 6 disk formats · 0 libguestfs appliances · 8 migration targets · Apache-2.0
See it in action
Recorded live against real deployments — no staged screenshots.
Why teams use it
| Before GuestKit | With GuestKit |
|---|---|
| “Will it boot?” answered at power-on | Offline doctor score + root-cause chain |
| guestfish scripts and tribal knowledge | Structured plans, JSON/YAML, CI gates |
| Migration surprises on cutover weekend | Hypervisor-aware migrate-plan + day-0 packs |
| No audit trail MTV / virt-v2v can skip | Signed Cutover Passport |
| Fleet drift invisible until outage | fleet analyze/watch, forensic diff, policy-as-code |
| Migration order guessed by hand | fleet wave-plan — dependency-aware migration waves |
| Deep inspect needs a running guest | Carbon TUI + in-guest agent over QGA |
Pairs with: hyper2kvm for VMware → KVM. GuestKit certifies; hyper2kvm converts.
What you can do
Assurance before cutover
guestkit doctor vm.qcow2 --target proxmox --explain
guestkit migrate-plan vm.vmdk --target proxmox --export plan.yaml
guestkit passport emit vm.qcow2 --target kvm -o passport.json
guestkit passport verify passport.json --fail-below 80
Targets: kvm · proxmox · qemu · aws · azure · gcp · cloud · hyperv
GitHub Actions: gate conversion on the same score, no CLI install step —
see action.yml and the runbook at
docs/devops/01-passport-ci-gate.md.
- uses: hypersdk/guestkit@v1
with:
disk: vm.qcow2
target: kvm
fail-below: '80'
Offline repair (no boot required)
# Day-0 plans
guestkit plan generate win.qcow2 -p windows-rdp -o rdp.yaml
guestkit plan generate win.qcow2 -p windows-domain-leave --workgroup WORKGROUP
guestkit plan generate disk.qcow2 -p linux-ssh --user ubuntu --key-file ~/.ssh/id_ed25519.pub
# Rescue shortcuts
guestkit rescue disk.qcow2 -o enable-ssh
guestkit rescue disk.qcow2 -o fix-grub --force # BIOS or UEFI ESP
guestkit rescue win.qcow2 -o reset-password --user Administrator --password '…'
# → AES/RC4 SAM NT-hash when registry-write is built; RunOnce fallback
guestkit plan apply plan.yaml --vm disk.qcow2 --yes # backups + rollback
PackageInstall can stage from cache, host-fetch (GUESTKIT_PACKAGE_FETCH=1), or HTTP mirror (GUESTKIT_PACKAGE_MIRROR). Service enable/disable and CommandExec stage first-boot oneshots when chroot can’t run them live.
Live control + platform
- In-guest agent (Linux + Windows) over virtio-serial / QGA — inject offline, then
agent-proxy/agent-call - AI copilot (optional,
--features ai) — read-only tool-calling loop over the offline evidence snapshot:doctor --explain --ai,migrate-plan --ai. Native tool-calling for OpenAI (rig-core), cross-run memory across repeated runs on the same VM, and an MCP server (guestkit mcp-serve,--features mcp) for external hosts like Claude Desktop. OpenAI/xAI/Anthropic/Ollama. Not the in-guest agent above — see AI Guest Agent roadmap - KubeVirt boot-inspect hooks and Guest Control Fabric
- Web console + worker on GHCR; Helm chart under
deploy/helm/zyvor - Python:
pip install hypersdk-guestkit→from guestkit import Guestfs
Full map: Customer Feature Guide (PDF) · Customer manuals
Quick start
cargo install guestkit # installs guestkit + guestctl
guestkit doctor vm.qcow2 --target proxmox --explain
guestkit migrate-plan vm.vmdk --target proxmox --export plan.yaml
guestctl tui vm.qcow2 # Assurance · preview · export
| You want… | Go here |
|---|---|
| First hour | Getting started |
| Command cheat sheet | Quick reference |
| CLI depth | CLI guide |
| Migration story | Migration assurance |
| Fix plans / rescue | Fix plans |
| Guest agent | Guest agent |
| CE vs Enterprise | ce-vs-enterprise |
Host needs: Linux with qemu-img, losetup, and qemu-nbd (mount/repair may need root).
Run from GHCR
Public images under ghcr.io/hypersdk — no docker login required.
| Image | Role |
|---|---|
ghcr.io/hypersdk/zyvor-ui |
Web console |
ghcr.io/hypersdk/zyvor-api |
API |
ghcr.io/hypersdk/guestkit-worker |
Disk-inspection worker |
docker compose -f deploy/docker-compose.ghcr.yml pull
docker compose -f deploy/docker-compose.ghcr.yml up -d
open http://localhost:8088
Eval only — unauthenticated stack. Do not expose beyond localhost.
Production:deploy/docker-compose.prod.example.yml· Docker guide · Helm
Default console login for packaged installs is documented in remote deploy — change it before any network exposure.
Platform layout
| Layer | In this repo |
|---|---|
| Engine | Pure-Rust parsers + evidence schema · NBD/loop mount (src/, crates/) |
| CLI / TUI | guestkit · guestctl — doctor, passport, fleet, rescue, carbon TUI |
| Agent | Linux + Windows · protocol 1.3 · agent-inject / agent-proxy |
| Python | hypersdk-guestkit |
| K8s | KubeVirt hooks · k8s/ |
| Web / worker | GHCR images · deploy/ |
┌────────────────────────────────────────────────────────────┐
│ guestkit CLI · guestctl TUI · Python · Web · Agent │
├────────────────────────────────────────────────────────────┤
│ Rust evidence engine · boot scoring · fix-plan apply │
├────────────────────────────────────────────────────────────┤
│ JSON · YAML · HTML · PDF · Passport · CI exit codes │
└────────────────────────────────────────────────────────────┘
Documentation
| Goal | Document |
|---|---|
| Operator wiki | hypersdk/guestkit/wiki |
| Docs home | docs/README.md · INDEX |
| DevOps runbooks | docs/devops — Passport CI, workers, air-gap, fleet, cutover, triage |
| Feature guide (all areas) | guestkit-customer-feature-guide.md |
| Docker / GHCR | DOCKER.md |
| Remote deploy | DEPLOY-REMOTE.md |
| Architecture | overview |
| User stories / industry | USER_STORIES · INDUSTRY_USE_CASES |
| Changelog / roadmap | CHANGELOG · roadmap |
→ zyvor.dev/guestkit · Full Zyvor platform
Development
cargo build --release
cargo test
See CONTRIBUTING and CI under .github/workflows/. docs/ and this README are authoritative over any historical build notes in the tree.
License
Apache-2.0 · additional notes in docs/legal/ where applicable.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hypersdk_guestkit-1.0.0.tar.gz.
File metadata
- Download URL: hypersdk_guestkit-1.0.0.tar.gz
- Upload date:
- Size: 5.6 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
da93370d839dde329bf998bf390757a87c2985aa5f8a19e3f42c219728267812
|
|
| MD5 |
32eede78b38b137f2e2b187f943fe9aa
|
|
| BLAKE2b-256 |
5b687d52f03cab58211018332f4564edb8e442c93ab1d0e54d759fd37e2496f8
|
File details
Details for the file hypersdk_guestkit-1.0.0-cp38-abi3-manylinux_2_39_x86_64.whl.
File metadata
- Download URL: hypersdk_guestkit-1.0.0-cp38-abi3-manylinux_2_39_x86_64.whl
- Upload date:
- Size: 1.9 MB
- Tags: CPython 3.8+, manylinux: glibc 2.39+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
maturin/1.14.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6c5c1182b554b41944e104413219d6571243b50a20f0195879bdce14dc6c3054
|
|
| MD5 |
df1b99cd120b656c9e0325d16efa1613
|
|
| BLAKE2b-256 |
c6183d8eb1d71bf6a97022de7f33ab49627df7af1e7a9430221b48fd979d532f
|
File details
Details for the file hypersdk_guestkit-1.0.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: hypersdk_guestkit-1.0.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.8 MB
- Tags: CPython 3.8+, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
32b1437a610d168f317fe1b55ae2455b77fceb90bed6a57858421f35541b354a
|
|
| MD5 |
e10953549a08d3e7fa4a8041c9f72647
|
|
| BLAKE2b-256 |
f22b7204497921f9e5e029c8cb3ca643213c44efac7341c3e7e3dc038c8e7c94
|