Skip to content

Conversation

@obra
Copy link
Owner

@obra obra commented Oct 11, 2025

Summary

Enables users to write and manage their own skills alongside core superpowers, with automatic setup and GitHub integration.

Key Features

  • Auto-setup on first session: Creates ~/.config/superpowers/ as git repo
  • Two-tier skill system: Personal skills shadow core skills when paths match
  • Environment variable support: PERSONAL_SUPERPOWERS_DIR, XDG_CONFIG_HOME
  • GitHub integration: Optional public repo creation for sharing personal skills
  • Unified tools: find-skills (discovery), skill-run (generic runner)
  • CLI-agnostic: Ready for Claude Code, Codex CLI, Gemini CLI

Architecture

~/.config/superpowers/           # Personal repo (user-owned, git-tracked)
  ├── .git/
  ├── skills/                    # Personal skills (shadow core when names match)
  └── conversation-archive/      # Migrated from ~/.clank

${CLAUDE_PLUGIN_ROOT}/skills/    # Core skills (read-only, from plugin)

Changes

Core System:

  • Auto-setup script creates personal repo with git
  • SessionStart hook runs setup and offers GitHub repo creation
  • Tool paths injected via hook (no env var needed)

Skills:

  • Renamed creating-skillswriting-skills
  • Added setting-up-personal-superpowers - documents auto-setup
  • Added sharing-skills - workflow for contributing to core
  • Removed installing-skills (obsolete ~/.clank system)

Tools:

  • scripts/find-skills - Show all skills with descriptions, or filter by pattern
  • scripts/skill-run - Generic runner for any skill script (searches personal then core)
  • Removed redundant list-skills, skills-search from getting-started

Conversation Search:

  • Migrated from ~/.clank/ to ~/.config/superpowers/
  • Added --no-summaries flag for cost-free indexing
  • Centralized path resolution in src/paths.ts

Cleanup:

  • Removed all INDEX.md files (replaced by find-skills)
  • Bash 3.2 compatibility fixes

Testing

Tested in container with:

  • ✅ Auto-setup creates ~/.config/superpowers/ with git repo
  • find-skills shows all skills with descriptions
  • find-skills test filters by pattern
  • skill-run executes skill scripts from both personal and core
  • ✅ Personal skills shadow core skills correctly
  • ✅ Conversation search migrated (5,196 conversations, 10,614 exchanges)
  • ✅ Tool paths injected via SessionStart hook

Migration

Users with existing ~/.clank/ data can run:

~/.claude/plugins/cache/superpowers/skills/collaboration/remembering-conversations/tool/migrate-to-config.sh

This preserves old data for safety while copying to new location.

Summary by CodeRabbit

  • New Features

    • Automatic setup of a personal superpowers workspace under ~/.config/superpowers with Git tracking and optional GitHub guidance.
    • Two-tier skills system: personal skills shadow core skills.
    • Unified skill discovery via a new find-skills workflow and a generic skill-run tool.
    • Conversation indexing supports a --no-summaries mode; verification reports orphaned/outdated items.
  • Documentation

    • Overhauled README and getting-started guides for the new workflow and paths.
    • Added guides for setting up personal superpowers, writing, and sharing skills.
    • Removed outdated indexes and legacy installation docs.
  • Chores

    • Ignore .worktrees/ and .private-journal/.

obra added 8 commits October 10, 2025 14:01
Enables users to write and manage their own skills alongside core skills.

## Key Features:
- Auto-setup on first session: Creates ~/.config/superpowers/ git repo
- Two-tier skills: Personal skills shadow core skills when paths match
- Environment variable support: PERSONAL_SUPERPOWERS_DIR, XDG_CONFIG_HOME
- GitHub integration: Optional public repo creation for sharing skills
- CLI-agnostic: Works across Claude Code, Codex CLI, Gemini CLI (future)

## Changes:
- Added hooks/setup-personal-superpowers.sh - Auto-initializes personal repo
- Updated hooks/session-start.sh - Runs setup, offers GitHub repo creation
- Updated list-skills, skills-search - Search both personal and core skills
- Renamed skills/meta/creating-skills → writing-skills
- Added skills/meta/setting-up-personal-superpowers - Setup documentation
- Added skills/meta/sharing-skills - Contribution workflow
- Removed skills/meta/installing-skills - Old ~/.clank system
- Removed all INDEX.md files - Replaced by list-skills tool
- Updated README.md, getting-started - Document personal skills workflow

## Architecture:
~/.config/superpowers/skills/  # Personal (user-created, git-tracked)
${CLAUDE_PLUGIN_ROOT}/skills/  # Core (read-only, from plugin)

Search order: Personal first, core second (first match wins)
Updates conversation indexing and search to use the new personal superpowers
directory structure with environment variable support.

