Windows-to-Linux migration wizard powered by AI
Project description
QuickHatch
An AI-driven wizard that migrates a Windows workstation to Linux.
QuickHatch scans your Windows system, asks about your preferences, generates a tailored migration plan using an AI model, and can then SSH into your new Linux machine to install and configure everything for you — desktop environment, drivers, applications, themes, and user accounts.
KDE Plasma on Arch Linux, fully set up by the QuickHatch agent (LM Studio + Gemma 4 26B) in a VirtualBox VM.
License: source-available for personal, educational, evaluation, and other non-commercial use. Commercial use is not granted by default; for commercial licenses, contact appdeveloper.honza@gmail.com.
Sponsor development on GitHub or support QuickHatch on Ko-fi.
⚠️ Security Warning — Read This First
QuickHatch lets an AI model execute shell commands as root on a Linux machine via SSH. That carries real risk:
- A mistaken or malicious command can destroy data. The agent will try
pacman -Syu,rm,systemctl, and similar — if the plan is wrong, so is the execution. - Prompt injection is a real threat. If the AI's web search results or profile data contain adversarial text, the model could be tricked into running unintended commands.
- Local models are not safer than API models in this respect. They can hallucinate commands just as easily.
- Always test against a VM first. Never point this at a machine with data you can't afford to lose.
- Review the plan the agent produces before you hit "Launch agent". The wizard shows the full plan in the UI for a reason.
- Use a dedicated SSH key and a target machine with snapshots or backups in place.
This project is experimental. It is NOT recommended for running against your main workstation without a full backup and a tested recovery plan.
QuickHatch is provided as is. You are responsible for the AI provider you choose, the commands you approve, your backups, and the consequences of running the tool.
Setup mode status
| Mode | Status | Notes |
|---|---|---|
| Configure existing Linux | Beta | No partitioning or reinstall. Intended for apps, drivers, desktop, services, and user config on an already-installed system. |
| Fresh install, full disk | Experimental | May erase one explicitly confirmed target disk after VM testing, disk inventory, dry-run preview, and typed confirmation. |
| Dual boot | Advanced / experimental | QuickHatch must not shrink Windows or delete Windows/BitLocker/recovery partitions; use only pre-created free space or explicit mappings. |
| Manual partition mapping | Dangerous / expert | Only for users who know exactly which partitions should be formatted, mounted, or preserved. |
What it does
- Scans your Windows system — apps (winget + registry), hardware, installed fonts, browser profiles, disk layout, etc.
- Asks your preferences — desktop style, icon style, wallpaper, use cases (dev/gaming/office/…).
- Generates a migration plan — 6 Markdown cards covering distro, apps, drivers, desktop, migration steps, and a quick-reference summary. Live web search (DuckDuckGo) is used for up-to-date info on drivers, app alternatives, and desktop environments. Screenshots of recommended DEs are fetched and embedded.
- Executes the plan remotely — the agent SSHes into your new Linux machine and runs the commands one at a time, seeing each result and adapting to errors (missing packages, low disk, etc.).
How it works
┌──────────────────┐ ┌────────────────┐ ┌─────────────────┐
│ Windows (host) │ │ AI provider │ │ Linux target │
│ │ │ │ │ │
│ QuickHatch GUI │◄───►│ LM Studio or │ │ │
│ (Python HTTP │ │ Anthropic / │ │ (live USB or │
│ + static │ │ OpenAI / etc │ │ installed) │
│ HTML) │ │ │ │ │
│ │ │ │ │ ┌────────┐ │
│ Setup agent ────┼─────┼────────────────┼────►│ SSH│ bash │ │
│ (Python loop) │ │ │ │ └────────┘ │
└──────────────────┘ └────────────────┘ └─────────────────┘
The setup agent is a proper agentic loop: one command at a time, the model sees stdout/stderr/exit code and decides the next step. It can diagnose errors (xf86-video-vmware not found → switch to kernel modesetting), adapt to disk constraints, and verify end-state before declaring done.
Supported AI providers
| Provider | Notes |
|---|---|
| Claude API (Anthropic) | Recommended. Use claude-opus-4-6 or claude-sonnet-4-6. |
| OpenAI API | gpt-4o, gpt-4o-mini, o3. |
| LM Studio (local) | Queries localhost:1234/v1/models for your loaded model. Gemma 4 26B works well; 4B struggles with tool use. |
| Ollama (local) | Any Ollama-supported model via localhost:11434. |
| Codex CLI | Launches in a separate terminal. |
Requirements
- Host: Windows 10/11 with Python 3.10+
- AI: an API key OR a local model in LM Studio / Ollama
- Target: a Linux machine (VM or bare metal) with SSH enabled and your SSH key in
authorized_keys - Recommended: VirtualBox + a clean Arch/Fedora/Ubuntu VM with snapshots for testing
Installation
git clone https://github.com/JanBartos6/QuickHatch.git
cd QuickHatch
pip install -e .
Usage
Web GUI (recommended):
python -m quickhatch --gui
Terminal wizard:
python -m quickhatch
Demo mode (loads a sample profile, for testing on Linux):
python -m quickhatch --gui --demo
Testing against a VM
The recommended way to try QuickHatch without risk is to spin up a VirtualBox VM:
# Create a VM with 8GB RAM, 4 CPUs, 40GB disk, EFI firmware
# Boot from an Arch/Fedora/Ubuntu ISO
# Install the OS (or use the included install script as a starting point)
# Add your SSH public key to /root/.ssh/authorized_keys
# Take a snapshot
# In QuickHatch, enter 127.0.0.1:2222 as the IP, root as the user, launch agent
See docs/testing-in-vm.md (WIP) for detailed steps.
Limitations
- Data transfer is method-dependent. If the Windows/host PC stays online during remote setup, QuickHatch can copy selected scanned folders to the installed Linux user after setup. External-drive and cloud-sync methods still remain guided/manual.
- No automated USB flashing. The "Bootable USB" step is a guided walkthrough — you use Rufus, Ventoy, or balenaEtcher yourself.
- GPU passthrough is not handled. NVIDIA drivers will install on bare metal but not inside VirtualBox with the default VMSVGA adapter.
- Wayland + VirtualBox mouse integration is flaky without Guest Additions. For testing, enable SDDM autologin so you can skip the login screen.
- The setup agent requires SSH key authentication. Password-only SSH is not supported.
- Arch is the most tested distro. It has the fewest installer crutches, so if it works on Arch it usually works everywhere. Fedora and Ubuntu should work; other distros are at your own risk.
- Only two modes currently:
Migrate from Windows → fresh LinuxandCustomize existing Linux. Distro-to-distro switching is not implemented.
Project status
Experimental. The analysis pipeline and setup agent work end-to-end against:
- A real PC running Arch Linux, fully functional after a June 4, 2026 install driven by Gemini 3.1 Flash Lite.
- A real Arch VM verified with 863 packages installed, KDE Plasma + Firefox +
LibreOffice + GIMP + VLC + audio stack, all from a single
Launch agentclick.
Expect rough edges around:
- Error recovery in the middle of large installs
- Multi-user system configuration
- Wayland-only DEs and display manager quirks
Contributions welcome — see CONTRIBUTING.md. Contributions submitted for inclusion in the official project are assigned/licensed to Jan Bartos under the contribution terms there.
License, forks, and contributions
QuickHatch is source-available and licensed for personal, educational, evaluation, and other non-commercial use. For commercial use, contact appdeveloper.honza@gmail.com. Commercial licenses are handled separately and may depend on organization size and use case.
Forks and modified versions must keep the QuickHatch license notice and remain subject to the same non-commercial terms unless Jan Bartos grants a separate written license. Creating a branch, fork, modified copy, or derivative work does not grant commercial-use rights.
Jan Bartos is the official creator and maintainer of the project. Contributions submitted for inclusion in the official repository are handled under the assignment/license terms in CONTRIBUTING.md.
See LICENSE, CONTRIBUTING.md, and GOVERNANCE.md for details.
Support
If QuickHatch is useful to you, you can support development through GitHub Sponsors or Ko-fi.
QuickHatch is not affiliated with Anthropic, OpenAI, LM Studio, System76, or any Linux distribution.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
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 quickhatch-0.1.0.tar.gz.
File metadata
- Download URL: quickhatch-0.1.0.tar.gz
- Upload date:
- Size: 7.8 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
58860246917d5e7e9751b05a95a4269c52e4a6932fb67dbddac4dc1ae0b0946b
|
|
| MD5 |
e9bb9f35104eb178d01f468498828cdf
|
|
| BLAKE2b-256 |
c2dc7cdabac94f7911a4790cd11a083679adc9cd33207befe47d92cd68fbff80
|
Provenance
The following attestation bundles were made for quickhatch-0.1.0.tar.gz:
Publisher:
publish-pypi.yml on JanBartos6/QuickHatch
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
quickhatch-0.1.0.tar.gz -
Subject digest:
58860246917d5e7e9751b05a95a4269c52e4a6932fb67dbddac4dc1ae0b0946b - Sigstore transparency entry: 1804400015
- Sigstore integration time:
-
Permalink:
JanBartos6/QuickHatch@80a4d85c4e33f40b1c1a65b000ddec2e13bcc768 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/JanBartos6
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@80a4d85c4e33f40b1c1a65b000ddec2e13bcc768 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file quickhatch-0.1.0-py3-none-any.whl.
File metadata
- Download URL: quickhatch-0.1.0-py3-none-any.whl
- Upload date:
- Size: 6.9 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
04425774e11e158784b32823adeaf6bb07ee445ff438116d361a28695603071c
|
|
| MD5 |
b86662de24c2f42e157c9aac9be25229
|
|
| BLAKE2b-256 |
01cf57eed4a28d3611cccca5d7bd41a3ad2d34e3e512febf54e032b01388e40e
|
Provenance
The following attestation bundles were made for quickhatch-0.1.0-py3-none-any.whl:
Publisher:
publish-pypi.yml on JanBartos6/QuickHatch
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
quickhatch-0.1.0-py3-none-any.whl -
Subject digest:
04425774e11e158784b32823adeaf6bb07ee445ff438116d361a28695603071c - Sigstore transparency entry: 1804400164
- Sigstore integration time:
-
Permalink:
JanBartos6/QuickHatch@80a4d85c4e33f40b1c1a65b000ddec2e13bcc768 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/JanBartos6
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@80a4d85c4e33f40b1c1a65b000ddec2e13bcc768 -
Trigger Event:
workflow_dispatch
-
Statement type: