[BUG] [Cowork] Windows: EXDEV error when TEMP is on a different drive than AppData

Resolved 💬 2 comments Opened Feb 13, 2026 by Wis7Com Closed Feb 16, 2026

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) for vm_bundles pointing 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

  1. Set user TEMP/TMP environment variable to a drive different from C: (e.g., D:\tmp)
  2. Install Claude Desktop from Microsoft Store
  3. Open Cowork tab
  4. VM bundle downloads but fails at the rename step with EXDEV

View original on GitHub ↗

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