@olegkoval/agent-skills 1.6.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.kiro/steering/add-to-my-skills.md +78 -0
  3. package/.kiro/steering/ai-tools-setup.md +263 -0
  4. package/.kiro/steering/changelog-generator.md +106 -0
  5. package/.kiro/steering/cloudflare-block-countries.md +167 -0
  6. package/.kiro/steering/docs-index-keeper.md +53 -0
  7. package/.kiro/steering/fill-music-player.md +101 -0
  8. package/.kiro/steering/gallery.md +228 -0
  9. package/.kiro/steering/gh-cli.md +2190 -0
  10. package/.kiro/steering/git-commit.md +125 -0
  11. package/.kiro/steering/open-source-publisher.md +427 -0
  12. package/.kiro/steering/product-builder.md +213 -0
  13. package/.kiro/steering/promptctl.md +81 -0
  14. package/.kiro/steering/search-console-indexing-audit.md +57 -0
  15. package/.kiro/steering/semantic-release-beta.md +48 -0
  16. package/.kiro/steering/starter-rules.md +62 -0
  17. package/.kiro/steering/viral-launch.md +92 -0
  18. package/.windsurf/rules/add-to-my-skills.md +77 -0
  19. package/.windsurf/rules/ai-tools-setup.md +262 -0
  20. package/.windsurf/rules/changelog-generator.md +105 -0
  21. package/.windsurf/rules/cloudflare-block-countries.md +166 -0
  22. package/.windsurf/rules/docs-index-keeper.md +52 -0
  23. package/.windsurf/rules/fill-music-player.md +100 -0
  24. package/.windsurf/rules/gallery.md +227 -0
  25. package/.windsurf/rules/gh-cli.md +2189 -0
  26. package/.windsurf/rules/git-commit.md +124 -0
  27. package/.windsurf/rules/open-source-publisher.md +426 -0
  28. package/.windsurf/rules/product-builder.md +212 -0
  29. package/.windsurf/rules/promptctl.md +80 -0
  30. package/.windsurf/rules/search-console-indexing-audit.md +56 -0
  31. package/.windsurf/rules/semantic-release-beta.md +47 -0
  32. package/.windsurf/rules/starter-rules.md +61 -0
  33. package/.windsurf/rules/viral-launch.md +91 -0
  34. package/README.md +67 -14
  35. package/catalog/skills.json +48 -16
  36. package/docs/skill-anatomy.md +10 -6
  37. package/package.json +3 -1
  38. package/packages/marketing/search-console-indexing-audit/SKILL.md +3 -0
  39. package/packages/marketing/search-console-indexing-audit/adapters/claude/skills/search-console-indexing-audit/SKILL.md +3 -0
  40. package/packages/marketing/search-console-indexing-audit/adapters/cursor/plugin.json +1 -1
  41. package/packages/marketing/search-console-indexing-audit/adapters/cursor/skills/search-console-indexing-audit/SKILL.md +3 -0
  42. package/packages/marketing/search-console-indexing-audit/adapters/kiro/steering/search-console-indexing-audit.md +57 -0
  43. package/packages/marketing/search-console-indexing-audit/adapters/windsurf/rules/search-console-indexing-audit.md +56 -0
  44. package/packages/marketing/viral-launch/SKILL.md +3 -1
  45. package/packages/marketing/viral-launch/adapters/claude/skills/viral-launch/SKILL.md +3 -1
  46. package/packages/marketing/viral-launch/adapters/cursor/skills/viral-launch/SKILL.md +3 -1
  47. package/packages/marketing/viral-launch/adapters/kiro/steering/viral-launch.md +92 -0
  48. package/packages/marketing/viral-launch/adapters/windsurf/rules/viral-launch.md +91 -0
  49. package/packages/music/fill-music-player/SKILL.md +2 -1
  50. package/packages/music/fill-music-player/adapters/claude/skills/fill-music-player/SKILL.md +2 -1
  51. package/packages/music/fill-music-player/adapters/cursor/plugin.json +1 -1
  52. package/packages/music/fill-music-player/adapters/cursor/skills/fill-music-player/SKILL.md +2 -1
  53. package/packages/music/fill-music-player/adapters/kiro/steering/fill-music-player.md +101 -0
  54. package/packages/music/fill-music-player/adapters/windsurf/rules/fill-music-player.md +100 -0
  55. package/packages/photography/gallery/SKILL.md +3 -1
  56. package/packages/photography/gallery/adapters/claude/skills/gallery/SKILL.md +3 -1
  57. package/packages/photography/gallery/adapters/cursor/skills/gallery/SKILL.md +3 -1
  58. package/packages/photography/gallery/adapters/kiro/steering/gallery.md +228 -0
  59. package/packages/photography/gallery/adapters/windsurf/rules/gallery.md +227 -0
  60. package/packages/software-development/add-to-my-skills/SKILL.md +2 -1
  61. package/packages/software-development/add-to-my-skills/adapters/claude/skills/add-to-my-skills/SKILL.md +2 -1
  62. package/packages/software-development/add-to-my-skills/adapters/cursor/skills/add-to-my-skills/SKILL.md +2 -1
  63. package/packages/software-development/add-to-my-skills/adapters/kiro/steering/add-to-my-skills.md +78 -0
  64. package/packages/software-development/add-to-my-skills/adapters/windsurf/rules/add-to-my-skills.md +77 -0
  65. package/packages/software-development/ai-tools-setup/adapters/kiro/steering/ai-tools-setup.md +263 -0
  66. package/packages/software-development/ai-tools-setup/adapters/windsurf/rules/ai-tools-setup.md +262 -0
  67. package/packages/software-development/changelog-generator/SKILL.md +3 -1
  68. package/packages/software-development/changelog-generator/adapters/claude/skills/changelog-generator/SKILL.md +3 -1
  69. package/packages/software-development/changelog-generator/adapters/cursor/skills/changelog-generator/SKILL.md +3 -1
  70. package/packages/software-development/changelog-generator/adapters/kiro/steering/changelog-generator.md +106 -0
  71. package/packages/software-development/changelog-generator/adapters/windsurf/rules/changelog-generator.md +105 -0
  72. package/packages/software-development/cloudflare-block-countries/SKILL.md +1 -1
  73. package/packages/software-development/cloudflare-block-countries/adapters/claude/skills/cloudflare-block-countries/SKILL.md +1 -1
  74. package/packages/software-development/cloudflare-block-countries/adapters/cursor/skills/cloudflare-block-countries/SKILL.md +1 -1
  75. package/packages/software-development/cloudflare-block-countries/adapters/kiro/steering/cloudflare-block-countries.md +167 -0
  76. package/packages/software-development/cloudflare-block-countries/adapters/windsurf/rules/cloudflare-block-countries.md +166 -0
  77. package/packages/software-development/docs-index-keeper/SKILL.md +2 -1
  78. package/packages/software-development/docs-index-keeper/adapters/claude/skills/docs-index-keeper/SKILL.md +2 -1
  79. package/packages/software-development/docs-index-keeper/adapters/cursor/plugin.json +1 -1
  80. package/packages/software-development/docs-index-keeper/adapters/cursor/skills/docs-index-keeper/SKILL.md +2 -1
  81. package/packages/software-development/docs-index-keeper/adapters/kiro/steering/docs-index-keeper.md +53 -0
  82. package/packages/software-development/docs-index-keeper/adapters/windsurf/rules/docs-index-keeper.md +52 -0
  83. package/packages/software-development/gh-cli/SKILL.md +3 -1
  84. package/packages/software-development/gh-cli/adapters/claude/skills/gh-cli/SKILL.md +3 -1
  85. package/packages/software-development/gh-cli/adapters/cursor/skills/gh-cli/SKILL.md +3 -1
  86. package/packages/software-development/gh-cli/adapters/kiro/steering/gh-cli.md +2190 -0
  87. package/packages/software-development/gh-cli/adapters/windsurf/rules/gh-cli.md +2189 -0
  88. package/packages/software-development/git-commit/SKILL.md +1 -1
  89. package/packages/software-development/git-commit/adapters/claude/skills/git-commit/SKILL.md +1 -1
  90. package/packages/software-development/git-commit/adapters/cursor/skills/git-commit/SKILL.md +1 -1
  91. package/packages/software-development/git-commit/adapters/kiro/steering/git-commit.md +125 -0
  92. package/packages/software-development/git-commit/adapters/windsurf/rules/git-commit.md +124 -0
  93. package/packages/software-development/open-source-publisher/SKILL.md +2 -1
  94. package/packages/software-development/open-source-publisher/adapters/claude/skills/open-source-publisher/SKILL.md +2 -1
  95. package/packages/software-development/open-source-publisher/adapters/cursor/skills/open-source-publisher/SKILL.md +2 -1
  96. package/packages/software-development/open-source-publisher/adapters/kiro/steering/open-source-publisher.md +427 -0
  97. package/packages/software-development/open-source-publisher/adapters/windsurf/rules/open-source-publisher.md +426 -0
  98. package/packages/software-development/product-builder/SKILL.md +2 -1
  99. package/packages/software-development/product-builder/adapters/claude/skills/product-builder/SKILL.md +2 -1
  100. package/packages/software-development/product-builder/adapters/cursor/plugin.json +1 -1
  101. package/packages/software-development/product-builder/adapters/cursor/skills/product-builder/SKILL.md +2 -1
  102. package/packages/software-development/product-builder/adapters/kiro/steering/product-builder.md +213 -0
  103. package/packages/software-development/product-builder/adapters/windsurf/rules/product-builder.md +212 -0
  104. package/packages/software-development/promptctl/SKILL.md +3 -1
  105. package/packages/software-development/promptctl/adapters/claude/skills/promptctl/SKILL.md +3 -1
  106. package/packages/software-development/promptctl/adapters/cursor/skills/promptctl/SKILL.md +3 -1
  107. package/packages/software-development/promptctl/adapters/kiro/steering/promptctl.md +81 -0
  108. package/packages/software-development/promptctl/adapters/windsurf/rules/promptctl.md +80 -0
  109. package/packages/software-development/semantic-release-beta/SKILL.md +3 -1
  110. package/packages/software-development/semantic-release-beta/adapters/claude/skills/semantic-release-beta/SKILL.md +3 -1
  111. package/packages/software-development/semantic-release-beta/adapters/cursor/skills/semantic-release-beta/SKILL.md +3 -1
  112. package/packages/software-development/semantic-release-beta/adapters/kiro/steering/semantic-release-beta.md +48 -0
  113. package/packages/software-development/semantic-release-beta/adapters/windsurf/rules/semantic-release-beta.md +47 -0
  114. package/packages/software-development/starter-rules/SKILL.md +2 -1
  115. package/packages/software-development/starter-rules/adapters/claude/skills/starter-rules/SKILL.md +2 -1
  116. package/packages/software-development/starter-rules/adapters/cursor/plugin.json +3 -2
  117. package/packages/software-development/starter-rules/adapters/cursor/skills/starter-rules/SKILL.md +2 -1
  118. package/packages/software-development/starter-rules/adapters/kiro/steering/starter-rules.md +62 -0
  119. package/packages/software-development/starter-rules/adapters/windsurf/rules/starter-rules.md +61 -0
  120. package/scripts/build-adapters.sh +97 -8
  121. package/scripts/validate-catalog.sh +4 -0
