@olegkoval/agent-skills 1.5.1 → 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 (125) hide show
  1. package/.claude-plugin/plugin.json +3 -2
  2. package/.cursor-plugin/index.json +5 -0
  3. package/.kiro/steering/add-to-my-skills.md +78 -0
  4. package/.kiro/steering/ai-tools-setup.md +263 -0
  5. package/.kiro/steering/changelog-generator.md +106 -0
  6. package/.kiro/steering/cloudflare-block-countries.md +167 -0
  7. package/.kiro/steering/docs-index-keeper.md +53 -0
  8. package/.kiro/steering/fill-music-player.md +101 -0
  9. package/.kiro/steering/gallery.md +228 -0
  10. package/.kiro/steering/gh-cli.md +2190 -0
  11. package/.kiro/steering/git-commit.md +125 -0
  12. package/.kiro/steering/open-source-publisher.md +427 -0
  13. package/.kiro/steering/product-builder.md +213 -0
  14. package/.kiro/steering/promptctl.md +81 -0
  15. package/.kiro/steering/search-console-indexing-audit.md +57 -0
  16. package/.kiro/steering/semantic-release-beta.md +48 -0
  17. package/.kiro/steering/starter-rules.md +62 -0
  18. package/.kiro/steering/viral-launch.md +92 -0
  19. package/.windsurf/rules/add-to-my-skills.md +77 -0
  20. package/.windsurf/rules/ai-tools-setup.md +262 -0
  21. package/.windsurf/rules/changelog-generator.md +105 -0
  22. package/.windsurf/rules/cloudflare-block-countries.md +166 -0
  23. package/.windsurf/rules/docs-index-keeper.md +52 -0
  24. package/.windsurf/rules/fill-music-player.md +100 -0
  25. package/.windsurf/rules/gallery.md +227 -0
  26. package/.windsurf/rules/gh-cli.md +2189 -0
  27. package/.windsurf/rules/git-commit.md +124 -0
  28. package/.windsurf/rules/open-source-publisher.md +426 -0
  29. package/.windsurf/rules/product-builder.md +212 -0
  30. package/.windsurf/rules/promptctl.md +80 -0
  31. package/.windsurf/rules/search-console-indexing-audit.md +56 -0
  32. package/.windsurf/rules/semantic-release-beta.md +47 -0
  33. package/.windsurf/rules/starter-rules.md +61 -0
  34. package/.windsurf/rules/viral-launch.md +91 -0
  35. package/README.md +67 -14
  36. package/catalog/skills.json +67 -15
  37. package/docs/skill-anatomy.md +10 -6
  38. package/package.json +3 -1
  39. package/packages/marketing/search-console-indexing-audit/SKILL.md +3 -0
  40. package/packages/marketing/search-console-indexing-audit/adapters/claude/skills/search-console-indexing-audit/SKILL.md +3 -0
  41. package/packages/marketing/search-console-indexing-audit/adapters/cursor/plugin.json +1 -1
  42. package/packages/marketing/search-console-indexing-audit/adapters/cursor/skills/search-console-indexing-audit/SKILL.md +3 -0
  43. package/packages/marketing/search-console-indexing-audit/adapters/kiro/steering/search-console-indexing-audit.md +57 -0
  44. package/packages/marketing/search-console-indexing-audit/adapters/windsurf/rules/search-console-indexing-audit.md +56 -0
  45. package/packages/marketing/viral-launch/SKILL.md +3 -1
  46. package/packages/marketing/viral-launch/adapters/claude/skills/viral-launch/SKILL.md +3 -1
  47. package/packages/marketing/viral-launch/adapters/cursor/skills/viral-launch/SKILL.md +3 -1
  48. package/packages/marketing/viral-launch/adapters/kiro/steering/viral-launch.md +92 -0
  49. package/packages/marketing/viral-launch/adapters/windsurf/rules/viral-launch.md +91 -0
  50. package/packages/music/fill-music-player/SKILL.md +2 -1
  51. package/packages/music/fill-music-player/adapters/claude/skills/fill-music-player/SKILL.md +2 -1
  52. package/packages/music/fill-music-player/adapters/cursor/plugin.json +1 -1
  53. package/packages/music/fill-music-player/adapters/cursor/skills/fill-music-player/SKILL.md +2 -1
  54. package/packages/music/fill-music-player/adapters/kiro/steering/fill-music-player.md +101 -0
  55. package/packages/music/fill-music-player/adapters/windsurf/rules/fill-music-player.md +100 -0
  56. package/packages/photography/gallery/SKILL.md +3 -1
  57. package/packages/photography/gallery/adapters/claude/skills/gallery/SKILL.md +3 -1
  58. package/packages/photography/gallery/adapters/cursor/skills/gallery/SKILL.md +3 -1
  59. package/packages/photography/gallery/adapters/kiro/steering/gallery.md +228 -0
  60. package/packages/photography/gallery/adapters/windsurf/rules/gallery.md +227 -0
  61. package/packages/software-development/add-to-my-skills/SKILL.md +2 -1
  62. package/packages/software-development/add-to-my-skills/adapters/claude/skills/add-to-my-skills/SKILL.md +2 -1
  63. package/packages/software-development/add-to-my-skills/adapters/cursor/skills/add-to-my-skills/SKILL.md +2 -1
  64. package/packages/software-development/add-to-my-skills/adapters/kiro/steering/add-to-my-skills.md +78 -0
  65. package/packages/software-development/add-to-my-skills/adapters/windsurf/rules/add-to-my-skills.md +77 -0
  66. package/packages/software-development/ai-tools-setup/adapters/kiro/steering/ai-tools-setup.md +263 -0
  67. package/packages/software-development/ai-tools-setup/adapters/windsurf/rules/ai-tools-setup.md +262 -0
  68. package/packages/software-development/changelog-generator/SKILL.md +3 -1
  69. package/packages/software-development/changelog-generator/adapters/claude/skills/changelog-generator/SKILL.md +3 -1
  70. package/packages/software-development/changelog-generator/adapters/cursor/skills/changelog-generator/SKILL.md +3 -1
  71. package/packages/software-development/changelog-generator/adapters/kiro/steering/changelog-generator.md +106 -0
  72. package/packages/software-development/changelog-generator/adapters/windsurf/rules/changelog-generator.md +105 -0
  73. package/packages/software-development/cloudflare-block-countries/SKILL.md +175 -0
  74. package/packages/software-development/cloudflare-block-countries/adapters/claude/plugin.json +5 -0
  75. package/packages/software-development/cloudflare-block-countries/adapters/claude/skills/cloudflare-block-countries/SKILL.md +177 -0
  76. package/packages/software-development/cloudflare-block-countries/adapters/codex/README.md +3 -0
  77. package/packages/software-development/cloudflare-block-countries/adapters/cursor/plugin.json +6 -0
  78. package/packages/software-development/cloudflare-block-countries/adapters/cursor/skills/cloudflare-block-countries/SKILL.md +177 -0
  79. package/packages/software-development/cloudflare-block-countries/adapters/kiro/steering/cloudflare-block-countries.md +167 -0
  80. package/packages/software-development/cloudflare-block-countries/adapters/windsurf/rules/cloudflare-block-countries.md +166 -0
  81. package/packages/software-development/docs-index-keeper/SKILL.md +2 -1
  82. package/packages/software-development/docs-index-keeper/adapters/claude/skills/docs-index-keeper/SKILL.md +2 -1
  83. package/packages/software-development/docs-index-keeper/adapters/cursor/plugin.json +1 -1
  84. package/packages/software-development/docs-index-keeper/adapters/cursor/skills/docs-index-keeper/SKILL.md +2 -1
  85. package/packages/software-development/docs-index-keeper/adapters/kiro/steering/docs-index-keeper.md +53 -0
  86. package/packages/software-development/docs-index-keeper/adapters/windsurf/rules/docs-index-keeper.md +52 -0
  87. package/packages/software-development/gh-cli/SKILL.md +3 -1
  88. package/packages/software-development/gh-cli/adapters/claude/skills/gh-cli/SKILL.md +3 -1
  89. package/packages/software-development/gh-cli/adapters/cursor/skills/gh-cli/SKILL.md +3 -1
  90. package/packages/software-development/gh-cli/adapters/kiro/steering/gh-cli.md +2190 -0
  91. package/packages/software-development/gh-cli/adapters/windsurf/rules/gh-cli.md +2189 -0
  92. package/packages/software-development/git-commit/SKILL.md +1 -1
  93. package/packages/software-development/git-commit/adapters/claude/skills/git-commit/SKILL.md +1 -1
  94. package/packages/software-development/git-commit/adapters/cursor/skills/git-commit/SKILL.md +1 -1
  95. package/packages/software-development/git-commit/adapters/kiro/steering/git-commit.md +125 -0
  96. package/packages/software-development/git-commit/adapters/windsurf/rules/git-commit.md +124 -0
  97. package/packages/software-development/open-source-publisher/SKILL.md +2 -1
  98. package/packages/software-development/open-source-publisher/adapters/claude/skills/open-source-publisher/SKILL.md +2 -1
  99. package/packages/software-development/open-source-publisher/adapters/cursor/skills/open-source-publisher/SKILL.md +2 -1
  100. package/packages/software-development/open-source-publisher/adapters/kiro/steering/open-source-publisher.md +427 -0
  101. package/packages/software-development/open-source-publisher/adapters/windsurf/rules/open-source-publisher.md +426 -0
  102. package/packages/software-development/product-builder/SKILL.md +2 -1
  103. package/packages/software-development/product-builder/adapters/claude/skills/product-builder/SKILL.md +2 -1
  104. package/packages/software-development/product-builder/adapters/cursor/plugin.json +1 -1
  105. package/packages/software-development/product-builder/adapters/cursor/skills/product-builder/SKILL.md +2 -1
  106. package/packages/software-development/product-builder/adapters/kiro/steering/product-builder.md +213 -0
  107. package/packages/software-development/product-builder/adapters/windsurf/rules/product-builder.md +212 -0
  108. package/packages/software-development/promptctl/SKILL.md +3 -1
  109. package/packages/software-development/promptctl/adapters/claude/skills/promptctl/SKILL.md +3 -1
  110. package/packages/software-development/promptctl/adapters/cursor/skills/promptctl/SKILL.md +3 -1
  111. package/packages/software-development/promptctl/adapters/kiro/steering/promptctl.md +81 -0
  112. package/packages/software-development/promptctl/adapters/windsurf/rules/promptctl.md +80 -0
  113. package/packages/software-development/semantic-release-beta/SKILL.md +3 -1
  114. package/packages/software-development/semantic-release-beta/adapters/claude/skills/semantic-release-beta/SKILL.md +3 -1
  115. package/packages/software-development/semantic-release-beta/adapters/cursor/skills/semantic-release-beta/SKILL.md +3 -1
  116. package/packages/software-development/semantic-release-beta/adapters/kiro/steering/semantic-release-beta.md +48 -0
  117. package/packages/software-development/semantic-release-beta/adapters/windsurf/rules/semantic-release-beta.md +47 -0
  118. package/packages/software-development/starter-rules/SKILL.md +2 -1
  119. package/packages/software-development/starter-rules/adapters/claude/skills/starter-rules/SKILL.md +2 -1
  120. package/packages/software-development/starter-rules/adapters/cursor/plugin.json +3 -2
  121. package/packages/software-development/starter-rules/adapters/cursor/skills/starter-rules/SKILL.md +2 -1
  122. package/packages/software-development/starter-rules/adapters/kiro/steering/starter-rules.md +62 -0
  123. package/packages/software-development/starter-rules/adapters/windsurf/rules/starter-rules.md +61 -0
  124. package/scripts/build-adapters.sh +97 -8
  125. package/scripts/validate-catalog.sh +4 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "olko-agent-skills",
