superpowers-spec 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (301) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +141 -0
  3. package/agents/code-reviewer.md +48 -0
  4. package/bin/openspec.js +3 -0
  5. package/bin/superpowers.js +3 -0
  6. package/dist/cli/index.d.ts +2 -0
  7. package/dist/cli/index.js +482 -0
  8. package/dist/commands/change.d.ts +35 -0
  9. package/dist/commands/change.js +277 -0
  10. package/dist/commands/completion.d.ts +72 -0
  11. package/dist/commands/completion.js +257 -0
  12. package/dist/commands/config.d.ts +36 -0
  13. package/dist/commands/config.js +552 -0
  14. package/dist/commands/feedback.d.ts +9 -0
  15. package/dist/commands/feedback.js +183 -0
  16. package/dist/commands/schema.d.ts +6 -0
  17. package/dist/commands/schema.js +869 -0
  18. package/dist/commands/show.d.ts +14 -0
  19. package/dist/commands/show.js +132 -0
  20. package/dist/commands/spec.d.ts +15 -0
  21. package/dist/commands/spec.js +225 -0
  22. package/dist/commands/validate.d.ts +24 -0
  23. package/dist/commands/validate.js +294 -0
  24. package/dist/commands/workflow/index.d.ts +17 -0
  25. package/dist/commands/workflow/index.js +12 -0
  26. package/dist/commands/workflow/instructions.d.ts +29 -0
  27. package/dist/commands/workflow/instructions.js +381 -0
  28. package/dist/commands/workflow/new-change.d.ts +11 -0
  29. package/dist/commands/workflow/new-change.js +44 -0
  30. package/dist/commands/workflow/schemas.d.ts +10 -0
  31. package/dist/commands/workflow/schemas.js +34 -0
  32. package/dist/commands/workflow/shared.d.ts +57 -0
  33. package/dist/commands/workflow/shared.js +116 -0
  34. package/dist/commands/workflow/status.d.ts +14 -0
  35. package/dist/commands/workflow/status.js +75 -0
  36. package/dist/commands/workflow/templates.d.ts +16 -0
  37. package/dist/commands/workflow/templates.js +68 -0
  38. package/dist/core/archive.d.ts +11 -0
  39. package/dist/core/archive.js +318 -0
  40. package/dist/core/artifact-graph/graph.d.ts +56 -0
  41. package/dist/core/artifact-graph/graph.js +141 -0
  42. package/dist/core/artifact-graph/index.d.ts +7 -0
  43. package/dist/core/artifact-graph/index.js +13 -0
  44. package/dist/core/artifact-graph/instruction-loader.d.ts +143 -0
  45. package/dist/core/artifact-graph/instruction-loader.js +214 -0
  46. package/dist/core/artifact-graph/resolver.d.ts +81 -0
  47. package/dist/core/artifact-graph/resolver.js +257 -0
  48. package/dist/core/artifact-graph/schema.d.ts +13 -0
  49. package/dist/core/artifact-graph/schema.js +108 -0
  50. package/dist/core/artifact-graph/state.d.ts +12 -0
  51. package/dist/core/artifact-graph/state.js +54 -0
  52. package/dist/core/artifact-graph/types.d.ts +45 -0
  53. package/dist/core/artifact-graph/types.js +43 -0
  54. package/dist/core/available-tools.d.ts +16 -0
  55. package/dist/core/available-tools.js +30 -0
  56. package/dist/core/command-generation/adapters/amazon-q.d.ts +13 -0
  57. package/dist/core/command-generation/adapters/amazon-q.js +26 -0
  58. package/dist/core/command-generation/adapters/antigravity.d.ts +13 -0
  59. package/dist/core/command-generation/adapters/antigravity.js +26 -0
  60. package/dist/core/command-generation/adapters/auggie.d.ts +13 -0
  61. package/dist/core/command-generation/adapters/auggie.js +27 -0
  62. package/dist/core/command-generation/adapters/claude.d.ts +13 -0
  63. package/dist/core/command-generation/adapters/claude.js +50 -0
  64. package/dist/core/command-generation/adapters/cline.d.ts +14 -0
  65. package/dist/core/command-generation/adapters/cline.js +27 -0
  66. package/dist/core/command-generation/adapters/codebuddy.d.ts +13 -0
  67. package/dist/core/command-generation/adapters/codebuddy.js +28 -0
  68. package/dist/core/command-generation/adapters/codex.d.ts +16 -0
  69. package/dist/core/command-generation/adapters/codex.js +39 -0
  70. package/dist/core/command-generation/adapters/continue.d.ts +13 -0
  71. package/dist/core/command-generation/adapters/continue.js +28 -0
  72. package/dist/core/command-generation/adapters/costrict.d.ts +13 -0
  73. package/dist/core/command-generation/adapters/costrict.js +27 -0
  74. package/dist/core/command-generation/adapters/crush.d.ts +13 -0
  75. package/dist/core/command-generation/adapters/crush.js +30 -0
  76. package/dist/core/command-generation/adapters/cursor.d.ts +14 -0
  77. package/dist/core/command-generation/adapters/cursor.js +44 -0
  78. package/dist/core/command-generation/adapters/factory.d.ts +13 -0
  79. package/dist/core/command-generation/adapters/factory.js +27 -0
  80. package/dist/core/command-generation/adapters/gemini.d.ts +13 -0
  81. package/dist/core/command-generation/adapters/gemini.js +26 -0
  82. package/dist/core/command-generation/adapters/github-copilot.d.ts +13 -0
  83. package/dist/core/command-generation/adapters/github-copilot.js +26 -0
  84. package/dist/core/command-generation/adapters/iflow.d.ts +13 -0
  85. package/dist/core/command-generation/adapters/iflow.js +29 -0
  86. package/dist/core/command-generation/adapters/index.d.ts +29 -0
  87. package/dist/core/command-generation/adapters/index.js +29 -0
  88. package/dist/core/command-generation/adapters/kilocode.d.ts +14 -0
  89. package/dist/core/command-generation/adapters/kilocode.js +23 -0
  90. package/dist/core/command-generation/adapters/kiro.d.ts +13 -0
  91. package/dist/core/command-generation/adapters/kiro.js +26 -0
  92. package/dist/core/command-generation/adapters/opencode.d.ts +13 -0
  93. package/dist/core/command-generation/adapters/opencode.js +29 -0
  94. package/dist/core/command-generation/adapters/pi.d.ts +14 -0
  95. package/dist/core/command-generation/adapters/pi.js +41 -0
  96. package/dist/core/command-generation/adapters/qoder.d.ts +13 -0
  97. package/dist/core/command-generation/adapters/qoder.js +30 -0
  98. package/dist/core/command-generation/adapters/qwen.d.ts +13 -0
  99. package/dist/core/command-generation/adapters/qwen.js +26 -0
  100. package/dist/core/command-generation/adapters/roocode.d.ts +14 -0
  101. package/dist/core/command-generation/adapters/roocode.js +27 -0
  102. package/dist/core/command-generation/adapters/windsurf.d.ts +14 -0
  103. package/dist/core/command-generation/adapters/windsurf.js +51 -0
  104. package/dist/core/command-generation/generator.d.ts +21 -0
  105. package/dist/core/command-generation/generator.js +27 -0
  106. package/dist/core/command-generation/index.d.ts +22 -0
  107. package/dist/core/command-generation/index.js +24 -0
  108. package/dist/core/command-generation/registry.d.ts +36 -0
  109. package/dist/core/command-generation/registry.js +92 -0
  110. package/dist/core/command-generation/types.d.ts +56 -0
  111. package/dist/core/command-generation/types.js +8 -0
  112. package/dist/core/completions/command-registry.d.ts +7 -0
  113. package/dist/core/completions/command-registry.js +461 -0
  114. package/dist/core/completions/completion-provider.d.ts +60 -0
  115. package/dist/core/completions/completion-provider.js +102 -0
  116. package/dist/core/completions/factory.d.ts +64 -0
  117. package/dist/core/completions/factory.js +75 -0
  118. package/dist/core/completions/generators/bash-generator.d.ts +32 -0
  119. package/dist/core/completions/generators/bash-generator.js +174 -0
  120. package/dist/core/completions/generators/fish-generator.d.ts +32 -0
  121. package/dist/core/completions/generators/fish-generator.js +157 -0
  122. package/dist/core/completions/generators/powershell-generator.d.ts +33 -0
  123. package/dist/core/completions/generators/powershell-generator.js +207 -0
  124. package/dist/core/completions/generators/zsh-generator.d.ts +44 -0
  125. package/dist/core/completions/generators/zsh-generator.js +250 -0
  126. package/dist/core/completions/installers/bash-installer.d.ts +87 -0
  127. package/dist/core/completions/installers/bash-installer.js +318 -0
  128. package/dist/core/completions/installers/fish-installer.d.ts +43 -0
  129. package/dist/core/completions/installers/fish-installer.js +143 -0
  130. package/dist/core/completions/installers/powershell-installer.d.ts +88 -0
  131. package/dist/core/completions/installers/powershell-installer.js +327 -0
  132. package/dist/core/completions/installers/zsh-installer.d.ts +125 -0
  133. package/dist/core/completions/installers/zsh-installer.js +449 -0
  134. package/dist/core/completions/templates/bash-templates.d.ts +6 -0
  135. package/dist/core/completions/templates/bash-templates.js +24 -0
  136. package/dist/core/completions/templates/fish-templates.d.ts +7 -0
  137. package/dist/core/completions/templates/fish-templates.js +39 -0
  138. package/dist/core/completions/templates/powershell-templates.d.ts +6 -0
  139. package/dist/core/completions/templates/powershell-templates.js +25 -0
  140. package/dist/core/completions/templates/zsh-templates.d.ts +6 -0
  141. package/dist/core/completions/templates/zsh-templates.js +36 -0
  142. package/dist/core/completions/types.d.ts +79 -0
  143. package/dist/core/completions/types.js +2 -0
  144. package/dist/core/config-prompts.d.ts +9 -0
  145. package/dist/core/config-prompts.js +34 -0
  146. package/dist/core/config-schema.d.ts +86 -0
  147. package/dist/core/config-schema.js +213 -0
  148. package/dist/core/config.d.ts +17 -0
  149. package/dist/core/config.js +33 -0
  150. package/dist/core/converters/json-converter.d.ts +6 -0
  151. package/dist/core/converters/json-converter.js +51 -0
  152. package/dist/core/global-config.d.ts +44 -0
  153. package/dist/core/global-config.js +125 -0
  154. package/dist/core/index.d.ts +2 -0
  155. package/dist/core/index.js +3 -0
  156. package/dist/core/init.d.ts +39 -0
  157. package/dist/core/init.js +634 -0
  158. package/dist/core/legacy-cleanup.d.ts +162 -0
  159. package/dist/core/legacy-cleanup.js +512 -0
  160. package/dist/core/list.d.ts +9 -0
  161. package/dist/core/list.js +171 -0
  162. package/dist/core/migration.d.ts +23 -0
  163. package/dist/core/migration.js +108 -0
  164. package/dist/core/parsers/change-parser.d.ts +13 -0
  165. package/dist/core/parsers/change-parser.js +193 -0
  166. package/dist/core/parsers/markdown-parser.d.ts +22 -0
  167. package/dist/core/parsers/markdown-parser.js +187 -0
  168. package/dist/core/parsers/requirement-blocks.d.ts +37 -0
  169. package/dist/core/parsers/requirement-blocks.js +201 -0
  170. package/dist/core/profile-sync-drift.d.ts +38 -0
  171. package/dist/core/profile-sync-drift.js +200 -0
  172. package/dist/core/profiles.d.ts +26 -0
  173. package/dist/core/profiles.js +40 -0
  174. package/dist/core/project-config.d.ts +64 -0
  175. package/dist/core/project-config.js +223 -0
  176. package/dist/core/schemas/base.schema.d.ts +13 -0
  177. package/dist/core/schemas/base.schema.js +13 -0
  178. package/dist/core/schemas/change.schema.d.ts +73 -0
  179. package/dist/core/schemas/change.schema.js +31 -0
  180. package/dist/core/schemas/index.d.ts +4 -0
  181. package/dist/core/schemas/index.js +4 -0
  182. package/dist/core/schemas/spec.schema.d.ts +18 -0
  183. package/dist/core/schemas/spec.schema.js +15 -0
  184. package/dist/core/shared/index.d.ts +8 -0
  185. package/dist/core/shared/index.js +8 -0
  186. package/dist/core/shared/skill-generation.d.ts +49 -0
  187. package/dist/core/shared/skill-generation.js +96 -0
  188. package/dist/core/shared/tool-detection.d.ts +71 -0
  189. package/dist/core/shared/tool-detection.js +158 -0
  190. package/dist/core/specs-apply.d.ts +73 -0
  191. package/dist/core/specs-apply.js +384 -0
  192. package/dist/core/styles/palette.d.ts +7 -0
  193. package/dist/core/styles/palette.js +8 -0
  194. package/dist/core/templates/index.d.ts +8 -0
  195. package/dist/core/templates/index.js +9 -0
  196. package/dist/core/templates/skill-templates.d.ts +19 -0
  197. package/dist/core/templates/skill-templates.js +18 -0
  198. package/dist/core/templates/types.d.ts +19 -0
  199. package/dist/core/templates/types.js +5 -0
  200. package/dist/core/templates/workflows/apply-change.d.ts +10 -0
  201. package/dist/core/templates/workflows/apply-change.js +313 -0
  202. package/dist/core/templates/workflows/archive-change.d.ts +10 -0
  203. package/dist/core/templates/workflows/archive-change.js +271 -0
  204. package/dist/core/templates/workflows/bulk-archive-change.d.ts +10 -0
  205. package/dist/core/templates/workflows/bulk-archive-change.js +488 -0
  206. package/dist/core/templates/workflows/continue-change.d.ts +10 -0
  207. package/dist/core/templates/workflows/continue-change.js +232 -0
  208. package/dist/core/templates/workflows/explore.d.ts +10 -0
  209. package/dist/core/templates/workflows/explore.js +469 -0
  210. package/dist/core/templates/workflows/feedback.d.ts +9 -0
  211. package/dist/core/templates/workflows/feedback.js +108 -0
  212. package/dist/core/templates/workflows/ff-change.d.ts +10 -0
  213. package/dist/core/templates/workflows/ff-change.js +198 -0
  214. package/dist/core/templates/workflows/new-change.d.ts +10 -0
  215. package/dist/core/templates/workflows/new-change.js +143 -0
  216. package/dist/core/templates/workflows/onboard.d.ts +10 -0
  217. package/dist/core/templates/workflows/onboard.js +565 -0
  218. package/dist/core/templates/workflows/propose.d.ts +10 -0
  219. package/dist/core/templates/workflows/propose.js +223 -0
  220. package/dist/core/templates/workflows/sync-specs.d.ts +10 -0
  221. package/dist/core/templates/workflows/sync-specs.js +272 -0
  222. package/dist/core/templates/workflows/verify-change.d.ts +10 -0
  223. package/dist/core/templates/workflows/verify-change.js +332 -0
  224. package/dist/core/update.d.ts +77 -0
  225. package/dist/core/update.js +537 -0
  226. package/dist/core/validation/constants.d.ts +34 -0
  227. package/dist/core/validation/constants.js +40 -0
  228. package/dist/core/validation/types.d.ts +18 -0
  229. package/dist/core/validation/types.js +2 -0
  230. package/dist/core/validation/validator.d.ts +33 -0
  231. package/dist/core/validation/validator.js +409 -0
  232. package/dist/core/view.d.ts +8 -0
  233. package/dist/core/view.js +168 -0
  234. package/dist/index.d.ts +3 -0
  235. package/dist/index.js +3 -0
  236. package/dist/prompts/searchable-multi-select.d.ts +28 -0
  237. package/dist/prompts/searchable-multi-select.js +159 -0
  238. package/dist/telemetry/config.d.ts +32 -0
  239. package/dist/telemetry/config.js +68 -0
  240. package/dist/telemetry/index.d.ts +31 -0
  241. package/dist/telemetry/index.js +180 -0
  242. package/dist/ui/ascii-patterns.d.ts +16 -0
  243. package/dist/ui/ascii-patterns.js +133 -0
  244. package/dist/ui/welcome-screen.d.ts +10 -0
  245. package/dist/ui/welcome-screen.js +146 -0
  246. package/dist/utils/change-metadata.d.ts +51 -0
  247. package/dist/utils/change-metadata.js +147 -0
  248. package/dist/utils/change-utils.d.ts +62 -0
  249. package/dist/utils/change-utils.js +121 -0
  250. package/dist/utils/command-references.d.ts +18 -0
  251. package/dist/utils/command-references.js +20 -0
  252. package/dist/utils/file-system.d.ts +36 -0
  253. package/dist/utils/file-system.js +281 -0
  254. package/dist/utils/index.d.ts +6 -0
  255. package/dist/utils/index.js +9 -0
  256. package/dist/utils/interactive.d.ts +18 -0
  257. package/dist/utils/interactive.js +21 -0
  258. package/dist/utils/item-discovery.d.ts +4 -0
  259. package/dist/utils/item-discovery.js +72 -0
  260. package/dist/utils/match.d.ts +3 -0
  261. package/dist/utils/match.js +22 -0
  262. package/dist/utils/shell-detection.d.ts +20 -0
  263. package/dist/utils/shell-detection.js +41 -0
  264. package/dist/utils/task-progress.d.ts +8 -0
  265. package/dist/utils/task-progress.js +36 -0
  266. package/extension-manifest.json +9 -0
  267. package/hooks/hooks.json +16 -0
  268. package/hooks/run-hook.cmd +46 -0
  269. package/hooks/session-start +51 -0
  270. package/package.json +87 -0
  271. package/schemas/spec-driven/schema.yaml +153 -0
  272. package/schemas/spec-driven/templates/design.md +19 -0
  273. package/schemas/spec-driven/templates/proposal.md +23 -0
  274. package/schemas/spec-driven/templates/spec.md +8 -0
  275. package/schemas/spec-driven/templates/tasks.md +9 -0
  276. package/scripts/postinstall.js +147 -0
  277. package/skills/dispatching-parallel-agents/SKILL.md +113 -0
  278. package/skills/finishing-a-development-branch/SKILL.md +200 -0
  279. package/skills/receiving-code-review/SKILL.md +213 -0
  280. package/skills/requesting-code-review/SKILL.md +73 -0
  281. package/skills/requesting-code-review/code-reviewer.md +146 -0
  282. package/skills/subagent-driven-development/SKILL.md +98 -0
  283. package/skills/subagent-driven-development/code-quality-reviewer-prompt.md +20 -0
  284. package/skills/subagent-driven-development/implementer-prompt.md +78 -0
  285. package/skills/systematic-debugging/CREATION-LOG.md +119 -0
  286. package/skills/systematic-debugging/SKILL.md +296 -0
  287. package/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
  288. package/skills/systematic-debugging/condition-based-waiting.md +115 -0
  289. package/skills/systematic-debugging/defense-in-depth.md +122 -0
  290. package/skills/systematic-debugging/find-polluter.sh +63 -0
  291. package/skills/systematic-debugging/root-cause-tracing.md +169 -0
  292. package/skills/systematic-debugging/test-academic.md +14 -0
  293. package/skills/systematic-debugging/test-pressure-1.md +58 -0
  294. package/skills/systematic-debugging/test-pressure-2.md +68 -0
  295. package/skills/systematic-debugging/test-pressure-3.md +69 -0
  296. package/skills/test-driven-development/SKILL.md +356 -0
  297. package/skills/test-driven-development/testing-anti-patterns.md +299 -0
  298. package/skills/using-git-worktrees/SKILL.md +212 -0
  299. package/skills/using-superpowers/SKILL.md +95 -0
  300. package/skills/verification-before-completion/SKILL.md +126 -0
  301. package/skills/writing-skills/SKILL.md +148 -0
