Plugin installPath ignores source.path for external git-sourced plugins
Resolved 💬 3 comments Opened Apr 29, 2026 by amdvikasd Closed May 3, 2026
Summary
When a marketplace plugin defines an external git source with a path sub-key, Claude Code clones the repo but sets installPath to the repo root, ignoring the path offset. This prevents skill discovery, MCP config loading, and .claude-plugin detection for the plugin.
Steps to Reproduce
- Create a marketplace plugin with an external git source and a
pathfield inmarketplace.json:
{
"name": "dashboard",
"source": {
"source": "url",
"url": "git@github.com:example/my-repo.git",
"path": "plugin"
}
}
- The repo structure has the plugin assets in the
plugin/subdirectory:
repo-root/
├── backend/
├── frontend/
├── plugin/ ← path points here
│ ├── .claude-plugin/
│ │ └── plugin.json
│ ├── .mcp.json
│ └── skills/
│ └── query/
│ └── SKILL.md
└── README.md
- Install and enable the plugin via
settings.json:
"enabledPlugins": {
"dashboard@my_marketplace": true
}
- Restart Claude Code and try to invoke the plugin's skill (e.g.,
/dashboard:query).
Expected Behavior
installPathininstalled_plugins.jsonshould be set to<cache_dir>/plugin(honoring thepathfield).- Skills,
.mcp.json, and.claude-plugin/plugin.jsonare discovered correctly. /dashboard:queryworks as a slash command.
Actual Behavior
installPathis set to the repo root:<cache_dir>/(ignoringpath).- Claude Code cannot find
.claude-plugin/plugin.jsonat the root, so skills are never registered. /dashboard:queryreturns "Unknown command".- The MCP tools defined in
.mcp.jsondo load (likely via a separate mechanism), but skills do not.
Contents of installed_plugins.json after install:
{
"version": 2,
"plugins": {
"dashboard@my_marketplace": [
{
"scope": "user",
"installPath": "/home/user/.claude/plugins/cache/my_marketplace/dashboard/1.0.0",
...
}
]
}
}
Should be:
"installPath": "/home/user/.claude/plugins/cache/my_marketplace/dashboard/1.0.0/plugin"
Workaround
Manually editing installed_plugins.json to append the path value to installPath fixes the issue, but it reverts on every plugin reinstall/update.
Environment
- Claude Code version: 2.1.119
- OS: Linux 6.8.0-106-generic
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