feat: ship conductor as a Claude Code plugin marketplace#186
Merged
Conversation
Add a single-plugin marketplace at the repo root so users can install the
conductor skill directly from microsoft/conductor:
/plugin marketplace add microsoft/conductor
/plugin install conductor@conductor
Layout:
.claude-plugin/marketplace.json - marketplace catalog
plugins/conductor/.claude-plugin/ - plugin manifest
plugins/conductor/skills/conductor - symlink to .claude/skills/conductor
so the existing skill stays canonical
plugins/conductor/README.md - plugin overview and trust note
.github/workflows/validate-plugin.yml - JSON + version-parity CI
README.md - new 'Use as a Claude Code plugin'
section under Installation
The plugin ships markdown only (no bin/, hooks/, mcpServers/, or executables),
keeping the trust surface minimal. The same SKILL.md remains usable via
`gh skill install microsoft/conductor conductor` for Copilot CLI users.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- CI: replace no-op symlink check with one that asserts `.claude/skills/conductor` is actually a symlink (the previous `test -f` would have passed even with the symlink missing entirely). - CI: check version parity against pyproject.toml (the version that ships with the Python package), not against a redundant marketplace-entry version field. - marketplace.json: remove redundant `version` field from the plugin entry; per Anthropic's spec the entry version is optional and overrides plugin.json, so having both at the same value just creates a coupling point with no benefit. - README: bump gh CLI floor from 2.90 to 2.91 — the `--allow-hidden-dirs` reasoning in the PR description only holds from v2.91, and v2.91 also brought improved nested-skills discovery. - SKILL.md: rewrite description so it actually contains "Conductor" (the previous wording would not reliably match "run my conductor workflow") and scope it to Conductor-specific terms instead of generic "YAML workflows" that overlap with Argo, Temporal, GH Actions, etc. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
eeb1c3a to
3dc36cc
Compare
…he skill Per maintainer feedback: simpler to make conductor exclusively a plugin. The symlink at .claude/skills/conductor was added so the same skill could be discovered both as a local Claude Code skill and as a plugin export, but it adds cross-platform fragility (Windows checkouts without symlink support, CI clones, agents that don't follow symlinks) for marginal benefit. Changes: - Remove the .claude/skills/conductor symlink. - CI: drop the symlink-resolves check and remove .claude/skills/** from path triggers. - plugins/conductor/README.md: replace the symlink note with a short "Local development" section pointing at `claude --plugin-dir plugins/conductor` for testing edits to the skill from a clone. - README.md: update the install subsection to reference the plugin path instead of the now-removed .claude/skills/conductor location. Conductor maintainers who want the skill loaded while hacking on it should either install the plugin from the marketplace or use --plugin-dir. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Merged
jrob5756
added a commit
that referenced
this pull request
May 14, 2026
- feat(engine): registry references in sub-workflow workflow: field (#188) - feat: Claude Code plugin marketplace (#186) - docs(skill): refresh conductor skill with latest features (#187) - docs: rewrite 'Why Conductor?' README section (#185) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Make
microsoft/conductorinstallable as a plugin in both Claude Code and GitHub Copilot CLI without maintaining a second repo.Install commands users will run
Claude Code:
Copilot CLI (requires
gh≥ 2.90):Layout
.claude-plugin/marketplace.json— single-plugin marketplace catalog (usesmetadata.pluginRoot: \"./plugins\", fills incategory/keywords/tagsfor discovery).plugins/conductor/.claude-plugin/plugin.json— plugin manifest, version pinned to matchpyproject.toml(0.1.15).plugins/conductor/skills/conductor/— canonical location of the skill files (real directory)..claude/skills/conductor— symlink →../../plugins/conductor/skills/conductor, so local Claude Code dev sessions still find the skill at the conventional path.plugins/conductor/README.md— short plugin overview + trust note..github/workflows/validate-plugin.yml— JSON validation, symlink check, and version-parity check on PRs that touch the plugin files.README.md— new "Use the Conductor skill in Claude Code or Copilot CLI" subsection under Installation.Why the symlink direction matters
Initial draft had the symlink the other way (
plugins/.../conductor→.claude/skills/conductor). That works for Claude Code (its plugin installer clones the whole repo and follows symlinks), but it breaksgh skill installbecause GitHub's blob API doesn't dereference symlinks — the remote installer would receive a symlink blob instead of the SKILL.md tree. Flipping the canonical location toplugins/conductor/skills/conductor/fixes this.gh skill installdiscovery rules (verified incli/clisource —pkg/cmd/skills/install/install.go):plugins/*/skills/*/SKILL.mdautomatically..claude/skills/unless--allow-hidden-dirsis passed.So the canonical-path rule is: real files live under
plugins/conductor/skills/conductor/, the dotfile path is the convenience symlink.Trust surface
The plugin ships markdown only — no
bin/,hooks/,mcpServers/, or executables. Users can verify trust by reading the markdown directly.Versioning
marketplace.jsonandplugin.jsonare both pinned to0.1.15to matchpyproject.toml. Bumping all three together on releases keeps install detection working (without an explicit version, every commit looks like a new version to installed users).Verification
python -c \"import json; json.load(...)\"parses both manifests cleanly.test -f plugins/conductor/skills/conductor/SKILL.mdpasses (real file, not a broken symlink).git ls-files -sconfirmsplugins/conductor/skills/conductor/SKILL.mdis mode100644(regular file) and.claude/skills/conductoris mode120000(symlink).Suggested follow-up (not in this PR)
v0.1.15) so users can pin via/plugin marketplace add microsoft/conductor@v0.1.15.gh skill publishto add it to Copilot CLI's discoverable index.