Skip to main content
Reference

Plugins Reference

Field-level reference for plugin.json fields, directory layout, and the Marketplace schema

Plugins are installable extension packages adding commands, Agents, Skills, Hooks, output styles, workflows, and MCP servers to Qoder CLI CN. This page is the complete reference for the plugin manifest, directory structure, and marketplace schema.

Plugin manifest (plugin.json)

The manifest file lives at .qoder-plugin/plugin.json; when that directory does not exist, .claude-plugin/plugin.json is read as a fallback. The manifest is not placed in the plugin root. The file can be omitted — without a declaration, the CLI loads components from the conventional directories and uses the plugin directory name as the plugin name; declaring it is recommended for stable metadata such as name and version.

Required fields

Only name is required in plugin.json; all other fields can be omitted.
FieldTypeDescription
namestringThe plugin's unique identifier (kebab-case, no spaces).

Optional metadata fields

FieldTypeDescription
versionstringSemantic version (such as 1.0.0).
displayNamestringHuman-friendly name shown in the UI.
descriptionstringA short description.
authorobjectAuthor information (name/email/url).
homepagestringDocumentation or homepage URL.
repositorystringSource repository URL.
licensestringSPDX license identifier (such as MIT, Apache-2.0).
keywordsstring[]Search and categorization tags.
dependenciesarrayOther plugins this one depends on (a marketplace can be specified).

Component declaration fields

The following fields override the conventional directories or declare components inline (relative-path strings, arrays, or object maps):
FieldDescription
commandsCommand definitions.
agentsAgent definition file paths.
skillsSkill directory paths.
outputStylesOutput style definitions.
workflowsPath / workflowsPathsWorkflow file paths.
hooksHook configuration (a relative-path JSON file or inline configuration).
mcpServersMCP server configuration (a relative-path JSON file or inline configuration).
userConfigUser-configurable option definitions.
settingsSettings merged when the plugin is enabled. Currently only the agent key is supported; other keys are ignored.

Conventional directory structure

Without explicit component declarations in the manifest, a plugin is auto-discovered from these conventional directories:
plugin-name/
├── .qoder-plugin/
│   └── plugin.json      # Recommended: the manifest (omittable)
├── commands/            # Command definitions (.md)
│   └── subdir/          # Nested directories supported
├── agents/              # Agent definitions (.md)
├── skills/              # Skill directories
│   └── skill-name/
│       └── SKILL.md
├── hooks/
│   └── hooks.json       # Hook configuration
├── output-styles/       # Output style definitions
├── workflows/           # Workflow definitions
├── bin/                 # Executables (added to PATH)
└── .mcp.json            # MCP server configuration
mcp.json (without the leading dot) is accepted as a fallback for .mcp.json. When both exist, .mcp.json takes precedence, and they are not merged.

Marketplace manifest (marketplace.json)

A plugin marketplace describes a set of installable plugins via marketplace.json.

Required fields

FieldTypeDescription
namestringThe marketplace name.
ownerobjectMarketplace maintainer information (name/email/url).
pluginsarrayThe array of plugin entries.

Optional fields

FieldTypeDescription
forceRemoveDeletedPluginsbooleanAutomatically uninstall plugins deleted from the marketplace.
metadata.pluginRootstringThe base path relative to the plugin source.
metadata.versionstringThe marketplace version.
metadata.descriptionstringThe marketplace description.
allowCrossMarketplaceDependenciesOnstring[]Marketplace names for which cross-marketplace dependencies are allowed.

Plugin entry fields

FieldTypeDescription
namestringThe plugin name (must match name in plugin.json).
sourcestring/objectThe plugin source (relative path, npm, git, github, url, etc.).
categorystringA category tag.
tagsstring[]Search tags.
strictbooleanWhether a manifest must exist in the plugin folder (default true).

Management commands

In interactive sessions use /plugins (alias /plugin); without a subcommand it opens the plugin browser:
SubcommandParametersDescription
install (alias i)<plugin>Install a plugin.
uninstall (aliases remove/rm)<plugin>Uninstall a plugin.
enable<plugin>Enable a plugin.
disable<plugin>Disable a plugin.
update*<plugin>Update a plugin.
marketplace (alias market)*Manage plugin marketplaces, with add <source>, list, remove <name>, update [name].
validate<path>Validate a plugin directory or plugin.json.
reloadReload all plugins.
On the command line use qodercn plugins (alias plugin):
SubcommandDescription
listList installed plugins.
install (alias i)Install a plugin from a marketplace or local directory.
uninstall (aliases remove/rm)Uninstall a plugin.
enable / disableEnable / disable a plugin.
update*Update a plugin to the latest version from its source marketplace.
validateValidate a plugin in a local directory.
marketplace (alias mp)*Manage plugin marketplaces.
* Commands marked with an asterisk are governed by the plugin marketplace feature switch and are unavailable when it is off. Startup flag: --plugin-dir <path> adds an additional plugin search directory.

Security

These two settings live under the security group in settings.json (restart required after changes):
{
  "security": {
    "blockGitExtensions": true,
    "allowedExtensions": ["^https://github\\.com/my-org/"]
  }
}
  • security.blockGitExtensions: true blocks installing/loading plugins from Git.
  • security.allowedExtensions provides a regex allowlist of plugin sources; when non-empty, only matching sources are allowed (overriding blockGitExtensions).

Next steps