[BUG] Account-synced plugins cannot be removed: they reappear after removal from the desktop app AND claude.ai, and are invisible to the CLI
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
Account-synced plugins cannot be removed: they reappear after removal from the desktop app AND claude.ai, and are invisible to the CLI
Summary
Five Anthropic "knowledge-work" plugins (Operations, Engineering, Product Management, Productivity, Marketing) plus a sixth hidden one (Plugin Management / cowork-plugin-management) cannot be removed by any available control. They reappear after every removal attempt and keep loading ~50 skills into every session.
All three removal paths fail:
Desktop app → Settings → Plugins → ⋮ → Remove — the row disappears, then returns.
claude.ai account plugin toggle — the documented fix ("To remove a synced plugin, turn the plugin off for your claude.ai account; the next synced session starts without it", support.claude.com/en/articles/14328846) — behaves identically. Removal does not stick.
claude plugin uninstall <name> — impossible: the CLI cannot see them at all.
Environment
Claude Code 2.1.274, Claude desktop app (Code tab)
Windows 10 Home 19045
Plan: Max. Account belongs to an organization (account is the org owner).
Plugins installed 2026-09-16T00:04:15Z; all six within ~2 seconds of each other.
Diagnostics
The CLI has no knowledge of these plugins:
$ claude plugin list
No plugins installed. Use claude plugin install to install a plugin.
So claude plugin uninstall <name> cannot be used as a workaround.
All CLI-side plugin state is already empty:
~/.claude/settings.json → "enabledPlugins": {}
~/.claude/plugins/installed_plugins.json → {"version":2,"plugins":{}}
~/.claude/settings.local.json → does not exist
~/.claude/plugins/cache/ → contains only an unrelated plugin (cloudflare)
They live in a separate desktop-app subsystem:
%APPDATA%\Roaming\Claude\local-agent-mode-sessions\<accountUuid>\<orgUuid>\rpm\manifest.json
Each entry reads:
{
"name": "operations",
"displayName": "Operations",
"marketplaceName": "knowledge-work-plugins",
"installedBy": "user",
"installationPreference": "available"
}
Note "installedBy": "user" — these are NOT org-admin-forced, so the documented "organization owner marked them Required" explanation does not apply here.
The strongest diagnostic signal
A sixth plugin in the same panel, PDF Viewer, was removed successfully and has stayed removed. The five knowledge-work plugins, installed in the same batch from the knowledge-work-plugins marketplace, do not. Whatever distinguishes PDF Viewer from the knowledge-work bundle is likely the bug.
Additionally, cowork-plugin-management appears in manifest.json and loads its skills into sessions, but is not listed in the Settings → Plugins UI at all — so there is no control of any kind exposed for it.
Suspected origin
The account has a setup-claude skill described as "Guided setup — install role-matched plugins, connect your tools, try a skill". The batch install timestamp is consistent with that flow having run. If a guided-setup flow installs plugins in a state the removal UI cannot reverse, that would explain the symptom.
Impact
~50 skills load into every session and cannot be removed. On a plan with a weekly usage cap this is unwanted, unremovable context on every request, and several of the plugins are actively wrong for the user's domain (a US GAAP/SOX finance plugin on a project doing Dominican Republic DGII tax filings).
What I could not find
No existing issue, forum thread or Reddit post reporting this specific symptom. Searched the issue tracker, community forum and Reddit for "plugins reappear after removing", "plugin keeps reinstalling", "remove role-matched plugins". Issue #28554 is a related but distinct bug (marketplace-installed plugin re-installing in the CLI).
What Should Happen?
Removing a plugin removes it, and its skills stop loading into sessions.
Error Messages/Logs
Steps to Reproduce
Steps to reproduce
Open Settings → Plugins → Your plugins. Observe the group "From Anthropic & Partners".
Click ⋮ on any of the five rows → Remove.
The row disappears.
Reopen the panel (or restart the app). The row is back.
Repeat on claude.ai in a browser. Same result.
Claude Model
None
Is this a regression?
I don't know
Last Working Version
_No response_
Claude Code Version
2.1.274
Platform
Anthropic API
Operating System
Windows
Terminal/Shell
Windows Terminal
Additional Information
_No response_
Showing cached comments. Read the full discussion on GitHub ↗
6 Comments
Same bug on macOS, with some extra evidence that may help narrow it down. Probably also related to #92850 and #83891.
Environment: macOS 27.0, Claude desktop app 2.110.1 (Code tab, bundled Claude Code 2.1.271; CLI 2.1.273). Account belongs to an organization with no org-wide plugin settings that we know of.
Same install timestamp as this report. In
local-agent-mode-sessions/<account>/<org>/rpm/manifest.json, 12 of the 13knowledge-work-pluginsentries carryupdatedAtbetween2026-09-16T00:04:15Zand00:04:21Z(salesalone is2026-09-16T14:40:04Z). That matches the2026-09-16T00:04:15Zinstall time above on a different OS, which suggests one server-side install or re-sync event rather than anything local.What happens when toggling off in Customize. I switched off Sales, Marketing, Legal, Finance, Operations and Brand Voice, closed Customize, waited, and started a new Code-tab session (2026-09-17 17:14 UTC). That session's skill listing contained:
Marketing and Finance kept switching themselves back on in Customize across several attempts. Legal later did the same.
Desktop logs while Customize was open (
~/Library/Logs/Claude/):claude.ai-web.log: 33 ×[REACT_QUERY_CLIENT] QueryClient error: {"name":"Error","message":"Plugin not found."}between 17:05 and 17:16 UTC, roughly every 10 seconds. There were none on earlier days, so they appear only while the plugin settings are being changed. The log does not say which plugin.main.log: repeated[PluginsFetcher] fetchPluginEnabledState: 13 overrides. The[CCD] … N plugin(s) go to Claude Codecount for new sessions dropped from 13 to 10 right after the toggles, so some changes do reach the session and some are reverted.The local manifest is not a workaround. Desktop rewrites
rpm/manifest.jsonwith every pack atinstallationPreference: "available"at app launch and roughly hourly while running. I kept the six packs at"unavailable"in that file continuously (re-applied within seconds of every rewrite), and a new session still loaded all 75 of their skills. So the file is not what decides which plugins load. As in #92850,claude plugin listdoes not show these plugins, so the CLI offers no way out either.Expected: a pack switched off in Customize stays off and does not load into new sessions.
Actual: some packs stay off, and others (here Sales, Marketing, Finance, later Legal) revert and keep loading, while the web client logs
Plugin not found.on each attempt.Another Windows case, but a different shape from the original report, and with a workaround that works here. Both points may help narrow down what distinguishes the affected installs.
The CLI does see them here. The original report has
claude plugin listprinting "No plugins installed", with the plugins living in the desktop app'slocal-agent-mode-sessions/.../rpm/manifest.json. On this machine they are ordinary synced plugins under~/.claude/plugins/synced/<uuid>_<uuid>/, and the CLI lists them:Same marketplace as in the report.
synced/<uuid>_<uuid>/manifest.json:The
updatedAtvalues here are2026-09-16T00:04:15Zand00:04:19Z, inside the same window both earlier reports give, on a third machine. That supports the "one server-side event" reading.Removal is partial here too. Four plugins arrived:
pdf-viewer,cowork-plugin-management,design,legal. I turned all four off for the claude.ai account.designandlegalare now in~/.claude/plugins/.trash/, moved there the next morning, and have stayed gone.pdf-viewerandcowork-plugin-managementkept syncing back, and the manifest listing them was rewritten again this morning. That is the same split the macOS comment reports: some packs stay off, others revert.For those two the switch also flips back visibly. I turned them off in the claude.ai web settings and later found them switched on again without having touched them. The macOS comment reports the same thing in the desktop app's Customize panel, so it is not specific to one surface.
Workaround that holds, for this shape of the bug. Because the CLI can see them, the per-plugin disable applies:
It writes
"pdf-viewer@synced": falseintoenabledPluginsin~/.claude/settings.json, which is user scope and therefore survives the next sync:After
/reload-plugins, the skills and the plugin's MCP server are gone from the session.syncClaudeAiPlugins: falseis the broader version of the same idea and stops the download itself.This does not help anyone in the original report's situation, since it depends on the CLI seeing the plugin, and there
claude plugin listis empty. But it does mean the two situations are distinguishable from the CLI, which may be worth checking when reproducing: whetherclaude plugin listshows the plugin seems to track whether any removal path works at all.One inconsistency worth a look on its own.
claude plugin list --jsonreports"scope": "synced", but that value is not accepted by the scope flag:So the scope a plugin reports is not a scope any uninstall can target. This matches the reference docs, which say install, update and uninstall do not apply to synced plugins. It still sends anyone who tries toward a flag that cannot express the answer.
Environment
required by your orgSame bug on a third setup: Linux CLI (Claude Code 2.1.287, Debian 13) plus claude.ai web and Claude Desktop. Personal paid account, owner of its own org, no org plugin policy. Full details in #98894.
Network evidence: the disable is accepted, then immediately ignored on read
I captured what happens in the browser when I remove engineering on claude.ai:
{ "id": "plugin_01FTLa86dhbVJ3HB1LdHdhN7", "name": "engineering",
"enabled": false, "installation_preference": "available", ... }
"viewer": { "added": true,
"installed": { "enabled": true, "installation_preference": "available",
"can_toggle": true, "can_remove": true } }
No error is returned, and no other client is involved. The write succeeds, but the read ignores it.
All five affected plugins (engineering, productivity, desktop-commander, ai-firstify, cowork-plugin-management) show "provenance": { "source": "default" } in that listing, even though installation_preference is "available". This looks like the listing is built from the default set, and the user's disable override isn't applied to source: default entries.
Follow-up: the disable is stored, but the listing and the sync ignore it
Reading the single plugin right after disabling it:
GET /api/organizations/<org>/plugins/plugin_014WxCYbLf7f3uw2isHFR9US (productivity)
{ "id": "plugin_014WxCYbLf7f3uw2isHFR9US", "name": "productivity",
"enabled": false, "installation_preference": "available", ... }
At the same time:
So the per-plugin record has enabled: false, but the listing endpoint and the plugin sync resolve the state differently, apparently letting source: "default" override the user's disable. That is why the UI shows it re-enabled and every client re-downloads it.
Follow-up: uninstall returns 404, admin route is 403. No self-service path left on personal accounts
The same plugin (productivity, plugin_014WxCYbLf7f3uw2isHFR9US) is reported differently depending on the endpoint:
So the uninstall can't find an install record, the per-plugin record says disabled, and the account listing still says enabled. My guess is that the plugin comes from the default set, not from an install record, and that the account-level disable is never applied to it.
The admin route (PUT …/marketplaces/<mp>/plugins/productivity/installation-preference with not_available, and admin-list) returns 403 on a personal plan. Org settings are Team/Enterprise only. That leaves personal-plan users with no way at all to remove these plugins. Only Anthropic can fix this server-side, and the request_id above should point to the right code path.