Follow Discord
Sweep 27 Oct 2026 · 19:04Z Build v2.1.312 531 read Stable v2.1.308 Latest v2.1.312 Next v2.1.312 Feeds RSS JSON llms.txt llms-full.txt Unofficial
One change · claude-code

Plugin manifest reference changedplugins/manifest-reference

Nearest release: v2.1.309, published 2 hours after upstream edited the page. Shown because the two are within 24 hours of each other. Nothing here says the release caused the edit.

Upstream edited this page at 22 Oct 2026 17:58 UTC, give or take a minute or two: the time comes from Anthropic’s own sitemap rather than from a commit. This site recorded the change at 23 Oct 2026 19:07 UTC.

Upstream edited
Recorded here
Lines+39added
Lines−39removed
From line 10 where the diff opens
First seen 25 Sep 2026 this site's first read of the page
Recorded edits16to this page, all time

The whole hunk

from line 10, old and new numbered
/
lines
from line 10
1010>
1111> These cases are covered on other pages:
1212>
13> * **Learning to build a plugin**: start with [Create a plugin](/docs/en/plugins/create.md)
14> * **What each component does at runtime**: see [Plugin components](/docs/en/plugins/components.md)
13> * **Learning to build a plugin**: start with [Create a plugin](https://code.claude.com/docs/en/plugins/create.md)
14> * **What each component does at runtime**: see [Plugin components](https://code.claude.com/docs/en/plugins/components.md)
1515 
1616Start at the section that matches what you're looking up:
1717 
from line 19
1919* A `userConfig` option or a `channels` entry: the [User configuration](#user-configuration) and [Channels](#channels) schemas
2020* `${CLAUDE_PLUGIN_ROOT}` or another variable a plugin can reference: [Environment variables](#environment-variables)
2121* Where each component's files go: [Standard layout](#standard-layout)
22* A message from `claude plugin validate`: the [troubleshooting page](/docs/en/plugins/troubleshooting.md) lists each message with its fix and links to the relevant sections on this page
22* A message from `claude plugin validate`: the [troubleshooting page](https://code.claude.com/docs/en/plugins/troubleshooting.md) lists each message with its fix and links to the relevant sections on this page
2323 
2424## Manifest file
2525 
from line 139
139139| [`dependencies`](#dependencies) | Array of strings or objects | Plugins that must be enabled for this one to work |
140140| [`settings`](#settings) | Object | Settings Claude Code applies while the plugin is enabled. Only `agent` and `subagentStatusLine` take effect |
141141| [`userConfig`](#user-configuration) | Object | Values Claude Code prompts the user for when the plugin is enabled |
142| `types` | Path | A `.d.ts` file that declares the `$.state` values and `$` nouns of a [mod](/docs/en/plugins/mods/reference.md#files) |
142| `types` | Path | A `.d.ts` file that declares the `$.state` values and `$` nouns of a [mod](https://code.claude.com/docs/en/plugins/mods/reference.md#files) |
143143| [`channels`](#channels) | Array of objects | Message channels the plugin provides, each bound to one of its MCP servers |
144144| `skills` | Path, or array of paths | Directories to scan for skills, each a directory of `<name>/SKILL.md` folders or one folder holding `SKILL.md` directly. `"."` names the plugin root. Adds to the default `skills/` scan |
145145| [`commands`](#commands) | Path, array of paths, or object | Flat `.md` command files, directories of them, or an object map of command name to `source` or `content`. Replaces the default `commands/` scan |
from line 148
148148| [`mcpServers`](#mcpservers) | Path, object, or array of either | `.json` MCP config files, `.mcpb` or `.dxt` bundles, or inline server configs keyed by name. Loaded together with `.mcp.json`; a server name declared later replaces an earlier one |
149149| [`lspServers`](#lspservers) | Path, object, or array of either | `.json` LSP config files or inline server configs keyed by name. Loaded together with `.lsp.json` |
150150| `outputStyles` | Path, or array of paths | Output style files or directories. Replaces the default `output-styles/` scan |
151| `workflows` | Path, or array of paths | [Workflow](/docs/en/workflows.md#distribute-a-workflow-in-a-plugin) `.js` files or directories. Replaces the default `workflows/` scan |
151| `workflows` | Path, or array of paths | [Workflow](https://code.claude.com/docs/en/workflows.md#distribute-a-workflow-in-a-plugin) `.js` files or directories. Replaces the default `workflows/` scan |
152152| `experimental` | Object | Container for `themes`, `monitors`, and `evals`, whose manifest shape may still change |
153153| `experimental.themes` | Path, or array of paths | Theme files or directories. Replaces the default `themes/` scan. A top-level `themes` key still loads, with a `claude plugin validate` warning |
154154| [`experimental.monitors`](#monitors) | Path, or inline array | A `.json` file holding the monitors array, or the array itself. Defaults to `monitors/monitors.json`. A top-level `monitors` key still loads, with a `claude plugin validate` warning. Monitors run only in interactive sessions, and not on Amazon Bedrock, Google Cloud's Agent Platform, or Microsoft Foundry |
155| `experimental.evals` | Path, or array of paths | Directory that holds the plugin's [eval cases](/docs/en/plugin-evals.md#use-a-different-eval-directory) when it isn't the default `evals/`. `claude plugin eval --eval-dir` overrides it |
155| `experimental.evals` | Path, or array of paths | Directory that holds the plugin's [eval cases](https://code.claude.com/docs/en/plugin-evals.md#use-a-different-eval-directory) when it isn't the default `evals/`. `claude plugin eval --eval-dir` overrides it |
156156 
157157In the Type column, a path is a string relative to the plugin root, such as `"./custom/commands"`.
158158 
from line 177
177177 
178178The name shown in UI in place of `name`. It may contain spaces and any casing, and it isn't used for namespacing or lookup.
179179 
180For a marketplace-installed plugin, a `displayName` on the [marketplace entry](/docs/en/plugins/marketplace-reference.md#plugin-entries) takes precedence over this value.
180For a marketplace-installed plugin, a `displayName` on the [marketplace entry](https://code.claude.com/docs/en/plugins/marketplace-reference.md#plugin-entries) takes precedence over this value.
181181 
182182### `version`
183183 
184A version string, not checked against semver. Setting it pins the plugin to that version until you change it; see [Versions and updates](/docs/en/plugins/loading.md#versions-and-updates). A plugin with a [`command` source](/docs/en/plugins/marketplace-reference), a plugin from a [marketplace hosted on claude.ai](/docs/en/plugins/install.md#add-from-claude-ai), and a plugin [loaded in place](/docs/en/plugins/loading.md#find-plugins-on-disk) from a marketplace added from a local path aren't pinned by this field.
184A version string, not checked against semver. Setting it pins the plugin to that version until you change it; see [Versions and updates](https://code.claude.com/docs/en/plugins/loading.md#versions-and-updates). A plugin with a [`command` source](https://code.claude.com/docs/en/plugins/marketplace-reference), a plugin from a [marketplace hosted on claude.ai](https://code.claude.com/docs/en/plugins/install.md#add-from-claude-ai), and a plugin [loaded in place](https://code.claude.com/docs/en/plugins/loading.md#find-plugins-on-disk) from a marketplace added from a local path aren't pinned by this field.
185185 
186186### `metadata`
187187 
from line 189
189189 
190190### Directory listing fields
191191 
192Anthropic's directory reads the `icon`, `documentationUrl`, `supportUrl`, `privacyPolicyUrl`, and `termsOfServiceUrl` fields from `plugin.json` for your plugin's listing when you [submit the plugin](/docs/en/plugins/publish.md#submit-to-anthropics-directory). Claude Code ignores them at load time. Set them only in `plugin.json`. In a [marketplace entry](#marketplace-entries-and-the-manifest), `claude plugin validate` reports each one as an unknown field.
192Anthropic's directory reads the `icon`, `documentationUrl`, `supportUrl`, `privacyPolicyUrl`, and `termsOfServiceUrl` fields from `plugin.json` for your plugin's listing when you [submit the plugin](https://code.claude.com/docs/en/plugins/publish.md#submit-to-anthropics-directory). Claude Code ignores them at load time. Set them only in `plugin.json`. In a [marketplace entry](#marketplace-entries-and-the-manifest), `claude plugin validate` reports each one as an unknown field.
193193 
194194Set `icon` to the path of an image file inside the plugin, such as `./logo.png`, and each of the four URL fields to an `https://` URL.
195195 
from line 199
199199 
200200### `defaultEnabled`
201201 
202Whether the plugin starts enabled when the user hasn't set it in [`enabledPlugins`](/docs/en/settings-reference#enabledplugins). Defaults to `true`. A plugin that an enabled plugin depends on starts enabled regardless. The same field in the marketplace entry overrides this one.
202Whether the plugin starts enabled when the user hasn't set it in [`enabledPlugins`](https://code.claude.com/docs/en/settings-reference#enabledplugins). Defaults to `true`. A plugin that an enabled plugin depends on starts enabled regardless. The same field in the marketplace entry overrides this one.
203203 
204204Once a user's `enabledPlugins` entry is written, it persists across plugin updates, so changing `defaultEnabled` in a later release doesn't change the setting for an existing user.
205205 
206206### `dependencies`
207207 
208Plugins that must be enabled for this one to work. Each entry is `"name"`, `"name@marketplace"`, or `{ "name": "...", "marketplace": "...", "version": "..." }`. Bare names resolve against this plugin's own marketplace. See [dependency constraints](/docs/en/plugins/dependencies.md).
208Plugins that must be enabled for this one to work. Each entry is `"name"`, `"name@marketplace"`, or `{ "name": "...", "marketplace": "...", "version": "..." }`. Bare names resolve against this plugin's own marketplace. See [dependency constraints](https://code.claude.com/docs/en/plugins/dependencies.md).
209209 
210210### `settings`
211211 
212Settings Claude Code applies while the plugin is enabled. Only `agent` and `subagentStatusLine` take effect; other keys are dropped at load. A `settings.json` at the plugin root takes precedence over this key. See [Default settings](/docs/en/plugins/components.md#default-settings).
212Settings Claude Code applies while the plugin is enabled. Only `agent` and `subagentStatusLine` take effect; other keys are dropped at load. A `settings.json` at the plugin root takes precedence over this key. See [Default settings](https://code.claude.com/docs/en/plugins/components.md#default-settings).
213213 
214214## Component path forms
215215 
216Every component key accepts a path relative to the plugin root. `hooks`, `mcpServers`, `lspServers`, and `experimental.monitors` also accept inline configuration, `commands` also accepts an object map, and `mcpServers` also accepts MCP bundle paths and URLs. The examples that follow show each accepted shape once. For what each component does at runtime, see [Plugin components](/docs/en/plugins/components.md).
216Every component key accepts a path relative to the plugin root. `hooks`, `mcpServers`, `lspServers`, and `experimental.monitors` also accept inline configuration, `commands` also accepts an object map, and `mcpServers` also accepts MCP bundle paths and URLs. The examples that follow show each accepted shape once. For what each component does at runtime, see [Plugin components](https://code.claude.com/docs/en/plugins/components.md).
217217 
218218### Path-only fields
219219 
from line 255
255255 
256256### `hooks`
257257 
258`hooks` takes a `.json` file path, an inline hooks object in the same shape as [`hooks` in `settings.json`](/docs/en/hooks#configuration), or an array mixing both. For hook events and handler fields, see the [hooks reference](/docs/en/hooks.md#hook-events).
258`hooks` takes a `.json` file path, an inline hooks object in the same shape as [`hooks` in `settings.json`](https://code.claude.com/docs/en/hooks#configuration), or an array mixing both. For hook events and handler fields, see the [hooks reference](https://code.claude.com/docs/en/hooks.md#hook-events).
259259 
260A hooks file wraps the event map in a top-level `"hooks"` key, the shape [`hooks/hooks.json`](/docs/en/plugins/components#hooks) uses. A file that contains only the event map, without that wrapper, fails to load. An inline object is the event map itself, with no wrapper.
260A hooks file wraps the event map in a top-level `"hooks"` key, the shape [`hooks/hooks.json`](https://code.claude.com/docs/en/plugins/components#hooks) uses. A file that contains only the event map, without that wrapper, fails to load. An inline object is the event map itself, with no wrapper.
261261 
262262Claude Code merges whatever you declare with `hooks/hooks.json` when that file exists. This array loads one hooks file and declares one inline `PostToolUse` hook:
263263 
from line 298
298298 
299299### `mcpServers`
300300 
301`mcpServers` takes a `.json` file path, an MCP bundle path or URL, an inline map, or an array mixing them. For server config fields, see [plugin-provided MCP servers](/docs/en/mcp.md#plugin-provided-mcp-servers).
301`mcpServers` takes a `.json` file path, an MCP bundle path or URL, an inline map, or an array mixing them. For server config fields, see [plugin-provided MCP servers](https://code.claude.com/docs/en/mcp.md#plugin-provided-mcp-servers).
302302 
303303Claude Code loads `.mcp.json` at the plugin root first, then each declared shape in order. A server name declared later replaces an earlier one.
304304 
from line 352
352352}
353353```
354354 
355For the language servers Anthropic publishes as plugins and how the servers behave at runtime, see [Code intelligence](/docs/en/plugins/code-intelligence.md).
355For the language servers Anthropic publishes as plugins and how the servers behave at runtime, see [Code intelligence](https://code.claude.com/docs/en/plugins/code-intelligence.md).
356356 
357357### `monitors`
358358 
from line 393
393393* **`skills`**: also accepts `"."`. Both `"."` and `"./"` denote the plugin root. Before v2.1.221, `"."` failed manifest validation, so use `"./"` when the plugin must load on earlier versions
394394* **`mcpServers`**: also accepts an `https://` bundle URL
395395 
396`experimental.evals` isn't a component path, so the rules in this section don't cover it, and `claude plugin eval` checks the value when it runs instead. It names a directory below the plugin root, such as `"quality/evals"`, with or without the `./` prefix. With an array, only the first entry is used. For what the value accepts and what happens with an unusable one, see [Use a different eval directory](/docs/en/plugin-evals.md#use-a-different-eval-directory).
396`experimental.evals` isn't a component path, so the rules in this section don't cover it, and `claude plugin eval` checks the value when it runs instead. It names a directory below the plugin root, such as `"quality/evals"`, with or without the `./` prefix. With an array, only the first entry is used. For what the value accepts and what happens with an unusable one, see [Use a different eval directory](https://code.claude.com/docs/en/plugin-evals.md#use-a-different-eval-directory).
397397 
398398### Containment and existence
399399 
from line 484
484484 
485485### Where values are stored
486486 
487Non-sensitive values are saved under [`pluginConfigs`](/docs/en/settings-reference#pluginconfigs) in the user's `settings.json`. Sensitive values go to the platform's secure credential store instead. The [settings page](/docs/en/settings-reference.md#pluginconfigs) lists which settings files `pluginConfigs` is read from.
487Non-sensitive values are saved under [`pluginConfigs`](https://code.claude.com/docs/en/settings-reference#pluginconfigs) in the user's `settings.json`. Sensitive values go to the platform's secure credential store instead. The [settings page](https://code.claude.com/docs/en/settings-reference.md#pluginconfigs) lists which settings files `pluginConfigs` is read from.
488488 
489489### Reference a saved value
490490 
491491Reference a saved value where the plugin needs it, in one of two forms:
492492 
493* **`${user_config.KEY}`**: substituted in MCP server config, LSP server config, [exec-form](/docs/en/hooks.md#exec-form-and-shell-form) hook `args`, and skill and agent content. In skill and agent content, only non-sensitive values are substituted, and a sensitive value there becomes a placeholder
493* **`${user_config.KEY}`**: substituted in MCP server config, LSP server config, [exec-form](https://code.claude.com/docs/en/hooks.md#exec-form-and-shell-form) hook `args`, and skill and agent content. In skill and agent content, only non-sensitive values are substituted, and a sensitive value there becomes a placeholder
494494* **`CLAUDE_PLUGIN_OPTION_<KEY>`**: exported to hook processes for every option, with `<KEY>` uppercased. A shell-form hook reads `$CLAUDE_PLUGIN_OPTION_API_TOKEN` for `api_token`
495495 
496496### Fields that run through a shell
497497 
498Shell-form hook commands, monitor commands, and MCP [`headersHelper`](/docs/en/mcp#use-dynamic-headers-for-custom-authentication) reject `${user_config.*}`. A component that references it in one of these fields fails with an [error](/docs/en/errors.md#plugin-command-references-user-config) instead of running, because the field's value is passed to a shell that would re-parse the substituted value.
498Shell-form hook commands, monitor commands, and MCP [`headersHelper`](https://code.claude.com/docs/en/mcp#use-dynamic-headers-for-custom-authentication) reject `${user_config.*}`. A component that references it in one of these fields fails with an [error](https://code.claude.com/docs/en/errors.md#plugin-command-references-user-config) instead of running, because the field's value is passed to a shell that would re-parse the substituted value.
499499 
500500The table shows how the value can reach each of these fields instead.
501501 
502502| Field | How the value can reach it |
503503| :- | :- |
504| Shell-form hook commands | Use [exec form](/docs/en/hooks.md#exec-form-and-shell-form) with `args`, or read `CLAUDE_PLUGIN_OPTION_<KEY>` from the hook's environment |
504| Shell-form hook commands | Use [exec form](https://code.claude.com/docs/en/hooks.md#exec-form-and-shell-form) with `args`, or read `CLAUDE_PLUGIN_OPTION_<KEY>` from the hook's environment |
505505| Monitor commands | Not through Claude Code. Monitor processes don't receive `CLAUDE_PLUGIN_OPTION_<KEY>`, so the monitor script has to obtain the value on its own |
506506| MCP `headersHelper` | Not through Claude Code. The helper's environment carries `CLAUDE_PLUGIN_ROOT`, `CLAUDE_CODE_MCP_SERVER_NAME`, and `CLAUDE_CODE_MCP_SERVER_URL` but no option values, so the helper script has to obtain the value on its own |
507507 
508508## Channels
509509 
510`channels` declares the message channels a plugin provides, such as a bridge to a chat app. When you declare one, Claude Code can prompt for the channel's configuration when the plugin is enabled. For how the server injects messages, see the [channels reference](/docs/en/channels-reference.md#package-as-a-plugin).
510`channels` declares the message channels a plugin provides, such as a bridge to a chat app. When you declare one, Claude Code can prompt for the channel's configuration when the plugin is enabled. For how the server injects messages, see the [channels reference](https://code.claude.com/docs/en/channels-reference.md#package-as-a-plugin).
511511 
512512Each entry is a strict object bound to one of the plugin's MCP servers, with these fields:
513513 
from line 555
555555| `${CLAUDE_PLUGIN_DATA}` | `~/.claude/plugins/data/<id>/`, created on first reference and kept across plugin updates. `<id>` is the plugin identifier with every character other than a letter, digit, `_`, or `-` replaced by `-` | Installed dependencies such as `node_modules`, generated code, and caches |
556556| `${CLAUDE_PROJECT_DIR}` | The project root | Project-local scripts and config files |
557557 
558`${CLAUDE_PLUGIN_ROOT}` changes when the plugin updates, so don't write state there. For where the root moves and when the old directory is cleaned up, see the [loading page](/docs/en/plugins/loading.md).
558`${CLAUDE_PLUGIN_ROOT}` changes when the plugin updates, so don't write state there. For where the root moves and when the old directory is cleaned up, see the [loading page](https://code.claude.com/docs/en/plugins/loading.md).
559559 
560By default, Claude Code deletes the `${CLAUDE_PLUGIN_DATA}` directory when you uninstall the plugin from the last place it's installed. For `--keep-data` and the other cases where it stays, see [plugin uninstall](/docs/en/plugins/cli-reference.md#plugin-uninstall).
560By default, Claude Code deletes the `${CLAUDE_PLUGIN_DATA}` directory when you uninstall the plugin from the last place it's installed. For `--keep-data` and the other cases where it stays, see [plugin uninstall](https://code.claude.com/docs/en/plugins/cli-reference.md#plugin-uninstall).
561561 
562562### Where each variable resolves
563563 
from line 578
578578 
579579Keep each substituted path a single argument:
580580 
581* **Hook commands**: use [exec form](/docs/en/hooks.md#exec-form-and-shell-form) with `args` so each path is one argument with no quoting
581* **Hook commands**: use [exec form](https://code.claude.com/docs/en/hooks.md#exec-form-and-shell-form) with `args` so each path is one argument with no quoting
582582* **Shell-form hooks and monitor commands**: wrap the variable in double quotes so a path with spaces stays one word
583583 
584If you leave one of these variables outside quotes in a shell-form command in a hooks file, `claude plugin validate` warns about it unless the hook sets [`shell`](/docs/en/hooks#command-hook-fields) to `"powershell"`.
584If you leave one of these variables outside quotes in a shell-form command in a hooks file, `claude plugin validate` warns about it unless the hook sets [`shell`](https://code.claude.com/docs/en/hooks#command-hook-fields) to `"powershell"`.
585585 
586586This shell-form hook runs a script bundled with the plugin:
587587 
from line 613
613613| Manifest | `.claude-plugin/plugin.json` | Plugin metadata and configuration. Optional |
614614| Skills | `skills/` | One `<name>/SKILL.md` per skill. A plugin with `SKILL.md` at its root, no `skills/`, and no `skills` key loads as a single skill |
615615| Commands | `commands/` | Flat Markdown command files. Prefer `skills/` for new plugins |
616| Agents | `agents/` | Agent Markdown files. Subfolders are part of the [agent name](/docs/en/plugins/components.md#agents) |
616| Agents | `agents/` | Agent Markdown files. Subfolders are part of the [agent name](https://code.claude.com/docs/en/plugins/components.md#agents) |
617617| Hooks | `hooks/hooks.json` | Hook configuration |
618618| MCP servers | `.mcp.json` | MCP server definitions |
619619| LSP servers | `.lsp.json` | LSP server configurations |
from line 656
656656└── .lsp.json
657657```
658658 
659To click through this layout and read what each file does, open the [plugin explorer](/docs/en/plugins/components.md#explore-the-plugin-directory).
659To click through this layout and read what each file does, open the [plugin explorer](https://code.claude.com/docs/en/plugins/components.md#explore-the-plugin-directory).
660660 
661661A `CLAUDE.md` at the plugin root isn't loaded as context, and `claude plugin validate` warns when it finds one. To include instructions that load into Claude's context, put them in a skill.
662662 
663663## Marketplace entries and the manifest
664664 
665A [marketplace entry](/docs/en/plugins/marketplace-reference.md) accepts [its own fields](/docs/en/plugins/marketplace-reference.md#plugin-entries), including `strict`, and every field on this page except the [directory listing fields](#directory-listing-fields).
665A [marketplace entry](https://code.claude.com/docs/en/plugins/marketplace-reference.md) accepts [its own fields](https://code.claude.com/docs/en/plugins/marketplace-reference.md#plugin-entries), including `strict`, and every field on this page except the [directory listing fields](#directory-listing-fields).
666666 
667667The `strict` field decides whether the entry may add components to a plugin that has its own `plugin.json`. It defaults to `true`.
668668 
from line 674
674674* **`plugin.json` present, `strict` unset or `true`**: Claude Code loads the manifest and appends the entry's `commands`, `agents`, `skills`, `outputStyles`, and `themes` to it. For `hooks`, the entry's matchers for an event replace the manifest's matchers for that same event, and events only the manifest declares keep theirs
675675* **`plugin.json` present, `strict: false`**: an entry that declares any of `commands`, `agents`, `skills`, `hooks`, `outputStyles`, or `themes` is a conflict, and the plugin fails to load with `Plugin <name> has conflicting manifests`
676676 
677When a [marketplace entry whose `source` is the marketplace root](/docs/en/plugins/marketplace-reference) lists specific `skills` subdirectories, only those subdirectories load, and the plugin's default `skills/` directory isn't scanned. A `skills` key in the manifest instead [adds to the default](#how-each-key-combines-with-its-default-location).
677When a [marketplace entry whose `source` is the marketplace root](https://code.claude.com/docs/en/plugins/marketplace-reference) lists specific `skills` subdirectories, only those subdirectories load, and the plugin's default `skills/` directory isn't scanned. A `skills` key in the manifest instead [adds to the default](#how-each-key-combines-with-its-default-location).
678678 
679679### Metadata precedence
680680 
681681Some metadata fields have a fixed precedence regardless of `strict`:
682682 
683* **`defaultEnabled` and display fields**: the entry's `defaultEnabled` and its [display fields](/docs/en/plugins/marketplace-reference.md#entry-and-plugin-json) such as `displayName` override the manifest's
683* **`defaultEnabled` and display fields**: the entry's `defaultEnabled` and its [display fields](https://code.claude.com/docs/en/plugins/marketplace-reference.md#entry-and-plugin-json) such as `displayName` override the manifest's
684684* **`version`**: the manifest's `version` overrides the entry's
685685* **`name`**: when the entry lists the plugin under a different `name` than the manifest, `enabledPlugins` uses the entry name, and components are namespaced under the manifest name
686686 
687For the full precedence table, see [Strict mode](/docs/en/plugins/marketplace-reference.md).
687For the full precedence table, see [Strict mode](https://code.claude.com/docs/en/plugins/marketplace-reference.md).
688688 
689689## Next steps
690690 
691* [Add components to a plugin](/docs/en/plugins/components.md): what each component does at runtime, with an example that validates
692* [Marketplace reference](/docs/en/plugins/marketplace-reference.md): the entry fields a marketplace can set for your plugin
693* [Plugin commands reference](/docs/en/plugins/cli-reference.md#plugin-validate): `claude plugin validate` flags and output
694* [Troubleshoot plugins](/docs/en/plugins/troubleshooting.md#claude-plugin-validate-reports-errors): each validation message with its fix
691* [Add components to a plugin](https://code.claude.com/docs/en/plugins/components.md): what each component does at runtime, with an example that validates
692* [Marketplace reference](https://code.claude.com/docs/en/plugins/marketplace-reference.md): the entry fields a marketplace can set for your plugin
693* [Plugin commands reference](https://code.claude.com/docs/en/plugins/cli-reference.md#plugin-validate): `claude plugin validate` flags and output
694* [Troubleshoot plugins](https://code.claude.com/docs/en/plugins/troubleshooting.md#claude-plugin-validate-reports-errors): each validation message with its fix
695695 
Feedback