specweave 3.0.23 → 3.1.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/.claude-plugin/marketplace.json +2 -2
- package/README.md +31 -16
- package/bin/specweave.js +35 -0
- package/dist/src/cli/commands/create-increment.js +1 -1
- package/dist/src/cli/commands/create-increment.js.map +1 -1
- package/dist/src/cli/commands/glossary.d.ts +16 -0
- package/dist/src/cli/commands/glossary.d.ts.map +1 -0
- package/dist/src/cli/commands/glossary.js +55 -0
- package/dist/src/cli/commands/glossary.js.map +1 -0
- package/dist/src/cli/commands/init.d.ts +1 -1
- package/dist/src/cli/commands/init.d.ts.map +1 -1
- package/dist/src/cli/commands/init.js +7 -6
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/jev-helpers.d.ts.map +1 -1
- package/dist/src/cli/commands/jev-helpers.js +5 -10
- package/dist/src/cli/commands/jev-helpers.js.map +1 -1
- package/dist/src/cli/commands/project.d.ts.map +1 -1
- package/dist/src/cli/commands/project.js +4 -2
- package/dist/src/cli/commands/project.js.map +1 -1
- package/dist/src/cli/commands/refresh-plugins.d.ts.map +1 -1
- package/dist/src/cli/commands/refresh-plugins.js +7 -1
- package/dist/src/cli/commands/refresh-plugins.js.map +1 -1
- package/dist/src/cli/commands/review.d.ts +24 -0
- package/dist/src/cli/commands/review.d.ts.map +1 -0
- package/dist/src/cli/commands/review.js +124 -0
- package/dist/src/cli/commands/review.js.map +1 -0
- package/dist/src/cli/commands/skills.d.ts +18 -0
- package/dist/src/cli/commands/skills.d.ts.map +1 -0
- package/dist/src/cli/commands/skills.js +130 -0
- package/dist/src/cli/commands/skills.js.map +1 -0
- package/dist/src/cli/commands/update.d.ts.map +1 -1
- package/dist/src/cli/commands/update.js +10 -3
- package/dist/src/cli/commands/update.js.map +1 -1
- package/dist/src/cli/helpers/init/instruction-file-writer.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/instruction-file-writer.js +4 -3
- package/dist/src/cli/helpers/init/instruction-file-writer.js.map +1 -1
- package/dist/src/cli/helpers/init/plugin-installer.js +1 -1
- package/dist/src/cli/helpers/init/plugin-installer.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/index.js +2 -2
- package/dist/src/core/config/types.d.ts +39 -6
- package/dist/src/core/config/types.d.ts.map +1 -1
- package/dist/src/core/config/types.js +2 -0
- package/dist/src/core/config/types.js.map +1 -1
- package/dist/src/core/glossary/check.d.ts +44 -0
- package/dist/src/core/glossary/check.d.ts.map +1 -0
- package/dist/src/core/glossary/check.js +203 -0
- package/dist/src/core/glossary/check.js.map +1 -0
- package/dist/src/core/glossary/parse.d.ts +40 -0
- package/dist/src/core/glossary/parse.d.ts.map +1 -0
- package/dist/src/core/glossary/parse.js +112 -0
- package/dist/src/core/glossary/parse.js.map +1 -0
- package/dist/src/core/hooks/handlers/stop.js +1 -1
- package/dist/src/core/hooks/handlers/stop.js.map +1 -1
- package/dist/src/core/increment/template-creator.js +1 -1
- package/dist/src/core/increment/template-creator.js.map +1 -1
- package/dist/src/core/review/brief.d.ts +46 -0
- package/dist/src/core/review/brief.d.ts.map +1 -0
- package/dist/src/core/review/brief.js +151 -0
- package/dist/src/core/review/brief.js.map +1 -0
- package/dist/src/core/review/reviewer.d.ts +62 -0
- package/dist/src/core/review/reviewer.d.ts.map +1 -0
- package/dist/src/core/review/reviewer.js +166 -0
- package/dist/src/core/review/reviewer.js.map +1 -0
- package/dist/src/core/skills/catalog.d.ts +49 -0
- package/dist/src/core/skills/catalog.d.ts.map +1 -0
- package/dist/src/core/skills/catalog.js +95 -0
- package/dist/src/core/skills/catalog.js.map +1 -0
- package/dist/src/core/skills/legacy-skill-hashes.d.ts +11 -0
- package/dist/src/core/skills/legacy-skill-hashes.d.ts.map +1 -0
- package/dist/src/core/skills/legacy-skill-hashes.js +83 -0
- package/dist/src/core/skills/legacy-skill-hashes.js.map +1 -0
- package/dist/src/core/skills/project-skills.d.ts +58 -16
- package/dist/src/core/skills/project-skills.d.ts.map +1 -1
- package/dist/src/core/skills/project-skills.js +169 -32
- package/dist/src/core/skills/project-skills.js.map +1 -1
- package/dist/src/core/tasks/closure-gate.d.ts +2 -1
- package/dist/src/core/tasks/closure-gate.d.ts.map +1 -1
- package/dist/src/core/tasks/closure-gate.js +36 -4
- package/dist/src/core/tasks/closure-gate.js.map +1 -1
- package/package.json +1 -1
- package/plugins/PLUGINS-INDEX.md +14 -12
- package/plugins/specweave/.claude-plugin/plugin.json +2 -2
- package/plugins/specweave/PLUGIN.md +24 -16
- package/plugins/specweave/marketplace.json +57 -38
- package/plugins/specweave/skills/auto/SKILL.md +8 -38
- package/plugins/specweave/skills/auto/agents/openai.yaml +5 -0
- package/plugins/specweave/skills/do/SKILL.md +46 -10
- package/plugins/specweave/skills/done/SKILL.md +6 -3
- package/plugins/specweave/skills/increment/SKILL.md +20 -11
- package/plugins/specweave/skills/review/SKILL.md +23 -4
- package/plugins/specweave/skills-catalog.json +32 -0
- package/plugins/specweave/skills-optional/glossary/SKILL.md +90 -0
- package/plugins/specweave/skills-optional/glossary/references/credits.md +33 -0
- package/plugins/specweave/skills-optional/grill-me/SKILL.md +99 -0
- package/plugins/specweave/{skills/brainstorm → skills-optional/grill-me}/references/credits.md +3 -3
- package/src/templates/AGENTS.md.template +7 -1
- package/plugins/specweave/skills/brainstorm/SKILL.md +0 -100
- package/plugins/specweave/skills/team/SKILL.md +0 -70
- /package/plugins/specweave/{skills → skills-optional}/jev/SKILL.md +0 -0
- /package/plugins/specweave/{skills → skills-optional}/project/SKILL.md +0 -0
- /package/plugins/specweave/{skills → skills-optional}/sync/SKILL.md +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Adversarial
|
|
2
|
+
description: Adversarial review of an increment before it ships, by a fresh context or another model family; every finding cites path:line and is re-verified. Use for "review", "qa", "critique this".
|
|
3
3
|
argument-hint: "[increment-id] [--full]"
|
|
4
|
-
version: 3.
|
|
4
|
+
version: 3.1.0
|
|
5
5
|
---
|
|
6
6
|
<!-- Generated from skills/sw-review/SKILL.md by scripts/build/generate-skills.mjs. Edit the source, then npm run build. -->
|
|
7
7
|
|
|
@@ -14,8 +14,8 @@ This is also the quality check: its verdict says whether the increment is ready.
|
|
|
14
14
|
## Non-negotiables
|
|
15
15
|
|
|
16
16
|
- **Fresh context.** The session that wrote the code never approves it. Use a new
|
|
17
|
-
session,
|
|
18
|
-
cannot get a fresh context, say so in the report.
|
|
17
|
+
session, a subagent if your tool supports them, or another model (below). If you
|
|
18
|
+
wrote this code here and cannot get a fresh context, say so in the report.
|
|
19
19
|
- **Every finding cites `path:line`** and a concrete failure: input or state leads to
|
|
20
20
|
wrong output, a crash, a hang, data loss or a leak. "Consider refactoring" is not one.
|
|
21
21
|
- **Re-verify.** Re-open the lines and, where a test can show it, run one. Drop what
|
|
@@ -42,6 +42,24 @@ This is also the quality check: its verdict says whether the increment is ready.
|
|
|
42
42
|
(`### T-09 Fix empty evidence` + `- AC: AC-02 | Files: ... | Test: ...`) for sw-do, or
|
|
43
43
|
is fixed and re-tested now. Then verify again and close with sw-done.
|
|
44
44
|
|
|
45
|
+
## Another model
|
|
46
|
+
|
|
47
|
+
A model reviewing code its own family wrote shares that code's blind spots.
|
|
48
|
+
`specweave review` hands the increment to a reviewer from another family: it reads who
|
|
49
|
+
finished the tasks from the ledger (`claude@mbp` is Claude), runs Codex with GPT-6.1-Sol
|
|
50
|
+
on Claude-written code (Claude Opus on OpenAI-written code), and writes
|
|
51
|
+
`reports/review-codex.md` in the shape below plus a ledger note. Exit 0: ship; 3: fix
|
|
52
|
+
first, or no verdict; 1: no reviewer installed, or it failed.
|
|
53
|
+
|
|
54
|
+
- Run it when `review.crossModel` is true in `.specweave/config.json`, when the user
|
|
55
|
+
asks for another model, or when you wrote the code and have no fresh context.
|
|
56
|
+
- `--brief` prints the brief (ACs, tasks and their Files, the diff) to paste into any
|
|
57
|
+
model by hand; `--reviewer claude`, `--base origin/main` and `--timeout 45` override.
|
|
58
|
+
- `review.reviewer` pins one reviewer; `review.reviewers.<name>.command` adds a CLI that
|
|
59
|
+
reads the brief on stdin and answers on stdout, or into `{out}` when it names one.
|
|
60
|
+
|
|
61
|
+
Its findings get the same treatment as yours: re-open each line before acting on it.
|
|
62
|
+
|
|
45
63
|
## reports/review.md
|
|
46
64
|
|
|
47
65
|
```markdown
|
|
@@ -57,6 +75,7 @@ Nits: naming in ledger.ts:31.
|
|
|
57
75
|
```
|
|
58
76
|
|
|
59
77
|
Verdict is `fix first` while any critical or high finding survives, else `ship`.
|
|
78
|
+
`specweave complete` notes a `fix first` verdict in the newest review report.
|
|
60
79
|
|
|
61
80
|
## Manual path (no CLI)
|
|
62
81
|
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$comment": "The one list of SpecWeave skills. Core skills ship in the sw plugin and in every project. Optional skills install into a project only when listed under skills.enabled in .specweave/config.json, or when their detect rule matches and they are not under skills.disabled. Retired skills are removed from projects on update. scripts/build/generate-skills.mjs copies this file to plugins/specweave/skills-catalog.json.",
|
|
3
|
+
"core": ["increment", "do", "auto", "done", "review", "handoff"],
|
|
4
|
+
"optional": [
|
|
5
|
+
{
|
|
6
|
+
"name": "grill-me",
|
|
7
|
+
"summary": "Interview you in rounds until every decision in a plan is settled",
|
|
8
|
+
"detect": "deep-interview"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"name": "glossary",
|
|
12
|
+
"summary": "Build GLOSSARY.md: each domain term across business, data, code and UI",
|
|
13
|
+
"detect": "glossary-file"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"name": "sync",
|
|
17
|
+
"summary": "Push progress to and pull issues from GitHub, Jira or Azure DevOps",
|
|
18
|
+
"detect": "tracker"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"name": "project",
|
|
22
|
+
"summary": "Shared goal, work items and briefs in .specweave/project/hub.json",
|
|
23
|
+
"detect": "hub"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"name": "jev",
|
|
27
|
+
"summary": "Closed-set decisions through Jev (System One)",
|
|
28
|
+
"detect": "jev"
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
"retired": ["qa", "task", "brainstorm", "team"]
|
|
32
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Build the shared language - interview the user term by term and write GLOSSARY.md with what each term means in the business, the data, the code and the UI. Use for "glossary", "ubiquitous language".
|
|
3
|
+
argument-hint: "[term...] [--check]"
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
---
|
|
6
|
+
<!-- Generated from skills/sw-glossary/SKILL.md by scripts/build/generate-skills.mjs. Edit the source, then npm run build. -->
|
|
7
|
+
|
|
8
|
+
# sw-glossary: one word for one thing, everywhere
|
|
9
|
+
|
|
10
|
+
Domain-driven design's ubiquitous language: an Order should be an Order when the
|
|
11
|
+
client talks about it, in the database, in the code and on the screen. When the words
|
|
12
|
+
drift ("purchase" table, `Order` type, "basket" button), agents spend tokens decoding
|
|
13
|
+
jargon, name new code inconsistently and build the wrong thing. A short glossary fixes
|
|
14
|
+
that for every session after it. Run this at a project's start, when a new domain area
|
|
15
|
+
arrives, or whenever one word means two things or two words mean one.
|
|
16
|
+
|
|
17
|
+
## GLOSSARY.md
|
|
18
|
+
|
|
19
|
+
One file at the repository root. A repo with several bounded contexts keeps a
|
|
20
|
+
`GLOSSARY-MAP.md` at the root that links one `GLOSSARY.md` per context; follow it.
|
|
21
|
+
Create the file when the first term settles, never empty.
|
|
22
|
+
|
|
23
|
+
```markdown
|
|
24
|
+
# Glossary
|
|
25
|
+
|
|
26
|
+
A shop that sells refurbished laptops to small businesses.
|
|
27
|
+
|
|
28
|
+
## Ordering
|
|
29
|
+
|
|
30
|
+
### Order
|
|
31
|
+
A customer's request to buy one or more products, placed at checkout and paid once.
|
|
32
|
+
- Avoid: purchase, basket, transaction
|
|
33
|
+
- Data: `orders` table; its lines in `order_lines`
|
|
34
|
+
- Code: `Order` in `src/orders/order.ts`; `POST /orders`
|
|
35
|
+
- UI: "Order", "My orders"
|
|
36
|
+
- Rules: never deleted; cancelling sets the status to cancelled
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
- The definition says what the thing **is**, in the client's words, in one or two
|
|
40
|
+
sentences. No implementation detail there.
|
|
41
|
+
- `Avoid` lists the synonyms nobody should use for it. Be opinionated: one term wins.
|
|
42
|
+
- `Data`, `Code` and `UI` say where the term lives at each level. Put table, column,
|
|
43
|
+
type and file names in backticks so `specweave glossary check` can find them. Leave
|
|
44
|
+
out a level the term does not have.
|
|
45
|
+
- `Rules` (optional) holds the invariants the business states about it.
|
|
46
|
+
- Only terms specific to this domain. Timeouts, caches and retries are not glossary
|
|
47
|
+
terms even if the code uses them everywhere.
|
|
48
|
+
- Group terms under `##` headings when clusters appear; a flat list is fine.
|
|
49
|
+
|
|
50
|
+
## The interview
|
|
51
|
+
|
|
52
|
+
1. **Harvest.** Read the README, the schema or migrations, the models and types, the
|
|
53
|
+
routes and the UI strings. List the nouns that recur, and every mismatch: one
|
|
54
|
+
concept with several names (`purchases` table, `Order` type, "Basket" label) and
|
|
55
|
+
one name with several meanings ("account" as login and as billing account).
|
|
56
|
+
2. **Ask in rounds**, as sw-grill-me does: a few terms per round, each question with
|
|
57
|
+
your recommended answer, worded so "yes" accepts it. "The table is `purchases`, the
|
|
58
|
+
type is `Order`, the button says Basket. Call all three an Order?" Use your tool's
|
|
59
|
+
structured question tool when it has one.
|
|
60
|
+
3. **Sharpen with scenarios.** "A customer pays for 3 items and one ships late: one
|
|
61
|
+
Order or two?" Invent the edge case that forces a boundary.
|
|
62
|
+
4. **Check the code.** When the user says how something works, read the code. If it
|
|
63
|
+
disagrees ("the code cancels whole Orders; you said a single line can be
|
|
64
|
+
cancelled"), say so and settle which one is right.
|
|
65
|
+
5. **Write each term as it settles**, not in a batch at the end.
|
|
66
|
+
6. **Drift is work, not an edit.** Where the code or data uses an avoided word, do not
|
|
67
|
+
rename silently. List it for the user, and plan the renames as an increment
|
|
68
|
+
(sw-increment): a table rename is a migration and the user's call.
|
|
69
|
+
|
|
70
|
+
## Using it
|
|
71
|
+
|
|
72
|
+
- Every skill writes specs, names, commits and replies in the glossary's terms.
|
|
73
|
+
- `specweave glossary check` lists avoided words used as identifiers in tracked files
|
|
74
|
+
and backticked `Data` or `Code` names that no longer exist, with `file:line`.
|
|
75
|
+
`--strict` exits 1 when it finds any, for CI. `--json` for tools.
|
|
76
|
+
- A new term or a changed meaning comes back here, or into sw-grill-me's interview.
|
|
77
|
+
|
|
78
|
+
## Configuration
|
|
79
|
+
|
|
80
|
+
`specweave skills enable glossary` installs this skill. A `GLOSSARY.md` or
|
|
81
|
+
`GLOSSARY-MAP.md` at the root installs it too, and adds a short "Shared language"
|
|
82
|
+
section to AGENTS.md on the next `specweave update`.
|
|
83
|
+
|
|
84
|
+
## Manual path (no CLI)
|
|
85
|
+
|
|
86
|
+
Write GLOSSARY.md by hand in the format above. Without the check, search the code for
|
|
87
|
+
each avoided word yourself (`git grep -n -i -w purchase`) and read the hits.
|
|
88
|
+
|
|
89
|
+
Adapted from mattpocock/skills `domain-modeling` (MIT, Copyright (c) 2026 Matt Pocock);
|
|
90
|
+
see `references/credits.md`.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Credits
|
|
2
|
+
|
|
3
|
+
sw-glossary adapts [mattpocock/skills](https://github.com/mattpocock/skills)
|
|
4
|
+
`skills/engineering/domain-modeling` (MIT): the GLOSSARY.md and GLOSSARY-MAP.md layout,
|
|
5
|
+
`_Avoid_` synonyms, definitions that say what a term is, challenging terms against the
|
|
6
|
+
glossary and the code, and edge-case scenarios that force a boundary. The Data, Code,
|
|
7
|
+
UI and Rules levels and `specweave glossary check` are SpecWeave's.
|
|
8
|
+
|
|
9
|
+
## mattpocock/skills
|
|
10
|
+
|
|
11
|
+
MIT License
|
|
12
|
+
|
|
13
|
+
Copyright (c) 2026 Matt Pocock
|
|
14
|
+
|
|
15
|
+
## Permission notice
|
|
16
|
+
|
|
17
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
18
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
19
|
+
in the Software without restriction, including without limitation the rights
|
|
20
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
21
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
22
|
+
furnished to do so, subject to the following conditions:
|
|
23
|
+
|
|
24
|
+
The above copyright notice and this permission notice shall be included in all
|
|
25
|
+
copies or substantial portions of the Software.
|
|
26
|
+
|
|
27
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
28
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
29
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
30
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
31
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
32
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
33
|
+
SOFTWARE.
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Interview the user relentlessly, in rounds, until every decision in a plan is settled; facts are your job, decisions are theirs. Use for "grill me", "interview me", "stress-test this plan".
|
|
3
|
+
argument-hint: "[topic or increment-id]"
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
---
|
|
6
|
+
<!-- Generated from skills/sw-grill-me/SKILL.md by scripts/build/generate-skills.mjs. Edit the source, then npm run build. -->
|
|
7
|
+
|
|
8
|
+
# sw-grill-me: settle every decision before building
|
|
9
|
+
|
|
10
|
+
No one knows exactly what they want. The gap between the user and the agent is where
|
|
11
|
+
wrong builds come from, and a model never closes it alone: it fills the gaps with
|
|
12
|
+
guesses. This skill walks the plan's decision tree with the user until nothing is left
|
|
13
|
+
silently assumed. Use it at a project's start, before a change whose shape is unclear,
|
|
14
|
+
or whenever the user asks to be grilled. A clear, small request does not need it.
|
|
15
|
+
|
|
16
|
+
## How it runs
|
|
17
|
+
|
|
18
|
+
1. **Read first.** The code the plan touches, `.specweave/config.json`, the open
|
|
19
|
+
increment's spec.md (`specweave task list`) and `GLOSSARY.md` if it exists. Draft
|
|
20
|
+
the problem, the scope and the approach yourself.
|
|
21
|
+
2. **Map the tree.** List every open decision and what it depends on. Probe the
|
|
22
|
+
things users forget: scope and non-goals; users and flows; the data and the words
|
|
23
|
+
for it; integrations, installs, accounts and keys; failures and edge cases;
|
|
24
|
+
security and privacy; performance and scale; rollout and migration; how a machine
|
|
25
|
+
will check that it works.
|
|
26
|
+
3. **Facts are yours.** Anything the code, docs, config or a quick command can answer,
|
|
27
|
+
look up (in a subagent if your tool has them). Never ask the user what you could
|
|
28
|
+
find. A lookup still running blocks only the questions that depend on it.
|
|
29
|
+
4. **Ask in rounds.** Each round asks the whole frontier: every decision whose
|
|
30
|
+
prerequisites are already settled. Number the questions; give each one clause on
|
|
31
|
+
why it matters and your recommended answer, worded so "yes" accepts it. A question
|
|
32
|
+
that depends on another one in the same round waits for the next round.
|
|
33
|
+
5. **Recompute** after every answer: settled decisions unlock new ones, and some
|
|
34
|
+
answers make others moot. Then ask the next round.
|
|
35
|
+
6. **Stop** when the frontier is empty and the user confirms you share one picture.
|
|
36
|
+
"Enough" or "your call" stops early: every decision left gets your recommendation
|
|
37
|
+
as a stated default.
|
|
38
|
+
|
|
39
|
+
Plain text, one round per message:
|
|
40
|
+
|
|
41
|
+
```text
|
|
42
|
+
Q1 Auth provider: who signs users in? Changes the data model and pricing.
|
|
43
|
+
Recommended: Clerk, since the app already uses its React components.
|
|
44
|
+
Q2 Rate limits: per API key or per IP? NAT users share IPs.
|
|
45
|
+
Recommended: per API key.
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
If your tool has a structured question tool (as Claude Code and Codex do), ask the
|
|
49
|
+
round through it so apps such as SpecWithCode show a card: up to 4 questions per card,
|
|
50
|
+
header `Q1 Auth`, your recommendation first, free answers allowed, multi-select only
|
|
51
|
+
for "which of these services or installs". Split a larger frontier over several cards.
|
|
52
|
+
Never ask for a secret in a question: name the env var or use the app's secret request.
|
|
53
|
+
|
|
54
|
+
## The words (when GLOSSARY.md exists)
|
|
55
|
+
|
|
56
|
+
- When the user uses a term that conflicts with the glossary, say so at once: "The
|
|
57
|
+
glossary says an Order is one checkout; you mean one shipment. Which is it?"
|
|
58
|
+
- When a word is fuzzy ("account" for both the login and the billing account), propose
|
|
59
|
+
one precise term each.
|
|
60
|
+
- Test a boundary with a concrete scenario: "A customer pays for 3 items and one ships
|
|
61
|
+
late: one Order or two?"
|
|
62
|
+
- When the user states how something works, check the code agrees and surface any
|
|
63
|
+
contradiction.
|
|
64
|
+
- Write each settled term into `GLOSSARY.md` as sw-glossary describes, when it settles.
|
|
65
|
+
|
|
66
|
+
## Record
|
|
67
|
+
|
|
68
|
+
In the increment's spec.md, under `## Decisions` (before spec.md exists, hold them
|
|
69
|
+
until sw-increment creates it with `specweave create-increment`):
|
|
70
|
+
|
|
71
|
+
```markdown
|
|
72
|
+
## Decisions
|
|
73
|
+
### Asked
|
|
74
|
+
- D-01 Auth provider? → Clerk (user). Changes the data model and pricing.
|
|
75
|
+
### Defaulted (change any before sw-do)
|
|
76
|
+
- D-04 Rate-limit store → in-memory, Redis later (reversible).
|
|
77
|
+
### Open
|
|
78
|
+
- none
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Apply every answer to Scope, the acceptance criteria and Approach, replacing any text
|
|
82
|
+
it contradicts. Keep a Decision line only when a later change could contradict it:
|
|
83
|
+
hard to reverse, surprising without context, or a real trade-off. Everything else is
|
|
84
|
+
just applied. Do not build until the user confirms; sw-do refuses to run unattended
|
|
85
|
+
while `### Open` has entries.
|
|
86
|
+
|
|
87
|
+
## Configuration
|
|
88
|
+
|
|
89
|
+
`specweave skills enable grill-me` installs this skill; `planning.deepInterview: deep`
|
|
90
|
+
in `.specweave/config.json` installs it too and makes sw-increment run it for every
|
|
91
|
+
new increment. `critical` (the default) keeps sw-increment to at most 5 questions.
|
|
92
|
+
|
|
93
|
+
## Manual path (no CLI)
|
|
94
|
+
|
|
95
|
+
Nothing here needs the CLI: read the files by hand, ask in rounds, and write the
|
|
96
|
+
decisions into spec.md yourself.
|
|
97
|
+
|
|
98
|
+
Adapted from mattpocock/skills `grilling` and `domain-modeling` (MIT, Copyright (c) 2026
|
|
99
|
+
Matt Pocock); see `references/credits.md`.
|
package/plugins/specweave/{skills/brainstorm → skills-optional/grill-me}/references/credits.md
RENAMED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# Credits
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
sw-grill-me, sw-glossary and the Decide step of sw-increment adapt ideas from these MIT-licensed projects. Their
|
|
4
4
|
copyright and permission notices are kept below, as the MIT license requires.
|
|
5
5
|
|
|
6
6
|
| Project | What we adapted |
|
|
7
7
|
|---|---|
|
|
8
|
-
| [obra/superpowers](https://github.com/obra/superpowers) `skills/brainstorming` |
|
|
9
|
-
| [mattpocock/skills](https://github.com/mattpocock/skills) `skills/productivity/grilling` | Facts are the agent's job, decisions are the user's;
|
|
8
|
+
| [obra/superpowers](https://github.com/obra/superpowers) `skills/brainstorming` | Sorting questions into answered, my call and theirs; "a default they never heard is one they couldn't reject" |
|
|
9
|
+
| [mattpocock/skills](https://github.com/mattpocock/skills) `skills/productivity/grilling`, `skills/engineering/domain-modeling` | Facts are the agent's job, decisions are the user's; rounds over the frontier of the decision tree, each question with a recommended answer worded so "yes" accepts it ("grill me"); the GLOSSARY.md with _Avoid_ words; challenging terms against the glossary and the code; the three-part test for recording a decision |
|
|
10
10
|
| [github/spec-kit](https://github.com/github/spec-kit) `templates/commands/clarify.md` | The coverage categories, ranking by impact times uncertainty, the 5-question cap, multiple choice with a recommended option, and writing each answer back into the spec |
|
|
11
11
|
|
|
12
12
|
## obra/superpowers
|
|
@@ -8,7 +8,7 @@ This project uses SpecWeave. Plan increments in `.specweave/increments/NNNN-slug
|
|
|
8
8
|
## The loop
|
|
9
9
|
|
|
10
10
|
1. `specweave pickup`: applies the latest handoff and prints the open increment, next task and ACs, other claims, branch state, notes and project memory.
|
|
11
|
-
2. New work needing ACs or handoff: `specweave create-increment "title"`, then fill spec.md. First ask the user only their critical decisions, one at a time with a recommended answer, and record them under `## Decisions` (sw-
|
|
11
|
+
2. New work needing ACs or handoff: `specweave create-increment "title"`, then fill spec.md. First ask the user only their critical decisions, one at a time with a recommended answer, and record them under `## Decisions` (sw-increment). If an open increment owns the files, add ACs and tasks there. Small fixes need no increment.
|
|
12
12
|
3. `specweave task claim T-NN`, edit only that task's Files, commit as `NNNN: what changed`, then `specweave task done T-NN --run "<its Test>"`.
|
|
13
13
|
4. `specweave verify`, a review in a fresh session for anything that ships, then `specweave complete NNNN`.
|
|
14
14
|
5. Before stopping or switching tools/accounts: `specweave handoff --reason "<why>"`.
|
|
@@ -33,6 +33,12 @@ Tasks in spec.md: `### T-01 Title`, then `- AC: AC-01 | Files: src/a.ts, tests/e
|
|
|
33
33
|
Umbrella project: nested repos live under `repositories/<org>/<repo>/`; commit inside each nested repo, then the umbrella.
|
|
34
34
|
<!-- /SECTION -->
|
|
35
35
|
|
|
36
|
+
<!-- SECTION:glossary when="glossary" -->
|
|
37
|
+
## Shared language
|
|
38
|
+
|
|
39
|
+
`GLOSSARY.md` defines this project's domain terms and what each means in the business, the data, the code and the UI. Use its words in specs, names, commits and replies; never a word a term lists under Avoid. `specweave glossary check` lists drift. A new term or a changed meaning goes into the glossary first (sw-glossary).
|
|
40
|
+
<!-- /SECTION -->
|
|
41
|
+
|
|
36
42
|
<!-- SECTION:hub when="hub" -->
|
|
37
43
|
## Project hub
|
|
38
44
|
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Widen options, then settle the user's critical decisions one question at a time, each with a recommended answer, before the spec. Use for "brainstorm", "what are our options", "grill me".
|
|
3
|
-
argument-hint: "<topic> [--depth quick|standard|deep] [--decide off|critical|deep]"
|
|
4
|
-
version: 3.1.0
|
|
5
|
-
---
|
|
6
|
-
<!-- Generated from skills/sw-brainstorm/SKILL.md by scripts/build/generate-skills.mjs. Edit the source, then npm run build. -->
|
|
7
|
-
|
|
8
|
-
# sw-brainstorm: options, then decisions
|
|
9
|
-
|
|
10
|
-
Two parts, used alone or in order. **Options** picks which thing to build. **Decide**
|
|
11
|
-
settles the calls only the user can make. sw-increment runs Decide as its own step.
|
|
12
|
-
Neither replaces the spec.
|
|
13
|
-
|
|
14
|
-
## Options
|
|
15
|
-
|
|
16
|
-
| Depth | Options | Output |
|
|
17
|
-
|---|---|---|
|
|
18
|
-
| `quick` (default for a narrow question) | 3 | a table and a pick, in the conversation |
|
|
19
|
-
| `standard` | 4 to 5 | table, trade-offs, `reports/brainstorm.md` if an increment exists |
|
|
20
|
-
| `deep` | 5 to 7, including "do nothing" and one contrarian | written doc, rejected alternatives, risks |
|
|
21
|
-
|
|
22
|
-
1. **Frame.** One sentence: the decision and what makes an answer good. Write 3 to 5
|
|
23
|
-
criteria first (cost, time to ship, blast radius, reversibility, who maintains it).
|
|
24
|
-
Choosing criteria after seeing the options is how bias gets in.
|
|
25
|
-
2. **Diverge.** Generate before judging, and force variety: the obvious one, the cheap
|
|
26
|
-
one (80% for 20%), buy instead of build, do nothing or defer (with its cost), and one
|
|
27
|
-
that inverts an assumption everyone makes. Name each in 3 to 6 words.
|
|
28
|
-
3. **Converge.** One table, option by criteria, with a "kills it if" per option. Then a
|
|
29
|
-
short paragraph per survivor: how it works, what it costs, what breaks.
|
|
30
|
-
4. **Pick.** The recommendation, the runner-up, and the one fact that would flip it. If
|
|
31
|
-
the honest answer is "we need data", name the experiment.
|
|
32
|
-
|
|
33
|
-
Contested decisions: run three lenses over the same options, advocate (strongest case),
|
|
34
|
-
critic (how each fails in production), pragmatist (what ships this week). In parallel if
|
|
35
|
-
your tool supports subagents, otherwise three labelled passes. Merge.
|
|
36
|
-
|
|
37
|
-
## Decide
|
|
38
|
-
|
|
39
|
-
Mode comes from `--decide`, else `planning.deepInterview` in `.specweave/config.json`:
|
|
40
|
-
`off` skips, `critical` (also when unset) asks at most 5, `deep` has no cap. "Grill me",
|
|
41
|
-
"interview me" or "think hard" means `deep` for this run; "just build it" means `off`.
|
|
42
|
-
|
|
43
|
-
1. **Think first.** Read the code the change touches, project config and any draft.
|
|
44
|
-
Draft Problem, Scope and Approach yourself, then list every open decision across:
|
|
45
|
-
scope and non-goals; users and flows; data model; integrations, installs, accounts
|
|
46
|
-
and keys; failures and edge cases; security and privacy; performance and scale;
|
|
47
|
-
rollout and migration; how we will know it works.
|
|
48
|
-
2. **Triage.** *Fact*: look it up (code, docs, a subagent if your tool has them), never
|
|
49
|
-
ask. *My call*: reversible or low impact, so pick a default. *Theirs*: hard to
|
|
50
|
-
reverse, costly, or taste. Only "theirs" reaches the user.
|
|
51
|
-
3. **Ask, one question at a time.** Rank "theirs" by impact times uncertainty and ask
|
|
52
|
-
the top one, wait, then the next: an answer often settles or changes the rest.
|
|
53
|
-
`critical` stops after 5; a clear request asks nothing and says so. Each question
|
|
54
|
-
gets one clause on why it matters and 2 to 4 options, the first your recommendation
|
|
55
|
-
marked "(Recommended)" with its trade-off, plus a free answer. "Yes" accepts the
|
|
56
|
-
recommendation; "your call" accepts it for every question left.
|
|
57
|
-
4. **Deep ("grill me").** Walk the decision tree: after each answer, ask what it
|
|
58
|
-
unlocks, until no "theirs" remains and the user agrees you share one picture. No cap,
|
|
59
|
-
still one question at a time with a recommendation. "Enough" stops it; whatever is
|
|
60
|
-
left gets a default. Optional extra for longer grilling sessions:
|
|
61
|
-
`npx vskill@latest install mattpocock/skills/grilling`.
|
|
62
|
-
5. **Record** in spec.md under `## Decisions`, then apply each answer to Scope, ACs and
|
|
63
|
-
Approach, replacing any text it contradicts. Before spec.md exists, hold them and
|
|
64
|
-
write them when sw-increment creates it.
|
|
65
|
-
|
|
66
|
-
```markdown
|
|
67
|
-
## Decisions
|
|
68
|
-
### Asked
|
|
69
|
-
- D-01 Auth provider? → Clerk (user). Changes the data model and pricing.
|
|
70
|
-
### Defaulted (change any before sw-do)
|
|
71
|
-
- D-04 Rate-limit store → in-memory, Redis later (reversible).
|
|
72
|
-
### Open
|
|
73
|
-
- none
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
**Question cards.** If your tool has a structured question tool (Claude Code's
|
|
77
|
-
ask-user-question tool, Codex `request_user_input`), ask through it so apps such as
|
|
78
|
-
SpecWithCode show a card: header `D-01 Auth`, the recommended option first, custom
|
|
79
|
-
answers allowed, multi-select only for "which of these services or installs". Without
|
|
80
|
-
one, write `D-01 <question>` with numbered options and `Recommended: <option>`. Never
|
|
81
|
-
ask for a secret in a question; use the app's secret request or name the env var.
|
|
82
|
-
|
|
83
|
-
Rules: facts are your job, decisions are the user's. A default the user never saw is
|
|
84
|
-
one they could not reject, so list every default. When the user has no shape for the
|
|
85
|
-
idea yet, ask them to describe it before offering options; options steer.
|
|
86
|
-
|
|
87
|
-
## Hand off
|
|
88
|
-
|
|
89
|
-
`specweave create-increment "<the pick>"` (sw-increment), paste the rejected
|
|
90
|
-
alternatives into Approach and the decisions into `## Decisions`. If the user already
|
|
91
|
-
knows what they want, skip Options and say why. sw-auto will not start while
|
|
92
|
-
`### Open` has entries.
|
|
93
|
-
|
|
94
|
-
## Manual path (no CLI)
|
|
95
|
-
|
|
96
|
-
Nothing here needs the CLI: read `.specweave/config.json` by hand and create the
|
|
97
|
-
increment folder as sw-increment describes.
|
|
98
|
-
|
|
99
|
-
Decide adapts ideas from obra/superpowers `brainstorming`, mattpocock/skills
|
|
100
|
-
`grilling` and GitHub Spec Kit `/clarify` (all MIT); see `references/credits.md`.
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Run one SpecWeave increment with several agents in parallel - any tool or account, a worktree each, claims through the ledger, one close. Use for "team", "parallel agents", 3+ disjoint lanes.
|
|
3
|
-
argument-hint: "[increment-id]"
|
|
4
|
-
version: 3.0.0
|
|
5
|
-
---
|
|
6
|
-
<!-- Generated from skills/sw-team/SKILL.md by scripts/build/generate-skills.mjs. Edit the source, then npm run build. -->
|
|
7
|
-
|
|
8
|
-
# sw-team: several agents, one increment
|
|
9
|
-
|
|
10
|
-
Agents can be Claude Code, Codex, Cursor, Grok, another account or a person. They
|
|
11
|
-
coordinate only through committed files: spec.md (tasks), `ledger.jsonl` (claims and
|
|
12
|
-
evidence) and handoffs. No message bus is needed; your tool's subagents or agent teams
|
|
13
|
-
are an accelerator, never a requirement.
|
|
14
|
-
|
|
15
|
-
## You are the lead
|
|
16
|
-
|
|
17
|
-
You split, start, watch, merge and close. You do not implement. Fan out only with three
|
|
18
|
-
or more disjoint lanes or 15+ tasks; otherwise use sw-do.
|
|
19
|
-
|
|
20
|
-
## 1. Split
|
|
21
|
-
|
|
22
|
-
1. `Files` is the ownership unit. Two tasks that touch one file cannot run in parallel:
|
|
23
|
-
merge them, or put `**Dependencies**: T-01` under the later one. Shared contracts
|
|
24
|
-
(types, schema, migrations) go in an early task the others depend on.
|
|
25
|
-
2. Group tasks into lanes with disjoint `Files`: 2 to 5 lanes, one agent each.
|
|
26
|
-
3. `specweave task list 0042` shows every task open. Commit spec.md.
|
|
27
|
-
|
|
28
|
-
## 2. Start each agent
|
|
29
|
-
|
|
30
|
-
One worktree and branch per agent:
|
|
31
|
-
`git worktree add ../0042-api -b inc/0042-api`. Then give that agent (a subagent, a
|
|
32
|
-
terminal in the worktree, another tool or account) this brief:
|
|
33
|
-
|
|
34
|
-
```text
|
|
35
|
-
You are agent "api" on increment 0042 in ../0042-api (branch inc/0042-api).
|
|
36
|
-
Your tasks: T-01, T-02. Run the sw-do loop (`specweave task next 0042`, claim, ...)
|
|
37
|
-
on your tasks only. Edit only their Files. Commit as "0042: ...". `task done --run`
|
|
38
|
-
needs exit 0. When done or blocked: `specweave task release --all-mine`,
|
|
39
|
-
`specweave note "api: <done | blocked: why>" 0042`, commit and push your branch.
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
Set `SPECWEAVE_AGENT=api` in that agent's environment so its claims are distinct.
|
|
43
|
-
In Claude Code, `specweave team` opens agent-team panes for the same setup.
|
|
44
|
-
|
|
45
|
-
## 3. Watch cheaply
|
|
46
|
-
|
|
47
|
-
Poll `specweave task list 0042` instead of chatting. `blocked` rows are your queue:
|
|
48
|
-
unblock (supply the secret, split the task, decide) and tell only that agent. A claim
|
|
49
|
-
older than 2 hours with no progress is stale; a replacement agent claims it with
|
|
50
|
-
`specweave task claim T-NN --force`. Agents' notes show in `specweave pickup --no-apply`.
|
|
51
|
-
Lane agents do not use `specweave handoff`: it moves the one shared handoff pointer.
|
|
52
|
-
|
|
53
|
-
## 4. Merge and close
|
|
54
|
-
|
|
55
|
-
1. Merge the lane branches in dependency order. `ledger.jsonl` conflicts resolve by
|
|
56
|
-
keeping every line from both sides.
|
|
57
|
-
2. `specweave verify 0042` on the merged tree; red becomes a fix task for one agent.
|
|
58
|
-
3. sw-review on the merged diff, then `specweave complete 0042`. Only the lead closes.
|
|
59
|
-
4. `git worktree remove ../0042-api` for each lane.
|
|
60
|
-
|
|
61
|
-
## Manual path (no CLI)
|
|
62
|
-
|
|
63
|
-
Same split and brief; each agent appends its own `claim`, `done` and `release` lines to
|
|
64
|
-
`ledger.jsonl` as in sw-do's manual path, plus a `note` line as in sw-handoff's.
|
|
65
|
-
|
|
66
|
-
## Anti-patterns
|
|
67
|
-
|
|
68
|
-
- An agent editing outside its tasks' `Files`. Add a task instead.
|
|
69
|
-
- One increment per agent: you lose the single ledger and the single verify.
|
|
70
|
-
- The lead implementing "just this small piece", or closing while a claim is live.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|