superpowers-mcp 6.0.3 → 6.2.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.
Files changed (37) hide show
  1. package/README.ja.md +15 -2
  2. package/README.ko.md +15 -2
  3. package/README.md +21 -2
  4. package/README.zh-TW.md +22 -3
  5. package/out/server.js +1 -1
  6. package/package.json +1 -1
  7. package/skills/brainstorming/SKILL.md +1 -9
  8. package/skills/brainstorming/scripts/stop-server.ps1 +11 -3
  9. package/skills/brainstorming/visual-companion.md +7 -0
  10. package/skills/dispatching-parallel-agents/SKILL.md +0 -18
  11. package/skills/executing-plans/SKILL.md +6 -12
  12. package/skills/finishing-a-development-branch/SKILL.md +64 -105
  13. package/skills/receiving-code-review/SKILL.md +0 -8
  14. package/skills/requesting-code-review/SKILL.md +6 -14
  15. package/skills/subagent-driven-development/SKILL.md +314 -228
  16. package/skills/subagent-driven-development/implementer-prompt.md +6 -3
  17. package/skills/subagent-driven-development/re-review-prompt.md +106 -0
  18. package/skills/subagent-driven-development/scripts/review-package +11 -9
  19. package/skills/subagent-driven-development/scripts/review-package.ps1 +17 -10
  20. package/skills/subagent-driven-development/scripts/sdd-workspace +26 -8
  21. package/skills/subagent-driven-development/scripts/sdd-workspace.ps1 +29 -4
  22. package/skills/subagent-driven-development/scripts/task-brief +4 -3
  23. package/skills/subagent-driven-development/scripts/task-brief.ps1 +5 -4
  24. package/skills/subagent-driven-development/task-reviewer-prompt.md +3 -5
  25. package/skills/systematic-debugging/SKILL.md +1 -14
  26. package/skills/systematic-debugging/find-polluter.ps1 +20 -4
  27. package/skills/test-driven-development/SKILL.md +10 -61
  28. package/skills/test-driven-development/writing-good-tests.md +198 -0
  29. package/skills/using-git-worktrees/SKILL.md +9 -44
  30. package/skills/using-superpowers/references/antigravity-tools.md +1 -1
  31. package/skills/using-superpowers/references/codex-tools.md +1 -1
  32. package/skills/using-superpowers/references/gemini-tools.md +44 -32
  33. package/skills/verification-before-completion/SKILL.md +0 -19
  34. package/skills/writing-plans/SKILL.md +0 -6
  35. package/skills/writing-skills/SKILL.md +1 -11
  36. package/skills/test-driven-development/testing-anti-patterns.md +0 -299
  37. package/skills/using-superpowers/references/copilot-tools.md +0 -42
