@olegkoval/agent-skills 1.17.0 → 1.19.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 (70) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +4 -3
  3. package/.cursor-plugin/index.json +5 -0
  4. package/.grok-plugin/index.json +125 -0
  5. package/.kiro/steering/qodoloop.md +127 -0
  6. package/.windsurf/rules/qodoloop.md +126 -0
  7. package/README.md +30 -6
  8. package/catalog/skills.json +69 -22
  9. package/package.json +3 -2
  10. package/packages/marketing/search-console-indexing-audit/adapters/grok/plugin.json +6 -0
  11. package/packages/marketing/search-console-indexing-audit/adapters/grok/skills/search-console-indexing-audit/SKILL.md +69 -0
  12. package/packages/marketing/search-console-indexing-audit/adapters/grok/skills/search-console-indexing-audit/scripts/summarize_gsc_coverage.py +151 -0
  13. package/packages/marketing/viral-launch/adapters/grok/plugin.json +6 -0
  14. package/packages/marketing/viral-launch/adapters/grok/skills/viral-launch/SKILL.md +105 -0
  15. package/packages/music/fill-music-player/adapters/grok/plugin.json +6 -0
  16. package/packages/music/fill-music-player/adapters/grok/skills/fill-music-player/SKILL.md +111 -0
  17. package/packages/photography/gallery/adapters/grok/plugin.json +6 -0
  18. package/packages/photography/gallery/adapters/grok/skills/gallery/SKILL.md +237 -0
  19. package/packages/software-development/apple-store-submit/adapters/grok/plugin.json +6 -0
  20. package/packages/software-development/apple-store-submit/adapters/grok/skills/apple-store-submit/SKILL.md +158 -0
  21. package/packages/software-development/cloudflare-block-countries/adapters/grok/plugin.json +6 -0
  22. package/packages/software-development/cloudflare-block-countries/adapters/grok/skills/cloudflare-block-countries/SKILL.md +177 -0
  23. package/packages/software-development/crash-course/adapters/grok/plugin.json +6 -0
  24. package/packages/software-development/crash-course/adapters/grok/skills/crash-course/SKILL.md +271 -0
  25. package/packages/software-development/docs-index-keeper/adapters/grok/plugin.json +6 -0
  26. package/packages/software-development/docs-index-keeper/adapters/grok/skills/docs-index-keeper/SKILL.md +65 -0
  27. package/packages/software-development/gh-cli/adapters/grok/plugin.json +6 -0
  28. package/packages/software-development/gh-cli/adapters/grok/skills/gh-cli/SKILL.md +2200 -0
  29. package/packages/software-development/git-commit/adapters/grok/plugin.json +6 -0
  30. package/packages/software-development/git-commit/adapters/grok/skills/git-commit/SKILL.md +133 -0
  31. package/packages/software-development/macos-menubar-app/adapters/grok/plugin.json +6 -0
  32. package/packages/software-development/macos-menubar-app/adapters/grok/skills/macos-menubar-app/SKILL.md +238 -0
  33. package/packages/software-development/mvp-oneshot/adapters/grok/plugin.json +6 -0
  34. package/packages/software-development/mvp-oneshot/adapters/grok/skills/mvp-oneshot/SKILL.md +176 -0
  35. package/packages/software-development/obsidian-pr-sync/adapters/grok/plugin.json +6 -0
  36. package/packages/software-development/obsidian-pr-sync/adapters/grok/skills/obsidian-pr-sync/SKILL.md +154 -0
  37. package/packages/software-development/obsidian-task-rollover/adapters/grok/plugin.json +6 -0
  38. package/packages/software-development/obsidian-task-rollover/adapters/grok/skills/obsidian-task-rollover/SKILL.md +198 -0
  39. package/packages/software-development/open-source-publisher/adapters/grok/plugin.json +6 -0
  40. package/packages/software-development/open-source-publisher/adapters/grok/skills/open-source-publisher/SKILL.md +471 -0
  41. package/packages/software-development/product-builder/adapters/grok/plugin.json +6 -0
  42. package/packages/software-development/product-builder/adapters/grok/skills/product-builder/SKILL.md +224 -0
  43. package/packages/software-development/promptctl/adapters/grok/plugin.json +6 -0
  44. package/packages/software-development/promptctl/adapters/grok/skills/promptctl/SKILL.md +90 -0
  45. package/packages/software-development/qodoloop/SKILL.md +134 -0
  46. package/packages/software-development/qodoloop/adapters/claude/plugin.json +5 -0
  47. package/packages/software-development/qodoloop/adapters/claude/skills/qodoloop/SKILL.md +135 -0
  48. package/packages/software-development/qodoloop/adapters/codex/README.md +20 -0
  49. package/packages/software-development/qodoloop/adapters/cursor/plugin.json +6 -0
  50. package/packages/software-development/qodoloop/adapters/cursor/skills/qodoloop/SKILL.md +136 -0
  51. package/packages/software-development/qodoloop/adapters/grok/plugin.json +6 -0
  52. package/packages/software-development/qodoloop/adapters/grok/skills/qodoloop/SKILL.md +135 -0
  53. package/packages/software-development/qodoloop/adapters/kiro/steering/qodoloop.md +127 -0
  54. package/packages/software-development/qodoloop/adapters/windsurf/rules/qodoloop.md +126 -0
  55. package/packages/software-development/qodoloop/references/graphql-queries.md +151 -0
  56. package/packages/software-development/relay/adapters/grok/plugin.json +6 -0
  57. package/packages/software-development/relay/adapters/grok/skills/relay/SKILL.md +117 -0
  58. package/packages/software-development/review-past-performance/adapters/grok/plugin.json +6 -0
  59. package/packages/software-development/review-past-performance/adapters/grok/skills/review-past-performance/SKILL.md +212 -0
  60. package/packages/software-development/self-critique/adapters/grok/plugin.json +6 -0
  61. package/packages/software-development/self-critique/adapters/grok/skills/self-critique/SKILL.md +149 -0
  62. package/packages/software-development/self-critique/adapters/grok/skills/self-critique/scripts/critique-nudge.mjs +57 -0
  63. package/packages/software-development/semantic-release-beta/adapters/grok/plugin.json +6 -0
  64. package/packages/software-development/semantic-release-beta/adapters/grok/skills/semantic-release-beta/SKILL.md +59 -0
  65. package/packages/software-development/skill-budget-audit/adapters/grok/plugin.json +6 -0
  66. package/packages/software-development/skill-budget-audit/adapters/grok/skills/skill-budget-audit/SKILL.md +146 -0
  67. package/packages/software-development/starter-rules/adapters/grok/plugin.json +6 -0
  68. package/packages/software-development/starter-rules/adapters/grok/skills/starter-rules/SKILL.md +73 -0
  69. package/scripts/build-adapters.sh +47 -4
  70. package/scripts/validate-catalog.sh +10 -0