Changes:
- Added src/paths.ts for centralized directory resolution
- Updated db.ts, indexer.ts, verify.ts to use paths.ts
- Created migrate-to-config.sh for data migration from ~/.clank
- Updated all documentation references from ~/.clank to ~/.config/superpowers
- Database paths automatically updated during migration

Migration tested with 5,017 conversations and 6,385 exchanges.
Allows indexing conversations without AI summary generation.
Still generates embeddings locally for semantic search.

Usage: index-conversations --cleanup --no-summaries

Changes:
- Added --no-summaries flag parsing in index-cli.ts
- Updated indexConversations, indexSession, indexUnprocessed to accept noSummaries param
- Changed indexUnprocessed to check database instead of summary file existence
- Updated help text with new flag and examples

This enables indexing large conversation archives without API costs.
Consolidates skill discovery and adds generic runner for cross-platform compatibility.

Changes:
- Created scripts/find-skills: Unified tool (show all + filter by pattern)
  - Shows descriptions by default
  - Searches personal first, then core (shadowing)
  - Logs searches for gap analysis
  - Bash 3.2 compatible

- Created scripts/run: Generic runner for any skill script
  - Searches personal superpowers first, then core
  - Enables running arbitrary skill scripts without CLAUDE_PLUGIN_ROOT env var
  - Example: scripts/run skills/collaboration/remembering-conversations/tool/search-conversations

- Fixed bash 3.2 compatibility in list-skills, skills-search
  - Replaced associative arrays with newline-delimited lists
  - Works on macOS default bash (3.2) and Linux bash 4+

- Updated all documentation to reference scripts/find-skills
- Removed redundant wrapper scripts

This solves the CLAUDE_PLUGIN_ROOT environment variable issue - scripts
can now be called from anywhere without needing the env var set.
Consolidated into scripts/find-skills. The old tools in skills/getting-started/
are no longer needed - all functionality is now in scripts/find-skills which:
- Shows all skills with descriptions (default)
- Filters by pattern (when pattern provided)
- Searches both personal and core skills
- Works without CLAUDE_PLUGIN_ROOT environment variable
CLAUDE_PLUGIN_ROOT is a template variable for documentation, not a bash
environment variable. Updated getting-started to use explicit paths that
work in actual bash commands.

Changes:
- Use ~/.claude/plugins/cache/superpowers explicitly in bash examples
- Add helper to find plugin location if needed
- Update skill reading instructions to check both personal and core locations
The SessionStart hook now tells Claude the exact paths to find-skills
and skill-run tools. Since hooks have CLAUDE_PLUGIN_ROOT expanded,
the actual paths are injected into Claude's context.

This solves the problem of CLAUDE_PLUGIN_ROOT not being available
as a bash environment variable.
@coderabbitai
Copy link

coderabbitai bot commented Oct 11, 2025

Walkthrough

Introduces a personal superpowers directory at ~/.config/superpowers/ with git initialization and optional GitHub integration. Adds scripts for finding and running skills with personal-first shadowing of core skills. Refactors conversation tools to centralized path utilities and a new --no-summaries mode. Updates docs, removes old indices and legacy scripts, and adds a migration tool.

Changes

Cohort / File(s) Summary
Personal setup & session flow
hooks/session-start.sh, hooks/setup-personal-superpowers.sh
Adds robust per-user setup creating ~/.config/superpowers with git, outputs setup status, and optionally suggests GitHub repo creation; session-start now injects tool paths and conditional GitHub recommendation into context.
Skill discovery & execution tools
scripts/find-skills, scripts/skill-run
New Bash tools: find-skills lists skills (personal first, description-aware, pattern search with logging); skill-run executes a skill path resolving personal then core script locations.
Conversation tools: paths and flags
skills/collaboration/remembering-conversations/tool/src/paths.ts, .../db.ts, .../index-cli.ts, .../indexer.ts, .../verify.ts, .../index-conversations
Centralizes directory/DB path resolution via paths.ts; adds --no-summaries flag and propagates it through CLI and indexer; updates VerificationResult shape; removes local path helpers; help text updated.
Migration utility
skills/collaboration/remembering-conversations/tool/migrate-to-config.sh
New migration script to copy data from ~/.clank to ~/.config/superpowers with validation, prompts, DB path rewrite, and verification.
Documentation updates (personal skills model)
README.md, skills/getting-started/SKILL.md, skills/meta/setting-up-personal-superpowers/SKILL.md, skills/meta/sharing-skills/SKILL.md, skills/meta/writing-skills/SKILL.md
Updates and adds docs for two-tier skills, personal directory layout, setup flow, sharing workflow, and writing skills; version bumps in relevant SKILL.md files; commands updated to use find-skills.
Path reference updates
skills/collaboration/remembering-conversations/DEPLOYMENT.md, .../INDEXING.md
Replaces ~/.clank references with ~/.config/superpowers paths across archive/index locations.
Removed legacy discovery and indexes
skills/getting-started/list-skills, skills/getting-started/skills-search, skills/INDEX.md, skills/debugging/INDEX.md, skills/testing/INDEX.md, skills/meta/INDEX.md, skills/collaboration/INDEX.md
Deletes legacy listing/search scripts and multiple index markdown files.
Removed legacy install materials
skills/meta/installing-skills/CLAUDE_MD_PREAMBLE.md, skills/meta/installing-skills/SKILL.md, skills/meta/installing-skills/install.sh
Removes prior installation guide, preamble, and installer script.
Git ignore updates
.gitignore
Adds .worktrees/ and .private-journal/ to ignore list.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  participant User
  participant SessionStart Hook
  participant Setup Script
  participant GitHub CLI as gh
  participant Context

  User->>SessionStart Hook: Start session
  SessionStart Hook->>Setup Script: hooks/setup-personal-superpowers.sh
  Setup Script-->>SessionStart Hook: setup_output (dir, git init, github_cli_available)
  alt setup_failed=true
    SessionStart Hook->>Context: Append warning about setup failure
  else
    opt github_cli_available=true AND no origin
      SessionStart Hook->>Context: Add GitHub repo creation suggestion
    end
  end
  SessionStart Hook->>Context: Inject tool paths (find-skills, skill-run)
  Note over Context: Personal skills shadow core skills
