You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
## What
Adds an orchestration layer over the existing per-repo plugin-config
judgment skills so Claude plugins can be **installed / checked /
re-evaluated across many repos**, scoped by domain (`fvh` | `laurigates`
| `all`), with an `fzf --multi` checkbox picker so each run's repo set
is chosen explicitly (no surprises).
The plumbing already existed (`plugins-audit` whole-tree,
`plugins-sync-repo` uniform-canonical,
`plugins-setup-repo`/`-check-repo` cwd-bound). The gap was the missing
enumeration → picker → batch-loop layer over those skills, plus a
deterministic alias post-pass. This builds only that layer and reuses
everything else.
## Recipes (in `private_dot_config/just/plugins.just`)
| Recipe | Role |
|---|---|
| `_plugins-repos scope` | Guarded domain-scope enumerator. Guards on
`-e "$e/.git"` (dir **or** worktree file), **not** `git rev-parse` —
`~/repos` is itself a git repo, so rev-parse would falsely pass
`archive/`, `tmp/`, `io.fvh.io/`, … A non-repo carrying
`.claude/settings.json` (e.g. FVH `ezpolls`) is FLAGged on stderr and
skipped. |
| `_plugins-annotate repo` | `jq` state annotator → one
`path<TAB>summary` line (enabled/lauri counts, alias + `ok`/`DRIFT`,
marketplace key, workflows, `tracked`/`gitignored`) for the fzf row,
`--preview`, and the `check` report. |
| `plugins-normalize-alias repo` | Deterministic post-pass reconciling
every laurigates alias to `laurigates-claude-plugins`. settings.json
keyed on `source.repo == laurigates/claude-plugins` (robust to whatever
alias a skill wrote); workflows via a `perl` lookahead that **spares
`@claude-plugins-official`**. Idempotent; edits local files even if
gitignored. |
| `plugins-bulk scope action="check"` | Main driver: enumerate →
annotate → fzf picker → **sequential** per-repo action → alias post-pass
after any write. Never commits. `check` = local jq (read-only); `setup`
= `/configure-claude-plugins --fix`; `reeval` = `/health:check
--scope=stack --fix`; `full` = `/configure:repo --fix`. |
| `plugins-audit-scope scope` | Scoped drift audit sharing a new private
`_plugins-audit-roots` body; `plugins-audit` now delegates to it for the
whole-tree variant (behaviour-preserving). |
`reeval` targets `/health:check --scope=stack --fix` because
`/health:audit` is unreachable (`health-audit` is `user-invocable:
false`); `health-check --scope=stack` reaches its fix flow.
## Verification
- `just -g _plugins-repos fvh` → only real repos; `ezpolls` FLAGged on
stderr; `archive`/`tmp`/`io.fvh.io` absent.
- `just -g _plugins-annotate ~/repos/laurigates/gitops` → reports
`lgates-claude-plugins` alias as **DRIFT**.
- `plugins-normalize-alias` on gitops rewrites key + suffixes; re-run →
"already canonical" (idempotent), exit 0. On pal-mcp-server, the 6
`@claude-plugins-official` LSP pins are **byte-identical** after
(untouched); the `claude-plugins`/`lgates-claude-plugins` laurigates
pins are normalized.
- `plugins-audit` (whole tree, refactored) scanned 5 = `laurigates` 2 +
`fvh` 3 — exact union.
- Pre-commit "check justfiles parse and evaluate" passes.
## Caveat
`reeval`'s `/health:check` fix flow uses per-category `AskUserQuestion`;
under `-p` there is no operator, so it may no-op — documented in the
recipe as best-run-interactively. `setup` (`--fix`) is reliably
non-interactive.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_014xTWB98DPccsiCpkbbpzde
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
0 commit comments