[BUG] Cowork VM download fails with EXDEV: cross-device link not permitted on Windows 11 Pro (MSIX install)

Resolved 💬 5 comments Opened Mar 20, 2026 by serranpa Closed Mar 23, 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?

[BUG] Cowork VM download fails with EXDEV: cross-device link not permitted on Windows 11 Pro (MSIX install)

Environment

  • OS: Windows 11 Pro, version 10.0.26200, x64
  • Claude Desktop version: 1.1.7714.0 (latest as of 2026-03-20)
  • Install method: MSIX via official Claude Setup.exe (claude.ai/download)
  • Package family: Claude_pzs8sxrjxfjjc
  • Hyper-V: Enabled, vmms service Running
  • CoworkVMService: Installed, Stopped (fails to start)

Preflight Checklist

  • [x] I have searched existing issues and this is not a duplicate (related: #27010, #25663, #29428)
  • [x] This is a single bug report
  • [x] I am using the latest version of Claude Desktop

What's Wrong?

Every time Cowork attempts to download rootfs.vhdx, the download succeeds and the checksum validates, but the final rename operation fails with:

EXDEV: cross-device link not permitted, rename 
'C:\Users\<user>\AppData\Local\Temp\wvm-<random>\rootfs.vhdx' 
-> 'C:\Users\<user>\AppData\Roaming\Claude\vm_bundles\claudevm.bundle\rootfs.vhdx'

The UI shows: "Failed to start Claude's workspace — VM service not running. The service failed to start."

Root Cause Analysis

The MSIX packaging system on Windows virtualizes AppData\Roaming into a separate VFS namespace from AppData\Local. When the Node.js download manager:

  1. Downloads rootfs.vhdx.zst to AppData\Local\Temp\wvm-<random>\
  2. Decompresses it to rootfs.vhdx in the same temp folder
  3. Attempts fs.rename() to move it to AppData\Roaming\Claude\vm_bundles\claudevm.bundle\

...the rename crosses the MSIX VFS device boundary, which Node.js (and the underlying Win32 MoveFile) does not allow across different virtual "devices". The error code EXDEV is the POSIX equivalent of ERROR_NOT_SAME_DEVICE.

The fix requires the app to use fs.copyFile() + fs.unlink() instead of fs.rename() when the destination is across a device boundary, OR to change the temp download directory to be on the same VFS namespace as the destination.

Reproduction Steps

  1. Install Claude Desktop via official Claude Setup.exe on Windows 11 Pro
  2. Ensure Hyper-V is enabled (State: Enabled via Get-WindowsOptionalFeature)
  3. Open Claude Desktop and navigate to the Cowork tab
  4. Observe the workspace fails to initialize

Log Evidence

From %LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude\logs\cowork_vm_node.log:

[info] rootfs.vhdx not found, downloading...
[info] Downloading rootfs.vhdx...
[info] rootfs.vhdx.zst checksum validated
[error] [download] VM download failed: EXDEV: cross-device link not permitted, 
  rename 'C:\Users\Serranpa\AppData\Local\Temp\wvm-LpxWbG\rootfs.vhdx' 
  -> 'C:\Users\Serranpa\AppData\Roaming\Claude\vm_bundles\claudevm.bundle\rootfs.vhdx'

This error repeats consistently on every attempt.

Workarounds Attempted (all failed)

| Approach | Result |
|---|---|
| Changing TEMP/TMP user env variables to AppData\Roaming\Temp | Node still used Local\Temp |
| Setting Environment registry key on CoworkVMService to custom TEMP path | Ignored by the service |
| Junction (mklink /J) from Roaming\Claude\vm_bundlesLocal\Claude\vm_bundles | Node resolves real path before rename, EXDEV persists |
| Junction from Roaming\Claude\vm_bundlesLocal\Temp | Same — real path resolved, EXDEV persists |
| Symbolic link (mklink /D) from Roaming\Claude\vm_bundlesLocal\Temp | EXDEV persists — Node resolves symlink target |
| Full uninstall + clean reinstall (removed AppData, registry, service) | EXDEV persists after clean install |

All filesystem redirection approaches fail because Node.js fs.rename resolves the final real paths before calling the OS rename, bypassing any junctions or symlinks.

Expected Behavior

The rootfs.vhdx file should be successfully placed in the bundle directory, and the Cowork workspace should start.

Suggested Fix

In the download manager, replace:

fs.rename(tempPath, destPath)

with a cross-device safe alternative:

await fs.copyFile(tempPath, destPath);
await fs.unlink(tempPath);

Or alternatively, resolve the temp download directory at runtime to ensure it shares the same VFS mount as the destination path.

Related Issues

  • #27010 — Windows 10 Pro MSIX, identical EXDEV root cause
  • #25663 — EXDEV after workspace corruption on Windows 11 Home
  • #29428 — Windows 11 Home, VM service not running
  • #24918 — Windows 11, API unreachable from workspace

What Should Happen?

The rootfs.vhdx file should be successfully downloaded and placed in the bundle directory, and the Cowork workspace VM should start normally.

Error Messages/Logs

[info] rootfs.vhdx not found, downloading...
[info] Downloading rootfs.vhdx...
[info] rootfs.vhdx.zst checksum validated
[error] [download] VM download failed: EXDEV: cross-device link not permitted, rename 'C:\Users\Serranpa\AppData\Local\Temp\wvm-LpxWbG\rootfs.vhdx' -> 'C:\Users\Serranpa\AppData\Roaming\Claude\vm_bundles\claudevm.bundle\rootfs.vhdx'

Steps to Reproduce

  1. Install Claude Desktop on Windows 11 Pro via official Claude Setup.exe (MSIX install)
  2. Enable Hyper-V via: Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
  3. Reboot
  4. Open Claude Desktop as Administrator
  5. Navigate to the Cowork tab
  6. Observe workspace fails with "VM service not running"
  7. Check log at: %LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude\logs\cowork_vm_node.log
  8. Error repeats on every attempt: EXDEV: cross-device link not permitted

Claude Model

None

Is this a regression?

No, this never worked

Last Working Version

n/a

Claude Code Version

N/A (issue is in Claude Desktop / Cowork, not Claude Code CLI)

Platform

Anthropic API

Operating System

Windows

Terminal/Shell

PowerShell

Additional Information

Root cause: MSIX VFS virtualizes AppData\Roaming into a separate device namespace
from AppData\Local. Node.js fs.rename() across this boundary fails with EXDEV.

Workarounds attempted and failed:

  • TEMP/TMP env variable changes (user and service registry)
  • Junction links (mklink /J) in multiple configurations
  • Symbolic links (mklink /D)
  • Full uninstall + clean reinstall

Fix: replace fs.rename() with fs.copyFile() + fs.unlink() in the download manager,
or ensure temp download dir shares the same VFS namespace as the destination.

Related issues: #27010, #25663, #29428, #24918

View original on GitHub ↗

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