Plugins synced from claude.ai can't satisfy a declared plugin dependency, so the dependent plugin is disabled
Version: Claude Code 2.1.291 (CLI and the desktop Code tab), macOS
What happens
I turned on two plugins in claude.ai: superpowers (from the Anthropic directory) and my own plugin x (from my GitHub marketplace). Both sync into Claude Code as <name>@synced. x's plugin.json declares:
"dependencies": [{ "name": "superpowers", "marketplace": "claude-plugins-official" }]
claude plugin list then shows:
❯ superpowers@synced Status: ✔ loaded
❯ x@synced Status: ✘ disabled
Error: Dependency "superpowers@claude-plugins-official" is not installed — run
`claude plugin install superpowers@claude-plugins-official`, or check that its
marketplace is added
The dependency's plugin is installed and loaded, just under @synced. Following the error's advice loads superpowers a second time, which duplicates its skills and its startup hook.
Why
The docs say synced plugins load as <name>@synced "with no marketplace and no install record", and a dependency resolves by <name>@<marketplace> (the declaring plugin's own marketplace by default). A synced plugin therefore can't satisfy any dependency:
marketplaceset: the synced copy has no marketplace, so it never matches.- No
marketplace: the dependency resolves in the declaring plugin's marketplace. That works forx@synced→superpowers@synced, but not for the same plugin installed from its marketplace (x@x-toolkit→superpowers@x-toolkit, which doesn't exist).
The only manifest that works for a plugin offered both synced and through a marketplace is one that declares no dependencies at all.
Expected
One of these:
- A synced plugin satisfies a dependency on the same plugin name, at least when it came from the same source the dependency names (the synced row already records
anthropic-plugin-directoryor the account marketplace'ssource). - A dependency can be named without a marketplace, matching any enabled plugin with that name.
- Failing those, the error mentions the loaded
@syncedcopy and suggests a fix that doesn't load a second copy.
Workaround
Remove dependencies from plugin.json and list the required plugins in the README.