From 9e4348f28ac114c3f88d68e2df1fb915f1c2d3b9 Mon Sep 17 00:00:00 2001 From: mkslzk Date: Thu, 18 Jun 2026 15:43:41 +0200 Subject: [PATCH] docs(windows): document uv.exe AV false positive --- README.md | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/README.md b/README.md index 5fb4e80082b..96b097cd4a6 100644 --- a/README.md +++ b/README.md @@ -64,6 +64,41 @@ source ~/.bashrc # reload shell (or: source ~/.zshrc) hermes # start chatting! ``` +### Troubleshooting + +#### Windows Defender or antivirus flags `uv.exe` as malware + +If your antivirus (Bitdefender, Windows Defender, etc.) quarantines `uv.exe` from the Hermes `bin` folder (`%LOCALAPPDATA%\hermes\bin\uv.exe`), this is a **false positive**. The file is Astral's `uv` — the Rust Python package manager Hermes bundles to manage its Python environment. ML-based antivirus engines commonly flag unsigned Rust binaries that download and install packages. + +**To verify your copy is authentic:** + +```powershell +# Install GitHub CLI if needed +winget install --id GitHub.cli + +# Login to GitHub +gh auth login + +# Run verification +$uv = "$env:LOCALAPPDATA\hermes\bin\uv.exe" +$ver = (& $uv --version).Split(' ')[1] +[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 +$zip = "$env:TEMP\uv.zip" +Invoke-WebRequest "https://github.com/astral-sh/uv/releases/download/$ver/uv-x86_64-pc-windows-msvc.zip" -OutFile $zip -UseBasicParsing +gh attestation verify $zip --repo astral-sh/uv +Expand-Archive $zip "$env:TEMP\uv_x" -Force +(Get-FileHash "$env:TEMP\uv_x\uv.exe").Hash -eq (Get-FileHash $uv).Hash +``` + +If attestation says "Verification succeeded" and the last line prints `True`, you're good. + +**To whitelist Hermes:** +- **Windows Defender:** Run PowerShell as Admin → `Add-MpPreference -ExclusionPath "$env:LOCALAPPDATA\hermes\bin"` +- **Bitdefender:** Add an exception in the Bitdefender console (Protection > Antivirus > Settings > Manage Exceptions) +- Whitelist the **folder**, not the file hash — Hermes updates `uv` and the hash changes every version + +For more context, see the upstream Astral reports: [astral-sh/uv#13553](https://github.com/astral-sh/uv/issues/13553), [astral-sh/uv#15011](https://github.com/astral-sh/uv/issues/15011), [astral-sh/uv#10079](https://github.com/astral-sh/uv/issues/10079). + --- ## Getting Started