@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.
- package/.claude-plugin/plugin.json +1 -1
- package/.kiro/steering/add-to-my-skills.md +78 -0
- package/.kiro/steering/ai-tools-setup.md +263 -0
- package/.kiro/steering/changelog-generator.md +106 -0
- package/.kiro/steering/cloudflare-block-countries.md +167 -0
- package/.kiro/steering/docs-index-keeper.md +53 -0
- package/.kiro/steering/fill-music-player.md +101 -0
- package/.kiro/steering/gallery.md +228 -0
- package/.kiro/steering/gh-cli.md +2190 -0
- package/.kiro/steering/git-commit.md +125 -0
- package/.kiro/steering/open-source-publisher.md +427 -0
- package/.kiro/steering/product-builder.md +213 -0
- package/.kiro/steering/promptctl.md +81 -0
- package/.kiro/steering/search-console-indexing-audit.md +57 -0
- package/.kiro/steering/semantic-release-beta.md +48 -0
- package/.kiro/steering/starter-rules.md +62 -0
- package/.kiro/steering/viral-launch.md +92 -0
- package/.windsurf/rules/add-to-my-skills.md +77 -0
- package/.windsurf/rules/ai-tools-setup.md +262 -0
- package/.windsurf/rules/changelog-generator.md +105 -0
- package/.windsurf/rules/cloudflare-block-countries.md +166 -0
- package/.windsurf/rules/docs-index-keeper.md +52 -0
- package/.windsurf/rules/fill-music-player.md +100 -0
- package/.windsurf/rules/gallery.md +227 -0
- package/.windsurf/rules/gh-cli.md +2189 -0
- package/.windsurf/rules/git-commit.md +124 -0
- package/.windsurf/rules/open-source-publisher.md +426 -0
- package/.windsurf/rules/product-builder.md +212 -0
- package/.windsurf/rules/promptctl.md +80 -0
- package/.windsurf/rules/search-console-indexing-audit.md +56 -0
- package/.windsurf/rules/semantic-release-beta.md +47 -0
- package/.windsurf/rules/starter-rules.md +61 -0
- package/.windsurf/rules/viral-launch.md +91 -0
- package/README.md +67 -14
- package/catalog/skills.json +48 -16
- package/docs/skill-anatomy.md +10 -6
- package/package.json +3 -1
- package/packages/marketing/search-console-indexing-audit/SKILL.md +3 -0
- package/packages/marketing/search-console-indexing-audit/adapters/claude/skills/search-console-indexing-audit/SKILL.md +3 -0
- package/packages/marketing/search-console-indexing-audit/adapters/cursor/plugin.json +1 -1
- package/packages/marketing/search-console-indexing-audit/adapters/cursor/skills/search-console-indexing-audit/SKILL.md +3 -0
- package/packages/marketing/search-console-indexing-audit/adapters/kiro/steering/search-console-indexing-audit.md +57 -0
- package/packages/marketing/search-console-indexing-audit/adapters/windsurf/rules/search-console-indexing-audit.md +56 -0
- package/packages/marketing/viral-launch/SKILL.md +3 -1
- package/packages/marketing/viral-launch/adapters/claude/skills/viral-launch/SKILL.md +3 -1
- package/packages/marketing/viral-launch/adapters/cursor/skills/viral-launch/SKILL.md +3 -1
- package/packages/marketing/viral-launch/adapters/kiro/steering/viral-launch.md +92 -0
- package/packages/marketing/viral-launch/adapters/windsurf/rules/viral-launch.md +91 -0
- package/packages/music/fill-music-player/SKILL.md +2 -1
- package/packages/music/fill-music-player/adapters/claude/skills/fill-music-player/SKILL.md +2 -1
- package/packages/music/fill-music-player/adapters/cursor/plugin.json +1 -1
- package/packages/music/fill-music-player/adapters/cursor/skills/fill-music-player/SKILL.md +2 -1
- package/packages/music/fill-music-player/adapters/kiro/steering/fill-music-player.md +101 -0
- package/packages/music/fill-music-player/adapters/windsurf/rules/fill-music-player.md +100 -0
- package/packages/photography/gallery/SKILL.md +3 -1
- package/packages/photography/gallery/adapters/claude/skills/gallery/SKILL.md +3 -1
- package/packages/photography/gallery/adapters/cursor/skills/gallery/SKILL.md +3 -1
- package/packages/photography/gallery/adapters/kiro/steering/gallery.md +228 -0
- package/packages/photography/gallery/adapters/windsurf/rules/gallery.md +227 -0
- package/packages/software-development/add-to-my-skills/SKILL.md +2 -1
- package/packages/software-development/add-to-my-skills/adapters/claude/skills/add-to-my-skills/SKILL.md +2 -1
- package/packages/software-development/add-to-my-skills/adapters/cursor/skills/add-to-my-skills/SKILL.md +2 -1
- package/packages/software-development/add-to-my-skills/adapters/kiro/steering/add-to-my-skills.md +78 -0
- package/packages/software-development/add-to-my-skills/adapters/windsurf/rules/add-to-my-skills.md +77 -0
- package/packages/software-development/ai-tools-setup/adapters/kiro/steering/ai-tools-setup.md +263 -0
- package/packages/software-development/ai-tools-setup/adapters/windsurf/rules/ai-tools-setup.md +262 -0
- package/packages/software-development/changelog-generator/SKILL.md +3 -1
- package/packages/software-development/changelog-generator/adapters/claude/skills/changelog-generator/SKILL.md +3 -1
- package/packages/software-development/changelog-generator/adapters/cursor/skills/changelog-generator/SKILL.md +3 -1
- package/packages/software-development/changelog-generator/adapters/kiro/steering/changelog-generator.md +106 -0
- package/packages/software-development/changelog-generator/adapters/windsurf/rules/changelog-generator.md +105 -0
- package/packages/software-development/cloudflare-block-countries/SKILL.md +1 -1
- package/packages/software-development/cloudflare-block-countries/adapters/claude/skills/cloudflare-block-countries/SKILL.md +1 -1
- package/packages/software-development/cloudflare-block-countries/adapters/cursor/skills/cloudflare-block-countries/SKILL.md +1 -1
- package/packages/software-development/cloudflare-block-countries/adapters/kiro/steering/cloudflare-block-countries.md +167 -0
- package/packages/software-development/cloudflare-block-countries/adapters/windsurf/rules/cloudflare-block-countries.md +166 -0
- package/packages/software-development/docs-index-keeper/SKILL.md +2 -1
- package/packages/software-development/docs-index-keeper/adapters/claude/skills/docs-index-keeper/SKILL.md +2 -1
- package/packages/software-development/docs-index-keeper/adapters/cursor/plugin.json +1 -1
- package/packages/software-development/docs-index-keeper/adapters/cursor/skills/docs-index-keeper/SKILL.md +2 -1
- package/packages/software-development/docs-index-keeper/adapters/kiro/steering/docs-index-keeper.md +53 -0
- package/packages/software-development/docs-index-keeper/adapters/windsurf/rules/docs-index-keeper.md +52 -0
- package/packages/software-development/gh-cli/SKILL.md +3 -1
- package/packages/software-development/gh-cli/adapters/claude/skills/gh-cli/SKILL.md +3 -1
- package/packages/software-development/gh-cli/adapters/cursor/skills/gh-cli/SKILL.md +3 -1
- package/packages/software-development/gh-cli/adapters/kiro/steering/gh-cli.md +2190 -0
- package/packages/software-development/gh-cli/adapters/windsurf/rules/gh-cli.md +2189 -0
- package/packages/software-development/git-commit/SKILL.md +1 -1
- package/packages/software-development/git-commit/adapters/claude/skills/git-commit/SKILL.md +1 -1
- package/packages/software-development/git-commit/adapters/cursor/skills/git-commit/SKILL.md +1 -1
- package/packages/software-development/git-commit/adapters/kiro/steering/git-commit.md +125 -0
- package/packages/software-development/git-commit/adapters/windsurf/rules/git-commit.md +124 -0
- package/packages/software-development/open-source-publisher/SKILL.md +2 -1
- package/packages/software-development/open-source-publisher/adapters/claude/skills/open-source-publisher/SKILL.md +2 -1
- package/packages/software-development/open-source-publisher/adapters/cursor/skills/open-source-publisher/SKILL.md +2 -1
- package/packages/software-development/open-source-publisher/adapters/kiro/steering/open-source-publisher.md +427 -0
- package/packages/software-development/open-source-publisher/adapters/windsurf/rules/open-source-publisher.md +426 -0
- package/packages/software-development/product-builder/SKILL.md +2 -1
- package/packages/software-development/product-builder/adapters/claude/skills/product-builder/SKILL.md +2 -1
- package/packages/software-development/product-builder/adapters/cursor/plugin.json +1 -1
- package/packages/software-development/product-builder/adapters/cursor/skills/product-builder/SKILL.md +2 -1
- package/packages/software-development/product-builder/adapters/kiro/steering/product-builder.md +213 -0
- package/packages/software-development/product-builder/adapters/windsurf/rules/product-builder.md +212 -0
- package/packages/software-development/promptctl/SKILL.md +3 -1
- package/packages/software-development/promptctl/adapters/claude/skills/promptctl/SKILL.md +3 -1
- package/packages/software-development/promptctl/adapters/cursor/skills/promptctl/SKILL.md +3 -1
- package/packages/software-development/promptctl/adapters/kiro/steering/promptctl.md +81 -0
- package/packages/software-development/promptctl/adapters/windsurf/rules/promptctl.md +80 -0
- package/packages/software-development/semantic-release-beta/SKILL.md +3 -1
- package/packages/software-development/semantic-release-beta/adapters/claude/skills/semantic-release-beta/SKILL.md +3 -1
- package/packages/software-development/semantic-release-beta/adapters/cursor/skills/semantic-release-beta/SKILL.md +3 -1
- package/packages/software-development/semantic-release-beta/adapters/kiro/steering/semantic-release-beta.md +48 -0
- package/packages/software-development/semantic-release-beta/adapters/windsurf/rules/semantic-release-beta.md +47 -0
- package/packages/software-development/starter-rules/SKILL.md +2 -1
- package/packages/software-development/starter-rules/adapters/claude/skills/starter-rules/SKILL.md +2 -1
- package/packages/software-development/starter-rules/adapters/cursor/plugin.json +3 -2
- package/packages/software-development/starter-rules/adapters/cursor/skills/starter-rules/SKILL.md +2 -1
- package/packages/software-development/starter-rules/adapters/kiro/steering/starter-rules.md +62 -0
- package/packages/software-development/starter-rules/adapters/windsurf/rules/starter-rules.md +61 -0
- package/scripts/build-adapters.sh +97 -8
- 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 (
|
|
165
|
-
|
|
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
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
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
|
|
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'))
|