@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 +12 -1
- package/README.md +4 -3
- package/package.json +1 -1
- package/skills/brainstorming/SKILL.md +81 -30
- package/skills/diagnosing-superpowers/SKILL.md +1 -1
- package/skills/diagnosing-superpowers/references/github-issues.md +3 -3
- package/skills/diagnosing-superpowers/templates/issue.md +23 -4
- package/skills/executing-plans/SKILL.md +0 -52
- package/skills/writing-skills/SKILL.md +21 -303
- package/skills/writing-skills/references/bulletproofing.md +80 -0
- package/skills/writing-skills/references/discovery.md +201 -0
- package/skills/writing-skills/references/flowcharts.md +37 -0
- package/skills/writing-skills/{testing-skills-with-subagents.md → references/testing-skills-with-subagents.md} +2 -2
- /package/skills/writing-skills/{examples → references}/CLAUDE_MD_TESTING.md +0 -0
- /package/skills/writing-skills/{anthropic-best-practices.md → references/anthropic-best-practices.md} +0 -0
- /package/skills/writing-skills/{graphviz-conventions.dot → references/graphviz-conventions.dot} +0 -0
- /package/skills/writing-skills/{persuasion-principles.md → references/persuasion-principles.md} +0 -0
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.
|
|
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.
|
|
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
|
-
##
|
|
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
|
|
37
|
+
## Your First Message
|
|
31
38
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
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
|
-
**
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
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
|
|
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
|
-
|
|
127
|
-
as
|
|
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
|
|
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 `
|
|
40
|
-
|
|
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=
|
|
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
|
-
|
|
21
|
-
|
|
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.
|
|
51
|
-
|
|
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
|
|
93
|
+
## Writing SKILL.md
|
|
94
94
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
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
|
-
|
|
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
|
-
|
|
281
|
-
|
|
282
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
513
|
-
|
|
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
|
|
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
|
|
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
|
|
|
File without changes
|
|
File without changes
|
/package/skills/writing-skills/{graphviz-conventions.dot → references/graphviz-conventions.dot}
RENAMED
|
File without changes
|
/package/skills/writing-skills/{persuasion-principles.md → references/persuasion-principles.md}
RENAMED
|
File without changes
|