08. Extending Matcha

Local plugins

A plugin is a folder that can bundle skills, slash commands, sub-assistants, hooks, and MCP servers. You install from a **local path you trust**.

Install from a folder

matcha plugin install ./my-plugin --trust

Run once **without** --trust to read the warning. Add --trust to activate hooks, MCP servers, and skills. Only install a folder you would run as your own user.

A plugin stays **off** until you enable it. Trust is separate: even when enabled, hooks and MCP servers stay inactive until the plugin is trusted. Plugins under ~/.matcha/plugins/ are trusted automatically. Project plugins in .matcha/plugins/ need an explicit trust grant.

After install, press r on the Plugins tab or start a new session. Skills from the plugin appear in the slash menu. If a name collides, use the qualified form (/deploy-tools:release).

Manage from the shell

matcha plugin list
matcha plugin list --json
matcha plugin enable <name>
matcha plugin disable <name>
matcha plugin details <name>
matcha plugin update [<name>]
matcha plugin uninstall <name> --confirm

uninstall aliases: rm, remove. --keep-data leaves the plugin's writable data directory.

Validate a folder you are authoring:

matcha plugin validate ./my-plugin

matcha plugin tag writes a git tag from the manifest version. That is for your own repo; it is not a store publish.

In the TUI: `/plugins`

/plugins

Opens the extensions modal on the **Plugins** tab. Outside the VS Code family, Ctrl+L opens the same modal. A Marketplace tab may still **draw**; it cannot install from a product catalog.

KeyAction
EnterExpand name, version, scope, skills, sub-assistants, hooks, MCP
SpaceEnable or disable
aAdd from a local path
xUninstall (confirm with y)
rReload
fFilter by status
/Search by name

The shell also accepts /plugins list, /plugins install <path> --trust, /plugins uninstall <name>, /plugins update, /plugins reload. In the pager, prefer the modal.

Turn plugins on in config when you want them every session:

[plugins]
paths = ["~/my-plugins/custom-tools"]
enabled = ["team-tools"]
disabled = ["noisy-plugin"]

Entries are a plain name (matcha plugin list) or a full ID (<scope>/<hash>/<name>). To hide the plugins and hooks UI, set disable_plugins = true in ~/.matcha/pager.toml.

What a plugin folder contains

my-plugin/
  plugin.json             # optional
  skills/gdrive/SKILL.md
  commands/
  agents/
  hooks/hooks.json
  .mcp.json

plugin.json is optional; without it Matcha CLI discovers the standard directories. The on-disk index name .grok-plugin/marketplace.json is an upstream filename for a **local** multi-plugin checkout. It is not an official MatchaCode store.

Share the folder (or a git checkout you already have on disk) and install it locally. Do not treat GitHub shorthand or [[marketplace.sources]] as a first-release channel.

What you should see

You ranResult
matcha plugin install ./my-plugin --trustPlugin on disk; enable it if it stays off
/plugins then SpaceEnabled / disabled
/marketplaceError: remote marketplace unavailable
matcha plugin marketplace add …Same fail-closed error