[BUG] [Cowork] Windows: EXDEV error when TEMP is on a different drive than AppData
Bug Description
Cowork VM bundle download fails with EXDEV: cross-device link not permitted on Windows when the TEMP/TMP environment variable points to a different drive than %AppData%.
Claude Desktop downloads the VM bundle (rootfs.vhdx, ~9GB) to a temp directory under %TEMP%, then attempts fs.rename() to move it to %AppData%\Claude\vm_bundles\claudevm.bundle\. On Windows, rename() cannot move files across different drives (volumes), resulting in EXDEV.
Environment
- OS: Windows 11 Pro, Build 26200 (24H2)
- Claude Desktop: v1.1.2998.0 (Microsoft Store)
- TEMP:
D:\Rust\tmp(different drive) - AppData:
C:\Users\...\AppData\Roaming\Claude\(C: drive)
Error Log
[error] [download] VM download failed: EXDEV: cross-device link not permitted,
rename 'D:\Rust\tmp\wvm-WBv9YJ\rootfs.vhdx' ->
'C:\Users\USER\AppData\Roaming\Claude\vm_bundles\claudevm.bundle\rootfs.vhdx'
This error repeats indefinitely on every retry (observed 30+ retries in logs from 2026-02-11 to 2026-02-13).
Root Cause
Node.js fs.rename() uses the OS-level rename syscall, which does not support cross-device moves on Windows. When TEMP is on drive D: and AppData is on drive C:, the rename always fails.
Suggested Fix
Replace fs.rename() with a cross-device-safe move:
const fs = require('fs');
const path = require('path');
async function safeMove(src, dest) {
try {
await fs.promises.rename(src, dest);
} catch (err) {
if (err.code === 'EXDEV') {
// Cross-device: copy then delete
await fs.promises.copyFile(src, dest);
await fs.promises.unlink(src);
} else {
throw err;
}
}
}
Or use a library like move-file / fs-extra.move() which handles EXDEV automatically.
Additional Context
- This is a common scenario for users who redirect TEMP to a secondary drive (D:) to save SSD space on C:.
- Workaround: creating an NTFS junction (
mklink /J) forvm_bundlespointing to D: fixes EXDEV, but then causes a secondary HCS error (HRESULT 0x800701c0, OperationFailure: Construct) because HCS may not properly resolve reparse points when mounting VHDs. - Related: #24974 (Windows Cowork incomplete port — sessiondata.vhdx, macOS diagnostics)
- The network diagnostics module also runs macOS-specific commands (
/sbin/ifconfig,/usr/sbin/scutil) on Windows, as reported in #24974.
Steps to Reproduce
- Set user TEMP/TMP environment variable to a drive different from C: (e.g.,
D:\tmp) - Install Claude Desktop from Microsoft Store
- Open Cowork tab
- VM bundle downloads but fails at the rename step with EXDEV
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