@anionzo/skill 1.4.0 → 1.7.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/CONTRIBUTING.md +2 -1
- package/README.md +82 -24
- package/docs/design-brief.md +17 -13
- package/docs/knowledge-spec.md +1 -0
- package/i18n/CONTRIBUTING.vi.md +2 -1
- package/i18n/README.vi.md +82 -24
- package/i18n/design-brief.vi.md +17 -13
- package/i18n/knowledge-spec.vi.md +1 -0
- package/knowledge/global/skill-triggering-rules.md +3 -2
- package/package.json +1 -1
- package/scripts/install-opencode-skills +197 -35
- package/skills/brainstorming/SKILL.md +176 -13
- package/skills/brainstorming/meta.yaml +18 -10
- package/skills/code-review/SKILL.md +214 -19
- package/skills/code-review/meta.yaml +21 -9
- package/skills/commit/SKILL.md +187 -0
- package/skills/commit/examples.md +62 -0
- package/skills/commit/meta.yaml +29 -0
- package/skills/commit/references/output-template.md +14 -0
- package/skills/debug/SKILL.md +252 -0
- package/skills/debug/examples.md +83 -0
- package/skills/debug/meta.yaml +39 -0
- package/skills/debug/references/output-template.md +16 -0
- package/skills/docs-writer/SKILL.md +85 -10
- package/skills/docs-writer/meta.yaml +18 -13
- package/skills/extract/SKILL.md +201 -0
- package/skills/extract/examples.md +47 -0
- package/skills/extract/meta.yaml +33 -0
- package/skills/extract/references/output-template.md +24 -0
- package/skills/feature-delivery/SKILL.md +12 -5
- package/skills/feature-delivery/meta.yaml +6 -1
- package/skills/planning/SKILL.md +146 -17
- package/skills/planning/meta.yaml +19 -7
- package/skills/refactor-safe/SKILL.md +10 -7
- package/skills/research/SKILL.md +130 -0
- package/skills/research/examples.md +79 -0
- package/skills/research/meta.yaml +31 -0
- package/skills/research/references/output-template.md +23 -0
- package/skills/test-driven-development/SKILL.md +194 -0
- package/skills/test-driven-development/examples.md +77 -0
- package/skills/test-driven-development/meta.yaml +31 -0
- package/skills/test-driven-development/references/.gitkeep +0 -0
- package/skills/test-driven-development/references/output-template.md +31 -0
- package/skills/using-skills/SKILL.md +33 -17
- package/skills/using-skills/examples.md +20 -5
- package/skills/using-skills/meta.yaml +7 -4
- package/skills/verification-before-completion/SKILL.md +127 -13
- package/skills/verification-before-completion/meta.yaml +23 -14
- package/templates/SKILL.md +8 -1
- package/skills/bug-triage/SKILL.md +0 -47
- package/skills/bug-triage/examples.md +0 -68
- package/skills/bug-triage/meta.yaml +0 -25
- package/skills/bug-triage/references/output-template.md +0 -26
- package/skills/repo-onboarding/SKILL.md +0 -52
- package/skills/repo-onboarding/examples.md +0 -115
- package/skills/repo-onboarding/meta.yaml +0 -23
- package/skills/repo-onboarding/references/output-template.md +0 -24
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#!/usr/bin/env
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
2
|
|
|
3
3
|
# Install AI skills into agent-specific directories
|
|
4
4
|
#
|
|
@@ -10,14 +10,20 @@
|
|
|
10
10
|
# npm install @anionzo/skill # auto (postinstall)
|
|
11
11
|
# bash scripts/install-opencode-skills [project-dir]
|
|
12
12
|
|
|
13
|
-
set -
|
|
13
|
+
set -euo pipefail
|
|
14
14
|
|
|
15
15
|
SCRIPT_PATH=$(readlink -f "$0" 2>/dev/null || realpath "$0" 2>/dev/null || echo "$0")
|
|
16
16
|
ROOT=$(CDPATH= cd -- "$(dirname "$SCRIPT_PATH")/.." && pwd)
|
|
17
17
|
|
|
18
|
-
# Determine project root:
|
|
18
|
+
# Determine project root:
|
|
19
|
+
# 1. explicit arg
|
|
20
|
+
# 2. npm_config_local_prefix during lifecycle scripts (correct for npm install --prefix)
|
|
21
|
+
# 3. INIT_CWD (npm invocation cwd)
|
|
22
|
+
# 4. current dir
|
|
19
23
|
if [ -n "${1:-}" ]; then
|
|
20
24
|
PROJECT="$1"
|
|
25
|
+
elif [ "${npm_lifecycle_event:-}" = "postinstall" ] && [ -n "${npm_config_local_prefix:-}" ]; then
|
|
26
|
+
PROJECT="$npm_config_local_prefix"
|
|
21
27
|
elif [ -n "${INIT_CWD:-}" ]; then
|
|
22
28
|
PROJECT="$INIT_CWD"
|
|
23
29
|
else
|
|
@@ -135,8 +141,180 @@ copilot||.github/copilot-instructions.md|GitHub Copilot Instructions|GitHub Copi
|
|
|
135
141
|
# --- Interactive mode detection ---
|
|
136
142
|
|
|
137
143
|
is_interactive() {
|
|
138
|
-
|
|
139
|
-
|
|
144
|
+
[ "${npm_lifecycle_event:-}" != "postinstall" ] && [ -t 0 ] && [ -t 1 ]
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
# --- Interactive picker ---
|
|
148
|
+
|
|
149
|
+
MENU_LABELS=(
|
|
150
|
+
"OpenCode (.opencode/skills/ + OPENCODE.md)"
|
|
151
|
+
"Claude Code (.claude/skills/ + CLAUDE.md)"
|
|
152
|
+
"Agents (generic)(.agents/skills/ + AGENTS.md)"
|
|
153
|
+
"Gemini CLI (GEMINI.md)"
|
|
154
|
+
"GitHub Copilot (.github/copilot-instructions.md)"
|
|
155
|
+
"Update .gitignore with selected platform files"
|
|
156
|
+
)
|
|
157
|
+
|
|
158
|
+
read_key() {
|
|
159
|
+
local key rest final
|
|
160
|
+
|
|
161
|
+
IFS= read -rsn1 key || return 1
|
|
162
|
+
|
|
163
|
+
if [ "$key" = $'\x1b' ]; then
|
|
164
|
+
IFS= read -rsn1 -t 0.1 rest || true
|
|
165
|
+
if [ "$rest" = "[" ]; then
|
|
166
|
+
IFS= read -rsn1 -t 0.1 final || true
|
|
167
|
+
printf '\033[%s' "$final"
|
|
168
|
+
else
|
|
169
|
+
printf '\033%s' "$rest"
|
|
170
|
+
fi
|
|
171
|
+
return 0
|
|
172
|
+
fi
|
|
173
|
+
|
|
174
|
+
printf '%s' "$key"
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
render_menu() {
|
|
178
|
+
local cursor="$1"
|
|
179
|
+
shift
|
|
180
|
+
local -a state=("$@")
|
|
181
|
+
local i mark prefix
|
|
182
|
+
|
|
183
|
+
printf '\033[H\033[2J'
|
|
184
|
+
printf '\n'
|
|
185
|
+
printf ' @anionzo/skill -- AI Skill Library\n'
|
|
186
|
+
printf ' ==================================\n\n'
|
|
187
|
+
printf ' Use arrow keys to move, space to toggle, enter to install.\n'
|
|
188
|
+
printf ' Press a to toggle all platforms, q to cancel.\n\n'
|
|
189
|
+
|
|
190
|
+
for i in "${!MENU_LABELS[@]}"; do
|
|
191
|
+
[ "$i" -eq 5 ] && printf '\n'
|
|
192
|
+
|
|
193
|
+
if [ "${state[$i]}" -eq 1 ]; then
|
|
194
|
+
mark='[x]'
|
|
195
|
+
else
|
|
196
|
+
mark='[ ]'
|
|
197
|
+
fi
|
|
198
|
+
|
|
199
|
+
if [ "$i" -eq "$cursor" ]; then
|
|
200
|
+
prefix='>'
|
|
201
|
+
else
|
|
202
|
+
prefix=' '
|
|
203
|
+
fi
|
|
204
|
+
|
|
205
|
+
printf ' %s %s %s\n' "$prefix" "$mark" "${MENU_LABELS[$i]}"
|
|
206
|
+
done
|
|
207
|
+
|
|
208
|
+
printf '\n'
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
toggle_all_platforms() {
|
|
212
|
+
local -n state_ref=$1
|
|
213
|
+
local sum=0
|
|
214
|
+
local i next=1
|
|
215
|
+
|
|
216
|
+
for i in 0 1 2 3 4; do
|
|
217
|
+
sum=$((sum + state_ref[$i]))
|
|
218
|
+
done
|
|
219
|
+
|
|
220
|
+
[ "$sum" -eq 5 ] && next=0
|
|
221
|
+
|
|
222
|
+
for i in 0 1 2 3 4; do
|
|
223
|
+
state_ref[$i]=$next
|
|
224
|
+
done
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
interactive_select() {
|
|
228
|
+
local cursor=0
|
|
229
|
+
local key
|
|
230
|
+
local -a selected=(0 0 0 0 0 0)
|
|
231
|
+
|
|
232
|
+
while true; do
|
|
233
|
+
render_menu "$cursor" "${selected[@]}"
|
|
234
|
+
key=$(read_key) || exit 0
|
|
235
|
+
|
|
236
|
+
case "$key" in
|
|
237
|
+
$'\033[A')
|
|
238
|
+
if [ "$cursor" -eq 0 ]; then
|
|
239
|
+
cursor=$((${#MENU_LABELS[@]} - 1))
|
|
240
|
+
else
|
|
241
|
+
cursor=$((cursor - 1))
|
|
242
|
+
fi
|
|
243
|
+
;;
|
|
244
|
+
$'\033[B')
|
|
245
|
+
if [ "$cursor" -eq $((${#MENU_LABELS[@]} - 1)) ]; then
|
|
246
|
+
cursor=0
|
|
247
|
+
else
|
|
248
|
+
cursor=$((cursor + 1))
|
|
249
|
+
fi
|
|
250
|
+
;;
|
|
251
|
+
"")
|
|
252
|
+
break
|
|
253
|
+
;;
|
|
254
|
+
" ")
|
|
255
|
+
if [ "${selected[$cursor]}" -eq 1 ]; then
|
|
256
|
+
selected[$cursor]=0
|
|
257
|
+
else
|
|
258
|
+
selected[$cursor]=1
|
|
259
|
+
fi
|
|
260
|
+
;;
|
|
261
|
+
[aA])
|
|
262
|
+
toggle_all_platforms selected
|
|
263
|
+
;;
|
|
264
|
+
[qQ])
|
|
265
|
+
printf '\n Cancelled.\n\n'
|
|
266
|
+
exit 0
|
|
267
|
+
;;
|
|
268
|
+
esac
|
|
269
|
+
done
|
|
270
|
+
|
|
271
|
+
printf '%s\n' "${selected[@]}"
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
update_gitignore() {
|
|
275
|
+
local gitignore="$PROJECT/.gitignore"
|
|
276
|
+
local -a entries=()
|
|
277
|
+
local -a missing=()
|
|
278
|
+
local header_needed=0
|
|
279
|
+
local entry
|
|
280
|
+
|
|
281
|
+
[ "${do_opencode:-0}" -eq 1 ] && entries+=(".opencode/" "OPENCODE.md")
|
|
282
|
+
[ "${do_claude:-0}" -eq 1 ] && entries+=(".claude/" "CLAUDE.md")
|
|
283
|
+
[ "${do_agents:-0}" -eq 1 ] && entries+=(".agents/" "AGENTS.md")
|
|
284
|
+
[ "${do_gemini:-0}" -eq 1 ] && entries+=("GEMINI.md")
|
|
285
|
+
[ "${do_copilot:-0}" -eq 1 ] && entries+=(".github/copilot-instructions.md")
|
|
286
|
+
|
|
287
|
+
if [ "${#entries[@]}" -eq 0 ]; then
|
|
288
|
+
printf ' .gitignore: skipped (no platform files selected)\n'
|
|
289
|
+
return
|
|
290
|
+
fi
|
|
291
|
+
|
|
292
|
+
touch "$gitignore"
|
|
293
|
+
|
|
294
|
+
if ! grep -Fqx '# @anionzo/skill' "$gitignore" 2>/dev/null; then
|
|
295
|
+
header_needed=1
|
|
296
|
+
fi
|
|
297
|
+
|
|
298
|
+
for entry in "${entries[@]}"; do
|
|
299
|
+
if ! grep -Fqx "$entry" "$gitignore" 2>/dev/null; then
|
|
300
|
+
missing+=("$entry")
|
|
301
|
+
fi
|
|
302
|
+
done
|
|
303
|
+
|
|
304
|
+
if [ "${#missing[@]}" -eq 0 ]; then
|
|
305
|
+
printf ' .gitignore: already up to date -> %s\n' "$gitignore"
|
|
306
|
+
return
|
|
307
|
+
fi
|
|
308
|
+
|
|
309
|
+
if [ "$header_needed" -eq 1 ]; then
|
|
310
|
+
printf '\n# @anionzo/skill\n' >> "$gitignore"
|
|
311
|
+
fi
|
|
312
|
+
|
|
313
|
+
for entry in "${missing[@]}"; do
|
|
314
|
+
printf '%s\n' "$entry" >> "$gitignore"
|
|
315
|
+
done
|
|
316
|
+
|
|
317
|
+
printf ' .gitignore: added %d entries -> %s\n' "${#missing[@]}" "$gitignore"
|
|
140
318
|
}
|
|
141
319
|
|
|
142
320
|
# --- Main ---
|
|
@@ -146,36 +324,16 @@ printf ' @anionzo/skill — AI Skill Library\n'
|
|
|
146
324
|
printf ' ==================================\n\n'
|
|
147
325
|
|
|
148
326
|
if is_interactive; then
|
|
149
|
-
# --- Interactive: let user pick platforms ---
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
printf ' Enter choices (e.g. 1 2 3, or a for all): '
|
|
160
|
-
read -r choices
|
|
161
|
-
|
|
162
|
-
# Normalize
|
|
163
|
-
case "$choices" in
|
|
164
|
-
*[aA]*) choices="1 2 3 4 5" ;;
|
|
165
|
-
esac
|
|
166
|
-
|
|
167
|
-
# Parse choices into flags
|
|
168
|
-
do_opencode=0; do_claude=0; do_agents=0; do_gemini=0; do_copilot=0
|
|
169
|
-
|
|
170
|
-
for c in $choices; do
|
|
171
|
-
case "$c" in
|
|
172
|
-
1) do_opencode=1 ;;
|
|
173
|
-
2) do_claude=1 ;;
|
|
174
|
-
3) do_agents=1 ;;
|
|
175
|
-
4) do_gemini=1 ;;
|
|
176
|
-
5) do_copilot=1 ;;
|
|
177
|
-
esac
|
|
178
|
-
done
|
|
327
|
+
# --- Interactive: let user pick platforms with arrows + space ---
|
|
328
|
+
|
|
329
|
+
mapfile -t selected < <(interactive_select)
|
|
330
|
+
|
|
331
|
+
do_opencode=${selected[0]}
|
|
332
|
+
do_claude=${selected[1]}
|
|
333
|
+
do_agents=${selected[2]}
|
|
334
|
+
do_gemini=${selected[3]}
|
|
335
|
+
do_copilot=${selected[4]}
|
|
336
|
+
do_gitignore=${selected[5]}
|
|
179
337
|
|
|
180
338
|
# Check if anything was selected
|
|
181
339
|
total=$((do_opencode + do_claude + do_agents + do_gemini + do_copilot))
|
|
@@ -213,6 +371,10 @@ if is_interactive; then
|
|
|
213
371
|
printf ' -> .github/copilot-instructions.md\n'
|
|
214
372
|
fi
|
|
215
373
|
|
|
374
|
+
if [ "$do_gitignore" -eq 1 ]; then
|
|
375
|
+
update_gitignore
|
|
376
|
+
fi
|
|
377
|
+
|
|
216
378
|
else
|
|
217
379
|
# --- Silent mode: postinstall — install all skill dirs, no agent files ---
|
|
218
380
|
|
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
## Purpose
|
|
4
4
|
|
|
5
|
-
Refine a fuzzy request into a concrete direction
|
|
5
|
+
Refine a fuzzy request into a concrete direction, and when needed, lock decisions into a specification before implementation begins.
|
|
6
|
+
|
|
7
|
+
This skill combines idea exploration with spec-driven development: first clarify what to build, then optionally formalize it into a spec with locked decisions and acceptance criteria.
|
|
6
8
|
|
|
7
9
|
## When To Use
|
|
8
10
|
|
|
@@ -11,35 +13,196 @@ Load this skill when:
|
|
|
11
13
|
- the user has an idea but not a settled approach
|
|
12
14
|
- the scope or success criteria are still unclear
|
|
13
15
|
- multiple reasonable options exist and the tradeoff matters
|
|
14
|
-
-
|
|
16
|
+
- the user says "spec this", "define requirements", or "what should we build"
|
|
17
|
+
- planning a non-trivial feature that has ambiguous requirements
|
|
18
|
+
- multiple stakeholders need to agree on behavior before code is written
|
|
15
19
|
|
|
16
20
|
Skip this skill and go directly to `planning` when the request is already specific: a named feature with clear scope, a known code path, or an explicit task with acceptance criteria.
|
|
17
21
|
|
|
18
|
-
## Workflow
|
|
22
|
+
## Workflow Overview
|
|
23
|
+
|
|
24
|
+
**Phase 0: Explore** — clarify the idea, surface tradeoffs, extract decisions
|
|
25
|
+
**Phase 1: Lock Direction** — lock the recommended direction and scope boundary
|
|
26
|
+
**Phase 2: Write Spec** (optional) — formalize into a spec document with ACs
|
|
27
|
+
**Phase 3: Review** — get user approval before handoff
|
|
28
|
+
|
|
29
|
+
For simple clarifications, Phase 0 + Phase 1 is sufficient. For non-trivial features, continue through Phase 2 + Phase 3.
|
|
30
|
+
|
|
31
|
+
## Phase 0: Explore
|
|
32
|
+
|
|
33
|
+
### 0.1 Scope Assessment
|
|
34
|
+
|
|
35
|
+
Assess the request complexity:
|
|
36
|
+
|
|
37
|
+
- **Quick** — bounded, low ambiguity (rename a flag, tweak a label). Clarify and hand off to `planning`.
|
|
38
|
+
- **Standard** — normal feature with decisions to extract. Run full exploration.
|
|
39
|
+
- **Deep** — cross-cutting, strategic, or highly ambiguous. Run exploration with extra depth, then write a spec.
|
|
40
|
+
|
|
41
|
+
### 0.2 Restate and Question
|
|
19
42
|
|
|
20
43
|
1. Restate the request in plain language.
|
|
21
44
|
2. Ask focused questions that reduce ambiguity quickly.
|
|
22
45
|
3. Surface the most important tradeoffs, not every possible one.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
46
|
+
|
|
47
|
+
**HARD RULE: Ask ONE question at a time. Wait for the user's response before asking the next.**
|
|
48
|
+
|
|
49
|
+
Rules:
|
|
50
|
+
|
|
51
|
+
- One question per message — never bundled
|
|
52
|
+
- Single-select multiple choice preferred over open-ended
|
|
53
|
+
- Start broad (what/why/for whom) then narrow (constraints, edge cases)
|
|
54
|
+
- 3-4 questions per topic area, then checkpoint:
|
|
55
|
+
> "More questions about [area], or move on? (Remaining: [unvisited areas])"
|
|
56
|
+
|
|
57
|
+
### 0.3 Gray Area Identification
|
|
58
|
+
|
|
59
|
+
Generate 2-4 gray areas — decisions that affect implementation but were not stated in the request. A gray area is a decision that would force the planner to make an assumption without it.
|
|
60
|
+
|
|
61
|
+
Quick codebase scout (grep, not deep analysis):
|
|
62
|
+
|
|
63
|
+
- check what already exists that is related
|
|
64
|
+
- annotate options with what the codebase already has
|
|
65
|
+
|
|
66
|
+
Filter OUT:
|
|
67
|
+
|
|
68
|
+
- technical implementation details (architecture, library choices) — that is `planning`'s job
|
|
69
|
+
- performance concerns
|
|
70
|
+
- scope expansion (new capabilities not requested)
|
|
71
|
+
|
|
72
|
+
### 0.4 Decision Locking
|
|
73
|
+
|
|
74
|
+
After each gray area is resolved, lock the decision:
|
|
75
|
+
|
|
76
|
+
> "Lock decision D[N]: [summary]. Confirmed?"
|
|
77
|
+
|
|
78
|
+
Assign stable IDs: D1, D2, D3... These IDs carry forward into the spec.
|
|
79
|
+
|
|
80
|
+
**Scope creep response** — when the user suggests something outside scope:
|
|
81
|
+
|
|
82
|
+
> "[Feature X] is a new capability — noted as a separate work item. Back to [current area]: [question]"
|
|
83
|
+
|
|
84
|
+
## Phase 1: Lock Direction
|
|
85
|
+
|
|
86
|
+
Summarize the exploration output. All three of the following must be written down explicitly:
|
|
87
|
+
|
|
88
|
+
1. **Recommended direction** — the approach to take
|
|
89
|
+
2. **At least one key constraint** — what limits or shapes the solution
|
|
90
|
+
3. **Scope boundary** — what is in and what is out
|
|
91
|
+
|
|
92
|
+
Present viable options with consequences if multiple exist, but recommend one.
|
|
93
|
+
|
|
94
|
+
**For quick scope:** This is the final output. Hand off to `planning`.
|
|
95
|
+
|
|
96
|
+
**For standard/deep scope:** Continue to Phase 2.
|
|
97
|
+
|
|
98
|
+
## Phase 2: Write Spec (For Standard/Deep Scope)
|
|
99
|
+
|
|
100
|
+
### Spec Document Structure
|
|
101
|
+
|
|
102
|
+
```markdown
|
|
103
|
+
## Overview
|
|
104
|
+
|
|
105
|
+
Brief description of the feature and its purpose.
|
|
106
|
+
|
|
107
|
+
## Locked Decisions
|
|
108
|
+
|
|
109
|
+
- D1: [Decision summary]
|
|
110
|
+
- D2: [Decision summary]
|
|
111
|
+
|
|
112
|
+
## Requirements
|
|
113
|
+
|
|
114
|
+
### Functional Requirements
|
|
115
|
+
- FR-1: [Requirement description]
|
|
116
|
+
- FR-2: [Requirement description]
|
|
117
|
+
|
|
118
|
+
### Non-Functional Requirements
|
|
119
|
+
- NFR-1: [Performance, security, etc.]
|
|
120
|
+
|
|
121
|
+
## Acceptance Criteria
|
|
122
|
+
|
|
123
|
+
- [ ] AC-1: [Testable criterion]
|
|
124
|
+
- [ ] AC-2: [Testable criterion]
|
|
125
|
+
|
|
126
|
+
## Scenarios
|
|
127
|
+
|
|
128
|
+
### Scenario 1: [Happy Path]
|
|
129
|
+
**Given** [context]
|
|
130
|
+
**When** [action]
|
|
131
|
+
**Then** [expected result]
|
|
132
|
+
|
|
133
|
+
### Scenario 2: [Edge Case]
|
|
134
|
+
**Given** [context]
|
|
135
|
+
**When** [action]
|
|
136
|
+
**Then** [expected result]
|
|
137
|
+
|
|
138
|
+
## Open Questions
|
|
139
|
+
|
|
140
|
+
- [ ] Question 1?
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Spec Quality Rules
|
|
144
|
+
|
|
145
|
+
- Requirements must be testable.
|
|
146
|
+
- Acceptance criteria must be observable outcomes, not vague goals.
|
|
147
|
+
- Scenarios should cover the happy path plus important edge cases.
|
|
148
|
+
- Open questions must stay explicit, not buried in prose.
|
|
149
|
+
- Keep the spec focused on WHAT, not HOW (implementation is `planning`'s job).
|
|
150
|
+
|
|
151
|
+
## Phase 3: Review
|
|
152
|
+
|
|
153
|
+
Present the spec (or the locked direction for quick scope) and ask:
|
|
154
|
+
|
|
155
|
+
> Please review:
|
|
156
|
+
> - **Approve** if complete
|
|
157
|
+
> - **Edit** if you want to modify something
|
|
158
|
+
> - **Add more** if requirements are missing
|
|
159
|
+
|
|
160
|
+
Handle the response:
|
|
161
|
+
|
|
162
|
+
- **Approved** → hand off to next skill
|
|
163
|
+
- **Edit requested** → update, return to review
|
|
164
|
+
- **Add more** → gather additional requirements, update, return to review
|
|
26
165
|
|
|
27
166
|
## Output Format
|
|
28
167
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
-
|
|
34
|
-
-
|
|
168
|
+
Present results using the Shared Output Contract:
|
|
169
|
+
|
|
170
|
+
1. **Goal/Result** — the clarified direction, spec (if written), and approval status
|
|
171
|
+
2. **Key Details:**
|
|
172
|
+
- locked decisions (D1, D2...)
|
|
173
|
+
- scope boundary (in/out)
|
|
174
|
+
- viable options considered with tradeoffs
|
|
175
|
+
- acceptance criteria (if spec written)
|
|
176
|
+
- open questions
|
|
177
|
+
3. **Next Action** — after approval:
|
|
178
|
+
- to review each step: `planning` (with spec reference)
|
|
179
|
+
- to execute everything at once: `planning` in go mode (with spec reference)
|
|
180
|
+
- if requirements still unclear: state what decision is still needed
|
|
35
181
|
|
|
36
182
|
## Red Flags
|
|
37
183
|
|
|
38
184
|
- diving into file-level implementation too early
|
|
39
185
|
- asking many questions that do not change the decision
|
|
186
|
+
- batching multiple questions in one message (HARD RULE violation)
|
|
40
187
|
- presenting vague options with no tradeoff explanation
|
|
41
188
|
- pretending the problem is settled when key constraints are still unknown
|
|
189
|
+
- creating a spec without user input
|
|
190
|
+
- answering your own questions during exploration
|
|
191
|
+
- skipping the review step
|
|
192
|
+
- writing implementation notes instead of requirements
|
|
193
|
+
- leaving ambiguous acceptance criteria that cannot be verified
|
|
194
|
+
|
|
195
|
+
## Checklist
|
|
196
|
+
|
|
197
|
+
- [ ] Scope assessed (quick/standard/deep)
|
|
198
|
+
- [ ] Request restated in plain language
|
|
199
|
+
- [ ] Gray areas identified and explored (one question at a time)
|
|
200
|
+
- [ ] Decisions locked with stable IDs (D1, D2...)
|
|
201
|
+
- [ ] Direction, constraint, and scope boundary documented
|
|
202
|
+
- [ ] Spec written (if standard/deep scope): overview, decisions, requirements, ACs, scenarios
|
|
203
|
+
- [ ] User reviewed and approved
|
|
204
|
+
- [ ] Next step communicated
|
|
42
205
|
|
|
43
206
|
## Done Criteria
|
|
44
207
|
|
|
45
|
-
This skill is complete when
|
|
208
|
+
This skill is complete when the recommended direction, at least one key constraint, and the scope boundary are all written down explicitly. For standard/deep scope, the spec must be approved with acceptance criteria defined. If the spec is not approved, the skill is complete when the user has the information needed to make a decision.
|
|
@@ -1,23 +1,31 @@
|
|
|
1
1
|
name: brainstorming
|
|
2
|
-
version: 0.
|
|
2
|
+
version: 0.2.0
|
|
3
3
|
category: discovery
|
|
4
|
-
summary: Turn a rough idea
|
|
5
|
-
summary_vi: Biến ý tưởng thô
|
|
4
|
+
summary: Turn a rough idea into a concrete direction with locked decisions, optionally formalized into a spec with acceptance criteria.
|
|
5
|
+
summary_vi: "Biến ý tưởng thô thành hướng đi cụ thể với quyết định đã khóa, có thể formalize thành spec với acceptance criteria."
|
|
6
6
|
triggers:
|
|
7
7
|
- help me think this through
|
|
8
8
|
- explore the approach first
|
|
9
9
|
- the request is vague or underspecified
|
|
10
|
+
- spec this feature
|
|
11
|
+
- define requirements
|
|
12
|
+
- what should we build
|
|
13
|
+
- create a specification
|
|
10
14
|
inputs:
|
|
11
|
-
- rough idea
|
|
15
|
+
- rough idea or feature description
|
|
12
16
|
- user goals and constraints
|
|
13
17
|
outputs:
|
|
14
|
-
- clarified goal
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
+
- clarified goal and direction
|
|
19
|
+
- locked decisions (D1, D2...)
|
|
20
|
+
- scope boundary
|
|
21
|
+
- optional spec with requirements and ACs
|
|
22
|
+
- approval status
|
|
18
23
|
constraints:
|
|
19
|
-
-
|
|
20
|
-
-
|
|
24
|
+
- ask one question at a time during exploration
|
|
25
|
+
- do not skip the review step
|
|
26
|
+
- keep focused on WHAT not HOW
|
|
21
27
|
related_skills:
|
|
22
28
|
- using-skills
|
|
23
29
|
- planning
|
|
30
|
+
- research
|
|
31
|
+
- feature-delivery
|