3
3
  "description": "Agent-agnostic skill catalog for Codex, Claude, Cursor, and other skill-aware tools.",
4
- "version": "1.5.0",
4
+ "version": "1.6.0",
5
5
  "author": {
6
6
  "name": "Oleg Koval"
7
7
  },
@@ -23,6 +23,7 @@
23
23
  "./packages/software-development/starter-rules",
24
24
  "./packages/software-development/open-source-publisher",
25
25
  "./packages/marketing/viral-launch",
26
- "./packages/marketing/search-console-indexing-audit"
26
+ "./packages/marketing/search-console-indexing-audit",
27
+ "./packages/software-development/cloudflare-block-countries"
27
28
  ]
28
29
  }
@@ -75,6 +75,11 @@
75
75
  "name": "olko:search-console-indexing-audit",
76
76
  "source": "./packages/marketing/search-console-indexing-audit/adapters/cursor",
77
77
  "description": "Analyze Google Search Console Coverage CSV exports and correlate them with sitemap, robots, canonical, redirect, and noindex signals."
78
+ },
79
+ {
80
+ "name": "olko:cloudflare-block-countries",
81
+ "source": "./packages/software-development/cloudflare-block-countries/adapters/cursor",
82
+ "description": "Block specific countries via Cloudflare WAF Custom Rules using the Cloudflare API. Handles creating new rulesets and updating existing ones across single or multiple zones."
78
83
  }