@@ -19,7 +19,8 @@
19
19
  "codex",
20
20
  "claude",
21
21
  "cursor",
22
- "copilot"
22
+ "copilot",
23
+ "grok"
23
24
  ]
24
25
  },
25
26
  {
@@ -41,7 +42,8 @@
41
42
  "cursor",
42
43
  "copilot",
43
44
  "windsurf",
44
- "kiro"
45
+ "kiro",
46
+ "grok"
45
47
  ]
46
48
  },
47
49
  {
@@ -64,7 +66,8 @@
64
66
  "cursor",
65
67
  "copilot",
66
68
  "windsurf",
67
- "kiro"
69
+ "kiro",
70
+ "grok"
68
71
  ]
69
72
  },
70
73
  {
@@ -86,7 +89,8 @@
86
89
  "cursor",
87
90
  "copilot",
88
91
  "windsurf",
89
- "kiro"
92
+ "kiro",
93
+ "grok"
90
94
  ]
91
95
  },
92
96
  {
@@ -106,7 +110,8 @@
106
110
  "cursor",
107
111
  "copilot",
108
112
  "windsurf",
109
- "kiro"
113
+ "kiro",
114
+ "grok"
110
115
  ]
111
116
  },
112
117
  {
@@ -127,7 +132,8 @@
127
132
  "cursor",
128
133
  "copilot",
129
134
  "windsurf",
130
- "kiro"
135
+ "kiro",
136
+ "grok"
131
137
  ]