@@ -0,0 +1,51 @@
1
+ #!/usr/bin/env bash
2
+ # SessionStart hook for superpowers plugin
3
+
4
+ set -euo pipefail
5
+
6
+ # Determine plugin root directory
7
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" && pwd)"
8
+ PLUGIN_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
9
+
10
+ # Check if legacy skills directory exists and build warning
11
+ warning_message=""
12
+ legacy_skills_dir="${HOME}/.config/superpowers/skills"
13
+ if [ -d "$legacy_skills_dir" ]; then
14
+ warning_message="\n\n<important-reminder>IN YOUR FIRST REPLY AFTER SEEING THIS MESSAGE YOU MUST TELL THE USER:⚠️ **WARNING:** Superpowers now uses Claude Code's skills system. Custom skills in ~/.config/superpowers/skills will not be read. Move custom skills to ~/.claude/skills instead. To make this message go away, remove ~/.config/superpowers/skills</important-reminder>"
15
+ fi
16
+
17
+ # Read using-superpowers content
18
+ using_superpowers_content=$(cat "${PLUGIN_ROOT}/skills/using-superpowers/SKILL.md" 2>&1 || echo "Error reading using-superpowers skill")
19
+
20
+ # Escape string for JSON embedding using bash parameter substitution.
21
+ # Each ${s//old/new} is a single C-level pass - orders of magnitude
22
+ # faster than the character-by-character loop this replaces.
23
+ escape_for_json() {
24
+ local s="$1"
25
+ s="${s//\\/\\\\}"
26
+ s="${s//\"/\\\"}"
27
+ s="${s//$'\n'/\\n}"
28
+ s="${s//$'\r'/\\r}"
29
+ s="${s//$'\t'/\\t}"
30
+ printf '%s' "$s"
31
+ }
32
+
33
+ using_superpowers_escaped=$(escape_for_json "$using_superpowers_content")
34
+ warning_escaped=$(escape_for_json "$warning_message")
35
+ 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>"
36
+
37
+ # Output context injection as JSON.
38
+ # Keep both shapes for compatibility:
39
+ # - Cursor hooks expect additional_context.
40
+ # - Claude hooks expect hookSpecificOutput.additionalContext.
41
+ cat <<EOF
42
+ {
43
+ "additional_context": "${session_context}",
44
+ "hookSpecificOutput": {
45
+ "hookEventName": "SessionStart",
46
+ "additionalContext": "${session_context}"
47
+ }
48
+ }
49
+ EOF
50
+
51
+ exit 0
package/package.json ADDED
@@ -0,0 +1,87 @@
1
+ {
2
+ "name": "superpowers-spec",
3
+ "version": "1.0.0",
4
+ "description": "AI-native system for spec-driven development and test-driven development ",
5
+ "keywords": [
6
+ "superpowers",
7
+ "specs",
8
+ "cli",
9
+ "ai",
10
+ "development"
11
+ ],
12
+ "homepage": "https://github.com/momoshenchi/Superpowers-with-Spec",
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "https://github.com/momoshenchi/Superpowers-with-Spec"
16
+ },
17
+ "license": "MIT",
18
+ "author": "momoshenchi",
19
+ "type": "module",
20
+ "publishConfig": {
21
+ "access": "public"
22
+ },
23
+ "exports": {
24
+ ".": {
25
+ "types": "./dist/index.d.ts",
26
+ "default": "./dist/index.js"
27
+ }
28
+ },
29
+ "bin": {
30
+ "superpowers": "./bin/superpowers.js"
31
+ },
32
+ "files": [
33
+ "dist",
34
+ "bin",
35
+ "schemas",
36
+ "skills",
37
+ "hooks",
38
+ "agents",
39
+ "extension-manifest.json",
40
+ "scripts/postinstall.js",
41
+ "!dist/**/*.test.js",
42
+ "!dist/**/__tests__",
43
+ "!dist/**/*.map"
44
+ ],
45
+ "scripts": {
46
+ "lint": "eslint src/",
47
+ "build": "node build.js",
48
+ "dev": "tsc --watch",
49
+ "dev:cli": "pnpm run build && node bin/superpowers.js",
50
+ "test": "vitest run",
51
+ "test:watch": "vitest",
52
+ "test:ui": "vitest --ui",
53
+ "test:coverage": "vitest --coverage",
54
+ "test:postinstall": "node scripts/postinstall.js",
55
+ "prepare": "pnpm run build",
56
+ "prepublishOnly": "pnpm run build",
57
+ "postinstall": "node scripts/postinstall.js",
58
+ "check:pack-version": "node scripts/pack-version-check.mjs",
59
+ "release": "pnpm run release:ci",
60
+ "release:ci": "pnpm run check:pack-version && pnpm exec changeset publish",
61
+ "changeset": "changeset"
62
+ },
63
+ "engines": {
64
+ "node": ">=20.19.0"
65
+ },
66
+ "devDependencies": {
67
+ "@changesets/changelog-github": "^0.5.2",
68
+ "@changesets/cli": "^2.27.7",
69
+ "@types/node": "^24.2.0",
70
+ "@vitest/ui": "^3.2.4",
71
+ "eslint": "^9.39.2",
72
+ "typescript": "^5.9.3",
73
+ "typescript-eslint": "^8.50.1",
74
+ "vitest": "^3.2.4"
75
+ },
76
+ "dependencies": {
77
+ "@inquirer/core": "^10.2.2",
78
+ "@inquirer/prompts": "^7.8.0",
79
+ "chalk": "^5.5.0",
80
+ "commander": "^14.0.0",
81
+ "fast-glob": "^3.3.3",
82
+ "ora": "^8.2.0",
83
+ "posthog-node": "^5.20.0",
84
+ "yaml": "^2.8.2",
85
+ "zod": "^4.0.17"
86
+ }
87
+ }
@@ -0,0 +1,153 @@
1
+ name: spec-driven
2
+ version: 1
3
+ description: Default Superpowers workflow - proposal → specs → design → tasks
4
+ artifacts:
5
+ - id: proposal
6
+ generates: proposal.md
7
+ description: Initial proposal document outlining the change
8
+ template: proposal.md
9
+ instruction: |
10
+ Create the proposal document that establishes WHY this change is needed.
11
+
12
+ Sections:
13
+ - **Why**: 1-2 sentences on the problem or opportunity. What problem does this solve? Why now?
14
+ - **What Changes**: Bullet list of changes. Be specific about new capabilities, modifications, or removals. Mark breaking changes with **BREAKING**.
15
+ - **Capabilities**: Identify which specs will be created or modified:
16
+ - **New Capabilities**: List capabilities being introduced. Each becomes a new `specs/<name>/spec.md`. Use kebab-case names (e.g., `user-auth`, `data-export`).
17
+ - **Modified Capabilities**: List existing capabilities whose REQUIREMENTS are changing. Only include if spec-level behavior changes (not just implementation details). Each needs a delta spec file. Check `superpowers/specs/` for existing spec names. Leave empty if no requirement changes.
18
+ - **Impact**: Affected code, APIs, dependencies, or systems.
19
+
20
+ IMPORTANT: The Capabilities section is critical. It creates the contract between
21
+ proposal and specs phases. Research existing specs before filling this in.
22
+ Each capability listed here will need a corresponding spec file.
23
+
24
+ Keep it concise (1-2 pages). Focus on the "why" not the "how" -
25
+ implementation details belong in design.md.
26
+
27
+ This is the foundation - specs, design, and tasks all build on this.
28
+ requires: []
29
+
30
+ - id: specs
31
+ generates: "specs/**/*.md"
32
+ description: Detailed specifications for the change
33
+ template: spec.md
34
+ instruction: |
35
+ Create specification files that define WHAT the system should do.
36
+
37
+ Create one spec file per capability listed in the proposal's Capabilities section.
38
+ - New capabilities: use the exact kebab-case name from the proposal (specs/<capability>/spec.md).
39
+ - Modified capabilities: use the existing spec folder name from superpowers/specs/<capability>/ when creating the delta spec at specs/<capability>/spec.md.
40
+
41
+ Delta operations (use ## headers):
42
+ - **ADDED Requirements**: New capabilities
43
+ - **MODIFIED Requirements**: Changed behavior - MUST include full updated content
44
+ - **REMOVED Requirements**: Deprecated features - MUST include **Reason** and **Migration**
45
+ - **RENAMED Requirements**: Name changes only - use FROM:/TO: format
46
+
47
+ Format requirements:
48
+ - Each requirement: `### Requirement: <name>` followed by description
49
+ - Use SHALL/MUST for normative requirements (avoid should/may)
50
+ - Each scenario: `#### Scenario: <name>` with WHEN/THEN format
51
+ - **CRITICAL**: Scenarios MUST use exactly 4 hashtags (`####`). Using 3 hashtags or bullets will fail silently.
52
+ - Every requirement MUST have at least one scenario.
53
+
54
+ MODIFIED requirements workflow:
55
+ 1. Locate the existing requirement in superpowers/specs/<capability>/spec.md
56
+ 2. Copy the ENTIRE requirement block (from `### Requirement:` through all scenarios)
57
+ 3. Paste under `## MODIFIED Requirements` and edit to reflect new behavior
58
+ 4. Ensure header text matches exactly (whitespace-insensitive)
59
+
60
+ Common pitfall: Using MODIFIED with partial content loses detail at archive time.
61
+ If adding new concerns without changing existing behavior, use ADDED instead.
62
+
63
+ Example:
64
+ ```
65
+ ## ADDED Requirements
66
+
67
+ ### Requirement: User can export data
68
+ The system SHALL allow users to export their data in CSV format.
69
+
70
+ #### Scenario: Successful export
71
+ - **WHEN** user clicks "Export" button
72
+ - **THEN** system downloads a CSV file with all user data
73
+
74
+ ## REMOVED Requirements
75
+
76
+ ### Requirement: Legacy export
77
+ **Reason**: Replaced by new export system
78
+ **Migration**: Use new export endpoint at /api/v2/export
79
+ ```
80
+
81
+ Specs should be testable - each scenario is a potential test case.
82
+ requires:
83
+ - proposal
84
+
85
+ - id: design
86
+ generates: design.md
87
+ description: Technical design document with implementation details
88
+ template: design.md
89
+ instruction: |
90
+ Create the design document that explains HOW to implement the change.
91
+
92
+ When to include design.md (create only if any apply):
93
+ - Cross-cutting change (multiple services/modules) or new architectural pattern
94
+ - New external dependency or significant data model changes
95
+ - Security, performance, or migration complexity
96
+ - Ambiguity that benefits from technical decisions before coding
97
+
98
+ Sections:
99
+ - **Context**: Background, current state, constraints, stakeholders
100
+ - **Goals / Non-Goals**: What this design achieves and explicitly excludes
101
+ - **Decisions**: Key technical choices with rationale (why X over Y?). Include alternatives considered for each decision.
102
+ - **Risks / Trade-offs**: Known limitations, things that could go wrong. Format: [Risk] → Mitigation
103
+ - **Migration Plan**: Steps to deploy, rollback strategy (if applicable)
104
+ - **Open Questions**: Outstanding decisions or unknowns to resolve
105
+
106
+ Focus on architecture and approach, not line-by-line implementation.
107
+ Reference the proposal for motivation and specs for requirements.
108
+
109
+ Good design docs explain the "why" behind technical decisions.
110
+ requires:
111
+ - proposal
112
+
113
+ - id: tasks
114
+ generates: tasks.md
115
+ description: Implementation checklist with trackable tasks
116
+ template: tasks.md
117
+ instruction: |
118
+ Create the task list that breaks down the implementation work.
119
+
120
+ **IMPORTANT: Follow the template below exactly.** The apply phase parses
121
+ checkbox format to track progress. Tasks not using `- [ ]` won't be tracked.
122
+
123
+ Guidelines:
124
+ - Group related tasks under ## numbered headings
125
+ - Each task MUST be a checkbox: `- [ ] X.Y Task description`
126
+ - Tasks should be small enough to complete in one session
127
+ - Order tasks by dependency (what must be done first?)
128
+
129
+ Example:
130
+ ```
131
+ ## 1. Setup
132
+
133
+ - [ ] 1.1 Create new module structure
134
+ - [ ] 1.2 Add dependencies to package.json
135
+
136
+ ## 2. Core Implementation
137
+
138
+ - [ ] 2.1 Implement data export function
139
+ - [ ] 2.2 Add CSV formatting utilities
140
+ ```
141
+
142
+ Reference specs for what needs to be built, design for how to build it.
143
+ Each task should be verifiable - you know when it's done.
144
+ requires:
145
+ - specs
146
+ - design
147
+
148
+ apply:
149
+ requires: [tasks]
150
+ tracks: tasks.md
151
+ instruction: |
152
+ Read context files, work through pending tasks, mark complete as you go.
153
+ Pause if you hit blockers or need clarification.
@@ -0,0 +1,19 @@
1
+ ## Context
2
+
3
+ <!-- Background and current state -->
4
+
5
+ ## Goals / Non-Goals
6
+
7
+ **Goals:**
8
+ <!-- What this design aims to achieve -->
9
+
10
+ **Non-Goals:**
11
+ <!-- What is explicitly out of scope -->
12
+
13
+ ## Decisions
14
+
15
+ <!-- Key design decisions and rationale -->
16
+
17
+ ## Risks / Trade-offs
18
+
19
+ <!-- Known risks and trade-offs -->
@@ -0,0 +1,23 @@
1
+ ## Why
2
+
3
+ <!-- Explain the motivation for this change. What problem does this solve? Why now? -->
4
+
5
+ ## What Changes
6
+
7
+ <!-- Describe what will change. Be specific about new capabilities, modifications, or removals. -->
8
+
9
+ ## Capabilities
10
+
11
+ ### New Capabilities
12
+ <!-- Capabilities being introduced. Replace <name> with kebab-case identifier (e.g., user-auth, data-export, api-rate-limiting). Each creates specs/<name>/spec.md -->
13
+ - `<name>`: <brief description of what this capability covers>
14
+
15
+ ### Modified Capabilities
16
+ <!-- Existing capabilities whose REQUIREMENTS are changing (not just implementation).
17
+ Only list here if spec-level behavior changes. Each needs a delta spec file.
18
+ Use existing spec names from superpowers/specs/. Leave empty if no requirement changes. -->
19
+ - `<existing-name>`: <what requirement is changing>
20
+
21
+ ## Impact
22
+
23
+ <!-- Affected code, APIs, dependencies, systems -->
@@ -0,0 +1,8 @@
1
+ ## ADDED Requirements
2
+
3
+ ### Requirement: <!-- requirement name -->
4
+ <!-- requirement text -->
5
+
6
+ #### Scenario: <!-- scenario name -->
7
+ - **WHEN** <!-- condition -->
8
+ - **THEN** <!-- expected outcome -->
@@ -0,0 +1,9 @@
1
+ ## 1. <!-- Task Group Name -->
2
+
3
+ - [ ] 1.1 <!-- Task description -->
4
+ - [ ] 1.2 <!-- Task description -->
5
+
6
+ ## 2. <!-- Task Group Name -->
7
+
8
+ - [ ] 2.1 <!-- Task description -->
9
+ - [ ] 2.2 <!-- Task description -->
@@ -0,0 +1,147 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Postinstall script for auto-installing shell completions
5
+ *
6
+ * This script runs automatically after npm install unless:
7
+ * - CI=true environment variable is set
8
+ * - SUPERPOWERS_NO_COMPLETIONS=1 environment variable is set
9
+ * - dist/ directory doesn't exist (dev setup scenario)
10
+ *
11
+ * The script never fails npm install - all errors are caught and handled gracefully.
12
+ */
13
+
14
+ import { promises as fs } from 'fs';
15
+ import path from 'path';
16
+ import { fileURLToPath } from 'url';
17
+
18
+ const __filename = fileURLToPath(import.meta.url);
19
+ const __dirname = path.dirname(__filename);
20
+
21
+ /**
22
+ * Check if we should skip installation
23
+ */
24
+ function shouldSkipInstallation() {
25
+ // Skip in CI environments
26
+ if (process.env.CI === 'true' || process.env.CI === '1') {
27
+ return { skip: true, reason: 'CI environment detected' };
28
+ }
29
+
30
+ // Skip if user opted out
31
+ if (process.env.SUPERPOWERS_NO_COMPLETIONS === '1') {
32
+ return { skip: true, reason: 'SUPERPOWERS_NO_COMPLETIONS=1 set' };
33
+ }
34
+
35
+ return { skip: false };
36
+ }
37
+
38
+ /**
39
+ * Check if dist/ directory exists
40
+ */
41
+ async function distExists() {
42
+ const distPath = path.join(__dirname, '..', 'dist');
43
+ try {
44
+ const stat = await fs.stat(distPath);
45
+ return stat.isDirectory();
46
+ } catch {
47
+ return false;
48
+ }
49
+ }
50
+
51
+ /**
52
+ * Detect the user's shell
53
+ */
54
+ async function detectShell() {
55
+ try {
56
+ const { detectShell } = await import('../dist/utils/shell-detection.js');
57
+ const result = detectShell();
58
+ return result.shell;
59
+ } catch (error) {
60
+ // Fail silently if detection module doesn't exist
61
+ return undefined;
62
+ }
63
+ }
64
+
65
+ /**
66
+ * Install completions for the detected shell
67
+ */
68
+ async function installCompletions(shell) {
69
+ try {
70
+ const { CompletionFactory } = await import('../dist/core/completions/factory.js');
71
+ const { COMMAND_REGISTRY } = await import('../dist/core/completions/command-registry.js');
72
+
73
+ // Check if shell is supported
74
+ if (!CompletionFactory.isSupported(shell)) {
75
+ console.log(`\nTip: Run 'superpowers completion install' for shell completions`);
76
+ return;
77
+ }
78
+
79
+ // Generate completion script
80
+ const generator = CompletionFactory.createGenerator(shell);
81
+ const script = generator.generate(COMMAND_REGISTRY);
82
+
83
+ // Install completion script
84
+ const installer = CompletionFactory.createInstaller(shell);
85
+ const result = await installer.install(script);
86
+
87
+ if (result.success) {
88
+ // Show success message based on installation type
89
+ if (result.isOhMyZsh) {
90
+ console.log(`✓ Shell completions installed`);
91
+ console.log(` Restart shell: exec zsh`);
92
+ } else if (result.zshrcConfigured) {
93
+ console.log(`✓ Shell completions installed and configured`);
94
+ console.log(` Restart shell: exec zsh`);
95
+ } else {
96
+ console.log(`✓ Shell completions installed to ~/.zsh/completions/`);
97
+ console.log(` Add to ~/.zshrc: fpath=(~/.zsh/completions $fpath)`);
98
+ console.log(` Then: exec zsh`);
99
+ }
100
+ } else {
101
+ // Installation failed, show tip for manual install
102
+ console.log(`\nTip: Run 'superpowers completion install' for shell completions`);
103
+ }
104
+ } catch (error) {
105
+ // Fail gracefully - show tip for manual install
106
+ console.log(`\nTip: Run 'superpowers completion install' for shell completions`);
107
+ }
108
+ }
109
+
110
+ /**
111
+ * Main function
112
+ */
113
+ async function main() {
114
+ try {
115
+ // Check if we should skip
116
+ const skipCheck = shouldSkipInstallation();
117
+ if (skipCheck.skip) {
118
+ // Silent skip - no output
119
+ return;
120
+ }
121
+
122
+ // Check if dist/ exists (skip silently if not - expected during dev setup)
123
+ if (!(await distExists())) {
124
+ return;
125
+ }
126
+
127
+ // Detect shell
128
+ const shell = await detectShell();
129
+ if (!shell) {
130
+ console.log(`\nTip: Run 'superpowers completion install' for shell completions`);
131
+ return;
132
+ }
133
+
134
+ // Install completions
135
+ await installCompletions(shell);
136
+ } catch (error) {
137
+ // Fail gracefully - never break npm install
138
+ // Show tip for manual install
139
+ console.log(`\nTip: Run 'superpowers completion install' for shell completions`);
140
+ }
141
+ }
142
+
143
+ // Run main and handle any unhandled errors
144
+ main().catch(() => {
145
+ // Silent failure - never break npm install
146
+ process.exit(0);
147
+ });
@@ -0,0 +1,113 @@
1
+ ---
2
+ name: dispatching-parallel-agents
3
+ description: Use when facing 2+ independent tasks that can be worked on without shared state or sequential dependencies
4
+ ---
5
+
6
+ # Dispatching Parallel Agents
7
+
8
+ ## Overview
9
+
10
+ When you have multiple unrelated failures (different test files, different subsystems, different bugs), investigating them sequentially wastes time. Each investigation is independent and can happen in parallel.
11
+
12
+ **Core principle:** Dispatch one agent per independent problem domain. Let them work concurrently.
13
+
14
+ ## When to Use
15
+
16
+ **Use when:**
17
+ - 3+ test files failing with different root causes
18
+ - Multiple subsystems broken independently
19
+ - Each problem can be understood without context from others
20
+ - No shared state between investigations
21
+
22
+ **Don't use when:**
23
+ - Failures are related (fix one might fix others)
24
+ - Need to understand full system state
25
+ - Agents would interfere with each other
26
+
27
+ ## The Pattern
28
+
29
+ ### 1. Identify Independent Domains
30
+
31
+ Group failures by what's broken:
32
+ - File A tests: Tool approval flow
33
+ - File B tests: Batch completion behavior
34
+ - File C tests: Abort functionality
35
+
36
+ Each domain is independent — fixing one doesn't affect others.
37
+
38
+ ### 2. Create Focused Agent Tasks
39
+
40
+ Each agent gets:
41
+ - **Specific scope:** One test file or subsystem
42
+ - **Clear goal:** Make these tests pass
43
+ - **Constraints:** Don't change other code
44
+ - **Expected output:** Summary of what you found and fixed
45
+
46
+ ### 3. Dispatch in Parallel
47
+
48
+ ```typescript
49
+ // Dispatch all simultaneously — they run concurrently
50
+ Task("Fix agent-tool-abort.test.ts failures")
51
+ Task("Fix batch-completion-behavior.test.ts failures")
52
+ Task("Fix tool-approval-race-conditions.test.ts failures")
53
+ ```
54
+
55
+ ### 4. Review and Integrate
56
+
57
+ When agents return:
58
+ - Read each summary
59
+ - Verify fixes don't conflict
60
+ - Run full test suite
61
+ - Integrate all changes
62
+
63
+ ## Agent Prompt Structure
64
+
65
+ Good agent prompts are:
66
+ 1. **Focused** — One clear problem domain
67
+ 2. **Self-contained** — All context needed to understand the problem
68
+ 3. **Specific about output** — What should the agent return?
69
+
70
+ ```markdown
71
+ Fix the 3 failing tests in src/agents/agent-tool-abort.test.ts:
72
+
73
+ 1. "should abort tool with partial output capture" - expects 'interrupted at' in message
74
+ 2. "should handle mixed completed and aborted tools" - fast tool aborted instead of completed
75
+ 3. "should properly track pendingToolCount" - expects 3 results but gets 0
76
+
77
+ Do NOT just increase timeouts - find the real issue.
78
+
79
+ Return: Summary of what you found and what you fixed.
80
+ ```
81
+
82
+ ## Common Mistakes
83
+
84
+ **❌ Too broad:** "Fix all the tests" — agent gets lost
85
+ **✅ Specific:** "Fix agent-tool-abort.test.ts" — focused scope
86
+
87
+ **❌ No context:** "Fix the race condition" — agent doesn't know where
88
+ **✅ Context:** Paste the error messages and test names
89
+
90
+ **❌ No constraints:** Agent might refactor everything
91
+ **✅ Constraints:** "Do NOT change production code" or "Fix tests only"
92
+
93
+ ## When NOT to Use
94
+
95
+ **Related failures:** Fixing one might fix others — investigate together first
96
+ **Need full context:** Understanding requires seeing entire system
97
+ **Exploratory debugging:** You don't know what's broken yet
98
+ **Shared state:** Agents would interfere (editing same files, using same resources)
99
+
100
+ ## Verification
101
+
102
+ After agents return:
103
+ 1. **Review each summary** — Understand what changed
104
+ 2. **Check for conflicts** — Did agents edit same code?
105
+ 3. **Run full suite** — Verify all fixes work together
106
+ 4. **Spot check** — Agents can make systematic errors
107
+
108
+ ## Key Benefits
109
+
110
+ 1. **Parallelization** — Multiple investigations happen simultaneously
111
+ 2. **Focus** — Each agent has narrow scope, less context to track
112
+ 3. **Independence** — Agents don't interfere with each other
113
+ 4. **Speed** — 3 problems solved in time of 1