Loading
sequenceDiagram
  autonumber
  participant User
  participant CLI as index-cli.ts
  participant Indexer as indexer.ts
  participant Paths as paths.ts
  participant DB
  participant Archive

  User->>CLI: index-conversations --no-summaries
  CLI->>Paths: getDbPath(), getArchiveDir()
  CLI->>Indexer: indexConversations(..., noSummaries=true)
  Indexer->>Archive: Read conversations (via Paths)
  alt noSummaries=true
    Indexer-->>User: Log "skipping summaries"
    Indexer->>DB: Upsert conversation metadata only
  else
    Indexer->>DB: Upsert + generate summaries
  end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~75 minutes

Poem

I tidied my burrow at ~/.config/superpowers/, hooray!
With git nibble-logs and skills to shadow the day.
I hop-find tricks, then run them with flair—
No summaries? Fine, I’ll breathe lighter air.
From clank to config, my trails realign—
A rabbit with repos, committing in time. 🐇✨

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 60.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title Check ✅ Passed The title clearly summarizes the primary feature of the pull request by stating the addition of a personal overlay system for superpowers, reflecting the main change in a concise and focused manner without extraneous detail.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch personal-superpowers

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

Personal skills should be version controlled. Added deployment checklist items:
- Commit skill to git
- Push to GitHub
- Consider sharing to core

This ensures personal skills are properly tracked and backed up.
@obra obra force-pushed the personal-superpowers branch 2 times, most recently from a4e1c2b to 803ce11 Compare October 11, 2025 04:14
@obra obra merged commit 35cec21 into main Oct 11, 2025
1 check was pending
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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
skills/collaboration/remembering-conversations/tool/src/index-cli.ts (1)

79-108: Wrap switch case declarations in a block.

Variables declared in switch cases without block scope can be accessed by other cases, which can lead to errors.

Apply this diff to wrap the rebuild case in a block:

     case 'rebuild':
+      {
         console.log('Rebuilding entire index...');
 
         // Delete database
         const dbPath = getDbPath();
         if (fs.existsSync(dbPath)) {
           fs.unlinkSync(dbPath);
           console.log('Deleted existing database');
         }
 
         // Delete all summary files
         const archiveDir = getArchiveDir();
         if (fs.existsSync(archiveDir)) {
           const projects = fs.readdirSync(archiveDir);
           for (const project of projects) {
             const projectPath = path.join(archiveDir, project);
             if (!fs.statSync(projectPath).isDirectory()) continue;
 
             const summaries = fs.readdirSync(projectPath).filter(f => f.endsWith('-summary.txt'));
             for (const summary of summaries) {
               fs.unlinkSync(path.join(projectPath, summary));
             }
           }
           console.log('Deleted all summary files');
         }
 
         // Re-index everything
         console.log('Re-indexing all conversations...');
         await indexConversations(undefined, undefined, concurrency, noSummaries);
         break;
+      }

Based on static analysis hints.

🧹 Nitpick comments (2)
skills/meta/sharing-skills/SKILL.md (1)

192-224: Consider markdown formatting improvements for consistency.

Static analysis flagged several minor formatting issues:

  1. Troubleshooting items (lines 209, 213, 217, 221): Use proper headings instead of bold emphasis for better document structure and navigation.

  2. Bare URLs (lines 210, 215): Wrap URLs in angle brackets or use markdown link syntax.

