Plugin commands reference changedplugins/cli-reference
Upstream edited this page at 27 Sep 2026 16:27 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 28 Sep 2026 23:37 UTC.
Upstream edited
Recorded here
Lines+166added
Lines−166removed
From line
42
where the diff opens
First seen
25 Sep 2026
this site's first read of the page
Recorded edits19to this page, all time
The whole hunk
from line 42, old and new numbered
/
from line 42
4242
4343The command has no flag for another location. To scaffold inside a project instead, see [Create a plugin](/docs/en/plugins/create).
4444
45| Flag | Description |
46| :----------------------- | :------------------------------------------------------------------------------------------------------ |
47| `--description <text>` | Manifest description |
48| `--author <name>` | Author name. Defaults to `git config user.name` |
49| `--author-email <email>` | Author email. Defaults to `git config user.email` |
45| Flag | Description |
46| :- | :- |
47| `--description <text>` | Manifest description |
48| `--author <name>` | Author name. Defaults to `git config user.name` |
49| `--author-email <email>` | Author email. Defaults to `git config user.email` |
5050| `--with <components...>` | Also scaffold starter files for `skills`, `agents`, `hooks`, `mcp`, `lsp`, `output-style`, or `channel` |
51| `-f, --force` | Overwrite an existing `.claude-plugin/` at the target |
51| `-f, --force` | Overwrite an existing `.claude-plugin/` at the target |
5252
5353Scaffold a plugin with starter skill and hook files:
5454
from line 74
7474
7575Most plugins install without a prompt. For a plugin whose marketplace entry [runs a command to install it](/docs/en/plugins/host-marketplace) or [sets a `headersHelper` for its download](/docs/en/plugins/host-marketplace#how-users-accept-a-headershelper-command), Claude Code first prints the command and asks `Run this command now? [y/N]`.
7676
77| Flag | Description |
78| :-------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
79| `-s, --scope <scope>` | Installation scope: `user`, `project`, or `local`. Defaults to `user` |
80| `--config <key=value>` | Set a [`userConfig`](/docs/en/plugins/manifest-reference) option the plugin's manifest declares. Repeat the flag for each option. Requires Claude Code v2.1.147 or later |
81| `-y, --yes` | Accept the displayed install command without the `Run this command now?` prompt. Ignored when the command runs inside a Claude Code session, such as from the Bash tool or a hook. Requires Claude Code v2.1.229 or later |
77| Flag | Description |
78| :- | :- |
79| `-s, --scope <scope>` | Installation scope: `user`, `project`, or `local`. Defaults to `user` |
80| `--config <key=value>` | Set a [`userConfig`](/docs/en/plugins/manifest-reference) option the plugin's manifest declares. Repeat the flag for each option. Requires Claude Code v2.1.147 or later |
81| `-y, --yes` | Accept the displayed install command without the `Run this command now?` prompt. Ignored when the command runs inside a Claude Code session, such as from the Bash tool or a hook. Requires Claude Code v2.1.229 or later |
8282| `--accept-command <sha256>` | Accept the displayed install command whose `sha256` a previous [`--json` run](#plugin-json-result) reported in `shownCommand`, in place of `-y`. Can't be combined with `-y`. See [Accept a displayed install command](#accept-a-displayed-install-command). Requires Claude Code v2.1.271 or later |
83| `--json` | Print the result as one JSON object on the last line of stdout instead of the human-readable message, for use in scripts. See [JSON result format](#plugin-json-result). Requires Claude Code v2.1.268 or later |
83| `--json` | Print the result as one JSON object on the last line of stdout instead of the human-readable message, for use in scripts. See [JSON result format](#plugin-json-result). Requires Claude Code v2.1.268 or later |
8484
8585Pass `-y` from your own terminal to accept the displayed command without the prompt. Here's what happens without a TTY and when Claude runs the command:
8686
from line 135
135135claude plugin uninstall <plugin> [options]
136136```
137137
138| Flag | Description |
139| :-------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
140| `-s, --scope <scope>` | Uninstall from scope: `user`, `project`, or `local`. Defaults to `user` |
141| `--keep-data` | Preserve the plugin's persistent data directory, `~/.claude/plugins/data/<id>/` |
142| `--prune` | Also remove auto-installed [dependencies](/docs/en/plugins/dependencies) that no remaining plugin needs |
143| `-y, --yes` | Skip the `--prune` confirmation prompt. Required with `--prune` when stdin or stdout isn't a TTY |
144| `--json` | Print the result as one JSON object on the last line of stdout, in the [same format as `plugin install --json`](#plugin-json-result). Can't be combined with `--prune`. Requires Claude Code v2.1.268 or later |
138| Flag | Description |
139| :- | :- |
140| `-s, --scope <scope>` | Uninstall from scope: `user`, `project`, or `local`. Defaults to `user` |
141| `--keep-data` | Preserve the plugin's persistent data directory, `~/.claude/plugins/data/<id>/` |
142| `--prune` | Also remove auto-installed [dependencies](/docs/en/plugins/dependencies) that no remaining plugin needs |
143| `-y, --yes` | Skip the `--prune` confirmation prompt. Required with `--prune` when stdin or stdout isn't a TTY |
144| `--json` | Print the result as one JSON object on the last line of stdout, in the [same format as `plugin install --json`](#plugin-json-result). Can't be combined with `--prune`. Requires Claude Code v2.1.268 or later |
145145
146146Uninstall a plugin from project scope:
147147
from line 171
171171claude plugin enable <plugin> [options]
172172```
173173
174| Flag | Description |
175| :-------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
176| `-s, --scope <scope>` | Scope to enable at: `user`, `project`, or `local`. Auto-detected when omitted |
177| `--json` | Print the result as one JSON object on the last line of stdout, in the [same format as `plugin install --json`](#plugin-json-result). Requires Claude Code v2.1.268 or later |
174| Flag | Description |
175| :- | :- |
176| `-s, --scope <scope>` | Scope to enable at: `user`, `project`, or `local`. Auto-detected when omitted |
177| `--json` | Print the result as one JSON object on the last line of stdout, in the [same format as `plugin install --json`](#plugin-json-result). Requires Claude Code v2.1.268 or later |
178178
179179Without `--scope`, the command checks your settings files in the order local, project, user, and uses the first scope that mentions the plugin.
180180
from line 207
207207claude plugin disable [plugin] [options]
208208```
209209
210| Flag | Description |
211| :-------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
212| `-a, --all` | Disable every enabled plugin. Can't be combined with a plugin name or `--scope` |
213| `-s, --scope <scope>` | Scope to disable at: `user`, `project`, or `local`. Auto-detected when omitted |
214| `--json` | Print the result as one JSON object on the last line of stdout, in the [same format as `plugin install --json`](#plugin-json-result). Requires Claude Code v2.1.268 or later |
210| Flag | Description |
211| :- | :- |
212| `-a, --all` | Disable every enabled plugin. Can't be combined with a plugin name or `--scope` |
213| `-s, --scope <scope>` | Scope to disable at: `user`, `project`, or `local`. Auto-detected when omitted |
214| `--json` | Print the result as one JSON object on the last line of stdout, in the [same format as `plugin install --json`](#plugin-json-result). Requires Claude Code v2.1.268 or later |
215215
216216Without `--scope`, the scope is auto-detected in the same local, project, user order as [`plugin enable`](#plugin-enable).
217217
from line 238
238238claude plugin update <plugin> [options]
239239```
240240
241| Flag | Description |
242| :-------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
243| `-s, --scope <scope>` | Scope to update: `user`, `project`, `local`, or `managed`. Auto-detected when omitted |
244| `-y, --yes` | Accept a changed install command from a [command-source](/docs/en/plugins/host-marketplace) plugin, without the prompt. Required when stdin or stdout isn't a TTY, unless you pass `--accept-command`. Requires Claude Code v2.1.229 or later |
245| `--accept-command <sha256>` | Accept the marketplace-declared command whose `sha256` a previous [`--json` run](#plugin-json-result) reported in `shownCommand`, in place of `-y`. Can't be combined with `-y`. Requires Claude Code v2.1.271 or later |
246| `--json` | Print the result as one JSON object on the last line of stdout, in the [same format as `plugin install --json`](#plugin-json-result). Requires Claude Code v2.1.268 or later |
241| Flag | Description |
242| :- | :- |
243| `-s, --scope <scope>` | Scope to update: `user`, `project`, `local`, or `managed`. Auto-detected when omitted |
244| `-y, --yes` | Accept a changed install command from a [command-source](/docs/en/plugins/host-marketplace) plugin, without the prompt. Required when stdin or stdout isn't a TTY, unless you pass `--accept-command`. Requires Claude Code v2.1.229 or later |
245| `--accept-command <sha256>` | Accept the marketplace-declared command whose `sha256` a previous [`--json` run](#plugin-json-result) reported in `shownCommand`, in place of `-y`. Can't be combined with `-y`. Requires Claude Code v2.1.271 or later |
246| `--json` | Print the result as one JSON object on the last line of stdout, in the [same format as `plugin install --json`](#plugin-json-result). Requires Claude Code v2.1.268 or later |
247247
248248If you omit `--scope`, the command updates the plugin at the most specific scope it's installed at for your current project, checking local, project, user, then managed.
249249
from line 269
269269claude plugin list [options]
270270```
271271
272| Flag | Description |
273| :------------ | :--------------------------------------------------------------------------------------------------- |
274| `--json` | Print the list as JSON |
272| Flag | Description |
273| :- | :- |
274| `--json` | Print the list as JSON |
275275| `--available` | Also list plugins your marketplaces offer that you haven't installed. Has no effect without `--json` |
276276
277277Claude Code groups the human-readable output by how each plugin loads:
from line 287
287287
288288With `--json`, Claude Code prints an array with one object per installation. Each object carries the fields below. `id`, `version`, `scope`, `enabled`, and `installPath` are always present, and the others appear only when they apply.
289289
290| Field | Type | Description |
291| :------------- | :--------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
292| `id` | string | `name@marketplace` for installs, `name@inline` for session-only plugins, `name@skills-dir` for skills-directory plugins, `name@synced` for plugins synced from claude.ai |
293| `version` | string | For a marketplace install, the [version Claude Code computed](/docs/en/plugins/loading#versions-and-updates) at install. For a session-only, skills-directory, or synced plugin, the manifest's `version`, or `unknown` when it declares none |
294| `scope` | string | `user`, `project`, `local`, or `managed` for installs; `user` or `project` for skills-directory plugins; `session` for session-only plugins; `synced` for plugins synced from claude.ai |
295| `enabled` | boolean | Whether the plugin is enabled in your merged settings |
296| `installPath` | string | Directory the plugin loads from |
297| `installedAt` | string | ISO timestamp of the install. Marketplace installs only |
298| `lastUpdated` | string | ISO timestamp of the last update. Marketplace installs only |
299| `projectPath` | string | Project the install belongs to. `project` and `local` scope only |
300| `mcpServers` | object | The plugin's MCP server definitions, when a marketplace-installed plugin has any |
301| `errors` | array of strings | Load errors, when the plugin failed to load |
302| `notes` | array of strings | Authoring warnings for a plugin that loaded and works |
303| `errorDetails` | array of objects | One object per `errors` entry, giving its diagnostic `type` and the names it refers to, such as the plugin, marketplace, server, or file. Requires Claude Code v2.1.268 or later |
304| `noteDetails` | array of objects | The same detail objects for each `notes` entry. Requires Claude Code v2.1.268 or later |
290| Field | Type | Description |
291| :- | :- | :- |
292| `id` | string | `name@marketplace` for installs, `name@inline` for session-only plugins, `name@skills-dir` for skills-directory plugins, `name@synced` for plugins synced from claude.ai |
293| `version` | string | For a marketplace install, the [version Claude Code computed](/docs/en/plugins/loading#versions-and-updates) at install. For a session-only, skills-directory, or synced plugin, the manifest's `version`, or `unknown` when it declares none |
294| `scope` | string | `user`, `project`, `local`, or `managed` for installs; `user` or `project` for skills-directory plugins; `session` for session-only plugins; `synced` for plugins synced from claude.ai |
295| `enabled` | boolean | Whether the plugin is enabled in your merged settings |
296| `installPath` | string | Directory the plugin loads from |
297| `installedAt` | string | ISO timestamp of the install. Marketplace installs only |
298| `lastUpdated` | string | ISO timestamp of the last update. Marketplace installs only |
299| `projectPath` | string | Project the install belongs to. `project` and `local` scope only |
300| `mcpServers` | object | The plugin's MCP server definitions, when a marketplace-installed plugin has any |
301| `errors` | array of strings | Load errors, when the plugin failed to load |
302| `notes` | array of strings | Authoring warnings for a plugin that loaded and works |
303| `errorDetails` | array of objects | One object per `errors` entry, giving its diagnostic `type` and the names it refers to, such as the plugin, marketplace, server, or file. Requires Claude Code v2.1.268 or later |
304| `noteDetails` | array of objects | The same detail objects for each `notes` entry. Requires Claude Code v2.1.268 or later |
305305
306306With `--json --available`, Claude Code prints one object instead of an array. Its `installed` field holds the array of installed-plugin objects, and its `available` field holds one object per uninstalled marketplace plugin with the fields below.
307307
308| Field | Type | Description |
309| :---------------- | :--------------- | :--------------------------------------------------------------------------------------------------------------------- |
310| `pluginId` | string | `name@marketplace` |
311| `name` | string | The plugin's name in the marketplace |
312| `marketplaceName` | string | The marketplace that offers it |
313| `source` | string or object | The marketplace entry's [source](/docs/en/plugins/marketplace-reference): a string for a relative path, an object otherwise |
314| `description` | string | The entry's description, when it has one |
315| `version` | string | The entry's version, when it declares one |
316| `installCount` | number | Install count, when Claude Code has one for the plugin |
308| Field | Type | Description |
309| :- | :- | :- |
310| `pluginId` | string | `name@marketplace` |
311| `name` | string | The plugin's name in the marketplace |
312| `marketplaceName` | string | The marketplace that offers it |
313| `source` | string or object | The marketplace entry's [source](/docs/en/plugins/marketplace-reference): a string for a relative path, an object otherwise |
314| `description` | string | The entry's description, when it has one |
315| `version` | string | The entry's version, when it declares one |
316| `installCount` | number | Install count, when Claude Code has one for the plugin |
317317
318318### plugin details
319319
from line 351
351351claude plugin prune [options]
352352```
353353
354| Flag | Description |
355| :-------------------- | :---------------------------------------------------------------------- |
356| `-s, --scope <scope>` | Prune at scope: `user`, `project`, or `local`. Defaults to `user` |
357| `--dry-run` | List what would be removed without removing it |
358| `-y, --yes` | Skip the confirmation prompt. Required when stdin or stdout isn't a TTY |
354| Flag | Description |
355| :- | :- |
356| `-s, --scope <scope>` | Prune at scope: `user`, `project`, or `local`. Defaults to `user` |
357| `--dry-run` | List what would be removed without removing it |
358| `-y, --yes` | Skip the confirmation prompt. Required when stdin or stdout isn't a TTY |
359359
360360Preview what a prune would remove:
361361
from line 371
371371
372372What `prune` does depends on whether a terminal is attached and whether you pass `-y`:
373373
374| Terminal and flags | What happens |
375| :------------------------------- | :-------------------------------------------------------------------------------------------- |
376| Interactive terminal, no `-y` | Lists the orphaned dependencies and asks `Remove? [y/N]` |
377| Any terminal, `-y` | Removes them and prints `Removed N auto-installed plugins: <names>` |
374| Terminal and flags | What happens |
375| :- | :- |
376| Interactive terminal, no `-y` | Lists the orphaned dependencies and asks `Remove? [y/N]` |
377| Any terminal, `-y` | Removes them and prints `Removed N auto-installed plugins: <names>` |
378378| Non-TTY stdin or stdout, no `-y` | Prints the list and ``Not a TTY — run `claude plugin prune -y` to remove.``, removing nothing |
379379
380380### plugin eval
from line 400
400400
401401This table lists the options most runs use. Run `claude plugin eval --help` for the complete set, including `--case`, `--tag`, `--output-dir`, `--report`, `--allow-real-servers`, `--keep-temp`, and `--verbose`.
402402
403| Option | Description | Default |
404| :------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------- |
405| `--runs <n>` | Runs per case in each [arm](/docs/en/plugin-evals#compare-against-a-no-plugin-baseline) | Each case's `runs`, else 3 |
406| `-j, --concurrency <n>` | Agent sessions to run at once, 1 to 8. They share your rate limit | `1` |
407| `--model <model>` | Model for the agent under test | Each case's `model`, else `ANTHROPIC_MODEL` if set, else Claude Code's default |
408| `--judge-model <model>` | Model for `llm` and `baseline` graders | A small fast model |
409| `--ablation <mode>` | `none` or `with-without`. See [Compare against a no-plugin baseline](/docs/en/plugin-evals#compare-against-a-no-plugin-baseline) | `with-without` when a plugin resolves, else `none` |
410| `--threshold <0..1>` | Exit 1 if any case scores below this | `1.0` |
411| `--max-cost-usd <usd>` | Stop before the next run once spend reaches this, exit 2, and report partial results | No limit |
412| `--allow-tools <tools...>` | Grant tools beyond the read-only set, such as `Bash`, `Write`, `Edit`, or `"mcp__plugin_<plugin>_<server>__*"`. See [Grant tools](/docs/en/plugin-evals#grant-tools) | |
413| `--scaffold` | Run each case's [`scaffold_script`](/docs/en/plugin-evals#add-setup-or-history-with-case-yaml) | Off |
414| `--trust-plugin` | Skip the first-run trust prompt, for CI. See [What a run can access](/docs/en/plugin-evals#security) | Off |
415| `--mocks <mode>` | `record` or `off`. See [Mock MCP servers](/docs/en/plugin-evals#mock-mcp-servers) | `record` |
416| `--eval-dir <dir>` | Directory below the plugin that holds the cases | The manifest's `experimental.evals`, else `evals` |
417| `--json [path]` | Print the [result document](/docs/en/plugin-evals#json-result) to stdout, or write it to a `.json` path | |
418| `--no-publish` | Keep the HTML report local | |
403| Option | Description | Default |
404| :- | :- | :- |
405| `--runs <n>` | Runs per case in each [arm](/docs/en/plugin-evals#compare-against-a-no-plugin-baseline) | Each case's `runs`, else 3 |
406| `-j, --concurrency <n>` | Agent sessions to run at once, 1 to 8. They share your rate limit | `1` |
407| `--model <model>` | Model for the agent under test | Each case's `model`, else `ANTHROPIC_MODEL` if set, else Claude Code's default |
408| `--judge-model <model>` | Model for `llm` and `baseline` graders | A small fast model |
409| `--ablation <mode>` | `none` or `with-without`. See [Compare against a no-plugin baseline](/docs/en/plugin-evals#compare-against-a-no-plugin-baseline) | `with-without` when a plugin resolves, else `none` |
410| `--threshold <0..1>` | Exit 1 if any case scores below this | `1.0` |
411| `--max-cost-usd <usd>` | Stop before the next run once spend reaches this, exit 2, and report partial results | No limit |
412| `--allow-tools <tools...>` | Grant tools beyond the read-only set, such as `Bash`, `Write`, `Edit`, or `"mcp__plugin_<plugin>_<server>__*"`. See [Grant tools](/docs/en/plugin-evals#grant-tools) | |
413| `--scaffold` | Run each case's [`scaffold_script`](/docs/en/plugin-evals#add-setup-or-history-with-case-yaml) | Off |
414| `--trust-plugin` | Skip the first-run trust prompt, for CI. See [What a run can access](/docs/en/plugin-evals#security) | Off |
415| `--mocks <mode>` | `record` or `off`. See [Mock MCP servers](/docs/en/plugin-evals#mock-mcp-servers) | `record` |
416| `--eval-dir <dir>` | Directory below the plugin that holds the cases | The manifest's `experimental.evals`, else `evals` |
417| `--json [path]` | Print the [result document](/docs/en/plugin-evals#json-result) to stdout, or write it to a `.json` path | |
418| `--no-publish` | Keep the HTML report local | |
419419
420420The exit code reports how the run ended. To act on it in a pipeline, see [Run evals in CI](/docs/en/plugin-evals#run-evals-in-ci).
421421
422| Exit code | Meaning |
423| :-------- | :------------------------------------------------------------- |
424| `0` | Every case meets the threshold |
425| `1` | A failing case, a load error, or an untrusted plugin directory |
426| `2` | A partial run |
427| `130` | Interrupted |
428| `143` | Terminated |
422| Exit code | Meaning |
423| :- | :- |
424| `0` | Every case meets the threshold |
425| `1` | A failing case, a load error, or an untrusted plugin directory |
426| `2` | A partial run |
427| `130` | Interrupted |
428| `143` | Terminated |
429429
430430### plugin eval init
431431
from line 449
449449
450450The command accepts these options:
451451
452| Option | Description | Default |
453| :------------------ | :------------------------------------------------------------------------------------------------ | :------------------------------------------------ |
454| `--bare` | Write a blank `prompt.md` and `graders/criteria.md` for `<name>` instead of running the interview | |
455| `-i, --interactive` | Require the interview. Fails without a terminal instead of writing a template | |
456| `--eval-dir <dir>` | Directory below the current directory to write cases into | The manifest's `experimental.evals`, else `evals` |
452| Option | Description | Default |
453| :- | :- | :- |
454| `--bare` | Write a blank `prompt.md` and `graders/criteria.md` for `<name>` instead of running the interview | |
455| `-i, --interactive` | Require the interview. Fails without a terminal instead of writing a template | |
456| `--eval-dir <dir>` | Directory below the current directory to write cases into | The manifest's `experimental.evals`, else `evals` |
457457
458458### plugin tag
459459
from line 467
467467
468468The `[path]` is the plugin directory, defaulting to the current directory. The command finds the marketplace entry by walking up from that directory to a `.claude-plugin/marketplace.json` that lists the plugin.
469469
470| Flag | Description |
471| :-------------------- | :---------------------------------------------------------------------------------- |
472| `--push` | Push the tag to `--remote` after creating it |
473| `--dry-run` | Print what would be tagged without creating the tag |
474| `-f, --force` | Skip the dirty-working-tree and tag-already-exists checks |
470| Flag | Description |
471| :- | :- |
472| `--push` | Push the tag to `--remote` after creating it |
473| `--dry-run` | Print what would be tagged without creating the tag |
474| `-f, --force` | Skip the dirty-working-tree and tag-already-exists checks |
475475| `-m, --message <msg>` | Tag annotation message. `%s` stands for the version. Defaults to `<name> <version>` |
476| `--remote <name>` | Remote to push to with `--push`. Defaults to `origin` |
476| `--remote <name>` | Remote to push to with `--push`. Defaults to `origin` |
477477
478478Preview the tag for a plugin in a marketplace checkout:
479479
from line 505
505505claude plugin validate <path> [options]
506506```
507507
508| Flag | Description |
509| :--------- | :---------------------------------------------------------------------------------------------------------------------------------------------------- |
508| Flag | Description |
509| :- | :- |
510510| `--strict` | Treat warnings as errors, so unrecognized fields and missing metadata that the runtime tolerates fail the run. Requires Claude Code v2.1.145 or later |
511| `--json` | Output the validation report as one JSON object with the same exit codes. Requires Claude Code v2.1.259 or later |
511| `--json` | Output the validation report as one JSON object with the same exit codes. Requires Claude Code v2.1.259 or later |
512512
513513Validate a plugin before committing it:
514514
from line 543
543543
544544Claude Code prints the file it validated, any errors and warnings with their paths, and a verdict line. The exit code follows the verdict:
545545
546| Exit code | Verdict line | Meaning |
547| :-------- | :------------------------------------------------------------------------------ | :--------------------------------------------------------- |
548| `0` | `Validation passed` or `Validation passed with warnings` | The manifest loads. With `--strict`, no warnings either |
549| `1` | `Validation failed` or `Validation failed (--strict treats warnings as errors)` | An error, or a warning under `--strict` |
550| `2` | `Unexpected error during validation: <reason>` | The validator itself failed, such as on an unreadable path |
546| Exit code | Verdict line | Meaning |
547| :- | :- | :- |
548| `0` | `Validation passed` or `Validation passed with warnings` | The manifest loads. With `--strict`, no warnings either |
549| `1` | `Validation failed` or `Validation failed (--strict treats warnings as errors)` | An error, or a warning under `--strict` |
550| `2` | `Unexpected error during validation: <reason>` | The validator itself failed, such as on an unreadable path |
551551
552552With `--json`, Claude Code writes the report to stdout as one JSON object with these top-level fields:
553553
from line 578
578578claude plugin marketplace add <source> [options]
579579```
580580
581| Flag | Description |
582| :-------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
583| `--scope <scope>` | Settings file to declare the marketplace in: `user`, `project`, or `local`. Defaults to `user` |
584| `--sparse <paths...>` | Limit the git checkout to these directories, for monorepos. `github` and `git` sources only |
585| `--claudeai` | Read the argument as the name of a [marketplace hosted on claude.ai](/docs/en/plugins/install#add-from-claude-ai) instead of a source. Requires Claude Code v2.1.273 or later |
581| Flag | Description |
582| :- | :- |
583| `--scope <scope>` | Settings file to declare the marketplace in: `user`, `project`, or `local`. Defaults to `user` |
584| `--sparse <paths...>` | Limit the git checkout to these directories, for monorepos. `github` and `git` sources only |
585| `--claudeai` | Read the argument as the name of a [marketplace hosted on claude.ai](/docs/en/plugins/install#add-from-claude-ai) instead of a source. Requires Claude Code v2.1.273 or later |
586586
587587`<source>` takes any of the forms in the table below, and its form decides the source type and how Claude Code fetches the marketplace. For the resulting source object, see the [marketplace reference](/docs/en/plugins/marketplace-reference).
588588
589| You type | Source type | How Claude Code fetches it |
590| :------------------------------------------------------------------------------------- | :---------- | :------------------------------------------------------------------------------------------------------- |
591| `owner/repo`, `owner/repo#ref`, or `owner/repo@ref` | `github` | Clones the GitHub repository, pinned to `ref` when given. Owner and repo must follow GitHub naming rules |
592| `user@host:path[.git][#ref]` | `git` | Clones over SSH |
593| `https://example.com/repo.git[#ref]`, or a URL containing `/_git/` | `git` | Clones over HTTPS, including Azure DevOps URLs |
594| `https://github.com/owner/repo` or `https://gitlab.com/namespace/project` | `git` | Clones over HTTPS after appending `.git` |
595| Any other `http://` or `https://` URL, including a self-hosted git host without `.git` | `url` | Fetches the URL as a `marketplace.json`. To clone a repository there instead, append `.git` |
596| `./path`, `../path`, `/path`, or `~/path` to a directory | `directory` | Reads the directory in place. On Windows, `.\`, `..\`, and `C:\` forms also work |
597| The same path forms, to a `.json` file | `file` | Reads the file in place |
589| You type | Source type | How Claude Code fetches it |
590| :- | :- | :- |
591| `owner/repo`, `owner/repo#ref`, or `owner/repo@ref` | `github` | Clones the GitHub repository, pinned to `ref` when given. Owner and repo must follow GitHub naming rules |
592| `user@host:path[.git][#ref]` | `git` | Clones over SSH |
593| `https://example.com/repo.git[#ref]`, or a URL containing `/_git/` | `git` | Clones over HTTPS, including Azure DevOps URLs |
594| `https://github.com/owner/repo` or `https://gitlab.com/namespace/project` | `git` | Clones over HTTPS after appending `.git` |
595| Any other `http://` or `https://` URL, including a self-hosted git host without `.git` | `url` | Fetches the URL as a `marketplace.json`. To clone a repository there instead, append `.git` |
596| `./path`, `../path`, `/path`, or `~/path` to a directory | `directory` | Reads the directory in place. On Windows, `.\`, `..\`, and `C:\` forms also work |
597| The same path forms, to a `.json` file | `file` | Reads the file in place |
598598
599599For a host whose clone URLs don't carry the `.git` suffix, such as AWS CodeCommit, add the marketplace as a git entry in [`extraKnownMarketplaces`](/docs/en/settings-reference#extraknownmarketplaces) instead. Claude Code clones a git entry whether or not its URL ends in `.git`.
600600
from line 628
628628claude plugin marketplace list [options]
629629```
630630
631| Flag | Description |
632| :------- | :--------------------- |
631| Flag | Description |
632| :- | :- |
633633| `--json` | Print the list as JSON |
634634
635635Claude Code prints `Configured marketplaces:` and one `Source:` line per marketplace, or `No marketplaces configured`.
from line 636
636636
637637With `--json`, Claude Code prints an array with one object per marketplace, carrying the fields below. Every field is a string.
638638
639| Field | Description |
640| :---------------- | :--------------------------------------------------------------------- |
641| `name` | The marketplace's name |
642| `source` | `github`, `git`, `url`, `directory`, `file`, or `claudeai` |
643| `repo` | `owner/repo`. `github` sources only |
644| `url` | The clone or fetch URL. `git` and `url` sources only |
645| `path` | The local path. `directory` and `file` sources only |
646| `ref` | The pinned branch or tag. `github` and `git` sources, only when pinned |
647| `installLocation` | Where Claude Code cached the marketplace |
639| Field | Description |
640| :- | :- |
641| `name` | The marketplace's name |
642| `source` | `github`, `git`, `url`, `directory`, `file`, or `claudeai` |
643| `repo` | `owner/repo`. `github` sources only |
644| `url` | The clone or fetch URL. `git` and `url` sources only |
645| `path` | The local path. `directory` and `file` sources only |
646| `ref` | The pinned branch or tag. `github` and `git` sources, only when pinned |
647| `installLocation` | Where Claude Code cached the marketplace |
648648
649649An added [claude.ai marketplace](/docs/en/plugins/install#add-from-claude-ai) has no local clone, so its entry carries its claude.ai identifiers, `marketplaceId` and `organizationUuid`, in place of `installLocation`. It also carries `scope` when one is recorded, and `status`.
650650
from line 668
668668
669669The `<name>` is the marketplace name that `plugin marketplace list` shows, not the source you passed to `add`.
670670
671| Flag | Description |
672| :---------------- | :---------------------------------------------------------------------------------------------------------------------------------------------- |
671| Flag | Description |
672| :- | :- |
673673| `--scope <scope>` | Remove the declaration from one settings scope: `user`, `project`, or `local`. Without it, Claude Code removes the declaration from every scope |
674674
675675Remove a marketplace from every scope:
from line 712
712712
713713The table below lists every session form. The shell subcommands `init`, `update`, `details`, `prune`, `eval`, and `eval init` have no session form.
714714
715| Command | Aliases | What it does |
716| :-------------------------------------------------- | :--------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
717| `/plugin` | | Opens the panel on the **Discover** tab. Any unrecognized first word after `/plugin` does the same |
718| `/plugin help` | `/plugin --help`, `/plugin -h` | Shows the usage list of `/plugin` subcommands |
719| `/plugin list [--enabled\|--disabled]` | `ls` | Prints your marketplace-installed plugins inline, with version, scope, and status. A filter flag shows only that state. A plugin whose enable state hasn't been applied yet is marked `— run /reload-plugins to apply`. Requires Claude Code v2.1.163 or later |
720| `/plugin install` | `i` | Opens the **Discover** tab |
721| `/plugin install <plugin>` | `i` | Opens the plugin's details in the **Discover** tab. With `name@marketplace`, opens them in that marketplace's list |
722| `/plugin install <plugin> --marketplace <source>` | `i` | Adds the marketplace at `<source>` when you haven't added it yet, asking you to confirm first, then opens the plugin's details. See [Add a marketplace and install in one command](/docs/en/plugins/install#add-a-marketplace-and-install-in-one-command). Requires Claude Code v2.1.275 or later |
723| `/plugin manage` | | Opens the **Installed** tab |
724| `/plugin stats` | | Opens the **Stats** tab, in sessions where [`/skill-doctor`](/docs/en/skills#find-unused-skills) is available. Anywhere else it opens the panel on the **Discover** tab |
725| `/plugin enable <plugin>` | | Opens the **Installed** tab at the plugin and enables it |
726| `/plugin disable <plugin>` | | Opens the **Installed** tab at the plugin and disables it |
727| `/plugin uninstall <plugin>` | | Opens the **Installed** tab at the plugin and uninstalls it |
728| `/plugin configure <plugin>` | `config` | Opens the plugin's [`userConfig`](/docs/en/plugins/manifest-reference) dialog, or reports that the plugin declares none. Requires Claude Code v2.1.147 or later |
729| `/plugin validate <path>` | | Prints the same report as `claude plugin validate`, inline |
730| `/plugin tag [path] [--push] [--dry-run] [--force]` | | Creates the release tag as `claude plugin tag` does. Accepts `--push`, `--dry-run`, and `--force` or `-f`; with any other flag or an extra argument, Claude Code prints usage instead |
731| `/plugin marketplace` | `market` | Does nothing visible. Pass `add`, `list`, `update`, or `remove` |
732| `/plugin marketplace add [source]` | `market add` | With a source, adds it and reports the result. Without one, opens the **Add marketplace** input |
733| `/plugin marketplace list` | `market list` | Prints your marketplace names inline |
734| `/plugin marketplace update [name]` | `market update` | Opens the **Marketplaces** tab. With a name, refreshes that marketplace there |
735| `/plugin marketplace remove [name]` | `market remove`, `market rm`, `marketplace rm` | Opens the **Marketplaces** tab. With a name, removes that marketplace there |
715| Command | Aliases | What it does |
716| :- | :- | :- |
717| `/plugin` | | Opens the panel on the **Discover** tab. Any unrecognized first word after `/plugin` does the same |
718| `/plugin help` | `/plugin --help`, `/plugin -h` | Shows the usage list of `/plugin` subcommands |
719| `/plugin list [--enabled\|--disabled]` | `ls` | Prints your marketplace-installed plugins inline, with version, scope, and status. A filter flag shows only that state. A plugin whose enable state hasn't been applied yet is marked `— run /reload-plugins to apply`. Requires Claude Code v2.1.163 or later |
720| `/plugin install` | `i` | Opens the **Discover** tab |
721| `/plugin install <plugin>` | `i` | Opens the plugin's details in the **Discover** tab. With `name@marketplace`, opens them in that marketplace's list |
722| `/plugin install <plugin> --marketplace <source>` | `i` | Adds the marketplace at `<source>` when you haven't added it yet, asking you to confirm first, then opens the plugin's details. See [Add a marketplace and install in one command](/docs/en/plugins/install#add-a-marketplace-and-install-in-one-command). Requires Claude Code v2.1.275 or later |
723| `/plugin manage` | | Opens the **Installed** tab |
724| `/plugin stats` | | Opens the **Stats** tab, in sessions where [`/skill-doctor`](/docs/en/skills#find-unused-skills) is available. Anywhere else it opens the panel on the **Discover** tab |
725| `/plugin enable <plugin>` | | Opens the **Installed** tab at the plugin and enables it |
726| `/plugin disable <plugin>` | | Opens the **Installed** tab at the plugin and disables it |
727| `/plugin uninstall <plugin>` | | Opens the **Installed** tab at the plugin and uninstalls it |
728| `/plugin configure <plugin>` | `config` | Opens the plugin's [`userConfig`](/docs/en/plugins/manifest-reference) dialog, or reports that the plugin declares none. Requires Claude Code v2.1.147 or later |
729| `/plugin validate <path>` | | Prints the same report as `claude plugin validate`, inline |
730| `/plugin tag [path] [--push] [--dry-run] [--force]` | | Creates the release tag as `claude plugin tag` does. Accepts `--push`, `--dry-run`, and `--force` or `-f`; with any other flag or an extra argument, Claude Code prints usage instead |
731| `/plugin marketplace` | `market` | Does nothing visible. Pass `add`, `list`, `update`, or `remove` |
732| `/plugin marketplace add [source]` | `market add` | With a source, adds it and reports the result. Without one, opens the **Add marketplace** input |
733| `/plugin marketplace list` | `market list` | Prints your marketplace names inline |
734| `/plugin marketplace update [name]` | `market update` | Opens the **Marketplaces** tab. With a name, refreshes that marketplace there |
735| `/plugin marketplace remove [name]` | `market remove`, `market rm`, `marketplace rm` | Opens the **Marketplaces** tab. With a name, removes that marketplace there |
736736
737737If you name a plugin that isn't installed in the current project in `/plugin enable`, `disable`, `uninstall`, or `configure`, Claude Code prints `Plugin "<plugin>" is not installed in this project` instead of acting.
738738
from line 748
748748/reload-plugins [--force]
749749```
750750
751| Flag | Description |
752| :-------- | :------------------------------------------------------------------------------------------------ |
751| Flag | Description |
752| :- | :- |
753753| `--force` | Apply the reload even when it would invalidate the prompt cache. `force` without dashes works too |
754754
755755### Reload summary
from line 778
778778
779779Plugin authors use them to test a plugin before publishing. For the load-edit-reload workflow, see [Develop without a marketplace](/docs/en/plugins/create#develop-without-a-marketplace).
780780
781| Flag | Description | Example |
782| :-------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------- |
783| `--plugin-dir <path>` | Load a plugin from a directory or a `.zip` archive of one. A folder of plugins loads each child folder that holds a `.claude-plugin/plugin.json`. Each flag takes one path | `claude --plugin-dir ./my-plugin --plugin-dir ./other.zip` |
784| `--plugin-url <url>` | Fetch a plugin `.zip` archive from a URL. Repeat the flag, or pass several URLs space-separated in one quoted value | `claude --plugin-url "https://example.com/a.zip https://example.com/b.zip"` |
781| Flag | Description | Example |
782| :- | :- | :- |
783| `--plugin-dir <path>` | Load a plugin from a directory or a `.zip` archive of one. A folder of plugins loads each child folder that holds a `.claude-plugin/plugin.json`. Each flag takes one path | `claude --plugin-dir ./my-plugin --plugin-dir ./other.zip` |
784| `--plugin-url <url>` | Fetch a plugin `.zip` archive from a URL. Repeat the flag, or pass several URLs space-separated in one quoted value | `claude --plugin-url "https://example.com/a.zip https://example.com/b.zip"` |
785785
786786A plugin that either flag loads is a session-only plugin. `claude plugin list` shows it as `<name>@inline` with scope `session`, but only when the same flag precedes the subcommand. For example, run `claude --plugin-dir ./my-plugin plugin list`.
787787
No line in this hunk matches that.