Use Quest on native Windows
Quest's local commands, setup, and removal run from PowerShell or CMD without
WSL, Administrator access, or Developer Mode. Release archives contain a
standalone quest.exe; Node and Bun are not required to run it.
Supported systems
The Windows builds target x64 and ARM64, using the repository's pinned Bun. Bun requires Windows 10 version 1809 or later and an x64 processor with SSE4.2; ARM64 uses its native build. The release and core/lifecycle CI use Windows Server 2022 x64 and Windows 11 ARM64 runners.
This change adds Windows artifacts to the next release containing it. Existing releases such as v0.1.0 do not contain them. Choose an actual published tag with the matching ZIP before installing. See the release list.
Install
If your repository already uses mise, pin a release with
mise use github:moq-dev/quest@<tag> and confirm quest --version.
The GitHub backend
selects the matching release asset. Its Windows install is checked separately
from the manual archive path after publishing.
To install an archive manually, replace the tag below with a release that contains Windows assets, then run this in PowerShell. It verifies the archive against that release's SHA256SUMS before extracting it. Stop any running Quest command before replacing an existing Windows executable.
$tag = 'vX.Y.Z'
$target = switch ([System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture) {
X64 { 'x86_64-pc-windows-msvc' }
Arm64 { 'aarch64-pc-windows-msvc' }
default { throw 'Quest has no Windows build for this architecture' }
}
$archive = "quest-$target.zip"
$base = "https://github.com/moq-dev/quest/releases/download/$tag"
$work = Join-Path ([System.IO.Path]::GetTempPath()) ('quest download ' + [guid]::NewGuid())
$install = Join-Path $env:LOCALAPPDATA 'Programs/Quest/bin'
New-Item -ItemType Directory -Path $work | Out-Null
try {
Invoke-WebRequest "$base/$archive" -OutFile (Join-Path $work $archive)
Invoke-WebRequest "$base/SHA256SUMS" -OutFile (Join-Path $work 'SHA256SUMS')
$entries = @(Get-Content (Join-Path $work 'SHA256SUMS') | ForEach-Object {
$fields = $_ -split '\s+', 2
if ($fields.Count -eq 2 -and $fields[1].TrimStart('*') -eq $archive) { $fields[0] }
})
if ($entries.Count -ne 1 -or $entries[0] -notmatch '^[a-fA-F0-9]{64}$') { throw 'Missing or duplicate checksum' }
if ((Get-FileHash (Join-Path $work $archive) -Algorithm SHA256).Hash -ne $entries[0]) { throw 'Checksum mismatch' }
Expand-Archive (Join-Path $work $archive) -DestinationPath (Join-Path $work 'archive')
& (Join-Path $work 'archive/quest.exe') --version
if ($LASTEXITCODE -ne 0) { throw 'The downloaded binary did not run' }
New-Item -ItemType Directory -Path $install -Force | Out-Null
Copy-Item (Join-Path $work 'archive/quest.exe') (Join-Path $install 'quest.exe') -Force -ErrorAction Stop
} finally {
Remove-Item -LiteralPath $work -Recurse -Force
}
$env:Path = "$install;$env:Path"
quest --version
The PATH change above lasts for this terminal only. Add the selected directory to your user PATH through Windows Settings if you want future terminals to find Quest. The archive install does not pin a repository's tool version; prefer its existing tool manager when a shared pin is required.
From the repository root, follow the setup instructions, or run
quest init to install the stubs and reference line, then quest check.
Both skill directories are real directories on new installs, so Git can track
them without symlink privileges. Existing conventional linked directories remain
supported. Setup preflights both destinations and refuses a user-owned skill
with the same name before writing anything. Uninstall recognizes unchanged
stubs with either LF or CRLF and preserves the instruction file's newline style.
Agent workflows
Quest does not bundle or start an agent. Install the native tools separately:
- Claude Code supports native PowerShell and CMD on x64 and ARM64. Git for Windows is optional for its Bash/Monitor tools; native Windows agent sandboxing is currently not supported. Those are upstream tool limits, not Quest command requirements.
- Codex on Windows supports native PowerShell and Windows sandboxing. Follow its current device and enterprise-policy requirements.
quest agent launches Claude Code natively, including
npm's claude.cmd shim, and quest agent stop ends the agent's whole process
tree at once. Its Codex agents need Linux worktree supervision.
The skills remain the same workflows. Claims and PR work need Git for Windows and the appropriate GitHub credentials, and repository builds need that project's own native toolchain. A repository requiring Nix or Linux-only checks still needs its supported environment; installing Quest does not port the repository. Parallel spawn depends on the foreground agent's subagent support.
Update or remove
For mise, update or remove the repository's Quest entry with the same tool
manager. For an archive install, stop active Quest processes and replace
quest.exe with a verified newer archive.
Before removing the executable, follow SETUP.md's removal workflow
to export active quests if requested and run quest uninstall. It removes
unmodified Quest stubs and its reference line, while retaining edited stubs,
custom skills, extra files, and all quest plans. Then delete only your installed
quest.exe and any user PATH entry you added. Delete quest/ only when you
explicitly choose to discard it.
Build and verify from source
Bun is required for a source build. From the checkout, run
bun install --frozen-lockfile, bun run check, bun run test, and
bun run build. Then run bun scripts/lifecycle-check.mjs dist/quest.js. The shared lifecycle checks
paths containing spaces, actual Git worktrees, CRLF plans/instructions, existing
custom skills, conflicts, and repeated setup/removal without remote writes.
Windows tests do not require symlink privileges; symlink-specific legacy cases
remain exercised on Linux/macOS. Use the Nix shell for the full Unix repository
checks; Nix itself is not required by native Quest users.
The release workflow cross-compiles with Bun, then verifies the PE architecture, archive checksum, version, and lifecycle on each native Windows runner before publishing. The install-check workflow tests fresh archive and mise installs after publishing. No tag or release is created by an ordinary pull request.