Plugin install fails with "EXDEV: cross-device link not permitted" (Windows desktop app)
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?
Installing a plugin from the in-app Directory (Plugins) fails every time with a Node.js EXDEV error during the final rename step of the install, so the install never completes.
What Should Happen?
The plugin installs successfully.
Error Messages/Logs
EXDEV: cross-device link not permitted, rename 'C:\Users\ADMINS\AppData\Roaming\Claude\local-agent-mode-sessions\66711dda-94b5-4fea-8222-ee60b56d5f2b\9f87b643-6f6b-4499-a4bf-fef420cd2505\rpm\plugin_01Eeb9y5m4iFuY3yRtytYfdc.tmp.1787889862517' -> 'C:\Users\ADMINS\AppData\Roaming\Claude\local-agent-mode-sessions\66711dda-94b5-4fea-8222-ee60b56d5f2b\9f87b643-6f6b-4499-a4bf-fef420cd2505\rpm\plugin_01Eeb9y5m4iFuY3yRtytYfdc'
Steps to Reproduce
- Open the Claude desktop app on Windows.
- Open Directory -> Plugins.
- Select the "Marketing" plugin (by Anthropic).
- Click "Install".
- Installation fails immediately with the EXDEV error shown above.
Already tried, none of which fixed it:
- Restarting the Claude desktop app and retrying
- Pausing OneDrive sync on the affected folders
- Updating Claude desktop app to the latest version
- Retrying in a fresh session
Claude Model
None
Is this a regression?
I don't know
Last Working Version
_No response_
Claude Code Version
N/A - bug is in the Claude desktop app's Plugin Directory installer (GUI), not the claude CLI. Desktop app was on its latest available version as of 2026-08-28.
Platform
Anthropic API
Operating System
Windows
Terminal/Shell
Other
Additional Information
Likely root cause: EXDEV occurs when Node's fs.rename() is used to move a file between two different filesystem mount points - a hard OS-level limitation, not a permissions issue. Several duplicate reports in this repo trace similar plugin-install failures to the installer relying on fs.rename() without a cross-device (copy+delete) fallback:
try {
fs.renameSync(src, dest);
} catch (err) {
if (err.code === 'EXDEV') {
fs.cpSync(src, dest, { recursive: true });
fs.rmSync(src, { recursive: true });
} else {
throw err;
}
}
Here, source and destination both print as being under the same local-agent-mode-sessions\...\rpm\ directory, suggesting the temp file and plugin cache directory sit on different underlying volumes/mounts (possibly because %APPDATA%\Roaming is redirected/synced, e.g. via OneDrive Known Folder Move or a corporate profile redirection policy) even though the paths look identical at the string level.
Related known issues in this repo (same EXDEV root cause, different environments):
- https://github.com/anthropics/claude-code/issues/25444
- https://github.com/anthropics/claude-code/issues/23724
- https://github.com/anthropics/claude-code/issues/20276
- https://github.com/anthropics/claude-code/issues/18115
- https://github.com/anthropics/claude-code/issues/14799
- https://github.com/anthropics/claude-code/issues/26662
None of the above exactly matches this Windows local-agent-mode-sessions\...\rpm\ path pattern, so this may be a distinct instance of the same underlying bug class specific to the Windows desktop app's plugin installer.
Suggested fix: replace the fs.rename() call in the plugin install/extract path with a cross-device-safe move (attempt rename, and on EXDEV fall back to copy + delete).