Skip to main content

Plugins & Marketplaces

llmenv can wire agent plugins into the materialized config. Plugins are sourced from marketplaces and grouped into plugin collections that are selected onto scopes by tag — the same model as bundles and MCP servers.

Marketplaces

A marketplace is a named source of plugins, declared at the top level:

marketplace:
- name: superpowers
source: "https://github.com/obra/superpowers.git"
- name: local-dev
source: "~/code/my-plugins"

The source is classified automatically:

Source formClassified asBehavior
https://, http://, ssh://, git://, git+ssh://gitCloned into the cache
git@host:owner/repo (scp-style)gitCloned into the cache
/abs, ~/path, ./rel, ../rel, bare relativepathUsed in place

Git marketplaces are cloned once into <cache_dir>/marketplaces/<name>/, shared across every scope, and refreshed by plugin-sync. The resolved git HEAD is mixed into the materialized scope's content hash, so a marketplace update re-renders the agent config. Local-path marketplaces are content-hashed by their current state and need no sync.

Plugin collections

A plugin-collection is a named bag of plugins that activates by tag:

plugin-collection:
- name: dev
tags: [me]
plugins:
- "superpowers:caveman" # <marketplace>:<plugin>
- "superpowers:brainstorm"

Each entry is a <marketplace>:<plugin> reference, where the left half names a declared marketplace. The union of all selected collections' plugins is what gets wired up for the active environment.

You can also list plugins directly under capabilities.plugins (global) or in a bundle's bundle.yaml — they merge with collection-selected plugins.

Where plugins materialize

The Claude Code adapter renders selected plugins into settings.json:

  • extraKnownMarketplaces — each referenced marketplace as a directory source pointing at its local clone under <cache_dir>/marketplaces/<name>/.
  • enabledPlugins — each selected plugin as plugin@marketplace, all enabled.

Syncing

llmenv plugin-sync

Clones any missing git marketplaces and fast-forwards those already present. Run it after adding a marketplace or to pull upstream plugin updates. Local-path marketplaces are skipped (they're read in place).

Inspecting

llmenv marketplace-ls # marketplaces, marking those referenced by selected plugins
llmenv plugin-ls # plugins, marking those the active scope selects

llmenv doctor flags plugin orphans: a collection no scope can select, a marketplace no selectable collection references, and a plugin referencing an undeclared marketplace.