@complexthings/superpowers-agent 10.0.3 → 11.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/.agents/superpowers-agent +17 -222
- package/.github/copilot-instructions.md +0 -9
- package/AGENTS.md +19 -140
- package/README.md +79 -507
- package/package.json +1 -7
- package/.agents/docs/SUPERPOWERS.md +0 -37
- package/.agents/skills/.gitkeep +0 -0
- package/.agents/skills/claude-handoff/SKILL.md +0 -18
- package/.agents/skills/code-review/SKILL.md +0 -89
- package/.agents/skills/codebase-design/DEEPENING.md +0 -37
- package/.agents/skills/codebase-design/DESIGN-IT-TWICE.md +0 -44
- package/.agents/skills/codebase-design/SKILL.md +0 -114
- package/.agents/skills/design-an-interface/SKILL.md +0 -94
- package/.agents/skills/diagnosing-bugs/SKILL.md +0 -134
- package/.agents/skills/diagnosing-bugs/scripts/hitl-loop.template.sh +0 -41
- package/.agents/skills/domain-modeling/ADR-FORMAT.md +0 -47
- package/.agents/skills/domain-modeling/CONTEXT-FORMAT.md +0 -60
- package/.agents/skills/domain-modeling/SKILL.md +0 -74
- package/.agents/skills/fable-mode/SKILL.md +0 -95
- package/.agents/skills/git-guardrails-claude-code/SKILL.md +0 -95
- package/.agents/skills/git-guardrails-claude-code/scripts/block-dangerous-git.sh +0 -25
- package/.agents/skills/grill-me/SKILL.md +0 -7
- package/.agents/skills/grill-with-docs/SKILL.md +0 -7
- package/.agents/skills/grilling/SKILL.md +0 -14
- package/.agents/skills/handoff/SKILL.md +0 -16
- package/.agents/skills/i-have-adhd/SKILL.md +0 -120
- package/.agents/skills/implement/SKILL.md +0 -11
- package/.agents/skills/improve-codebase-architecture/HTML-REPORT.md +0 -123
- package/.agents/skills/improve-codebase-architecture/SKILL.md +0 -66
- package/.agents/skills/loop-me/SKILL.md +0 -32
- package/.agents/skills/prototype/LOGIC.md +0 -79
- package/.agents/skills/prototype/SKILL.md +0 -30
- package/.agents/skills/prototype/UI.md +0 -112
- package/.agents/skills/qa/SKILL.md +0 -130
- package/.agents/skills/request-refactor-plan/SKILL.md +0 -68
- package/.agents/skills/research/SKILL.md +0 -12
- package/.agents/skills/resolving-merge-conflicts/SKILL.md +0 -14
- package/.agents/skills/scaffold-exercises/SKILL.md +0 -106
- package/.agents/skills/setup-matt-pocock-skills/SKILL.md +0 -127
- package/.agents/skills/setup-matt-pocock-skills/domain.md +0 -51
- package/.agents/skills/setup-matt-pocock-skills/issue-tracker-github.md +0 -45
- package/.agents/skills/setup-matt-pocock-skills/issue-tracker-gitlab.md +0 -46
- package/.agents/skills/setup-matt-pocock-skills/issue-tracker-local.md +0 -30
- package/.agents/skills/setup-matt-pocock-skills/triage-labels.md +0 -15
- package/.agents/skills/skill-creator/LICENSE.txt +0 -202
- package/.agents/skills/skill-creator/SKILL.md +0 -485
- package/.agents/skills/skill-creator/agents/analyzer.md +0 -274
- package/.agents/skills/skill-creator/agents/comparator.md +0 -202
- package/.agents/skills/skill-creator/agents/grader.md +0 -223
- package/.agents/skills/skill-creator/assets/eval_review.html +0 -146
- package/.agents/skills/skill-creator/eval-viewer/generate_review.py +0 -471
- package/.agents/skills/skill-creator/eval-viewer/viewer.html +0 -1325
- package/.agents/skills/skill-creator/references/schemas.md +0 -430
- package/.agents/skills/skill-creator/scripts/__init__.py +0 -0
- package/.agents/skills/skill-creator/scripts/__pycache__/__init__.cpython-314.pyc +0 -0
- package/.agents/skills/skill-creator/scripts/__pycache__/run_eval.cpython-314.pyc +0 -0
- package/.agents/skills/skill-creator/scripts/__pycache__/utils.cpython-314.pyc +0 -0
- package/.agents/skills/skill-creator/scripts/aggregate_benchmark.py +0 -401
- package/.agents/skills/skill-creator/scripts/generate_report.py +0 -326
- package/.agents/skills/skill-creator/scripts/improve_description.py +0 -247
- package/.agents/skills/skill-creator/scripts/package_skill.py +0 -136
- package/.agents/skills/skill-creator/scripts/quick_validate.py +0 -103
- package/.agents/skills/skill-creator/scripts/run_eval.py +0 -310
- package/.agents/skills/skill-creator/scripts/run_loop.py +0 -328
- package/.agents/skills/skill-creator/scripts/utils.py +0 -47
- package/.agents/skills/tdd/SKILL.md +0 -36
- package/.agents/skills/tdd/mocking.md +0 -59
- package/.agents/skills/tdd/tests.md +0 -77
- package/.agents/skills/teach/GLOSSARY-FORMAT.md +0 -35
- package/.agents/skills/teach/LEARNING-RECORD-FORMAT.md +0 -46
- package/.agents/skills/teach/MISSION-FORMAT.md +0 -31
- package/.agents/skills/teach/RESOURCES-FORMAT.md +0 -32
- package/.agents/skills/teach/SKILL.md +0 -140
- package/.agents/skills/to-spec/SKILL.md +0 -75
- package/.agents/skills/to-tickets/SKILL.md +0 -114
- package/.agents/skills/triage/AGENT-BRIEF.md +0 -207
- package/.agents/skills/triage/OUT-OF-SCOPE.md +0 -105
- package/.agents/skills/triage/SKILL.md +0 -112
- package/.agents/skills/ubiquitous-language/SKILL.md +0 -93
- package/.agents/skills/wayfinder/SKILL.md +0 -127
- package/.agents/skills/writing-great-skills/GLOSSARY.md +0 -201
- package/.agents/skills/writing-great-skills/SKILL.md +0 -83
- package/.agents/templates/AGENTS.md.template +0 -27
- package/.agents/templates/SUPERPOWERS.md.template +0 -37
- package/skills/collaboration/brainstorming/SKILL.md +0 -66
- package/skills/collaboration/brainstorming/skill.json +0 -9
- package/skills/collaboration/leveraging-cli-tools/SKILL.md +0 -110
- package/skills/collaboration/leveraging-cli-tools/references/copilot-instructions.md +0 -30
- package/skills/collaboration/leveraging-cli-tools/scripts/setup-ponytail.sh +0 -185
- package/skills/collaboration/leveraging-cli-tools/scripts/setup-rtk.sh +0 -217
- package/skills/collaboration/leveraging-cli-tools/skill.json +0 -9
- package/skills/meta/create-skill-json/SKILL.md +0 -370
- package/skills/meta/create-skill-json/skill.json +0 -9
- package/skills/meta/create-skill-json/test-scenarios.md +0 -29
- package/skills/setup-skills/SKILL.md +0 -54
- package/skills/setup-skills/skill.json +0 -8
|
@@ -1,217 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# setup-rtk.sh — verify rtk is configured for the current agentic harness.
|
|
3
|
-
#
|
|
4
|
-
# Contract:
|
|
5
|
-
# - Default (no args): CHECK + REPORT only. Detects the harness, prints
|
|
6
|
-
# config status per-check ([ok]/[missing]), and prints the EXACT rtk
|
|
7
|
-
# commands that would fix any gap. Changes NOTHING.
|
|
8
|
-
# - `--apply`: runs the planned fix commands for the DETECTED harness only.
|
|
9
|
-
# Every fix is a call to `rtk init ...`, which is itself create-if-absent
|
|
10
|
-
# and never overwrites existing config, so re-running is always safe.
|
|
11
|
-
# - If the harness can't be determined, every harness is checked read-only
|
|
12
|
-
# and nothing is ever applied (there's no single harness to act on).
|
|
13
|
-
#
|
|
14
|
-
# Usage:
|
|
15
|
-
# scripts/setup-rtk.sh # check + report (safe, default)
|
|
16
|
-
# scripts/setup-rtk.sh --apply # run the planned fix commands
|
|
17
|
-
|
|
18
|
-
set -euo pipefail
|
|
19
|
-
|
|
20
|
-
APPLY=false
|
|
21
|
-
if [ "${1:-}" = "--apply" ]; then
|
|
22
|
-
APPLY=true
|
|
23
|
-
fi
|
|
24
|
-
|
|
25
|
-
if ! command -v rtk >/dev/null 2>&1; then
|
|
26
|
-
echo "[--] rtk is not installed or not on PATH — nothing to check."
|
|
27
|
-
echo " Install rtk first, then re-run this script."
|
|
28
|
-
exit 1
|
|
29
|
-
fi
|
|
30
|
-
|
|
31
|
-
REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
|
|
32
|
-
PLANNED=()
|
|
33
|
-
|
|
34
|
-
plan() {
|
|
35
|
-
PLANNED+=("$1")
|
|
36
|
-
echo " planned: $1"
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
run_planned() {
|
|
40
|
-
for cmd in "${PLANNED[@]}"; do
|
|
41
|
-
echo " running: $cmd"
|
|
42
|
-
eval "$cmd"
|
|
43
|
-
done
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
# --- Harness detection -------------------------------------------------
|
|
47
|
-
# Sensible, lazy heuristic: harness-specific env vars first, then config
|
|
48
|
-
# dirs. Order matters — check the most specific/reliable signal first.
|
|
49
|
-
detect_harness() {
|
|
50
|
-
if [ -n "${CLAUDECODE:-}" ] || [ -n "${CLAUDE_CODE_ENTRYPOINT:-}" ]; then
|
|
51
|
-
echo claude; return
|
|
52
|
-
fi
|
|
53
|
-
if [ -n "${CODEX_SANDBOX:-}" ] || [ -n "${CODEX_HOME:-}" ]; then
|
|
54
|
-
echo codex; return
|
|
55
|
-
fi
|
|
56
|
-
if [ -n "${OPENCODE_MODEL:-}" ] || [ -d "$HOME/.config/opencode" ] && [ -n "${OPENCODE_EXPERIMENTAL_MARKDOWN:-}${OPENCODE_BIN_PATH:-}" ]; then
|
|
57
|
-
echo opencode; return
|
|
58
|
-
fi
|
|
59
|
-
if [ -n "${PI_AGENT:-}" ] || [ -n "${PI_HOME:-}" ]; then
|
|
60
|
-
echo pi; return
|
|
61
|
-
fi
|
|
62
|
-
if [ -n "${GITHUB_COPILOT_CLI:-}" ] || [ -n "${COPILOT_AGENT:-}" ]; then
|
|
63
|
-
echo copilot; return
|
|
64
|
-
fi
|
|
65
|
-
echo unknown
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
# --- Per-harness checks -------------------------------------------------
|
|
69
|
-
# Each check prints [ok]/[missing] status lines and calls `plan` for any
|
|
70
|
-
# gap. None of these mutate anything by themselves.
|
|
71
|
-
|
|
72
|
-
check_claude() {
|
|
73
|
-
echo "Claude Code:"
|
|
74
|
-
local show
|
|
75
|
-
show="$(rtk init --show 2>&1)"
|
|
76
|
-
local core global_bad local_bad
|
|
77
|
-
core="$(printf '%s\n' "$show" | grep -E '(Hook:|RTK\.md:|Global \(|Local \(|settings\.json:)' || true)"
|
|
78
|
-
global_bad="$(printf '%s\n' "$core" | grep -v 'Local (' | grep -v '^\[ok\]' || true)"
|
|
79
|
-
local_bad="$(printf '%s\n' "$core" | grep 'Local (' | grep -v '^\[ok\]' || true)"
|
|
80
|
-
|
|
81
|
-
if [ -z "$global_bad" ] && [ -z "$local_bad" ]; then
|
|
82
|
-
echo "$core" | sed 's/^/ /'
|
|
83
|
-
echo " [ok] rtk fully configured for Claude Code"
|
|
84
|
-
return
|
|
85
|
-
fi
|
|
86
|
-
|
|
87
|
-
echo "$core" | sed 's/^/ /'
|
|
88
|
-
if [ -n "$global_bad" ]; then
|
|
89
|
-
plan "rtk init -g --auto-patch"
|
|
90
|
-
fi
|
|
91
|
-
if [ -n "$local_bad" ]; then
|
|
92
|
-
plan "rtk init --auto-patch"
|
|
93
|
-
fi
|
|
94
|
-
CLAUDE_NEEDS_RESTART=true
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
check_opencode() {
|
|
98
|
-
echo "OpenCode:"
|
|
99
|
-
local plugin="$HOME/.config/opencode/plugins/rtk.ts"
|
|
100
|
-
if [ -f "$plugin" ]; then
|
|
101
|
-
echo " [ok] plugin installed ($plugin)"
|
|
102
|
-
else
|
|
103
|
-
echo " [missing] plugin not found ($plugin)"
|
|
104
|
-
plan "rtk init -g --opencode"
|
|
105
|
-
fi
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
check_pi() {
|
|
109
|
-
echo "pi:"
|
|
110
|
-
local ext="$HOME/.pi/agent/extensions/rtk.ts"
|
|
111
|
-
local repo_rtk="$REPO_ROOT/RTK.md"
|
|
112
|
-
if [ -f "$ext" ]; then
|
|
113
|
-
echo " [ok] extension installed ($ext)"
|
|
114
|
-
else
|
|
115
|
-
echo " [missing] extension not found ($ext)"
|
|
116
|
-
plan "rtk init -g --agent pi"
|
|
117
|
-
fi
|
|
118
|
-
if [ -f "$repo_rtk" ]; then
|
|
119
|
-
echo " [ok] repo RTK.md present ($repo_rtk)"
|
|
120
|
-
else
|
|
121
|
-
echo " [missing] repo RTK.md not found ($repo_rtk)"
|
|
122
|
-
plan "rtk init --codex"
|
|
123
|
-
fi
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
check_codex() {
|
|
127
|
-
echo "codex:"
|
|
128
|
-
local codex_home="${CODEX_HOME:-$HOME/.codex}"
|
|
129
|
-
local global_rtk="$codex_home/RTK.md"
|
|
130
|
-
local repo_rtk="$REPO_ROOT/RTK.md"
|
|
131
|
-
if [ -f "$global_rtk" ]; then
|
|
132
|
-
echo " [ok] global RTK.md present ($global_rtk)"
|
|
133
|
-
else
|
|
134
|
-
echo " [missing] global RTK.md not found ($global_rtk)"
|
|
135
|
-
plan "rtk init -g --codex"
|
|
136
|
-
fi
|
|
137
|
-
if [ -f "$repo_rtk" ]; then
|
|
138
|
-
echo " [ok] repo RTK.md present ($repo_rtk)"
|
|
139
|
-
else
|
|
140
|
-
echo " [missing] repo RTK.md not found ($repo_rtk)"
|
|
141
|
-
plan "rtk init --codex"
|
|
142
|
-
fi
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
check_copilot() {
|
|
146
|
-
echo "GitHub Copilot:"
|
|
147
|
-
local global_hook="$HOME/.copilot/hooks/rtk-rewrite.json"
|
|
148
|
-
local repo_hook="$REPO_ROOT/.github/hooks/rtk-rewrite.json"
|
|
149
|
-
if [ -f "$global_hook" ]; then
|
|
150
|
-
echo " [ok] global hook present ($global_hook)"
|
|
151
|
-
else
|
|
152
|
-
echo " [missing] global hook not found ($global_hook)"
|
|
153
|
-
plan "rtk init -g --copilot"
|
|
154
|
-
fi
|
|
155
|
-
if [ -f "$repo_hook" ]; then
|
|
156
|
-
echo " [ok] repo hook present ($repo_hook)"
|
|
157
|
-
else
|
|
158
|
-
echo " [missing] repo hook not found ($repo_hook)"
|
|
159
|
-
plan "rtk init --copilot"
|
|
160
|
-
fi
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
# --- Main ----------------------------------------------------------------
|
|
164
|
-
CLAUDE_NEEDS_RESTART=false
|
|
165
|
-
HARNESS="$(detect_harness)"
|
|
166
|
-
|
|
167
|
-
case "$HARNESS" in
|
|
168
|
-
claude)
|
|
169
|
-
echo "Detected harness: Claude Code"
|
|
170
|
-
check_claude
|
|
171
|
-
;;
|
|
172
|
-
opencode)
|
|
173
|
-
echo "Detected harness: OpenCode"
|
|
174
|
-
check_opencode
|
|
175
|
-
;;
|
|
176
|
-
pi)
|
|
177
|
-
echo "Detected harness: pi"
|
|
178
|
-
check_pi
|
|
179
|
-
;;
|
|
180
|
-
codex)
|
|
181
|
-
echo "Detected harness: codex"
|
|
182
|
-
check_codex
|
|
183
|
-
;;
|
|
184
|
-
copilot)
|
|
185
|
-
echo "Detected harness: GitHub Copilot"
|
|
186
|
-
check_copilot
|
|
187
|
-
;;
|
|
188
|
-
unknown)
|
|
189
|
-
echo "Harness could not be determined — checking all harnesses read-only."
|
|
190
|
-
check_claude
|
|
191
|
-
check_opencode
|
|
192
|
-
check_pi
|
|
193
|
-
check_codex
|
|
194
|
-
check_copilot
|
|
195
|
-
echo
|
|
196
|
-
echo "No single harness detected, so nothing can be applied automatically."
|
|
197
|
-
echo "Re-run on the target machine/agent, or configure manually with the commands above."
|
|
198
|
-
exit 0
|
|
199
|
-
;;
|
|
200
|
-
esac
|
|
201
|
-
|
|
202
|
-
echo
|
|
203
|
-
if [ "${#PLANNED[@]}" -eq 0 ]; then
|
|
204
|
-
echo "rtk is already configured for $HARNESS. Nothing to do."
|
|
205
|
-
exit 0
|
|
206
|
-
fi
|
|
207
|
-
|
|
208
|
-
if [ "$APPLY" = true ]; then
|
|
209
|
-
echo "Applying fixes for $HARNESS..."
|
|
210
|
-
run_planned
|
|
211
|
-
if [ "$HARNESS" = "claude" ] && [ "$CLAUDE_NEEDS_RESTART" = true ]; then
|
|
212
|
-
echo
|
|
213
|
-
echo "rtk config changed for Claude Code — please restart Claude Code to pick it up."
|
|
214
|
-
fi
|
|
215
|
-
else
|
|
216
|
-
echo "Run again with --apply to execute the planned command(s) above."
|
|
217
|
-
fi
|
|
@@ -1,370 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: create-skill-json
|
|
3
|
-
description: Generate a skill.json metadata file for a skill from its SKILL.md and directory structure. Use when adding a new skill to a repository, updating an existing skill's metadata, or standardizing skill.json files. Triggers whenever someone mentions generating, creating, or updating skill.json files.
|
|
4
|
-
metadata:
|
|
5
|
-
version: 1.1.0
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Create skill.json
|
|
9
|
-
|
|
10
|
-
## Overview
|
|
11
|
-
|
|
12
|
-
Generate a `skill.json` metadata file for a skill based on its `SKILL.md` frontmatter and directory structure. This ensures consistent skill metadata across repositories.
|
|
13
|
-
|
|
14
|
-
**Core principle:** skill.json is generated from existing information (frontmatter, file structure), not created from scratch with assumptions.
|
|
15
|
-
|
|
16
|
-
**CRITICAL:** skill.json contains **EXACTLY 5 FIELDS** - no more, no less. Any additional fields are forbidden.
|
|
17
|
-
|
|
18
|
-
## Input Requirements
|
|
19
|
-
|
|
20
|
-
You must be given:
|
|
21
|
-
- A path to a `SKILL.md` file, OR
|
|
22
|
-
- A path to a directory containing a `SKILL.md` file
|
|
23
|
-
|
|
24
|
-
## Process
|
|
25
|
-
|
|
26
|
-
### 1. Validate Input
|
|
27
|
-
|
|
28
|
-
```bash
|
|
29
|
-
# If given directory path
|
|
30
|
-
if [ -d "$input_path" ]; then
|
|
31
|
-
skill_dir="$input_path"
|
|
32
|
-
skill_md="${skill_dir}/SKILL.md"
|
|
33
|
-
else
|
|
34
|
-
skill_md="$input_path"
|
|
35
|
-
skill_dir="$(dirname "$input_path")"
|
|
36
|
-
fi
|
|
37
|
-
|
|
38
|
-
# Verify SKILL.md exists
|
|
39
|
-
if [ ! -f "$skill_md" ]; then
|
|
40
|
-
echo "Error: SKILL.md not found at $skill_md"
|
|
41
|
-
exit 1
|
|
42
|
-
fi
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
### 2. Extract Frontmatter Data
|
|
46
|
-
|
|
47
|
-
Read the SKILL.md file and extract frontmatter fields:
|
|
48
|
-
|
|
49
|
-
```yaml
|
|
50
|
-
---
|
|
51
|
-
name: human-readable-name
|
|
52
|
-
description: One-line summary of what the skill does and when to use it.
|
|
53
|
-
metadata:
|
|
54
|
-
version: 1.0.0 # Optional, defaults to 1.0.0
|
|
55
|
-
---
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
**Required fields from frontmatter:**
|
|
59
|
-
- `name` → becomes `title` in skill.json
|
|
60
|
-
- `metadata.version` (or top-level `version`) → use if present, otherwise default to "1.0.0"
|
|
61
|
-
|
|
62
|
-
### 3. Determine Skill Name (with Namespace)
|
|
63
|
-
|
|
64
|
-
The skill `name` in skill.json includes a **namespace prefix** based on where the skill lives:
|
|
65
|
-
|
|
66
|
-
| Location | Namespace | Example name |
|
|
67
|
-
|----------|-----------|--------------|
|
|
68
|
-
| `~/.agents/superpowers/skills/` | `superpowers:` | `superpowers:debugging/memory-profiling` |
|
|
69
|
-
| `.agents/skills/` (project) | none | `debugging/memory-profiling` |
|
|
70
|
-
| `~/.agents/skills/` (personal) | none | `debugging/memory-profiling` |
|
|
71
|
-
|
|
72
|
-
The path component after the namespace is the **relative path from the skills root directory**.
|
|
73
|
-
|
|
74
|
-
**Examples:**
|
|
75
|
-
- Superpowers skill at `~/.agents/superpowers/skills/debugging/memory-profiling/` → name: `superpowers:debugging/memory-profiling`
|
|
76
|
-
- Project skill at `./skills/meta/create-skill-json/` → name: `meta/create-skill-json`
|
|
77
|
-
- Personal skill at `~/.agents/skills/collaboration/brainstorming/` → name: `collaboration/brainstorming`
|
|
78
|
-
|
|
79
|
-
**When context is ambiguous** (can't determine location), ask the user or default to no prefix.
|
|
80
|
-
|
|
81
|
-
### 4. Identify Helper Files
|
|
82
|
-
|
|
83
|
-
Helper files are files in the skill directory (excluding SKILL.md itself) that the skill **references or uses**. Focus on files that support agents executing the skill.
|
|
84
|
-
|
|
85
|
-
**Include in helpers array:**
|
|
86
|
-
- `scripts/` — executable scripts referenced in the skill
|
|
87
|
-
- `examples/` — example code or files used in the skill
|
|
88
|
-
- `templates/` — reusable templates the skill instructs agents to use
|
|
89
|
-
- `references/` — reference documents the skill tells agents to read
|
|
90
|
-
- `assets/` — static resources the skill uses
|
|
91
|
-
- Root-level support files (e.g., `package.json`, `*.sh`, `*.py` that aren't test files)
|
|
92
|
-
|
|
93
|
-
**Path format:** Relative to the skill directory (where skill.json will live)
|
|
94
|
-
|
|
95
|
-
```json
|
|
96
|
-
"helpers": [
|
|
97
|
-
"scripts/profile-heap.js",
|
|
98
|
-
"scripts/analyze-snapshots.py",
|
|
99
|
-
"examples/node-example.js",
|
|
100
|
-
"package.json"
|
|
101
|
-
]
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
**Exclude from helpers:**
|
|
105
|
-
- `SKILL.md` itself
|
|
106
|
-
- `skill.json` (if it already exists)
|
|
107
|
-
- Hidden files (starting with `.`)
|
|
108
|
-
- Test/evaluation files (`test-*.md`, `evals/`, `*-workspace/`)
|
|
109
|
-
- Documentation not used by the skill: `README.md`, `CHANGELOG.md`, `LICENSE.txt`
|
|
110
|
-
- `node_modules/`, build artifacts
|
|
111
|
-
|
|
112
|
-
**If helpers array is empty**, omit the field entirely (don't include `"helpers": []`).
|
|
113
|
-
|
|
114
|
-
### 5. Generate Aliases
|
|
115
|
-
|
|
116
|
-
Aliases allow users to reference the skill with shorter names.
|
|
117
|
-
|
|
118
|
-
**Standard aliases (in this order):**
|
|
119
|
-
1. Just the skill name (shortest): `skill-name`
|
|
120
|
-
2. The full path: `category/skill-name`
|
|
121
|
-
|
|
122
|
-
**Example:**
|
|
123
|
-
```json
|
|
124
|
-
"aliases": [
|
|
125
|
-
"memory-profiling",
|
|
126
|
-
"debugging/memory-profiling"
|
|
127
|
-
]
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
**Optional:** Add a well-known abbreviation as a third alias only when it is clearly recognized — don't invent aliases.
|
|
131
|
-
|
|
132
|
-
**Do NOT add random synonyms** — stick to the standard two aliases unless an obvious abbreviation exists.
|
|
133
|
-
|
|
134
|
-
### 6. Create skill.json
|
|
135
|
-
|
|
136
|
-
Assemble the complete skill.json with **EXACTLY these 5 fields** (or 4 if helpers is empty):
|
|
137
|
-
|
|
138
|
-
```json
|
|
139
|
-
{
|
|
140
|
-
"version": "1.0.0",
|
|
141
|
-
"name": "superpowers:category/skill-name",
|
|
142
|
-
"title": "Human-Readable Title",
|
|
143
|
-
"helpers": [
|
|
144
|
-
"scripts/helper1.js"
|
|
145
|
-
],
|
|
146
|
-
"aliases": [
|
|
147
|
-
"skill-name",
|
|
148
|
-
"category/skill-name"
|
|
149
|
-
]
|
|
150
|
-
}
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
When helpers is empty, omit it:
|
|
154
|
-
|
|
155
|
-
```json
|
|
156
|
-
{
|
|
157
|
-
"version": "1.0.0",
|
|
158
|
-
"name": "superpowers:category/skill-name",
|
|
159
|
-
"title": "Human-Readable Title",
|
|
160
|
-
"aliases": [
|
|
161
|
-
"skill-name",
|
|
162
|
-
"category/skill-name"
|
|
163
|
-
]
|
|
164
|
-
}
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
**FORBIDDEN:** Do NOT add any other fields. No `description`, `tags`, `capabilities`, `triggers`, `keyConcepts`, `components`, `references`, `quickReference`, `resources`, `stats`, `when_to_use`, or any other creative fields.
|
|
168
|
-
|
|
169
|
-
### 7. Write and Validate
|
|
170
|
-
|
|
171
|
-
Write the skill.json file to the skill directory:
|
|
172
|
-
|
|
173
|
-
```bash
|
|
174
|
-
output_path="${skill_dir}/skill.json"
|
|
175
|
-
echo "$skill_json" > "$output_path"
|
|
176
|
-
|
|
177
|
-
# Optional: Validate JSON syntax
|
|
178
|
-
if command -v jq &> /dev/null; then
|
|
179
|
-
jq empty "$output_path" 2>&1 || echo "Warning: Invalid JSON generated"
|
|
180
|
-
fi
|
|
181
|
-
|
|
182
|
-
echo "Created: $output_path"
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
Also run `skills-ref validate` if the tool is available:
|
|
186
|
-
|
|
187
|
-
```bash
|
|
188
|
-
if command -v skills-ref &> /dev/null; then
|
|
189
|
-
skills-ref validate "$skill_dir" && echo "Skill validation passed"
|
|
190
|
-
fi
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
## Complete Example
|
|
194
|
-
|
|
195
|
-
**Input:** `~/.agents/superpowers/skills/debugging/memory-profiling/`
|
|
196
|
-
|
|
197
|
-
**Directory structure:**
|
|
198
|
-
```
|
|
199
|
-
~/.agents/superpowers/skills/debugging/memory-profiling/
|
|
200
|
-
├── SKILL.md
|
|
201
|
-
├── scripts/
|
|
202
|
-
│ ├── profile-heap.js
|
|
203
|
-
│ ├── analyze-snapshots.py
|
|
204
|
-
│ └── compare-profiles.sh
|
|
205
|
-
└── examples/
|
|
206
|
-
└── node-example.js
|
|
207
|
-
```
|
|
208
|
-
|
|
209
|
-
**SKILL.md frontmatter:**
|
|
210
|
-
```yaml
|
|
211
|
-
---
|
|
212
|
-
name: memory-profiling
|
|
213
|
-
metadata:
|
|
214
|
-
version: 2.1.0
|
|
215
|
-
---
|
|
216
|
-
```
|
|
217
|
-
|
|
218
|
-
**Generated skill.json:**
|
|
219
|
-
```json
|
|
220
|
-
{
|
|
221
|
-
"version": "2.1.0",
|
|
222
|
-
"name": "superpowers:debugging/memory-profiling",
|
|
223
|
-
"title": "memory-profiling",
|
|
224
|
-
"helpers": [
|
|
225
|
-
"scripts/profile-heap.js",
|
|
226
|
-
"scripts/analyze-snapshots.py",
|
|
227
|
-
"scripts/compare-profiles.sh",
|
|
228
|
-
"examples/node-example.js"
|
|
229
|
-
],
|
|
230
|
-
"aliases": [
|
|
231
|
-
"memory-profiling",
|
|
232
|
-
"debugging/memory-profiling"
|
|
233
|
-
]
|
|
234
|
-
}
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
## FORBIDDEN FIELDS
|
|
238
|
-
|
|
239
|
-
**skill.json must contain EXACTLY 4-5 fields** (version, name, title, helpers [optional], aliases). The following fields are explicitly FORBIDDEN:
|
|
240
|
-
|
|
241
|
-
### Documentation Fields (belongs in SKILL.md)
|
|
242
|
-
- ❌ `description` - Use SKILL.md frontmatter `description` field
|
|
243
|
-
- ❌ `when_to_use` - Use SKILL.md frontmatter or content
|
|
244
|
-
- ❌ `keyConcepts` - Document in SKILL.md content
|
|
245
|
-
- ❌ `overview` - Document in SKILL.md content
|
|
246
|
-
|
|
247
|
-
### Discovery Fields (handled by native skill discovery)
|
|
248
|
-
- ❌ `tags` - Use SKILL.md frontmatter fields for search
|
|
249
|
-
- ❌ `keywords` - Use SKILL.md content for search
|
|
250
|
-
- ❌ `triggers` - Use SKILL.md `description` field
|
|
251
|
-
- ❌ `categories` - Path already indicates category
|
|
252
|
-
|
|
253
|
-
### Capability Fields (documented in SKILL.md)
|
|
254
|
-
- ❌ `capabilities` - Document in SKILL.md content
|
|
255
|
-
- ❌ `features` - Document in SKILL.md content
|
|
256
|
-
- ❌ `commands` - Document in SKILL.md content
|
|
257
|
-
|
|
258
|
-
### Reference Fields (use helper files)
|
|
259
|
-
- ❌ `references` - Link to helper files in SKILL.md
|
|
260
|
-
- ❌ `resources` - Add to `helpers` array if needed
|
|
261
|
-
- ❌ `links` - Add to SKILL.md content
|
|
262
|
-
|
|
263
|
-
### Structure Fields (use helper files)
|
|
264
|
-
- ❌ `components` - Document in SKILL.md or helper files
|
|
265
|
-
- ❌ `quickReference` - Create as helper file if needed
|
|
266
|
-
|
|
267
|
-
### Metadata Fields (not used by tooling)
|
|
268
|
-
- ❌ `author` - Track in git history
|
|
269
|
-
- ❌ `license` - Inherited from repository
|
|
270
|
-
|
|
271
|
-
### Statistics/Config Fields (unnecessary)
|
|
272
|
-
- ❌ `stats` - Not used by any tooling
|
|
273
|
-
- ❌ `config` - Create as helper file if needed
|
|
274
|
-
|
|
275
|
-
## Rationalization Table
|
|
276
|
-
|
|
277
|
-
| Rationalization | Counter |
|
|
278
|
-
|-----------------|---------|
|
|
279
|
-
| "Adding `description` helps with discoverability" | NO. Description is in SKILL.md frontmatter. Native skill discovery reads it. |
|
|
280
|
-
| "`tags` make it easier to categorize and search" | NO. Native skill discovery uses SKILL.md content and frontmatter. Path already indicates category. |
|
|
281
|
-
| "`capabilities` document what the skill does" | NO. That's what SKILL.md content is for. skill.json is for tooling, not documentation. |
|
|
282
|
-
| "`triggers` help agents know when to use this" | NO. SKILL.md `description` field serves this purpose. Don't duplicate. |
|
|
283
|
-
| "These fields might be useful for future features" | YAGNI violation. No imaginary consumers. Only add fields when tooling actually needs them. |
|
|
284
|
-
| "`helpers: []` is cleaner than omitting the field" | NO. Omit empty arrays — real skill.json files do not include `helpers` when empty. |
|
|
285
|
-
| "Other skill systems use these fields" | Irrelevant. superpowers-agent uses 4-5 fields. Period. |
|
|
286
|
-
| "Extra metadata is harmless" | NO. Bloats files, creates maintenance burden, misleads about what tooling uses. |
|
|
287
|
-
|
|
288
|
-
## Common Mistakes
|
|
289
|
-
|
|
290
|
-
### ❌ Missing namespace prefix for superpowers skills
|
|
291
|
-
```json
|
|
292
|
-
"name": "debugging/memory-profiling" // WRONG for superpowers skills
|
|
293
|
-
```
|
|
294
|
-
|
|
295
|
-
**Fix:** Add the `superpowers:` prefix for skills in `~/.agents/superpowers/skills/`:
|
|
296
|
-
```json
|
|
297
|
-
"name": "superpowers:debugging/memory-profiling" // CORRECT
|
|
298
|
-
```
|
|
299
|
-
|
|
300
|
-
### ❌ Wrong alias order
|
|
301
|
-
```json
|
|
302
|
-
"aliases": ["debugging/memory-profiling", "memory-profiling"] // WRONG - long path first
|
|
303
|
-
```
|
|
304
|
-
|
|
305
|
-
**Fix:** Short name first, full path second:
|
|
306
|
-
```json
|
|
307
|
-
"aliases": ["memory-profiling", "debugging/memory-profiling"] // CORRECT
|
|
308
|
-
```
|
|
309
|
-
|
|
310
|
-
### ❌ Including empty helpers array
|
|
311
|
-
```json
|
|
312
|
-
"helpers": [] // WRONG - omit if empty
|
|
313
|
-
```
|
|
314
|
-
|
|
315
|
-
**Fix:** Omit the field entirely when there are no helpers:
|
|
316
|
-
```json
|
|
317
|
-
// Just leave out "helpers" when there's nothing to list
|
|
318
|
-
```
|
|
319
|
-
|
|
320
|
-
### ❌ Including test/eval files in helpers
|
|
321
|
-
```json
|
|
322
|
-
"helpers": ["test-scenarios.md", "evals/evals.json"] // WRONG - test files aren't helpers
|
|
323
|
-
```
|
|
324
|
-
|
|
325
|
-
**Fix:** Only include files that agents use when executing the skill.
|
|
326
|
-
|
|
327
|
-
### ❌ Adding creative aliases
|
|
328
|
-
```json
|
|
329
|
-
"aliases": ["memory-profiling", "heap-profiling", "memory-analysis"] // WRONG
|
|
330
|
-
```
|
|
331
|
-
|
|
332
|
-
**Fix:** Standard two aliases unless a well-known abbreviation exists:
|
|
333
|
-
```json
|
|
334
|
-
"aliases": ["memory-profiling", "debugging/memory-profiling"] // CORRECT
|
|
335
|
-
```
|
|
336
|
-
|
|
337
|
-
## Fields Reference
|
|
338
|
-
|
|
339
|
-
| Field | Source | Required | Default |
|
|
340
|
-
|-------|--------|----------|---------|
|
|
341
|
-
| `version` | Frontmatter `metadata.version` | No | `"1.0.0"` |
|
|
342
|
-
| `name` | Namespace + skill directory path | Yes | N/A |
|
|
343
|
-
| `title` | Frontmatter `name` field | Yes | N/A |
|
|
344
|
-
| `helpers` | Referenced support files | No | Omit if empty |
|
|
345
|
-
| `aliases` | Generated from path | Yes | `["skill-name", "category/skill-name"]` |
|
|
346
|
-
|
|
347
|
-
## Verification
|
|
348
|
-
|
|
349
|
-
After creating skill.json, verify:
|
|
350
|
-
|
|
351
|
-
- [ ] JSON is valid syntax (use `jq` if available)
|
|
352
|
-
- [ ] **File contains exactly 4 or 5 top-level fields** (version, name, title, [helpers], aliases)
|
|
353
|
-
- [ ] No forbidden fields present
|
|
354
|
-
- [ ] `version` matches SKILL.md frontmatter (or is "1.0.0")
|
|
355
|
-
- [ ] `name` includes correct namespace prefix (`superpowers:` for superpowers repo, none for project/personal)
|
|
356
|
-
- [ ] `title` matches `name` field from SKILL.md frontmatter
|
|
357
|
-
- [ ] `helpers` array lists only referenced support files (omitted if empty)
|
|
358
|
-
- [ ] `aliases` has short name first, full path second
|
|
359
|
-
- [ ] File saved to same directory as SKILL.md
|
|
360
|
-
- [ ] `skills-ref validate` passes (if tool available)
|
|
361
|
-
|
|
362
|
-
**Field count check:**
|
|
363
|
-
```bash
|
|
364
|
-
jq 'keys | length' skill.json # Must output: 4 or 5
|
|
365
|
-
```
|
|
366
|
-
|
|
367
|
-
## Related Skills
|
|
368
|
-
|
|
369
|
-
- **superpowers:writing-skills** - Create new skills following TDD methodology
|
|
370
|
-
- **superpowers:gardening-skills-wiki** - Maintain and organize skill collections
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
# Test Scenarios for create-skill-json Skill
|
|
2
|
-
|
|
3
|
-
## Purpose
|
|
4
|
-
Test that agents strictly follow the 5-field structure and don't add creative extras.
|
|
5
|
-
|
|
6
|
-
## Baseline Behavior (WITHOUT strict enforcement)
|
|
7
|
-
Agent adds fields like: `description`, `tags`, `capabilities`, `triggers`, `keyConcepts`, `quickReference`, `components`, `references`, etc.
|
|
8
|
-
|
|
9
|
-
## Test Scenario 1: Documentation-Rich Skill
|
|
10
|
-
**Setup:** Large skill with extensive frontmatter and multiple reference files
|
|
11
|
-
**Pressure:** Agent wants to "preserve valuable information" from references
|
|
12
|
-
**Expected Behavior:** Only 5 fields in skill.json, no documentation fields
|
|
13
|
-
|
|
14
|
-
## Test Scenario 2: Tool-Heavy Skill
|
|
15
|
-
**Setup:** Skill with scripts/, examples/, templates/ subdirectories
|
|
16
|
-
**Pressure:** Agent wants to categorize helpers by type
|
|
17
|
-
**Expected Behavior:** Flat helpers array, no categorization fields
|
|
18
|
-
|
|
19
|
-
## Test Scenario 3: Domain-Specific Skill
|
|
20
|
-
**Setup:** Skill for specific technology (e.g., Adobe Commerce)
|
|
21
|
-
**Pressure:** Agent wants to add `tags`, `capabilities`, `triggers` for "discoverability"
|
|
22
|
-
**Expected Behavior:** No extra metadata fields
|
|
23
|
-
|
|
24
|
-
## Common Rationalizations to Block
|
|
25
|
-
- "Adding description helps with discoverability" → NO, description is in SKILL.md
|
|
26
|
-
- "Tags make it easier to find" → NO, native skill discovery uses SKILL.md frontmatter
|
|
27
|
-
- "Capabilities document what it does" → NO, that's in SKILL.md content
|
|
28
|
-
- "These fields might be useful later" → YAGNI violation
|
|
29
|
-
- "Other tools might use them" → No other tools exist, don't design for imaginary consumers
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: setup-skills
|
|
3
|
-
description: Run superpowers-agent setup-skills to detect which AI harnesses (Claude Code, GitHub Copilot, OpenCode, Pi, Codex) are present in a project and wire up its skills infrastructure — .agents/skills/, per-harness symlinks, and each harness's instruction file. Use whenever starting a new project with AI agents, when skills symlinks are missing, when AGENTS.md or CLAUDE.md lacks skills configuration, when a user asks to "set up skills", "install skills", "bootstrap skills", or "initialize superpowers". Also use when skills aren't being discovered, or before creating project-specific skills if the infrastructure doesn't exist yet.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Setup Skills
|
|
7
|
-
|
|
8
|
-
This skill does one thing: run `superpowers-agent setup-skills` and follow the output it gives you exactly.
|
|
9
|
-
|
|
10
|
-
## Run the Command
|
|
11
|
-
|
|
12
|
-
From the project root:
|
|
13
|
-
|
|
14
|
-
```bash
|
|
15
|
-
superpowers-agent setup-skills
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## What the Command Does
|
|
19
|
-
|
|
20
|
-
- Creates `.agents/`, `.agents/skills/`, and `.agents/docs/SUPERPOWERS.md` (the reference doc every generated instruction file links to).
|
|
21
|
-
- Detects harnesses by dot-folder existence or CLI binary on PATH: Claude Code (`.claude`/`claude`), GitHub Copilot (`.github`/`copilot`), OpenCode (`.opencode`/`opencode`), Pi (`.pi`/`pi`), Codex (`.codex`/`codex`).
|
|
22
|
-
- Writes/updates `AGENTS.md` unconditionally (creating it if missing) with tool mappings for Copilot, OpenCode, Pi, and Codex.
|
|
23
|
-
- Updates `CLAUDE.md` in place only if one already exists at the project root or in `.agents/` — it never creates a fresh `CLAUDE.md`.
|
|
24
|
-
- Creates or updates `.github/copilot-instructions.md` only when GitHub Copilot is detected.
|
|
25
|
-
- Keeps exactly one backup per instruction file it touches (dedupes old `*.backup*` files).
|
|
26
|
-
- Symlinks each detected harness's skills dir back to `.agents/skills/`: `.claude/skills`, `.github/skills`, `.opencode/skill` (singular). Pi and Codex read `.agents/skills/` directly — no symlink.
|
|
27
|
-
|
|
28
|
-
## Follow the Output Exactly
|
|
29
|
-
|
|
30
|
-
The command output is authoritative. Read it, act on it, and do not skip any steps it prescribes. It adapts to the harnesses detected in your project and tells you precisely what was created, updated, or skipped.
|
|
31
|
-
|
|
32
|
-
If the command prints follow-up instructions, complete them before continuing with your task.
|
|
33
|
-
|
|
34
|
-
If it fails for any reason other than not-found (e.g. permission denied, partial failure), surface the exact error and stop — do not continue or leave the project half-configured.
|
|
35
|
-
|
|
36
|
-
## If superpowers-agent Is Not Found
|
|
37
|
-
|
|
38
|
-
Install it first, then rerun:
|
|
39
|
-
|
|
40
|
-
```bash
|
|
41
|
-
npm install -g @complexthings/superpowers-agent
|
|
42
|
-
superpowers-agent setup-skills
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
## After Setup
|
|
46
|
-
|
|
47
|
-
Project-specific skills belong in `.agents/skills/`. All AI agents working in the project discover them automatically via the symlinks the command created.
|
|
48
|
-
|
|
49
|
-
To verify, use your platform's native skill tool and confirm the project skills are available.
|
|
50
|
-
|
|
51
|
-
## Related Skills
|
|
52
|
-
|
|
53
|
-
- Use your platform's native skill tool to discover available skills after setup.
|
|
54
|
-
- Follow your platform's skill guidance for loading and applying them.
|