@loneexile/omp-superpowers 7.0.0-omp.4 → 7.0.1-omp.1

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/CHANGELOG.md CHANGED
@@ -6,6 +6,16 @@ A version is `<upstream version>-omp.<n>`: the upstream release this fork is syn
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [7.0.1-omp.1] - 2026-10-24
10
+
11
+ Synced to upstream [v7.0.1](https://github.com/obra/superpowers/blob/v7.0.1/RELEASE-NOTES.md).
12
+
13
+ ### Changed
14
+
15
+ - **Brainstorming takes most of v7.0.1's retune.** It reads the project and whatever you pointed at before its first message, plays a detailed request back with what it found and asks about the one thing still open, offers to skip the questions only when you didn't ask for brainstorming, and builds each question on your last answer. The ways to build it come with the last playback chunk, with a recommendation, and that message's one question is the pick; upstream sends them in a message of their own, one more wait for your reply. Upstream's short design doc and plan for every small change are not taken: the small-change path stays. Checked live once per scenario on omp 18.12.6, in a scratch Python todo app, with no run of the old text to compare against. A calendar-sync request that didn't name brainstorming got a first message built on what `todo.py` stores, one question, and the skip offer last; two answers later, one message carried the rest of the design, two ways to build it with a third ruled out, a recommendation, the size and one pick question. A request starting "Let's brainstorm" got no skip offer, and its small change ended on "Should I build it this way?" with no design doc.
16
+ - **Synced with upstream v7.0.1** (from v7.0.0). What reaches omp unchanged: `writing-skills` moves its supporting docs into `references/` (SKILL.md 26,623 → 16,738 bytes); `executing-plans` drops its Example Workflow, whose fork copy still sent the final review to `code-reviewer.md` (25,983 → 23,591 bytes); `diagnosing-superpowers` drafts issues with "Who's filing" and "Human-authored summary" sections, says how "without Superpowers" was checked, files nothing while the summary is a placeholder, and its link for filing without `gh` opens the Bug Report template instead of the deleted Session Diagnosis Report one. The repo gets upstream's new issue and PR templates, its `AGENTS.md` contributor rules, and `tests/skill-size/test-skill-size.sh`, which CI does not run yet: SDD's SKILL.md (69,657 bytes) and executing-plans' (23,591) are over its 20,000-byte limit. Upstream's old `docs/superpowers/plans/` files are gone. `tests/brainstorm-server/server.test.js` stays at v7.0.0's version: v7.0.1's rewrite, which waits on file events instead of fixed sleeps, failed one or both of its "does NOT send reload" checks (`0 !== 1`) in 4 runs out of 4 on a Linux host, because it counts reloads before its own marker file's reload has reached the client; v7.0.0's passed 3 out of 3.
17
+ - Upstream's `skills/subagent-driven-development/references/` is deleted. It holds upstream's own fix loop (5 rounds, a fresh implementer on a more capable model for rounds 4–5), final review and resume text, and nothing in this fork's SKILL.md points to it. The fork's SDD stays one SKILL.md for now.
18
+
9
19
  ## [7.0.0-omp.4] - 2026-10-16
10
20
 
11
21
  ### Fixed
@@ -116,7 +126,8 @@ First release, synced to upstream [v6.4.2](https://github.com/obra/superpowers/b
116
126
  - The fork's rewritten subagent-driven-development text invokes its helper scripts through `bash` as well, so a package extractor that drops exec bits cannot break them.
117
127
  - `sdd-final-reviewer` carries upstream's new review rules from `code-reviewer.md`, the template it replaces in SDD's final review: the spec is a vision document (behavior it is silent on is graded by what a reasonable person expects), and a "Declined to judge" section that the controller rules on and ledgers like a plan conflict.
118
128
 
119
- [Unreleased]: https://github.com/LoneExile/omp-superpowers/compare/v7.0.0-omp.4...HEAD
129
+ [Unreleased]: https://github.com/LoneExile/omp-superpowers/compare/v7.0.1-omp.1...HEAD
130
+ [7.0.1-omp.1]: https://github.com/LoneExile/omp-superpowers/releases/tag/v7.0.1-omp.1
120
131
  [7.0.0-omp.4]: https://github.com/LoneExile/omp-superpowers/releases/tag/v7.0.0-omp.4
121
132
  [7.0.0-omp.3]: https://github.com/LoneExile/omp-superpowers/releases/tag/v7.0.0-omp.3
122
133
  [7.0.0-omp.2]: https://github.com/LoneExile/omp-superpowers/releases/tag/v7.0.0-omp.2
package/README.md CHANGED
@@ -161,9 +161,9 @@ Rules that are easy to get wrong:
161
161
  - `.pi/extensions/superpowers.ts` — the injected mapping names `task`, `todo`, the `sdd-*` roster, and the no-`model:`-field rule; it also re-arms on `session_switch`, skips subagent sessions, and ignores an `agent_end` that will auto-continue; it tells a dispatching session to name the checks each subagent must run, since omp 18.4.12 tells subagents to leave builds, tests and smoke runs to the main agent unless their assignment explicitly instructs them; its last paragraph points a vibe-mode director (tools include `vibe_spawn` but not `task`) at the *Vibe mode* section of `pi-tools.md`
162
162
  - `.omp-plugin/plugin.json` — new. Marks the repo root as an omp-native plugin so a marketplace or `--plugin-dir` install keeps each agent's `model:` line
163
163
  - `skills/using-superpowers/references/pi-tools.md` — same, as the reference doc; it also gains a *Checks* subsection (the 18.4.12 subagent hand-off rule, and why every dispatch names its checks) and a *Vibe mode* section: what a director keeps and lacks, how skill actions map onto `vibe_*` and workers, and the worktree and request-budget limits
164
- - `skills/brainstorming/` — a defined small-change path: after the in-chat approval the session builds it itself on a branch: the full suite before changing anything, test first, the covering tests and the suite again, then one commit of only its own files and hunks, with no design document, plan or subagents (a new behavior such as a `--quiet` flag can be small; security, auth, concurrency, money, migrations, changes one revert cannot undo, new config files or stored formats, changes to existing behavior, new interfaces other code builds on and new dependencies never are, and none of them takes the quick-task route however complete the request); a playback rides along with the next question instead of waiting for its own answer; for software, the plan is written right after the builder check so the design and the plan get one approval
164
+ - `skills/brainstorming/` — a defined small-change path: after the in-chat approval the session builds it itself on a branch: the full suite before changing anything, test first, the covering tests and the suite again, then one commit of only its own files and hunks, with no design document, plan or subagents (a new behavior such as a `--quiet` flag can be small; security, auth, concurrency, money, migrations, changes one revert cannot undo, new config files or stored formats, changes to existing behavior, new interfaces other code builds on and new dependencies never are, and none of them takes the quick-task route however complete the request); a playback rides along with the next question instead of waiting for its own answer; for software, the plan is written right after the builder check so the design and the plan get one approval. Of upstream v7.0.1's retune it keeps reading the project first, the new first message and the sharper questions; the approaches ride with the last playback chunk, whose one question is the pick, instead of going out in a message of their own; upstream's short design doc and plan for every small change are not taken
165
165
  - `agents/sdd-*.md` — new. Each seat's `model:` is a pin plus a role fallback (`@task` or `@slow`), and all set `readSummarize: false`. `sdd-final-reviewer` reviews the whole branch for both ways of running a plan; after subagent-driven-development it does the task review's work on every task left to it (`review at final`) before the seams. It reads `requesting-code-review/code-reviewer.md` at run time and applies its What to Check, Calibration, severity definitions and Critical Rules, while carrying upstream's vision-document and Declined-to-judge rules in its own body; a crash or lost data on user input is always a finding, never a Declined-to-judge line. Descriptions name roles, never models
166
- - `skills/subagent-driven-development/` — *Model Selection* → *Agent Selection*; fix-loop cap 5 → 3 with a round-3 escalation seat; a proven-trivial-fix route that replaces a re-review with a one-command proof; the pre-flight scan builds a review list (plan-marked or ruled high-risk tasks get a task review, the rest get the controller's own covering-test run and the final review) and waves (tasks with no shared file or interface run in parallel, up to three, each in its own `omp worktree add` worktree with the project's install step re-run there, merged back with `--no-ff` after their covering tests pass on the merged tree; a task that still will not merge after round 3 stops the run); Setup creates the approved branch in this checkout instead of a worktree; resume reads each task's last ledger line, and treats a wave task as merged only when its branch has commits past BASE; the scripts directory resolves via `realpath skill://subagent-driven-development/scripts`; fix rounds resume the implementer with `write agent://<id>` (id ledgered) and full results are read at `agent://<id>`; task review scales with risk through `effort: "hi"`; the controller checks reviewer results; templates show omp's real `{ context, tasks: [{ agent, task, solutionSpace }] }` wire shape and the reviewers' structured fields; one omp paragraph for vibe mode, where a director (no `task` or `bash`) hands the whole run to one `good` worker that dispatches the seats itself
166
+ - `skills/subagent-driven-development/` — *Model Selection* → *Agent Selection*; fix-loop cap 5 → 3 with a round-3 escalation seat; a proven-trivial-fix route that replaces a re-review with a one-command proof; the pre-flight scan builds a review list (plan-marked or ruled high-risk tasks get a task review, the rest get the controller's own covering-test run and the final review) and waves (tasks with no shared file or interface run in parallel, up to three, each in its own `omp worktree add` worktree with the project's install step re-run there, merged back with `--no-ff` after their covering tests pass on the merged tree; a task that still will not merge after round 3 stops the run); Setup creates the approved branch in this checkout instead of a worktree; resume reads each task's last ledger line, and treats a wave task as merged only when its branch has commits past BASE; the scripts directory resolves via `realpath skill://subagent-driven-development/scripts`; fix rounds resume the implementer with `write agent://<id>` (id ledgered) and full results are read at `agent://<id>`; task review scales with risk through `effort: "hi"`; the controller checks reviewer results; templates show omp's real `{ context, tasks: [{ agent, task, solutionSpace }] }` wire shape and the reviewers' structured fields; one omp paragraph for vibe mode, where a director (no `task` or `bash`) hands the whole run to one `good` worker that dispatches the seats itself. Upstream v7.0.1's `references/` is deleted: it holds upstream's own fix loop (5 rounds), final review and resume text, and nothing in this SKILL.md points to it
167
167
  - `skills/executing-plans/` — the description, *Why inline*, *When to Use* and the "Prefer subagent-driven-development" paragraph say the partner approved inline execution at the handoff and that SDD reviews per task only where a plan marks it; Setup creates the approved branch in this checkout; a ledger with `Wave` lines resumes under SDD. Additive omp paragraphs: in *Final Review*, the `task` tool has no `model:` field, so the final review goes to `sdd-final-reviewer` (its model is what the host maps that agent to), told that no task was reviewed; it also resolves the scripts directory with `realpath` and reads full results at `agent://<id>`; one more for vibe mode, where a director hands the whole run to one `good` worker
168
168
  - `skills/requesting-code-review/` — *Mandatory* says a review follows each task on subagent-driven-development's review list, and once on the whole branch at the end, instead of after every task
169
169
  - `skills/using-git-worktrees/` — additive omp section: `/wt` is the user's one-line answer to the consent question (moves the session, carries WIP); when the agent creates the worktree itself it uses `omp worktree add` under `~/.omp/wt/` (the only place `omp worktree list`/`clear` manage), knows that command leaves uncommitted changes behind, and asks for `/move <path>` because `cd` never moves the tools' cwd. Also: clone-first falls back to a plain checkout without `node_modules` (no copy-on-write, or in-repo targets); setup and tests use the bash tool's `cwd` parameter until `/move`; `omp worktree clear --all` is warned against, since it force-removes every worktree, uncommitted work included; omp's bash rewrites a literal `git worktree add` into `omp worktree add` only without shell expansion; vibe mode refuses `/move` and `/wt`, so the worktree and `/move` come before `/vibe`, or every worker brief carries the absolute path
@@ -171,6 +171,7 @@ Rules that are easy to get wrong:
171
171
  - `skills/finishing-a-development-branch/` — one line in the discard path: in a normal repo (a branch made in this checkout), switch to the base branch before `git branch -D`, which git refuses on the checked-out branch
172
172
  - `README.md` — this file: rewritten for omp (install, seats, overrides, maintenance); upstream's multi-harness README is gone
173
173
  - `tests/pi/test-pi-extension.mjs` — covers the extension's lifecycle (bootstrap on start, `session_switch`, compaction; none for subagents or an auto-continuing `agent_end`), the action table in `pi-tools.md`, the seat table against the names in `agents/*.md`, and the `.omp-plugin/plugin.json` manifest; the package-name assertion is gone (`scripts/check-npm-package.sh` checks the published name)
174
+ - `tests/brainstorm-server/server.test.js` — kept at upstream v7.0.0's version. v7.0.1's rewrite counts the reloads a client received right after the server logs its marker file, before that file's own reload has reached the client, so its two "does NOT send reload" checks failed on Linux in 4 runs out of 4
174
175
  - `package.json` — the npm identity: `@loneexile/omp-superpowers`, `<upstream version>-omp.<n>` versions, a `files` allowlist (the extension, `skills/`, `agents/`), `publishConfig`, `omp`/`oh-my-pi` keywords; `main` is dropped, since it pointed at the OpenCode plugin this package does not ship
175
176
  - Spec and plan paths — `docs/specs/` and `docs/plans/` instead of upstream's `docs/superpowers/specs/` and `docs/superpowers/plans/`: brainstorming's *Where it goes*, writing-plans' save path and handoff lines, and the example plan paths in executing-plans, subagent-driven-development and requesting-code-review. `.superpowers/` (the SDD workspace, brainstorm companion files) is unchanged. `scripts/check-npm-package.sh` fails if a shipped file names `docs/superpowers/`
176
177
  - `CHANGELOG.md`, `.github/workflows/` (CI, npm release), `scripts/check-npm-package.sh` — new
@@ -189,7 +190,7 @@ git push --force-with-lease origin main
189
190
 
190
191
  Expect conflicts in `skills/subagent-driven-development/`, `skills/brainstorming/`, `skills/writing-plans/`, `skills/executing-plans/`, `skills/requesting-code-review/SKILL.md`, `skills/finishing-a-development-branch/SKILL.md`, `pi-tools.md`, `README.md`, and `package.json` whenever upstream touches them — this fork rewrites those files rather than appending to them (README.md is never a partial conflict). A sync that takes upstream's side of executing-plans or requesting-code-review brings back "review after every task" text that contradicts subagent-driven-development's review list: keep the fork's lines. In `package.json` keep the fork's identity and set `version` to `<new upstream version>-omp.1`: CI's package check fails until the version's base matches the upstream version in `.claude-plugin/plugin.json`. `agents/`, the extension's mapping paragraph, and the omp blocks in `using-git-worktrees` are additive.
191
192
 
192
- A clean rebase is not the whole sync. Upstream's edits to text this fork replaced never reach the replacement, so read upstream's diff for those files and port what still applies. The v6.4.x sync needed two: `bash scripts/...` invocations in the SDD text, and `code-reviewer.md`'s new review rules. Upstream edits to `code-reviewer.md`'s What to Check, Calibration, severity definitions and Critical Rules now reach `sdd-final-reviewer` without porting, because it reads the file at run time. Edits to the vision-document or Declined-to-judge sections still need porting into the agent body, which carries them itself.
193
+ A clean rebase is not the whole sync. Upstream's edits to text this fork replaced never reach the replacement, so read upstream's diff for those files and port what still applies. The v6.4.x sync needed two: `bash scripts/...` invocations in the SDD text, and `code-reviewer.md`'s new review rules. The v7.0.1 sync took the fork's side of brainstorming and ported the retune by hand, all but its small-change gate, and deleted upstream's `skills/subagent-driven-development/references/`; when upstream edits a file there, the rebase stops on a modify/delete conflict: keep it deleted (`git rm`), then read upstream's diff of that file for rule changes to port into the fork's SDD text. Upstream edits to `code-reviewer.md`'s What to Check, Calibration, severity definitions and Critical Rules now reach `sdd-final-reviewer` without porting, because it reads the file at run time. Edits to the vision-document or Declined-to-judge sections still need porting into the agent body, which carries them itself.
193
194
 
194
195
  The fork changes upstream's `docs/superpowers/specs` and `docs/superpowers/plans` lines in brainstorming, writing-plans, executing-plans, subagent-driven-development and requesting-code-review. When upstream edits around one of them, `-X theirs` keeps the fork's whole conflicting hunk, so read upstream's diff of those lines and port the rest of the hunk. New upstream text naming `docs/superpowers/` fails `check-npm-package.sh` until it says `docs/specs/` or `docs/plans/`.
195
196
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loneexile/omp-superpowers",
3
- "version": "7.0.0-omp.4",
3
+ "version": "7.0.1-omp.1",
4
4
  "description": "obra/superpowers adapted for Oh My Pi (omp): a truthful task/todo tool mapping and five subagent-driven-development agents, each with its own model, thinking level, and tools.",
5
5
  "type": "module",
6
6
  "keywords": [
@@ -25,19 +25,52 @@ why?
25
25
  the request.
26
26
  - **Something non-trivial is missing.** Start the conversation.
27
27
 
28
- ## Your First Message
28
+ ## Look Before You Ask
29
+
30
+ In an existing project, or when they've given you context (a spec, a plan,
31
+ a handoff, files they pointed at, earlier conversation), dig in before your
32
+ first message. Read what they referred to and the code or material it
33
+ connects to, and keep reading until you can explain how the relevant
34
+ parts work today and what this change would touch. Never ask what the
35
+ project or their context already answers.
29
36
 
30
- Your first message is two things, in this order:
37
+ ## Your First Message
31
38
 
32
- 1. One line letting them know that if they'd rather skip the questions and
33
- have you just start, they can say so. If they take you up on it, this
34
- skill is done: state any significant how-it-gets-made choice
35
- (platform, language, medium) in one plain line, then do what they
36
- asked the way its size calls for (Size the Work, below). Their opt-out
37
- is the approval a small change needs.
38
- 2. One open question that gets them describing. Ask about a real moment
39
- or a concrete picture: "What's the moment you find yourself wishing
40
- this existed?" or "Tell me about the people who'll be in the room."
39
+ Move the work forward, with one of these:
40
+
41
+ - **They've already said what they want** (a spec, a plan, a detailed
42
+ request): aim for about 200 words for the whole message. Echo their
43
+ request back in your own words, so they can see whether you've got its
44
+ shape: what they want, who it's for, and why, as far as they've said.
45
+ Add what you found that bears on it: how the relevant parts work today
46
+ and what the change would touch. If you found something they may not
47
+ have considered that would change what they're asking for or how it
48
+ has to be built, like a constraint, a conflict, or a cheaper path, say
49
+ so plainly. How to build it comes later, once you understand what they
50
+ want (see Lay out the approaches). End with one line inviting
51
+ corrections, then one question about what they want: the thing their
52
+ request leaves open whose answer would most change what gets built.
53
+ Specs are often incomplete, so confirm before you build on one.
54
+ - **They haven't:** one open question, in their own terms, about the
55
+ biggest thing their request leaves unsettled. Say why you're asking:
56
+ what the answer would change about what you build. For "a website for
57
+ my bakery": "If it's mostly for people deciding whether to stop by,
58
+ I'd lead with hours and what's in the case today; taking orders is a
59
+ different site. What do you want someone to do when they land on it?"
60
+
61
+ How the message ends depends on whether their message asked for
62
+ brainstorming:
63
+
64
+ - **They asked for it** (by name, by invoking it, or by asking for a
65
+ design discussion): end with your question. They want this
66
+ conversation.
67
+ - **They didn't:** they may not want a conversation at all. After your
68
+ question, add a light, one-line offer to just get going instead, like
69
+ "Or if you'd rather I just dive in, say so." If they take you up on
70
+ it, this skill is done: state any significant how-it-gets-made choice
71
+ (platform, language, medium) in one plain line, then do what they
72
+ asked the way its size calls for (Size the Work, below). Their opt-out
73
+ is the approval a small change needs.
41
74
 
42
75
  That's the whole message.
43
76
 
@@ -46,7 +79,8 @@ That's the whole message.
46
79
  Each message ends with one question: a single sentence with no list of
47
80
  example answers hanging off it. Use plain language, pitched just a little
48
81
  above where your human partner is. Match their vocabulary; never use
49
- process jargon.
82
+ process jargon. You never need to quote this skill to your human
83
+ partner.
50
84
 
51
85
  Be clear and concise. Lead with what matters. Avoid jargon. When you
52
86
  report what you found, give them the most important findings and offer
@@ -78,19 +112,32 @@ out as questions:
78
112
  - current state: what exists now, what they've tried
79
113
  - the details they care about
80
114
 
81
- **Questions that work** anchor in specifics: "Walk me through the last
82
- time...", "If it could only do one of these well, which?", "What would
83
- make you wince if I got it wrong?" A guess they can correct ("I'm
84
- guessing this is because X keeps biting you?") often beats a question.
85
-
86
- **Offer recon.** Once you have a bit of grounding and looking would help,
87
- offer to go look: their codebase or project, their own files and data,
88
- or the web. Say what you'd look for. They decide whether you go.
89
-
90
- **Think wide privately.** Before you propose anything, come up with
91
- several ideas and drop the weak ones, including any that fight what
92
- they've told you about why. Show the comparison only when it helps them
93
- decide.
115
+ **Make every question specific** to their project and what they've told
116
+ you. Ask Socratically, the way a sharp colleague would: build each
117
+ question on their last answer or on something you found, so it helps
118
+ them think through a consequence or a case they may have missed
119
+ ("Voting closes before the meeting, and two members joined this month.
120
+ Does someone who joins mid-round get a vote?"). When the reason isn't
121
+ already plain, say what you're hoping to learn or what the answer would
122
+ change. A proposal they can correct, plus your reason for it, often
123
+ beats a question.
124
+
125
+ **Offer recon.** Once you have a bit of grounding and looking further
126
+ would help, offer to go look: deeper into their codebase or project,
127
+ their own files and data, or the web. Say what you'd look for. They
128
+ decide whether you go.
129
+
130
+ **Lay out the approaches.** Once you understand what they want, and
131
+ before you write anything up, lay out the ways of building it in the
132
+ message that carries your last playback chunk (Play It Back). Come up
133
+ with several real alternatives and drop the weak ones, including any
134
+ that work against why they want it and any the existing work rules out.
135
+ Present the two or three that remain, grounding each in what the project
136
+ actually does and saying what it trades off. Recommend one and say why;
137
+ that message's one question is which way they want to go. When there's
138
+ genuinely one sensible way, say so and explain why the others don't
139
+ fit. This is for how it gets built; for what they want, get them
140
+ describing first.
94
141
 
95
142
  **Show, don't tell.** Offer the visual companion (below) whenever seeing
96
143
  would help more than reading:
@@ -120,11 +167,12 @@ behaves), describe that part back in about 200-300 words. A playback
120
167
  doesn't wait for its own answer: send it in the same message as your
121
168
  next question, with one line saying they can correct anything in it in
122
169
  their reply. The last chunk covers whatever is left and goes out with
123
- the size you pick; for a small change, it ends by asking whether to
124
- build it.
170
+ the approaches (Lay out the approaches) and the size you pick. Its
171
+ question is which way to build it; for a small change, it asks whether
172
+ to build it that way.
125
173
 
126
- Mark anything you're guessing as your guess; only what they said goes in
127
- as theirs.
174
+ Only what they said goes in as theirs. Anything you filled in goes in
175
+ as your proposal, with your reason.
128
176
 
129
177
  Before you send a chunk, check it: does it describe something they'll
130
178
  look at, like a page, a screen, a schedule, or a printout? If so, and
@@ -197,6 +245,8 @@ could plan from without going back to your human partner. Cover:
197
245
  - intent and the why
198
246
  - goals, non-goals, anti-goals
199
247
  - constraints
248
+ - approaches: the two or three you laid out, what each trades off, which
249
+ one they picked, and why
200
250
  - the parts of the how they decided, as they decided them
201
251
  - what's left to the builder
202
252
 
@@ -250,8 +300,9 @@ skill. Outside software, the plan follows the document's approval.
250
300
 
251
301
  | Thought | Reality |
252
302
  |---------|---------|
253
- | "I'll offer options to save them effort" | Options steer. Ask them to describe it first. |
303
+ | "I'll offer a menu of what they might want" | Options steer. Ask them to describe it first. |
254
304
  | "I'll fill in sensible defaults" | Good. Say them out loud. A default they never heard is one they couldn't reject. |
305
+ | "I've answered their questions, so I'll write the doc" | Lay out the approaches first, with your last playback chunk. |
255
306
  | "I should explain the process first" | Ask your question. The process shows itself. |
256
307
  | "They said 'sounds good' to the idea" | Approval covers what you showed them. A description you haven't written isn't approved. |
257
308
  | "I'll get the design approved, then write the plan" | For software, write the plan first, so they approve both in one reading. A change to the design updates the plan before you ask again. |
@@ -100,7 +100,7 @@ yourself in step 3 and which findings to lead with in the verdict.
100
100
  partner either.
101
101
  - **Approval gates.** No archive before your partner has seen the scrub
102
102
  log and file list. No issue or comment before they approve the exact
103
- text.
103
+ text, and none with a placeholder summary.
104
104
  - **Intake before analysis.** Nothing in steps 2–7 starts until your
105
105
  partner has answered. If they are away, write the questions and stop.
106
106
  A statement you reconstructed for them is not an answer. An
@@ -36,11 +36,11 @@ labels land only for collaborators; the template footer still marks the
36
36
  issue as skill-filed. `gh` cannot attach files: give your partner the
37
37
  bundle path to attach through the browser after the issue exists.
38
38
 
39
- Without `gh`, hand over a prefilled link on the `diagnosis_report.md`
40
- template, which applies both labels for any reporter:
39
+ Without `gh`, hand over a prefilled link on the `bug_report.md` template,
40
+ which applies the `bug` label for any reporter:
41
41
 
42
42
  ```
43
- https://github.com/obra/superpowers/issues/new?template=diagnosis_report.md&title=<url-encoded title>&body=<url-encoded body>
43
+ https://github.com/obra/superpowers/issues/new?template=bug_report.md&title=<url-encoded title>&body=<url-encoded body>
44
44
  ```
45
45
 
46
46
  GitHub rejects URLs over about 8,000 characters; past that, send the link
@@ -2,6 +2,20 @@ Title: <skill or symptom>: <one-line observable> (<harness>)
2
2
 
3
3
  - [x] I searched existing issues and this is not a duplicate (searched: <query terms>; closest: <#n title, or "none">)
4
4
 
5
+ ## Who's filing this report? (required)
6
+
7
+ <model and harness of this session>, filing on behalf of <how your
8
+ partner wants to be named, or "my human partner">, who asked: "<their
9
+ request from this session that led to the diagnosis or the issue,
10
+ scrubbed>"
11
+
12
+ ## Human-authored summary (required, under 200 words)
13
+
14
+ <Your partner's own words on what went wrong and what should have
15
+ happened, pasted as written. Ask for them; a placeholder here means the
16
+ issue is not ready to file. If they run long, ask them to trim rather
17
+ than editing their words.>
18
+
5
19
  ## Environment (required)
6
20
 
7
21
  | Field | Value | Provenance / supporting evidence |
@@ -17,8 +31,12 @@ Title: <skill or symptom>: <one-line observable> (<harness>)
17
31
 
18
32
  - [ ] I confirmed this issue does not occur without Superpowers installed
19
33
 
20
- The reporter has not tried reproducing without superpowers. Evidence for
21
- involvement is below; it does not establish cause.
34
+ How I verified that this issue does not reproduce without Superpowers:
35
+ <"Not tried", or what your partner ran without superpowers and what
36
+ happened, with the transcript path if there is one. Tick the box above
37
+ only when a transcript shows the problem did not recur.>
38
+
39
+ Evidence for involvement is below; it does not establish cause.
22
40
 
23
41
  ## What happened?
24
42
 
@@ -47,5 +65,6 @@ Superpowers involvement per the diagnosis report: <possible | likely>, with
47
65
  evidence at <transcript lines>. This report does not propose a fix.
48
66
 
49
67
  ---
50
- Filed with the `diagnosing-superpowers` skill. Model, harness, harness
51
- version, and installed plugins are listed above.
68
+ Filed with the `diagnosing-superpowers` skill. The filing model and
69
+ harness are under "Who's filing"; the diagnosed session's model, harness,
70
+ versions, and plugins are in the Environment table.
@@ -399,55 +399,3 @@ Use superpowers:finishing-a-development-branch.
399
399
  | "The reviewer said Minor, so it's Minor" | The label graded the spec's silence. Grade what the person gets. Re-grade, then gate. |
400
400
  | "The fix is obvious, no need for a failing test first" | The failing test is the only proof the finding was real and is now gone. Without it you have a diff and a hope. |
401
401
  | "I'll fix the minors too while I'm in there" | Every minor you fix is a test, a fix, and a suite run your partner did not ask for. Ledger them; your partner decides. |
402
-
403
- ## Example Workflow
404
-
405
- ```
406
- You: I'm using the executing-plans skill to implement this plan inline.
407
-
408
- [Setup: the approval named a new branch feat/hooks in this checkout — git switch -c feat/hooks, project setup and baseline tests in place]
409
- [Read plan once: docs/plans/feature-plan.md; spec read]
410
- [Resolve workspace: sdd-workspace docs/plans/feature-plan.md — no ledger inside, fresh start]
411
- [Pre-flight scan: 2 shared-interface rows, 4 self-consistency rows, clean; written to ledger]
412
- [Create todos for all tasks]
413
-
414
- Task 1: Hook installation script
415
-
416
- [task-start plan 1 → brief read; BASE a1b2c3d]
417
- [Step 1: write failing test — written]
418
- [Step 2: run it — FAIL: install_hook not defined. Matches Expected.]
419
- [Step 3: implement — written]
420
- [Step 4: run it — PASS 1/1. Matches Expected.]
421
- [Step 5: commit — d4e5f6a]
422
- [Contract: tests ran, output read, no deviations]
423
- [task-done plan 1 a1b2c3d -- npm test -- hooks → ledger: Task 1: complete (commits a1b2c3d..d4e5f6a, tests: npm test -- hooks → 1/1 pass)]
424
-
425
- Task 2: Recovery modes
426
-
427
- [task-start plan 2 → brief read; BASE d4e5f6a]
428
- [Step 2: run failing test — FAIL, but on an import error: Task 1 exported
429
- installHook, brief consumes install_hook]
430
- [Ruling: brief's consumer name is a typo against Task 1's Produces block;
431
- use installHook — Ledger: Task 2: Ruling: install_hook → installHook — matches Task 1 Produces — cost if wrong: one rename]
432
- [Steps 2-5 as planned; commit b7c8d9e]
433
- [task-done plan 2 d4e5f6a -- npm test -- recovery → ledger: Task 2: complete (commits d4e5f6a..b7c8d9e, tests: npm test -- recovery → 8/8 pass)]
434
-
435
- ...
436
-
437
- [After all tasks: review-package plan MERGE_BASE HEAD; dispatch code-reviewer, most capable model]
438
- Reviewer: One Important finding — progress reporting interval hardcoded. Two Minor.
439
- [Re-grade: Important stands; minors → ledger as deferred]
440
- [Fix pass: test_progress_interval_configurable RED → extract PROGRESS_INTERVAL → GREEN; suite 12/12; commit]
441
- [Ledger: Final: fixed hardcoded interval — test_progress_interval_configurable RED→GREEN, suite 12/12]
442
-
443
- Rulings I made:
444
- - Task 2: install_hook → installHook (brief typo; cost if wrong: one rename)
445
-
446
- Deferred minors:
447
- - README lacks a usage example
448
- - recovery.js could split verify/repair into two files
449
-
450
- [Delete this plan's workspace — the record now lives in git]
451
-
452
- Using superpowers:finishing-a-development-branch.
453
- ```
@@ -17,7 +17,7 @@ You write test cases (pressure scenarios with subagents), watch them fail (basel
17
17
 
18
18
  **REQUIRED BACKGROUND:** You MUST understand superpowers:test-driven-development before using this skill. That skill defines the fundamental RED-GREEN-REFACTOR cycle. This skill adapts TDD to documentation.
19
19
 
20
- **Official guidance:** For Anthropic's official skill authoring best practices, see anthropic-best-practices.md. This document provides additional patterns and guidelines that complement the TDD-focused approach in this skill.
20
+ **Official guidance:** For Anthropic's official skill authoring best practices, see references/anthropic-best-practices.md. This document provides additional patterns and guidelines that complement the TDD-focused approach in this skill.
21
21
 
22
22
  ## What is a Skill?
23
23
 
@@ -90,236 +90,23 @@ skills/
90
90
  - Code patterns (< 50 lines)
91
91
  - Everything else
92
92
 
93
- ## SKILL.md Structure
93
+ ## Writing SKILL.md
94
94
 
95
- **Frontmatter (YAML):**
96
- - Two required fields: `name` and `description` (see [agentskills.io/specification](https://agentskills.io/specification) for all supported fields)
97
- - Max 1024 characters total
98
- - `name`: Use letters, numbers, and hyphens only (no parentheses, special chars)
99
- - `description`: Third-person, describes ONLY when to use (NOT what it does)
100
- - Start with "Use when..." to focus on triggering conditions
101
- - Include specific symptoms, situations, and contexts
102
- - **NEVER summarize the skill's process or workflow** (see SDO section for why)
103
- - Keep under 500 characters if possible
95
+ A skill's `description` says only when to use it: triggering conditions and
96
+ symptoms, starting with "Use when...". It never summarizes the skill's
97
+ workflow, because an agent that reads a workflow summary follows it instead
98
+ of reading the skill.
104
99
 
105
- ```markdown
106
- ---
107
- name: Skill-Name-With-Hyphens
108
- description: Use when [specific triggering conditions and symptoms]
109
- ---
110
-
111
- # Skill Name
112
-
113
- ## Overview
114
- What is this? Core principle in 1-2 sentences.
115
-
116
- ## When to Use
117
- [Small inline flowchart IF decision non-obvious]
118
-
119
- Bullet list with SYMPTOMS and use cases
120
- When NOT to use
121
-
122
- ## Core Pattern (for techniques/patterns)
123
- Before/after code comparison
124
-
125
- ## Quick Reference
126
- Table or bullets for scanning common operations
127
-
128
- ## Implementation
129
- Inline code for simple patterns
130
- Link to file for heavy reference or reusable tools
131
-
132
- ## Common Mistakes
133
- What goes wrong + fixes
134
-
135
- ## Real-World Impact (optional)
136
- Concrete results
137
- ```
138
-
139
-
140
- ## Skill Discovery Optimization (SDO)
141
-
142
- **Critical for discovery:** Future agents need to FIND your skill
143
-
144
- ### 1. Rich Description Field
145
-
146
- **Purpose:** Your agent reads the description to decide which skills to load for a given task. Make it answer: "Should I read this skill right now?"
147
-
148
- **Format:** Start with "Use when..." to focus on triggering conditions
149
-
150
- **CRITICAL: Description = When to Use, NOT What the Skill Does**
151
-
152
- The description should ONLY describe triggering conditions. Do NOT summarize the skill's process or workflow in the description.
153
-
154
- **Why this matters:** Testing revealed that when a description summarizes the skill's workflow, an agent may follow the description instead of reading the full skill content. A description saying "code review between tasks" caused an agent to do ONE review, even though the skill's flowchart clearly showed TWO reviews (spec compliance then code quality).
155
-
156
- When the description was changed to just "Use when executing implementation plans with independent tasks" (no workflow summary), the agent correctly read the flowchart and followed the two-stage review process.
157
-
158
- **The trap:** Descriptions that summarize workflow create a shortcut agents will take. The skill body becomes documentation agents skip.
159
-
160
- ```yaml
161
- # ❌ BAD: Summarizes workflow - agents may follow this instead of reading skill
162
- description: Use when executing plans - dispatches subagent per task with code review between tasks
163
-
164
- # ❌ BAD: Too much process detail
165
- description: Use for TDD - write test first, watch it fail, write minimal code, refactor
166
-
167
- # ✅ GOOD: Just triggering conditions, no workflow summary
168
- description: Use when executing implementation plans with independent tasks in the current session
169
-
170
- # ✅ GOOD: Triggering conditions only
171
- description: Use when implementing any feature or bugfix, before writing implementation code
172
- ```
173
-
174
- **Content:**
175
- - Use concrete triggers, symptoms, and situations that signal this skill applies
176
- - Describe the *problem* (race conditions, inconsistent behavior) not *language-specific symptoms* (setTimeout, sleep)
177
- - Keep triggers technology-agnostic unless the skill itself is technology-specific
178
- - If skill is technology-specific, make that explicit in the trigger
179
- - Write in third person (injected into system prompt)
180
- - **NEVER summarize the skill's process or workflow**
181
-
182
- ```yaml
183
- # ❌ BAD: Too abstract, vague, doesn't include when to use
184
- description: For async testing
185
-
186
- # ❌ BAD: First person
187
- description: I can help you with async tests when they're flaky
188
-
189
- # ❌ BAD: Mentions technology but skill isn't specific to it
190
- description: Use when tests use setTimeout/sleep and are flaky
191
-
192
- # ✅ GOOD: Starts with "Use when", describes problem, no workflow
193
- description: Use when tests have race conditions, timing dependencies, or pass/fail inconsistently
194
-
195
- # ✅ GOOD: Technology-specific skill with explicit trigger
196
- description: Use when using React Router and handling authentication redirects
197
- ```
198
-
199
- ### 2. Keyword Coverage
200
-
201
- Use words an agent would search for:
202
- - Error messages: "Hook timed out", "ENOTEMPTY", "race condition"
203
- - Symptoms: "flaky", "hanging", "zombie", "pollution"
204
- - Synonyms: "timeout/hang/freeze", "cleanup/teardown/afterEach"
205
- - Tools: Actual commands, library names, file types
206
-
207
- ### 3. Descriptive Naming
208
-
209
- **Use active voice, verb-first:**
210
- - ✅ `creating-skills` not `skill-creation`
211
- - ✅ `condition-based-waiting` not `async-test-helpers`
212
-
213
- ### 4. Token Efficiency (Critical)
214
-
215
- **Problem:** getting-started and frequently-referenced skills load into EVERY conversation. Every token counts.
216
-
217
- **Target word counts:**
218
- - getting-started workflows: <150 words each
219
- - Frequently-loaded skills: <200 words total
220
- - Other skills: <500 words (still be concise)
221
-
222
- **Techniques:**
223
-
224
- **Move details to tool help:**
225
- ```bash
226
- # ❌ BAD: Document all flags in SKILL.md
227
- search-conversations supports --text, --both, --after DATE, --before DATE, --limit N
228
-
229
- # ✅ GOOD: Reference --help
230
- search-conversations supports multiple modes and filters. Run --help for details.
231
- ```
232
-
233
- **Use cross-references:**
234
- ```markdown
235
- # ❌ BAD: Repeat workflow details
236
- When searching, dispatch subagent with template...
237
- [20 lines of repeated instructions]
238
-
239
- # ✅ GOOD: Reference other skill
240
- Always use subagents (50-100x context savings). REQUIRED: Use [other-skill-name] for workflow.
241
- ```
100
+ When you write or change a skill's frontmatter, name or description, or
101
+ need to cut its size, read [references/discovery.md](references/discovery.md):
102
+ the SKILL.md template, description and keyword guidance, naming, token
103
+ budgets, and cross-referencing other skills.
242
104
 
243
- **Compress examples:**
244
- ```markdown
245
- # ❌ BAD: Verbose example (42 words)
246
- your human partner: "How did we handle authentication errors in React Router before?"
247
- You: I'll search past conversations for React Router authentication patterns.
248
- [Dispatch subagent with search query: "React Router authentication error handling 401"]
249
-
250
- # ✅ GOOD: Minimal example (20 words)
251
- Partner: "How did we handle auth errors in React Router?"
252
- You: Searching...
253
- [Dispatch subagent → synthesis]
254
- ```
255
-
256
- **Eliminate redundancy:**
257
- - Don't repeat what's in cross-referenced skills
258
- - Don't explain what's obvious from command
259
- - Don't include multiple examples of same pattern
260
-
261
- **Verification:**
262
- ```bash
263
- wc -w skills/path/SKILL.md
264
- # getting-started workflows: aim for <150 each
265
- # Other frequently-loaded: aim for <200 total
266
- ```
267
-
268
- **Name by what you DO or core insight:**
269
- - ✅ `condition-based-waiting` > `async-test-helpers`
270
- - ✅ `using-skills` not `skill-usage`
271
- - ✅ `flatten-with-flags` > `data-structure-refactoring`
272
- - ✅ `root-cause-tracing` > `debugging-techniques`
273
-
274
- **Gerunds (-ing) work well for processes:**
275
- - `creating-skills`, `testing-skills`, `debugging-with-logs`
276
- - Active, describes the action you're taking
277
-
278
- ### 5. Cross-Referencing Other Skills
105
+ ## Flowcharts
279
106
 
280
- **When writing documentation that references other skills:**
281
-
282
- Use skill name only, with explicit requirement markers:
283
- - ✅ Good: `**REQUIRED SUB-SKILL:** Use superpowers:test-driven-development`
284
- - ✅ Good: `**REQUIRED BACKGROUND:** You MUST understand superpowers:systematic-debugging`
285
- - ❌ Bad: `See skills/testing/test-driven-development` (unclear if required)
286
- - ❌ Bad: `@skills/testing/test-driven-development/SKILL.md` (force-loads, burns context)
287
-
288
- **Why no @ links:** `@` syntax force-loads files immediately, consuming 200k+ context before you need them.
289
-
290
- ## Flowchart Usage
291
-
292
- ```dot
293
- digraph when_flowchart {
294
- "Need to show information?" [shape=diamond];
295
- "Decision where I might go wrong?" [shape=diamond];
296
- "Use markdown" [shape=box];
297
- "Small inline flowchart" [shape=box];
298
-
299
- "Need to show information?" -> "Decision where I might go wrong?" [label="yes"];
300
- "Decision where I might go wrong?" -> "Small inline flowchart" [label="yes"];
301
- "Decision where I might go wrong?" -> "Use markdown" [label="no"];
302
- }
303
- ```
304
-
305
- **Use flowcharts ONLY for:**
306
- - Non-obvious decision points
307
- - Process loops where you might stop too early
308
- - "When to use A vs B" decisions
309
-
310
- **Never use flowcharts for:**
311
- - Reference material → Tables, lists
312
- - Code examples → Markdown blocks
313
- - Linear instructions → Numbered lists
314
- - Labels without semantic meaning (step1, helper2)
315
-
316
- See `graphviz-conventions.dot` in this directory for graphviz style rules.
317
-
318
- **Visualizing for your human partner:** Use `render-graphs.js` in this directory to render a skill's flowcharts to SVG:
319
- ```bash
320
- node ./render-graphs.js ../some-skill # Each diagram separately
321
- node ./render-graphs.js ../some-skill --combine # All diagrams in one SVG
322
- ```
107
+ When you add or change a flowchart in a skill, read
108
+ [references/flowcharts.md](references/flowcharts.md) first: when a flowchart
109
+ earns its place, the graphviz conventions, and how to render one.
323
110
 
324
111
  ## Code Examples
325
112
 
@@ -464,7 +251,7 @@ Before writing guidance, classify the baseline failure. The form that bulletproo
464
251
 
465
252
  | Baseline failure | Right form | Wrong form |
466
253
  |---|---|---|
467
- | Skips/violates a rule under pressure (knows better, does it anyway) | Prohibition + rationalization table + red flags (see Bulletproofing below) | Soft guidance ("prefer...", "consider...") |
254
+ | Skips/violates a rule under pressure (knows better, does it anyway) | Prohibition + rationalization table + red flags (see references/bulletproofing.md) | Soft guidance ("prefer...", "consider...") |
468
255
  | Complies, but output has the wrong shape (bloated prompt, buried verdict, restated spec) | Positive recipe or contract: state what the output IS — its parts, in order | Prohibition list ("don't restate", "never narrate") |
469
256
  | Omits a required element from something they already produce | Structural: REQUIRED field or slot in the template they fill in | Prose reminders near the template |
470
257
  | Behavior should depend on a condition | Conditional keyed to an observable predicate ("if the brief exists, reference it") | Unconditional rule + exemption clauses |
@@ -475,81 +262,12 @@ Before writing guidance, classify the baseline failure. The form that bulletproo
475
262
  - **No nuance clauses.** "Don't X unless it matters" reopens the negotiation — appending a single nuance clause to a winning recipe degraded it from consistent to noisy in the same wording tests. Express a real exception as its own conditional on an observable predicate.
476
263
  - **Exemption clauses don't scope.** "This limit doesn't apply to code blocks" still suppresses code blocks. If part of the output must be exempt, restructure so the rule can't reach it.
477
264
 
478
- ## Bulletproofing Skills Against Rationalization
479
-
480
- Skills that enforce discipline (like TDD) need to resist rationalization. Agents are smart and will find loopholes when under pressure.
481
-
482
- **Scope:** this toolkit is for discipline failures — an agent that knows the rule and skips it under pressure. For wrong-shaped output or omitted elements, prohibition-based bulletproofing backfires; use the forms in Match the Form to the Failure instead.
483
-
484
- **Psychology note:** Understanding WHY persuasion techniques work helps you apply them systematically. See persuasion-principles.md for research foundation (Cialdini, 2021; Meincke et al., 2025) on authority, commitment, scarcity, social proof, and unity principles.
485
-
486
- ### Close Every Loophole Explicitly
487
-
488
- Don't just state the rule - forbid specific workarounds:
489
-
490
- <Bad>
491
- ```markdown
492
- Write code before test? Delete it.
493
- ```
494
- </Bad>
495
-
496
- <Good>
497
- ```markdown
498
- Write code before test? Delete it. Start over.
499
-
500
- **No exceptions:**
501
- - Don't keep it as "reference"
502
- - Don't "adapt" it while writing tests
503
- - Don't look at it
504
- - Delete means delete
505
- ```
506
- </Good>
507
-
508
- ### Address "Spirit vs Letter" Arguments
509
-
510
- Add foundational principle early:
265
+ ## Bulletproofing Against Rationalization
511
266
 
512
- ```markdown
513
- **Violating the letter of the rules is violating the spirit of the rules.**
514
- ```
515
-
516
- This cuts off entire class of "I'm following the spirit" rationalizations.
517
-
518
- ### Build Rationalization Table
519
-
520
- Capture rationalizations from baseline testing (see Testing section below). Every excuse agents make goes in the table:
521
-
522
- ```markdown
523
- | Excuse | Reality |
524
- |--------|---------|
525
- | "Too simple to test" | Simple code breaks. Test takes 30 seconds. |
526
- | "I'll test after" | Tests passing immediately prove nothing. |
527
- | "Tests after achieve same goals" | Tests-after = "what does this do?" Tests-first = "what should this do?" |
528
- ```
529
-
530
- ### Create Red Flags List
531
-
532
- Make it easy for agents to self-check when rationalizing:
533
-
534
- ```markdown
535
- ## Red Flags - STOP and Start Over
536
-
537
- - Code before test
538
- - "I already manually tested it"
539
- - "Tests after achieve the same purpose"
540
- - "It's about spirit not ritual"
541
- - "This is different because..."
542
-
543
- **All of these mean: Delete code. Start over with TDD.**
544
- ```
545
-
546
- ### Update SDO for Violation Symptoms
547
-
548
- Add to description: symptoms of when you're ABOUT to violate the rule:
549
-
550
- ```yaml
551
- description: use when implementing any feature or bugfix, before writing implementation code
552
- ```
267
+ When the baseline failure is a discipline failure, read
268
+ [references/bulletproofing.md](references/bulletproofing.md) before you write
269
+ the guidance: closing loopholes, the spirit-vs-letter line, the
270
+ rationalization table, and the red-flags list.
553
271
 
554
272
  ## RED-GREEN-REFACTOR for Skills
555
273
 
@@ -586,7 +304,7 @@ Full pressure-scenario runs are the final gate, but they are slow and expensive
586
304
 
587
305
  Micro-tests verify wording; they do not replace pressure scenarios for discipline skills.
588
306
 
589
- **Testing methodology:** See [testing-skills-with-subagents.md](testing-skills-with-subagents.md) for the complete testing methodology:
307
+ **Testing methodology:** See [references/testing-skills-with-subagents.md](references/testing-skills-with-subagents.md) for the complete testing methodology:
590
308
  - How to write pressure scenarios
591
309
  - Pressure types (time, sunk cost, authority, exhaustion)
592
310
  - Plugging holes systematically
@@ -0,0 +1,80 @@
1
+ # Bulletproofing Skills Against Rationalization
2
+
3
+ Part of superpowers:writing-skills. Use it when the baseline failure is a
4
+ discipline failure: the agent knows the rule and skips it under pressure.
5
+
6
+ ## Bulletproofing Skills Against Rationalization
7
+
8
+ Skills that enforce discipline (like TDD) need to resist rationalization. Agents are smart and will find loopholes when under pressure.
9
+
10
+ **Scope:** this toolkit is for discipline failures — an agent that knows the rule and skips it under pressure. For wrong-shaped output or omitted elements, prohibition-based bulletproofing backfires; use the forms in Match the Form to the Failure instead.
11
+
12
+ **Psychology note:** Understanding WHY persuasion techniques work helps you apply them systematically. See persuasion-principles.md in this directory for research foundation (Cialdini, 2021; Meincke et al., 2025) on authority, commitment, scarcity, social proof, and unity principles.
13
+
14
+ ### Close Every Loophole Explicitly
15
+
16
+ Don't just state the rule - forbid specific workarounds:
17
+
18
+ <Bad>
19
+ ```markdown
20
+ Write code before test? Delete it.
21
+ ```
22
+ </Bad>
23
+
24
+ <Good>
25
+ ```markdown
26
+ Write code before test? Delete it. Start over.
27
+
28
+ **No exceptions:**
29
+ - Don't keep it as "reference"
30
+ - Don't "adapt" it while writing tests
31
+ - Don't look at it
32
+ - Delete means delete
33
+ ```
34
+ </Good>
35
+
36
+ ### Address "Spirit vs Letter" Arguments
37
+
38
+ Add foundational principle early:
39
+
40
+ ```markdown
41
+ **Violating the letter of the rules is violating the spirit of the rules.**
42
+ ```
43
+
44
+ This cuts off entire class of "I'm following the spirit" rationalizations.
45
+
46
+ ### Build Rationalization Table
47
+
48
+ Capture rationalizations from baseline testing (see Testing section below). Every excuse agents make goes in the table:
49
+
50
+ ```markdown
51
+ | Excuse | Reality |
52
+ |--------|---------|
53
+ | "Too simple to test" | Simple code breaks. Test takes 30 seconds. |
54
+ | "I'll test after" | Tests passing immediately prove nothing. |
55
+ | "Tests after achieve same goals" | Tests-after = "what does this do?" Tests-first = "what should this do?" |
56
+ ```
57
+
58
+ ### Create Red Flags List
59
+
60
+ Make it easy for agents to self-check when rationalizing:
61
+
62
+ ```markdown
63
+ ## Red Flags - STOP and Start Over
64
+
65
+ - Code before test
66
+ - "I already manually tested it"
67
+ - "Tests after achieve the same purpose"
68
+ - "It's about spirit not ritual"
69
+ - "This is different because..."
70
+
71
+ **All of these mean: Delete code. Start over with TDD.**
72
+ ```
73
+
74
+ ### Update SDO for Violation Symptoms
75
+
76
+ Add to description: symptoms of when you're ABOUT to violate the rule:
77
+
78
+ ```yaml
79
+ description: use when implementing any feature or bugfix, before writing implementation code
80
+ ```
@@ -0,0 +1,201 @@
1
+ # Writing SKILL.md for Discovery
2
+
3
+ Part of superpowers:writing-skills: the SKILL.md template and how to name,
4
+ describe and size a skill so agents find it and read it.
5
+
6
+ ## SKILL.md Structure
7
+
8
+ **Frontmatter (YAML):**
9
+ - Two required fields: `name` and `description` (see [agentskills.io/specification](https://agentskills.io/specification) for all supported fields)
10
+ - Max 1024 characters total
11
+ - `name`: Use letters, numbers, and hyphens only (no parentheses, special chars)
12
+ - `description`: Third-person, describes ONLY when to use (NOT what it does)
13
+ - Start with "Use when..." to focus on triggering conditions
14
+ - Include specific symptoms, situations, and contexts
15
+ - **NEVER summarize the skill's process or workflow** (see Skill Discovery Optimization below for why)
16
+ - Keep under 500 characters if possible
17
+
18
+ ```markdown
19
+ ---
20
+ name: Skill-Name-With-Hyphens
21
+ description: Use when [specific triggering conditions and symptoms]
22
+ ---
23
+
24
+ # Skill Name
25
+
26
+ ## Overview
27
+ What is this? Core principle in 1-2 sentences.
28
+
29
+ ## When to Use
30
+ [Small inline flowchart IF decision non-obvious]
31
+
32
+ Bullet list with SYMPTOMS and use cases
33
+ When NOT to use
34
+
35
+ ## Core Pattern (for techniques/patterns)
36
+ Before/after code comparison
37
+
38
+ ## Quick Reference
39
+ Table or bullets for scanning common operations
40
+
41
+ ## Implementation
42
+ Inline code for simple patterns
43
+ Link to file for heavy reference or reusable tools
44
+
45
+ ## Common Mistakes
46
+ What goes wrong + fixes
47
+
48
+ ## Real-World Impact (optional)
49
+ Concrete results
50
+ ```
51
+
52
+
53
+ ## Skill Discovery Optimization (SDO)
54
+
55
+ **Critical for discovery:** Future agents need to FIND your skill
56
+
57
+ ### 1. Rich Description Field
58
+
59
+ **Purpose:** Your agent reads the description to decide which skills to load for a given task. Make it answer: "Should I read this skill right now?"
60
+
61
+ **Format:** Start with "Use when..." to focus on triggering conditions
62
+
63
+ **CRITICAL: Description = When to Use, NOT What the Skill Does**
64
+
65
+ The description should ONLY describe triggering conditions. Do NOT summarize the skill's process or workflow in the description.
66
+
67
+ **Why this matters:** Testing revealed that when a description summarizes the skill's workflow, an agent may follow the description instead of reading the full skill content. A description saying "code review between tasks" caused an agent to do ONE review, even though the skill's flowchart clearly showed TWO reviews (spec compliance then code quality).
68
+
69
+ When the description was changed to just "Use when executing implementation plans with independent tasks" (no workflow summary), the agent correctly read the flowchart and followed the two-stage review process.
70
+
71
+ **The trap:** Descriptions that summarize workflow create a shortcut agents will take. The skill body becomes documentation agents skip.
72
+
73
+ ```yaml
74
+ # ❌ BAD: Summarizes workflow - agents may follow this instead of reading skill
75
+ description: Use when executing plans - dispatches subagent per task with code review between tasks
76
+
77
+ # ❌ BAD: Too much process detail
78
+ description: Use for TDD - write test first, watch it fail, write minimal code, refactor
79
+
80
+ # ✅ GOOD: Just triggering conditions, no workflow summary
81
+ description: Use when executing implementation plans with independent tasks in the current session
82
+
83
+ # ✅ GOOD: Triggering conditions only
84
+ description: Use when implementing any feature or bugfix, before writing implementation code
85
+ ```
86
+
87
+ **Content:**
88
+ - Use concrete triggers, symptoms, and situations that signal this skill applies
89
+ - Describe the *problem* (race conditions, inconsistent behavior) not *language-specific symptoms* (setTimeout, sleep)
90
+ - Keep triggers technology-agnostic unless the skill itself is technology-specific
91
+ - If skill is technology-specific, make that explicit in the trigger
92
+ - Write in third person (injected into system prompt)
93
+ - **NEVER summarize the skill's process or workflow**
94
+
95
+ ```yaml
96
+ # ❌ BAD: Too abstract, vague, doesn't include when to use
97
+ description: For async testing
98
+
99
+ # ❌ BAD: First person
100
+ description: I can help you with async tests when they're flaky
101
+
102
+ # ❌ BAD: Mentions technology but skill isn't specific to it
103
+ description: Use when tests use setTimeout/sleep and are flaky
104
+
105
+ # ✅ GOOD: Starts with "Use when", describes problem, no workflow
106
+ description: Use when tests have race conditions, timing dependencies, or pass/fail inconsistently
107
+
108
+ # ✅ GOOD: Technology-specific skill with explicit trigger
109
+ description: Use when using React Router and handling authentication redirects
110
+ ```
111
+
112
+ ### 2. Keyword Coverage
113
+
114
+ Use words an agent would search for:
115
+ - Error messages: "Hook timed out", "ENOTEMPTY", "race condition"
116
+ - Symptoms: "flaky", "hanging", "zombie", "pollution"
117
+ - Synonyms: "timeout/hang/freeze", "cleanup/teardown/afterEach"
118
+ - Tools: Actual commands, library names, file types
119
+
120
+ ### 3. Descriptive Naming
121
+
122
+ **Use active voice, verb-first:**
123
+ - ✅ `creating-skills` not `skill-creation`
124
+ - ✅ `condition-based-waiting` not `async-test-helpers`
125
+
126
+ ### 4. Token Efficiency (Critical)
127
+
128
+ **Problem:** getting-started and frequently-referenced skills load into EVERY conversation. Every token counts.
129
+
130
+ **Target word counts:**
131
+ - getting-started workflows: <150 words each
132
+ - Frequently-loaded skills: <200 words total
133
+ - Other skills: <500 words (still be concise)
134
+
135
+ **Techniques:**
136
+
137
+ **Move details to tool help:**
138
+ ```bash
139
+ # ❌ BAD: Document all flags in SKILL.md
140
+ search-conversations supports --text, --both, --after DATE, --before DATE, --limit N
141
+
142
+ # ✅ GOOD: Reference --help
143
+ search-conversations supports multiple modes and filters. Run --help for details.
144
+ ```
145
+
146
+ **Use cross-references:**
147
+ ```markdown
148
+ # ❌ BAD: Repeat workflow details
149
+ When searching, dispatch subagent with template...
150
+ [20 lines of repeated instructions]
151
+
152
+ # ✅ GOOD: Reference other skill
153
+ Always use subagents (50-100x context savings). REQUIRED: Use [other-skill-name] for workflow.
154
+ ```
155
+
156
+ **Compress examples:**
157
+ ```markdown
158
+ # ❌ BAD: Verbose example (42 words)
159
+ your human partner: "How did we handle authentication errors in React Router before?"
160
+ You: I'll search past conversations for React Router authentication patterns.
161
+ [Dispatch subagent with search query: "React Router authentication error handling 401"]
162
+
163
+ # ✅ GOOD: Minimal example (20 words)
164
+ Partner: "How did we handle auth errors in React Router?"
165
+ You: Searching...
166
+ [Dispatch subagent → synthesis]
167
+ ```
168
+
169
+ **Eliminate redundancy:**
170
+ - Don't repeat what's in cross-referenced skills
171
+ - Don't explain what's obvious from command
172
+ - Don't include multiple examples of same pattern
173
+
174
+ **Verification:**
175
+ ```bash
176
+ wc -w skills/path/SKILL.md
177
+ # getting-started workflows: aim for <150 each
178
+ # Other frequently-loaded: aim for <200 total
179
+ ```
180
+
181
+ **Name by what you DO or core insight:**
182
+ - ✅ `condition-based-waiting` > `async-test-helpers`
183
+ - ✅ `using-skills` not `skill-usage`
184
+ - ✅ `flatten-with-flags` > `data-structure-refactoring`
185
+ - ✅ `root-cause-tracing` > `debugging-techniques`
186
+
187
+ **Gerunds (-ing) work well for processes:**
188
+ - `creating-skills`, `testing-skills`, `debugging-with-logs`
189
+ - Active, describes the action you're taking
190
+
191
+ ### 5. Cross-Referencing Other Skills
192
+
193
+ **When writing documentation that references other skills:**
194
+
195
+ Use skill name only, with explicit requirement markers:
196
+ - ✅ Good: `**REQUIRED SUB-SKILL:** Use superpowers:test-driven-development`
197
+ - ✅ Good: `**REQUIRED BACKGROUND:** You MUST understand superpowers:systematic-debugging`
198
+ - ❌ Bad: `See skills/testing/test-driven-development` (unclear if required)
199
+ - ❌ Bad: `@skills/testing/test-driven-development/SKILL.md` (force-loads, burns context)
200
+
201
+ **Why no @ links:** `@` syntax force-loads files immediately, consuming 200k+ context before you need them.
@@ -0,0 +1,37 @@
1
+ # Flowcharts in Skills
2
+
3
+ Part of superpowers:writing-skills.
4
+
5
+ ## Flowchart Usage
6
+
7
+ ```dot
8
+ digraph when_flowchart {
9
+ "Need to show information?" [shape=diamond];
10
+ "Decision where I might go wrong?" [shape=diamond];
11
+ "Use markdown" [shape=box];
12
+ "Small inline flowchart" [shape=box];
13
+
14
+ "Need to show information?" -> "Decision where I might go wrong?" [label="yes"];
15
+ "Decision where I might go wrong?" -> "Small inline flowchart" [label="yes"];
16
+ "Decision where I might go wrong?" -> "Use markdown" [label="no"];
17
+ }
18
+ ```
19
+
20
+ **Use flowcharts ONLY for:**
21
+ - Non-obvious decision points
22
+ - Process loops where you might stop too early
23
+ - "When to use A vs B" decisions
24
+
25
+ **Never use flowcharts for:**
26
+ - Reference material → Tables, lists
27
+ - Code examples → Markdown blocks
28
+ - Linear instructions → Numbered lists
29
+ - Labels without semantic meaning (step1, helper2)
30
+
31
+ See `graphviz-conventions.dot` in this directory for graphviz style rules.
32
+
33
+ **Visualizing for your human partner:** Use `render-graphs.js` in the writing-skills directory to render a skill's flowcharts to SVG, run from there:
34
+ ```bash
35
+ node ./render-graphs.js ../some-skill # Each diagram separately
36
+ node ./render-graphs.js ../some-skill --combine # All diagrams in one SVG
37
+ ```
@@ -12,7 +12,7 @@ You run scenarios without the skill (RED - watch agent fail), write skill addres
12
12
 
13
13
  **REQUIRED BACKGROUND:** You MUST understand superpowers:test-driven-development before using this skill. That skill defines the fundamental RED-GREEN-REFACTOR cycle. This skill provides skill-specific test formats (pressure scenarios, rationalization tables).
14
14
 
15
- **Complete worked example:** See examples/CLAUDE_MD_TESTING.md for a full test campaign testing CLAUDE.md documentation variants.
15
+ **Complete worked example:** See CLAUDE_MD_TESTING.md in this directory for a full test campaign testing CLAUDE.md documentation variants.
16
16
 
17
17
  ## When to Use
18
18
 
@@ -139,7 +139,7 @@ Forces explicit choice.
139
139
 
140
140
  **Best tests combine 3+ pressures.**
141
141
 
142
- **Why this works:** See persuasion-principles.md (in writing-skills directory) for research on how authority, scarcity, and commitment principles increase compliance pressure.
142
+ **Why this works:** See persuasion-principles.md (in this directory) for research on how authority, scarcity, and commitment principles increase compliance pressure.
143
143
 
144
144
  ### Key Elements of Good Scenarios
145
145