Plugin install fails with EXDEV when ~/.claude and /tmp are on different filesystems
Open 💬 6 comments Opened Jan 14, 2026 by pmatos
Description
When installing a plugin from a marketplace, the installation fails with an EXDEV: cross-device link not permitted error if the user's ~/.claude directory and /tmp are on different mount points/filesystems.
Steps to Reproduce
- Have a system where
~/.claudeand/tmpare on different filesystems (e.g.,/tmpon tmpfs, home on ext4/btrfs) - Add a marketplace:
/plugin marketplace add pmatos/badminton-cli - Install a plugin:
/plugin install badminton-cli@badminton-cli
Expected Behavior
Plugin installs successfully.
Actual Behavior
Error: Failed to install: EXDEV: cross-device link not permitted, rename '/home/user/.claude/plugins/cache/badminton-cli' -> '/tmp/claude-plugin-temp-1768379668576
Environment
- OS: Linux (Arch Linux 6.18.1)
- Shell: zsh
Analysis
The error occurs because rename() syscall cannot move files across different filesystems. The code likely uses fs.rename() which fails with EXDEV in this case.
The fix would be to fall back to copy + delete when EXDEV is encountered, or use a temp directory on the same filesystem as the target.
Workaround
Users can work around this by cloning the repo locally and installing from the local path:
git clone https://github.com/user/plugin-repo.git /tmp/plugin
Then in Claude Code:
/plugin install /tmp/plugin/claude-plugin --scope userThis issue has 6 comments on GitHub. Read the full discussion on GitHub ↗