[BUG] Desktop sessions load the install-time cache copy of local-directory marketplace plugins instead of loading in place
Summary
For a plugin whose marketplace entry is a relative path source in a marketplace added from a local directory,
the docs say it "loads in place from the marketplace folder" and that edits "take effect at the next session start or /reload-plugins"
(Plugins reference).
The CLI does this. Claude Desktop Code-tab sessions instead load the copy written to~/.claude/plugins/cache/<marketplace>/<plugin>/<sha>/ at install time,
so source changes never reach Desktop sessions, including after /reload-plugins.
Environment
- macOS (Darwin 25.6.0)
- Claude Desktop with bundled Claude Code 2.1.280; standalone CLI 2.1.278
- Marketplace registered with
claude plugin marketplace add <repo-dir> --scope user(source typedirectory);
.claude-plugin/marketplace.json entries use "source": "./share/agents/plugins/<name>"; plugin.json has no version.
- Plugins installed with
claude plugin install <name>@<marketplace> --scope user.
Steps to reproduce
- Create a git repo with a local-directory marketplace as above and one plugin containing a skill.
- Register the marketplace and install the plugin at user scope.
- After installing, add a new skill directory to the plugin in the source repo, commit or not.
- Start a new CLI session (
claude -p "..." --output-format stream-json --verbose) and a new Desktop Code-tab session.
Expected
Both sessions load the plugin from the source directory and list the new skill.
Actual
- CLI (2.1.278, and the Desktop-bundled 2.1.280 binary run headless with an isolated
CLAUDE_CONFIG_DIR):
the init event reports the plugin path as the source directory; a skill present only in source is loaded,
a skill present only in the cache copy is not.
- Desktop Code-tab session (bundled 2.1.280): the new skill does not appear in
/autocomplete, before or after/reload-plugins.
Skill invocations report a base directory under ~/.claude/plugins/cache/<marketplace>/<plugin>/<sha>/,
and that directory holds .in_use/<pid of the Desktop session process>.
In our case the cache copy was taken at a commit that is no longer an ancestor of HEAD (after a history rewrite),
so Desktop sessions ran plugin content that no longer exists in the repository.
claude plugin list --jsonshowsinstallPathpointing at the cache copy for these plugins in both configurations.claude plugin updateonly re-records when the repoHEADcommit changes; uncommitted source edits report "already at the latest version".
Related
- #83704 (Desktop sessions load a different plugin store than the CLI)
- #86154 (Desktop sessions and
--plugin-dir) - #73673 (Desktop git-marketplace plugins never update)
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