-
-
Notifications
You must be signed in to change notification settings - Fork 3k
Add native Cursor IDE integration #271
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
📝 WalkthroughWalkthroughAdds Cursor Agent Skills integration: a new Node.js CLI (install/list/uninstall/update), package manifest, .gitignore additions, and comprehensive Cursor installation and README docs. No runtime code paths or public APIs are modified. (≤50 words) Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant CLI as superpowers-cursor CLI
participant Cursor as Cursor App/Project
participant Skills as skills-core
participant Git as Git/GitHub
participant FS as Filesystem/OS
User->>CLI: run install (global/local)
CLI->>Cursor: verify Cursor installed & Nightly channel
CLI->>Skills: discover available skills
CLI->>Git: clone or fetch/pull when repo-based
Git-->>CLI: repo contents / update status
CLI->>FS: copy files / create symlinks (or junctions on Windows)
FS-->>Cursor: expose skills via symlinks in Cursor skills dir
CLI-->>User: display installed/linked skills and next steps
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. 📜 Recent review detailsConfiguration used: defaults Review profile: CHILL Plan: Pro 📒 Files selected for processing (1)
🧰 Additional context used🪛 LanguageTooldocs/README.cursor.md[style] ~114-~114: Consider using a different adverb to strengthen your wording. (COMPLETELY_ENTIRELY) 🔇 Additional comments (1)
✏️ Tip: You can disable this entire section by setting Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 7
🤖 Fix all issues with AI agents
In @.cursor/cli.js:
- Around line 174-180: The fallback using fs.cpSync in the try/catch (invoking
execSync then fs.cpSync with REPO_ROOT and targetDir) risks runtime errors on
Node <16.7; either replace the fallback with a cross-platform Node copy
implementation (e.g., use fs-extra.copySync or implement a recursive copy using
fs.promises and symlink handling) and import/use that API instead of fs.cpSync,
or update package.json engines to require a Node version that supports fs.cpSync
(>=16.7, preferably >=18 to match ora v8) and bump the project docs; ensure you
update references in .cursor/cli.js to call the new copy helper (or
fs-extra.copySync) and remove direct fs.cpSync usage to maintain compatibility
with Node 14–16.6 if you choose the library approach.
- Around line 118-137: The removeLinkedSkills function uses
entryReal.startsWith(skillsReal), which can false-match similar prefixes;
replace that check with a robust path containment test (e.g., compute
path.relative(skillsReal, entryReal) and ensure it does not start with '..' and
is not equal to '..' or use skillsReal+path.sep and check
entryReal.startsWith(that) or check equality) so only true child paths of
skillsReal (or the same path) trigger removal; update the condition that
currently references entryReal and skillsReal (and uses getRealPathSafe) to use
the safer containment logic and preserve existing try/catch removal behavior.
- Around line 83-99: The prefix check using linkReal.startsWith(targetReal) can
produce false positives when paths share a prefix but are not actually within
the target directory; change the logic in the block handling directory links
(the code referencing linkReal, targetReal, getRealPathSafe, and fs.rmSync) to
verify containment by either comparing equality or ensuring linkReal starts with
targetReal plus a path separator (use Node's path.sep) or by using path.relative
and confirming the relative path does not start with '..' (and is not equal to
'' for edge cases); update the condition accordingly so only true subpaths of
targetReal are removed.
In @.cursor/INSTALL.md:
- Around line 158-162: The fenced code block showing symlink output is missing a
language specifier; update the block around the lines containing "brainstorming
-> /Users/you/.cursor/..." and "systematic-debugging -> /Users/you/.cursor/..."
to use a non-executable language tag such as text or plaintext (e.g., change ```
to ```text) so the markdown linter recognizes it as plain output.
In @.cursor/package.json:
- Around line 27-34: The package.json currently lists "engines": {"node":"
>=14.0.0"} but depends on "ora": "^8.0.1" which requires Node 18+, so either
update the engines entry to "node": ">=18.0.0" to reflect ora v8 requirement, or
change the dependency to a Node 14-compatible version (e.g., set "ora":
"^6.0.0") in the dependencies block; update package.json accordingly and
regenerate lockfile (npm/yarn/pnpm) so the lock reflects the chosen resolution.
In `@docs/README.cursor.md`:
- Around line 103-108: Update the two incorrect relative links in
README.cursor.md: replace the ".cursor/INSTALL.md" and ".cursor/README.md" paths
with paths that go up one level (e.g., "../.cursor/INSTALL.md" and
"../.cursor/README.md") so the links resolve correctly from the docs/ directory.
- Line 123: Update the relative link in docs/README.cursor.md: replace the
current link target ".cursor/INSTALL.md#troubleshooting" with
"../.cursor/INSTALL.md#troubleshooting" so the "Full troubleshooting:
[INSTALL.md](...)" reference correctly points from docs/ to the .cursor
INSTALL.md file.
🧹 Nitpick comments (4)
.cursor/cli.js (2)
58-69: Handle cancelled prompts gracefully.When a user cancels a
promptsdialog (e.g., via Ctrl+C), the response object may be empty ({}), causingresponse.readyto beundefined. The current check!response.readyhandles this, but it silently exits with code 0, which might be confusing. Consider explicitly detecting cancellation for clearer messaging.Proposed enhancement
const response = await prompts({ type: 'confirm', name: 'ready', message: 'Have you enabled Nightly channel?', initial: false }); - if (!response.ready) { + if (response.ready === undefined) { + // User cancelled the prompt + process.exit(0); + } + + if (!response.ready) { log.info('Please enable Nightly channel first, then run this command again'); process.exit(0); }
488-518: Same path prefix matching pattern.Lines 494 and 514 use the same
startsWithpattern. Consider extracting a helper function to centralize the path containment check and apply the fix consistently.Proposed helper function
function isPathWithin(childPath, parentPath) { if (!childPath || !parentPath) return false; return childPath === parentPath || childPath.startsWith(parentPath + path.sep); }Then use
isPathWithin(linkReal, skillsDirReal)andisPathWithin(entryReal, skillsDirReal)throughout.docs/README.cursor.md (2)
73-91: Add language specifiers to code blocks.The code blocks showing directory structures should specify a language for proper syntax highlighting and markdown compliance.
Based on static analysis hints.
📝 Proposed fix
**Global install:** -``` +```text ~/.cursor/ ├── superpowers/ # Full repo │ └── skills/ # All skills └── skills/ # Symlinks (Cursor discovers these) ├── brainstorming -> ../superpowers/skills/brainstorming └── ...Local install:
-+text
your-project/
├── .cursor-superpowers/ # Full repo
└── .cursor/
└── skills/ # Symlinks
├── brainstorming -> ../../.cursor-superpowers/skills/brainstorming
└── ...
66-69: Add language specifier to code block.The code block on line 67 should specify
bashfor proper syntax highlighting.Based on static analysis hints.
📝 Proposed fix
## Requirements -- **Cursor IDE** with **Nightly channel** (Settings → Beta → Update Channel → Nightly) +```bash +# Requirements: +``` + +- **Cursor IDE** with **Nightly channel** (Settings → Beta → Update Channel → Nightly) - **Node.js** 14.0.0+Wait, that doesn't make sense. Let me re-read the static analysis hint. It says line 67-67 has a fenced code block without language. But looking at the code, line 67 is just text:
- **Cursor IDE** with **Nightly channel**...Let me recount. The static analysis says:
- 67-67: Fenced code blocks should have a language specified
- 78-78: Fenced code blocks should have a language specified
- 88-88: Fenced code blocks should have a language specified
Looking at the actual line numbers:
- Line 67 is in Requirements section - not a code block
- Line 78 is in the middle of the Global install code block
- Line 88 is in the middle of the Local install code block
I think the linter is flagging the code blocks that START before these lines. Let me look again:
Line 74-81 is the first code block (starts at 74)
Line 84-91 is the second code block (starts at 84)Ah, I see. The linter might be reporting the line where the issue is most significant or the middle of the block. But I already covered these in my earlier comment about lines 73-91.
Actually, wait. Let me look more carefully at what's on line 67. In the annotated code:
## Requirements - **Cursor IDE** with **Nightly channel** (Settings → Beta → Update Channel → Nightly)So line 67 is blank. This is confusing. Let me look at the raw markdown more carefully. The issue says line 67-67.
Looking at the structure again, there might be a discrepancy between how I'm reading it and how the linter is counting lines. But based on what I see, the only code blocks are the directory structure ones which I already addressed.
Let me skip this since I already covered the architecture section code blocks.
[scratchpad_end] -->
📜 Review details
Configuration used: defaults
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
.cursor/package-lock.jsonis excluded by!**/package-lock.json
📒 Files selected for processing (7)
.cursor/.gitignore.cursor/INSTALL.md.cursor/README.md.cursor/cli.js.cursor/package.jsonREADME.mddocs/README.cursor.md
🧰 Additional context used
🧬 Code graph analysis (1)
.cursor/cli.js (2)
skills/writing-skills/render-graphs.js (2)
path(17-17)fs(16-16).opencode/plugin/superpowers.js (1)
superpowersSkillsDir(21-21)
🪛 LanguageTool
docs/README.cursor.md
[style] ~114-~114: Consider using a different adverb to strengthen your wording.
Context: ...nel (Settings → Beta) 2. Restart Cursor completely 3. Check: `npx github:obra/superpowers/...
(COMPLETELY_ENTIRELY)
🪛 markdownlint-cli2 (0.18.1)
docs/README.cursor.md
67-67: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
78-78: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
88-88: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
116-116: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
119-119: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
134-134: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
.cursor/INSTALL.md
67-67: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
78-78: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
88-88: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
116-116: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
119-119: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
134-134: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
172-172: Bare URL used
(MD034, no-bare-urls)
173-173: Bare URL used
(MD034, no-bare-urls)
🔇 Additional comments (10)
.cursor/.gitignore (1)
1-3: LGTM!Standard ignore entries for a Node.js package: dependencies, logs, and macOS metadata files.
.cursor/README.md (1)
1-261: LGTM!Comprehensive README with clear installation instructions, feature highlights, architecture diagrams, and troubleshooting guidance. The documentation aligns well with the CLI implementation and cross-references the shared
lib/skills-core.jsmodule appropriately..cursor/cli.js (6)
1-24: LGTM!Clean ES module setup with proper
__dirnamederivation and well-structured logging utilities using chalk for consistent visual feedback.
25-46: LGTM!Platform-specific Cursor detection covers common installation paths. The troubleshooting documentation appropriately guides users with custom installations to use manual setup.
285-293: LGTM!Good practice to automatically update
.gitignoreto exclude the local installation directory. The check for existing entry prevents duplicate additions.
344-361: LGTM!Good handling of user cancellation in the interactive prompt - the check for
!installTypeon line 358 properly handles when the user exits the selection dialog.
372-437: LGTM!The uninstall command properly confirms with the user before removing installations and cleans up both symlinks/junctions and the installation directory.
536-589: LGTM!The update command correctly checks for git repository presence, fetches updates, and provides clear feedback. Error handling catches failures gracefully with informative messages.
.cursor/INSTALL.md (1)
344-347: Minor: Use markdown links instead of bare URLs.The static analysis flagged bare URLs. Convert them to proper markdown link syntax for consistency.
Proposed fix
## Getting Help -- **Documentation**: [Cursor Skills](https://cursor.com/cn/docs/context/skills) | [Superpowers](https://github.com/obra/superpowers) +- **Documentation**: [Cursor Skills](https://cursor.com/cn/docs/context/skills) | [Superpowers](https://github.com/obra/superpowers) - **Issues**: [GitHub Issues](https://github.com/obra/superpowers/issues) - **Discussions**: [GitHub Discussions](https://github.com/obra/superpowers/discussions)Note: The existing links already use proper markdown syntax. The static analysis hint at lines 172-173 appears to be a false positive since those lines contain the word "CLI" output examples, not the "Getting Help" section. The documentation looks good.
README.md (1)
29-43: LGTM! Clean integration of Cursor installation section.The new Cursor installation section is well-structured and consistent with the existing platform-specific installation sections. The NPX command format and requirements are clearly stated.
✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.
- Fix path prefix matching in createSymlink and removeLinkedSkills (add path.sep check) - Add Node.js version compatibility: require 18.0.0+ to match ora v8 requirement - Add copyDirRecursive fallback for older Node.js versions - Fix markdown code block language specifier in INSTALL.md - Fix relative link paths in docs/README.cursor.md - Update documentation to reflect Node.js 18.0.0+ requirement
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 7
🤖 Fix all issues with AI agents
In @.cursor/cli.js:
- Around line 536-564: The list command incorrectly treats paths like
"/path/skills-custom" as inside the skills dir because it uses
linkReal.startsWith(skillsDirReal) and entryReal.startsWith(skillsDirReal)
without a separator check; update the checks in the discoveredSkills loop and
the customSkills loop to require the skillsDirReal boundary by either comparing
equality or testing startsWith(skillsDirReal + path.sep) (ensure both paths are
normalized via getRealPathSafe or path.resolve beforehand), e.g. replace
linkReal.startsWith(skillsDirReal) and entryReal.startsWith(skillsDirReal) with
a safe-boundary check (linkReal === skillsDirReal ||
linkReal.startsWith(skillsDirReal + path.sep)) and similarly for entryReal so
only true child paths are considered linked to superpowers.
In @.cursor/INSTALL.md:
- Around line 179-181: The fenced code block containing the example user query
"Let's brainstorm ideas for improving our CI/CD pipeline" is missing a language
specifier; update that fenced block to use the markdown language tag "text"
(i.e., change the opening fence from ``` to ```text) so the example is
lint-compliant.
In @.cursor/README.md:
- Around line 183-190: Update the fenced code block that contains the module
diagram listing lib/skills-core.js and its functions (extractFrontmatter,
findSkillsInDir, stripFrontmatter, resolveSkillPath, checkForUpdates) to include
a language specifier by changing the opening fence from ``` to ```text so the
block becomes ```text and ensure the closing fence remains ```; this will mark
the diagram as plain text for proper rendering.
- Around line 78-91: Add a language specifier to the fenced code block
containing the directory diagram (the block that starts with "~/.cursor/" and
lists superpowers/ and skills/ entries) by changing the opening fence from ```
to ```text and keeping the closing fence; ensure the block begins with ```text
and ends with ``` so the diagram is rendered as plain text.
In `@docs/README.cursor.md`:
- Line 69: Documentation lists Node.js 14.0.0+ but project requirements and
dependencies need Node.js 18+, so update the Node.js requirement in
docs/README.cursor.md (the line showing "**Node.js** 14.0.0+") to "**Node.js**
18.0.0+" (or ">=18.0.0") to match package.json's "node": ">=18.0.0" and
.cursor/INSTALL.md and note the CLI dependency (ora v8) requires Node 18+.
- Around line 34-46: Update the fenced code blocks in README.cursor.md to
include the language specifier "text" for the plain text examples; specifically
change the blocks showing the agent flow (“Let’s build a new feature for user
authentication” → Agent uses ...) and the Manual Invocation block (the `/ →
"brainstorming" → Select` example) to start with ```text instead of ``` so they
satisfy markdownlint.
- Around line 74-91: Update the two fenced directory-diagram code blocks so they
include the language specifier "text" (change the opening fences from ``` to
```text) for both the ~/.cursor/ diagram and the your-project/ local install
diagram, leaving the closing ``` fences unchanged; ensure spacing and content of
the diagrams are preserved exactly while only adding the "text" specifier.
🧹 Nitpick comments (1)
.cursor/cli.js (1)
607-635: Update command relies on parsinggit statusoutput.The check
status.includes('behind')at line 622 is fragile as it depends on the English locale of git output. Users with non-English git configurations may see different text, causing the update detection to fail silently.Consider using rev-list for locale-independent check
// Fetch latest execSync('git fetch origin', { cwd: targetDir, stdio: 'pipe' }); - // Check if behind - const status = execSync('git status -uno', { cwd: targetDir, encoding: 'utf8' }); - - if (status.includes('behind')) { + // Check if behind using locale-independent method + const behindCount = execSync( + 'git rev-list HEAD..@{u} --count', + { cwd: targetDir, encoding: 'utf8' } + ).trim(); + + if (parseInt(behindCount, 10) > 0) { spinner.text = 'Updates available, pulling...';
📜 Review details
Configuration used: defaults
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (5)
.cursor/INSTALL.md.cursor/README.md.cursor/cli.js.cursor/package.jsondocs/README.cursor.md
🚧 Files skipped from review as they are similar to previous changes (1)
- .cursor/package.json
🧰 Additional context used
🧬 Code graph analysis (1)
.cursor/cli.js (2)
skills/writing-skills/render-graphs.js (2)
path(17-17)fs(16-16).opencode/plugin/superpowers.js (1)
superpowersSkillsDir(21-21)
🪛 LanguageTool
docs/README.cursor.md
[style] ~114-~114: Consider using a different adverb to strengthen your wording.
Context: ...nel (Settings → Beta) 2. Restart Cursor completely 3. Check: `npx github:obra/superpowers/...
(COMPLETELY_ENTIRELY)
🪛 markdownlint-cli2 (0.18.1)
docs/README.cursor.md
34-34: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
43-43: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
74-74: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
84-84: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
.cursor/README.md
78-78: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
183-183: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
.cursor/INSTALL.md
179-179: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🔇 Additional comments (10)
.cursor/cli.js (4)
26-43: LGTM - Good fallback for Node.js compatibility.The
copyDirRecursivefunction properly handles older Node.js versions wherefs.cpSyncis unavailable. The implementation correctly creates directories recursively and copies files.
99-143: Path prefix matching fix looks correct.The updated logic at lines 112-115 properly checks for exact match or path separator to prevent false positives like
/path/skillsmatching/path/skills-custom. This addresses the previous review feedback.
145-170: Path prefix matching fix applied consistently.The
removeLinkedSkillsfunction now correctly uses the samepath.sepcheck pattern at lines 157-160, consistent with the fix increateSymlink.
172-254: Global installation flow is well-structured.The
installGlobalfunction handles existing installations gracefully with user prompts, uses the sharedskillsCore.findSkillsInDirfor discovery, and provides clear feedback via spinners and success counts..cursor/INSTALL.md (2)
158-162: Previous review feedback addressed.The code block now correctly includes the
textlanguage specifier.
1-353: Comprehensive installation documentation.The guide covers all essential aspects: prerequisites, multiple installation methods (NPX, clone, manual), platform-specific instructions (including Windows PowerShell), verification steps, troubleshooting, and advanced configuration. Well organized and user-friendly.
docs/README.cursor.md (2)
105-108: Previous review feedback addressed.The relative link paths have been corrected to use
../.cursor/prefix, properly resolving from thedocs/directory.
123-123: Previous review feedback addressed.The troubleshooting link path has been corrected.
.cursor/README.md (2)
119-124: Node.js requirement is correctly documented.This file correctly states Node.js 18.0.0+ requirement, consistent with the package.json engine specification.
1-261: Well-structured documentation with good coverage.The README provides comprehensive guidance including quick install, feature highlights, usage examples, architecture details, troubleshooting, platform comparisons, and development instructions. The shared core module documentation effectively communicates the cross-platform architecture.
✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.
- Add path.sep check in list command for skill link detection - Add path.sep check in custom skills detection - Fix markdown code block language specifier in INSTALL.md
- Add text language specifier to all plain text code blocks - Fix Node.js version requirement in docs/README.cursor.md (14.0.0+ → 18.0.0+) - Ensure all documentation consistently requires Node.js 18.0.0+
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🤖 Fix all issues with AI agents
In `@docs/README.cursor.md`:
- Line 107: The "Cursor Skills" link text and href mismatch: the visible text
shows cursor.com/docs/context/skills but the anchor points to
https://cursor.com/cn/docs/context/skills; update the anchor href for the
"Cursor Skills" entry so it matches the displayed URL by changing it to
https://cursor.com/docs/context/skills.
♻️ Duplicate comments (1)
docs/README.cursor.md (1)
74-91: Add language specifiers to architecture diagrams.The directory structure code blocks are missing language specifiers, which markdownlint flags. Add
textto both blocks.📝 Proposed fix
**Global install:** -``` +```text ~/.cursor/ ├── superpowers/ # Full repo │ └── skills/ # All skills └── skills/ # Symlinks (Cursor discovers these) ├── brainstorming -> ../superpowers/skills/brainstorming └── ... ``` **Local install:** -``` +```text your-project/ ├── .cursor-superpowers/ # Full repo └── .cursor/ └── skills/ # Symlinks ├── brainstorming -> ../../.cursor-superpowers/skills/brainstorming └── ... ```
📜 Review details
Configuration used: defaults
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
.cursor/README.mddocs/README.cursor.md
🚧 Files skipped from review as they are similar to previous changes (1)
- .cursor/README.md
🧰 Additional context used
🪛 LanguageTool
docs/README.cursor.md
[style] ~114-~114: Consider using a different adverb to strengthen your wording.
Context: ...nel (Settings → Beta) 2. Restart Cursor completely 3. Check: `npx github:obra/superpowers/...
(COMPLETELY_ENTIRELY)
🪛 markdownlint-cli2 (0.18.1)
docs/README.cursor.md
74-74: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
84-84: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.
- Change /cn/docs to /docs (English version instead of Chinese)
- Add text language specifier to global and local install diagrams
|
Thanks so much for offering this up. I would love super powers to work cleanly inside of Cursor. This looks like there is a ton of code and prose that duplicates existing stuff. Is there a chance you could take a swing at the clean minimal version? |
|
great job, thank you ! Get-ChildItem ".cursor-superpowers/skills" -Directory | ForEach-Object {
$target = $_.FullName
$link = Join-Path ".cursor/skills" $_.Name
if (Test-Path $link) { Remove-Item $link }
cmd /c mklink /J "$link" "$target"
} |
Add native Cursor IDE integration for Superpowers using Agent Skills with one-command npx installation.
Motivation and Context
Cursor IDE now supports Agent Skills, an open standard for packaging reusable AI agent workflows. This PR adds native Cursor support to Superpowers, making it as easy to install as:
Why this is needed:
lib/skills-core.jsmodule for skill discovery and parsingHow Has This Been Tested?
Tested scenarios:
~/.cursor/superpowers).cursor-superpowers/)skillsCore.findSkillsInDir()Manual verification:
/command worksBreaking Changes
None. This is a new platform integration that doesn't affect existing Codex or OpenCode implementations.
Types of changes
Checklist
Additional context
Architecture
All three platforms now share the same core:
Key features:
npx github:obra/superpowers/.cursor installinstall,uninstall,list,updatecommandsFiles added:
.cursor/cli.js- NPX CLI using skills-core (592 lines).cursor/package.json- NPM dependencies.cursor/README.md- Usage documentation.cursor/INSTALL.md- Detailed installation guidedocs/README.cursor.md- Quick referenceREADME.mdupdated with Cursor installationImplementation highlights:
skillsCore.findSkillsInDir()for consistent skill discoveryskillsCore.extractFrontmatter()for metadata parsingRequirements:
Comparison with other platforms:
All platforms use the same
lib/skills-core.jsmodule for skill operations, ensuring consistent behavior across platforms.Summary by CodeRabbit
New Features
Documentation
Chores
✏️ Tip: You can customize this high-level summary in your review settings.