132
138
  },
133
139
  {
@@ -148,7 +154,8 @@
148
154
  "cursor",
149
155
  "copilot",
150
156
  "windsurf",
151
- "kiro"
157
+ "kiro",
158
+ "grok"
152
159
  ]
153
160
  },
154
161
  {
@@ -170,7 +177,8 @@
170
177
  "cursor",
171
178
  "copilot",
172
179
  "windsurf",
173
- "kiro"
180
+ "kiro",
181
+ "grok"
174
182
  ]
175
183
  },
176
184
  {
@@ -192,7 +200,8 @@
192
200
  "cursor",
193
201
  "copilot",
194
202
  "windsurf",
195
- "kiro"
203
+ "kiro",
204
+ "grok"
196
205
  ]
197
206
  },
198
207
  {
@@ -216,7 +225,8 @@
216
225
  "cursor",
217
226
  "copilot",
218
227
  "windsurf",
219
- "kiro"
228
+ "kiro",
229
+ "grok"
220
230
  ]
221
231
  },
222
232
  {
@@ -240,7 +250,8 @@
240
250
  "cursor",
241
251
  "copilot",
242
252
  "windsurf",
243
- "kiro"
253
+ "kiro",
254
+ "grok"
244
255
  ]
245
256
  },
246
257
  {
@@ -263,7 +274,8 @@
263
274
  "cursor",
264
275
  "copilot",
265
276
  "windsurf",
266
- "kiro"
277
+ "kiro",
278
+ "grok"
267
279
  ]
268
280
  },
269
281
  {
@@ -279,7 +291,8 @@
279
291
  "claude-relay"
280
292
  ],
281
293
  "adapters": [
282
- "claude"
294
+ "claude",
295
+ "grok"
283
296
  ]
284
297
  },
285
298
  {
@@ -304,7 +317,8 @@
304
317
  "cursor",
305
318
  "copilot",
306
319
  "windsurf",
307
- "kiro"
320
+ "kiro",
321
+ "grok"
308
322
  ]
309
323
  },
310
324
  {
@@ -327,7 +341,8 @@
327
341
  "cursor",
328
342
  "copilot",
329
343
  "windsurf",
330
- "kiro"
344
+ "kiro",
345
+ "grok"
331
346
  ]
332
347
  },
333
348
  {
@@ -352,7 +367,8 @@
352
367
  "hermes",
353
368
  "copilot",
354
369
  "windsurf",
355
- "kiro"
370
+ "kiro",
371
+ "grok"
356
372
  ]
357
373
  },
358
374
  {
@@ -374,7 +390,8 @@
374
390
  "cursor",
375
391
  "copilot",
376
392
  "windsurf",
377
- "kiro"
393
+ "kiro",
394
+ "grok"
378
395
  ]
379
396
  },
380
397
  {
@@ -396,7 +413,8 @@
396
413
  "cursor",
397
414
  "copilot",
398
415
  "windsurf",
399
- "kiro"
416
+ "kiro",
417
+ "grok"
400
418
  ]
401
419
  },
402
420
  {
@@ -418,7 +436,8 @@
418
436
  "cursor",
419
437
  "copilot",
420
438
  "windsurf",
421
- "kiro"
439
+ "kiro",
440
+ "grok"
422
441
  ]
423
442
  },
424
443
  {
@@ -442,7 +461,8 @@
442
461
  "cursor",
443
462
  "copilot",
444
463
  "windsurf",
445
- "kiro"
464
+ "kiro",
465
+ "grok"
446
466
  ]
447
467
  },
448
468
  {
@@ -466,7 +486,8 @@
466
486
  "cursor",
467
487
  "copilot",
468
488
  "windsurf",
469
- "kiro"
489
+ "kiro",
490
+ "grok"
470
491
  ]
471
492
  },
472
493
  {
@@ -484,7 +505,8 @@
484
505
  "performance"
485
506
  ],
486
507
  "adapters": [
487
- "claude"
508
+ "claude",
509
+ "grok"
488
510
  ]
489
511
  },