Apply this diff to improve markdown structure:

 ## After PR is Merged
 
 Once your PR is merged:
 
-**Option 1: Keep personal version**
+### Option 1: Keep personal version
 - Useful if you want to continue iterating locally
 - Your personal version will shadow the core version
 - Can later delete personal version to use core
 
-**Option 2: Delete personal version**
+### Option 2: Delete personal version
 ```bash
 # Remove from personal repo to use core version
 rm -rf ~/.config/superpowers/skills/your-skill-name/
 cd ~/.config/superpowers
 git add skills/your-skill-name/
 git commit -m "Remove your-skill-name (now in core)"
 git push

Troubleshooting

-"gh: command not found"
+### "gh: command not found"

-"Permission denied (publickey)"
+### "Permission denied (publickey)"

-"Skill already exists in core"
+### "Skill already exists in core"

  • You're creating a modified version
  • Consider different skill name or shadow the core version in personal repo

-PR merge conflicts
+### PR merge conflicts

  • Rebase on latest upstream: git fetch upstream && git rebase upstream/main
  • Resolve conflicts
  • Force push: git push -f origin your-branch

For the bare URLs, consider:

```diff
-Install GitHub CLI: https://cli.github.com/
+Install GitHub CLI: <https://cli.github.com/>

-Set up SSH: https://docs.github.com/en/authentication
+Set up SSH: <https://docs.github.com/en/authentication>
skills/meta/writing-skills/SKILL.md (1)

74-81: Add language identifier to fenced code block.

Static analysis flagged the code block as missing a language specification, which improves syntax highlighting and accessibility.

Apply this diff:

 **All skills are written to `~/.config/superpowers/skills/`:**
 
-```
+```text
 ~/.config/superpowers/skills/
   skill-name/
     SKILL.md              # Main reference (required)
     supporting-file.*     # Only if needed

</blockquote></details>

</blockquote></details>

<details>
<summary>📜 Review details</summary>

**Configuration used**: CodeRabbit UI

**Review profile**: CHILL

**Plan**: Pro

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between dee324d41705a235af987e39c7450ec54a532e24 and 803ce11b5d8ca5009822fb610b7cbb816d72df19.

</details>

<details>
<summary>⛔ Files ignored due to path filters (1)</summary>

* `skills/meta/writing-skills/graphviz-conventions.dot` is excluded by `!**/*.dot`

</details>

<details>
<summary>📒 Files selected for processing (29)</summary>

* `.gitignore` (1 hunks)
* `README.md` (5 hunks)
* `hooks/session-start.sh` (1 hunks)
* `hooks/setup-personal-superpowers.sh` (1 hunks)
* `scripts/find-skills` (1 hunks)
* `scripts/skill-run` (1 hunks)
* `skills/INDEX.md` (0 hunks)
* `skills/collaboration/INDEX.md` (0 hunks)
* `skills/collaboration/remembering-conversations/DEPLOYMENT.md` (4 hunks)
* `skills/collaboration/remembering-conversations/INDEXING.md` (4 hunks)
* `skills/collaboration/remembering-conversations/tool/index-conversations` (2 hunks)
* `skills/collaboration/remembering-conversations/tool/migrate-to-config.sh` (1 hunks)
* `skills/collaboration/remembering-conversations/tool/src/db.ts` (1 hunks)
* `skills/collaboration/remembering-conversations/tool/src/index-cli.ts` (5 hunks)
* `skills/collaboration/remembering-conversations/tool/src/indexer.ts` (9 hunks)
* `skills/collaboration/remembering-conversations/tool/src/paths.ts` (1 hunks)
* `skills/collaboration/remembering-conversations/tool/src/verify.ts` (1 hunks)
* `skills/debugging/INDEX.md` (0 hunks)
* `skills/getting-started/SKILL.md` (5 hunks)
* `skills/getting-started/list-skills` (0 hunks)
* `skills/getting-started/skills-search` (0 hunks)
* `skills/meta/INDEX.md` (0 hunks)
* `skills/meta/installing-skills/CLAUDE_MD_PREAMBLE.md` (0 hunks)
* `skills/meta/installing-skills/SKILL.md` (0 hunks)
* `skills/meta/installing-skills/install.sh` (0 hunks)
* `skills/meta/setting-up-personal-superpowers/SKILL.md` (1 hunks)
* `skills/meta/sharing-skills/SKILL.md` (1 hunks)
* `skills/meta/writing-skills/SKILL.md` (3 hunks)
* `skills/testing/INDEX.md` (0 hunks)

</details>

<details>
<summary>💤 Files with no reviewable changes (10)</summary>

