Unify Copilot and Claude skills into a single shared plugin#631
Draft
nmetulev wants to merge 1 commit into
Draft
Unify Copilot and Claude skills into a single shared plugin#631nmetulev wants to merge 1 commit into
nmetulev wants to merge 1 commit into
Conversation
Serve one plugin source (plugins/winapp/) to both GitHub Copilot and Claude Code via per-host manifests and marketplaces, eliminating the generated .claude/ mirror and its sync script. - Move the agent + 8 skills from .github/plugin/ into plugins/winapp/ (skill dirs renamed to winapp-<name> so both hosts load them with no transform step) - Add per-host plugin manifests: plugins/winapp/plugin.json (Copilot) and plugins/winapp/.claude-plugin/plugin.json (Claude) - Add per-host marketplaces: .github/plugin/marketplace.json (Copilot) and .claude-plugin/marketplace.json (Claude), both sourcing ./plugins/winapp - Keep the repo-root plugin.json as a thin shim so "copilot plugin install microsoft/WinAppCli" and the awesome-copilot listing keep resolving the repo as a plugin with no external change - Delete the .claude/ mirror and scripts/sync-claude-plugin.ps1 - Update generate-llm-docs.ps1 to write skills to plugins/winapp/skills/ and sync the version field across all 5 manifests; update validate-llm-docs.ps1 paths - Update .gitattributes and docs (README, llms.txt, AGENTS.md, internal pr-review dev skills) Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Contributor
Build Metrics ReportBinary Sizes
Test Results✅ 1637 passed, 1 skipped out of 1638 tests in 449.3s (+37.3s vs. baseline) Test Coverage❌ 18.1% line coverage, 37.4% branch coverage · ✅ no change vs. baseline CLI Startup Time38ms median (x64, Updated 2026-07-15 05:00:18 UTC · commit |
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.
Why
We currently maintain two skill trees: the hand-authored GitHub Copilot plugin under
.github/plugin/and a generated byte-identical Claude Code mirror under.claude/(produced byscripts/sync-claude-plugin.ps1). That's duplicate content to keep in sync for no real benefit.This PR follows the model already proven in the sibling repo
microsoft/win-dev-skills: serve one plugin source to both hosts via per-host manifests and marketplaces. No more mirror, no more sync script.What changed
Single plugin source — everything lives under
plugins/winapp/:.github/plugin/→plugins/winapp/(puregit mv, zero content change).winapp-<name>so both Copilot and Claude load them with no transform step (Claude requires dir == frontmattername; Copilot tolerates it).Per-host manifests (convention-based, like win-dev-skills):
plugins/winapp/plugin.json— Copilot manifest (agents/,skills: ["skills/"])plugins/winapp/.claude-plugin/plugin.json— Claude manifest (no agents/skills fields; addshomepage/repository)Per-host marketplaces, both sourcing
./plugins/winapp:.github/plugin/marketplace.json(Copilot).claude-plugin/marketplace.json(Claude)Root
plugin.jsonshim kept (load-bearing) — repointed atplugins/winapp/. This keepscopilot plugin install microsoft/WinAppCliand the awesome-copilot listing (plugins/external.jsonresolves the repo root as a plugin) working with no external coordination and no breakage window.Removed duplication:
.claude/mirrorscripts/sync-claude-plugin.ps1Tooling & docs:
generate-llm-docs.ps1now writes skills toplugins/winapp/skills/winapp-<name>/and syncs theversionfield across all 5 manifests (surgical regex replace, preserves hand-authored formatting; guarded so validator temp-dir runs don't mutate committed files).validate-llm-docs.ps1paths updated..gitattributes,README.md,llms.txt,AGENTS.md, and internal pr-review dev-skill docs updated.Install (after merge)
GitHub Copilot CLI — unchanged:
Claude Code — new:
The agent frontmatter keeps its existing
infer: true(automatic activation). win-dev-skills instead usesuser-invocable: true(explicit-only). I preserved current behavior to avoid a regression; Claude tolerates the unknowninfer:key. If we'd rather match win-dev-skills' explicit-invocation model, say so and I'll switch it.Verification
generate-llm-docs.ps1: 8 skills regenerate intoplugins/winapp/skills/, manifest versions sync to0.4.1.validate-llm-docs.ps1 -FailOnDrift→ passes (schema + all skills up-to-date, exit 0).Co-authored-by: Copilot App 223556219+Copilot@users.noreply.github.com