fix(plugin): advertise the namespaced command names engines actually accept - #331
Merged
Conversation
…accept Every plugin command was documented bare — `/crypto`, `/stocks`, `/signals` — and none of those exist. Claude Code namespaces plugin commands as `/<plugin>:<command>` *always*, not only when two plugins collide, so the first thing anyone did after installing was: $ /crypto BTC Unknown command: /crypto Verified against a fresh engine (`/crypto` and `/spark` both unknown, `/crypto:crypto BTC` returns the full report) and against the documented behaviour: "Plugin skills are always namespaced (like `/my-first-plugin:hello`) to prevent conflicts" — https://code.claude.com/docs/en/plugins Fixed in the catalog, both plugin READMEs, the main README, and the cross-references inside the command files themselves — those tell the model which command to offer next, so a bare name there sends the *user* to the same dead end one step later. The drift test compared `commands` against bare filenames, which is why it stayed green through two releases of advertising a command that did not exist: the name matched a file on disk and nothing checked it against how the file is invoked. It now derives the namespaced form via pluginCommandName(). Also fixes the post-install invitation, which appended a hardcoded "NVDA" to whatever came first in `commands` — telling anyone who installed the crypto plugin to try a stock. Each plugin now carries its own runnable `example`, and a test asserts it invokes a command that plugin actually ships. Untouched: the pit's own `/stocks …` and `/crypto …`, which really are bare — they are moshcode's commands, not a plugin's. The READMEs now say so, since having both spellings in one repo is otherwise the confusing part. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
ThreatCrush Security Scan91 finding(s) HIGH/CRITICAL: 2 | MEDIUM: 41 | LOW: 48
…and 41 more. Full results in the Security tab. Snippets are redacted; ThreatCrush never prints matched credential material. |
Merged
ralyodio
added a commit
that referenced
this pull request
Aug 8, 2026
Bump to v0.29.2, releasing the namespaced plugin command names (#331). Patch, documentation and strings only. Every plugin command was advertised bare — /crypto, /stocks, /signals — and none of those exist: Claude Code namespaces plugin commands as /<plugin>:<command> always, so the first thing anyone tried after installing answered "Unknown command". Worth its own release rather than waiting, for the same reason v0.29.1 was: the wrong names are in the plugin READMEs that ship with the plugins, and the plugins are what people are being told to install right now. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Every plugin command was documented bare —
/crypto,/stocks,/signals— and none of those exist. Claude Code namespaces plugin commands as/<plugin>:<command>always, not only when two plugins collide. So the first thing anyone did after installing was:Verified two ways
Against a fresh engine —
/cryptoand/sparkboth unknown,/crypto:crypto BTCreturns the full report — and against the documented behaviour:I tested
/sparkspecifically to rule out "/cryptojust collides with the plugin name". It doesn't; bare names simply aren't commands.What changed
Catalog, both plugin READMEs, the main README, and the cross-references inside the command files themselves — those tell the model which command to offer next, so a bare name there sends the user to the same dead end one step later.
Why the drift test didn't catch it
It compared
commandsagainst bare filenames — so/crypto"matched"crypto.mdand stayed green through two releases of advertising a command that did not exist. Nothing checked the name against how the file is invoked. It now derives the namespaced form viapluginCommandName().Also fixed
The post-install invitation appended a hardcoded
"NVDA"to whatever came first incommands— telling anyone who installed the crypto plugin to try a stock. Each plugin now carries its own runnableexample, with a test asserting it invokes a command that plugin actually ships.Untouched on purpose
The pit's own
/stocks …and/crypto …really are bare — they're moshcode's commands, not a plugin's. The READMEs now say so explicitly, since having both spellings in one repo is otherwise the confusing part.Verification
moshcode plugin listnow prints/stocks:stocks /stocks:signals …and/crypto:crypto /crypto:quote ….🤖 Generated with Claude Code