Skip to content

Conversation

@obra
Copy link
Owner

@obra obra commented Oct 11, 2025

Summary

Separates skills from the plugin into a dedicated repository (obra/superpowers-skills), transforming superpowers from a monolithic plugin into a lightweight shim.

Key changes:

  • Skills repository cloned to ~/.config/superpowers/skills/
  • Auto-update with fast-forward merge on session start
  • Fork workflow for community contributions
  • using-skills documentation rewritten with imperative tone (v4.0.0)
  • find-skills outputs paths directly usable with Read tool

Breaking changes:

  • Skills no longer bundled with plugin
  • Personal superpowers overlay system removed
  • Old two-tier (personal/core) system replaced with branch workflow

Migration

Fresh installs handle everything automatically. Existing installations will be migrated on first run:

  • Old ~/.config/superpowers/.git.git.bak
  • Old skills → skills.bak
  • Fresh clone from obra/superpowers-skills

Test Plan

  • Fresh install clones skills repo correctly
  • Fork offer appears with GitHub CLI
  • Auto-update fetches and fast-forwards on session start
  • Skills load correctly from new location
  • Slash commands work with new paths
  • find-skills outputs correct paths with /SKILL.md suffix
  • Migration from v1.x backs up correctly
  • All skills references updated (no CLAUDE_PLUGIN_ROOT)
  • using-skills v4.0.0 enforces Read tool usage

Related

Summary by CodeRabbit

  • New Features

    • Automatic skills initialization and per-session auto-updates
    • Nine new skills added across problem-solving, research, and architecture
    • Enhanced skill discovery with directly usable output paths
    • Session-start status messages highlighting available updates
  • Breaking Changes

    • Skills moved to a dedicated repository; new install/fork/update flows
    • Paths now reference a new skills root; several legacy tools and scripts removed
  • Improvements

    • Plugin streamlined to a lightweight manager for local skills
  • Documentation

    • Rewritten “Using Skills” guides and comprehensive upgrade instructions
  • Bug Fixes

    • Various fixes and polish across the experience

obra added 17 commits October 11, 2025 10:58
Changes:
- Set SUPERPOWERS_SKILLS_ROOT environment variable
- Call lib/initialize-skills.sh to handle clone/fetch/notification
- Update find-skills path to ${SUPERPOWERS_SKILLS_ROOT}/skills/using-skills/find-skills
- Update using-skills path (renamed from getting-started)
- Include initialization output in session start message
- Update slash command paths to use SUPERPOWERS_SKILLS_ROOT