* skills/meta/installing-skills/CLAUDE_MD_PREAMBLE.md
* skills/getting-started/skills-search
* skills/debugging/INDEX.md
* skills/INDEX.md
* skills/meta/INDEX.md
* skills/getting-started/list-skills
* skills/meta/installing-skills/install.sh
* skills/testing/INDEX.md
* skills/collaboration/INDEX.md
* skills/meta/installing-skills/SKILL.md

</details>

<details>
<summary>🧰 Additional context used</summary>

<details>
<summary>🧬 Code graph analysis (2)</summary>

<details>
<summary>skills/collaboration/remembering-conversations/tool/src/indexer.ts (2)</summary><blockquote>

<details>
<summary>skills/collaboration/remembering-conversations/tool/src/paths.ts (2)</summary>

* `getExcludeConfigPath` (54-56)
* `getArchiveDir` (28-35)

</details>
<details>
<summary>skills/collaboration/remembering-conversations/tool/src/db.ts (1)</summary>

* `initDatabase` (21-70)

</details>

</blockquote></details>
<details>
<summary>skills/collaboration/remembering-conversations/tool/src/index-cli.ts (2)</summary><blockquote>

<details>
<summary>skills/collaboration/remembering-conversations/tool/src/indexer.ts (3)</summary>

* `indexSession` (199-267)
* `indexUnprocessed` (269-374)
* `indexConversations` (58-197)

</details>
<details>
<summary>skills/collaboration/remembering-conversations/tool/src/paths.ts (2)</summary>

* `getDbPath` (47-49)
* `getArchiveDir` (28-35)

</details>

</blockquote></details>

</details><details>
<summary>🪛 Biome (2.1.2)</summary>

<details>
<summary>skills/collaboration/remembering-conversations/tool/src/index-cli.ts</summary>

[error] 83-84: Other switch clauses can erroneously access this declaration.
Wrap the declaration in a block to restrict its access to the switch clause.

The declaration is defined in this switch clause:

Safe fix: Wrap the declaration in a block.


(lint/correctness/noSwitchDeclarations)

</details>

</details>
<details>
<summary>🪛 markdownlint-cli2 (0.18.1)</summary>

<details>
<summary>skills/meta/sharing-skills/SKILL.md</summary>

192-192: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)

---

197-197: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)

---

209-209: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)

---

210-210: Bare URL used

(MD034, no-bare-urls)

---

213-213: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)

---

215-215: Bare URL used

(MD034, no-bare-urls)

---

217-217: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)

---

221-221: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)

</details>
<details>
<summary>skills/meta/writing-skills/SKILL.md</summary>

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

(MD040, fenced-code-language)

</details>
<details>
<summary>README.md</summary>

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

(MD040, fenced-code-language)

</details>
<details>
<summary>skills/getting-started/SKILL.md</summary>

190-190: Bare URL used

(MD034, no-bare-urls)

</details>

</details>
<details>
<summary>🪛 Shellcheck (0.11.0)</summary>

<details>
<summary>skills/collaboration/remembering-conversations/tool/migrate-to-config.sh</summary>

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

(SC2034)

</details>

</details>

</details>

<details>
<summary>🔇 Additional comments (32)</summary><blockquote>

<details>
<summary>.gitignore (1)</summary><blockquote>

`1-2`: **LGTM!**

The ignore patterns for `.worktrees/` and `.private-journal/` are appropriate additions for the personal superpowers workspace, keeping development artifacts and personal notes out of version control.

</blockquote></details>
<details>
<summary>skills/collaboration/remembering-conversations/INDEXING.md (1)</summary><blockquote>

`28-28`: **LGTM!**

Path references consistently updated from `~/.clank` to `~/.config/superpowers/` throughout the documentation, aligning with the new personal superpowers directory structure.




Also applies to: 92-92, 104-104, 118-121

</blockquote></details>
<details>
<summary>skills/meta/setting-up-personal-superpowers/SKILL.md (1)</summary><blockquote>

`1-162`: **LGTM!**

Comprehensive and well-structured documentation for the personal superpowers setup. The coverage of automatic setup, GitHub integration, customization options, and troubleshooting provides a complete reference for users.

</blockquote></details>
<details>
<summary>skills/collaboration/remembering-conversations/tool/index-conversations (1)</summary><blockquote>

`25-36`: **LGTM!**

The `--no-summaries` flag is well-documented in the help text with clear explanation of its purpose (skip AI summary generation for free, fast indexing) and a practical usage example.

</blockquote></details>
<details>
<summary>skills/collaboration/remembering-conversations/DEPLOYMENT.md (1)</summary><blockquote>

`80-80`: **LGTM!**

Path references consistently updated from `~/.clank` to `~/.config/superpowers/` throughout the deployment documentation, maintaining alignment with the new directory structure.