@@ -0,0 +1,61 @@
1
+ <!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
2
+
3
+ ---
4
+ description: "Load and enforce hard rules for every oleg-koval/* starter: 300-line files, E2E tests, pre-commit hooks, Vertical Slice architecture, no comments, KISS/DRY/SOLID."
5
+ ---
6
+
7
+
8
+ # Starter Rules
9
+
10
+ ## Overview
11
+
12
+ Load the canonical hard rules for every `oleg-koval/*` starter repo and verify the current repo complies with them. Produces a compliance report and a list of gaps to fix.
13
+
14
+ ## When to Use
15
+
16
+ - Starting a new coding session in any `oleg-koval/*` template repo
17
+ - Auditing an existing starter for rule compliance before a release or PR merge
18
+ - Onboarding a new contributor (human or AI) to a starter
19
+ - After a large refactor, to verify rules have not been silently violated
20
+
21
+ Do not use for repos outside the `oleg-koval` namespace unless they explicitly reference `RULES.md`.
22
+
23
+ ## Workflow
24
+
25
+ 1. **Load the rules** — read `RULES.md` from the repo root. If absent, fetch it from `https://github.com/oleg-koval/starters/blob/main/RULES.md` and note that the starter is missing a local copy.
26
+
27
+ 2. **Apply §2 hard rules** — for the current task or PR diff, verify:
28
+ - No file exceeds 300 lines (`find . -name '*.ts' -o -name '*.py' -o -name '*.go' | xargs wc -l | awk '$1 > 300 && $2 != "total"'`)
29
+ - No functions produce side effects outside of boundary layers
30
+ - New code has no WHAT-comments; WHY-comments are one line max
31
+ - Tests are E2E-first; unit tests only for pure logic with non-trivial branching
32
+
33
+ 3. **Verify hooks and lint** — check that pre-commit hooks are installed and configured:
34
+ - TypeScript: `cat .eslintrc* | grep max-lines` and `cat package.json | grep -A5 '"lint-staged"\|"husky"\|"lefthook"'`
35
+ - Python: `cat .pre-commit-config.yaml` and check for `ruff` + format hooks
36
+ - Go: `cat .golangci.yml` or `.pre-commit-config.yaml` and check for `golangci-lint` + `gofmt`
37
+
38
+ 4. **Check architecture** — for app/SaaS starters: confirm feature code is organized as vertical slices (feature directory contains handler + DTO + service + tests together). For library starters: skip.
39
+
40
+ 5. **Report gaps** — list any violations found in steps 2–4. For each gap:
41
+ - Name the rule (e.g., "§2.2 file length")
42
+ - Name the file and line count or violation
43
+ - Propose the minimal fix
44
+
45
+ 6. **Fix on request** — if the user asks to fix the gaps, apply them one at a time, smallest change first. Do not refactor beyond what the rule requires.
46
+
47
+ ## Reference
48
+
49
+ Full rule details: [`RULES.md`](./RULES.md)
50
+
51
+ Architecture options and future starters: `RULES.md §3`
52
+
53
+ Unix principles: `RULES.md §4`
54
+
55
+ ## Verification
56
+
57
+ - [ ] `RULES.md` was read from the repo root (or fetched and absence noted)
58
+ - [ ] File length check ran with zero violations, or violations were listed
59
+ - [ ] Pre-commit hooks verified as installed and configured
60
+ - [ ] Compliance report produced listing passed checks and gaps
61
+ - [ ] Any fixes applied do not exceed the scope of the violated rule
@@ -50,6 +50,8 @@ const cursorPlugins = catalog.packages.map((pkg) => ({
50
50
  fs.mkdirSync(path.join(root, '.claude-plugin'), { recursive: true })
51
51
  fs.mkdirSync(path.join(root, '.cursor-plugin'), { recursive: true })
52
52
  fs.mkdirSync(path.join(root, '.github', 'prompts'), { recursive: true })
53
+ fs.mkdirSync(path.join(root, '.windsurf', 'rules'), { recursive: true })
54
+ fs.mkdirSync(path.join(root, '.kiro', 'steering'), { recursive: true })
53
55
 
54
56
  fs.writeFileSync(
55
57
  path.join(root, '.claude-plugin', 'marketplace.json'),
@@ -139,6 +141,47 @@ for (const pkg of catalog.packages) {
139
141
  fs.writeFileSync(path.join(root, '.github', 'prompts', promptNameFor(pkg)), prompt)
140
142
  }
141
143
 
144
+ for (const pkg of catalog.packages) {
145
+ if (!pkg.adapters.includes('windsurf')) {
146
+ continue
147
+ }
148
+
149
+ const skillBody = stripFrontmatter(fs.readFileSync(skillPathFor(pkg), 'utf8')).trimEnd()
150
+ const content = stripTrailingLineWhitespace([
151
+ generatedHeader,
152
+ '',
153
+ '---',
154
+ `description: ${JSON.stringify(pkg.description)}`,
155
+ '---',
156
+ '',
157
+ skillBody,
158
+ '',
159
+ ].join('\n'))
160
+
161
+ fs.writeFileSync(path.join(root, '.windsurf', 'rules', `${pkg.name}.md`), content)
162
+ }
163
+
164
+ for (const pkg of catalog.packages) {
165
+ if (!pkg.adapters.includes('kiro')) {
166
+ continue
167
+ }
168
+
169
+ const skillBody = stripFrontmatter(fs.readFileSync(skillPathFor(pkg), 'utf8')).trimEnd()
170
+ const content = stripTrailingLineWhitespace([
171
+ generatedHeader,
172
+ '',
173
+ '---',
174
+ 'inclusion: manual',
175
+ `description: ${JSON.stringify(pkg.description)}`,
176
+ '---',
177
+ '',
178
+ skillBody,
179
+ '',
180
+ ].join('\n'))
181
+
182
+ fs.writeFileSync(path.join(root, '.kiro', 'steering', `${pkg.name}.md`), content)
183
+ }
184
+
142
185
  for (const pkg of catalog.packages) {
143
186
  const canonical = fs.readFileSync(skillPathFor(pkg), 'utf8').trimEnd()
144
187
 
@@ -161,16 +204,62 @@ for (const pkg of catalog.packages) {
161
204
  copySkillResources(pkg, claudeDestDir)
162
205
  }
163
206
 
164
- if (!pkg.adapters.includes('cursor')) {
165
- continue
207
+ if (pkg.adapters.includes('cursor')) {
208
+ const cursorAdapterDir = path.join(root, pkg.path, 'adapters', 'cursor')
209
+ const destDir = path.join(cursorAdapterDir, 'skills', pkg.name)
210
+ fs.mkdirSync(destDir, { recursive: true })
211
+ fs.writeFileSync(
212
+ path.join(cursorAdapterDir, 'plugin.json'),
213
+ JSON.stringify(
214
+ {
215
+ name: lookupNameFor(pkg),
216
+ version: '0.1.0',
217
+ description: pkg.description,
218
+ skills: 'skills/',
219
+ },
220
+ null,
221
+ 2,
222
+ ) + '\n',
223
+ )
224
+ fs.writeFileSync(path.join(destDir, 'SKILL.md'), [generatedHeader, '', canonical, ''].join('\n'))
225
+ copySkillResources(pkg, destDir)
166
226
  }
167
227
 
168
- const destDir = path.join(root, pkg.path, 'adapters', 'cursor', 'skills', pkg.name)
169
- const destPath = path.join(destDir, 'SKILL.md')
170
- fs.mkdirSync(destDir, { recursive: true })
171
- fs.writeFileSync(destPath, [generatedHeader, '', canonical, ''].join('\n'))
172
- copySkillResources(pkg, destDir)
228
+ if (pkg.adapters.includes('windsurf')) {
229
+ const skillBody = stripFrontmatter(canonical).trimEnd()
230
+ const content = stripTrailingLineWhitespace([
231
+ generatedHeader,
232
+ '',
233
+ '---',
234
+ `description: ${JSON.stringify(pkg.description)}`,
235
+ '---',
236
+ '',
237
+ skillBody,
238
+ '',
239
+ ].join('\n'))
240
+ const destDir = path.join(root, pkg.path, 'adapters', 'windsurf', 'rules')
241
+ fs.mkdirSync(destDir, { recursive: true })
242
+ fs.writeFileSync(path.join(destDir, `${pkg.name}.md`), content)
243
+ }
244
+
245
+ if (pkg.adapters.includes('kiro')) {
246
+ const skillBody = stripFrontmatter(canonical).trimEnd()
247
+ const content = stripTrailingLineWhitespace([
248
+ generatedHeader,
249
+ '',
250
+ '---',
251
+ 'inclusion: manual',
252
+ `description: ${JSON.stringify(pkg.description)}`,
253
+ '---',
254
+ '',
255
+ skillBody,
256
+ '',
257
+ ].join('\n'))
258
+ const destDir = path.join(root, pkg.path, 'adapters', 'kiro', 'steering')
259
+ fs.mkdirSync(destDir, { recursive: true })
260
+ fs.writeFileSync(path.join(destDir, `${pkg.name}.md`), content)
261
+ }
173
262
  }
174
263
 
175
- console.log('generated marketplace manifests, Copilot prompts, and Cursor adapter SKILL.md files')
264
+ console.log('generated marketplace manifests, Copilot prompts, Cursor, Windsurf, and Kiro adapter files')
176
265
  EOF
@@ -12,6 +12,8 @@ test -f .claude-plugin/marketplace.json
12
12
  test -f .claude-plugin/plugin.json
13
13
  test -f .cursor-plugin/index.json
14
14
  test -f .github/copilot-instructions.md
15
+ test -d .windsurf/rules
16
+ test -d .kiro/steering
15
17
 
16
18
  node <<'EOF'
17
19
  const fs = require('fs')
@@ -23,6 +25,8 @@ const adapterFiles = {
23
25
  codex: (pkg) => path.join(pkg.path, 'adapters', 'codex', 'README.md'),
24
26
  cursor: (pkg) => path.join(pkg.path, 'adapters', 'cursor', 'plugin.json'),
25
27
  copilot: (pkg) => path.join('.github', 'prompts', `${pkg.name}.prompt.md`),
28
+ windsurf: (pkg) => path.join(pkg.path, 'adapters', 'windsurf', 'rules', `${pkg.name}.md`),
29
+ kiro: (pkg) => path.join(pkg.path, 'adapters', 'kiro', 'steering', `${pkg.name}.md`),
26
30
  }
27
31
 
28
32
  const catalog = JSON.parse(fs.readFileSync('catalog/skills.json', 'utf8'))