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.
- package/LICENSE +22 -0
- package/README.md +141 -0
- package/agents/code-reviewer.md +48 -0
- package/bin/openspec.js +3 -0
- package/bin/superpowers.js +3 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +482 -0
- package/dist/commands/change.d.ts +35 -0
- package/dist/commands/change.js +277 -0
- package/dist/commands/completion.d.ts +72 -0
- package/dist/commands/completion.js +257 -0
- package/dist/commands/config.d.ts +36 -0
- package/dist/commands/config.js +552 -0
- package/dist/commands/feedback.d.ts +9 -0
- package/dist/commands/feedback.js +183 -0
- package/dist/commands/schema.d.ts +6 -0
- package/dist/commands/schema.js +869 -0
- package/dist/commands/show.d.ts +14 -0
- package/dist/commands/show.js +132 -0
- package/dist/commands/spec.d.ts +15 -0
- package/dist/commands/spec.js +225 -0
- package/dist/commands/validate.d.ts +24 -0
- package/dist/commands/validate.js +294 -0
- package/dist/commands/workflow/index.d.ts +17 -0
- package/dist/commands/workflow/index.js +12 -0
- package/dist/commands/workflow/instructions.d.ts +29 -0
- package/dist/commands/workflow/instructions.js +381 -0
- package/dist/commands/workflow/new-change.d.ts +11 -0
- package/dist/commands/workflow/new-change.js +44 -0
- package/dist/commands/workflow/schemas.d.ts +10 -0
- package/dist/commands/workflow/schemas.js +34 -0
- package/dist/commands/workflow/shared.d.ts +57 -0
- package/dist/commands/workflow/shared.js +116 -0
- package/dist/commands/workflow/status.d.ts +14 -0
- package/dist/commands/workflow/status.js +75 -0
- package/dist/commands/workflow/templates.d.ts +16 -0
- package/dist/commands/workflow/templates.js +68 -0
- package/dist/core/archive.d.ts +11 -0
- package/dist/core/archive.js +318 -0
- package/dist/core/artifact-graph/graph.d.ts +56 -0
- package/dist/core/artifact-graph/graph.js +141 -0
- package/dist/core/artifact-graph/index.d.ts +7 -0
- package/dist/core/artifact-graph/index.js +13 -0
- package/dist/core/artifact-graph/instruction-loader.d.ts +143 -0
- package/dist/core/artifact-graph/instruction-loader.js +214 -0
- package/dist/core/artifact-graph/resolver.d.ts +81 -0
- package/dist/core/artifact-graph/resolver.js +257 -0
- package/dist/core/artifact-graph/schema.d.ts +13 -0
- package/dist/core/artifact-graph/schema.js +108 -0
- package/dist/core/artifact-graph/state.d.ts +12 -0
- package/dist/core/artifact-graph/state.js +54 -0
- package/dist/core/artifact-graph/types.d.ts +45 -0
- package/dist/core/artifact-graph/types.js +43 -0
- package/dist/core/available-tools.d.ts +16 -0
- package/dist/core/available-tools.js +30 -0
- package/dist/core/command-generation/adapters/amazon-q.d.ts +13 -0
- package/dist/core/command-generation/adapters/amazon-q.js +26 -0
- package/dist/core/command-generation/adapters/antigravity.d.ts +13 -0
- package/dist/core/command-generation/adapters/antigravity.js +26 -0
- package/dist/core/command-generation/adapters/auggie.d.ts +13 -0
- package/dist/core/command-generation/adapters/auggie.js +27 -0
- package/dist/core/command-generation/adapters/claude.d.ts +13 -0
- package/dist/core/command-generation/adapters/claude.js +50 -0
- package/dist/core/command-generation/adapters/cline.d.ts +14 -0
- package/dist/core/command-generation/adapters/cline.js +27 -0
- package/dist/core/command-generation/adapters/codebuddy.d.ts +13 -0
- package/dist/core/command-generation/adapters/codebuddy.js +28 -0
- package/dist/core/command-generation/adapters/codex.d.ts +16 -0
- package/dist/core/command-generation/adapters/codex.js +39 -0
- package/dist/core/command-generation/adapters/continue.d.ts +13 -0
- package/dist/core/command-generation/adapters/continue.js +28 -0
- package/dist/core/command-generation/adapters/costrict.d.ts +13 -0
- package/dist/core/command-generation/adapters/costrict.js +27 -0
- package/dist/core/command-generation/adapters/crush.d.ts +13 -0
- package/dist/core/command-generation/adapters/crush.js +30 -0
- package/dist/core/command-generation/adapters/cursor.d.ts +14 -0
- package/dist/core/command-generation/adapters/cursor.js +44 -0
- package/dist/core/command-generation/adapters/factory.d.ts +13 -0
- package/dist/core/command-generation/adapters/factory.js +27 -0
- package/dist/core/command-generation/adapters/gemini.d.ts +13 -0
- package/dist/core/command-generation/adapters/gemini.js +26 -0
- package/dist/core/command-generation/adapters/github-copilot.d.ts +13 -0
- package/dist/core/command-generation/adapters/github-copilot.js +26 -0
- package/dist/core/command-generation/adapters/iflow.d.ts +13 -0
- package/dist/core/command-generation/adapters/iflow.js +29 -0
- package/dist/core/command-generation/adapters/index.d.ts +29 -0
- package/dist/core/command-generation/adapters/index.js +29 -0
- package/dist/core/command-generation/adapters/kilocode.d.ts +14 -0
- package/dist/core/command-generation/adapters/kilocode.js +23 -0
- package/dist/core/command-generation/adapters/kiro.d.ts +13 -0
- package/dist/core/command-generation/adapters/kiro.js +26 -0
- package/dist/core/command-generation/adapters/opencode.d.ts +13 -0
- package/dist/core/command-generation/adapters/opencode.js +29 -0
- package/dist/core/command-generation/adapters/pi.d.ts +14 -0
- package/dist/core/command-generation/adapters/pi.js +41 -0
- package/dist/core/command-generation/adapters/qoder.d.ts +13 -0
- package/dist/core/command-generation/adapters/qoder.js +30 -0
- package/dist/core/command-generation/adapters/qwen.d.ts +13 -0
- package/dist/core/command-generation/adapters/qwen.js +26 -0
- package/dist/core/command-generation/adapters/roocode.d.ts +14 -0
- package/dist/core/command-generation/adapters/roocode.js +27 -0
- package/dist/core/command-generation/adapters/windsurf.d.ts +14 -0
- package/dist/core/command-generation/adapters/windsurf.js +51 -0
- package/dist/core/command-generation/generator.d.ts +21 -0
- package/dist/core/command-generation/generator.js +27 -0
- package/dist/core/command-generation/index.d.ts +22 -0
- package/dist/core/command-generation/index.js +24 -0
- package/dist/core/command-generation/registry.d.ts +36 -0
- package/dist/core/command-generation/registry.js +92 -0
- package/dist/core/command-generation/types.d.ts +56 -0
- package/dist/core/command-generation/types.js +8 -0
- package/dist/core/completions/command-registry.d.ts +7 -0
- package/dist/core/completions/command-registry.js +461 -0
- package/dist/core/completions/completion-provider.d.ts +60 -0
- package/dist/core/completions/completion-provider.js +102 -0
- package/dist/core/completions/factory.d.ts +64 -0
- package/dist/core/completions/factory.js +75 -0
- package/dist/core/completions/generators/bash-generator.d.ts +32 -0
- package/dist/core/completions/generators/bash-generator.js +174 -0
- package/dist/core/completions/generators/fish-generator.d.ts +32 -0
- package/dist/core/completions/generators/fish-generator.js +157 -0
- package/dist/core/completions/generators/powershell-generator.d.ts +33 -0
- package/dist/core/completions/generators/powershell-generator.js +207 -0
- package/dist/core/completions/generators/zsh-generator.d.ts +44 -0
- package/dist/core/completions/generators/zsh-generator.js +250 -0
- package/dist/core/completions/installers/bash-installer.d.ts +87 -0
- package/dist/core/completions/installers/bash-installer.js +318 -0
- package/dist/core/completions/installers/fish-installer.d.ts +43 -0
- package/dist/core/completions/installers/fish-installer.js +143 -0
- package/dist/core/completions/installers/powershell-installer.d.ts +88 -0
- package/dist/core/completions/installers/powershell-installer.js +327 -0
- package/dist/core/completions/installers/zsh-installer.d.ts +125 -0
- package/dist/core/completions/installers/zsh-installer.js +449 -0
- package/dist/core/completions/templates/bash-templates.d.ts +6 -0
- package/dist/core/completions/templates/bash-templates.js +24 -0
- package/dist/core/completions/templates/fish-templates.d.ts +7 -0
- package/dist/core/completions/templates/fish-templates.js +39 -0
- package/dist/core/completions/templates/powershell-templates.d.ts +6 -0
- package/dist/core/completions/templates/powershell-templates.js +25 -0
- package/dist/core/completions/templates/zsh-templates.d.ts +6 -0
- package/dist/core/completions/templates/zsh-templates.js +36 -0
- package/dist/core/completions/types.d.ts +79 -0
- package/dist/core/completions/types.js +2 -0
- package/dist/core/config-prompts.d.ts +9 -0
- package/dist/core/config-prompts.js +34 -0
- package/dist/core/config-schema.d.ts +86 -0
- package/dist/core/config-schema.js +213 -0
- package/dist/core/config.d.ts +17 -0
- package/dist/core/config.js +33 -0
- package/dist/core/converters/json-converter.d.ts +6 -0
- package/dist/core/converters/json-converter.js +51 -0
- package/dist/core/global-config.d.ts +44 -0
- package/dist/core/global-config.js +125 -0
- package/dist/core/index.d.ts +2 -0
- package/dist/core/index.js +3 -0
- package/dist/core/init.d.ts +39 -0
- package/dist/core/init.js +634 -0
- package/dist/core/legacy-cleanup.d.ts +162 -0
- package/dist/core/legacy-cleanup.js +512 -0
- package/dist/core/list.d.ts +9 -0
- package/dist/core/list.js +171 -0
- package/dist/core/migration.d.ts +23 -0
- package/dist/core/migration.js +108 -0
- package/dist/core/parsers/change-parser.d.ts +13 -0
- package/dist/core/parsers/change-parser.js +193 -0
- package/dist/core/parsers/markdown-parser.d.ts +22 -0
- package/dist/core/parsers/markdown-parser.js +187 -0
- package/dist/core/parsers/requirement-blocks.d.ts +37 -0
- package/dist/core/parsers/requirement-blocks.js +201 -0
- package/dist/core/profile-sync-drift.d.ts +38 -0
- package/dist/core/profile-sync-drift.js +200 -0
- package/dist/core/profiles.d.ts +26 -0
- package/dist/core/profiles.js +40 -0
- package/dist/core/project-config.d.ts +64 -0
- package/dist/core/project-config.js +223 -0
- package/dist/core/schemas/base.schema.d.ts +13 -0
- package/dist/core/schemas/base.schema.js +13 -0
- package/dist/core/schemas/change.schema.d.ts +73 -0
- package/dist/core/schemas/change.schema.js +31 -0
- package/dist/core/schemas/index.d.ts +4 -0
- package/dist/core/schemas/index.js +4 -0
- package/dist/core/schemas/spec.schema.d.ts +18 -0
- package/dist/core/schemas/spec.schema.js +15 -0
- package/dist/core/shared/index.d.ts +8 -0
- package/dist/core/shared/index.js +8 -0
- package/dist/core/shared/skill-generation.d.ts +49 -0
- package/dist/core/shared/skill-generation.js +96 -0
- package/dist/core/shared/tool-detection.d.ts +71 -0
- package/dist/core/shared/tool-detection.js +158 -0
- package/dist/core/specs-apply.d.ts +73 -0
- package/dist/core/specs-apply.js +384 -0
- package/dist/core/styles/palette.d.ts +7 -0
- package/dist/core/styles/palette.js +8 -0
- package/dist/core/templates/index.d.ts +8 -0
- package/dist/core/templates/index.js +9 -0
- package/dist/core/templates/skill-templates.d.ts +19 -0
- package/dist/core/templates/skill-templates.js +18 -0
- package/dist/core/templates/types.d.ts +19 -0
- package/dist/core/templates/types.js +5 -0
- package/dist/core/templates/workflows/apply-change.d.ts +10 -0
- package/dist/core/templates/workflows/apply-change.js +313 -0
- package/dist/core/templates/workflows/archive-change.d.ts +10 -0
- package/dist/core/templates/workflows/archive-change.js +271 -0
- package/dist/core/templates/workflows/bulk-archive-change.d.ts +10 -0
- package/dist/core/templates/workflows/bulk-archive-change.js +488 -0
- package/dist/core/templates/workflows/continue-change.d.ts +10 -0
- package/dist/core/templates/workflows/continue-change.js +232 -0
- package/dist/core/templates/workflows/explore.d.ts +10 -0
- package/dist/core/templates/workflows/explore.js +469 -0
- package/dist/core/templates/workflows/feedback.d.ts +9 -0
- package/dist/core/templates/workflows/feedback.js +108 -0
- package/dist/core/templates/workflows/ff-change.d.ts +10 -0
- package/dist/core/templates/workflows/ff-change.js +198 -0
- package/dist/core/templates/workflows/new-change.d.ts +10 -0
- package/dist/core/templates/workflows/new-change.js +143 -0
- package/dist/core/templates/workflows/onboard.d.ts +10 -0
- package/dist/core/templates/workflows/onboard.js +565 -0
- package/dist/core/templates/workflows/propose.d.ts +10 -0
- package/dist/core/templates/workflows/propose.js +223 -0
- package/dist/core/templates/workflows/sync-specs.d.ts +10 -0
- package/dist/core/templates/workflows/sync-specs.js +272 -0
- package/dist/core/templates/workflows/verify-change.d.ts +10 -0
- package/dist/core/templates/workflows/verify-change.js +332 -0
- package/dist/core/update.d.ts +77 -0
- package/dist/core/update.js +537 -0
- package/dist/core/validation/constants.d.ts +34 -0
- package/dist/core/validation/constants.js +40 -0
- package/dist/core/validation/types.d.ts +18 -0
- package/dist/core/validation/types.js +2 -0
- package/dist/core/validation/validator.d.ts +33 -0
- package/dist/core/validation/validator.js +409 -0
- package/dist/core/view.d.ts +8 -0
- package/dist/core/view.js +168 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/dist/prompts/searchable-multi-select.d.ts +28 -0
- package/dist/prompts/searchable-multi-select.js +159 -0
- package/dist/telemetry/config.d.ts +32 -0
- package/dist/telemetry/config.js +68 -0
- package/dist/telemetry/index.d.ts +31 -0
- package/dist/telemetry/index.js +180 -0
- package/dist/ui/ascii-patterns.d.ts +16 -0
- package/dist/ui/ascii-patterns.js +133 -0
- package/dist/ui/welcome-screen.d.ts +10 -0
- package/dist/ui/welcome-screen.js +146 -0
- package/dist/utils/change-metadata.d.ts +51 -0
- package/dist/utils/change-metadata.js +147 -0
- package/dist/utils/change-utils.d.ts +62 -0
- package/dist/utils/change-utils.js +121 -0
- package/dist/utils/command-references.d.ts +18 -0
- package/dist/utils/command-references.js +20 -0
- package/dist/utils/file-system.d.ts +36 -0
- package/dist/utils/file-system.js +281 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/index.js +9 -0
- package/dist/utils/interactive.d.ts +18 -0
- package/dist/utils/interactive.js +21 -0
- package/dist/utils/item-discovery.d.ts +4 -0
- package/dist/utils/item-discovery.js +72 -0
- package/dist/utils/match.d.ts +3 -0
- package/dist/utils/match.js +22 -0
- package/dist/utils/shell-detection.d.ts +20 -0
- package/dist/utils/shell-detection.js +41 -0
- package/dist/utils/task-progress.d.ts +8 -0
- package/dist/utils/task-progress.js +36 -0
- package/extension-manifest.json +9 -0
- package/hooks/hooks.json +16 -0
- package/hooks/run-hook.cmd +46 -0
- package/hooks/session-start +51 -0
- package/package.json +87 -0
- package/schemas/spec-driven/schema.yaml +153 -0
- package/schemas/spec-driven/templates/design.md +19 -0
- package/schemas/spec-driven/templates/proposal.md +23 -0
- package/schemas/spec-driven/templates/spec.md +8 -0
- package/schemas/spec-driven/templates/tasks.md +9 -0
- package/scripts/postinstall.js +147 -0
- package/skills/dispatching-parallel-agents/SKILL.md +113 -0
- package/skills/finishing-a-development-branch/SKILL.md +200 -0
- package/skills/receiving-code-review/SKILL.md +213 -0
- package/skills/requesting-code-review/SKILL.md +73 -0
- package/skills/requesting-code-review/code-reviewer.md +146 -0
- package/skills/subagent-driven-development/SKILL.md +98 -0
- package/skills/subagent-driven-development/code-quality-reviewer-prompt.md +20 -0
- package/skills/subagent-driven-development/implementer-prompt.md +78 -0
- package/skills/systematic-debugging/CREATION-LOG.md +119 -0
- package/skills/systematic-debugging/SKILL.md +296 -0
- package/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
- package/skills/systematic-debugging/condition-based-waiting.md +115 -0
- package/skills/systematic-debugging/defense-in-depth.md +122 -0
- package/skills/systematic-debugging/find-polluter.sh +63 -0
- package/skills/systematic-debugging/root-cause-tracing.md +169 -0
- package/skills/systematic-debugging/test-academic.md +14 -0
- package/skills/systematic-debugging/test-pressure-1.md +58 -0
- package/skills/systematic-debugging/test-pressure-2.md +68 -0
- package/skills/systematic-debugging/test-pressure-3.md +69 -0
- package/skills/test-driven-development/SKILL.md +356 -0
- package/skills/test-driven-development/testing-anti-patterns.md +299 -0
- package/skills/using-git-worktrees/SKILL.md +212 -0
- package/skills/using-superpowers/SKILL.md +95 -0
- package/skills/verification-before-completion/SKILL.md +126 -0
- 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,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
|