code.visualstudio.com

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. Through its existing Copilot and Claude plugin formats, VS Code also supports client-specific plugin capabilities, including slash commands, custom agents, and hooks.

For how plugins fit into the broader set of customization options, see Customization concepts.

Note

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 can use the standard's reverse-domain client extension namespaces. VS Code currently ignores client extension data and directories in Agent Plugins 1.0 packages.

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 Copilot-format 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. The plugin directory structure looks like this:

{
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
  "name": "my-dev-tools",
  "description": "React development utilities",
  "version": "1.2.0"
}
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.

For the full field constraints and validation rules, see the Agent Plugins manifest documentation.

Plugin formats

VS Code auto-detects the plugin format by checking the root manifest and format-specific manifest paths. A root plugin.json that declares the canonical Agent Plugins $schema uses Agent Plugins semantics. The Copilot format is used as the default when no other format marker is found.

Plugin format Plugin manifest
Agent Plugins 1.0 plugin.json with $schema set to https://agent-plugins.org/schemas/1.0.0/plugin.schema.json
Copilot plugin.json
Claude .claude-plugin/plugin.json
Legacy OpenPlugin .plugin/plugin.json

Plugin environment variables

Some plugin formats provide a root token that you can use in hook commands and MCP server configurations to reference files within the plugin directory. VS Code expands the token at runtime and also sets it as an environment variable in the hook or server process.

Plugin format Plugin root
Agent Plugins 1.0 ${PLUGIN_ROOT}
Claude ${CLAUDE_PLUGIN_ROOT}
Copilot ${PLUGIN_ROOT} or ${CLAUDE_PLUGIN_ROOT}
Legacy OpenPlugin ${PLUGIN_ROOT}

Agent Plugins 1.0 also defines ${PLUGIN_ROOT} for packaged files and ${PLUGIN_DATA} for writable state that persists across plugin updates. VS Code preserves these placeholders for the plugin runtime to expand. For details about where placeholders are supported, see the Agent Plugins specification.

MCP servers in plugins

Plugins can bundle MCP servers to provide agents with additional tools and data sources. Plugin MCP servers start automatically when the plugin is enabled and stop when the plugin is disabled.

MCP configuration file

Place MCP server definitions in the mcp.json file at the plugin root and follow the portable MCP configuration format.

my-plugin/
  hooks/
    hooks.json           # Hook configuration (Claude format)
  scripts/
    format.sh            # Hook script referenced by hooks.json

Hook configuration format

Plugin hooks use the same base format as workspace hooks. VS Code parses Claude Code hook configuration, including matcher syntax. Currently, VS Code ignores matcher values, so hooks run on every matching event.

Flat format (same as workspace hooks):

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "${CLAUDE_PLUGIN_ROOT}/scripts/format.sh"
          }
        ]
      }
    ]
  }
}

VS Code parses the matcher field for compatibility with Claude Code, but currently ignores matcher values. If you need to filter hook behavior in VS Code, check the event input inside the hook script.

Reference plugin paths in hook commands

For Claude-format plugins, use the ${CLAUDE_PLUGIN_ROOT} token in hook commands to reference scripts and files within the plugin directory. VS Code expands this token to the plugin's absolute path at runtime and also sets a CLAUDE_PLUGIN_ROOT environment variable for the hook process. Inside your script, access this as $CLAUDE_PLUGIN_ROOT (or %CLAUDE_PLUGIN_ROOT% on Windows).

This is important because plugins are installed to a location outside your workspace, so you cannot use relative paths.

// settings.json
"chat.plugins.marketplaces": [
    "anthropics/claude-code"
]

Use local plugins

If you manually clone or download a plugin, you can register it with the chat.pluginLocations setting. This setting maps local plugin directory paths to an enabled or disabled state. Set the value to true to enable the plugin, or false to keep it registered but disabled.

{
  "extraKnownMarketplaces": {
    "company-tools": {
      "source": {
        "source": "github",
        "repo": "your-org/plugin-marketplace"
      }
    }
  },
  "enabledPlugins": {
    "code-formatter@company-tools": true
  }
}

Cross-tool compatibility

Agent Plugins 1.0 is an open standard designed for cross-tool compatibility. A conformant plugin uses a root plugin.json, puts skills in skills/, and puts MCP server configuration in mcp.json. Compatible clients can discover the portable component types they support from the same package.

Agent Plugins can also include client-specific manifest data and files under a stable reverse-domain namespace. Clients ignore namespaces they don't implement, so client-specific capabilities don't prevent other clients from loading the portable components. VS Code currently ignores these namespaces and loads only the portable skills and MCP server configuration.

For example:

">GitHub Copilot CLI plugin reference
                

8/12/2026

Read the original on code.visualstudio.com ↗