From d3a83a7d414a5ac033f7b778d8d5a35a4d59ee0c Mon Sep 17 00:00:00 2001 From: vitya Date: Tue, 28 Apr 2026 20:47:58 +0300 Subject: [PATCH] feat(project-bootstrap): recommend superpowers plugin if missing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CLAUDE.md template adds `use superpowers` as a trigger, but that line is silently dead until the official plugin is installed. New Step 5.6 reads ~/.claude/plugins/installed_plugins.json and, when the `superpowers@claude-plugins-official` key is absent, prints a chat-only recommendation with the install command and the upstream link (github.com/anthropics/claude-plugins-official). Strict no-auto-install: slash commands aren't callable from a skill, and silent plugin install would be overreach. Bumps project-bootstrap 1.0.0 → 1.1.0. Rebuilt dist archive. Co-Authored-By: Claude Opus 4.7 (1M context) --- .tasks/STATUS.md | 8 ++++ .tasks/bootstrap-recommend-superpowers.md | 34 ++++++++++++++++ .wiki/log.md | 1 + dist/project-bootstrap.skill | Bin 4810 -> 7744 bytes skills/project-bootstrap/README.md | 8 +++- skills/project-bootstrap/SKILL.md | 46 +++++++++++++++++++++- 6 files changed, 94 insertions(+), 3 deletions(-) create mode 100644 .tasks/bootstrap-recommend-superpowers.md diff --git a/.tasks/STATUS.md b/.tasks/STATUS.md index 3c51882..84c3d8c 100644 --- a/.tasks/STATUS.md +++ b/.tasks/STATUS.md @@ -14,6 +14,14 @@ _Updated: 2026-04-28_ đŸ”ĩ Blocked — waiting on external input --> +## đŸŸĸ [bootstrap-recommend-superpowers] — project-bootstrap recommends superpowers plugin if missing +**Status:** done +**Where I stopped:** Step 5.6 added to `skills/project-bootstrap/SKILL.md` (read `~/.claude/plugins/installed_plugins.json`, print install command + upstream link if `superpowers@claude-plugins-official` key missing); version bumped 1.0.0 → 1.1.0; README workflow numbering updated; skill reinstalled to `~/.claude/skills/project-bootstrap/` and `dist/project-bootstrap.skill` rebuilt; log entry added +**Next action:** (none — kept until merged) +**Branch:** master + +--- + ## đŸŸĸ [mac-support-scripts] — fix install.sh / build.sh for stock macOS **Status:** done **Where I stopped:** patched both scripts to drop `mapfile` (bash 4+) and `find -printf` (GNU find) — replaced with portable shell glob + `basename` + `sort`; verified on git-bash (16 skills discovered, install dry-run + build smoke-test passed); wiki concept page `install-portability.md` added; index + log updated diff --git a/.tasks/bootstrap-recommend-superpowers.md b/.tasks/bootstrap-recommend-superpowers.md new file mode 100644 index 0000000..7dd944c --- /dev/null +++ b/.tasks/bootstrap-recommend-superpowers.md @@ -0,0 +1,34 @@ +# bootstrap-recommend-superpowers + +## Goal +`project-bootstrap` writes `use superpowers` into the new project's `CLAUDE.md` (Step 5 template), but that trigger only fires if the `superpowers@claude-plugins-official` plugin is installed. On a fresh machine the plugin is often absent, so the trigger silently no-ops. Add a Step 5.6 that detects the plugin via `~/.claude/plugins/installed_plugins.json` and, when missing, prints a recommendation with the exact install command + upstream link. Strictly informational — never auto-installs. + +## Key files +- `skills/project-bootstrap/SKILL.md` — add Step 5.6 between 5.5 (manifest) and 6 (commit); bump frontmatter `version: 1.0.0 → 1.1.0` +- `skills/project-bootstrap/README.md` — extend the steps overview to mention the new check +- `~/.claude/plugins/installed_plugins.json` — detection source + +## Decisions log +- 2026-04-28: Place check at Step 5.6 (right after manifest, before commit). Reason: CLAUDE.md just got `use superpowers`, so the recommendation lands while context is fresh. Alternative — fold into Step 0 detect — rejected: Step 0 is meant to be quick + read-only summary; threading plugin checks there bloats the no-op happy path. +- 2026-04-28: Detection by file read, not by `/plugin list`. Reason: slash commands aren't callable from inside a skill; the JSON file is the source of truth Claude Code itself reads. Same approach as `setup-context7` Phase 1. +- 2026-04-28: Recommendation, not auto-install. Reason: `/plugin install` is interactive and per `setup-context7` we can't drive slash commands from a skill. Even if we could, auto-installing a plugin without consent is overreach. +- 2026-04-28: Limit scope to `superpowers` only. User explicitly asked for that one. Generic "recommended plugins" framework is feature creep — defer until there's a second item. + +## Open questions +- [ ] None — done. + +## Completed steps +- [x] Confirm plugin install path / JSON shape from local `installed_plugins.json` +- [x] Pick insertion point (Step 5.6) +- [x] Pick detection method (file read of `installed_plugins.json`) +- [x] Patch `SKILL.md` (Step 5.6 + frontmatter `version: 1.1.0`) +- [x] Update `README.md` workflow numbering +- [x] Reinstall to `~/.claude/skills/project-bootstrap/` +- [x] Rebuild `dist/project-bootstrap.skill` +- [x] Append wiki log entry +- [x] Commit + +## Notes +- Plugin install command (canonical, from `installed_plugins.json` key): `/plugin install superpowers@claude-plugins-official` +- Upstream: https://github.com/anthropics/claude-plugins-official +- Cross-platform path: `~/.claude/plugins/installed_plugins.json` resolves identically on Windows / Linux / macOS. diff --git a/.wiki/log.md b/.wiki/log.md index 32fa6a9..bc9a8a0 100644 --- a/.wiki/log.md +++ b/.wiki/log.md @@ -28,3 +28,4 @@ Parseable: `grep "^## \[" .wiki/log.md | tail -20`. ## [2026-04-28] refactor | this repo's `.tasks/` migrated to canonical layout — flat `## Done`/`## Backlog` replaced by emoji-status board (7 âšĒ Ready blocks); historical Done entries dropped (preserved in git log); `.bak` ignored via .gitignore ## [2026-04-28] cleanup | removed stale `~/.claude/skills/{wiki-maintainer,task-status-wiki}/` installs (replaced by `using-wiki`/`using-tasks`); 16 skills installed, no duplicates; context7 plugin (mcp__plugin_context7_context7__*) confirmed live after restart ## [2026-04-28] decision | install-portability — `install.sh`/`build.sh` patched to drop `mapfile`+`find -printf`; stock macOS (bash 3.2 + BSD find) now works; verified on git-bash (16 skills discovered, sorted, installed; build.sh produces archive) +## [2026-04-28] decision | project-bootstrap@1.1.0 — added Step 5.6: detects `superpowers@claude-plugins-official` via `~/.claude/plugins/installed_plugins.json` and prints install command + upstream link if missing; chat-only, never auto-installs (slash commands aren't callable from a skill, and silent plugin install is overreach) diff --git a/dist/project-bootstrap.skill b/dist/project-bootstrap.skill index 930298b64d3e4a4d763e19c0b8da2a91a6c4ca09..5a9a2c5636510f0627ee6e44fa5988ad6d7883d0 100644 GIT binary patch delta 7124 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 bEf!Eq1qJ{B000930|5H~006lW00000ITjkX diff --git a/skills/project-bootstrap/README.md b/skills/project-bootstrap/README.md index 0740ea6..a6018ba 100644 --- a/skills/project-bootstrap/README.md +++ b/skills/project-bootstrap/README.md @@ -58,10 +58,14 @@ projects bootstrapped at different times debuggable. `.tasks/`, `CLAUDE.md`. Steps 3 and 4 delegate to the setup-skills. 4. **Step 5.5.** Write `bootstrap-manifest.md` recording the versions of `project-bootstrap`, `setup-wiki`, and `setup-tasks` used. -5. **Commit.** `chore: bootstrap project structure` for fresh repos, or +5. **Step 5.6.** Detect the official `superpowers@claude-plugins-official` + plugin via `~/.claude/plugins/installed_plugins.json`. If absent, print + a one-time chat recommendation with the install command and upstream + link. Never auto-installs, never modifies project files. +6. **Commit.** `chore: bootstrap project structure` for fresh repos, or `chore: upgrade project structure` adding only the new files for existing ones. Pushes only on explicit user request. -6. **Summary.** Final report — what was created, what was skipped, suggested +7. **Summary.** Final report — what was created, what was skipped, suggested next step. ## Rules diff --git a/skills/project-bootstrap/SKILL.md b/skills/project-bootstrap/SKILL.md index 4e8b5df..d953455 100644 --- a/skills/project-bootstrap/SKILL.md +++ b/skills/project-bootstrap/SKILL.md @@ -1,6 +1,6 @@ --- name: project-bootstrap -version: 1.0.0 +version: 1.1.0 description: > Initializes or upgrades a project in the current folder: git, .gitignore, README.md, .wiki/ using Karpathy's method, .tasks/ for task tracking, CLAUDE.md with skill triggers. @@ -272,6 +272,50 @@ This file is overwritten if `project-bootstrap` is re-run on the same project. F If a delegated setup-skill is unavailable on this machine (e.g. user installed only a subset), record the missing skill as `unknown` in the version column so the gap is visible. +--- + +## Step 5.6 — Recommend `superpowers` plugin (chat-only, never auto-install) + +The `CLAUDE.md` template just written contains `use superpowers` as a trigger. +That trigger is a no-op unless the official `superpowers` plugin is installed +on the host. On a fresh machine the plugin is often absent, and the user +won't know the trigger is silently dead. Detect and recommend. + +Read `~/.claude/plugins/installed_plugins.json`. The path is identical on +Windows / Linux / macOS — `~` resolves correctly under git-bash too. + +Look for the key `superpowers@claude-plugins-official` under `plugins`. +Two outcomes: + +- **Installed** — say nothing. Skip to Step 6. +- **Missing** (key absent, or the JSON file itself doesn't exist) — print + this block in chat exactly once. Do **not** write it into any project file: + + ``` + â„šī¸ Recommended: install the official `superpowers` plugin + + CLAUDE.md now contains `use superpowers`, but that trigger is a no-op + until the plugin is installed. With it, every session auto-loads + brainstorming, planning, code-review, debugging, and TDD skills. + + Install (run inside Claude Code): + /plugin install superpowers@claude-plugins-official + + Source: https://github.com/anthropics/claude-plugins-official + + After install + Claude Code restart, the trigger picks it up. + ``` + +**Hard rule — never auto-install.** Slash commands aren't callable from a +skill, and silently mutating user-level plugin state without consent is +overreach. The recommendation is informational. The user can install it +later, ignore it entirely, or remove the `use superpowers` line from +`CLAUDE.md` if they prefer a leaner setup. + +If the JSON file is malformed (rare), treat as "missing" and print the +recommendation. Do not crash the bootstrap over a plugin-detection edge +case — the file isn't ours to fix here. + ## Step 6 — Commit ```bash