Documentation
Topics Overview Overview Agents Quickstart Editor Tutorial Intro Videos Overview Get started Agents Quickstart Agents Tutorial Best Practices Concepts Agents Agent Harnesses Language Models Context Tools Sessions & Handoff Agent Host Architecture Customization Workspace Context Trust & Safety Run agents Agents Window Chat View Choose an Agent Harness Use Tools Browser Tools Approvals & Permissions Review & Revert Changes Artifacts Remote Agent Sessions Plan Work Memory Subagents Sessions Manage Sessions Session History AI Security Customize agents Create and Manage Instructions Agent Skills Custom Agents Language Models MCP Hooks Plugins Tools Prompt Files Use chat Chat Basics Inline & Quick Chat Add Prompt Context Tutorials & guides Customize AI Context Engineering Test-Driven Development Test with AI Test Web Apps with Browser Tools Debug with AI Edit Notebooks with AI Optimize AI Credit Usage MCP Dev Guide Prompt Examples Reference Cheat Sheet Settings Reference MCP Configuration Hooks Reference OpenTelemetry Monitoring Troubleshooting Troubleshooting Debug Chat Interactions Diagnose Prompt Caching FAQ Editor Overview Quickstart Repositories & Remotes Staging & Committing Source Control History Branches & Worktrees Merge Conflicts Collaborate on GitHub Troubleshooting FAQ Get Started Terminal Basics Terminal Profiles Shell Integration Appearance Advanced Debugging Debug Configuration Tasks Testing Integrated Browser Port Forwarding Guides & Tutorials Test-Driven Development Test Web Apps with Browser Tools Overview Enterprise Policies AI Settings Extensions Telemetry Updates Overview VS Code for the Web SSH SSH Tutorial Tunnels Dev Containers WSL WSL Tutorial GitHub Codespaces VS Code Server Linux Prerequisites Tips and Tricks FAQ GitHub Copilot Setup Linux macOS Windows Raspberry Pi Network Portable Mode Additional Components Uninstall Languages & Runtimes Extension DocsOn this page there are 13 sections
Agent plugins in VS Code
Agent plugins are prepackaged bundles of agent customizations that you can discover and install from plugin marketplaces in Visual Studio Code. Plugins work alongside your locally defined customizations. When you install a plugin, its supported customizations appear in chat.
Agent Plugins is an open standard for packaging agent skills and MCP servers that works across multiple AI agents, including GitHub Copilot in VS Code, GitHub Copilot CLI, and the GitHub Copilot app.
VS Code also supports client-specific plugin capabilities, including slash commands, custom agents, rules, and hooks. In an Agent Plugins package, these come from the com.github.copilot namespace. The existing Copilot and Claude plugin formats keep their own layouts.
For how plugins fit into the broader set of customization options, see Customization concepts.
Enable or disable support for agent plugins with the chat.plugins.enabled setting.
What plugins provide
Agent Plugins 1.0 defines skills and MCP servers as portable component types. Other capabilities are client-specific and use the standard's reverse-domain client extension namespaces. VS Code reads Copilot-specific components from the com.github.copilot namespace and ignores namespaces owned by other clients.
| Capability | Description | Client-specific | Standard |
|---|---|---|---|
| MCP servers | External tool integrations | ||
| Skills | Instructions, scripts, and resources that load on-demand | ||
| Agents | Specialized personas and tool configurations | ||
| Hooks | Shell commands that execute at agent lifecycle points | ||
| Slash commands | Commands you can invoke with / in chat |
For example, a testing plugin might include a test-runner skill with scripts, a test-reviewer agent with read-only tools, and an MCP server for a test reporting dashboard. In the Agent Plugins format, the directory structure looks like this:
| Field | Type | Required | Description |
|---|---|---|---|
$schema |
string | Yes | Canonical Agent Plugins schema identifier. |
name |
string | Yes | Plugin name and package identifier. |
version |
string | No | Plugin version. Semantic Versioning is recommended. |
description |
string | No | Brief description of the plugin. |
author |
object | No | Author information with optional name, email, and url fields. |
homepage |
string | No | Documentation or homepage. |
repository |
string | No | Source repository. |
license |
string | No | License identifier. An SPDX identifier is recommended. |
keywords |
string[] | No | Search and discovery terms. |
extensions |
object | No | Client-specific data keyed by reverse-domain namespace. |
Skills are discovered from the skills/ folder, and MCP server configuration is discovered from the mcp.json file. You don't list these component paths in the manifest. Custom agents, hooks, commands, and MCP server definitions are not portable top-level manifest fields.
Copilot-specific components live in the com.github.copilot directory at the plugin root, and Copilot-specific manifest data goes under the matching key in extensions:
Place MCP server definitions in the .mcp.json file at the plugin root. VS Code discovers this file automatically when it loads the plugin.
{
"mcpServers": {
"plugin-database": {
"command": "${CLAUDE_PLUGIN_ROOT}/servers/db-server",
"args": ["--config", "${CLAUDE_PLUGIN_ROOT}/config.json"],
"env": {
"DB_PATH": "${CLAUDE_PLUGIN_ROOT}/data"
}
},
"plugin-api": {
"command": "npx",
"args": ["@company/mcp-server", "--plugin-mode"],
"cwd": "${CLAUDE_PLUGIN_ROOT}"
}
}
}
Reference plugin paths in server configuration
For Claude-format plugins, use the ${CLAUDE_PLUGIN_ROOT} token in MCP server fields to reference executables and files within the plugin directory. VS Code expands this token in the following fields:
command: the executable pathargs: command-line argumentscwd: working directoryenv: environment variable valuesenvFile: path to an environment fileurl: for HTTP-based MCP serversheaders: HTTP header values
VS Code also injects a CLAUDE_PLUGIN_ROOT environment variable into the server process, so server code can access the plugin path at runtime.
How plugin MCP servers interact with other servers
Plugin MCP servers appear alongside workspace and user-level MCP servers. You can manage them through the same tools:
-
Select Configure Tools in the Chat view to see tools from all MCP servers, including plugin servers.
-
Run MCP: List Servers from the Command Palette to view plugin servers alongside other servers.
Plugin MCP servers are implicitly trusted when you install the plugin. Unlike workspace MCP servers, they do not show a separate trust prompt at startup.
Disabling a plugin stops its MCP servers. Tools provided by the stopped servers are no longer available in chat.
Hooks in plugins
Plugins can include hooks that run shell commands at agent lifecycle points. Plugin hooks work alongside your workspace and user-level hooks. When a plugin is enabled, its hooks fire in addition to any other hooks configured for the same event.
Hooks are client-specific and are not a portable Agent Plugins 1.0 component type. In an Agent Plugins package, they come from the com.github.copilot namespace.
Hook file location
The hook file location depends on the plugin format:
| Plugin format | Hook file path |
|---|---|
| Agent Plugins 1.0 | com.github.copilot/hooks/hooks.json |
| Claude | hooks/hooks.json |
| Copilot | hooks.json (at the plugin root) |
VS Code auto-detects the plugin format and discovers the hook file automatically.
{
"hooks": {
"PostToolUse": [
{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/scripts/format.sh"
}
]
}
}
Matcher format (Claude compatibility syntax):
{
"hooks": {
"PreToolUse": [
{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/scripts/validate-tool.sh"
}
]
}
}
Supported hook events
Plugin hooks support the same lifecycle events as workspace hooks: SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, PreCompact, SubagentStart, SubagentStop, and Stop. See Hook lifecycle events for details on each event.
How plugin hooks interact with other hooks
Plugin hooks run alongside workspace-level and user-level hooks. When multiple hooks target the same event, all of them execute. For PreToolUse hooks, the most restrictive permission decision across all hooks wins: deny overrides ask, which overrides allow.
Disabling a plugin also disables its hooks. You can enable or disable plugins globally or for a specific workspace from the Extensions view.
Discover and install plugins
You can browse and install plugins from marketplaces or directly from a Git repository.
Install a plugin from a marketplace
-
Open the Extensions view (X (Windows, Linux Ctrl+Shift+X)) and enter
@agentPluginsin the search field.Alternatively, select the More Actions (three dots) icon in the Extensions sidebar and choose Views > Agent Plugins.
-
Browse the list of available plugins from your configured marketplaces.
[Screenshot of browsing agent plugins in the Extensions sidebar.] -
Select Install to install a plugin.
The first time you install a plugin from a new marketplace, VS Code shows a trust prompt. Review the marketplace source before confirming.
-
Open the Agent Customizations editor by running Chat: Open Customizations from the Command Palette, selecting the gear icon in the Chat view, or selecting Plugins in the Agents window.
-
Select the Plugins tab and select Browse Marketplace to browse available plugins from your configured marketplaces.
-
Select Install to install a plugin.
The first time you install a plugin from a new marketplace, VS Code shows a trust prompt. Review the marketplace source before confirming.
Install a plugin from source
You can install a plugin directly from a Git repository URL without adding a full marketplace first.
-
Run Chat: Install Plugin From Source from the Command Palette.
-
Alternatively, select Install Plugin from Source on the Plugins page of the Agent Customizations editor.
Enter a Git repository URL (for example, https://github.com/rwoll/markdown-review) and VS Code clones and installs the plugin.
Plugins installed by GitHub Copilot CLI
VS Code automatically discovers plugins that you install with the GitHub Copilot CLI to enable you to use them also in VS Code. Plugins from ~/.copilot/installed-plugins/ appear in the Agent Plugins - Installed view alongside plugins you installed from a marketplace or from source.
The CLI stores plugins under ~/.copilot/installed-plugins/<marketplace>/<plugin>/. Plugins installed directly from a Git URL (rather than from a marketplace) live under the _direct bucket, for example ~/.copilot/installed-plugins/_direct/github--moda-linter--copilot-plugin/.
View installed plugins
The Agent Plugins - Installed view in the Extensions view shows the plugins you have installed. From this view, you can enable, disable, or uninstall plugins.
[Screenshot of the Agent Plugins - Installed view in the Extensions view.]
You can also manage installed plugins from the Chat view by selecting the gear icon > Plugins.
Enable or disable plugins
You can enable or disable a plugin globally or for a specific workspace:
-
Use the context menu on a plugin in the Agent Plugins - Installed section of the Extensions view.
-
Use the Agent Customizations editor to toggle a plugin's enabled state.
The enable/disable state is stored separately from the plugin configuration, so it does not affect shared workspace settings.
When a plugin is disabled, its skills, agents, hooks, MCP servers, and slash commands are no longer available. For example, skills from a disabled plugin do not appear in Chat: Configure Skills. Disabled plugins appear with a dimmed style in the Agent Customizations editor and Extensions view.
Uninstall plugins
To remove a plugin, right-click it in the Agent Plugins - Installed view and select Uninstall. Plugins installed from an external source (such as npm, PyPI, or an external Git repository) are removed from disk. Plugins that are inlined in a marketplace repository remain on disk but are no longer active.
Configure plugin marketplaces
By default, VS Code discovers plugins from the copilot-plugins and awesome-copilot. You can add additional marketplaces with the chat.plugins.marketplaces setting.
Marketplaces are Git repositories that contain plugin definitions. You can reference them in several formats:
- Shorthand:
owner/repofor public GitHub repositories. For example,anthropics/claude-code. - HTTPS git remote: a full URL ending in
.git. For example,https://github.com/anthropics/claude-code.git. - SCP-style git remote: SSH-style references. For example,
git@github.com:anthropics/claude-code.git. - file URI: a
file:///path to a marketplace repository already cloned on disk.
Private repositories are also supported. If a public lookup fails, VS Code falls back to cloning the repository directly.
Marketplace plugins can also reference external package sources such as npm or PyPI packages. For the full marketplace plugin schema, see the Claude Code plugin marketplace documentation.
Update plugins
VS Code checks for plugin updates when you run Extensions: Check for Extension Updates from the Command Palette, or automatically every 24 hours when extensions.autoUpdate is enabled.
Updating pulls down changes from cloned marketplace repositories and checks for new versions of externally sourced plugins.
Plugins sourced from npm or PyPI never update automatically. Instead, they show an Update button in the Extensions view. Selecting the button prompts you to confirm before running the install command. If an update is found during a background check, no action is taken until you explicitly select Update.
Workspace plugin recommendations
Projects can recommend plugins for team members by configuring plugin settings in the workspace settings (.claude/settings.json or .github/copilot/settings.json).
VS Code shows a notification the first time a chat message is sent. You can view the recommended plugins by opening the Extensions view and filtering by @agentPlugins @recommended.
Specify the following fields in the settings file to configure workspace plugin recommendations:
-
extraKnownMarketplaces: registers additional marketplaces for the project. These marketplaces appear when you search@agentPluginsin the Extensions view. -
enabledPlugins: lists plugins that should be enabled by default.
my-plugin/
plugin.json
skills/
mcp.json
com.github.copilot/ # Read by VS Code and other Copilot clients
com.example.client/ # Ignored by VS Code
VS Code continues to support existing Copilot, Claude, and legacy OpenPlugin formats. Plugins that don't declare the Agent Plugins schema continue to use their existing format-specific discovery rules.
For details about the portable format, see the Agent Plugins specification. For other formats, see the GitHub Copilot CLI plugin reference and the Claude Code plugin marketplace documentation.
Troubleshooting
Plugin does not appear after installation
- Confirm that agent plugins are enabled: check that
chat.plugins.enabled
is set to
true. - Verify the plugin's
namefield follows the naming rules for its format. Agent Plugins 1.0 names use lowercase letters, numbers, hyphens, and periods. Legacy Copilot plugin names use lowercase letters, numbers, and hyphens. Slashes and colons aren't supported. - Check that
plugin.jsonis in a recognized location (see Cross-tool compatibility).
Skills from a plugin do not load
- Open the
SKILL.mdfile and check thenamefield in the YAML frontmatter. The name must be plain kebab-case without namespace prefixes (for example,test-runner, notmyorg/test-runner). Invalid names cause the skill to be silently skipped. - Make sure the skill directory name matches the
namefield in theSKILL.mdfrontmatter.
Plugin version does not update
- Bump the
versionfield inplugin.json(and in themarketplace.jsonplugin entry, if applicable) before pushing changes. - Run Extensions: Check for Extension Updates from the Command Palette to trigger an update check.
Installation fails with 'destination path already exists'
This can happen when a previous install left cached data. Delete the cached plugin directory and retry:
- macOS:
~/Library/Application Support/Code/agentPlugins/github.com/{org}/{repo} - Linux:
~/.config/Code/agentPlugins/github.com/{org}/{repo} - Windows:
%APPDATA%\Code\agentPlugins\github.com\{org}\{repo}