Skip to content
Guide

How to uninstall a Claude Code plugin

Run /plugin uninstall <plugin> in a session, or claude plugin uninstall <plugin> from your shell. Both take the plugin out of ~/.claude/plugins/installed_plugins.json and drop its flag from enabledPlugins in your settings, which is what stops it loading. What neither does, as of 2.1.233, is delete anything: the plugin’s folder under ~/.claude/plugins/cache and its data directory are both still on disk afterwards. The marketplace stays too, on purpose, and the session you are in keeps the plugin until it reloads. Getting the scope wrong is the usual reason an uninstalled plugin comes back.

The command, and the shell version of it

A plugin is identified as plugin@marketplace. The bare name usually resolves on its own, but the full form is the one to use in anything you write down: the same plugin name can exist in two catalogues, and the name in the marketplace entry is not always the name in the plugin’s own plugin.json.

/plugin uninstall commit-commands@claude-code-plugins

/plugin disable commit-commands@claude-code-plugins   # off, but still installed
/plugin list --enabled                                 # what is actually loading
In a session. These open the plugin panel to apply the change and leave it open — press Esc before typing anything else.
claude plugin uninstall <plugin>
  --scope user|project|local   # defaults to user
  --keep-data                  # preserve ~/.claude/plugins/data/<id>/
  --prune                      # also drop dependencies nothing else needs
  -y                           # skips the --prune confirmation; required
                               # when stdin or stdout is not a terminal

claude plugin list             # every installed plugin, with its scope
claude plugin details <name>   # what it contributes, and its token cost
From the shell, as of Claude Code 2.1.233. These do not open the panel, so they are the ones to script.

The four places a plugin lives, and which two an uninstall changes

A plugin is not one file. It is a row in a register, a flag in your settings, a folder of code, and sometimes a folder of its own data. Uninstalling edits the first two, which is enough to stop it loading and enough for it to disappear from every list. The other two stay where they are, so deleting a plugin and reclaiming the disk it was using are two separate jobs.

~/.claude/plugins/installed_plugins.json
The register. One key per plugin, spelled plugin@marketplace, holding an array of installs rather than a single record — which is how the same plugin exists at user scope and project scope at once. Each install carries its version, its scope and the exact installPath.
~/.claude/settings.json
Your answer to whether it loads, under enabledPlugins, keyed the same way. A project can carry its own copy in .claude/settings.json, and your override of that lands in settings.local.json.
~/.claude/plugins/cache/<marketplace>/<plugin>/
The files themselves, in a directory per version, sometimes with a commit SHA beside them. Older versions are left behind by an update and the installed one is left behind by an uninstall, so this folder outlives the plugin.
~/.claude/plugins/data/<id>/
Anything the plugin stored for itself. Uninstalling takes a --keep-data flag to preserve this, which implies it would otherwise be removed; on 2.1.233 it survived with or without the flag, so check rather than count on either.

The marketplace is deliberately not on that list. It is registered in ~/.claude/plugins/known_marketplaces.json and cloned into ~/.claude/plugins/marketplaces, it usually serves several plugins, and it is what /plugin install reads to put this one back. Removing it is a separate command — and a heavier one: /plugin marketplace remove uninstalls every plugin you installed from it.

Why an uninstalled plugin is still there

  • The session has not reloaded. A plugin loaded at launch stays loaded until Claude Code restarts or you run /reload-plugins, so its skills and commands keep answering after the uninstall reports success. If the reload would invalidate the prompt cache, the command says so and does nothing until you rerun it as /reload-plugins --force.
  • You uninstalled the wrong scope. --scope defaults to user, and a plugin the repository enables in .claude/settings.json is not yours alone to remove: the interactive uninstall asks whether you mean to disable it for yourself, which writes an override to settings.local.json, or remove it for everyone, which edits the shared file.
  • It is enabled by managed settings. A plugin your organisation installs shows as managed scope and cannot be uninstalled from your machine at all.
  • The repository still asks for it. Uninstalling for yourself does not edit a shared .claude/settings.json, so the plugin stays listed there. Since 2.1.195 that no longer reinstalls it behind your back — Claude Code reports it as not installed and prints the claude plugin install command instead — but the request survives every uninstall until somebody takes it out of that file.

Deciding which plugins to remove

The harder half of this is not the command, it is knowing which of the things in the list you would miss. Every enabled plugin adds most of what it ships to the context of every session, whether or not you use it. Claude Code’s own /plugin manager helps a little: the Installed tab collects marketplace plugins you installed yourself and have not used for at least two weeks across at least ten sessions under a "Not used recently" header, and the detail view carries a Last used line. Plugins your organisation manages are never listed there, and neither are ones that only contribute a theme, an output style, a monitor or a workflow, because those do their work without an invocation to count.

Loadout is the standing version of that question. Its plugin manager lists what you have installed, and a plugin’s page names the marketplace that installed it, counts what it ships by type, and shows the folder it occupies with a Reveal beside it — which is the part that is otherwise a find command. Remove plugin then takes the whole entry out of the register — every scope it was installed at, not the one you named — clears the flag from both settings.json and settings.local.json in your home directory, and sends the folder to the Trash, after copying each to a backup first.

  • Read what it ships before removing it, with claude plugin details <name>: that is the inventory that counts hooks and MCP servers, which do more in the background than a list of commands suggests. Loadout’s Ships line counts the skills, commands and subagents, and says so.
  • Disable before you uninstall if you are unsure. It stops loading and stays installed, and turning it back on is one command.
  • The skills, commands and subagents a plugin brought are inventoried and counted individually in Loadout’s main list, which is where the evidence for keeping it lives — a plugin has no single usage number of its own.
  • Reclaiming the disk is a separate job. Uninstalling leaves the folder in the cache, so if that is what you came for, remove it yourself — or use Remove plugin in Loadout, which sends it to the Trash after backing it up.

Questions

How do I uninstall a plugin in Claude Code?
Run /plugin uninstall <plugin>@<marketplace> in a session, or claude plugin uninstall <plugin>@<marketplace> from your shell. Add --scope project or --scope local if the plugin was not installed for your user. It stops the plugin loading, but it does not clear the disk: on 2.1.233 both the folder under ~/.claude/plugins/cache and the data directory were still there afterwards.
Does uninstalling a plugin remove its marketplace?
No, and that is deliberate: one marketplace usually serves several plugins, and it is what /plugin install reads to reinstall this one. Removing the marketplace is a separate command, /plugin marketplace remove, and it uninstalls every plugin that came from it.
Why is a plugin still working after I uninstalled it?
The session you are in loaded it at launch and keeps it until it reloads. Run /reload-plugins — rerunning it with --force if it warns that the reload would invalidate the prompt cache — or restart Claude Code. If it survives that too, it is enabled somewhere other than where you uninstalled it: usually a repository’s .claude/settings.json, or managed settings your organisation controls.
Where are Claude Code plugins installed?
Under ~/.claude/plugins/cache/<marketplace>/<plugin>/<version>/, with the register of what is installed in ~/.claude/plugins/installed_plugins.json, the on/off flags in enabledPlugins in your settings.json, and the marketplace clones they came from in ~/.claude/plugins/marketplaces.

Loadout shows all of this in one list, with usage counts

A free Mac app that reads the same folders this guide describes: every skill, subagent, slash command, plugin and MCP server, and how often each one actually fires. Nothing leaves your machine.