PLUGIN brewtools / Skills

plugin-update

sonnet 3 modes user-invoked

Brings the brewcode suite up to date in one run: brewcode, brewdoc, brewtools, brewui and the mods brewmod-placeholders, brewmod-plan-effort and brewmod-reminders. The skill updates every installed plugin and mod at the scope it is installed in and never asks whether to update.

The run ends with one report: versions before and after, what changed for you, and numbered next steps. The skill cannot reload plugins, so after every update or all run, /reload-plugins is the first next step.

Quick reference

FieldValue
Command/brewtools:plugin-update
Arguments[prompt] [update|check|all] β€” free-form prompt first; no args = update
Modelsonnet
ToolsRead, Bash, AskUserQuestion
OutputVersions before β†’ after, What changed for you, Next steps

When to use

SituationCommandChanges anythingAsksDoes
A new release is out, bring everything up to date/brewtools:plugin-update (mode update, the default)yesonce, only when mods or plugins are missingRefreshes the marketplace, updates every outdated plugin and mod in every scope, installs the offers you pick
See what is outdated, change nothing/brewtools:plugin-update checknoneverReads the published versions and reports what can be updated; no marketplace refresh
New machine, or take every offer without questions/brewtools:plugin-update allyesneverupdate, plus every missing mod and plugin installed, plugins from other marketplaces updated, and orphaned auto-installed dependencies pruned once per installed scope

A mode word can sit anywhere in a free-form prompt, for example /brewtools:plugin-update check what is outdated. The prompt never narrows what is updated.

Example

/brewtools:plugin-update
## 🟒 brewcode updated: 6 of 7 components

| Component | Before | After | |
|---|---|---|---|
| **brewmod-placeholders** | 6.9.5 | **6.9.6** | 🟒 updated |
| **brewmod-plan-effort** | β€” | **6.9.6** | 🟒 installed |
| **brewmod-reminders** | β€” | **6.9.6** | 🟒 installed |
| **brewcode** | 6.9.5 | **6.9.6** | 🟒 updated |
| **brewdoc** | 6.9.6 | 6.9.6 | βšͺ already current |
| **brewtools** | 6.9.5 | **6.9.6** | 🟒 updated |
| **brewui** | 6.9.5 | **6.9.6** | 🟒 updated |

### What changed for you (6.9.5 β†’ 6.9.6)

