fix(just): install plugins at user scope; fail loudly on unresolved slash commands - #354
Merged
Merged
Conversation
…lash commands `just -g plugins-setup-repo` printed "Unknown command: /configure-claude-plugins" in every repo and still reported success. Root cause: all 40 marketplace plugins were installed at **project** scope, bound to ~/repos/ForumViriumHelsinki/thelma by a `plugins-install` run from that cwd on 2026-03-08. A project-scoped plugin's skills load only when cwd is that project, so the skill existed nowhere else — while `enabledPlugins` said true and `claude plugin list` said "Status: ✔ enabled", because both report enablement, not reachability. Only `claude plugin list --json`'s `scope` field tells the truth. Confirmed empirically: the only plugins whose skills loaded in any session were session-plugin and comfyui-plugin — exactly the two installed at user scope. #352 fixed the slash-command *names*, which was a real but different bug; it verified names against the marketplace inventory rather than by resolving them, so this layer stayed hidden. Changes: - `plugins-install` passes `--scope user` (the default today, but explicit so a future run from inside a repo can't re-scope the whole set). - New `plugins-install-audit`: flags any marketplace plugin lacking a user-scope install record. Exits 1 so it can gate. - New private `_claude-slash`: single call site for every headless `claude -p "/<skill>"`. `claude -p` prints "Unknown command: /foo" and **exits 0**, so the old exit-code check reported ok while nothing ran — the guard greps the output and turns that into rc=3 with the fix instructions. Used by plugins-setup-repo, plugins-check-repo, and plugins-bulk. - `_claude-slash` also cds into the target repo. plugins-bulk ran every picked repo's claude call from the invocation cwd, so a multi-repo selection configured the launch directory N times instead of each repo once. Verified: - `plugins-install-audit`: 39 project-scoped-only before, clean after. - `just -g plugins-check-repo` in podio-mcp now runs the skill to completion and returns a real report (previously "Unknown command", exit 0). - `just -g --list` parses; recipe descriptions render correctly. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ne1Yce6SxwJLknhroAfPVB
Contributor
|
🤖 Claude analyzed the CI failures but determined no code changes are needed. Failed workflow: https://github.com/laurigates/dotfiles/actions/runs/31080743939 This may indicate:
Please review the failure logs manually. |
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.
Problem
just -g plugins-setup-repostill failed after #352:…and the recipe reported success anyway.
Root cause: install scope, not command name
All 40 marketplace plugins were installed at
projectscope, bound to~/repos/ForumViriumHelsinki/thelma— the cwd of aplugins-installrun on2026-03-08. A project-scoped plugin's skills load only when cwd is that
project, so
/configure-claude-pluginsresolved in no other repo.The failure was invisible because both status signals report enablement, not
reachability:
enabledPluginsin settings.jsontrueclaude plugin listStatus: ✔ enabledclaude plugin list --json→.scopeprojectConfirmed empirically: the only plugin skills that loaded in any session were
session-pluginandcomfyui-plugin— exactly the two records with"scope": "user"ininstalled_plugins.json. Installingconfigure-pluginwith
--scope usermade/configure-claude-pluginsresolve immediately.#352 fixed the slash-command names (a real, separate bug). It verified them
against the marketplace inventory rather than by resolving them, so this layer
stayed hidden.
Changes
plugins-installpasses--scope user. It is today's CLI default, butexplicit means a future run from inside a repo can't silently re-scope the
whole set again.
plugins-install-audit— flags any marketplace plugin with nouser-scope install record; exits 1 so it can gate.
_claude-slash— one call site for every headlessclaude -p "/<skill>".claude -pprintsUnknown command: /fooandexits 0, so the old exit-code check reported ok while nothing ran. The
guard greps the output and converts that to
rc=3with the fix instructions.Used by
plugins-setup-repo,plugins-check-repo, andplugins-bulk._claude-slashcds into the target repo. Separate pre-existing bug:plugins-bulkran every picked repo's claude call from the invocation cwd,so an N-repo selection configured the launch directory N times instead of
each repo once.
Verification
just -g plugins-install-audit: 39 project-scoped-only before, clean(exit 0) after
just -g plugins-install.just -g plugins-check-repoinpodio-mcp— previouslyUnknown command+exit 0 — now runs the skill to completion and returns a real report.
just -g --listparses; both new recipes render correct descriptions.pre-commit run check-justfilespasses on the changed file.🤖 Generated with Claude Code
https://claude.ai/code/session_01Ne1Yce6SxwJLknhroAfPVB