490
512
  {
@@ -507,6 +529,31 @@
507
529
  "cursor",
508
530
  "copilot",
509
531
  "windsurf",
532
+ "kiro",
533
+ "grok"
534
+ ]
535
+ },
536
+ {
537
+ "name": "qodoloop",
538
+ "lookupName": "olko:qodoloop",
539
+ "category": "software-development",
540
+ "path": "packages/software-development/qodoloop",
541
+ "description": "Iteratively drives a GitHub PR to zero unresolved Qodo findings — reads each finding's own Agent Prompt, applies the fix, replies to the thread, resolves it, pushes, and waits for Qodo's next pass.",
542
+ "tags": [
543
+ "code-review",
544
+ "qodo",
545
+ "github",
546
+ "pull-requests",
547
+ "automation",
548
+ "agents"
549
+ ],
550
+ "adapters": [
551
+ "claude",
552
+ "codex",
553
+ "cursor",
554
+ "copilot",
555
+ "grok",
556
+ "windsurf",
510
557
  "kiro"
511
558
  ]
512
559
  }
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@olegkoval/agent-skills",
3
- "version": "1.17.0",
3
+ "version": "1.19.0",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
8
- "description": "Agent-agnostic skill catalog for Codex, Claude, Cursor, and other skill-aware tools.",
8
+ "description": "Agent-agnostic skill catalog for Codex, Claude, Cursor, Grok, Copilot, Windsurf, Kiro, and other skill-aware tools.",
9
9
  "license": "MIT",
