Skip to content

feat(copilot): add GitHub Copilot CLI plugin support#220

Open
galambastwins wants to merge 4 commits into
VeryGoodOpenSource:mainfrom
galambastwins:feat/copilot-cli-support
Open

feat(copilot): add GitHub Copilot CLI plugin support#220
galambastwins wants to merge 4 commits into
VeryGoodOpenSource:mainfrom
galambastwins:feat/copilot-cli-support

Conversation

@galambastwins

@galambastwins galambastwins commented Jul 10, 2026

Copy link
Copy Markdown

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.

  • 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 (+ 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.
  • 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.
  • Rename the standalone review skill to quality-review. GitHub Copilot CLI ships a built-in /review command that shadows a same-named plugin skill in interactive use; /quality-review is slash-reachable on both hosts. (/plan is not a Copilot built-in — verified — so the plan skill is unchanged.)
  • Add two no-secret CI jobs (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.
  • Document dual-host install, local testing, and authoring rules in README.md, CONTRIBUTING.md, and CLAUDE.md.
  • Separate commit: fix a pre-existing bug in the Flutter companion-plugin recommendation — it referenced a plugin id (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

  • New feature (feat)
  • Bug fix (fix)
  • Code refactor (refactor)
  • Documentation (docs)
  • CI change (ci)
  • Chore (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 passing
  • claude plugin validate . — passes (pre-existing root-CLAUDE.md warning only)
  • copilot plugin install ./ — all 12 skills (incl. quality-review) and 10 agents load
  • End-to-end multi-agent review on Copilot: /quality-review spawned all 4 VGV review agents in parallel, wrote per-agent raw/ reports, and produced a consolidated review.md with stable FINDING-NN ids — identical to Claude Code behavior
  • Slash reachability confirmed on Copilot: /plan, /quality-review, and other skills reach the Wingspan skills
  • The new copilot-manifest and copilot-loader CI logic run green locally (loader asserts all 12 skills, robust to plugin-name namespacing)
  • markdownlint-cli2 / cspell on changed docs — clean against the CI configs
  • Multiple independent agent-based adversarial reviews (bug-finding, CONTRIBUTING.md compliance, and a parity audit) — findings addressed inline

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.
@galambastwins galambastwins requested a review from a team as a code owner July 10, 2026 17:52
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.
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.

2 participants