Skip to content

fix(marketplace): point the Claude plugin source at plugins/conductor - #593

Merged
Jason Robert (jrob5756) merged 1 commit into
microsoft:mainfrom
adityaanikam:fix-587-claude-marketplace-source
Oct 7, 2026
Merged

Jason Robert (jrob5756) merged 1 commit into
microsoft:mainfrom
adityaanikam:fix-587-claude-marketplace-source

Conversation

@adityaanikam

Copy link
Copy Markdown
Contributor

Fixes #587.

/plugin install conductor@conductor fails in Claude Code with Source path does not exist: <marketplace>/conductor, even though claude plugin marketplace add microsoft/conductor works and claude plugin validate passes.

.claude-plugin/marketplace.json set metadata.pluginRoot to ./plugins and the entry's source to ./conductor. Claude Code resolves a relative source from the marketplace root, and pluginRoot only applies to bare names such as "conductor", not to a source that starts with ./. So the entry pointed at <repo>/conductor, but the plugin lives at <repo>/plugins/conductor. The pluginRoot plus ./name form is the convention the .github/plugin catalog uses, which src/conductor/plugins/marketplace.py already documents.

This changes the source to ./plugins/conductor and removes the pluginRoot setting, which nothing used. A source relative to the repository root works on every Claude Code version, whereas a bare name would need 2.1.239 or later. Conductor's own marketplace reader tries the repository root first, so it still resolves the plugin.

I also added TestShippedMarketplace, which checks that each source in the shipped Claude catalog is a plugin root under the repository root, and a changelog.d/587.fixed.md fragment.

How I checked

On Windows with Claude Code 2.1.229:

  • Before the change, claude plugin marketplace add <clone> succeeded and claude plugin install conductor@conductor failed with Source path does not exist: <clone>\conductor.
  • After the change, claude plugin marketplace update conductor and the same install succeed, and claude plugin list shows conductor@conductor as enabled.
  • The new test fails on the old marketplace.json (conductor: ./conductor) and passes on the new one.
  • uv run pytest tests/test_plugins tests/test_cli/test_plugin_commands.py: 463 passed, 12 skipped.
  • uv run ruff check src tests and uv run ruff format --check src tests are clean.

I did not test /plugin install from the GitHub repository itself, because that needs this change to be merged first. I also did not test Copilot CLI, which installs with gh skill install and does not read this file.

Claude Code resolves a relative plugin source from the marketplace root
and ignores metadata.pluginRoot for a "./" path. The entry "./conductor"
therefore resolved to <repo>/conductor, which does not exist, and
/plugin install conductor@conductor failed with "Source path does not
exist".

Write the source relative to the repository root and drop the unused
pluginRoot. Add a test that every source in the shipped catalog is a
plugin root under the repository root.

Fixes microsoft#587
Copilot AI balanced review requested due to automatic review settings October 7, 2026 11:05

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@codecov-commenter

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
⚠️ Please upload report for BASE (main@a086509). Learn more about missing BASE report.

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #593   +/-   ##
=======================================
  Coverage        ?   92.86%           
=======================================
  Files           ?      201           
  Lines           ?    33002           
  Branches        ?        0           
=======================================
  Hits            ?    30646           
  Misses          ?     2356           
  Partials        ?        0           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@jrob5756 Jason Robert (jrob5756) left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thanks for pointing the Claude plugin source at plugins/conductor!

@jrob5756
Jason Robert (jrob5756) merged commit fd74287 into microsoft:main Oct 7, 2026
15 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

marketplace.json's metadata.pluginRoot isn't honored by Claude Code's plugin installer — /plugin install conductor@conductor fails

4 participants