Implements Task 7 from skills-repo-separation plan.
- Fix auto-update description (now auto-fetches and fast-forwards)
- Update skill name: updating-skills → pulling-updates-from-skills-repository
- Remove obsolete setting-up-personal-superpowers reference
- Add pulling-updates-from-skills-repository to Meta skills list
- Add prominent skills repository link
- Update sharing-skills description (branch and PR workflow)
Documents all changes since v1.0.0:
- Skills repository separation (breaking change)
- New problem-solving and research skills (PR #1)
- Personal superpowers system (PR #2, later replaced)
- Auto-update functionality
- Skills improvements (using-skills v4.0.0, sharing-skills v2.0.0)
- Tools improvements (find-skills, skill-run)
- Plugin infrastructure changes
- Migration guide for existing users
Provides prose description of v2.0 changes before diving into details:
- Skills repository separation (what it means, why it matters)
- Nine new skills (problem-solving, research, architecture)
- using-skills rewrite (imperative tone, clearer structure)
- Improved tools (find-skills outputs usable paths)
- Community focus (easier to contribute and improve skills)
Following The Elements of Style:
- Use active voice (Rule 10): "We rewrote" not "has been rewritten"
- Omit needless words (Rule 13): removed "automatically", "optionally", etc.
- Break up long sentences: split run-on second sentence into short, direct statements
- Put statements in positive form (Rule 11): direct assertions rather than negatives
- Keep it concise: "Claude notifies" not "Claude will notify"

Overview section now more direct and forceful while maintaining all information.
@coderabbitai
Copy link

coderabbitai bot commented Oct 11, 2025

Caution

Review failed

The pull request is closed.

Walkthrough

Separates skills into an external repository managed via a local clone, introduces SUPERPOWERS_SKILLS_ROOT, rewrites session-start hook to initialize/update skills and load content from the external repo, adds lib/initialize-skills.sh, removes legacy setup and runner scripts, and deletes extensive in-repo skills documentation and the conversations indexing/search tool.

Changes

Cohort / File(s) Summary
• Release notes
RELEASE-NOTES.md
Adds v2.0.0 notes describing repo split, new flows, breaking changes, and upgrade paths.
• Command doc path updates
commands/brainstorm.md, commands/execute-plan.md, commands/write-plan.md
Switches path refs from ${CLAUDE_PLUGIN_ROOT} to ${SUPERPOWERS_SKILLS_ROOT} for SKILL.md locations.
• Session start flow redesign
hooks/session-start.sh
Replaces prior setup with init-driven flow; exports SUPERPOWERS_SKILLS_ROOT; invokes new initialize script; parses update status; sources using-skills content and find-skills from external repo; outputs updated JSON context.
• Skills initialization utility (new)
lib/initialize-skills.sh
Adds script to clone/update skills repo, handle migration, set remotes/fork via gh, and report SKILLS_UPDATED/SKILLS_BEHIND.
• Legacy setup removal
hooks/setup-personal-superpowers.sh
Removes personal setup script and GitHub CLI availability messaging.
• Local scripts removal
scripts/find-skills, scripts/skill-run
Removes in-repo skills discovery and generic skill runner; discovery now lives in external skills repo.
• Remove conversation indexing/search tool
skills/collaboration/remembering-conversations/tool/* (…package.json, src/*, scripts, tests, hooks, configs)
Deletes Node/TS-based index/search pipeline, CLI wrappers, embeddings, DB, verifier/repair, tests, hooks, and configs.
• Remove remembering-conversations docs
skills/collaboration/remembering-conversations/* (…SKILL.md, INDEXING.md, DEPLOYMENT.md)
Deletes documentation and deployment guides.
• Remove collaboration skill docs<brskills/collaboration/* (…brainstorming, executing-plans, finishing-a-development-branch, requesting/receiving code review, dispatching-parallel-agents, subagent-driven-development, using-git-worktrees, writing-plans)` Deletes multiple SKILL.md documents and related templates.
• Remove debugging/testing skill docs and helpers
skills/debugging/*, skills/testing/* (incl. example.ts)
Removes SKILL.md docs, tests/training materials, and example TypeScript helpers.
• Remove problem-solving/research meta docs
skills/problem-solving/*, skills/research/*, skills/meta/*
Deletes ABOUT, SKILLs, wiki gardening scripts, and meta guidance.
• Misc removals
skills/REQUESTS.md, skills/architecture/*
Deletes request tracker and specific architecture docs.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor User
  participant Plugin as Plugin (SessionStart Hook)
  participant Init as initialize-skills.sh
  participant Git as Git Remote(s)
  participant Skills as Local Skills Repo

  User->>Plugin: Start session
  Plugin->>Init: Run initialize-skills.sh (SKILLS_DIR)
  Init->>Skills: Check repo/migrate or clone
  alt Repo exists
    Init->>Git: Fetch tracking remote
    Init->>Skills: Fast-forward if possible
    Init-->>Plugin: Flags {SKILLS_UPDATED?, SKILLS_BEHIND?}
  else Fresh or migrated
    Init->>Git: Clone and set remotes/fork (gh optional)
    Init-->>Plugin: Init complete
  end
  Plugin->>Skills: Load using-skills content + find-skills
  Plugin-->>User: JSON payload with context, status_message
Loading
sequenceDiagram
  autonumber
  participant Init as initialize-skills.sh
  participant Git as Git Remote(s)

  Init->>Init: Detect tracking remote
  Init->>Git: fetch
  Init->>Init: Compute LOCAL/REMOTE/BASE
  alt Fast-forwardable (LOCAL==BASE)
    Init->>Git: merge --ff-only
    Init-->>Init: SKILLS_UPDATED=true
  else Behind but not FF
    Init-->>Init: SKILLS_BEHIND=true
  end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

Poem

A rabbit nibbles docs—so many leaves!
New roots for skills, where Git now weaves.
Hooks hop first, to fetch and sync,
Status blinks a gentle wink.
Old trails fade, a cleaner view—
Fresh burrows, v2.0: let’s chew-choo! 🐇✨

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title Check ✅ Passed The title concisely and accurately reflects the primary change in the pull request by highlighting the separation of the skills repository and indicating the new version, making it clear and specific without unnecessary detail.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f9c6368 and 9eefffc.

📒 Files selected for processing (1)
  • lib/initialize-skills.sh (1 hunks)

Comment @coderabbitai help to get the list of available commands and usage tips.

Determine and fetch from the current branch's tracking remote instead of
hardcoding upstream/origin. This ensures the correct remote is updated
regardless of fork/upstream setup.

Fixes issue where auto-update wasn't fetching on session start.
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (7)
README.md (1)

14-14: Wrap the bare URL in Markdown syntax.

Markdown lint (MD034) flags the naked URL here. Wrap it in link syntax so the lint check passes. As per static analysis.

-**Skills Repository:** https://github.com/obra/superpowers-skills
+**Skills Repository:** [obra/superpowers-skills](https://github.com/obra/superpowers-skills)
docs/RELEASE-NOTES-v2.0.0.md (2)

115-133: Add language identifiers to fenced code blocks

Specify a language for syntax highlighting and to satisfy MD040.

Apply for the two blocks:

-```
+```text
 superpowers/
 ├── skills/
 │   ├── getting-started/
 │   └── ...
 └── scripts/
     ├── find-skills
     └── skill-run
-```
+```
-```
+```text
 ~/.config/superpowers/skills/  (cloned from obra/superpowers-skills)
 └── skills/
     ├── using-skills/
     │   ├── find-skills
     │   ├── skill-run
     │   └── SKILL.md
     ├── meta/
     │   └── pulling-updates-from-skills-repository/
     └── ...
-```
+```

161-177: Replace bare URLs with Markdown links

Satisfy MD034 and improve readability.

-- **Skills Repository:** https://github.com/obra/superpowers-skills
-- **Plugin Repository:** https://github.com/obra/superpowers
-- **Skills Repository v1.0.0:** https://github.com/obra/superpowers-skills/releases/tag/v1.0.0
-- **Report Issues:** https://github.com/obra/superpowers/issues
+- **Skills Repository:** <https://github.com/obra/superpowers-skills>
+- **Plugin Repository:** <https://github.com/obra/superpowers>
+- **Skills Repository v1.0.0:** <https://github.com/obra/superpowers-skills/releases/tag/v1.0.0>
+- **Report Issues:** <https://github.com/obra/superpowers/issues>
-- Default location: `~/.config/superpowers/skills/`
-- Skills repository: https://github.com/obra/superpowers-skills
+- Default location: `~/.config/superpowers/skills/`
+- Skills repository: <https://github.com/obra/superpowers-skills>
RELEASE-NOTES.md (2)

84-94: Add language identifiers to fenced code blocks

Use bash for shell snippets to satisfy MD040 and improve highlighting.

-```
+```bash
 # In Claude Code
 /plugin marketplace add obra/superpowers-marketplace
 /plugin install superpowers@superpowers-marketplace
-```
+```
-```
+```bash
 cp -r ~/.config/superpowers/skills ~/superpowers-skills-backup
-```
+```
-```
+```bash
 /plugin update superpowers
-```
+```

14-14: Replace bare URLs with Markdown links

Conform to MD034 and standardize presentation.

-The headline change is **skills repository separation**: all skills, scripts, and documentation have moved from the plugin into a dedicated repository (https://github.com/obra/superpowers-skills).
+The headline change is **skills repository separation**: all skills, scripts, and documentation have moved from the plugin into a dedicated repository (<https://github.com/obra/superpowers-skills>).
-- Skills repository is now at https://github.com/obra/superpowers-skills
+- Skills repository is now at <https://github.com/obra/superpowers-skills>
-**Full Changelog:** https://github.com/obra/superpowers/compare/dd013f6...main
-**Skills Repository:** https://github.com/obra/superpowers-skills
-**Issues:** https://github.com/obra/superpowers/issues
+**Full Changelog:** <https://github.com/obra/superpowers/compare/dd013f6...main>
+**Skills Repository:** <https://github.com/obra/superpowers-skills>
+**Issues:** <https://github.com/obra/superpowers/issues>

Also applies to: 170-171, 229-231

lib/initialize-skills.sh (1)

12-19: Minor: tolerate missing upstream/tracking more explicitly

Your guards are fine. Optional: short-circuit when no upstream is configured to avoid subshell git errors/log noise.

-TRACKING_REMOTE=$(git rev-parse --abbrev-ref --symbolic-full-name @{u} 2>/dev/null | cut -d'/' -f1 || echo "")
+TRACKING_REMOTE=$(git rev-parse --abbrev-ref --symbolic-full-name @{u} 2>/dev/null | cut -d'/' -f1 || echo "")
+if [ -z "$TRACKING_REMOTE" ]; then
+    # No upstream configured; nothing to update yet.
+    exit 0
+fi

Also applies to: 22-41

hooks/session-start.sh (1)

15-18: Remove or use unused variable

skills_updated is parsed but unused. Either drop it or show a brief “updated” note.

-skills_updated=$(echo "$init_output" | grep "SKILLS_UPDATED=true" || echo "")
 skills_behind=$(echo "$init_output" | grep "SKILLS_BEHIND=true" || echo "")
 # Remove status flags from display output
 init_output=$(echo "$init_output" | grep -v "SKILLS_UPDATED=true" | grep -v "SKILLS_BEHIND=true")

Or, to display a success banner:

 if [ -n "$skills_behind" ]; then
     status_message="\n\n⚠️ New skills available from upstream. Ask me to use the pulling-updates-from-skills-repository skill."
+elif echo "$init_output" | grep -q "Skills updated successfully"; then
+    status_message="\n\n✓ Skills updated to latest."
 fi
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 015a07f and f9c6368.

⛔ Files ignored due to path filters (2)
  • skills/collaboration/remembering-conversations/tool/package-lock.json is excluded by !**/package-lock.json
  • skills/meta/writing-skills/graphviz-conventions.dot is excluded by !**/*.dot
📒 Files selected for processing (88)
  • README.md (5 hunks)
  • RELEASE-NOTES.md (1 hunks)
  • commands/brainstorm.md (1 hunks)
  • commands/execute-plan.md (1 hunks)
  • commands/write-plan.md (1 hunks)
  • docs/RELEASE-NOTES-v2.0.0.md (1 hunks)
  • hooks/session-start.sh (1 hunks)
  • hooks/setup-personal-superpowers.sh (0 hunks)
  • lib/initialize-skills.sh (1 hunks)
  • scripts/find-skills (0 hunks)
  • scripts/skill-run (0 hunks)
  • skills/REQUESTS.md (0 hunks)
  • skills/architecture/ABOUT.md (0 hunks)
  • skills/architecture/preserving-productive-tensions/SKILL.md (0 hunks)
  • skills/collaboration/brainstorming/SKILL.md (0 hunks)
  • skills/collaboration/dispatching-parallel-agents/SKILL.md (0 hunks)
  • skills/collaboration/executing-plans/SKILL.md (0 hunks)
  • skills/collaboration/finishing-a-development-branch/SKILL.md (0 hunks)
  • skills/collaboration/receiving-code-review/SKILL.md (0 hunks)
  • skills/collaboration/remembering-conversations/DEPLOYMENT.md (0 hunks)
  • skills/collaboration/remembering-conversations/INDEXING.md (0 hunks)
  • skills/collaboration/remembering-conversations/SKILL.md (0 hunks)
  • skills/collaboration/remembering-conversations/tool/.gitignore (0 hunks)
  • skills/collaboration/remembering-conversations/tool/hooks/sessionEnd (0 hunks)
  • skills/collaboration/remembering-conversations/tool/index-conversations (0 hunks)
  • skills/collaboration/remembering-conversations/tool/install-hook (0 hunks)
  • skills/collaboration/remembering-conversations/tool/migrate-to-config.sh (0 hunks)
  • skills/collaboration/remembering-conversations/tool/package.json (0 hunks)
  • skills/collaboration/remembering-conversations/tool/prompts/search-agent.md (0 hunks)
  • skills/collaboration/remembering-conversations/tool/search-conversations (0 hunks)
  • skills/collaboration/remembering-conversations/tool/src/db.test.ts (0 hunks)
  • skills/collaboration/remembering-conversations/tool/src/db.ts (0 hunks)
  • skills/collaboration/remembering-conversations/tool/src/embeddings.ts (0 hunks)
  • skills/collaboration/remembering-conversations/tool/src/index-cli.ts (0 hunks)
  • skills/collaboration/remembering-conversations/tool/src/indexer.ts (0 hunks)
  • skills/collaboration/remembering-conversations/tool/src/parser.ts (0 hunks)
  • skills/collaboration/remembering-conversations/tool/src/paths.ts (0 hunks)
  • skills/collaboration/remembering-conversations/tool/src/search-agent-template.test.ts (0 hunks)
  • skills/collaboration/remembering-conversations/tool/src/search-cli.ts (0 hunks)
  • skills/collaboration/remembering-conversations/tool/src/search.ts (0 hunks)
  • skills/collaboration/remembering-conversations/tool/src/summarizer.ts (0 hunks)
  • skills/collaboration/remembering-conversations/tool/src/types.ts (0 hunks)
  • skills/collaboration/remembering-conversations/tool/src/verify.test.ts (0 hunks)
  • skills/collaboration/remembering-conversations/tool/src/verify.ts (0 hunks)
  • skills/collaboration/remembering-conversations/tool/test-deployment.sh (0 hunks)
  • skills/collaboration/remembering-conversations/tool/test-install-hook.sh (0 hunks)
  • skills/collaboration/remembering-conversations/tool/tsconfig.json (0 hunks)
  • skills/collaboration/requesting-code-review/SKILL.md (0 hunks)
  • skills/collaboration/requesting-code-review/code-reviewer.md (0 hunks)
  • skills/collaboration/subagent-driven-development/SKILL.md (0 hunks)
  • skills/collaboration/using-git-worktrees/SKILL.md (0 hunks)
  • skills/collaboration/writing-plans/SKILL.md (0 hunks)
  • skills/debugging/defense-in-depth/SKILL.md (0 hunks)
  • skills/debugging/root-cause-tracing/SKILL.md (0 hunks)
  • skills/debugging/root-cause-tracing/find-polluter.sh (0 hunks)
  • skills/debugging/systematic-debugging/CREATION-LOG.md (0 hunks)
  • skills/debugging/systematic-debugging/SKILL.md (0 hunks)
  • skills/debugging/systematic-debugging/test-academic.md (0 hunks)
  • skills/debugging/systematic-debugging/test-pressure-1.md (0 hunks)
  • skills/debugging/systematic-debugging/test-pressure-2.md (0 hunks)
  • skills/debugging/systematic-debugging/test-pressure-3.md (0 hunks)
  • skills/debugging/verification-before-completion/SKILL.md (0 hunks)
  • skills/getting-started/SKILL.md (0 hunks)
  • skills/meta/gardening-skills-wiki/SKILL.md (0 hunks)
  • skills/meta/gardening-skills-wiki/analyze-search-gaps.sh (0 hunks)
  • skills/meta/gardening-skills-wiki/check-index-coverage.sh (0 hunks)
  • skills/meta/gardening-skills-wiki/check-links.sh (0 hunks)
  • skills/meta/gardening-skills-wiki/check-naming.sh (0 hunks)
  • skills/meta/gardening-skills-wiki/garden.sh (0 hunks)
  • skills/meta/setting-up-personal-superpowers/SKILL.md (0 hunks)
  • skills/meta/sharing-skills/SKILL.md (0 hunks)
  • skills/meta/testing-skills-with-subagents/SKILL.md (0 hunks)
  • skills/meta/testing-skills-with-subagents/examples/CLAUDE_MD_TESTING.md (0 hunks)
  • skills/meta/writing-skills/SKILL.md (0 hunks)
  • skills/meta/writing-skills/persuasion-principles.md (0 hunks)
  • skills/problem-solving/ABOUT.md (0 hunks)
  • skills/problem-solving/collision-zone-thinking/SKILL.md (0 hunks)
  • skills/problem-solving/inversion-exercise/SKILL.md (0 hunks)
  • skills/problem-solving/meta-pattern-recognition/SKILL.md (0 hunks)
  • skills/problem-solving/scale-game/SKILL.md (0 hunks)
  • skills/problem-solving/simplification-cascades/SKILL.md (0 hunks)
  • skills/problem-solving/when-stuck/SKILL.md (0 hunks)
  • skills/research/ABOUT.md (0 hunks)
  • skills/research/tracing-knowledge-lineages/SKILL.md (0 hunks)
  • skills/testing/condition-based-waiting/SKILL.md (0 hunks)
  • skills/testing/condition-based-waiting/example.ts (0 hunks)
  • skills/testing/test-driven-development/SKILL.md (0 hunks)
  • skills/testing/testing-anti-patterns/SKILL.md (0 hunks)
💤 Files with no reviewable changes (80)
  • skills/collaboration/remembering-conversations/tool/src/types.ts
  • skills/collaboration/remembering-conversations/INDEXING.md
  • skills/problem-solving/ABOUT.md
  • skills/debugging/root-cause-tracing/find-polluter.sh
  • skills/architecture/ABOUT.md
  • skills/meta/testing-skills-with-subagents/examples/CLAUDE_MD_TESTING.md
  • skills/collaboration/remembering-conversations/tool/index-conversations
  • skills/collaboration/remembering-conversations/tool/.gitignore
  • skills/collaboration/remembering-conversations/tool/src/parser.ts
  • hooks/setup-personal-superpowers.sh
  • skills/testing/condition-based-waiting/SKILL.md
  • skills/testing/test-driven-development/SKILL.md
  • skills/debugging/defense-in-depth/SKILL.md
  • skills/collaboration/remembering-conversations/tool/src/search-cli.ts
  • skills/collaboration/remembering-conversations/tool/src/paths.ts
  • skills/problem-solving/simplification-cascades/SKILL.md
  • skills/meta/gardening-skills-wiki/garden.sh
  • skills/collaboration/remembering-conversations/tool/install-hook
  • skills/collaboration/dispatching-parallel-agents/SKILL.md
  • skills/collaboration/remembering-conversations/tool/prompts/search-agent.md
  • skills/problem-solving/scale-game/SKILL.md
  • skills/meta/gardening-skills-wiki/check-links.sh
  • skills/collaboration/remembering-conversations/tool/src/search.ts
  • skills/collaboration/remembering-conversations/tool/search-conversations
  • skills/collaboration/remembering-conversations/tool/src/db.test.ts
  • skills/problem-solving/when-stuck/SKILL.md
  • skills/testing/condition-based-waiting/example.ts
  • scripts/skill-run
  • skills/collaboration/remembering-conversations/tool/src/indexer.ts
  • skills/debugging/verification-before-completion/SKILL.md
  • skills/collaboration/remembering-conversations/tool/test-deployment.sh
  • skills/meta/writing-skills/persuasion-principles.md
  • skills/meta/setting-up-personal-superpowers/SKILL.md
  • skills/problem-solving/meta-pattern-recognition/SKILL.md
  • skills/collaboration/remembering-conversations/tool/src/db.ts
  • skills/collaboration/using-git-worktrees/SKILL.md
  • skills/collaboration/remembering-conversations/DEPLOYMENT.md
  • skills/meta/gardening-skills-wiki/check-naming.sh
  • skills/collaboration/brainstorming/SKILL.md
  • scripts/find-skills
  • skills/collaboration/remembering-conversations/SKILL.md
  • skills/meta/gardening-skills-wiki/analyze-search-gaps.sh
  • skills/collaboration/remembering-conversations/tool/migrate-to-config.sh
  • skills/collaboration/requesting-code-review/code-reviewer.md
  • skills/collaboration/remembering-conversations/tool/src/index-cli.ts
  • skills/collaboration/remembering-conversations/tool/hooks/sessionEnd
  • skills/REQUESTS.md
  • skills/debugging/systematic-debugging/SKILL.md
  • skills/debugging/systematic-debugging/test-academic.md
  • skills/collaboration/finishing-a-development-branch/SKILL.md
  • skills/problem-solving/inversion-exercise/SKILL.md
  • skills/collaboration/writing-plans/SKILL.md
  • skills/problem-solving/collision-zone-thinking/SKILL.md
  • skills/collaboration/receiving-code-review/SKILL.md
  • skills/collaboration/remembering-conversations/tool/src/embeddings.ts
  • skills/debugging/systematic-debugging/CREATION-LOG.md
  • skills/getting-started/SKILL.md
  • skills/research/ABOUT.md
  • skills/collaboration/remembering-conversations/tool/test-install-hook.sh
  • skills/collaboration/executing-plans/SKILL.md
  • skills/debugging/systematic-debugging/test-pressure-2.md
  • skills/debugging/systematic-debugging/test-pressure-1.md
  • skills/meta/writing-skills/SKILL.md
  • skills/collaboration/remembering-conversations/tool/src/search-agent-template.test.ts
  • skills/meta/sharing-skills/SKILL.md
  • skills/testing/testing-anti-patterns/SKILL.md
  • skills/collaboration/remembering-conversations/tool/tsconfig.json
  • skills/collaboration/remembering-conversations/tool/src/verify.ts
  • skills/meta/gardening-skills-wiki/SKILL.md
  • skills/debugging/systematic-debugging/test-pressure-3.md
  • skills/architecture/preserving-productive-tensions/SKILL.md
  • skills/debugging/root-cause-tracing/SKILL.md
  • skills/collaboration/remembering-conversations/tool/package.json
  • skills/collaboration/requesting-code-review/SKILL.md
  • skills/meta/gardening-skills-wiki/check-index-coverage.sh
  • skills/collaboration/subagent-driven-development/SKILL.md
  • skills/research/tracing-knowledge-lineages/SKILL.md
  • skills/collaboration/remembering-conversations/tool/src/summarizer.ts
  • skills/meta/testing-skills-with-subagents/SKILL.md
  • skills/collaboration/remembering-conversations/tool/src/verify.test.ts
🧰 Additional context used
🪛 markdownlint-cli2 (0.18.1)
README.md

14-14: Bare URL used

(MD034, no-bare-urls)

RELEASE-NOTES.md

14-14: Bare URL used

(MD034, no-bare-urls)


84-84: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


89-89: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


94-94: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


170-170: Bare URL used

(MD034, no-bare-urls)


171-171: Bare URL used

(MD034, no-bare-urls)

docs/RELEASE-NOTES-v2.0.0.md

115-115: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


126-126: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


161-161: Bare URL used

(MD034, no-bare-urls)


162-162: Bare URL used

(MD034, no-bare-urls)


163-163: Bare URL used

(MD034, no-bare-urls)


164-164: Bare URL used

(MD034, no-bare-urls)


177-177: Bare URL used

(MD034, no-bare-urls)

🪛 Shellcheck (0.11.0)
lib/initialize-skills.sh

[warning] 12-12: This { is literal. Check expression (missing ;/\n?) or quote it.

(SC1083)


[warning] 12-12: This } is literal. Check expression (missing ;/\n?) or quote it.

(SC1083)


[warning] 23-23: This { is literal. Check expression (missing ;/\n?) or quote it.

(SC1083)


[warning] 23-23: This } is literal. Check expression (missing ;/\n?) or quote it.

(SC1083)


[warning] 24-24: This { is literal. Check expression (missing ;/\n?) or quote it.

(SC1083)


[warning] 24-24: This } is literal. Check expression (missing ;/\n?) or quote it.

(SC1083)


[warning] 32-32: This { is literal. Check expression (missing ;/\n?) or quote it.

(SC1083)


[warning] 32-32: This } is literal. Check expression (missing ;/\n?) or quote it.

(SC1083)

hooks/session-start.sh

[warning] 15-15: skills_updated appears unused. Verify use (or export if used externally).

(SC2034)

🔇 Additional comments (4)
commands/execute-plan.md (1)

5-5: Path update looks correct

Matches the new env var and repo layout.

commands/write-plan.md (1)

5-5: Path update looks correct

Consistent with the new skills repo structure.

commands/brainstorm.md (1)

5-5: Path update looks correct

Aligned with the new skills root env var.

hooks/session-start.sh (1)

21-29: Good resilience and JSON escaping

Fallbacks on errors and escaping look solid for startup UX.

Comment on lines +51 to +59
if [ -d "${HOME}/.config/superpowers/.git" ]; then
echo "Found existing installation. Backing up..."
mv "${HOME}/.config/superpowers/.git" "${HOME}/.config/superpowers/.git.bak"

if [ -d "${HOME}/.config/superpowers/skills" ]; then
mv "${HOME}/.config/superpowers/skills" "${HOME}/.config/superpowers/skills.bak"
echo "Your old skills are in ~/.config/superpowers/skills.bak"
fi
fi
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Make migration backups idempotent and safe

mv to fixed .git.bak/skills.bak will fail if they already exist (set -e aborts). Use timestamped or unique backup names.

-if [ -d "${HOME}/.config/superpowers/.git" ]; then
+if [ -d "${HOME}/.config/superpowers/.git" ]; then
     echo "Found existing installation. Backing up..."
-    mv "${HOME}/.config/superpowers/.git" "${HOME}/.config/superpowers/.git.bak"
+    ts="$(date +%Y%m%d-%H%M%S)"
+    mv "${HOME}/.config/superpowers/.git" "${HOME}/.config/superpowers/.git.bak.${ts}"
 
-    if [ -d "${HOME}/.config/superpowers/skills" ]; then
-        mv "${HOME}/.config/superpowers/skills" "${HOME}/.config/superpowers/skills.bak"
-        echo "Your old skills are in ~/.config/superpowers/skills.bak"
+    if [ -d "${HOME}/.config/superpowers/skills" ]; then
+        mv "${HOME}/.config/superpowers/skills" "${HOME}/.config/superpowers/skills.bak.${ts}"
+        echo "Your old skills are in ~/.config/superpowers/skills.bak.${ts}"
     fi
 fi
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
if [ -d "${HOME}/.config/superpowers/.git" ]; then
echo "Found existing installation. Backing up..."
mv "${HOME}/.config/superpowers/.git" "${HOME}/.config/superpowers/.git.bak"
if [ -d "${HOME}/.config/superpowers/skills" ]; then
mv "${HOME}/.config/superpowers/skills" "${HOME}/.config/superpowers/skills.bak"
echo "Your old skills are in ~/.config/superpowers/skills.bak"
fi
fi
if [ -d "${HOME}/.config/superpowers/.git" ]; then
echo "Found existing installation. Backing up..."
ts="$(date +%Y%m%d-%H%M%S)"
mv "${HOME}/.config/superpowers/.git" "${HOME}/.config/superpowers/.git.bak.${ts}"
if [ -d "${HOME}/.config/superpowers/skills" ]; then
mv "${HOME}/.config/superpowers/skills" "${HOME}/.config/superpowers/skills.bak.${ts}"
echo "Your old skills are in ~/.config/superpowers/skills.bak.${ts}"
fi
fi
🤖 Prompt for AI Agents
In lib/initialize-skills.sh around lines 51 to 59, the current mv to fixed
.git.bak and skills.bak is not idempotent and will fail if those backup names
already exist (breaking scripts with set -e); change the backup strategy to
produce unique backup names (e.g., append a timestamp or use mktemp-style
suffix), check for target existence and choose a new unique name if needed, then
move the directories into those unique backup paths and emit the chosen backup
paths to the user so repeated runs won’t fail.

Comment on lines +68 to +81
if command -v gh &> /dev/null; then
echo ""
echo "GitHub CLI detected. Would you like to fork superpowers-skills?"
echo "Forking allows you to share skill improvements with the community."
echo ""
read -p "Fork superpowers-skills? (y/N): " -n 1 -r
echo

if [[ $REPLY =~ ^[Yy]$ ]]; then
gh repo fork obra/superpowers-skills --remote=true
echo "Forked! You can now contribute skills back to the community."
else
git remote add upstream "$SKILLS_REPO"
fi
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Avoid blocking prompts in non-interactive environments

Session start may run non-interactively. Gate the prompt on TTY and default to “No,” or allow an env override. Also, pre-check gh auth.

-if command -v gh &> /dev/null; then
+if command -v gh &> /dev/null; then
     echo ""
     echo "GitHub CLI detected. Would you like to fork superpowers-skills?"
     echo "Forking allows you to share skill improvements with the community."
     echo ""
-    read -p "Fork superpowers-skills? (y/N): " -n 1 -r
-    echo
+    do_fork="N"
+    if [ -t 0 ]; then
+        read -p "Fork superpowers-skills? (y/N): " -n 1 -r
+        echo
+        do_fork="$REPLY"
+    fi
 
-    if [[ $REPLY =~ ^[Yy]$ ]]; then
-        gh repo fork obra/superpowers-skills --remote=true
+    if [[ "$do_fork" =~ ^[Yy]$ ]]; then
+        if gh auth status >/dev/null 2>&1; then
+            gh repo fork obra/superpowers-skills --remote=true
+        else
+            echo "Skipping fork (gh not authenticated). Run 'gh auth login' later."
+            git remote add upstream "$SKILLS_REPO"
+        fi
         echo "Forked! You can now contribute skills back to the community."
     else
         git remote add upstream "$SKILLS_REPO"
     fi
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
if command -v gh &> /dev/null; then
echo ""
echo "GitHub CLI detected. Would you like to fork superpowers-skills?"
echo "Forking allows you to share skill improvements with the community."
echo ""
read -p "Fork superpowers-skills? (y/N): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
gh repo fork obra/superpowers-skills --remote=true
echo "Forked! You can now contribute skills back to the community."
else
git remote add upstream "$SKILLS_REPO"
fi
if command -v gh &> /dev/null; then
echo ""
echo "GitHub CLI detected. Would you like to fork superpowers-skills?"
echo "Forking allows you to share skill improvements with the community."
echo ""
do_fork="N"
if [ -t 0 ]; then
read -p "Fork superpowers-skills? (y/N): " -n 1 -r
echo
do_fork="$REPLY"
fi
if [[ "$do_fork" =~ ^[Yy]$ ]]; then
if gh auth status >/dev/null 2>&1; then
gh repo fork obra/superpowers-skills --remote=true
else
echo "Skipping fork (gh not authenticated). Run 'gh auth login' later."
git remote add upstream "$SKILLS_REPO"
fi
echo "Forked! You can now contribute skills back to the community."
else
git remote add upstream "$SKILLS_REPO"
fi

Comment on lines +123 to +124
- Fixed path references throughout hooks and commands

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

Verify all legacy path references were updated

Claimed fix for path references; double-check there’s no remaining CLAUDE_PLUGIN_ROOT.


🏁 Script executed:

#!/bin/bash
# Find any lingering references to CLAUDE_PLUGIN_ROOT
rg -n -C2 -S '\bCLAUDE_PLUGIN_ROOT\b' || true

Length of output: 1111


Replace remaining legacy path in hooks/hooks.json

  • hooks/hooks.json:9 — change "${CLAUDE_PLUGIN_ROOT}/hooks/session-start.sh" to "${SUPERPOWERS_SKILLS_ROOT}/hooks/session-start.sh"
🤖 Prompt for AI Agents
In RELEASE-NOTES.md around lines 123 to 124, update the documented legacy path
reference: replace the entry for hooks/hooks.json line 9 that currently shows
"${CLAUDE_PLUGIN_ROOT}/hooks/session-start.sh" with the new variable
"${SUPERPOWERS_SKILLS_ROOT}/hooks/session-start.sh" so the release note
accurately reflects the change to the hooks path.

@obra obra force-pushed the feature/skills-repo-separation branch from f9c6368 to 9eefffc Compare October 11, 2025 21:18
@obra obra merged commit bde691c into main Oct 11, 2025
1 check was pending
EthanJStark pushed a commit to EthanJStark/superpowers that referenced this pull request Dec 16, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants