If you’ve been following the evolution of GitHub Copilot, you’ve probably noticed the steady stream of customization options – MCP servers, custom agents, skills, hooks, and more. Each one is powerful on its own, but sharing them across projects or teams has been painful. You had to use submodules, download content from other locations, or commit the code and try to keep it in sync. If you’ve ever set up a carefully tuned agent or skills configuration and then wanted to share it with another team, you know the pain.
Agent plugins change that. They’re a new preview feature for VS Code that lets you bundle your customizations into a single installable package. Even better, the format is shared with GitHub Copilot CLI. In this post, you’ll create a plugin from an existing skills repository, set up a marketplace to distribute it, and configure VS Code to discover and install it.
What agent plugins provide
You can think of it as package management for your Copilot configurations. Instead of building it as a custom extension, you can manage and distribute the plugins directly from a Git repo. A plugin is a distributable package that can include any combination of the following:
- Custom agents. Specialized AI assistants with defined personas and tool configurations
- Skills. Discrete, on-demand capabilities that load when needed
- Hooks. Event handlers that execute shell commands at agent lifecycle points
- Model Context Protocol (MCP) servers. Integrations for external tools
- Slash commands. Additional commands you can invoke with
/in chat
Once installed, these customizations appear alongside your locally defined ones. The real value is reusability – you define a set of capabilities once, package them as a plugin, and anyone on your team can install them with a single action. No more drift between team members running different versions of the same configuration.
Creating a plugin
To see how this works in practice, let’s turn Anthropic’s skills repository into an agent plugin. This repo contains ready-made skills for working with Excel, Word, PowerPoint, and PDF files – a natural fit for bundling into a document processing plugin. It’s optimized for Claude, so we just need to tweak it for VS Code and Copilot.
Start by cloning the repository:
The plugin manifest
Every plugin needs a plugin.json manifest file. The
official documentation describes placing this at the root of the plugin directory, but at the moment it actually needs to be in a .github subdirectory within your plugin folder. Create the folder structure:
1 mkdir -p plugins/document-skills/.githubThen create plugins/document-skills/.github/plugin.json:
1 {
2 "name": "documents",
3 "description": "Collection of document processing suite including Excel, Word, PowerPoint, and PDF capabilities",
4 "version": "1.0.0",
5 "author": {
6 "name": "Ken Muse",
7 "email": "noreply@kenmuse.com"
8 },
9 "license": "MIT",
10 "keywords": ["document", "office"],
11 "skills": [
12 "../../skills/xlsx",
13 "../../skills/docx",
14 "../../skills/pptx",
15 "../../skills/pdf"
16 ]
17 }There are a couple of important details to notice. First, even though the manifest lives in .github/plugin.json, file references are resolved relative to the plugin’s root folder, not relative to the .github directory. Since you’re layering a plugin onto an existing repository, the skill paths use ../../skills/ to navigate up to the original skills from the plugin folder. This pattern is useful when two plugins need to share the same skills or agents. For standalone plugins where the agents and skills are self-contained, you’d keep skill folders directly within the plugin directory instead. Finally, the name of the plugin should only contain A-z, 0-9, and dash. Other characters will cause issues.
Plugin structure
Your plugin directory should end up looking like this:
Beyond the manifest, a plugin can also include directories with *.agent.md files, skills, a hooks.json for lifecycle automation, and an .mcp.json for MCP server configurations. In most cases, you will typically organize skills, agents, and configuration files under the plugin folder itself rather than referencing other directories.
Creating a marketplace
With your plugin defined, the next step is making it discoverable in VS Code. To do that, VS Code needs a marketplace that includes it. A marketplace is a Git repository that serves as a registry for available plugins – think of it as a lightweight app store. It contains a marketplace.json file that lists available plugins along with metadata describing each one. When a user points VS Code or Copilot CLI at a marketplace, the tool clones the repository and reads this manifest to determine which plugins are available. A marketplace doesn’t have to just include plugins in the current repository, but for this example we’ll limit it to the one we just created and just reference the plugins within that repository.
By default, VS Code discovers plugins from
github/copilot-plugins and
github/awesome-copilot. You can add your own by creating a marketplace.json file in the .github/plugin/ directory of your repository:
1 mkdir -p .github/pluginThen create .github/plugin/marketplace.json:
1 {
2 "name": "anthropic-copilot-plugins",
3 "owner": {
4 "name": "Ken Muse",
5 "email": "noreply@kenmuse.com"
6 },
7 "metadata": {
8 "description": "Anthropic skills sample for VS Code and GitHub Copilot",
9 "version": "1.0.0"
10 },
11 "plugins": [
12 {
13 "name": "documents",
14 "description": "Collection of document processing suite including Excel, Word, PowerPoint, and PDF capabilities",
15 "version": "1.0.0",
16 "source": "./plugins/documents"
17 }
18 ]
19 }The source field for each plugin points to the plugin’s directory relative to the repository root. When VS Code processes this marketplace, it follows these paths to locate each plugin’s manifest and contents. Just like with plugins, the marketplace name should be restricted to the characters A-z, 0-9, and dash to avoid issues. The name also creates a namespace for installing plugins in Copilot CLI. For example, the plugin name for this skills is documents@anthropic-copilot-plugins.
The complete repository structure now looks like this:
Push this to a GitHub repository and you have a working marketplace that anyone can point their tools at.
Configuring VS Code
To start using agent plugins, first confirm that the preview feature is enabled by setting chat.plugins.enabled to true in your VS Code settings. Then add your marketplace to the chat.plugins.marketplaces setting:
VS Code accepts several reference formats for marketplaces. You can use shorthand (your-org/your-repo) for public GitHub repositories. For more flexibility, you can also use full HTTPS URLs (https://github.com/your-org/your-repo.git), SCP-style references (git@github.com:your-org/your-repo.git), or file:/// URIs for local references.
Once configured, browse and install available plugins by opening the Extensions view (Ctrl+Shift+X / Cmd+Shift+X) and entering @agentPlugins in the search field or viewing the Agent Plugins view. If you don’t see that view, select the More Actions (…) menu in the Extensions sidebar and choose Views > Agent Plugins.
When VS Code installs a plugin from a marketplace, it clones the source to a local directory. On macOS, you’ll find these at ~/Library/Application Support/Code/agentPlugins/github.com/{ORG}/{REPO}. On Windows, the path is C:\Users\{USER}\AppData\Roaming\Code\agentPlugins\github.com\{ORG}\{REPO}. These paths may change as the feature matures.
If you prefer to work with a plugin locally without going through a marketplace, the chat.plugins.paths setting can be used to register plugin directories directly. That name may change in the future as they work to align some of the names.
Configuring in Copilot CLI
This is even easier. Just add the marketplace in the format {OWNER}/{REPO}. For example:
1 copilot plugin marketplace browse kenmuse/anthropic-copilot-pluginsYou have several commands that you can use to interact with Copilot CLI:
1 # List the available marketplaces
2 copilot plugin marketplace list
3
4 # List the plugins in a marketplace
5 copilot plugin marketplace browse anthropic-copilot-plugins
6
7 # Install a plugin, by providing its full name
8 copilot plugin install documents@anthropic-copilot-plugins
9
10 # Install a plugin from a GitHub repo with the plugin in the root using {OWNER}/{REPO}
11 copilot plugin install kenmuse/my-plugin
12
13 # Install a plugin from a GitHub repo with the plugin in a subdirectory (specified after `:`)
14 copilot plugin install kenmuse/anthropic-copilot-plugins:plugins/documents
15
16 # Install a plugin from any Git-based repository using the full URL
17 copilot plugin install https://github.com/kenmuse/my-pluginIf you want to troubleshoot issues loading a marketplace or plugin, these commands provide significantly more details about errors or misconfigurations. In fact, I’d suggest starting with the Copilot CLI before VS Code.
Versioning
As a general practice, it’s often best to separate your plugins into different repositories. This allows you to version and manage each plugin independently. If you do that, then you can also use repository references and ref names (branches/tags) to point to the specific version of the plugin. For example, the source for a plugin in marketplace.json could be declared like this:
There is an
open issue to enable the ability to install plugins from branches with Copilot CLI to enable versioning with direct installs, but at the moment that is not supported. The marketplace.json does not currently support a branch or tag ref to version the feed as a whole.
Known limitations and issues
Since agent plugins in VS Code are a preview feature, there are a few rough edges to be aware of:
- Marketplace configurations must be added as user-level preferences. Workspace settings or dev container settings won’t work for this. It must be configured across the application.
- Don’t register new marketplaces while using a dev container. It doesn’t appear to work at the moment. The feature tries to access local folder paths that aren’t available inside the container. Similarly, there seems to be a problem installing plugins from a marketplace while in a dev container. Hopefully this will be resolved before the feature leaves preview.
- The VS Code Insiders build will have the latest fixes and patches. If you’re running into problems, switching to Insiders may resolve them.
- Any mistakes in your
marketplace.jsonorplugin.jsoncan cause the marketplace feed to silently not appear in VS Code. There’s no error message to guide you – the feed simply won’t show up. Make sure to test your feeds with Copilot CLI first. - VS Code caches feed details aggressively. Correcting mistakes in your manifest files is often not enough to get the plugin to appear. You may need to reload VS Code or use an alternative reference format for the same repository to bypass some of the caching behaviors. Each format –
your-org/your-repo,https://github.com/your-org/your-repo,https://github.com/your-org/your-repo.git, andgit@github.com:your-org/your-repo.git– is treated uniquely. While VS Code unifies them if they all appear, switching to a different format can force it to re-evaluate a changed feed until the caching behavior is improved.
Getting started
Agent plugins bring a missing piece to the Copilot ecosystem – a straightforward way to package, distribute, and reuse AI customizations across tools and teams. Whether you’re standardizing workflows, sharing domain expertise, or curating a set of skills for your organization, the combination of plugins and marketplaces gives you a clear path from “this works well for me” to “everyone can use this.” The feature is still in preview, so expect improvements and evolving behavior. As the ecosystem grows and more community-contributed plugins appear in marketplaces like copilot-plugins and awesome-copilot, this could become a central way that teams share and discover AI-powered developer tooling.
And feel free to review the source for the sample plugins in kenmuse/anthropic-copilot-plugins repository.