79
84
  ]
80
85
  }
@@ -0,0 +1,78 @@
1
+ <!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
2
+
3
+ ---
4
+ inclusion: manual
5
+ description: "Copy a newly created skill into this catalog, refresh manifests, and publish the change."
6
+ ---
7
+
8
+
9
+ # Add to My Skills
10
+
11
+ Use this skill when a skill was created in another repository and needs to be copied into this catalog as a first-class package.
12
+
13
+ ## Outcome
14
+
15
+ Bring the source skill into `packages/software-development/`, register it in the catalog, refresh generated docs and adapters, and publish the change with a git commit and push.
16
+
17
+ ## When to Use
18
+
19
+ - The user created a new `SKILL.md` in another repo and wants it added here
20
+ - The user wants this catalog to become the canonical home for that skill
21
+ - The user wants the README, generated manifests, commit, and push handled in one pass
22
+
23
+ ## Clarify Before Acting
24
+
25
+ If any of these are unclear, ask up to 3 questions in one batch before editing:
26
+
27
+ - Source repo or source skill path
28
+ - Final skill name if it should differ from the source
29
+ - Destination branch or remote if the push target is unclear
30
+
31
+ Default assumptions when not specified:
32
+
33
+ - Copy the source skill as a new canonical package in `packages/software-development/<skill-name>/`
34
+ - Keep the source skill name unless the user asks to rename it
35
+ - Use this repository as the destination
36
+ - Commit with a conventional commit message and push to the current branch's upstream
37
+
38
+ ## Workflow
39
+
40
+ 1. Inspect the source skill:
41
+ - locate the source `SKILL.md`
42
+ - copy any supporting `references/`, `scripts/`, or `assets/` files that the skill needs
43
+ - note any repo-specific assumptions that need to be rewritten for this catalog
44
+ 2. Choose the package location:
45
+ - default to `packages/software-development/<skill-name>/`
46
+ - ensure the package directory name matches the `name` frontmatter value
47
+ 3. Create or update the canonical package:
48
+ - write `SKILL.md` first
49
+ - keep the frontmatter accurate and concise
50
+ - make the workflow explicit, actionable, and self-contained
51
+ 4. Register the package in the repository inventory:
52
+ - add the package to `catalog/skills.json`
53
+ - add it to the appropriate collection file if it belongs in a bundle
54
+ - update `README.md` so the package list, counts, and usage examples stay current
55
+ 5. Refresh generated outputs:
56
+ - run `./scripts/build-adapters.sh`
57
+ - run `./scripts/validate-catalog.sh`
58
+ 6. Verify the new package actually exists:
59
+ - confirm `packages/software-development/<skill-name>/SKILL.md`
60
+ - confirm generated adapter files and prompt files were created
61
+ 7. Commit and push:
62
+ - inspect `git status`
63
+ - commit the change with a conventional message
64
+ - push to the current upstream branch
65
+
66
+ ## Git Safety
67
+
68
+ - Never overwrite unrelated changes
69
+ - Never force push unless the user explicitly asks
70
+ - Never commit secrets copied from the source repo
71
+ - If the source skill is incomplete or ambiguous, stop and ask for clarification instead of guessing
72
+
73
+ ## Verification
74
+
75
+ - `./scripts/build-adapters.sh` completes successfully
76
+ - `./scripts/validate-catalog.sh` passes
77
+ - `git status` shows only the intended package, catalog, README, and generated files
78
+ - `git push` succeeds to the expected remote
@@ -0,0 +1,263 @@
1
+ <!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
2
+
3
+ ---
4
+ inclusion: manual
5
+ description: "Install, repair, and measure the RTK+ICM+Vox AI development toolkit. Fixes missing hooks and MCP config, and shows a weekly effectiveness digest of token savings and memory health."
6
+ ---
7
+
8
+
9
+ # AI Tools Setup — RTK + ICM + Vox
10
+
11
+ Install, repair, and measure the RTK+ICM+Vox toolkit for Claude Code.
12
+
13
+ ## What This Skill Does
14
+
15
+ | Mode | When to use |
16
+ |------|-------------|
17
+ | **Setup** | First install on a new machine |
18
+ | **Repair** | Something broke — hooks missing, MCP not loading |
19
+ | **Digest** | Weekly check: token savings, memory health, voice stats |
20
+
21
+ ## Tools in the Bundle
22
+
23
+ | Tool | Version | Purpose |
24
+ |------|---------|---------|
25
+ | **RTK** | latest | Compresses CLI output by ~89% before it reaches the model |
26
+ | **ICM** | latest | Persistent SQLite memory across sessions (knowledge graph + hybrid search) |
27
+ | **Vox** | latest | Spoken task notifications via local TTS — zero API calls |
28
+
29
+ ---
30
+
31
+ ## Step 1: Detect Current State
32
+
33
+ Run this to see what is installed and what is missing:
34
+
35
+ ```bash
36
+ echo "=== Binary check ===" && \
37
+ (rtk --version 2>/dev/null && echo "RTK: ok") || echo "RTK: MISSING" && \
38
+ (icm --version 2>/dev/null && echo "ICM: ok") || echo "ICM: MISSING" && \
39
+ (vox --version 2>/dev/null && echo "Vox: ok") || echo "Vox: MISSING"
40
+
41
+ echo "=== RTK hook ===" && \
42
+ grep -c '"rtk hook claude"' ~/.claude/settings.json 2>/dev/null \
43
+ && echo "RTK hook: ok" || echo "RTK hook: MISSING"
44
+
45
+ echo "=== ICM hooks ===" && \
46
+ grep -c '"icm hook' ~/.claude/settings.json 2>/dev/null \
47
+ && echo "ICM hooks: ok" || echo "ICM hooks: MISSING"
48
+
49
+ echo "=== ICM MCP ===" && \
50
+ python3 -c "import json; d=json.load(open(open('$HOME/.claude.json').name)); print('ICM MCP: ok' if 'icm' in d.get('mcpServers',{}) else 'ICM MCP: MISSING')" 2>/dev/null || echo "ICM MCP: MISSING"
51
+
52
+ echo "=== Vox MCP ===" && \
53
+ python3 -c "import json; d=json.load(open(open('$HOME/.claude.json').name)); print('Vox MCP: ok' if 'vox' in d.get('mcpServers',{}) else 'Vox MCP: MISSING')" 2>/dev/null || echo "Vox MCP: MISSING"
54
+
55
+ echo "=== ICM CLAUDE.md ===" && \
56
+ grep -c 'icm:start' ~/.claude/CLAUDE.md 2>/dev/null \
57
+ && echo "ICM CLAUDE.md: ok" || echo "ICM CLAUDE.md: MISSING"
58
+ ```
59
+
60
+ Read the output and determine which of the following repair steps are needed.
61
+
62
+ ---
63
+
64
+ ## Step 2: Install Missing Binaries
65
+
66
+ Only run for tools that showed MISSING above.
67
+
68
+ **RTK:**
69
+ ```bash
70
+ brew install rtk
71
+ rtk --version
72
+ ```
73
+
74
+ **ICM:**
75
+ ```bash
76
+ brew install rtk-ai/tap/icm
77
+ icm --version
78
+ ```
79
+
80
+ **Vox:**
81
+ ```bash
82
+ brew install rtk-ai/tap/vox
83
+ vox --version
84
+ ```
85
+
86
+ ---
87
+
88
+ ## Step 3: Repair Hooks
89
+
90
+ ### RTK hook missing
91
+
92
+ Add the `PreToolUse` RTK hook to `~/.claude/settings.json`. Read the file first, then add inside the existing `"hooks"` block (or create one):
93
+
94
+ ```json
95
+ "PreToolUse": [
96
+ {
97
+ "matcher": "Bash",
98
+ "hooks": [{ "type": "command", "command": "rtk hook claude" }]
99
+ }
100
+ ]
101
+ ```
102
+
103
+ Then verify: `grep -c '"rtk hook claude"' ~/.claude/settings.json`
104
+
105
+ ### ICM hooks missing
106
+
107
+ Run:
108
+ ```bash
109
+ icm init --mode hook
110
+ ```
111
+
112
+ This adds `PreToolUse`, `PostToolUse`, `PreCompact`, `UserPromptSubmit`, `SessionStart`, `SessionEnd` hooks automatically.
113
+
114
+ ### Vox Stop hook missing
115
+
116
+ Run:
117
+ ```bash
118
+ vox init --mode cli
119
+ ```
120
+
121
+ ---
122
+
123
+ ## Step 4: Repair MCP Servers
124
+
125
+ ### ICM MCP missing
126
+
127
+ ```bash
128
+ icm init --mode mcp
129
+ ```
130
+
131
+ ### Vox MCP missing
132
+
133
+ ```bash
134
+ vox init --mode mcp
135
+ ```
136
+
137
+ Verify both by checking `~/.claude.json`:
138
+ ```bash
139
+ python3 -c "import json; d=json.load(open('$HOME/.claude.json')); print(list(d.get('mcpServers',{}).keys()))"
140
+ ```
141
+
142
+ ---
143
+
144
+ ## Step 5: Repair CLAUDE.md Instructions
145
+
146
+ If ICM instructions are missing from `~/.claude/CLAUDE.md`:
147
+
148
+ ```bash
149
+ icm init --mode cli
150
+ ```
151
+
152
+ Then move the block from wherever `icm init` placed it into `~/.claude/CLAUDE.md` (the global file), and remove it from any project-local files.
153
+
154
+ ---
155
+
156
+ ## Step 6: Effectiveness Digest
157
+
158
+ Run this report to see how the toolkit is performing. Good to run weekly.
159
+
160
+ ```bash
161
+ echo "=============================="
162
+ echo " AI TOOLS EFFECTIVENESS"
163
+ echo "=============================="
164
+ echo ""
165
+ echo "--- RTK: Token Savings ---"
166
+ rtk gain 2>/dev/null || echo "No data yet (run some commands first)"
167
+ echo ""
168
+ echo "--- ICM: Memory Health ---"
169
+ icm health 2>/dev/null || echo "No memories yet"
170
+ echo ""
171
+ echo "--- ICM: Topics ---"
172
+ icm topics 2>/dev/null || echo "No topics yet"
173
+ echo ""
174
+ echo "--- Vox: Usage ---"
175
+ vox stats 2>/dev/null || echo "No stats yet"
176
+ echo ""
177
+ echo "=============================="
178
+ ```
179
+
180
+ ### What healthy output looks like
181
+
182
+ - **RTK**: `Tokens saved: 5M+ (85%+)` across `500+ commands` — if savings are low, run `rtk discover` to find uncovered commands
183
+ - **ICM**: Topics like `decisions-*`, `errors-resolved`, `preferences` with recent timestamps — if empty, start storing manually with `icm store`
184
+ - **Vox**: Non-zero speak count means the Stop hook fired
185
+
186
+ ---
187
+
188
+ ## Step 7 (Optional): Schedule a Weekly Digest
189
+
190
+ To get a weekly automated report without having to remember to run this skill:
191
+
192
+ ```bash
193
+ # Create a weekly digest script
194
+ cat > ~/ai-tools-digest.sh << 'EOF'
195
+ #!/bin/bash
196
+ echo "=== Weekly AI Tools Digest — $(date) ===" | tee -a ~/ai-tools-digest.log
197
+ echo "" | tee -a ~/ai-tools-digest.log
198
+ rtk gain 2>/dev/null | tee -a ~/ai-tools-digest.log
199
+ echo "" | tee -a ~/ai-tools-digest.log
200
+ icm health 2>/dev/null | tee -a ~/ai-tools-digest.log
201
+ echo "" | tee -a ~/ai-tools-digest.log
202
+ icm topics 2>/dev/null | tee -a ~/ai-tools-digest.log
203
+ # Speak the summary if Vox is available
204
+ vox "Weekly digest complete. Check your log." 2>/dev/null || true
205
+ EOF
206
+ chmod +x ~/ai-tools-digest.sh
207
+ ```
208
+
209
+ Then set up a weekly launchd job (macOS):
210
+
211
+ ```bash
212
+ cat > ~/Library/LaunchAgents/com.oleg.ai-tools-digest.plist << 'EOF'
213
+ <?xml version="1.0" encoding="UTF-8"?>
214
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
215
+ <plist version="1.0">
216
+ <dict>
217
+ <key>Label</key>
218
+ <string>com.oleg.ai-tools-digest</string>
219
+ <key>ProgramArguments</key>
220
+ <array>
221
+ <string>/bin/bash</string>
222
+ <string>/Users/oleg.koval/ai-tools-digest.sh</string>
223
+ </array>
224
+ <key>StartCalendarInterval</key>
225
+ <dict>
226
+ <key>Weekday</key>
227
+ <integer>1</integer>
228
+ <key>Hour</key>
229
+ <integer>9</integer>
230
+ <key>Minute</key>
231
+ <integer>0</integer>
232
+ </dict>
233
+ <key>StandardOutPath</key>
234
+ <string>/tmp/ai-tools-digest.log</string>
235
+ <key>StandardErrorPath</key>
236
+ <string>/tmp/ai-tools-digest.err</string>
237
+ </dict>
238
+ </plist>
239
+ EOF
240
+
241
+ launchctl load ~/Library/LaunchAgents/com.oleg.ai-tools-digest.plist
242
+ echo "Weekly digest scheduled for Mondays at 9am"
243
+ ```
244
+
245
+ To view the digest log anytime: `cat ~/ai-tools-digest.log`
246
+
247
+ To unload: `launchctl unload ~/Library/LaunchAgents/com.oleg.ai-tools-digest.plist`
248
+
249
+ ---
250
+
251
+ ## Quick Reference
252
+
253
+ | Command | What it does |
254
+ |---------|-------------|
255
+ | `rtk gain` | Total tokens saved to date |
256
+ | `rtk discover` | Find commands not yet covered by RTK |
257
+ | `icm topics` | List all memory topic buckets |
258
+ | `icm health` | Memory hygiene — stale, redundant, decay stats |
259
+ | `icm recall "query"` | Search memories semantically |
260
+ | `icm store -t topic -c "content" -i high` | Store a memory manually |
261
+ | `vox "text"` | Speak text immediately |
262
+ | `vox stats` | Usage stats for the Vox backend |
263
+ | `cat ~/ai-tools-digest.log` | View scheduled digest history |
@@ -0,0 +1,106 @@
1
+ <!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
2
+
3
+ ---
4
+ inclusion: manual
5
+ description: "Generate user-facing changelogs and release notes from git history."
6
+ ---
7
+
8
+
9
+ # Changelog Generator
10
+
11
+ This skill transforms technical git commits into polished, user-friendly changelogs that your customers and users will actually understand and appreciate.
12
+
13
+ ## When to Use This Skill
14
+
15
+ - Preparing release notes for a new version
16
+ - Creating weekly or monthly product update summaries
17
+ - Documenting changes for customers
18
+ - Writing changelog entries for app store submissions
19
+ - Generating update notifications
20
+ - Creating internal release documentation
21
+ - Maintaining a public changelog/product updates page
22
+
23
+ ## What This Skill Does
24
+
25
+ 1. **Scans Git History**: Analyzes commits from a specific time period or between versions
26
+ 2. **Categorizes Changes**: Groups commits into logical categories (features, improvements, bug fixes, breaking changes, security)
27
+ 3. **Translates Technical → User-Friendly**: Converts developer commits into customer language
28
+ 4. **Formats Professionally**: Creates clean, structured changelog entries
29
+ 5. **Filters Noise**: Excludes internal commits (refactoring, tests, etc.)
30
+ 6. **Follows Best Practices**: Applies changelog guidelines and your brand voice
31
+
32
+ ## How to Use
33
+
34
+ ### Basic Usage
35
+
36
+ From your project repository:
37
+
38
+ ```
39
+ Create a changelog from commits since last release
40
+ ```
41
+
42
+ ```
43
+ Generate changelog for all commits from the past week
44
+ ```
45
+
46
+ ```
47
+ Create release notes for version 2.5.0
48
+ ```
49
+
50
+ ### With Specific Date Range
51
+
52
+ ```
53
+ Create a changelog for all commits between March 1 and March 15
54
+ ```
55
+
56
+ ### With Custom Guidelines
57
+
58
+ ```
59
+ Create a changelog for commits since v2.4.0, using my changelog
60
+ guidelines from CHANGELOG_STYLE.md
61
+ ```
62
+
63
+ ## Example
64
+
65
+ **User**: "Create a changelog for commits from the past 7 days"
66
+
67
+ **Output**:
68
+ ```markdown
69
+ # Updates - Week of March 10, 2024
70
+
71
+ ## ✨ New Features
72
+
73
+ - **Team Workspaces**: Create separate workspaces for different
74
+ projects. Invite team members and keep everything organized.
75
+
76
+ - **Keyboard Shortcuts**: Press ? to see all available shortcuts.
77
+ Navigate faster without touching your mouse.
78
+
79
+ ## 🔧 Improvements
80
+
81
+ - **Faster Sync**: Files now sync 2x faster across devices
82
+ - **Better Search**: Search now includes file contents, not just titles
83
+
84
+ ## 🐛 Fixes
85
+
86
+ - Fixed issue where large images wouldn't upload
87
+ - Resolved timezone confusion in scheduled posts
88
+ - Corrected notification badge count
89
+ ```
90
+
91
+ **Inspired by:** Manik Aggarwal's use case from Lenny's Newsletter
92
+
93
+ ## Tips
94
+
95
+ - Run from your git repository root
96
+ - Specify date ranges for focused changelogs
97
+ - Use your CHANGELOG_STYLE.md for consistent formatting
98
+ - Review and adjust the generated changelog before publishing
99
+ - Save output directly to CHANGELOG.md
100
+
101
+ ## Related Use Cases
102
+
103
+ - Creating GitHub release notes
104
+ - Writing app store update descriptions
105
+ - Generating email updates for users
106
+ - Creating social media announcement posts
@@ -0,0 +1,167 @@
1
+ <!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
2
+
3
+ ---
4
+ inclusion: manual
5
+ description: "Block specific countries via Cloudflare WAF Custom Rules using the Cloudflare API. Handles creating new rulesets and updating existing ones across single or multiple zones."
6
+ ---
7
+
8
+
9
+ # Cloudflare Country Block via WAF Custom Rules
10
+
11
+ Block traffic from specific countries using Cloudflare WAF Custom Rules and the Cloudflare API.
12
+
13
+ ## Prerequisites
14
+
15
+ - Cloudflare API Token with `Zone:Rulesets:Edit` permission
16
+ - Zone ID for the target domain
17
+ - `curl` and `jq` installed
18
+
19
+ ## Workflow
20
+
21
+ ### 1. Get Zone IDs
22
+
23
+ ```bash
24
+ curl -s -X GET \
25
+ "https://api.cloudflare.com/client/v4/zones?account.id=YOUR_ACCOUNT_ID&status=active" \
26
+ -H "Authorization: Bearer YOUR_API_TOKEN" \
27
+ -H "Content-Type: application/json" | jq '.result[] | {name: .name, id: .id}'
28
+ ```
29
+
30
+ ### 2. Check Existing Custom Firewall Rulesets
31
+
32
+ ```bash
33
+ curl -s -X GET \
34
+ "https://api.cloudflare.com/client/v4/zones/YOUR_ZONE_ID/rulesets" \
35
+ -H "Authorization: Bearer YOUR_API_TOKEN" \
36
+ -H "Content-Type: application/json" | \
37
+ jq '.result[] | select(.phase == "http_request_firewall_custom")'
38
+ ```
39
+
40
+ If the output is empty — no existing ruleset. Go to **3a**. If a ruleset exists, note its `id` and go to **3b**.
41
+
42
+ ### 3a. Create NEW Ruleset with Block Rule
43
+
44
+ ```bash
45
+ curl -s -X POST \
46
+ "https://api.cloudflare.com/client/v4/zones/YOUR_ZONE_ID/rulesets" \
47
+ -H "Authorization: Bearer YOUR_API_TOKEN" \
48
+ -H "Content-Type: application/json" \
49
+ --data '{
50
+ "name": "default",
51
+ "description": "WAF Custom Rules",
52
+ "kind": "zone",
53
+ "phase": "http_request_firewall_custom",
54
+ "rules": [
55
+ {
56
+ "action": "block",
57
+ "description": "Block traffic from sanctioned countries",
58
+ "enabled": true,
59
+ "expression": "(ip.src.country in {\"RU\" \"BY\" \"IR\" \"KP\"})"
60
+ }
61
+ ]
62
+ }' | jq '.success'
63
+ ```
64
+
65
+ ### 3b. Update EXISTING Ruleset
66
+
67
+ ```bash
68
+ curl -s -X PUT \
69
+ "https://api.cloudflare.com/client/v4/zones/YOUR_ZONE_ID/rulesets/RULESET_ID" \
70
+ -H "Authorization: Bearer YOUR_API_TOKEN" \
71
+ -H "Content-Type: application/json" \
72
+ --data '{
73
+ "description": "WAF Custom Rules",
74
+ "rules": [
75
+ {
76
+ "action": "block",
77
+ "description": "Block traffic from sanctioned countries",
78
+ "enabled": true,
79
+ "expression": "(ip.src.country in {\"RU\" \"BY\" \"IR\" \"KP\"})"
80
+ }
81
+ ]
82
+ }' | jq '.success'
83
+ ```
84
+
85
+ ### 4. Verify the Rule is Active
86
+
87
+ ```bash
88
+ curl -s -X GET \
89
+ "https://api.cloudflare.com/client/v4/zones/YOUR_ZONE_ID/rulesets/RULESET_ID" \
90
+ -H "Authorization: Bearer YOUR_API_TOKEN" \
91
+ -H "Content-Type: application/json" | jq '.result.rules'
92
+ ```
93
+
94
+ ## Country Codes Reference
95
+
96
+ | Code | Country |
97
+ |------|---------|
98
+ | `RU` | Russia |
99
+ | `BY` | Belarus |
100
+ | `IR` | Iran |
101
+ | `KP` | North Korea |
102
+ | `CN` | China |
103
+ | `CU` | Cuba |
104
+ | `SY` | Syria |
105
+ | `VE` | Venezuela |
106
+
107
+ ## WAF Expression Examples
108
+
109
+ ```
110
+ # Block multiple countries
111
+ (ip.src.country in {"RU" "BY" "IR" "KP"})
112
+
113
+ # Block country + specific ASN
114
+ (ip.src.country eq "RU") or (ip.geoip.asnum eq 12345)
115
+
116
+ # Block all except allowlisted IPs
117
+ (ip.src.country in {"RU" "BY"}) and not (ip.src in {1.2.3.4/32})
118
+ ```
119
+
120
+ ## Multi-Zone Script
121
+
122
+ To apply the same block rule across multiple zones:
123
+
124
+ ```bash
125
+ #!/usr/bin/env bash
126
+ API_TOKEN="YOUR_API_TOKEN"
127
+ ZONES=("ZONE_ID_1" "ZONE_ID_2" "ZONE_ID_3")
128
+ EXPRESSION='(ip.src.country in {"RU" "BY" "IR" "KP"})'
129
+
130
+ for ZONE_ID in "${ZONES[@]}"; do
131
+ EXISTING=$(curl -s -X GET \
132
+ "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets" \
133
+ -H "Authorization: Bearer $API_TOKEN" \
134
+ -H "Content-Type: application/json" | \
135
+ jq -r '.result[] | select(.phase == "http_request_firewall_custom") | .id')
136
+
137
+ if [ -z "$EXISTING" ]; then
138
+ METHOD="POST"
139
+ URL="https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets"
140
+ DATA=$(jq -n --arg expr "$EXPRESSION" '{
141
+ name: "default", description: "WAF Custom Rules",
142
+ kind: "zone", phase: "http_request_firewall_custom",
143
+ rules: [{action: "block", description: "Block sanctioned countries", enabled: true, expression: $expr}]
144
+ }')
145
+ else
146
+ METHOD="PUT"
147
+ URL="https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets/$EXISTING"
148
+ DATA=$(jq -n --arg expr "$EXPRESSION" '{
149
+ description: "WAF Custom Rules",
150
+ rules: [{action: "block", description: "Block sanctioned countries", enabled: true, expression: $expr}]
151
+ }')
152
+ fi
153
+
154
+ RESULT=$(curl -s -X "$METHOD" "$URL" \
155
+ -H "Authorization: Bearer $API_TOKEN" \
156
+ -H "Content-Type: application/json" \
157
+ --data "$DATA" | jq '.success')
158
+
159
+ echo "Zone $ZONE_ID: $RESULT"
160
+ done
161
+ ```
162
+
163
+ ## Notes
164
+
165
+ - `PUT` on an existing ruleset **replaces all rules** in it. Include all rules in the payload if the ruleset already has other rules.
166
+ - WAF Custom Rules require a Cloudflare plan that supports rulesets (Free includes basic WAF; Pro/Business/Enterprise for full custom rules).
167
+ - Changes are applied globally within seconds; no cache purge needed.
@@ -0,0 +1,53 @@
1
+ <!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
2
+
3
+ ---
4
+ inclusion: manual
5
+ description: "Keep a Markdown docs index in sync through pre-commit, CI, or one-off maintenance flows."
6
+ ---
7
+
8
+
9
+ # docs-index-keeper
10
+
11
+ Use this skill when a repository keeps docs under `docs/` and needs a Markdown index table updated automatically as docs are added or changed.
12
+
13
+ ## Trigger phrases
14
+
15
+ - keep a docs index up to date
16
+ - auto-update `docs/README.md`
17
+ - add a pre-commit hook for docs indexing
18
+ - enforce docs index freshness in CI
19
+ - add a specific `docs/*.md` file into a Markdown index table
20
+
21
+ ## Workflow
22
+
23
+ 1. Confirm the repo has a docs directory and an index table such as `| Doc | Purpose |`.
24
+ 2. Install the package if it is not already present:
25
+
26
+ ```bash
27
+ npm install -D docs-index-keeper
28
+ ```
29
+
30
+ 3. Initialize the hook:
31
+
32
+ ```bash
33
+ npx docs-index-keeper init
34
+ ```
35
+
36
+ 4. For CI enforcement, run:
37
+
38
+ ```bash
39
+ npx docs-index-keeper check
40
+ ```
41
+
42
+ 5. For one-off staged maintenance, run:
43
+
44
+ ```bash
45
+ npx docs-index-keeper update
46
+ ```
47
+
48
+ ## Notes
49
+
50
+ - `update` operates on staged Markdown files.
51
+ - `check` exits non-zero when the index is missing entries for staged docs.
52
+ - Purpose text comes from the first Markdown heading when available.
53
+ - New rows are inserted before an archive sentinel row when present.