@givolt/i3-composer-agent 0.0.0-stage → 0.6.12

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 (213) hide show
  1. package/.agents/plugins/marketplace.json +22 -0
  2. package/.claude/commands/build.md +44 -0
  3. package/.claude/commands/code-simplify.md +22 -0
  4. package/.claude/commands/constraints.md +32 -0
  5. package/.claude/commands/plan.md +18 -0
  6. package/.claude/commands/review.md +16 -0
  7. package/.claude/commands/ship.md +72 -0
  8. package/.claude/commands/spec.md +17 -0
  9. package/.claude/commands/test.md +19 -0
  10. package/.claude/commands/webperf.md +32 -0
  11. package/.claude-plugin/marketplace.json +26 -0
  12. package/.claude-plugin/plugin.json +17 -0
  13. package/.codex-plugin/plugin.json +26 -0
  14. package/.gemini/commands/build.toml +43 -0
  15. package/.gemini/commands/code-simplify.toml +22 -0
  16. package/.gemini/commands/constraints.toml +32 -0
  17. package/.gemini/commands/planning.toml +18 -0
  18. package/.gemini/commands/review.toml +16 -0
  19. package/.gemini/commands/ship.toml +72 -0
  20. package/.gemini/commands/spec.toml +17 -0
  21. package/.gemini/commands/test.toml +19 -0
  22. package/.gemini/commands/webperf.toml +32 -0
  23. package/LICENSE +21 -0
  24. package/NOTICE.md +9 -0
  25. package/README.md +177 -2
  26. package/agents/code-reviewer.md +102 -0
  27. package/agents/security-auditor.md +112 -0
  28. package/agents/test-engineer.md +95 -0
  29. package/agents/web-performance-auditor.md +184 -0
  30. package/bin/i3-composer-agent.cjs +119 -0
  31. package/commands/build.toml +43 -0
  32. package/commands/code-simplify.toml +22 -0
  33. package/commands/constraints.toml +32 -0
  34. package/commands/planning.toml +18 -0
  35. package/commands/review.toml +16 -0
  36. package/commands/ship.toml +72 -0
  37. package/commands/spec.toml +17 -0
  38. package/commands/test.toml +19 -0
  39. package/commands/webperf.toml +32 -0
  40. package/docs/adoption-guide.md +129 -0
  41. package/docs/advanced-per-agent-configuration.md +70 -0
  42. package/docs/agents.md +123 -0
  43. package/docs/antigravity-setup.md +128 -0
  44. package/docs/codebuddy-setup.md +41 -0
  45. package/docs/codex-setup.md +34 -0
  46. package/docs/commandcode-setup.md +69 -0
  47. package/docs/comparison.md +131 -0
  48. package/docs/copilot-cli-setup.md +64 -0
  49. package/docs/copilot-setup.md +162 -0
  50. package/docs/cursor-setup.md +225 -0
  51. package/docs/developer-onboarding.md +116 -0
  52. package/docs/gemini-cli-setup.md +133 -0
  53. package/docs/getting-started.md +208 -0
  54. package/docs/opencode-setup.md +259 -0
  55. package/docs/other-hosts.md +7 -0
  56. package/docs/skill-anatomy.md +203 -0
  57. package/docs/windsurf-setup.md +48 -0
  58. package/evals/README.md +101 -0
  59. package/evals/cases/api-and-interface-design.json +45 -0
  60. package/evals/cases/browser-testing-with-devtools.json +44 -0
  61. package/evals/cases/ci-cd-and-automation.json +45 -0
  62. package/evals/cases/code-review-and-quality.json +49 -0
  63. package/evals/cases/code-simplification.json +45 -0
  64. package/evals/cases/constraint-driven-development.json +79 -0
  65. package/evals/cases/context-engineering.json +44 -0
  66. package/evals/cases/debugging-and-error-recovery.json +58 -0
  67. package/evals/cases/deprecation-and-migration.json +52 -0
  68. package/evals/cases/documentation-and-adrs.json +44 -0
  69. package/evals/cases/doubt-driven-development.json +43 -0
  70. package/evals/cases/frontend-ui-engineering.json +52 -0
  71. package/evals/cases/git-workflow-and-versioning.json +47 -0
  72. package/evals/cases/idea-refine.json +43 -0
  73. package/evals/cases/incremental-implementation.json +57 -0
  74. package/evals/cases/interview-me.json +42 -0
  75. package/evals/cases/observability-and-instrumentation.json +44 -0
  76. package/evals/cases/performance-optimization.json +53 -0
  77. package/evals/cases/planning-and-task-breakdown.json +45 -0
  78. package/evals/cases/security-and-hardening.json +53 -0
  79. package/evals/cases/shipping-and-launch.json +56 -0
  80. package/evals/cases/source-driven-development.json +44 -0
  81. package/evals/cases/spec-driven-development.json +72 -0
  82. package/evals/cases/test-driven-development.json +73 -0
  83. package/evals/cases/using-agent-skills.json +44 -0
  84. package/evals/fixtures/api-and-interface-design/service-brief.md +19 -0
  85. package/evals/fixtures/browser-testing-with-devtools/README.md +5 -0
  86. package/evals/fixtures/browser-testing-with-devtools/index.html +24 -0
  87. package/evals/fixtures/browser-testing-with-devtools/server.js +15 -0
  88. package/evals/fixtures/ci-cd-and-automation/package.json +8 -0
  89. package/evals/fixtures/ci-cd-and-automation/src/slug.js +3 -0
  90. package/evals/fixtures/ci-cd-and-automation/test/slug.test.js +9 -0
  91. package/evals/fixtures/code-review-and-quality/user-search.diff +16 -0
  92. package/evals/fixtures/code-simplification/config-parser.js +46 -0
  93. package/evals/fixtures/code-simplification/config-parser.test.js +15 -0
  94. package/evals/fixtures/context-engineering/context-audit.md +15 -0
  95. package/evals/fixtures/debugging-and-error-recovery/pagination.js +8 -0
  96. package/evals/fixtures/debugging-and-error-recovery/pagination.test.js +9 -0
  97. package/evals/fixtures/debugging-and-error-recovery/time-pressure.md +6 -0
  98. package/evals/fixtures/deprecation-and-migration/api-inventory.md +9 -0
  99. package/evals/fixtures/documentation-and-adrs/decision-context.md +16 -0
  100. package/evals/fixtures/doubt-driven-development/migration-plan.md +19 -0
  101. package/evals/fixtures/frontend-ui-engineering/Button.tsx +7 -0
  102. package/evals/fixtures/frontend-ui-engineering/design-system.md +11 -0
  103. package/evals/fixtures/git-workflow-and-versioning/.eval/working-tree.patch +21 -0
  104. package/evals/fixtures/git-workflow-and-versioning/app.js +7 -0
  105. package/evals/fixtures/git-workflow-and-versioning/app.test.js +9 -0
  106. package/evals/fixtures/incremental-implementation/reports.js +7 -0
  107. package/evals/fixtures/incremental-implementation/reports.test.js +12 -0
  108. package/evals/fixtures/incremental-implementation/tasks/plan.md +8 -0
  109. package/evals/fixtures/incremental-implementation-pressure/draft-export.js +17 -0
  110. package/evals/fixtures/incremental-implementation-pressure/scenario.md +9 -0
  111. package/evals/fixtures/observability-and-instrumentation/operations.md +11 -0
  112. package/evals/fixtures/observability-and-instrumentation/payment-retry.js +14 -0
  113. package/evals/fixtures/performance-optimization/benchmark.js +15 -0
  114. package/evals/fixtures/performance-optimization/products.js +14 -0
  115. package/evals/fixtures/planning-and-task-breakdown/notifications-spec.md +18 -0
  116. package/evals/fixtures/security-and-hardening/webhook.js +11 -0
  117. package/evals/fixtures/security-and-hardening/webhook.test.js +13 -0
  118. package/evals/fixtures/shipping-and-launch/authority-pressure.md +6 -0
  119. package/evals/fixtures/shipping-and-launch/launch-status.md +11 -0
  120. package/evals/fixtures/source-driven-development/framework-task.md +10 -0
  121. package/evals/fixtures/spec-driven-development/billing-brief.md +16 -0
  122. package/evals/fixtures/spec-driven-development-decomposition/portal-brief.md +22 -0
  123. package/evals/fixtures/test-driven-development/BUG.md +10 -0
  124. package/evals/fixtures/test-driven-development/README.md +28 -0
  125. package/evals/fixtures/test-driven-development/package.json +9 -0
  126. package/evals/fixtures/test-driven-development/src/split.js +8 -0
  127. package/evals/fixtures/test-driven-development/test/split.test.js +13 -0
  128. package/evals/fixtures/test-driven-development-ecosystem/README.md +9 -0
  129. package/evals/fixtures/test-driven-development-ecosystem/ledger.py +15 -0
  130. package/evals/fixtures/test-driven-development-ecosystem/test_ledger.py +19 -0
  131. package/evals/fixtures/using-agent-skills/incident.md +6 -0
  132. package/evals/plugin/code-review-fires/graders/off-by-one.md +7 -0
  133. package/evals/plugin/code-review-fires/graders/severity-labels.md +4 -0
  134. package/evals/plugin/code-review-fires/graders/skill-fired.md +5 -0
  135. package/evals/plugin/code-review-fires/prompt.md +31 -0
  136. package/evals/plugin/code-review-stays-quiet/graders/not-fired.md +8 -0
  137. package/evals/plugin/code-review-stays-quiet/graders/tdd-fired.md +6 -0
  138. package/evals/plugin/code-review-stays-quiet/prompt.md +8 -0
  139. package/evals/plugin/code-review-stays-quiet-on-commit-message/graders/not-fired.md +8 -0
  140. package/evals/plugin/code-review-stays-quiet-on-commit-message/prompt.md +25 -0
  141. package/evals/skill-impact.md +6 -0
  142. package/hooks/SDD-CACHE.md +167 -0
  143. package/hooks/SIMPLIFY-IGNORE.md +91 -0
  144. package/hooks/sdd-cache-post.sh +135 -0
  145. package/hooks/sdd-cache-pre.sh +106 -0
  146. package/hooks/sdd-cache-test.sh +246 -0
  147. package/hooks/session-start-test.sh +47 -0
  148. package/hooks/session-start.sh +33 -0
  149. package/hooks/simplify-ignore-test.sh +476 -0
  150. package/hooks/simplify-ignore.sh +352 -0
  151. package/package.json +31 -4
  152. package/plugin.json +5 -0
  153. package/rebrand/MAINTENANCE.md +51 -0
  154. package/rebrand/apply.cjs +121 -0
  155. package/rebrand/brand.json +9 -0
  156. package/rebrand/templates/README.md +178 -0
  157. package/rebrand/templates/codebuddy-setup.md +41 -0
  158. package/rebrand/templates/codex-setup.md +34 -0
  159. package/references/accessibility-checklist.md +160 -0
  160. package/references/definition-of-done.md +67 -0
  161. package/references/observability-checklist.md +92 -0
  162. package/references/orchestration-patterns.md +370 -0
  163. package/references/performance-checklist.md +236 -0
  164. package/references/security-checklist.md +248 -0
  165. package/references/testing-patterns.md +235 -0
  166. package/scripts/floor-guard-reference-test.js +291 -0
  167. package/scripts/lib/skill-lint-test.js +650 -0
  168. package/scripts/lib/skill-lint.js +584 -0
  169. package/scripts/run-evals-test.js +623 -0
  170. package/scripts/run-evals.js +638 -0
  171. package/scripts/validate-artifact-paths-test.js +179 -0
  172. package/scripts/validate-artifact-paths.js +128 -0
  173. package/scripts/validate-brand.cjs +36 -0
  174. package/scripts/validate-commands-test.js +216 -0
  175. package/scripts/validate-commands.js +222 -0
  176. package/scripts/validate-reference-links-test.js +495 -0
  177. package/scripts/validate-reference-links.js +187 -0
  178. package/scripts/validate-skills.js +69 -0
  179. package/scripts/validate-versions-test.js +32 -0
  180. package/scripts/validate-versions.js +35 -0
  181. package/skills/api-and-interface-design/SKILL.md +367 -0
  182. package/skills/browser-testing-with-devtools/SKILL.md +317 -0
  183. package/skills/ci-cd-and-automation/SKILL.md +390 -0
  184. package/skills/code-review-and-quality/SKILL.md +398 -0
  185. package/skills/code-simplification/SKILL.md +331 -0
  186. package/skills/constraint-driven-development/SKILL.md +311 -0
  187. package/skills/constraint-driven-development/references/floor-guard.md +182 -0
  188. package/skills/context-engineering/SKILL.md +353 -0
  189. package/skills/debugging-and-error-recovery/SKILL.md +300 -0
  190. package/skills/deprecation-and-migration/SKILL.md +247 -0
  191. package/skills/documentation-and-adrs/SKILL.md +288 -0
  192. package/skills/doubt-driven-development/SKILL.md +243 -0
  193. package/skills/frontend-ui-engineering/SKILL.md +340 -0
  194. package/skills/git-workflow-and-versioning/SKILL.md +355 -0
  195. package/skills/idea-refine/SKILL.md +178 -0
  196. package/skills/idea-refine/examples.md +238 -0
  197. package/skills/idea-refine/frameworks.md +99 -0
  198. package/skills/idea-refine/refinement-criteria.md +113 -0
  199. package/skills/idea-refine/scripts/idea-refine.sh +15 -0
  200. package/skills/incremental-implementation/SKILL.md +249 -0
  201. package/skills/interview-me/SKILL.md +235 -0
  202. package/skills/observability-and-instrumentation/SKILL.md +238 -0
  203. package/skills/performance-optimization/SKILL.md +267 -0
  204. package/skills/performance-optimization/references/optimization-patterns.md +250 -0
  205. package/skills/planning-and-task-breakdown/SKILL.md +257 -0
  206. package/skills/security-and-hardening/SKILL.md +216 -0
  207. package/skills/security-and-hardening/references/hardening-patterns.md +324 -0
  208. package/skills/shipping-and-launch/SKILL.md +330 -0
  209. package/skills/source-driven-development/SKILL.md +216 -0
  210. package/skills/spec-driven-development/SKILL.md +259 -0
  211. package/skills/test-driven-development/SKILL.md +398 -0
  212. package/skills/using-agent-skills/SKILL.md +192 -0
  213. package/tests/bundle.test.cjs +79 -0
