-
-
Notifications
You must be signed in to change notification settings - Fork 75
Agent Plugins
VT Code supports the Agent Plugins 1.0.0 portable package format. A plugin is a directory containing a root plugin.json manifest, optional skills/*/SKILL.md Agent Skills, and optional mcp.json MCP server configuration. Install a plugin and its skills and MCP servers become available to VT Code immediately.
See the Agent Plugins specification for the portable package contract.
my-plugin/
├── plugin.json # required: $schema + name
├── skills/
│ └── my-skill/
│ └── SKILL.md # Agent Skill (name must match its folder)
└── mcp.json # optional MCP servers
-
Skills under
skills/*/SKILL.mdare discovered from<workspace>/.agents/pluginsand appear alongside your regular skills. -
MCP servers declared in
mcp.jsonare exposed as<plugin>.<server>providers and connect automatically at session startup.stdioandstreamable-httptransports are supported; legacysseis skipped.
vtcode plugins add https://github.com/example/my-plugin # install (git URL or local dir) into ~/.agents/plugins
vtcode plugins list # list installed plugins
vtcode plugins info my-plugin # plugin details
vtcode plugins validate ./my-plugin # validate without installing
vtcode plugins remove my-plugin # uninstallplugins add clones git URLs with git clone --depth=1 and requires local directories to contain a valid plugin.json.
plugin.json requires $schema (the Agent Plugins 1.0.0 schema) and name (1-64 chars of a-z, 0-9, -, ., starting and ending alphanumeric, no -- or ..). Unknown top-level fields are non-fatal and reported.
Control plugins via the tools.plugins section in vtcode.toml:
[tools.plugins]
enabled = true # toggle the plugin runtime
default_trust = "sandbox" # sandbox | trusted | untrusted
allow = ["my-plugin"] # optional allow-list
deny = [] # optional block-list
auto_reload = true # hot-reload manifest polling-
./-prefixedcommandandcwdpaths must resolve inside the plugin root; escaping paths are rejected. - For stdio servers, VT Code injects
PLUGIN_ROOTandPLUGIN_DATAenvironment variables and expands${PLUGIN_ROOT}/${PLUGIN_DATA}placeholders inargs,env, andcwd.PLUGIN_DATAdefaults to<plugin-root>/dataand is created before the subprocess launches.