10
10
  "repository": {
11
11
  "type": "git",
@@ -25,6 +25,7 @@
25
25
  "packages",
26
26
  ".claude-plugin",
27
27
  ".cursor-plugin",
28
+ ".grok-plugin",
28
29
  ".windsurf",
29
30
  ".kiro",
30
31
  "scripts",
@@ -0,0 +1,6 @@
1
+ {
2
+ "name": "olko:search-console-indexing-audit",
3
+ "version": "0.1.0",
4
+ "description": "Analyze Google Search Console Coverage CSV exports and correlate them with sitemap, robots, canonical, redirect, and noindex signals.",
5
+ "skills": "skills/"
6
+ }
@@ -0,0 +1,69 @@
1
+ ---
2
+
3
+ name: search-console-indexing-audit
4
+ description: Analyze Google Search Console Coverage or indexing CSV exports and correlate them with repo and live-site SEO signals. Use for Chart.csv, Metadata.csv, Critical issues.csv, Non-critical issues.csv, sitemap/robots/canonical indexing problems, "Discovered - currently not indexed", redirect indexing buckets, or requests to fix Google indexing coverage.
5
+ license: MIT
6
+ allowed-tools: Bash, Read, Write
7
+ compatibility: Codex, Claude Code, Cursor, Pi, Hermes, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools.
8
+ metadata:
9
+ targets: [_source-only]
10
+ author: Oleg Koval
11
+ tags:
12
+ - seo
13
+ - google-search-console
14
+ - indexing
15
+ - sitemap
16
+ - canonical
17
+
18
+ ---
19
+ <!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
20
+
21
+ # search-console-indexing-audit
22
+
23
+ Use this skill to turn Google Search Console Coverage exports into a concrete indexing fix plan.
24
+
25
+ ## Workflow
26
+
27
+ 1. Read the export directory first:
28
+ - `Chart.csv` for indexed/not-indexed trend and impressions
29
+ - `Metadata.csv` for property context such as sitemap scope
30
+ - `Critical issues.csv` and `Non-critical issues.csv` for issue buckets
31
+ 2. Run the summarizer when the standard CSV files are present:
32
+
33
+ ```bash
34
+ python3 <skill-dir>/scripts/summarize_gsc_coverage.py <export-dir>
35
+ python3 <skill-dir>/scripts/summarize_gsc_coverage.py <export-dir> --json
36
+ ```
37
+
38
+ 3. Inspect the target repo for SEO sources of truth:
39
+ - sitemap generation and whether listed URLs are canonical, indexable HTML pages
40
+ - robots rules, sitemap URL, and host hints
41
+ - canonical metadata, `metadataBase`, Open Graph URL base, and per-route `noindex`
42
+ - redirects across apex/www, http/https, trailing slash, moved routes, and legacy paths
43
+ 4. Check live URLs when network access is available:
44
+
45
+ ```bash
46
+ curl -sS -I https://example.com/sitemap.xml
47
+ curl -sS https://example.com/sitemap.xml
48
+ curl -sS https://example.com/robots.txt
49
+ curl -sS https://example.com/page | rg -o '<link rel="canonical"[^>]*>|<meta name="robots"[^>]*>'
50
+ curl -sS -I -L --max-redirs 5 https://example.com/page
51
+ ```
52
+
53
+ 5. Map GSC buckets to fixes:
54
+ - `Page with redirect`: remove redirected URLs from sitemap and canonicals; submit only final 200 URLs.
55
+ - `Redirect error`: inspect redirect chains, protocol/host loops, blocked destinations, and non-200 final responses.
56
+ - `Alternate page with proper canonical tag`: usually acceptable; verify sitemap does not include alternates.
57
+ - `Discovered - currently not indexed`: improve crawl signals first: clean sitemap, canonical consistency, internal links, content quality, stable 200 responses, and lastmod accuracy.
58
+ - `Excluded by noindex`: verify it is intentional and keep those URLs out of sitemap.
59
+
60
+ ## Output
61
+
62
+ Report:
63
+
64
+ - Export summary: date range, indexed/not-indexed trend, issue buckets, and limitations.
65
+ - Likely root cause, with evidence from files or live HTTP responses.
66
+ - Prioritized fixes, smallest reliable change first.
67
+ - Verification steps for local tests, build, live sitemap/robots/canonical checks, and Search Console validation.
68
+
69
+ Call out when the export is aggregate-only and does not contain affected URL examples. Do not infer exact URLs unless the CSVs or live sitemap provide them.
@@ -0,0 +1,151 @@
1
+ #!/usr/bin/env python3
2
+ """Summarize Google Search Console Coverage CSV exports."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import argparse
7
+ import csv
8
+ import json
9
+ from pathlib import Path
10
+ from typing import Any
11
+
12
+
13
+ STANDARD_FILES = {
14
+ "chart": "Chart.csv",
15
+ "metadata": "Metadata.csv",
16
+ "critical": "Critical issues.csv",
17
+ "non_critical": "Non-critical issues.csv",
18
+ }
19
+
20
+
21
+ def read_rows(path: Path) -> list[dict[str, str]]:
22
+ if not path.exists():
23
+ return []
24
+ with path.open(newline="", encoding="utf-8-sig") as handle:
25
+ return [
26
+ {key: (value or "").strip() for key, value in row.items()}
27
+ for row in csv.DictReader(handle)
28
+ ]
29
+
30
+
31
+ def int_or_none(value: str) -> int | None:
32
+ if value == "":
33
+ return None
34
+ try:
35
+ return int(value.replace(",", ""))
36
+ except ValueError:
37
+ return None
38
+
39
+
40
+ def chart_summary(rows: list[dict[str, str]]) -> dict[str, Any]:
41
+ points = []
42
+ for row in rows:
43
+ points.append(
44
+ {
45
+ "date": row.get("Date", ""),
46
+ "not_indexed": int_or_none(row.get("Not indexed", "")),
47
+ "indexed": int_or_none(row.get("Indexed", "")),
48
+ "impressions": int_or_none(row.get("Impressions", "")),
49
+ }
50
+ )
51
+
52
+ indexed_points = [
53
+ point for point in points if point["indexed"] is not None or point["not_indexed"] is not None
54
+ ]
55
+ first = indexed_points[0] if indexed_points else None
56
+ last = indexed_points[-1] if indexed_points else None
57
+
58
+ return {
59
+ "date_range": [points[0]["date"], points[-1]["date"]] if points else None,
60
+ "first_indexing_point": first,
61
+ "latest_indexing_point": last,
62
+ "indexed_delta": None if not first or not last else (last["indexed"] or 0) - (first["indexed"] or 0),
63
+ "not_indexed_delta": None
64
+ if not first or not last
65
+ else (last["not_indexed"] or 0) - (first["not_indexed"] or 0),
66
+ "impressions_total": sum(point["impressions"] or 0 for point in points),
67
+ }
68
+
69
+
70
+ def issue_summary(rows: list[dict[str, str]]) -> list[dict[str, Any]]:
71
+ issues = []
72
+ for row in rows:
73
+ reason = row.get("Reason", "")
74
+ if not reason:
75
+ continue
76
+ issues.append(
77
+ {
78
+ "reason": reason,
79
+ "source": row.get("Source", ""),
80
+ "validation": row.get("Validation", ""),
81
+ "pages": int_or_none(row.get("Pages", "")) or 0,
82
+ }
83
+ )
84
+ return sorted(issues, key=lambda issue: issue["pages"], reverse=True)
85
+
86
+
87
+ def load_export(export_dir: Path) -> dict[str, Any]:
88
+ files = {key: export_dir / filename for key, filename in STANDARD_FILES.items()}
89
+ metadata_rows = read_rows(files["metadata"])
90
+ return {
91
+ "export_dir": str(export_dir),
92
+ "metadata": {row.get("Property", ""): row.get("Value", "") for row in metadata_rows},
93
+ "chart": chart_summary(read_rows(files["chart"])),
94
+ "critical_issues": issue_summary(read_rows(files["critical"])),
95
+ "non_critical_issues": issue_summary(read_rows(files["non_critical"])),
96
+ "missing_files": [filename for filename in STANDARD_FILES.values() if not (export_dir / filename).exists()],
97
+ }
98
+
99
+
100
+ def print_markdown(summary: dict[str, Any]) -> None:
101
+ chart = summary["chart"]
102
+ latest = chart["latest_indexing_point"] or {}
103
+ print("# Search Console Coverage Summary")
104
+ print()
105
+ print(f"- Export: `{summary['export_dir']}`")
106
+ if chart["date_range"]:
107
+ print(f"- Date range: {chart['date_range'][0]} to {chart['date_range'][1]}")
108
+ print(f"- Latest indexed: {latest.get('indexed', 'n/a')}")
109
+ print(f"- Latest not indexed: {latest.get('not_indexed', 'n/a')}")
110
+ print(f"- Total impressions in chart: {chart['impressions_total']}")
111
+ if summary["metadata"]:
112
+ print(f"- Metadata: {summary['metadata']}")
113
+ if summary["missing_files"]:
114
+ print(f"- Missing standard files: {', '.join(summary['missing_files'])}")
115
+
116
+ for label, issues in (
117
+ ("Critical Issues", summary["critical_issues"]),
118
+ ("Non-Critical Issues", summary["non_critical_issues"]),
119
+ ):
120
+ print()
121
+ print(f"## {label}")
122
+ if not issues:
123
+ print("- None reported")
124
+ continue
125
+ for issue in issues:
126
+ print(
127
+ f"- {issue['reason']}: {issue['pages']} pages"
128
+ f" ({issue['source']}, validation: {issue['validation']})"
129
+ )
130
+
131
+ print()
132
+ print("## Notes")
133
+ print("- Standard Coverage exports are aggregate reports; they may not include affected URL examples.")
134
+ print("- Redirect and canonical buckets should be checked against sitemap URLs and live canonical tags.")
135
+
136
+
137
+ def main() -> None:
138
+ parser = argparse.ArgumentParser(description=__doc__)
139
+ parser.add_argument("export_dir", type=Path)
140
+ parser.add_argument("--json", action="store_true", help="Print machine-readable JSON")
141
+ args = parser.parse_args()
142
+
143
+ summary = load_export(args.export_dir)
144
+ if args.json:
145
+ print(json.dumps(summary, indent=2, sort_keys=True))
146
+ else:
147
+ print_markdown(summary)
148
+
149
+
150
+ if __name__ == "__main__":
151
+ main()
@@ -0,0 +1,6 @@
1
+ {
2
+ "name": "olko:viral-launch",
3
+ "version": "0.1.0",
4
+ "description": "Set up a project repository and launch plan for shareable marketing, public launch readiness, and growth loops.",
5
+ "skills": "skills/"
6
+ }
@@ -0,0 +1,105 @@
1
+ ---
2
+
3
+ name: viral-launch
4
+ description: Set up a project repository and launch plan for shareable marketing, public launch readiness, and growth loops without pretending virality is guaranteed.
5
+ license: MIT
6
+ allowed-tools: Bash, Read, Write, WebSearch, WebFetch
7
+ compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Useful for product repos, open-source packages, SaaS launches, waitlists, and creator tools.
8
+ metadata:
9
+ targets: [_source-only]
10
+ author: Oleg Koval
11
+ tags:
12
+ - marketing
13
+ - launch
14
+ - growth
15
+ - virality
16
+ - positioning
17
+ - github
18
+
19
+ ---
20
+ <!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
21
+
22
+ # viral-launch
23
+
24
+ Use this skill when a user wants to launch a project, make a repo marketable, improve discoverability, or build shareable launch assets.
25
+
26
+ This skill is opinionated: virality is not a promise. The goal is to make the project easy to understand, easy to share, and easy to act on.
27
+
28
+ ## Trigger phrases
29
+
30
+ - make this repo launch-ready
31
+ - set this up to go viral
32
+ - prepare a product launch
33
+ - create marketing assets for this project
34
+ - improve the README for launch
35
+ - prepare Product Hunt / Hacker News / X / LinkedIn launch copy
36
+ - set up an open-source repo for growth
37
+
38
+ ## Workflow
39
+
40
+ 1. Inspect the project first:
41
+ - product purpose
42
+ - target user
43
+ - core use case
44
+ - current README and docs
45
+ - install or demo path
46
+ - screenshots, videos, or visual proof
47
+ - analytics or waitlist capture if present
48
+ 2. Define the launch angle in one sentence:
49
+ - who it is for
50
+ - what painful job it solves
51
+ - why now
52
+ - what makes it different
53
+ 3. Make the repo launch-ready:
54
+ - clear README headline and first paragraph
55
+ - demo or quickstart within the first screen
56
+ - installation steps that work from a clean checkout
57
+ - screenshots, GIF, or demo link where possible
58
+ - feature list based on outcomes, not implementation trivia
59
+ - examples for the highest-intent use cases
60
+ - badges only when they add trust
61
+ - license, contributing notes, and issue templates when useful
62
+ 4. Create launch assets:
63
+ - short tagline
64
+ - 1-paragraph announcement
65
+ - 5 social post variants
66
+ - Product Hunt tagline and description when relevant
67
+ - Hacker News title candidates when relevant
68
+ - launch email or DM when relevant
69
+ - creator/influencer outreach list criteria, not spam copy
70
+ 5. Design share loops:
71
+ - a reason users would show the output to someone else
72
+ - a public artifact worth linking
73
+ - a before/after demo
74
+ - a template, benchmark, checklist, or gallery that can travel
75
+ - referral or waitlist loop only if it fits the product
76
+ 6. Define proof and metrics:
77
+ - activation event
78
+ - share event
79
+ - conversion event
80
+ - retention proxy
81
+ - launch-day dashboard or simple tracking checklist
82
+ 7. Keep claims grounded:
83
+ - do not invent traction, logos, benchmarks, testimonials, or user counts
84
+ - mark assumptions explicitly
85
+ - prefer specific proof over hype
86
+ - avoid dark patterns and spam
87
+
88
+ ## Output format
89
+
90
+ When planning, produce:
91
+
92
+ - Launch angle
93
+ - Repo changes
94
+ - Launch assets
95
+ - Share loops
96
+ - Metrics
97
+ - Risks and assumptions
98
+ - Next actions
99
+
100
+ When editing a repository, make the smallest useful set of changes first, then validate by reading the README from a new user's perspective.
101
+
102
+ ## References
103
+
104
+ - `references/launch-checklist.md`
105
+ - `references/external-skills.md`
@@ -0,0 +1,6 @@
1
+ {
2
+ "name": "olko:fill-music-player",
3
+ "version": "0.1.0",
4
+ "description": "Fill a portable music player with a curated random selection from a source music library while balancing formats, artists, albums, and capacity.",
5
+ "skills": "skills/"
6
+ }