@@ -0,0 +1,198 @@
1
+ # Writing Good Tests
2
+
3
+ **Load this reference when:** writing or changing tests, adding mocks, or
4
+ adding cleanup/helper methods for tests.
5
+
6
+ ## Overview
7
+
8
+ A test exists to catch a specific break. Two principles govern everything
9
+ here:
10
+
11
+ ```
12
+ 1. Every test names the break it catches
13
+ 2. Every test exercises the real thing
14
+ ```
15
+
16
+ Strict TDD produces both naturally: a test written first and watched
17
+ failing against real code has already proven it can fail, and only earns
18
+ a mock when the real dependency proves slow or external.
19
+
20
+ ## Principle 1: Name the Break
21
+
22
+ Before writing the test body, answer: **what production change should
23
+ make this test fail — and is that change a bug or a decision?** A test
24
+ earns its place by catching a wrong branch, missing side effect, wrong
25
+ argument, boundary case, or broken contract.
26
+
27
+ **Derive expectations independently.** Use literals and hand-checked
28
+ fixtures; table-driven tests with literal `want` values are the preferred
29
+ shape. An expectation computed by the code under test — or its helpers —
30
+ passes no matter what that code does:
31
+
32
+ ```typescript
33
+ // ❌ Mirror assertion: the same builder computes both sides — always true
34
+ const expected = buildSearchQuery({ tag: 'urgent' });
35
+ expect(buildSearchQuery({ tag: 'urgent' })).toBe(expected);
36
+
37
+ // ✅ Hand-derived literal
38
+ expect(buildSearchQuery({ tag: 'urgent' })).toBe('tag:"urgent"');
39
+ ```
40
+
41
+ **No change detectors.** If only intentional decisions can fail a test —
42
+ a constant's value, exact message wording, private structure — it fires
43
+ on redesign and sleeps through bugs. Test the behavior that depends on
44
+ the decision: not `expect(MAX_RETRIES).toBe(5)` but "a failing call is
45
+ retried 5 times and the 6th attempt never happens."
46
+
47
+ **Behavior, not text.** Asserting that a script, skill, or config
48
+ contains an exact line proves only that the source is the source. Run
49
+ scripts against controlled inputs and assert outputs, side effects, or
50
+ exit codes. Documents that instruct agents are tested by the consuming
51
+ agent's behavior (superpowers:writing-skills); prose for humans earns no
52
+ test at all.
53
+
54
+ **Your code, not the framework.** Test the contract your code makes at
55
+ its boundaries — the route you register, the query you emit, the payload
56
+ you produce. Upstream mechanics are their maintainers' tests to write
57
+ (the classic: asserting your router invokes a registered handler — that
58
+ is the framework's test, not yours). When upstream behavior genuinely
59
+ surprised you, write one narrow characterization test naming the
60
+ assumption. The same boundary applies inside your code: constructors,
61
+ getters, constants, and trivial forwarding earn tests only when they
62
+ validate, normalize, default, derive, enforce, or cause side effects —
63
+ otherwise assert the first consumer-visible result that depends on them.
64
+
65
+ ### Gate Function
66
+
67
+ ```
68
+ BEFORE writing the test body:
69
+ Name the production change that would make this test fail.
70
+
71
+ Cannot name one → redesign around an observable behavior
72
+ "The source text changed" → run the artifact and assert its effects
73
+ Only intentional decisions → change detector; test the behavior
74
+ that depends on the decision
75
+
76
+ Confirm the expected value is derived without the code under test.
77
+ IF it reuses the code's logic or helpers:
78
+ Replace it with a literal or hand-checked fixture
79
+ ```
80
+
81
+ ## Principle 2: Exercise the Real Thing
82
+
83
+ **The mock earns no assertions.** A mock assertion passes when the mock
84
+ is present and fails when it is absent — it says nothing about the
85
+ component. Assert the real component's behavior; if the mock is what you
86
+ are checking, unmock it or delete the assertion.
87
+
88
+ ```typescript
89
+ // ✅ Real behavior
90
+ expect(screen.getByRole('navigation')).toBeInTheDocument();
91
+
92
+ // ❌ Mock existence
93
+ expect(screen.getByTestId('sidebar-mock')).toBeInTheDocument();
94
+ ```
95
+
96
+ **your human partner's correction:** "Are we testing the behavior of a
97
+ mock?"
98
+
99
+ **Mock at the right level.** Learn every side effect of the real method
100
+ before replacing it; mock the slow or external operation and keep what
101
+ the test depends on real. When unsure, run the test against the real
102
+ implementation first and observe what actually needs to happen.
103
+
104
+ ```typescript
105
+ // ❌ The mock swallows the config write that duplicate detection reads
106
+ vi.mock('ToolCatalog', () => ({
107
+ discoverAndCacheTools: vi.fn().mockResolvedValue(undefined)
108
+ }));
109
+
110
+ // ✅ Mock only the slow server startup; the config write stays real
111
+ vi.mock('MCPServerManager');
112
+ ```
113
+
114
+ **Make doubles specific.** When arguments, call counts, or ordering are
115
+ part of the contract, assert them — a fake that accepts anything verifies
116
+ nothing. Give each branch (success, error, malformed) its own fixture or
117
+ spy, so the wrong branch cannot satisfy the expectation.
118
+
119
+ **Mirror real data completely.** Mock the complete structure as it exists
120
+ in reality — all documented fields — not just the ones your test reads.
121
+ Partial mocks fail silently when downstream code reads an omitted field:
122
+ the test passes while integration breaks.
123
+
124
+ **Production classes carry production methods only.** Cleanup that only
125
+ tests need lives in test utilities, never as a `destroy()` on the
126
+ production class. Ask: is this method called only from tests? Does this
127
+ class own this resource's lifecycle? Wrong answers → test utility.
128
+
129
+ **Prefer real components over complex mocks.** When mock setup outgrows
130
+ the test logic, mocks miss methods the real components have, or tests
131
+ break when the mock changes, switch to an integration test with real
132
+ components. **your human partner's question:** "Do we need to be using a
133
+ mock here?"
134
+
135
+ ### Gate Function
136
+
137
+ ```
138
+ BEFORE adding a mock or test helper:
139
+ List the real method's side effects; keep the ones the test
140
+ depends on real — mock the slow/external level below them.
141
+
142
+ Mock responses mirror the complete real structure.
143
+
144
+ A method only tests call lives in test utilities, not production.
145
+
146
+ About to assert on the mock itself?
147
+ Unmock it or delete the assertion.
148
+ ```
149
+
150
+ ## Tests Ship With the Implementation
151
+
152
+ The TDD cycle — failing test, minimal implementation, refactor — is what
153
+ "complete" means. Ship the tests the behavior needs and only those:
154
+ trivial code and human prose earn none, and a test written to satisfy
155
+ process costs maintenance forever.
156
+
157
+ ## The Mutation Check
158
+
159
+ Before finishing, mentally mutate the production code; at least one test
160
+ should fail for each realistic mutation:
161
+
162
+ - Wrong constant or argument
163
+ - Wrong branch handler
164
+ - Missing state change or side effect
165
+ - Empty or default return
166
+ - Missing validation for zero, empty, nil, unauthorized, or malformed input
167
+
168
+ A mutation nothing catches marks the behavior as unprotected — or the
169
+ test as tautological.
170
+
171
+ ## Quick Reference
172
+
173
+ | When you... | Do |
174
+ |-------------|-----|
175
+ | Write any test | Name the break it catches — a bug, not a decision |
176
+ | Build an expected value | Derive it by hand; never with the code under test |
177
+ | Test a script or document | Run it / pressure-test its consumer; never grep its text |
178
+ | Reach for a dependency test | Test your boundary contract, not their documented mechanics |
179
+ | Want to assert on a mocked element | Test the real component, or unmock it |
180
+ | Are about to mock a method | Learn its side effects; mock the slow/external level |
181
+ | Build a mock response | Mirror the real structure completely |
182
+ | Need cleanup only tests use | Put it in test utilities |
183
+ | Watch mock setup balloon | Switch to an integration test with real components |
184
+ | Finish a test file | Run the mutation check |
185
+
186
+ ## Warning Signs
187
+
188
+ - Setup and assertion share the same object, guaranteeing equality
189
+ - The test can fail only through a panic, crash, or missing selector
190
+ - The test fails on every intentional change, never on accidental breakage
191
+ - Expected values are hidden behind loops, builders, or helpers
192
+ - The test greps source text, or asserts a removed symbol stays removed
193
+ - The test would still matter if only the framework remained
194
+ - The test exists for coverage, checking no side effect or outcome
195
+ - An assertion checks a `*-mock` test ID, or fails if you remove the mock
196
+ - A method is called only from test files
197
+ - Mock setup is more than half the test, or you can't explain why the mock is needed
198
+ - Mocking "just to be safe"
@@ -156,47 +156,12 @@ Ready to implement <feature-name>
156
156
  | Tests fail during baseline | Report failures + ask |
157
157
  | No package.json/Cargo.toml | Skip dependency install |
158
158
 
159
- ## Common Mistakes
160
-
161
- ### Fighting the harness
162
-
163
- - **Problem:** Using `git worktree add` when the platform already provides isolation
164
- - **Fix:** Step 0 detects existing isolation. Step 1a defers to native tools.
165
-
166
- ### Skipping detection
167
-
168
- - **Problem:** Creating a nested worktree inside an existing one
169
- - **Fix:** Always run Step 0 before creating anything
170
-
171
- ### Skipping ignore verification
172
-
173
- - **Problem:** Worktree contents get tracked, pollute git status
174
- - **Fix:** Always use `git check-ignore` before creating project-local worktree
175
-
176
- ### Assuming directory location
177
-
178
- - **Problem:** Creates inconsistency, violates project conventions
179
- - **Fix:** Follow priority: explicit instructions > existing project-local directory > default
180
-
181
- ### Proceeding with failing tests
182
-
183
- - **Problem:** Can't distinguish new bugs from pre-existing issues
184
- - **Fix:** Report failures, get explicit permission to proceed
185
-
186
- ## Red Flags
187
-
188
- **Never:**
189
- - Create a worktree when Step 0 detects existing isolation
190
- - Use `git worktree add` when you have a native worktree tool (e.g., `EnterWorktree`). This is the #1 mistake — if you have it, use it.
191
- - Skip Step 1a by jumping straight to Step 1b's git commands
192
- - Create worktree without verifying it's ignored (project-local)
193
- - Skip baseline test verification
194
- - Proceed with failing tests without asking
195
-
196
- **Always:**
197
- - Run Step 0 detection first
198
- - Prefer native tools over git fallback
199
- - Follow directory priority: explicit instructions > existing project-local directory > default
200
- - Verify directory is ignored for project-local
201
- - Auto-detect and run project setup
202
- - Verify clean test baseline
159
+ ## Common Rationalizations
160
+
161
+ | Excuse | Reality |
162
+ |--------|---------|
163
+ | "I'm obviously not in a worktree — no need to check" | Run Step 0. Harness-created isolation and submodules both fool eyeballing; the detection commands settle it. |
164
+ | "`git worktree add` is quicker than hunting for a native tool" | A native tool (e.g. `EnterWorktree`) owns placement, branching, and cleanup. Bypassing it is the #1 mistake — it creates phantom state your harness can't see or manage. |
165
+ | "The worktree directory is surely ignored already" | Run `git check-ignore`. An unignored worktree directory commits the whole tree into the repo. |
166
+ | "Any directory name works" | Explicit instructions beat an existing project-local directory, which beats the `.worktrees/` default. |
167
+ | "The workspace is fresh — baseline tests can wait" | A dirty baseline makes every later failure ambiguous. Run the tests now; proceeding past failures is your human partner's call. |
@@ -4,7 +4,7 @@ Skills speak in actions ("dispatch a subagent", "create a todo", "read a file").
4
4
 
5
5
  | Action skills request | Antigravity CLI equivalent |
6
6
  |----------------------|----------------------|
7
- | Dispatch a subagent (`Subagent (general-purpose):` template) | `invoke_subagent` with a built-in `TypeName` — `self` for full-capability work, `research` for read-only (see [Subagent support](#subagent-support)) |
7
+ | Dispatch a subagent (`Subagent (general-purpose):` template) | `invoke_subagent` with a built-in `TypeName` — `self` for full-capability work, `research` for read-only |
8
8
  | Task tracking ("create a todo", "mark complete") | a **task artifact** — `write_to_file` with `IsArtifact: true` and `ArtifactType: "task"` (see [Task tracking](#task-tracking)). **Not** `manage_task`, which manages background processes. |
9
9
 
10
10
  ## Task tracking
@@ -7,7 +7,7 @@ Add to your Codex config (`~/.codex/config.toml`):
7
7
  multi_agent = true
8
8
  ```
9
9
 
10
- This enables `spawn_agent`, `wait_agent`, and `close_agent` for skills like `dispatching-parallel-agents` and `subagent-driven-development`. When using subagent-driven-development, you should always close implementer and reviewer subagents when they have finished all their work.
10
+ This enables `spawn_agent`, `wait_agent`, and `close_agent` for skills like `dispatching-parallel-agents` and `subagent-driven-development`. When using subagent-driven-development, close reviewer subagents when their review returns. Keep each implementer subagent open until its task's review passes — the fix loop resumes the implementer — then close it. If your harness cannot send another message to a spawned agent, dispatch each fix round as a fresh implementer carrying the brief, the report file, and the findings.
11
11
 
12
12
  ## Environment Detection
13
13
 
@@ -1,51 +1,63 @@
1
1
  # Gemini CLI Tool Mapping
2
2
 
3
- Skills use Claude Code tool names. When you encounter these in a skill, use your platform equivalent:
4
-
5
- | Skill references | Gemini CLI equivalent |
6
- |-----------------|----------------------|
7
- | `Read` (file reading) | `read_file` |
8
- | `Write` (file creation) | `write_file` |
9
- | `Edit` (file editing) | `replace` |
10
- | `Bash` (run commands) | `run_shell_command` |
11
- | `Grep` (search file content) | `grep_search` |
12
- | `Glob` (search files by name) | `glob` |
13
- | `TodoWrite` (task tracking) | `write_todos` |
14
- | `Skill` tool (invoke a skill) | `activate_skill` |
15
- | `WebSearch` | `google_web_search` |
16
- | `WebFetch` | `web_fetch` |
17
- | `Task` tool (dispatch subagent) | `@agent-name` (see [Subagent support](#subagent-support)) |
3
+ Skills speak in actions ("dispatch a subagent", "create a todo", "read a file"). On Gemini CLI these resolve to the tools below.
4
+
5
+ | Action skills request | Gemini CLI equivalent |
6
+ |----------------------|----------------------|
7
+ | Read a file | `read_file` |
8
+ | Read multiple files at once | `read_many_files` |
9
+ | Create a new file | `write_file` |
10
+ | Edit a file | `replace` |
11
+ | Run a shell command | `run_shell_command` |
12
+ | Search file contents | `grep_search` |
13
+ | Find files by name | `glob` |
14
+ | List files and subdirectories | `list_directory` |
15
+ | Fetch a URL | `web_fetch` |
16
+ | Search the web | `google_web_search` |
17
+ | Invoke a skill | `activate_skill` |
18
+ | Dispatch a subagent (`Subagent (general-purpose):` template) | `invoke_agent` with `agent_name: "generalist"` (invocable via `@generalist` chat syntax — see [Subagent support](#subagent-support)) |
19
+ | Multiple parallel dispatches | Multiple `invoke_agent` calls in the same response |
20
+ | Task tracking ("create a todo", "mark complete") | `write_todos` (statuses: pending, in_progress, completed, cancelled, blocked) |
21
+
22
+ ## Instructions file
23
+
24
+ When a skill mentions "your instructions file", on Gemini CLI this is **`GEMINI.md`**. Gemini CLI loads `GEMINI.md` hierarchically: global at `~/.gemini/GEMINI.md`, project-level files in workspace directories and their ancestors, and sub-directory `GEMINI.md` files when a tool accesses files in those directories.
25
+
26
+ ## Personal skills directory
27
+
28
+ User-level skills live at **`~/.gemini/skills/`**, with **`~/.agents/skills/`** as a cross-runtime alias (shared with Codex and Copilot CLI). When both directories exist at the same scope, `.agents/skills/` takes precedence. Each skill is a subdirectory containing a `SKILL.md` (with `name` and `description` frontmatter).
18
29
 
19
30
  ## Subagent support
20
31
 
21
- Gemini CLI supports subagents natively via the `@` syntax. Use the built-in `@generalist` agent to dispatch any task — it has access to all tools and follows the prompt you provide.
32
+ Gemini CLI dispatches subagents through the `invoke_agent` tool, which takes `agent_name` and `prompt` parameters. The same dispatch is also surfaced as a chat-syntax shortcut: typing `@generalist <prompt>` is equivalent to calling `invoke_agent` with `agent_name: "generalist"`. Built-in agent names include `generalist`, `cli_help`, `codebase_investigator`, and (with browser tooling enabled) `browser_agent`.
22
33
 
23
- When a skill says to dispatch a named agent type, use `@generalist` with the full prompt from the skill's prompt template:
34
+ Skills dispatch with `Subagent (general-purpose):` and either reference a prompt-template file (e.g., `superpowers:subagent-driven-development`'s `./implementer-prompt.md`) or supply an inline prompt. On Gemini CLI:
24
35
 
25
- | Skill instruction | Gemini CLI equivalent |
26
- |-------------------|----------------------|
27
- | `Task tool (superpowers:implementer)` | `@generalist` with the filled `implementer-prompt.md` template |
28
- | `Task tool (superpowers:spec-reviewer)` | `@generalist` with the filled `spec-reviewer-prompt.md` template |
29
- | `Task tool (superpowers:code-reviewer)` | `@code-reviewer` (bundled agent) or `@generalist` with the filled review prompt |
30
- | `Task tool (superpowers:code-quality-reviewer)` | `@generalist` with the filled `code-quality-reviewer-prompt.md` template |
31
- | `Task tool (general-purpose)` with inline prompt | `@generalist` with your inline prompt |
36
+ | Skill dispatch form | Gemini CLI equivalent |
37
+ |---------------------|----------------------|
38
+ | References a `*-prompt.md` template (implementer, task-reviewer, code-reviewer, etc.) | Fill the template, then `invoke_agent` with `agent_name: "generalist"` and the filled prompt |
39
+ | References `superpowers:requesting-code-review`'s `./code-reviewer.md` | `invoke_agent` with `agent_name: "generalist"` and the filled review template |
40
+ | Inline prompt (no template referenced) | `invoke_agent` with `agent_name: "generalist"` and your inline prompt |
32
41
 
33
42
  ### Prompt filling
34
43
 
35
- Skills provide prompt templates with placeholders like `{WHAT_WAS_IMPLEMENTED}` or `[FULL TEXT of task]`. Fill all placeholders and pass the complete prompt as the message to `@generalist`. The prompt template itself contains the agent's role, review criteria, and expected output format — `@generalist` will follow it.
44
+ Skills provide prompt templates with placeholders like `{WHAT_WAS_IMPLEMENTED}` or `[FULL TEXT of task]`. Fill all placeholders before passing the complete prompt to `invoke_agent`. The prompt template itself contains the agent's role, review criteria, and expected output format — the subagent will follow it.
36
45
 
37
46
  ### Parallel dispatch
38
47
 
39
- Gemini CLI supports parallel subagent dispatch. When a skill asks you to dispatch multiple independent subagent tasks in parallel, request all of those `@generalist` or named subagent tasks together in the same prompt. Keep dependent tasks sequential, but do not serialize independent subagent tasks just to preserve a simpler history.
48
+ Gemini CLI supports parallel subagent dispatch. Issue multiple `invoke_agent` calls in the same response (or multiple `@generalist` invocations in one prompt) to run independent subagent work in parallel. Keep dependent tasks sequential, but do not serialize independent subagent tasks just to preserve a simpler history.
40
49
 
41
50
  ## Additional Gemini CLI tools
42
51
 
43
- These tools are available in Gemini CLI but have no Claude Code equivalent:
52
+ These tools are unique to Gemini CLI:
44
53
 
45
54
  | Tool | Purpose |
46
55
  |------|---------|
47
- | `list_directory` | List files and subdirectories |
48
- | `save_memory` | Persist facts to GEMINI.md across sessions |
49
- | `ask_user` | Request structured input from the user |
50
- | `tracker_create_task` | Rich task management (create, update, list, visualize) |
51
- | `enter_plan_mode` / `exit_plan_mode` | Switch to read-only research mode before making changes |
56
+ | `save_memory` (legacy) | Persist facts across sessions when `experimental.memoryV2 = false` |
57
+ | `get_internal_docs` | Look up Gemini CLI's bundled documentation |
58
+ | `ask_user` | Pose structured questions to the user (text / single-select / multi-select) |
59
+ | `enter_plan_mode` / `exit_plan_mode` | Switch into and out of read-only plan mode |
60
+ | `update_topic` | Update the current conversation's topic / strategic-intent metadata |
61
+ | `complete_task` | Signal that a Gemini subagent has completed and return its result to the parent agent |
62
+ | `tracker_create_task`, `tracker_update_task`, `tracker_get_task`, `tracker_list_tasks`, `tracker_add_dependency`, `tracker_visualize` | Rich task tracker with dependency and visualization support |
63
+ | `read_mcp_resource`, `list_mcp_resources` | MCP resource access |
@@ -7,8 +7,6 @@ description: Use when about to claim work is complete, fixed, or passing, before
7
7
 
8
8
  ## Overview
9
9
 
10
- Claiming work is complete without verification is dishonesty, not efficiency.
11
-
12
10
  **Core principle:** Evidence before claims, always.
13
11
 
14
12
  **Violating the letter of this rule is violating the spirit of this rule.**
@@ -105,15 +103,6 @@ Skip any step = lying, not verifying
105
103
  ❌ Trust agent report
106
104
  ```
107
105
 
108
- ## Why This Matters
109
-
110
- From 24 failure memories:
111
- - your human partner said "I don't believe you" - trust broken
112
- - Undefined functions shipped - would crash
113
- - Missing requirements shipped - incomplete features
114
- - Time wasted on false completion → redirect → rework
115
- - Violates: "Honesty is a core value. If you lie, you'll be replaced."
116
-
117
106
  ## When To Apply
118
107
 
119
108
  **ALWAYS before:**
@@ -129,11 +118,3 @@ From 24 failure memories:
129
118
  - Paraphrases and synonyms
130
119
  - Implications of success
131
120
  - ANY communication suggesting completion/correctness
132
-
133
- ## The Bottom Line
134
-
135
- **No shortcuts for verification.**
136
-
137
- Run the command. Read the output. THEN claim the result.
138
-
139
- This is non-negotiable.
@@ -135,12 +135,6 @@ Every step must contain the actual content an engineer needs. These are **plan f
135
135
  - Steps that describe what to do without showing how (code blocks required for code steps)
136
136
  - References to types, functions, or methods not defined in any task
137
137
 
138
- ## Remember
139
- - Exact file paths always
140
- - Complete code in every step — if a step changes code, show the code
141
- - Exact commands with expected output
142
- - DRY, YAGNI, TDD, frequent commits
143
-
144
138
  ## Self-Review
145
139
 
146
140
  After writing the complete plan, look at the spec with fresh eyes and check the plan against it. This is a checklist you run yourself — not a subagent dispatch.
@@ -9,7 +9,7 @@ description: Use when creating new skills, editing existing skills, or verifying
9
9
 
10
10
  **Writing skills IS Test-Driven Development applied to process documentation.**
11
11
 
12
- **Personal skills live in your runtime's skills directory**
12
+ **Personal skills live in your runtime's skills directory** (`~/.claude/skills/` on Claude Code) — see [codex-tools.md](../using-superpowers/references/codex-tools.md) or [gemini-tools.md](../using-superpowers/references/gemini-tools.md) for the path on those runtimes. Codex, Copilot CLI, and Gemini CLI all also recognize `~/.agents/skills/` as a cross-runtime alias.
13
13
 
14
14
  You write test cases (pressure scenarios with subagents), watch them fail (baseline behavior), write the skill (documentation), watch tests pass (agents comply), and refactor (close loopholes).
15
15
 
@@ -677,13 +677,3 @@ How future agents find your skill:
677
677
  6. **Loads example** (only when implementing)
678
678
 
679
679
  **Optimize for this flow** - put searchable terms early and often.
680
-
681
- ## The Bottom Line
682
-
683
- **Creating skills IS TDD for process documentation.**
684
-
685
- Same Iron Law: No skill without failing test first.
686
- Same cycle: RED (baseline) → GREEN (write skill) → REFACTOR (close loopholes).
687
- Same benefits: Better quality, fewer surprises, bulletproof results.
688
-
689
- If you follow TDD for code, follow it for skills. It's the same discipline applied to documentation.