Skip to main content

Windows-to-Linux migration wizard powered by AI

Project description

QuickHatch

CI License: Personal use Python Code style: ruff Ko-fi

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 desktop after migration 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

  1. Scans your Windows system — apps (winget + registry), hardware, installed fonts, browser profiles, disk layout, etc.
  2. Asks your preferences — desktop style, icon style, wallpaper, use cases (dev/gaming/office/…).
  3. 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.
  4. 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 Linux and Customize 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 agent click.

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

quickhatch-0.1.0.tar.gz (7.8 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

quickhatch-0.1.0-py3-none-any.whl (6.9 MB view details)

Uploaded Python 3

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

Hashes for quickhatch-0.1.0.tar.gz
Algorithm Hash digest
SHA256 58860246917d5e7e9751b05a95a4269c52e4a6932fb67dbddac4dc1ae0b0946b
MD5 e9bb9f35104eb178d01f468498828cdf
BLAKE2b-256 c2dc7cdabac94f7911a4790cd11a083679adc9cd33207befe47d92cd68fbff80

See more details on using hashes here.

Provenance

The following attestation bundles were made for quickhatch-0.1.0.tar.gz:

Publisher: publish-pypi.yml on JanBartos6/QuickHatch

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for quickhatch-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 04425774e11e158784b32823adeaf6bb07ee445ff438116d361a28695603071c
MD5 b86662de24c2f42e157c9aac9be25229
BLAKE2b-256 01cf57eed4a28d3611cccca5d7bd41a3ad2d34e3e512febf54e032b01388e40e

See more details on using hashes here.

Provenance

The following attestation bundles were made for quickhatch-0.1.0-py3-none-any.whl:

Publisher: publish-pypi.yml on JanBartos6/QuickHatch

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page