mirror of
https://github.com/obra/superpowers.git
synced 2026-04-24 10:29:03 +08:00
Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d2d6cf4852 | ||
|
|
394cf85013 | ||
|
|
31bbbe2dbb | ||
|
|
5fbefbd0a9 | ||
|
|
a0b9ecce2b | ||
|
|
772ec9f834 |
@@ -9,7 +9,7 @@
|
|||||||
{
|
{
|
||||||
"name": "superpowers",
|
"name": "superpowers",
|
||||||
"description": "Core skills library for Claude Code: TDD, debugging, collaboration patterns, and proven techniques",
|
"description": "Core skills library for Claude Code: TDD, debugging, collaboration patterns, and proven techniques",
|
||||||
"version": "4.3.0",
|
"version": "4.3.1",
|
||||||
"source": "./",
|
"source": "./",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "Jesse Vincent",
|
"name": "Jesse Vincent",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "superpowers",
|
"name": "superpowers",
|
||||||
"description": "Core skills library for Claude Code: TDD, debugging, collaboration patterns, and proven techniques",
|
"description": "Core skills library for Claude Code: TDD, debugging, collaboration patterns, and proven techniques",
|
||||||
"version": "4.3.0",
|
"version": "4.3.1",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "Jesse Vincent",
|
"name": "Jesse Vincent",
|
||||||
"email": "jesse@fsck.com"
|
"email": "jesse@fsck.com"
|
||||||
|
|||||||
18
.cursor-plugin/plugin.json
Normal file
18
.cursor-plugin/plugin.json
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"name": "superpowers",
|
||||||
|
"displayName": "Superpowers",
|
||||||
|
"description": "Core skills library: TDD, debugging, collaboration patterns, and proven techniques",
|
||||||
|
"version": "4.3.1",
|
||||||
|
"author": {
|
||||||
|
"name": "Jesse Vincent",
|
||||||
|
"email": "jesse@fsck.com"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/obra/superpowers",
|
||||||
|
"repository": "https://github.com/obra/superpowers",
|
||||||
|
"license": "MIT",
|
||||||
|
"keywords": ["skills", "tdd", "debugging", "collaboration", "best-practices", "workflows"],
|
||||||
|
"skills": "./skills/",
|
||||||
|
"agents": "./agents/",
|
||||||
|
"commands": "./commands/",
|
||||||
|
"hooks": "./hooks/hooks.json"
|
||||||
|
}
|
||||||
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -1,5 +1,6 @@
|
|||||||
# Ensure shell scripts always have LF line endings
|
# Ensure shell scripts always have LF line endings
|
||||||
*.sh text eol=lf
|
*.sh text eol=lf
|
||||||
|
hooks/session-start text eol=lf
|
||||||
|
|
||||||
# Ensure the polyglot wrapper keeps LF (it's parsed by both cmd and bash)
|
# Ensure the polyglot wrapper keeps LF (it's parsed by both cmd and bash)
|
||||||
*.cmd text eol=lf
|
*.cmd text eol=lf
|
||||||
|
|||||||
15
README.md
15
README.md
@@ -26,7 +26,8 @@ Thanks!
|
|||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
**Note:** Installation differs by platform. Claude Code has a built-in plugin system. Codex and OpenCode require manual setup.
|
**Note:** Installation differs by platform. Claude Code or Cursor have built-in plugin marketplaces. Codex and OpenCode require manual setup.
|
||||||
|
|
||||||
|
|
||||||
### Claude Code (via Plugin Marketplace)
|
### Claude Code (via Plugin Marketplace)
|
||||||
|
|
||||||
@@ -42,9 +43,13 @@ Then install the plugin from this marketplace:
|
|||||||
/plugin install superpowers@superpowers-marketplace
|
/plugin install superpowers@superpowers-marketplace
|
||||||
```
|
```
|
||||||
|
|
||||||
### Verify Installation
|
### Cursor (via Plugin Marketplace)
|
||||||
|
|
||||||
Start a new session and ask Claude to help with something that would trigger a skill (e.g., "help me plan this feature" or "let's debug this issue"). Claude should automatically invoke the relevant superpowers skill.
|
In Cursor Agent chat, install from marketplace:
|
||||||
|
|
||||||
|
```text
|
||||||
|
/plugin-add superpowers
|
||||||
|
```
|
||||||
|
|
||||||
### Codex
|
### Codex
|
||||||
|
|
||||||
@@ -66,6 +71,10 @@ Fetch and follow instructions from https://raw.githubusercontent.com/obra/superp
|
|||||||
|
|
||||||
**Detailed docs:** [docs/README.opencode.md](docs/README.opencode.md)
|
**Detailed docs:** [docs/README.opencode.md](docs/README.opencode.md)
|
||||||
|
|
||||||
|
### Verify Installation
|
||||||
|
|
||||||
|
Start a new session in your chosen platform and ask for something that should trigger a skill (for example, "help me plan this feature" or "let's debug this issue"). The agent should automatically invoke the relevant superpowers skill.
|
||||||
|
|
||||||
## The Basic Workflow
|
## The Basic Workflow
|
||||||
|
|
||||||
1. **brainstorming** - Activates before writing code. Refines rough ideas through questions, explores alternatives, presents design in sections for validation. Saves design document.
|
1. **brainstorming** - Activates before writing code. Refines rough ideas through questions, explores alternatives, presents design in sections for validation. Saves design document.
|
||||||
|
|||||||
@@ -1,5 +1,27 @@
|
|||||||
# Superpowers Release Notes
|
# Superpowers Release Notes
|
||||||
|
|
||||||
|
## v4.3.1 (2026-02-21)
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
**Cursor support**
|
||||||
|
|
||||||
|
Superpowers now works with Cursor's plugin system. Includes a `.cursor-plugin/plugin.json` manifest and Cursor-specific installation instructions in the README. The SessionStart hook output now includes an `additional_context` field alongside the existing `hookSpecificOutput.additionalContext` for Cursor hook compatibility.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
**Windows: Restored polyglot wrapper for reliable hook execution (#518, #504, #491, #487, #466, #440)**
|
||||||
|
|
||||||
|
Claude Code's `.sh` auto-detection on Windows was prepending `bash` to the hook command, breaking execution. The fix:
|
||||||
|
|
||||||
|
- Renamed `session-start.sh` to `session-start` (extensionless) so auto-detection doesn't interfere
|
||||||
|
- Restored `run-hook.cmd` polyglot wrapper with multi-location bash discovery (standard Git for Windows paths, then PATH fallback)
|
||||||
|
- Exits silently if no bash is found rather than erroring
|
||||||
|
- On Unix, the wrapper runs the script directly via `exec bash`
|
||||||
|
- Uses POSIX-safe `dirname "$0"` path resolution (works on dash/sh, not just bash)
|
||||||
|
|
||||||
|
This fixes SessionStart failures on Windows with spaces in paths, missing WSL, `set -euo pipefail` fragility on MSYS, and backslash mangling.
|
||||||
|
|
||||||
## v4.3.0 (2026-02-12)
|
## v4.3.0 (2026-02-12)
|
||||||
|
|
||||||
This fix should dramatically improve superpowers skills compliance and should reduce the chances of Claude entering its native plan mode unintentionally.
|
This fix should dramatically improve superpowers skills compliance and should reduce the chances of Claude entering its native plan mode unintentionally.
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
"hooks": [
|
"hooks": [
|
||||||
{
|
{
|
||||||
"type": "command",
|
"type": "command",
|
||||||
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/session-start.sh",
|
"command": "'${CLAUDE_PLUGIN_ROOT}/hooks/run-hook.cmd' session-start",
|
||||||
"async": false
|
"async": false
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,43 +1,46 @@
|
|||||||
: << 'CMDBLOCK'
|
: << 'CMDBLOCK'
|
||||||
@echo off
|
@echo off
|
||||||
REM ============================================================================
|
REM Cross-platform polyglot wrapper for hook scripts.
|
||||||
REM DEPRECATED: This polyglot wrapper is no longer used as of Claude Code 2.1.x
|
REM On Windows: cmd.exe runs the batch portion, which finds and calls bash.
|
||||||
REM ============================================================================
|
REM On Unix: the shell interprets this as a script (: is a no-op in bash).
|
||||||
REM
|
REM
|
||||||
REM Claude Code 2.1.x changed the Windows execution model for hooks:
|
REM Hook scripts use extensionless filenames (e.g. "session-start" not
|
||||||
|
REM "session-start.sh") so Claude Code's Windows auto-detection -- which
|
||||||
|
REM prepends "bash" to any command containing .sh -- doesn't interfere.
|
||||||
REM
|
REM
|
||||||
REM Before (2.0.x): Hooks ran with shell:true, using the system default shell.
|
|
||||||
REM This wrapper provided cross-platform compatibility by
|
|
||||||
REM being both a valid .cmd file (Windows) and bash script.
|
|
||||||
REM
|
|
||||||
REM After (2.1.x): Claude Code now auto-detects .sh files in hook commands
|
|
||||||
REM and prepends "bash " on Windows. This broke the wrapper
|
|
||||||
REM because the command:
|
|
||||||
REM "run-hook.cmd" session-start.sh
|
|
||||||
REM became:
|
|
||||||
REM bash "run-hook.cmd" session-start.sh
|
|
||||||
REM ...and bash cannot execute a .cmd file.
|
|
||||||
REM
|
|
||||||
REM The fix: hooks.json now calls session-start.sh directly. Claude Code 2.1.x
|
|
||||||
REM handles the bash invocation automatically on Windows.
|
|
||||||
REM
|
|
||||||
REM This file is kept for reference and potential backward compatibility.
|
|
||||||
REM ============================================================================
|
|
||||||
REM
|
|
||||||
REM Original purpose: Polyglot wrapper to run .sh scripts cross-platform
|
|
||||||
REM Usage: run-hook.cmd <script-name> [args...]
|
REM Usage: run-hook.cmd <script-name> [args...]
|
||||||
REM The script should be in the same directory as this wrapper
|
|
||||||
|
|
||||||
if "%~1"=="" (
|
if "%~1"=="" (
|
||||||
echo run-hook.cmd: missing script name >&2
|
echo run-hook.cmd: missing script name >&2
|
||||||
exit /b 1
|
exit /b 1
|
||||||
)
|
)
|
||||||
"C:\Program Files\Git\bin\bash.exe" -l "%~dp0%~1" %2 %3 %4 %5 %6 %7 %8 %9
|
|
||||||
exit /b
|
set "HOOK_DIR=%~dp0"
|
||||||
|
|
||||||
|
REM Try Git for Windows bash in standard locations
|
||||||
|
if exist "C:\Program Files\Git\bin\bash.exe" (
|
||||||
|
"C:\Program Files\Git\bin\bash.exe" "%HOOK_DIR%%~1" %2 %3 %4 %5 %6 %7 %8 %9
|
||||||
|
exit /b %ERRORLEVEL%
|
||||||
|
)
|
||||||
|
if exist "C:\Program Files (x86)\Git\bin\bash.exe" (
|
||||||
|
"C:\Program Files (x86)\Git\bin\bash.exe" "%HOOK_DIR%%~1" %2 %3 %4 %5 %6 %7 %8 %9
|
||||||
|
exit /b %ERRORLEVEL%
|
||||||
|
)
|
||||||
|
|
||||||
|
REM Try bash on PATH (e.g. user-installed Git Bash, MSYS2, Cygwin)
|
||||||
|
where bash >nul 2>nul
|
||||||
|
if %ERRORLEVEL% equ 0 (
|
||||||
|
bash "%HOOK_DIR%%~1" %2 %3 %4 %5 %6 %7 %8 %9
|
||||||
|
exit /b %ERRORLEVEL%
|
||||||
|
)
|
||||||
|
|
||||||
|
REM No bash found - exit silently rather than error
|
||||||
|
REM (plugin still works, just without SessionStart context injection)
|
||||||
|
exit /b 0
|
||||||
CMDBLOCK
|
CMDBLOCK
|
||||||
|
|
||||||
# Unix shell runs from here
|
# Unix: run the named script directly
|
||||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||||
SCRIPT_NAME="$1"
|
SCRIPT_NAME="$1"
|
||||||
shift
|
shift
|
||||||
"${SCRIPT_DIR}/${SCRIPT_NAME}" "$@"
|
exec bash "${SCRIPT_DIR}/${SCRIPT_NAME}" "$@"
|
||||||
|
|||||||
@@ -32,13 +32,18 @@ escape_for_json() {
|
|||||||
|
|
||||||
using_superpowers_escaped=$(escape_for_json "$using_superpowers_content")
|
using_superpowers_escaped=$(escape_for_json "$using_superpowers_content")
|
||||||
warning_escaped=$(escape_for_json "$warning_message")
|
warning_escaped=$(escape_for_json "$warning_message")
|
||||||
|
session_context="<EXTREMELY_IMPORTANT>\nYou have superpowers.\n\n**Below is the full content of your 'superpowers:using-superpowers' skill - your introduction to using skills. For all other skills, use the 'Skill' tool:**\n\n${using_superpowers_escaped}\n\n${warning_escaped}\n</EXTREMELY_IMPORTANT>"
|
||||||
|
|
||||||
# Output context injection as JSON
|
# Output context injection as JSON.
|
||||||
|
# Keep both shapes for compatibility:
|
||||||
|
# - Cursor hooks expect additional_context.
|
||||||
|
# - Claude hooks expect hookSpecificOutput.additionalContext.
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
{
|
{
|
||||||
|
"additional_context": "${session_context}",
|
||||||
"hookSpecificOutput": {
|
"hookSpecificOutput": {
|
||||||
"hookEventName": "SessionStart",
|
"hookEventName": "SessionStart",
|
||||||
"additionalContext": "<EXTREMELY_IMPORTANT>\nYou have superpowers.\n\n**Below is the full content of your 'superpowers:using-superpowers' skill - your introduction to using skills. For all other skills, use the 'Skill' tool:**\n\n${using_superpowers_escaped}\n\n${warning_escaped}\n</EXTREMELY_IMPORTANT>"
|
"additionalContext": "${session_context}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
Reference in New Issue
Block a user