[BUG]

Resolved 💬 3 comments Opened Mar 23, 2026 by wallisonlima89 Closed Mar 27, 2026

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

  1. Install Claude Desktop 1.1.7714.0 via MSIX on Windows 11 Pro 25H2
  2. Enable Hyper-V and VirtualMachinePlatform
  3. Open Cowork tab
  4. Observe infinite download loop in cowork_vm_node.log
  5. 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.bundle folder manually
  • Creating NTFS junction points between Local and Roaming paths
  • Manually copying downloaded rootfs.vhdx to destination (rejected due to missing .zst origin file)
  • Enabling Hyper-V manually via PowerShell
  • Changing TEMP/TMP environment 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_

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