Plugin installation fails on network filesystems (EXDEV cross-device link error)

Resolved 💬 3 comments Opened Jan 22, 2026 by Jaureguy760 Closed Jan 22, 2026

Description

Plugin installation/update fails on HPC clusters and network filesystems with EXDEV: cross-device link not permitted error.

Environment

  • Claude Code version: v2.1.15
  • OS: Linux (RHEL 9) on HPC cluster
  • Home directory: Network filesystem (NetApp NFS mount at /iblm/netapp/home/...)
  • /tmp: Local filesystem (different mount point)

Error Message

Error: Failed to install: EXDEV: cross-device link not permitted, rename 
'/iblm/netapp/home/username/.claude/plugins/cache/claude-scientific-writer' -> 
'/tmp/claude-plugin-temp-1769049515451'

Root Cause

The plugin installer uses fs.rename() to move directories between the plugin cache (~/.claude/plugins/cache/) and /tmp. On Unix systems, rename() cannot work across different filesystems/mount points.

This is common in:

  • HPC clusters (home on NFS/Lustre/GPFS, tmp on local SSD)
  • Docker containers with mounted volumes
  • Any system where ~ and /tmp are on different filesystems

Suggested Fix

Replace fs.rename() with a copy-then-delete approach when cross-device operations are needed:

const fs = require('fs-extra');

async function safeMove(src, dest) {
  try {
    await fs.rename(src, dest);
  } catch (err) {
    if (err.code === 'EXDEV') {
      // Cross-device: copy then delete
      await fs.copy(src, dest);
      await fs.remove(src);
    } else {
      throw err;
    }
  }
}

Or use fs-extra's move() function which handles this automatically.

Workaround

Currently users must manually manage plugin installations, which is error-prone and tedious.

Impact

This affects all users on:

  • Academic/research HPC clusters
  • Enterprise environments with network home directories
  • Cloud instances with mounted storage

Thank you!

View original on GitHub ↗

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