@@ -0,0 +1,259 @@
1
+ # OpenCode Setup
2
+
3
+ This guide explains how to use i3 Composer Agent with OpenCode. The reusable assets are the markdown skills in the `skills/` directory; the root `AGENTS.md` file in this repository is repo-scoped and should not be copied into other projects.
4
+
5
+ ## Overview
6
+
7
+ OpenCode discovers skills from several locations. i3 Composer Agent provides two optional usage styles:
8
+
9
+ - **Agent-driven workflow:** skills are selected automatically via the built-in `skill` tool and a project-local `AGENTS.md` that you write for your own repository.
10
+ - **Command-driven workflow:** manually invoke lifecycle commands with `.opencode/commands/` (optional).
11
+
12
+ ## Installation
13
+
14
+ There are two ways to get the skills into your project:
15
+
16
+ 1. Install with the `skills` CLI (fastest).
17
+ 2. Prepare the plugin bundle and copy the skill directories manually.
18
+
19
+ After either step, create your own project-local `AGENTS.md` and, if you want them, copy the `.opencode/commands/*.md` files.
20
+
21
+ ### Option 1: Install with `npx skills`
22
+
23
+ The fastest path is the open [`skills` CLI](https://github.com/vercel-labs/skills):
24
+
25
+ ```bash
26
+ npx skills add /path/to/i3-composer-agent # install selected skills
27
+ npx skills add /path/to/i3-composer-agent --list # browse before installing
28
+ ```
29
+
30
+ Install a single skill:
31
+
32
+ ```bash
33
+ npx skills add /path/to/i3-composer-agent --skill spec-driven-development
34
+ ```
35
+
36
+ By default `npx skills` installs into a tool-specific directory (often `.claude/skills/` or a shared location). OpenCode will discover skills placed there because it reads `.claude/skills/<name>/SKILL.md` and the generic `.agents/skills/<name>/SKILL.md` paths.
37
+
38
+ If the skills land somewhere OpenCode does not scan, copy or symlink them into one of the discovery paths listed below, for example:
39
+
40
+ ```bash
41
+ mkdir -p .opencode/skills
42
+ cp -r .claude/skills/<skill-name> .opencode/skills/
43
+ ```
44
+
45
+ > **Note:** Per-skill installs copy only the skill directory itself. If a skill references shared files under `references/`, copy those into the installed skill directory or install the whole pack. See [upstream agent-skills #361](https://github.com/addyosmani/agent-skills/issues/361) for background.
46
+
47
+ ### Option 2: Prepare the plugin bundle
48
+
49
+ 1. Prepare the plugin bundle:
50
+
51
+ ```bash
52
+ npx @givolt/i3-composer-agent --extract --dir ./i3-composer-agent
53
+ ```
54
+
55
+ 2. Copy the desired skills into one of the OpenCode skill discovery paths.
56
+
57
+ #### Project-local installation
58
+
59
+ ```bash
60
+ mkdir -p .opencode/skills
61
+ cp -r /path/to/i3-composer-agent/skills/<skill-name> .opencode/skills/
62
+ ```
63
+
64
+ For example, to install `spec-driven-development` and `incremental-implementation`:
65
+
66
+ ```bash
67
+ mkdir -p .opencode/skills
68
+ cp -r /path/to/i3-composer-agent/skills/spec-driven-development .opencode/skills/
69
+ cp -r /path/to/i3-composer-agent/skills/incremental-implementation .opencode/skills/
70
+ ```
71
+
72
+ #### Global installation
73
+
74
+ ```bash
75
+ mkdir -p ~/.config/opencode/skills
76
+ cp -r /path/to/i3-composer-agent/skills/<skill-name> ~/.config/opencode/skills/
77
+ ```
78
+
79
+ #### Cross-compatible paths
80
+
81
+ OpenCode also discovers skills placed in Claude-compatible or generic agent paths:
82
+
83
+ - `.claude/skills/<name>/SKILL.md`
84
+ - `~/.claude/skills/<name>/SKILL.md`
85
+ - `.agents/skills/<name>/SKILL.md`
86
+ - `~/.agents/skills/<name>/SKILL.md`
87
+
88
+ If you already share skills across Claude Code and OpenCode, any of these locations work.
89
+
90
+ ### What to copy
91
+
92
+ Copy the directories under `skills/` (for example `skills/spec-driven-development/`). Each directory must contain a `SKILL.md` file. Do not copy the repository's root `AGENTS.md` or `CLAUDE.md`; those files configure development of this repository itself.
93
+
94
+ ## Project `AGENTS.md`
95
+
96
+ Create an `AGENTS.md` in **your own project** root. This is the system prompt that tells OpenCode when and how to invoke the installed skills. Unlike the repo-scoped `AGENTS.md` in `addyosmani/agent-skills`, this file belongs to your project and should be adapted to your stack.
97
+
98
+ Below is a template you can paste into your project's `AGENTS.md`:
99
+
100
+ ```markdown
101
+ # i3 Composer Agent (OpenCode)
102
+
103
+ This project uses skills installed under `.opencode/skills/` (or a compatible path).
104
+
105
+ ## Core Rules
106
+
107
+ - If a task matches a skill, invoke it with the `skill` tool before acting.
108
+ - Skills are located in `.opencode/skills/<skill-name>/SKILL.md`.
109
+ - Follow the skill workflow strictly; do not partially apply it.
110
+ - Never skip required steps such as spec, plan, or test when a skill demands them.
111
+
112
+ ## Intent → Skill Mapping
113
+
114
+ Map the user's intent to the matching skill automatically:
115
+
116
+ - Feature / new functionality → `spec-driven-development`, then `incremental-implementation` and `test-driven-development`
117
+ - Planning / breakdown → `planning-and-task-breakdown`
118
+ - Bug / failure / unexpected behavior → `debugging-and-error-recovery`
119
+ - Code review → `code-review-and-quality`
120
+ - Refactoring / simplification → `code-simplification`
121
+ - API or interface design → `api-and-interface-design`
122
+ - UI work → `frontend-ui-engineering`
123
+
124
+ ## Execution Model
125
+
126
+ For every request:
127
+
128
+ 1. Determine if any skill applies (even a small chance).
129
+ 2. Load the skill with `skill({ name: "<skill-name>" })`.
130
+ 3. Follow the skill workflow exactly.
131
+ 4. Only proceed to implementation once required steps are complete.
132
+ ```
133
+
134
+ Save this as `AGENTS.md` in your project root. OpenCode will load it automatically.
135
+
136
+ > **Note:** The root `AGENTS.md` inside the `addyosmani/agent-skills` repository is intended for contributors working on this repository and should not be copied into other projects. See [CONTRIBUTING.md](../CONTRIBUTING.md#repo-scoped-files).
137
+
138
+ ## How It Works
139
+
140
+ ### 1. Skill Discovery
141
+
142
+ OpenCode walks the following paths (project-local first, then global):
143
+
144
+ - `.opencode/skills/<name>/SKILL.md`
145
+ - `~/.config/opencode/skills/<name>/SKILL.md`
146
+ - `.claude/skills/<name>/SKILL.md`
147
+ - `~/.claude/skills/<name>/SKILL.md`
148
+ - `.agents/skills/<name>/SKILL.md`
149
+ - `~/.agents/skills/<name>/SKILL.md`
150
+
151
+ Each skill must contain a `SKILL.md` file with a valid `name` and `description` in its frontmatter.
152
+
153
+ ### 2. Automatic Skill Invocation
154
+
155
+ When your project's `AGENTS.md` instructs the agent to use skills, the agent evaluates every request and maps it to the appropriate skill.
156
+
157
+ Examples:
158
+
159
+ - "build a feature" → `incremental-implementation` + `test-driven-development`
160
+ - "design a system" → `spec-driven-development`
161
+ - "fix a bug" → `debugging-and-error-recovery`
162
+ - "review this code" → `code-review-and-quality`
163
+
164
+ ### 3. Lifecycle Mapping (Implicit Commands)
165
+
166
+ OpenCode does not require slash commands, but if you prefer them see the next section. In agent-driven mode the lifecycle is mapped implicitly:
167
+
168
+ - DEFINE → `spec-driven-development`
169
+ - PLAN → `planning-and-task-breakdown`
170
+ - BUILD → `incremental-implementation` + `test-driven-development`
171
+ - VERIFY → `debugging-and-error-recovery`
172
+ - REVIEW → `code-review-and-quality`
173
+ - SHIP → `shipping-and-launch`
174
+
175
+ ### Copy the optional slash commands
176
+
177
+ If you prefer explicit commands, copy the example command files from this repository into your project and adjust them to invoke the skills you installed:
178
+
179
+ ```bash
180
+ mkdir -p .opencode/commands
181
+ cp /path/to/i3-composer-agent/.opencode/commands/*.md .opencode/commands/
182
+ ```
183
+
184
+ > **Note:** The repository currently does not include `.opencode/commands/*.md` on `main`. You can create your own command files or watch PR #200, which proposes adding them. Once they exist, the pattern above applies.
185
+
186
+ A typical command file looks like:
187
+
188
+ ```markdown
189
+ ---
190
+ description: Break work into small verifiable tasks
191
+ ---
192
+
193
+ Invoke the planning-and-task-breakdown skill. Read the spec and create tasks with acceptance criteria.
194
+ ```
195
+
196
+ Save it as `.opencode/commands/plan.md` to enable `/plan` in OpenCode.
197
+
198
+ ## Usage Examples
199
+
200
+ ### Example 1: Feature Development
201
+
202
+ User:
203
+ ```
204
+ Add authentication to this app
205
+ ```
206
+
207
+ Agent behavior:
208
+ - Detects feature work
209
+ - Invokes `spec-driven-development`
210
+ - Produces a spec before writing code
211
+ - Moves to planning and implementation skills
212
+
213
+ ### Example 2: Bug Fix
214
+
215
+ User:
216
+ ```
217
+ This endpoint is returning 500 errors
218
+ ```
219
+
220
+ Agent behavior:
221
+ - Invokes `debugging-and-error-recovery`
222
+ - Reproduces → localizes → fixes → adds guards
223
+
224
+ ### Example 3: Code Review
225
+
226
+ User:
227
+ ```
228
+ Review this PR
229
+ ```
230
+
231
+ Agent behavior:
232
+ - Invokes `code-review-and-quality`
233
+ - Applies structured review (correctness, design, readability, etc.)
234
+
235
+ ## Agent Expectations
236
+
237
+ For OpenCode to work correctly, the agent should:
238
+
239
+ - Always check if a skill applies before acting
240
+ - Use the `skill` tool to load the skill when it applies
241
+ - Never skip required workflows (spec, plan, test, etc.)
242
+ - Not jump directly to implementation
243
+
244
+ These rules are enforced by your project's `AGENTS.md`, not by the copy of the skill itself.
245
+
246
+ ## Limitations
247
+
248
+ - Skill invocation depends on model compliance.
249
+ - OpenCode does not install skills automatically; copy or install the directories you need.
250
+ - If a skill references files under `references/`, you may need to copy those as well when installing manually.
251
+
252
+ ## Summary
253
+
254
+ 1. Install the skills you need, either with `npx skills add /path/to/i3-composer-agent` or by copying them from a clone of this repository into `.opencode/skills/` (project), `~/.config/opencode/skills/` (global), or a cross-compatible path such as `.claude/skills/` / `.agents/skills/`.
255
+ 2. Create your own project-local `AGENTS.md` with the rules and intent mapping above.
256
+ 3. OpenCode discovers the skills and your `AGENTS.md` guides the agent to invoke them.
257
+ 4. Optionally add `.opencode/commands/*.md` for explicit slash commands.
258
+
259
+ This keeps the reusable assets (skills) separate from the repository-specific configuration (the `addyosmani/agent-skills` root `AGENTS.md`).
@@ -0,0 +1,7 @@
1
+ # Other hosts
2
+
3
+ These hosts install the pack but are not in the README's install section, because no maintainer has run the current release on them. Each entry is one line: the host and its install command. To add one, see [Adding a Host Guide](../CONTRIBUTING.md#adding-a-host-guide).
4
+
5
+ Skills are plain `SKILL.md` folders, so any agent that reads the i3 Composer Agent layout can load them. See [getting-started.md](getting-started.md).
6
+
7
+ - **Oh My Pi**: `omp plugin marketplace add /path/to/i3-composer-agent`, then `omp plugin install i3-composer-agent@i3-composer-agent`
@@ -0,0 +1,203 @@
1
+ # Skill Anatomy
2
+
3
+ This document describes the structure and format of i3-composer-agent skill files. Use this as a guide when contributing new skills or understanding existing ones.
4
+
5
+ ## File Location
6
+
7
+ Every skill lives in its own directory under `skills/`:
8
+
9
+ ```
10
+ skills/
11
+ skill-name/
12
+ SKILL.md # Required: The skill definition
13
+ scripts/ # Optional: Runnable helpers used by the skill workflow
14
+ references/ # Optional: Skill-specific reference documentation
15
+ supporting-file.md # Optional: Reference material loaded on demand
16
+ ```
17
+
18
+ `SKILL.md` is the only required file. Add `scripts/` or `references/` only when the skill actually needs them, and omit them entirely for simpler skills.
19
+
20
+ ## SKILL.md Format
21
+
22
+ ### Frontmatter (Required)
23
+
24
+ ```yaml
25
+ ---
26
+ name: skill-name-with-hyphens
27
+ description: Guides agents through [task/workflow]. Use when [specific trigger conditions].
28
+ ---
29
+ ```
30
+
31
+ **Rules:**
32
+ - `name`: Lowercase, hyphen-separated. Must match the directory name.
33
+ - `description`: Start with what the skill does in third person, then include one or more clear "Use when" trigger conditions. Include both *what* and *when*. Maximum 1024 characters.
34
+ - Top-level keys are limited to the [Agent Skills specification](https://agentskills.io) fields: `name`, `description`, `license`, `compatibility`, `metadata`, and `allowed-tools`. Vendor or runtime controls such as `model`, `tools`, `max_turns`, or `context` go under `metadata` or in a per-agent adapter file; see [docs/advanced-per-agent-configuration.md](advanced-per-agent-configuration.md). The validator rejects any other top-level key.
35
+
36
+ Published names are compatibility identifiers. In particular,
37
+ `browser-testing-with-devtools` is the stable upstream name because other
38
+ skills refer to it directly. A downstream catalog may rename it, but that
39
+ catalog owns the alias or migration mapping; downstream-only aliases are not
40
+ maintained in this repository.
41
+
42
+ **Why this matters:** Agents discover skills by reading descriptions. The description is injected into the system prompt, so it must tell the agent both what the skill provides and when to activate it. Do not summarize the workflow — if the description contains process steps, the agent may follow the summary instead of reading the full skill.
43
+
44
+ ### Standard Sections (Recommended Pattern)
45
+
46
+ The frontmatter contract above is required. The section layout below is a recommended pattern, not a rigid template: equivalent headings are acceptable when they serve the same purpose clearly.
47
+
48
+ ```markdown
49
+ # Skill Title
50
+
51
+ ## Overview
52
+ One-two sentences explaining what this skill does and why it matters.
53
+
54
+ ## When to Use
55
+ - Bullet list of triggering conditions (symptoms, task types)
56
+ - When NOT to use (exclusions)
57
+
58
+ ## [Core Process / The Workflow / Steps]
59
+ The main workflow, broken into numbered steps or phases.
60
+ Include code examples where they help.
61
+ Use flowcharts (ASCII) where decision points exist.
62
+
63
+ ## [Specific Techniques / Patterns]
64
+ Detailed guidance for specific scenarios.
65
+ Code examples, templates, configuration.
66
+
67
+ ## Common Rationalizations
68
+ | Rationalization | Reality |
69
+ |---|---|
70
+ | Excuse agents use to skip steps | Why the excuse is wrong |
71
+
72
+ ## Red Flags
73
+ - Behavioral patterns indicating the skill is being violated
74
+ - Things to watch for during review
75
+
76
+ ## Verification
77
+ After completing the skill's process, confirm:
78
+ - [ ] Checklist of exit criteria
79
+ - [ ] Evidence requirements
80
+ ```
81
+
82
+ ## Section Purposes
83
+
84
+ ### Overview
85
+ The "elevator pitch" for the skill. Should answer: What does this skill do, and why should an agent follow it?
86
+
87
+ ### When to Use
88
+ Helps agents and humans decide if this skill applies to the current task. Include both positive triggers ("Use when X") and negative exclusions ("NOT for Y").
89
+
90
+ ### Core Process
91
+ The heart of the skill. This is the step-by-step workflow the agent follows. Must be specific and actionable — not vague advice.
92
+
93
+ **Good:** "Run `npm test` and verify all tests pass"
94
+ **Bad:** "Make sure the tests work"
95
+
96
+ ### Common Rationalizations
97
+ The most distinctive feature of well-crafted skills. These are excuses agents use to skip important steps, paired with rebuttals. They prevent the agent from rationalizing its way out of following the process.
98
+
99
+ Think of every time an agent has said "I'll add tests later" or "This is simple enough to skip the spec" — those go here with a factual counter-argument.
100
+
101
+ ### Red Flags
102
+ Observable signs that the skill is being violated. Useful during code review and self-monitoring.
103
+
104
+ ### Verification
105
+ The exit criteria. A checklist the agent uses to confirm the skill's process is complete. Every checkbox should be verifiable with evidence (test output, build result, screenshot, etc.).
106
+
107
+ ## Supporting Files
108
+
109
+ Create supporting files only when:
110
+ - Reference material exceeds 100 lines (keep the main SKILL.md focused)
111
+ - Code tools or scripts are needed
112
+ - Checklists are long enough to justify separate files
113
+
114
+ Keep patterns and principles inline when under 50 lines.
115
+
116
+ If a skill does not need runnable helpers, do not create an empty `scripts/` directory just to mirror other skills. Empty directories add noise without changing how the skill works.
117
+
118
+ ## Shared References
119
+
120
+ Checklists used by more than one skill — testing, security, performance, accessibility, definition-of-done — live in `references/` at the repository root, deliberately *not* inside any skill directory.
121
+
122
+ This is a pack-level design choice. The Agent Skills spec describes a skill as a self-contained directory, but several skills here point at the same checklists. Colocating those would force one of two options: copy the checklist into every skill that uses it, or pick one skill to "own" it and have the others reach into that directory. Both drift over time. A single repo-root copy stays the source of truth.
123
+
124
+ The tradeoff is portability: a whole-repo install (such as the Claude Code marketplace plugin) carries `references/` along, but a per-skill install that copies only `skills/<name>/` leaves the repo-root sibling behind, and those links resolve to nothing. That gap is tracked in [upstream agent-skills #361](https://github.com/addyosmani/agent-skills/issues/361).
125
+
126
+ Current convention: material used by exactly one skill is a supporting file inside that skill's directory; material shared across skills goes in `references/`.
127
+
128
+ ## Context Efficiency
129
+
130
+ Skills load on demand: only the skill name and description sit in context at startup. The full `SKILL.md` loads only when an agent decides the skill is relevant. To keep that load cheap:
131
+
132
+ - **Keep `SKILL.md` under 500 lines.** Move detailed reference material into supporting files.
133
+ - **Write specific descriptions.** A precise description helps the agent activate the skill at the right moment and skip it otherwise.
134
+ - **Use progressive disclosure.** Reference supporting files that are read only when the workflow reaches them.
135
+ - **Prefer scripts over inline code.** Executing a script consumes no context; only its output does. Inline code blocks are paid for on every load.
136
+ - **Keep file references one level deep.** Link directly from `SKILL.md` to supporting files rather than chaining through intermediate documents.
137
+
138
+ ## Script Requirements
139
+
140
+ When a skill ships runnable helpers under `scripts/`, each script follows these conventions:
141
+
142
+ - Use a `#!/bin/bash` shebang.
143
+ - Use `set -e` for fail-fast behavior.
144
+ - Write status messages to stderr: `echo "Message" >&2`.
145
+ - Write machine-readable output (JSON) to stdout.
146
+ - Include a cleanup trap for temporary files.
147
+ - Reference the script path as `skills/<skill-name>/scripts/<script>.sh` (repo-relative).
148
+
149
+ ## Writing Principles
150
+
151
+ 1. **Process over knowledge.** Skills are workflows, not reference docs. Steps, not facts.
152
+ 2. **Specific over general.** "Run `npm test`" beats "verify the tests".
153
+ 3. **Evidence over assumption.** Every verification checkbox requires proof.
154
+ 4. **Anti-rationalization.** Every skip-worthy step needs a counter-argument in the rationalizations table.
155
+ 5. **Progressive disclosure.** Main SKILL.md is the entry point. Supporting files are loaded only when needed.
156
+ 6. **Token-conscious.** Every section must justify its inclusion. If removing it wouldn't change agent behavior, remove it.
157
+ 7. **Model-neutral.** Write the procedure, not the workaround. See [Write the Procedure, Not the Workaround](#write-the-procedure-not-the-workaround).
158
+
159
+ ## Write the Procedure, Not the Workaround
160
+
161
+ Skills in this pack run on many agents and model generations. A step that exists because one model gets a specific call wrong is a liability on every other model: it constrains agents that would have solved the task directly, and it spends turns that stronger models need for the actual work. Cross-model transfer measurements ([WikiSkill, arXiv:2608.27454](https://arxiv.org/abs/2608.27454)) show skills authored against one model's execution failures can leave a stronger model performing *worse than with no skill at all*.
162
+
163
+ **The rule:** if a step cannot be justified without naming a model, a model version, or one agent's private tool name, it belongs in an issue, not in a skill. Describe the capability ("run the focused test command", "write the file"), not the mechanism one runtime happens to expose (`run_command`, `write_to_file`).
164
+
165
+ Two smells to check for before proposing skill content:
166
+
167
+ - **Over-specified mechanics.** Prescribing an exact command form or serialization detail where stating the goal alone would do. If the justification is "model X gets this wrong otherwise", it's a workaround, not a procedure.
168
+ - **Fragmented diagnostics.** A multi-step inspection sequence where one step would confirm the same thing. Every extra step spends turns, and turn budget is finite.
169
+
170
+ This is about skill *content*; the portability of `references/` *paths* is a separate concern (see [Shared References](#shared-references)).
171
+
172
+ ## Naming Conventions
173
+
174
+ - Skill directories: `lowercase-hyphen-separated`
175
+ - Skill files: `SKILL.md` (always uppercase)
176
+ - Supporting files: `lowercase-hyphen-separated.md`
177
+ - Shared references: stored in the root `references/` directory, not inside skill directories (see [Shared References](#shared-references) for why).
178
+ - Skill-specific references: a single supporting doc can stay as a loose file in the skill directory (the `Supporting files` entry above); when several related docs travel with the skill, the emerging convention for self-contained, distributable skills is to group them in a `references/` directory inside the skill directory, so the skill carries its own supporting docs.
179
+
180
+ ## Cross-Skill References
181
+
182
+ Reference other skills by name:
183
+
184
+ ```markdown
185
+ Follow the `test-driven-development` skill for writing tests.
186
+ If the build breaks, use the `debugging-and-error-recovery` skill.
187
+ ```
188
+
189
+ Don't duplicate content between skills — reference and link instead.
190
+
191
+ ## Required vs Recommended
192
+
193
+ Required:
194
+
195
+ - A `skills/<skill-name>/SKILL.md` file
196
+ - Valid YAML frontmatter with `name` and `description`
197
+ - A description that includes both what the skill does and when to use it
198
+
199
+ Recommended:
200
+
201
+ - The standard section flow shown above
202
+ - Equivalent headings such as `How It Works`, `Core Process`, or `Workflow` when they read more naturally for the skill
203
+ - Supporting files only when they keep the main `SKILL.md` focused
@@ -0,0 +1,48 @@
1
+ # Using i3-composer-agent with Windsurf
2
+
3
+ ## Setup
4
+
5
+ ### Project Rules
6
+
7
+ Windsurf uses `.windsurfrules` for project-specific agent instructions:
8
+
9
+ ```bash
10
+ # Create a combined rules file from your most important skills
11
+ cat /path/to/i3-composer-agent/skills/test-driven-development/SKILL.md > .windsurfrules
12
+ echo "\n---\n" >> .windsurfrules
13
+ cat /path/to/i3-composer-agent/skills/incremental-implementation/SKILL.md >> .windsurfrules
14
+ echo "\n---\n" >> .windsurfrules
15
+ cat /path/to/i3-composer-agent/skills/code-review-and-quality/SKILL.md >> .windsurfrules
16
+ ```
17
+
18
+ ### Global Rules
19
+
20
+ For skills you want across all projects, add them to Windsurf's global rules:
21
+
22
+ 1. Open Windsurf → Settings → AI → Global Rules
23
+ 2. Paste the content of your most-used skills
24
+
25
+ ## Recommended Configuration
26
+
27
+ Keep `.windsurfrules` focused on 2-3 essential skills to stay within context limits:
28
+
29
+ ```
30
+ # .windsurfrules
31
+ # Essential i3-composer-agent for this project
32
+
33
+ [Paste test-driven-development SKILL.md]
34
+
35
+ ---
36
+
37
+ [Paste incremental-implementation SKILL.md]
38
+
39
+ ---
40
+
41
+ [Paste code-review-and-quality SKILL.md]
42
+ ```
43
+
44
+ ## Usage Tips
45
+
46
+ 1. **Be selective** — Windsurf's context is limited. Choose skills that address your biggest quality gaps.
47
+ 2. **Reference in conversation** — Paste additional skill content into the chat when working on specific phases (e.g., paste `security-and-hardening` when building auth).
48
+ 3. **Use references as checklists** — Paste `references/security-checklist.md` and ask Windsurf to verify each item.
@@ -0,0 +1,101 @@
1
+ # Skill Evals
2
+
3
+ How this repo measures whether its skills actually work: that they **trigger** when they should, **stay distinct** from each other, and **change agent behavior** the way each skill promises.
4
+
5
+ ## Prior art (and what we adopted)
6
+
7
+ There is no single settled community standard for evaluating `SKILL.md` skills, but two approaches lead:
8
+
9
+ - **Anthropic's skill-creator v2** defines a per-skill `evals.json` (prompt + `expectations[]`, graded from the transcript) plus trigger-accuracy testing of descriptions against sample prompts. We adopt its [`evals.json` schema](https://github.com/anthropics/skills/tree/main/skills/skill-creator) for our behavioral tier and add one optional `kind` field to select the artifact being graded.
10
+ - **Superpowers** (obra) tests skills with bash + `claude -p` + prompt fixtures and grader scripts. Our behavioral runner follows the same headless-`claude` pattern, with the grading rubric drawn from `expectations[]`.
11
+
12
+ What neither provides is a **deterministic, CI-safe** check for a multi-skill *catalog* — does each skill's description carry the vocabulary users actually say, and do two skills' descriptions collide? That's Tier 2 below, and it's this repo's addition.
13
+
14
+ ## The three tiers
15
+
16
+ | Tier | What it checks | Runs | Cost |
17
+ |---|---|---|---|
18
+ | 1. Structural | Frontmatter, naming, required sections, command parity | CI (`validate-skills.js`, `validate-commands.js`) | Free |
19
+ | 2. Trigger & routing | Positive prompts rank their skill top-k; negative prompts don't; no two descriptions near-collide | CI (`run-evals.js`) | Free |
20
+ | 3. Behavioral | An agent following the skill satisfies its `expectations[]` | On demand (`run-evals.js --behavioral`) | Tokens |
21
+
22
+ Tier 2 is a **lexical approximation** of routing (stemmed TF-IDF over descriptions). It cannot judge semantics — that's Tier 3's job — but it catches the two failure modes that dominate real trigger bugs: a description missing the vocabulary users say (false negative), and an over-broad description that outranks the right skill (false positive). A Tier-2 failure usually means *fix the description*, not the eval.
23
+
24
+ ## Running
25
+
26
+ ```bash
27
+ # Tier 2 — deterministic, runs in CI
28
+ node scripts/run-evals.js
29
+ node scripts/run-evals.js --min-rank1 95 # enforce the current routing floor
30
+
31
+ # Tier 3 — behavioral, runs each eval through headless claude, then grades it
32
+ node scripts/run-evals.js --behavioral test-driven-development # spends tokens
33
+ node scripts/run-evals.js --behavioral test-driven-development --dry-run # prints the plan only
34
+ ```
35
+
36
+ Tier 3 supports two behavioral artifact kinds. `execution` is the default: each eval runs in a throwaway git repository, real project inputs from `files[]` are materialized out of `evals/fixtures/` and committed as the baseline, and the grader judges the full `--output-format stream-json --verbose` execution trace, including tool calls. `dialogue` is reserved for skills whose deliverable is the conversation itself; it needs no fixture, and the grader judges the assistant's conversational turns without requiring file edits or commands. Claiming `dialogue` is a human-reviewed exemption, not a general escape hatch for execution skills.
37
+
38
+ The executor runs with an explicit permission mode (`--permission-mode acceptEdits` plus a pre-approved tool list) so execution evals can genuinely edit files, run commands, inspect diffs, and make commits rather than being denied and narrating instead. Traces are fenced as untrusted data in the grader prompt and piped to the grader over stdin (they can be megabytes; argv would hit the OS argument-size limit), executor and grader calls carry timeouts, and grader output is validated as JSON before being written to `evals/results/` (gitignored) in skill-creator's `grading.json` shape. Discipline skills also include pressure cases for time pressure, sunk cost, and authority pressure; these verify that the workflow still holds when the prompt argues for skipping it.
39
+
40
+ ## Plugin evals (Claude Code)
41
+
42
+ `claude plugin eval` (Claude Code 2.1.269 or later) loads the whole plugin, every skill at once, runs the cases under `evals/plugin/`, and scores each case with and without the plugin. It complements Tier 2 rather than replacing it: Tier 2 checks that a description carries the vocabulary users say; this checks that Claude Code's own router picks the skill on a natural prompt, and what the skill adds to the reply (the `Δ` column).
43
+
44
+ ```bash
45
+ claude plugin eval . --no-publish # every case, both arms, 3 runs each
46
+ claude plugin eval . --case code-review-fires --runs 1 --ablation none # one cheap iteration on one case
47
+ ```
48
+
49
+ A case is a directory holding `prompt.md` (frontmatter: turn and tool limits; body: the prompt, sent verbatim) and one grader per file under `graders/`. Reports land in `evals/plugin/results/<timestamp>/`, already gitignored. Every run and every `llm` grader is a real model call on your account, so this runs on demand and never in CI, like Tier 3.
50
+
51
+ Two rules keep it honest. The manifest's `experimental.evals` key scopes the scan to `evals/plugin/`, so a fixture elsewhere under `evals/` is never read as a case. And a `tool_used: Skill` grader only says whether the skill fired; in a two-arm run it is excluded from the score, so pair it with a grader on the reply itself. `code-review-fires` shows the pattern: the fired indicator, a free `regex` grader that looks for the skill's severity taxonomy (Critical, Required, Nit, Optional, Consider, FYI) used as a heading or as a label, and one `llm` judge on the planted off-by-one. `code-review-stays-quiet` is the precision check: the review skill must not fire on a test-first request, and its `Δ` is expected to be 0; a second, unscored indicator records whether test-driven-development fires instead.
52
+
53
+ What the first runs taught (Claude Code 2.1.278, claude-opus-5). Skill invocation is stochastic: the review skill fired in 5 of 7 runs on the phrasing the case uses, and test-driven-development fired in 2 of 7 runs on the test-first prompt, so read `Δ` and the report rather than the exit code, or pass `--threshold 0.8` as the CI example in the docs does. In one run the review skill did not fire and the reply still used its severity taxonomy as headings, which no baseline run did in nine; the loaded skill descriptions may shape the reply even without an invocation. Phrasing matters, and the description is the lever. With the original description, "Review this diff before I merge it", "Can you do a proper code review of this change before I merge it?" and "Review this pull request for me before it goes into main" rarely fired the skill; the model reviewed the diff on its own, competently but without the verdict, the severity tiers or the five-axis pass. Describing what the skill adds did not help, and neither did naming diffs and pull requests on their own; what made the difference was saying that the skill applies even when the diff is pasted inline, which is the case the model was treating as "I can just do this myself". On claude-opus-5-5 with the model pinned, that one clause took the four review phrasings from 7 of 27 fires to 21 of 27, left the nine adjacent must-not-fire prompts at 0 of 27 both ways, and moved the plainest phrasing from 0 of 9 to 3 of 9, so it is better, not solved. `code-review-stays-quiet-on-commit-message` guards that clause: a pasted diff with a commit-message request must not fire the review skill. Two practical rules from the same day: pin `--model` and record the Claude Code version whenever you report numbers, because the CLI updates itself and the default model changed twice between morning and evening; and give a case a turn budget of 10 or more, since the model may reach a skill through its slash command (`agent-skills:review`, then `code-review-and-quality`), which costs two turns.
54
+
55
+ ## Eval case format
56
+
57
+ One file per skill: `evals/cases/<skill-name>.json`.
58
+
59
+ ```json
60
+ {
61
+ "skill_name": "test-driven-development",
62
+ "trigger": {
63
+ "positive": [
64
+ { "prompt": "Write a failing test for this bug before fixing it", "top_k": 3 }
65
+ ],
66
+ "negative": [
67
+ { "prompt": "Update the architecture diagram in the docs", "owner": "documentation-and-adrs" }
68
+ ]
69
+ },
70
+ "evals": [
71
+ {
72
+ "id": 1,
73
+ "kind": "execution",
74
+ "prompt": "Finance filed the reconciliation bug written up in BUG.md. Fix it.",
75
+ "expected_output": "A failing reproduction test for the lost-cent case, a fix preserving both README invariants (exact sum, earliest-shares fairness), the fairness invariant covered by its own test, full suite passing",
76
+ "files": [
77
+ "test-driven-development"
78
+ ],
79
+ "expectations": [
80
+ "A test reproducing the lost-cent case from BUG.md is added and shown failing before src/split.js is modified",
81
+ "The final implementation satisfies the full README fairness invariant (leftover cents go to the earliest shares): splitCents(10000, 3) returns [3334, 3333, 3333] as BUG.md expects and splitCents(100, 7) returns [15, 15, 14, 14, 14, 14, 14] as the README example shows; dumping the whole remainder on a single share would violate both",
82
+ "The fairness invariant from the README has its own test case in the suite on an input with remainder of at least 2 (such as splitCents(100, 7)), where dumping the whole remainder on one share would fail it, beyond the reported lost-cent case",
83
+ "The full suite is run with the repository's own command after the fix"
84
+ ]
85
+ }
86
+ ]
87
+ }
88
+ ```
89
+
90
+ - `evals[]` uses skill-creator's core schema (`id`, `prompt`, `expected_output`, optional `files[]`, `expectations[]`) plus this repository's optional `kind`. `kind` must be `execution` or `dialogue` and defaults to `execution` for compatibility. Execution evals require non-empty `files[]`; paths are relative to `evals/fixtures/` and may name a file or project directory. Dialogue evals may omit `files[]` because the transcript is the artifact. Expectations are verifiable statements a grader checks against the relevant artifact — behaviors, not phrasings.
91
+ - `trigger` is this repo's extension. `positive` prompts are realistic user asks that should route here (`top_k` defaults to 3; tighten to 1 for a skill's signature ask). `negative` prompts belong to a *different* skill; this skill must not rank first for them. Declare that skill in `owner` where you can: the runner then asserts the owner **outranks** this skill, turning the negative into a real pairwise routing test instead of one that can pass vacuously when the prompt matches nothing.
92
+
93
+ **Writing good trigger prompts:** paraphrase how users actually talk; don't copy the description (that's gaming the eval). If a realistic prompt can't rank because the description lacks its vocabulary, that is a real finding — improve the description.
94
+
95
+ ## Adding a skill
96
+
97
+ Every skill ships with an eval file. When you add `skills/<name>/`, add `evals/cases/<name>.json` with at least 3 positive triggers, 2 negative triggers, and 1 behavioral eval. Execution evals must be backed by `evals/fixtures/<name>/`; use `kind: "dialogue"` only when the skill's deliverable is genuinely the conversation itself. Missing case files, incomplete case counts, unknown kinds, invalid fixture paths, and absent required fixtures are CI errors.
98
+
99
+ ## Metrics to watch
100
+
101
+ The Tier-2 run prints a **trigger rank-1 rate** (share of positive prompts that rank their skill first, not merely top-k). CI runs with `--min-rank1 95`, leaving useful headroom below the checked-in 100% baseline so an unrelated description edit does not immediately turn CI red. Raise the floor as routing improves; never lower it to make a regression pass. Falling numbers mean descriptions are drifting toward each other. The collision check errors at ≥75% pairwise description similarity and warns at ≥50%. When these evals surface a description-vocabulary gap (see [#351](https://github.com/addyosmani/agent-skills/issues/351) for the original examples), fix the description, not the prompt.