Also applies to: 83-83, 193-193, 200-200, 224-224, 303-309

</blockquote></details>
<details>
<summary>skills/collaboration/remembering-conversations/tool/src/db.ts (1)</summary><blockquote>

`6-6`: **LGTM!**

Refactoring to use centralized `getDbPath()` from the shared paths module improves maintainability and follows the DRY principle. The behavior remains unchanged while eliminating duplicate path resolution logic.




Also applies to: 22-22

</blockquote></details>
<details>
<summary>skills/meta/writing-skills/SKILL.md (2)</summary><blockquote>

`2-2`: **LGTM!**

The rename from "Creating Skills" to "Writing Skills", version bump to 5.0.0, and explicit documentation of the personal skills location at `~/.config/superpowers/skills/` correctly reflect the new two-tier skills model introduced in this PR.




Also applies to: 5-5, 15-15

---

`574-577`: **LGTM!**

The deployment section correctly references git operations in `~/.config/superpowers/`, and the discovery workflow appropriately updates to use the `find-skills` tool, both aligning with the new personal superpowers overlay system.




Also applies to: 584-584

</blockquote></details>
<details>
<summary>scripts/find-skills (1)</summary><blockquote>

`1-142`: **LGTM! Well-designed skill discovery system.**

The implementation correctly handles:
- Personal-first shadowing with proper collision detection
- Dual-mode operation (list all vs. pattern filtering)
- Cross-platform compatibility (Bash 3.2+)
- Search logging for gap tracking
- Clear user feedback with descriptions

The pattern matching strategy searching both content and paths provides comprehensive discovery.

</blockquote></details>
<details>
<summary>hooks/setup-personal-superpowers.sh (1)</summary><blockquote>

`1-52`: **LGTM! Clean setup script with proper idempotency.**

The implementation correctly:
- Checks for existing setup before proceeding
- Creates a proper git structure with appropriate .gitignore patterns
- Provides clear output for downstream consumption (github_cli_available)
- Uses consistent path resolution with other scripts

The git initialization is well-structured for personal skill tracking and optional sharing.

</blockquote></details>
<details>
<summary>skills/collaboration/remembering-conversations/tool/src/verify.ts (1)</summary><blockquote>

`5-5`: **LGTM! Clean migration to centralized path utilities.**

The refactoring correctly consolidates path resolution logic by importing `getArchiveDir` from the shared `paths.ts` module instead of maintaining a local implementation. This improves maintainability and ensures consistent path handling across the toolset.




Also applies to: 22-22, 135-135

</blockquote></details>
<details>
<summary>hooks/session-start.sh (2)</summary><blockquote>

`4-27`: **LGTM! Robust setup and GitHub integration flow.**

The implementation correctly:
- Runs per-user setup with error capture
- Conditionally offers GitHub integration only when appropriate (CLI available, no remote exists)
- Handles setup failures gracefully with clear user guidance
- Maintains consistency with setup script's path resolution

The conditional logic properly avoids recommending GitHub when a remote already exists or setup failed.

---

`29-37`: **LGTM! Context injection properly structured.**

The JSON output correctly provides:
- Tool paths using `CLAUDE_PLUGIN_ROOT` for proper resolution
- Conditional GitHub recommendation based on setup outcome
- Clear directive to read getting-started documentation

The dynamic context appropriately guides the session initialization.

</blockquote></details>
<details>
<summary>scripts/skill-run (1)</summary><blockquote>

`1-54`: **LGTM! Clean runner with proper exec usage.**

The implementation correctly:
- Provides clear usage guidance
- Implements personal-first shadowing with proper fallback
- Uses `exec` for efficient process replacement (no wrapper process)
- Reports searched locations on failure for debugging

The script properly supports the two-tier skills model with transparent execution.

</blockquote></details>
<details>
<summary>README.md (1)</summary><blockquote>

`1-208`: **LGTM! Comprehensive documentation of the personal superpowers system.**

The README clearly explains:
- The two-tier skills model (personal + core)
- Setup and configuration with environment variables
- Skill discovery and execution workflows
- Directory structure and git integration
- Contributing patterns (personal → shared)

The documentation provides excellent guidance for users adopting the new personal superpowers workflow.

</blockquote></details>
<details>
<summary>skills/collaboration/remembering-conversations/tool/src/index-cli.ts (2)</summary><blockquote>

`21-27`: **LGTM! Clean --no-summaries flag implementation.**

The flag is properly:
- Parsed from command-line arguments
- Propagated to all indexing entry points (indexSession, indexUnprocessed, indexConversations)
- Consistent with the concurrency flag pattern

This enables faster indexing when summaries aren't needed.




Also applies to: 38-38, 42-42, 107-107, 112-112

---

