[BUG]
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
What's Wrong?
Cowork fails to start on Windows because the VM download pipeline uses rename() (atomic move) to move rootfs.vhdx from AppData\Local\Temp to AppData\Roaming\Claude\vm_bundles\claudevm.bundle\. On Windows, rename() across AppData\Local and AppData\Roaming fails with EXDEV: cross-device link not permitted, even though both paths are on the same drive (C:). This causes an infinite download loop — the file downloads successfully, the rename fails, the bundle is deleted, and the process repeats indefinitely.
What Should Happen?
Environment
- OS: Windows 11 Pro 25H2
- Claude Desktop version: 1.1.7714.0
- Installation method: MSIX package (tried both Microsoft Store and direct MSIX)
- Plan: Team
- Hyper-V: Enabled (Microsoft-Hyper-V + HypervisorPlatform)
- VirtualMachinePlatform: Enabled
Error Messages/Logs
## Error in logs
`cowork_vm_node.log` repeats this error continuously:
[error] [download] VM download failed: EXDEV: cross-device link not permitted,
rename 'C:\Users\<user>\AppData\Local\Temp\wvm-XXXXX\rootfs.vhdx'
-> 'C:\Users\<user>\AppData\Roaming\Claude\vm_bundles\claudevm.bundle\rootfs.vhdx'
Windows Event Log shows:
O serviço Claude terminou com o seguinte erro específico de serviço: Função incorreta.
Steps to Reproduce
- Install Claude Desktop 1.1.7714.0 via MSIX on Windows 11 Pro 25H2
- Enable Hyper-V and VirtualMachinePlatform
- Open Cowork tab
- Observe infinite download loop in cowork_vm_node.log
- CoworkVMService remains Stopped, Cowork shows "VM service not running"
Root Cause
Node.js fs.rename() (or equivalent) cannot move files between AppData\Local and AppData\Roaming on Windows because the OS treats these as different devices/namespaces, returning EXDEV. The fix is to use fs.copyFile() + fs.unlink() as a fallback when rename() fails with EXDEV.
Workarounds Attempted (none successful)
- Reinstalling workspace
- Deleting
claudevm.bundlefolder manually - Creating NTFS junction points between Local and Roaming paths
- Manually copying downloaded
rootfs.vhdxto destination (rejected due to missing.zstorigin file) - Enabling Hyper-V manually via PowerShell
- Changing
TEMP/TMPenvironment variables
Expected Behavior
rootfs.vhdx should be successfully moved to the bundle directory after download. If rename() fails with EXDEV, the code should fall back to copy+delete.
Additional Context
Related issues: #27801, #25663, #27010
Claude Model
Sonnet (default)
Is this a regression?
I don't know
Last Working Version
_No response_
Claude Code Version
claude-sonnet-4-6
Platform
Anthropic API
Operating System
Windows
Terminal/Shell
PowerShell
Additional Information
_No response_
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