feat(copilot): add GitHub Copilot CLI plugin support#220
Open
galambastwins wants to merge 4 commits into
Open
Conversation
The recommend-plugins.sh detection rule referenced a plugin name and
marketplace repo path that don't exist: "very-good-ai-flutter-plugin"
(the real plugin is registered as "vgv-ai-flutter-plugin") and an
underscore-separated marketplace slug ("very_good_claude_code_marketplace")
that doesn't match the actual repo path (hyphenated). Both mistakes made
the emitted install commands fail for any user who followed them.
Ship a second manifest (.github/plugin/plugin.json) so Wingspan installs
natively as a GitHub Copilot CLI plugin alongside the existing Claude Code
manifest, bumped together via .release-please-config.json.
Make hooks/recommend-plugins.sh (+ its test suite) host-aware: it detects
Claude Code vs Copilot CLI, checks the right plugin store on each, and
phrases install instructions and the session marker per host.
Add portability fallbacks across skills/**/*.md and agents/**/*.md for
$ARGUMENTS substitution, ${CLAUDE_SKILL_DIR} script paths, the
AskUserQuestion/ask_user tool, and vgv-wingspan:-prefixed agent names —
so the same skill and agent files run unmodified on both hosts.
Document dual-host install, local testing, and authoring rules in
README.md, CONTRIBUTING.md, and CLAUDE.md.
Verified live against Copilot CLI 1.0.69: all 12 skills and 10 agents
load, the recommendation hook fires with host-correct instructions, and
the bundled context7 MCP server registers. 57/57 hook tests pass and
claude plugin validate . remains green.
GitHub Copilot CLI ships a built-in /review command that shadows a plugin skill of the same name in interactive use, so the standalone review skill is renamed review -> quality-review. Its bare name is now slash-reachable on both hosts (/quality-review), matching the marketplace convention of descriptive, non-colliding skill names. Also correct an earlier imprecision: /plan is NOT a Copilot built-in (verified — it reaches the skill), so the plan skill needs no change and the docs no longer claim a /plan collision. Updates the skill dir, frontmatter name, and every command-form reference across README, CLAUDE.md, CONTRIBUTING.md, and the shared references. The review agents, the docs/code-review output dir, and all natural-language triggers are unchanged.
Add two no-secret CI jobs so Copilot-compat regressions surface on CI, not on users: - copilot-manifest: jq-validates .github/plugin/plugin.json (valid JSON, kebab-case name, metadata parity with .claude-plugin/plugin.json, and every declared component path exists on disk). - copilot-loader: installs the GitHub Copilot CLI and the plugin, then asserts all 12 skills load. Copilot's plugin-management subcommands need no auth or seat, so this runs on any PR including forks with no secrets.
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.
Description
Add GitHub Copilot CLI as a supported host for the Wingspan plugin, alongside the existing Claude Code support. The same skills, agents, hooks, and MCP server run on both hosts from a single source.
.github/plugin/plugin.json) so Wingspan installs natively as a GitHub Copilot CLI plugin alongside the existing Claude Code manifest, bumped together via.release-please-config.json.hooks/recommend-plugins.sh(+hooks/test_recommend_plugins.sh) host-aware: it detects Claude Code vs Copilot CLI, checks the right plugin store on each, and phrases install instructions and the session marker per host.skills/**/*.mdandagents/**/*.mdfor$ARGUMENTSsubstitution,${CLAUDE_SKILL_DIR}script paths, the AskUserQuestion/ask_usertool, andvgv-wingspan:-prefixed agent names — so the same skill and agent files run unmodified on both hosts.reviewskill toquality-review. GitHub Copilot CLI ships a built-in/reviewcommand that shadows a same-named plugin skill in interactive use;/quality-reviewis slash-reachable on both hosts. (/planis not a Copilot built-in — verified — so the plan skill is unchanged.)copilot-manifest,copilot-loader) that validate the Copilot manifest and assert all 12 skills load via Copilot's plugin loader — no token or Copilot seat required, so they run on forks.README.md,CONTRIBUTING.md, andCLAUDE.md.very-good-ai-flutter-plugin) and marketplace slug (underscored repo path) that don't match reality, so the emitted install commands were broken for every user.Type of Change
feat)fix)refactor)docs)ci)chore)Test Plan
Verified locally against GitHub Copilot CLI 1.0.69/1.0.70 and Claude Code:
bash hooks/test_recommend_plugins.sh— 57/57 passingclaude plugin validate .— passes (pre-existing root-CLAUDE.md warning only)copilot plugin install ./— all 12 skills (incl.quality-review) and 10 agents load/quality-reviewspawned all 4 VGV review agents in parallel, wrote per-agentraw/reports, and produced a consolidatedreview.mdwith stableFINDING-NNids — identical to Claude Code behavior/plan,/quality-review, and other skills reach the Wingspan skillscopilot-manifestandcopilot-loaderCI logic run green locally (loader asserts all 12 skills, robust to plugin-name namespacing)markdownlint-cli2/cspellon changed docs — clean against the CI configs