A GitHub template for setting up and maintaining a GitHub Copilot plugin marketplace: one repository that lists the plugins your team shares. It works for a team in an organization and for one person with a personal account.
Status: active development. GitHub maintains this template; see Maintainers and Support.
One file makes the repository a marketplace: the catalog, marketplace.json, which names the marketplace and lists its plugins. Local plugins live in their own folders under plugins/. People add the marketplace and install only the plugins they want.
Included local maintenance plugins and optional remote plugins:
| Plugin | What it does |
|---|---|
| plugin-authoring | Scaffold, try locally, and prepare contributions to this plugin marketplace. |
| marketplace-maintainer | Review contributed plugins, maintain remote pins, and prepare marketplace releases. |
| pr-description | Draft structured pull request descriptions from supplied change notes or diffs without inventing unshipped work. |
GitHub Copilot Evals (Preview) (eval, optional remote) |
Create, run, review, and compare evals for your Copilot customizations. |
Teams that share Copilot customizations need a catalog and a simple way to add, remove, and review plugins. This template sets that up in one repository, so you can start sharing plugins right away.
Planned work and known gaps are in the open issues. Contributions are welcome. Read CONTRIBUTING.md first.
For marketplace development and evals, use this shared setup.
- One supported Copilot harness: Copilot CLI, GitHub Copilot app, or VS Code with agent plugins enabled, and a GitHub Copilot plan.
- Node.js 24+ and npm for repository tooling and the bundled local-install validator.
- GitHub Copilot CLI 1.0.85+.
- Vally (
@microsoft/vally-cli) 0.19.0+. - Git 2.28.0+.
- Click Use this template on GitHub and clone your new repository.
- Name your marketplace. In marketplace.json, set
name(unique, lowercase, and hyphenated) andowner.name. Use the new name in .github/copilot/settings.json, as the key underextraKnownMarketplacesand after the@in eachenabledPluginskey, and setnamein package.json too. Sync just the two rootnamefields inpackage-lock.json(top-level andpackages[""]); no dependency install is needed. - Update the install commands in this README and in each plugin's README: use
your repository instead of
github/plugin-marketplace-starterorOWNER/REPO, and your marketplace name after the@. Setrepositoryin each plugin'splugin.jsonto your repository's URL. Before your first release, keep initial plugin versions and add changes to their existing changelog entries. For plugins you've already released, use the version rules. - Keep the included plugins if they fit your team, or remove them.
- Add your first plugin.
- Replace what's meant for this template: add your own copyright line to LICENSE below GitHub's, rewrite this README's title, introduction, Background, Maintainers, Support, and Acknowledgement, name real owners in .github/CODEOWNERS, and put your own contacts in SECURITY.md, SUPPORT.md, and the enforcement sections of CODE_OF_CONDUCT.md. Keep applicable legal terms. Point the fork and compare links in CONTRIBUTING.md at your repository.
- Push, turn on branch protection or a ruleset for your default branch, and add your marketplace in Copilot to check that its plugins install.
Add the marketplace, browse it, and install only the plugins you want. Nothing
is installed or turned on for you outside the checkout. In supported hosts,
after you trust the checkout, its
repository settings enable only the two local
maintenance plugins. Check with copilot plugin list. If they're absent, start
CLI with --plugin-dir for each local plugin as shown in the
local bootstrap guide.
For installation from GitHub after publication:
copilot plugin marketplace add github/plugin-marketplace-starter
copilot plugin marketplace browse plugin-marketplace-starter
copilot plugin install plugin-authoring@plugin-marketplace-starter
copilot plugin install marketplace-maintainer@plugin-marketplace-starter
copilot plugin install pr-description@plugin-marketplace-starterFor optional GitHub Copilot Evals, install it explicitly:
copilot plugin install eval@plugin-marketplace-starterSee its upstream setup guidance, including experimental mode for Copilot CLI commands and Canvas. For remote-entry checks and the local-directory install limitation, see Remote pin testing.
Each plugin installs on its own. Start a new session after installing. In VS
Code, run Chat: Install Plugin from Source and enter the repository, and
make sure chat.plugins.enabled is on.
Review a plugin before you trust it: plugins can run code on your machine.
The add-plugin skill does these steps for you. By hand:
-
Create
plugins/<name>/with aplugin.json:{ "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json", "name": "release-notes", "version": "0.1.0", "description": "Draft release notes from merged pull requests.", "license": "MIT", "repository": "https://github.com/OWNER/REPO" }Use your repository's license and URL. Add a
README.mdthat says what it does and how to install it, and aCHANGELOG.mdwith a## 0.1.0entry. -
Add the plugin to the
pluginslist inmarketplace.jsonwith the samename,version, anddescription, and"source": "./plugins/release-notes". -
Add it to the table and install commands in this README.
Then add the plugin's skills, agents, or other parts to its folder. The
Copilot CLI plugin reference
lists what a plugin can contain. Put any evals for it in evals/<name>/.
Eval files that several plugins share live in evals/_shared/, which can't
clash with a plugin because plugin names start with a lowercase letter or digit.
For changes since a known released base, bump the plugin's version in
plugin.json and marketplace.json together and add a CHANGELOG.md entry.
An unreleased first version keeps its initial version and changelog heading,
including during template customization. Don't bump twice, lower a version, or
rewrite version history. If the released base or first-release status is
unknown, ask before changing versions.
Work in your marketplace repo on the branch with your new plugin or edits. Keep your uncommitted changes. Start a fresh Copilot CLI session with that plugin's absolute local folder:
copilot --plugin-dir "/absolute/path/to/your-marketplace/plugins/release-notes"Review the source and approve the host's trust and permission prompts before
testing. This loads your local edits for one session without installing anything
or changing settings. Entering the checkout doesn't load every plugin; its
repository settings enable only the two maintenance plugins. Edits take effect
on /restart or in a new session, without plugin update.
Use try-plugin-locally to prepare the command or check discovery and behavior
in an approved session. A prepared command doesn't verify either. See the
local testing guide
for host details and a separate, optional installation check.
The release-plugins skill can retire a plugin for you. By hand, delete
plugins/<name>/ and evals/<name>/, then remove the plugin's entry from
marketplace.json and its row and install command from this README. If it's
one of the two plugins in .github/copilot/settings.json, remove its key there
too. If surviving cohort evals under evals/ list the retired plugin's skills
in agent_environment.skills or disallowed, remove those entries as well.
You can keep only remote entries by removing both bundled local plugins and
their eval folders. No empty plugins/ or evals/ directory is needed.
npm ci
npm run lintnpm run lint checks local catalog consistency and skill and eval files without calling a model.
Validate also runs script tests, schema
validation, catalog consistency checks, and remote-pin checks on every pull
request.
Paid evals: npm run eval runs real Copilot sessions and costs AI credits.
Evals runs only when manually started; pull
requests never trigger paid evals.
See Checks and evals for CI details, local test commands, and Bash and PowerShell eval setup.
This template and its local plugins use the MIT License. Keep its
Copyright line for code you kept from the template, and add your own line
below it.
Remote plugins retain their upstream licenses. GitHub Copilot Evals is source available under the GitHub Limited Use Source License. It isn't MIT-licensed or open source.
GitHub's Copilot Evals team, @github/code-ai-evals, maintains this template.
.github/CODEOWNERS lists the code owners who review
changes.
See SUPPORT.md for how to ask questions and report bugs, and SECURITY.md for how to report a vulnerability privately.
This template builds on the Agent Plugins standard and runs its evals with Vally. Thanks to @digitarald, who wrote its first version, and to everyone who's contributed since.