[FEATURE] claude plugin update --all for bulk plugin updates from CLI
Preflight Checklist
- [x] I have searched existing requests and this feature hasn't been requested yet
- [x] This is a single feature request (not multiple features)
Problem Statement
There is no canonical CLI command to update all installed plugins at once. claude plugin update <name> requires a positional argument; no --all flag exists. Users with many installed plugins (I have 17 across 5 marketplaces) must invoke the command once per plugin, or rely on the session-start plugin sync mechanism — which is silent on failure and gated by per-plugin version comparison (so a "no-op" sync for a stale plugin is indistinguishable from "everything is up to date").
This pattern of demand has surfaced repeatedly:
- #11676 — direct request for
claude plugin update-all. Auto-closed after 60 days of inactivity (not because it shipped). The autoclose bot's lock message instructs filing fresh, hence this issue. - #11713 — open community PR implementing a
/update-pluginsslash command, but it ships inside a separatedeveloper-utilitiesplugin. Installing yet another plugin to manage plugins is awkward, and slash commands aren't reachable from non-interactive shells (CI, scripts, hooks). - #10265 — about session-start auto-update (largely shipped as
autoUpdate: true). @ilepn's comment proposes/plugin update --all(submitted as separate feedback ID463f7ab1-611c-4ebe-8657-bcec5962dc7c) but never escalated to a top-level issue.
Proposed Solution
Add --all to claude plugin update:
claude plugin update --all # update every installed plugin
claude plugin update --all --scope user # restrict to a particular installation scope (existing --scope flag composed with --all)
Behavior:
- Iterate
installed_plugins.json - Run the existing per-plugin update path for each entry in scope
- Report per-plugin success/failure with progress indicators
- Exit non-zero if any plugin failed
- Print a summary line ("Updated 4 of 17 plugins; 13 already current") so users can distinguish "no-op" from "nothing happened"
The slash-command equivalent (/plugin update --all) would be a natural follow-on, matching the CLI/slash parity established by other plugin commands.
Alternative Solutions
- Shell wrappers (
for p in $(claude plugin list --json | jq -r '.plugins | keys[]'); do claude plugin update "$p"; done) — workable, undiscoverable, fragile to scope nuances, and doesn't solve the silent-no-op problem - The community PR #11713's
/update-plugins— ships as a plugin, slash-only, not reachable from CI/hooks/non-interactive shells
Priority
Medium - Would be very helpful
Feature Category
CLI commands and flags
Use Case Example
I maintain 17 plugins across 5 marketplaces (mix of Anthropic's official marketplace, my company's team-internal marketplace, and a few personal ones). When I notice colleagues using a skill I don't have, the canonical fix today is to manually run claude plugin update <name> for the relevant plugin — but I rarely know which plugin gained the skill. A claude plugin update --all command lets me refresh everything in one invocation, get a clear summary of what changed, and move on. It also makes the operation scriptable into hooks, CI, or shell startup.
---
Related: #11676 (closed for inactivity, not implemented), #11713 (open community PR, plugin-based alternative), #10265 (parent thread, primary ask shipped, --all discussed in comments).
🤖 Generated with Claude Code
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