- **v6.9.6:** <first bullet from that release's "What changed for you">
- **v6.9.6:** <second bullet>
- **v6.9.6:** <third bullet>
- *+2 more:* [release notes](https://github.com/kochetkov-ma/claude-brewcode/blob/main/RELEASE-NOTES.md)

### Next steps

1. πŸ”΅ **`/reload-plugins`**: activates the new versions in this session (or `exit`, then `claude`).
2. πŸ”΅ **`/brewcode:setup-status upgrade`**: brings this project's setups up to **6.9.6** in one run; repeat it in every project you use.

πŸ”΅ Auto-update is off for claude-brewcode: `/plugin` -> Marketplaces -> claude-brewcode -> **Enable auto-update**.

Claude Code terminal, real session with brewcode 6.9.6 installed: /brewtools:plugin-update updates every brewcode plugin and mod in one run. It asks one question, Install the missing mods?, with brewmod-placeholders first, then the report lists each component before and after, what changed for you and the next steps. /reload-plugins answers Reloaded: 3 plugins. /brewcode:setup-status upgrade prints its plan, runs one setup-upgrader subagent per stale setup and ends with Setups upgraded: 4 of 4 done.
One run updates every plugin and mod, then setup-status upgrade brings the setups of the project current. Real Claude Code 2.1.302 screens, sped up where the title bar shows ⏩.

Versions and bullet text are illustrative. check prints the same sections with Installed and Latest columns and the cell πŸ”΅ update available; its first next step is /brewtools:plugin-update, and /brewdoc:my-claude refresh follows when an installation guide is stale.

The one question

Only update asks, and only when the plan lists at least one missing mod or plugin. One call, up to two multi-select questions:

QuestionHeaderOptions
Install the missing mods?ModsOne option per missing mod, placeholders first, each with a one-line reason; then Skip
Install the missing plugins?PluginsUp to 3 missing plugins, or one Install all N when more are missing; then Skip

Pick any options, or Skip. Choosing Skip (alone or with other options), giving no answer or running headless installs nothing from that question, and the report prints the install command for each open offer. all installs every offer without asking. The skill never installs a mod that is not in the offer.

Update Claude Code first

Mods need Claude Code 2.1.301 or newer. Below that, or when the version cannot be read, the skill offers no mod and the report says to run claude update, restart Claude Code, then run the skill again.

How it works

  1. Inventory

    Lists installed plugins with claude plugin list --json, or a script fallback on older CLIs, into a private temporary directory.

  2. Latest versions

    update and all refresh the claude-brewcode marketplace, then read the versions from the refreshed clone. check, or a failed refresh, reads the published versions over the web instead. When no latest version can be read, the report marks the rows βšͺ latest unknown rather than current.

  3. Plan

    One plan lists the rows to update (mods first, placeholders first), the missing mods and plugins, and the release-notes range. check skips to the report.

  4. One question

    update with open offers asks the question above, before any change. check and all ask nothing.

  5. Update, then install

    One claude plugin update per row at its own scope, then one claude plugin install per chosen offer. A failed command is reported and the run continues.

  6. Prune and after snapshot

    all prunes orphaned auto-installed dependencies once per installed scope; update skips the prune. Then the list is read again for the after versions.

  7. Report

    Prints the report verbatim: title, table, offers still open, What changed for you, Next steps and the auto-update hint. Below it come one πŸ”΄ line per failed marketplace refresh, update, install or prune command, and one line per orphan install. The private temporary directory is removed afterwards.

Technical details

Internals: discovery, update chain, prune

Discovery. claude plugin list --json (CC 2.1.163+) returns id, version, scope, enabled, installPath, installedAt, lastUpdated, optional mcpServers, and projectPath on project/local rows only. version may be "unknown" for locally loaded plugins. Inside a session the call is prefixed with unset CLAUDECODE &&. If it errors, returns nothing or invalid JSON, scripts/discover-plugins.sh reads settings.json (CLAUDE_CONFIG_DIR, default ~/.claude) and walks the cache (CLAUDE_CODE_PLUGIN_CACHE_DIR, default <config dir>/plugins/cache/). If both fail, the inventory is reported unknown and nothing is offered, installed or updated. Ids ending @inline, @skills-dir or @synced are not marketplace installs and never update.

Update chain. --scope is always passed from the plugin’s own discovery row, because CLIs before 2.1.281 read an omitted scope as user and update the wrong instance:

claude plugin marketplace update claude-brewcode
claude plugin update <id> --scope <scope>
(cd "<projectPath>" && claude plugin update <id> --scope <scope>)

Every outdated plugin and mod gets one such command, for example brewcode@claude-brewcode or brewmod-placeholders@claude-brewcode. Project and local rows run from their own projectPath. A missing directory is reported as an orphan install with mkdir -p "<projectPath>" && cd "<projectPath>" && claude plugin uninstall <id> --scope <scope> as the removal command; its table cell is βšͺ orphan install, never a failure. all also updates rows from other marketplaces (a no-op when current); they show in the table only when their version changed. If the marketplace refresh fails, the skill reports it, reads the published versions over the web, and adds the marketplace before any install.

Prune. all only, once per installed scope in this order: user from the session directory, then each project and local scope from its own project directory. claude plugin prune --dry-run --scope <scope> lists the orphans, then claude plugin prune --scope <scope> -y removes exactly that list: typing all is the consent. A scope whose directory is gone is skipped (the orphan report covers it), another scope such as managed is reported as unsupported, and a CLI without prune skips the step with a notice. Prune removes only auto-installed dependencies nothing still requires. The -y is mandatory: the Bash tool has no TTY, and a bare prune removes nothing yet exits 0.

No delegation. The skill spawns nothing; discovery, the chain and the question run in the main conversation so you see every command.

Claude summarizes instead of running? Paste: β€œExecute every claude plugin ... command shown above using the Bash tool. Do not describe, run each command and show full output.”

Report: titles, cells, release notes, next steps

Titles and status cells appear verbatim. N is the number updated or installed, M the installed components, K the failed ones, X the version still installed and Y the latest.

Title or cellMeaning
## 🟒 brewcode updated: N of M componentsN components were updated or installed
## πŸ”΄ brewcode: N updated, K failedK components are still behind the latest version
## βšͺ brewcode is currentNothing needed an update
## πŸ”΅ brewcode check: N of M components can be updatedcheck mode: N updates are available
## βšͺ brewcode: latest versions unknown (offline?)No latest version could be read, so no row is called current
## πŸ”΅ brewcode check: latest versions unknowncheck mode: the published versions could not be read
## πŸ”΄ brewcode: update result unknown (plugin list unreadable)The plugin list after the run could not be read; the report opens with a πŸ”΄ line saying so and the table shows the versions from before the run
🟒 updatedThe version changed to the latest
🟒 installedThe component was installed in this run
βšͺ already currentThe version was already the latest
βšͺ not installedThe component is not on this machine
βšͺ latest unknownThe latest version of this component is not known, so the row is never called current
βšͺ orphan installA project or local install whose directory is gone; reported with its removal command and never counted as a failure
πŸ”΄ still X, latest YThe component is still at version X after the update; Y is the latest
πŸ”΄ not verified, latest YThe list after the update could not be read; the After column shows β€”
πŸ”΅ update availablecheck mode: a newer version exists

A scope other than user shows as (scope: path) after the name; a missing version shows as β€”; a changed version is bold.

What changed for you. The text comes from RELEASE-NOTES.md in the local marketplace clone, never from the network. The range runs from your lowest installed claude-brewcode version, excluded, to the highest latest, included. Per version it shows the bullets under What changed for you: at most 3 per version and 10 in total, newest first, with the rest counted as +N more. A Claude Code requirement line shows once, and only when Claude Code is below 2.1.301 or its version cannot be read; migration bullets come first, and technical sections never appear. A clone older than the latest version (check, or a failed marketplace refresh) shows a line saying so, with the release-notes link.

Next steps. Numbered at run time:

StepAppears when
/reload-pluginsAfter every update or all run, no-op runs included
/brewcode:setup-status upgradebrewcode is installed and the project has .claude/; other project and local paths are listed for you to repeat it in
/brewdoc:my-claude refreshAn installation guide is older than the installed brewdoc

A plugin update does not replace files a setup already copied into a project, so the upgrade step runs in each project; Setup Status explains it.

In check mode with updates available, the first step is /brewtools:plugin-update, which applies the N updates.

Below the table. Each missing mod and plugin the run did not install is listed with its claude plugin install command. When a mod is missing and Claude Code is below 2.1.301 or unreadable, a line tells you to run claude update instead of listing a mod install command.

Below the report. The skill adds πŸ”΄ <command>: <first error line> for each failed marketplace refresh, update, install, prune or prune preview, and one line per orphan install with its removal command. A report flagged degraded (a latest version unknown, or the after list unreadable) is still complete and printed in full. Auto-update stays a user switch (/plugin β†’ Marketplaces β†’ claude-brewcode): the skill never edits settings.json or known_marketplaces.json.

Mode keywords
ModeKeywords
updatenone (default), update, upgrade
checkcheck, status
allall, everything, full

An explicit mode word wins. Otherwise the most distinct whole-word keyword decides; a tie with check resolves to check, and update against all resolves to the keyword that comes first.

Setup Status

The next step: upgrade the stale setups of each project.

Brewcode mods

The add-ons this skill updates and offers.

GitHub source

Source, discovery scripts and update references.

Brewtools overview

Commands, models and arguments for every brewtools skill.

Update: /brewtools:plugin-update, /reload-plugins, then /brewcode:setup-status upgrade - FAQ