`5-5`: **LGTM! Migration to centralized path utilities.**

The switch to `getDbPath()` and `getArchiveDir()` from the shared paths module ensures consistent path resolution across the conversation tooling.




Also applies to: 83-90

</blockquote></details>
<details>
<summary>skills/collaboration/remembering-conversations/tool/src/paths.ts (3)</summary><blockquote>

`12-23`: **LGTM! Well-structured path resolution.**

The three-tier precedence (PERSONAL_SUPERPOWERS_DIR → XDG_CONFIG_HOME/superpowers → ~/.config/superpowers) is logical and well-documented. The implementation correctly handles each case.

---

`28-35`: **LGTM! Good test override pattern.**

The TEST_ARCHIVE_DIR override is a clean pattern for testing without affecting user data. The path construction is correct.

---

`40-56`: **LGTM! Clean path construction.**

All three functions (`getIndexDir`, `getDbPath`, `getExcludeConfigPath`) are straightforward and correctly build paths relative to the superpowers directory. Good separation of concerns.

</blockquote></details>
<details>
<summary>skills/getting-started/SKILL.md (2)</summary><blockquote>

`1-14`: **LGTM! Clear introduction to the two-library system.**

The version bump to 3.0.0 is appropriate for the personal skills feature. The explanation of core vs personal skills and shadowing behavior is clear and concise.

---

`16-76`: **LGTM! Workflow updates are clear and consistent.**

The updated workflows correctly reference the find-skills script and consistently explain the personal-first, then core lookup order. All path references are accurate.

</blockquote></details>
<details>
<summary>skills/collaboration/remembering-conversations/tool/src/indexer.ts (10)</summary><blockquote>

`9-9`: **LGTM! Centralized path imports.**

Correctly imports the centralized path utilities from the new paths module.

---

`31-31`: **LGTM! Using centralized exclude config path.**

Correctly uses `getExcludeConfigPath()` from the centralized paths module instead of hard-coded path construction.

---

`58-72`: **LGTM! Well-integrated noSummaries parameter.**

The `noSummaries` parameter is correctly added with a sensible default (`false`), and the early logging provides clear feedback when running in no-summaries mode.

---

`76-76`: **LGTM! Using centralized archive directory.**

Correctly uses `getArchiveDir()` from the centralized paths module. The inline comment is helpful for reviewers.

---

`147-169`: **LGTM! Correct conditional summary generation.**

The conditional logic correctly skips summary generation when `noSummaries` is `true` and provides clear logging in both cases. The parallel batch processing for summaries (when enabled) is maintained.

---

`199-204`: **LGTM! Consistent parameter addition.**

The `noSummaries` parameter is consistently added to `indexSession`, and the centralized path function is correctly used.

---

`239-245`: **LGTM! Correct conditional logic for session indexing.**

The conditional correctly checks both `!noSummaries` and `!fs.existsSync(summaryPath)` to avoid regenerating existing summaries and to respect the noSummaries flag.

---

`269-278`: **LGTM! Consistent implementation across indexing functions.**

The `noSummaries` parameter, logging, and centralized path function usage are consistent with the other indexing functions.

---

`308-312`: **LGTM! Good optimization with database check.**

Checking if a conversation is already indexed in the database before processing is a sensible optimization that prevents redundant work.

---

`337-358`: **LGTM! Consistent conditional summary generation.**

The conditional logic for batch processing summaries matches the pattern in `indexConversations`, correctly skipping when `noSummaries` is `true` and providing clear logging.

</blockquote></details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->

Comment on lines 177 to +187
```
~/.config/superpowers/ # (or your custom location)
├── .git/ # Git repository
├── .gitignore # Ignores logs and indexes
├── README.md # About your personal superpowers
├── skills/ # Your personal skills
│ └── your-skill/
│ └── SKILL.md
├── search-log.jsonl # Failed skill searches (not tracked)
└── conversation-index/ # Indexed conversations (not tracked)
```
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Add language specifier to code block.

The code block at line 177 is missing a language specifier for proper syntax highlighting.

Apply this diff:

-```
+```text
 ~/.config/superpowers/        # (or your custom location)
 ├── .git/                     # Git repository
 ├── .gitignore                # Ignores logs and indexes

Based on static analysis hints.

🧰 Tools
🪛 markdownlint-cli2 (0.18.1)

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

(MD040, fenced-code-language)

