claude-code - 💡(How to fix) Fix /plugin TUI cannot reliably uninstall plugins; only CLI claude plugin uninstall works end-to-end [1 comments, 2 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
anthropics/claude-code#52456Fetched 2026-04-24 06:06:45
View on GitHub
Comments
1
Participants
2
Timeline
6
Reactions
0
Author
Timeline (top)
labeled ×5commented ×1

The /plugin TUI is the most visible way users interact with plugins, but its uninstall flow is inconsistent with the working claude plugin uninstall CLI. As a user I have 32 plugins installed at user scope, and no combination of actions inside /plugin actually removes one — the commands and skills keep reappearing after restart. Only dropping to the shell and running claude plugin uninstall <name>@<marketplace> actually removes the plugin.

The TUI is also confusing because "Uninstall" and "Disable" appear to be collapsed into a single "remove at user scope" action, which is not how the state actually works.

Root Cause

Plugins are now the main surface for adding skills and commands, and users install a lot of them. When uninstall doesn't work reliably, the skill list becomes permanently cluttered and users can't trust the UI to manage their own setup. The CLI proves the underlying system works — this is purely a TUI/UX gap.

Fix Action

Workaround

Run this from the shell instead — it works correctly every time:

```bash claude plugin uninstall <name>@<marketplace> ```

Example: `claude plugin uninstall searchfit-seo@claude-plugins-official`

This makes the TUI/CLI asymmetry the core bug: the CLI already does the right thing, the TUI should call the same code path.

RAW_BUFFERClick to expand / collapse

Summary

The /plugin TUI is the most visible way users interact with plugins, but its uninstall flow is inconsistent with the working claude plugin uninstall CLI. As a user I have 32 plugins installed at user scope, and no combination of actions inside /plugin actually removes one — the commands and skills keep reappearing after restart. Only dropping to the shell and running claude plugin uninstall <name>@<marketplace> actually removes the plugin.

The TUI is also confusing because "Uninstall" and "Disable" appear to be collapsed into a single "remove at user scope" action, which is not how the state actually works.

Environment

  • Claude Code CLI (latest as of 2026-04-23)
  • macOS (Darwin 25.2.0)
  • Single-user machine, all plugins installed at scope: "user"
  • 32 plugins from 5 marketplaces registered in ~/.claude/plugins/installed_plugins.json

Steps to reproduce

  1. Install any plugin, e.g. claude plugin install searchfit-seo@claude-plugins-official
  2. Open /plugin in an interactive session
  3. Navigate to the plugin and choose the remove option
  4. Exit and restart Claude Code
  5. Type / — the plugin's commands are still present; the skill list at session start still includes its skills

Expected

  • A clear, distinct "Uninstall" action in /plugin that:
    • Removes the entry from ~/.claude/plugins/installed_plugins.json
    • Removes the enabledPlugins flag from both ~/.claude/settings.json and ~/.claude/settings.local.json
    • Deletes the cached directory at ~/.claude/plugins/cache/<marketplace>/<plugin>/
    • Refreshes the session's skill/command registry (or tells the user a restart is required)
  • A separate, clearly labeled "Disable" action that only toggles the enabled flag.

Actual

  • The TUI shows what appears to be a single "remove at user scope" action.
  • After using it, at least one of the four state locations (registry, cache, user-scope flag, local-scope flag) remains dirty, so the plugin re-appears on the next session.
  • The enabledPlugins entry in settings.local.json is especially easy to miss — a plugin disabled at user scope but enabled in settings.local.json silently re-enables itself.
  • There is no in-TUI indication that a restart is required, so the uninstall looks like it silently failed even when it partially succeeded.

Workaround

Run this from the shell instead — it works correctly every time:

```bash claude plugin uninstall <name>@<marketplace> ```

Example: `claude plugin uninstall searchfit-seo@claude-plugins-official`

This makes the TUI/CLI asymmetry the core bug: the CLI already does the right thing, the TUI should call the same code path.

Proposed fix

  1. In `/plugin`, split "Uninstall" and "Disable" into two separate actions with distinct labels.
  2. Route "Uninstall" through the same code path as `claude plugin uninstall`, including the cache deletion and clearing of `enabledPlugins` flags in both `settings.json` and `settings.local.json`.
  3. After uninstall, either hot-reload the session's skill/command registry, or surface a banner: `Uninstalled <name>. Restart Claude Code to clear loaded skills and commands.`
  4. Consider surfacing `settings.local.json` overrides in the TUI — they're currently invisible and cause the "why did this plugin come back?" class of bug.

Why this matters

Plugins are now the main surface for adding skills and commands, and users install a lot of them. When uninstall doesn't work reliably, the skill list becomes permanently cluttered and users can't trust the UI to manage their own setup. The CLI proves the underlying system works — this is purely a TUI/UX gap.

extent analysis

TL;DR

The TUI uninstall flow for plugins should be updated to match the working CLI flow, by splitting "Uninstall" and "Disable" into separate actions and routing "Uninstall" through the same code path as claude plugin uninstall.

Guidance

  • Update the /plugin TUI to have distinct "Uninstall" and "Disable" actions, rather than a single "remove at user scope" action.
  • Ensure the "Uninstall" action in the TUI calls the same code path as claude plugin uninstall, including cache deletion and clearing of enabledPlugins flags in both settings.json and settings.local.json.
  • After uninstall, either hot-reload the session's skill/command registry or display a banner indicating that a restart is required to clear loaded skills and commands.
  • Consider adding visibility to settings.local.json overrides in the TUI to prevent plugins from re-enabling themselves silently.

Example

claude plugin uninstall searchfit-seo@claude-plugins-official

This command demonstrates the working CLI flow that the TUI should be updated to match.

Notes

The proposed fix involves updating the TUI to match the working CLI flow, which should resolve the inconsistency and provide a reliable uninstall experience for users.

Recommendation

Apply the workaround by running claude plugin uninstall <name>@<marketplace> from the shell until the TUI is updated to match the CLI flow, as this ensures a reliable uninstall experience.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING