How to uninstall a Claude Code plugin
Run claude plugin uninstall <plugin>@<marketplace> from your shell, choosing the intended scope. Current Claude Code removes persistent plugin data when the last scope is uninstalled unless you pass --keep-data. Cached code can remain temporarily for existing sessions. The old 2.1.233 observation below is historical, not the current cleanup contract.
By Miguel Silva · Updated
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 loadingclaude plugin uninstall example@marketplace --scope user --keep-data
claude plugin uninstall example@marketplace --scope project --keep-data
claude plugin list # every installed plugin, with its scope
claude plugin details <name> # what it contributes, and its token costWhere plugin state lives, and what removal changes
A plugin has an installation record, a flag in your settings, cached code and sometimes persistent data. Removal changes the installation and settings, while cache cleanup and data retention have different rules.
- ~/.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>/
- Versioned plugin code. Current Claude Code marks removed versions as orphaned and sweeps them roughly 14 days later. The sweep runs only while at least one plugin remains installed; symlinked development checkouts are not swept.
- ~/.claude/plugins/data/<id>/
- Persistent plugin data. Current documentation says the last-scope uninstall deletes it by default. Use --keep-data when you need to retain it. Earlier 2.1.233 testing found different behavior, so do not rely on old leftovers as a backup.
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
Before uninstalling, inspect what the plugin provides and whether your workflows depend on it. Context cost varies by component and tool-search configuration; an enabled plugin does not necessarily load every full instruction or tool schema upfront.
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.
- Cache files can remain during the documented grace period. Do not delete code needed by another active session. Persistent data is separate: use --keep-data or a private backup before uninstalling if you need it.
Questions
- How do I uninstall a plugin in Claude Code?
- Run claude plugin uninstall <plugin>@<marketplace> with the intended --scope. Use --keep-data to preserve persistent data. Cached code can remain until background cleanup, so a remaining cache folder alone does not mean the plugin is still installed.
- 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.
Sources checked for this guide
See your coding-agent configuration in one place
Loadout is a free Mac app for browsing skills, subagents, slash commands, plugins and MCP servers. It shows recorded skill usage where available, so you can decide what to keep. Browsing your configuration is local; Ask uses your assistant provider.