🤖 Prompt for AI Agents
In README.md around lines 177 to 187, the shown code block lacks a language
specifier; update the opening code fence from ``` to ```text so the block begins
with ```text and the rest of the snippet remains unchanged, ensuring proper
syntax/highlight rendering.

Comment on lines +107 to +111
if [[ -f "$OLD_INDEX/db.sqlite" ]]; then
old_size=$(stat -f%z "$OLD_INDEX/db.sqlite" 2>/dev/null || stat --format=%s "$OLD_INDEX/db.sqlite" 2>/dev/null)
new_size=$(stat -f%z "$NEW_INDEX/db.sqlite" 2>/dev/null || stat --format=%s "$NEW_INDEX/db.sqlite" 2>/dev/null)
echo " ✓ Database migrated (${new_size} bytes)"
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 | 🟡 Minor

Remove unused variable or add size comparison.

old_size is assigned but never used. Either remove it or enhance the verification by comparing old and new database sizes.

Apply this diff to remove the unused variable:

 if [[ -f "$OLD_INDEX/db.sqlite" ]]; then
-    old_size=$(stat -f%z "$OLD_INDEX/db.sqlite" 2>/dev/null || stat --format=%s "$OLD_INDEX/db.sqlite" 2>/dev/null)
     new_size=$(stat -f%z "$NEW_INDEX/db.sqlite" 2>/dev/null || stat --format=%s "$NEW_INDEX/db.sqlite" 2>/dev/null)
     echo "  ✓ Database migrated (${new_size} bytes)"
 fi

Or add a comparison:

 if [[ -f "$OLD_INDEX/db.sqlite" ]]; then
     old_size=$(stat -f%z "$OLD_INDEX/db.sqlite" 2>/dev/null || stat --format=%s "$OLD_INDEX/db.sqlite" 2>/dev/null)
     new_size=$(stat -f%z "$NEW_INDEX/db.sqlite" 2>/dev/null || stat --format=%s "$NEW_INDEX/db.sqlite" 2>/dev/null)
-    echo "  ✓ Database migrated (${new_size} bytes)"
+    if [[ "$old_size" -eq "$new_size" ]]; then
+        echo "  ✓ Database migrated (${new_size} bytes)"
+    else
+        echo "  ⚠️  Database size mismatch: old=$old_size, new=$new_size"
+        exit 1
+    fi
 fi

Based on static analysis hints.

🧰 Tools
🪛 Shellcheck (0.11.0)

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

(SC2034)

🤖 Prompt for AI Agents
In skills/collaboration/remembering-conversations/tool/migrate-to-config.sh
around lines 107 to 111, the variable old_size is assigned but never used;
remove the old_size assignment and any related unused code, leaving only the
new_size computation and the echo reporting the migrated database size (or, if
you prefer verification, replace the unused assignment with a size comparison
check that verifies new_size differs from old_size and fail/warn if not).

Want a skill that doesn't exist? Edit skills/REQUESTS.md (at ${CLAUDE_PLUGIN_ROOT}/skills/REQUESTS.md)
**Want a skill that doesn't exist?**
- Write it yourself (see skills/meta/writing-skills) and share it!
- Or open an issue at https://github.com/obra/superpowers/issues
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Fix bare URL formatting.

The bare URL should be wrapped in angle brackets or converted to a proper markdown link for better readability and compliance with markdown best practices.

Apply this diff:

-- Or open an issue at https://github.com/obra/superpowers/issues
+- Or open an issue at <https://github.com/obra/superpowers/issues>

Alternatively, you can use a markdown link:

-- Or open an issue at https://github.com/obra/superpowers/issues
+- Or [open an issue](https://github.com/obra/superpowers/issues)
📝 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
- Or open an issue at https://github.com/obra/superpowers/issues
- Or open an issue at <https://github.com/obra/superpowers/issues>
Suggested change
- Or open an issue at https://github.com/obra/superpowers/issues
- Or [open an issue](https://github.com/obra/superpowers/issues)
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)

190-190: Bare URL used

(MD034, no-bare-urls)

🤖 Prompt for AI Agents
In skills/getting-started/SKILL.md around line 190, the bare URL
"https://github.com/obra/superpowers/issues" should be formatted; replace the
plain URL with either an angle-bracketed URL like
<https://github.com/obra/superpowers/issues> or convert it to a markdown link
such as [open an issue](https://github.com/obra/superpowers/issues) so the line
reads e.g. "Or open an issue at <https://github.com/obra/superpowers/issues>" or
"Or open an issue at [open an
issue](https://github.com/obra/superpowers/issues)".

obra added a commit that referenced this pull request Oct 11, 2025
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
@coderabbitai coderabbitai bot mentioned this pull request Oct 11, 2025
9 tasks
EthanJStark pushed a commit to EthanJStark/superpowers that referenced this pull request Dec 16, 2025
Add personal superpowers overlay system
EthanJStark pushed a commit to EthanJStark/superpowers that referenced this pull request Dec 16, 2025
Documents all changes since v1.0.0:
- Skills repository separation (breaking change)
- New problem-solving and research skills (PR obra#1)
- Personal superpowers system (PR obra#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
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.

3 participants