@olegkoval/agent-skills 1.42.0 → 1.42.2
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/README.md +189 -119
- package/adapters/claude/olko-creative/skills/vinted-listing/SKILL.md +7 -1
- package/adapters/claude/olko-git-tools/skills/gh-cli/SKILL.md +7 -1
- package/adapters/claude/olko-product/skills/viral-launch/SKILL.md +6 -2
- package/adapters/claude/olko-reflection/skills/agent-ops-retro/scripts/mine-transcripts.mjs +46 -16
- package/adapters/claude/olko-reflection/skills/retro-analysis/SKILL.md +7 -1
- package/adapters/claude/olko-reflection/skills/wrap-up/SKILL.md +7 -1
- package/adapters/claude/olko-release/skills/changelog-generator/SKILL.md +6 -1
- package/adapters/claude/olko-release/skills/semantic-release-beta/SKILL.md +7 -1
- package/adapters/claude/olko-skill-meta/skills/ai-tools-setup/SKILL.md +6 -1
- package/adapters/claude/olko-skill-meta/skills/promptctl/SKILL.md +6 -1
- package/adapters/claude/olko-web-ops/skills/docs-index-keeper/SKILL.md +5 -1
- package/adapters/claude/olko-web-ops/skills/website-analytics-bootstrap/SKILL.md +7 -1
- package/adapters/cursor/olko-creative/skills/vinted-listing/SKILL.md +7 -1
- package/adapters/cursor/olko-git-tools/skills/gh-cli/SKILL.md +7 -1
- package/adapters/cursor/olko-product/skills/viral-launch/SKILL.md +6 -2
- package/adapters/cursor/olko-reflection/skills/agent-ops-retro/scripts/mine-transcripts.mjs +46 -16
- package/adapters/cursor/olko-reflection/skills/retro-analysis/SKILL.md +7 -1
- package/adapters/cursor/olko-reflection/skills/wrap-up/SKILL.md +7 -1
- package/adapters/cursor/olko-release/skills/changelog-generator/SKILL.md +6 -1
- package/adapters/cursor/olko-release/skills/semantic-release-beta/SKILL.md +7 -1
- package/adapters/cursor/olko-skill-meta/skills/ai-tools-setup/SKILL.md +6 -1
- package/adapters/cursor/olko-skill-meta/skills/promptctl/SKILL.md +6 -1
- package/adapters/cursor/olko-web-ops/skills/docs-index-keeper/SKILL.md +5 -1
- package/adapters/cursor/olko-web-ops/skills/website-analytics-bootstrap/SKILL.md +7 -1
- package/adapters/grok/olko-creative/skills/vinted-listing/SKILL.md +7 -1
- package/adapters/grok/olko-git-tools/skills/gh-cli/SKILL.md +7 -1
- package/adapters/grok/olko-product/skills/viral-launch/SKILL.md +6 -2
- package/adapters/grok/olko-reflection/skills/agent-ops-retro/scripts/mine-transcripts.mjs +46 -16
- package/adapters/grok/olko-reflection/skills/retro-analysis/SKILL.md +7 -1
- package/adapters/grok/olko-reflection/skills/wrap-up/SKILL.md +7 -1
- package/adapters/grok/olko-release/skills/changelog-generator/SKILL.md +6 -1
- package/adapters/grok/olko-release/skills/semantic-release-beta/SKILL.md +7 -1
- package/adapters/grok/olko-skill-meta/skills/ai-tools-setup/SKILL.md +6 -1
- package/adapters/grok/olko-skill-meta/skills/promptctl/SKILL.md +6 -1
- package/adapters/grok/olko-web-ops/skills/docs-index-keeper/SKILL.md +5 -1
- package/adapters/grok/olko-web-ops/skills/website-analytics-bootstrap/SKILL.md +7 -1
- package/package.json +1 -1
- package/plugins/olko-apple-kit/.claude-plugin/plugin.json +1 -1
- package/plugins/olko-creative/.claude-plugin/plugin.json +1 -1
- package/plugins/olko-creative/skills/vinted-listing/SKILL.md +7 -1
- package/plugins/olko-garmin-kit/.claude-plugin/plugin.json +1 -1
- package/plugins/olko-git-tools/.claude-plugin/plugin.json +1 -1
- package/plugins/olko-git-tools/skills/gh-cli/SKILL.md +7 -1
- package/plugins/olko-github-pr/.claude-plugin/plugin.json +1 -1
- package/plugins/olko-github-pr/skills/lekker-review/workflow.js +4 -0
- package/plugins/olko-obsidian/.claude-plugin/plugin.json +1 -1
- package/plugins/olko-product/.claude-plugin/plugin.json +1 -1
- package/plugins/olko-product/skills/viral-launch/SKILL.md +6 -2
- package/plugins/olko-reflection/.claude-plugin/plugin.json +1 -1
- package/plugins/olko-reflection/skills/agent-ops-retro/scripts/mine-transcripts.mjs +46 -16
- package/plugins/olko-reflection/skills/retro-analysis/SKILL.md +7 -1
- package/plugins/olko-reflection/skills/wrap-up/SKILL.md +7 -1
- package/plugins/olko-release/.claude-plugin/plugin.json +1 -1
- package/plugins/olko-release/skills/changelog-generator/SKILL.md +6 -1
- package/plugins/olko-release/skills/semantic-release-beta/SKILL.md +7 -1
- package/plugins/olko-skill-meta/.claude-plugin/plugin.json +1 -1
- package/plugins/olko-skill-meta/skills/ai-tools-setup/SKILL.md +6 -1
- package/plugins/olko-skill-meta/skills/promptctl/SKILL.md +6 -1
- package/plugins/olko-web-ops/.claude-plugin/plugin.json +1 -1
- package/plugins/olko-web-ops/skills/docs-index-keeper/SKILL.md +5 -1
- package/plugins/olko-web-ops/skills/website-analytics-bootstrap/SKILL.md +7 -1
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: changelog-generator
|
|
3
|
-
description:
|
|
3
|
+
description: >
|
|
4
|
+
Turn git commit history into a user-facing changelog: read the commits since the last release,
|
|
5
|
+
categorise them, and rewrite technical messages as release notes a customer can actually read.
|
|
6
|
+
Use when the user asks for "a changelog", "release notes", "what changed since the last release",
|
|
7
|
+
"write the CHANGELOG entry", or is preparing a release and needs the notes written. For setting
|
|
8
|
+
up the release pipeline itself use semantic-release-beta.
|
|
4
9
|
license: MIT
|
|
5
10
|
allowed-tools: Bash, Read, Write
|
|
6
11
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires git history access in the target repository.
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: semantic-release-beta
|
|
3
|
-
description:
|
|
3
|
+
description: >
|
|
4
|
+
Set up or repair a Node.js release pipeline built on semantic-release-npm-github-publish, with a
|
|
5
|
+
stable channel on main and a prerelease channel on a beta branch, including the GitHub Actions
|
|
6
|
+
validation and npm publishing behaviour. Use when the user wants "semantic release set up", "a
|
|
7
|
+
beta release channel", "prerelease publishing", "automated npm publishing", or when an npm
|
|
8
|
+
package's releases are still manual and should become commit-driven. For writing the notes of a
|
|
9
|
+
single release use changelog-generator.
|
|
4
10
|
license: MIT
|
|
5
11
|
allowed-tools: Bash, Read, Write, Edit
|
|
6
12
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires a Node.js package repository that uses git and GitHub Actions.
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ai-tools-setup
|
|
3
|
-
description:
|
|
3
|
+
description: >
|
|
4
|
+
Set up, repair, and report on the RTK+ICM+Vox AI development toolkit: installs missing tools,
|
|
5
|
+
fixes broken hooks and MCP config, and shows an effectiveness digest covering token savings,
|
|
6
|
+
memory accumulation and voice health. Use when the user says "set up my AI tools", "my hooks are
|
|
7
|
+
broken", "MCP is not loading", "check my toolkit", "is ICM working", "how much are these tools
|
|
8
|
+
saving me", or when the scheduled weekly toolkit report fires.
|
|
4
9
|
license: MIT
|
|
5
10
|
allowed-tools: Bash, Read, Edit, Write
|
|
6
11
|
compatibility: Claude Code on macOS (Homebrew required)
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: promptctl
|
|
3
|
-
description:
|
|
3
|
+
description: >
|
|
4
|
+
Manage reusable prompts with the promptctl CLI: template-based prompt engineering, prompt
|
|
5
|
+
generation, and scoring a prompt before it ships. Use when the user wants to "write a reusable
|
|
6
|
+
prompt", "score this prompt", "turn this into a prompt template", "share prompts across repos",
|
|
7
|
+
or names promptctl directly. For bringing an agent skill into this catalog use
|
|
8
|
+
add-to-my-skills.
|
|
4
9
|
license: MIT
|
|
5
10
|
allowed-tools: Bash, Read, Write
|
|
6
11
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires promptctl to be installed when the workflow depends on the CLI.
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: docs-index-keeper
|
|
3
|
-
description:
|
|
3
|
+
description: >
|
|
4
|
+
Keep a repository's Markdown docs index in sync with the files that actually exist, by installing
|
|
5
|
+
and running docs-index-keeper in a pre-commit hook, in CI, or as a one-off sweep. Use when the
|
|
6
|
+
user says "the docs index is stale", "update the docs index", "add a docs index check to CI",
|
|
7
|
+
"our doc links are out of date", or when new docs were added without being linked anywhere.
|
|
4
8
|
license: MIT
|
|
5
9
|
allowed-tools: Bash, Read, Write, Edit, Grep, Glob
|
|
6
10
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires shell access and Node.js 18+ when installing from npm.
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: website-analytics-bootstrap
|
|
3
|
-
description:
|
|
3
|
+
description: >
|
|
4
|
+
Stand up a website's first SEO analytics loop end to end: persistent SerpBear rank tracking,
|
|
5
|
+
Google Search Console, seeded keywords, read-only technical audits and Telegram alerts on a local
|
|
6
|
+
host or NAS. Use when the user says "set up rank tracking", "this site has no analytics", "track
|
|
7
|
+
my keywords", "bootstrap SEO monitoring", or wants to know how a site performs in search when no
|
|
8
|
+
tracking exists yet. For diagnosing an existing indexing problem use
|
|
9
|
+
search-console-indexing-audit.
|
|
4
10
|
license: MIT
|
|
5
11
|
allowed-tools: Bash, Read, Write, Edit
|
|
6
12
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires network access, a reachable deployment host, and owner-provided Search Console and alert credentials.
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vinted-listing
|
|
3
|
-
description:
|
|
3
|
+
description: >
|
|
4
|
+
Create, edit, and safely publish a Vinted listing through the signed-in browser, using verified
|
|
5
|
+
item details and the owner's original photos. Suggests title, description, category, brand,
|
|
6
|
+
condition, colour and parcel size from the photos, saves a draft first, and requires explicit
|
|
7
|
+
confirmation before publishing. Use when the user wants to list, sell, relist or price an item on
|
|
8
|
+
Vinted, or says "put this on Vinted", "create a Vinted listing", "sell this on Vinted", "edit my
|
|
9
|
+
Vinted draft", or "publish that listing". Browser workflow, not an API integration.
|
|
4
10
|
---
|
|
5
11
|
<!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
|
|
6
12
|
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gh-cli
|
|
3
|
-
description:
|
|
3
|
+
description: >
|
|
4
|
+
Reach for the GitHub CLI (gh) to do something on GitHub from the command line: repositories,
|
|
5
|
+
issues, pull requests, Actions runs and logs, projects, releases, gists, codespaces, org and
|
|
6
|
+
extension management. Use when a task needs a gh command and the exact syntax, flag or API path
|
|
7
|
+
is not obvious, or the user says "use gh", "what is the gh command for", "list my PRs from the
|
|
8
|
+
CLI", or "query the GitHub API". For driving a PR through review bots and CI use the
|
|
9
|
+
olko-github-pr skills instead; this one is the command reference.
|
|
4
10
|
license: MIT
|
|
5
11
|
allowed-tools: Bash
|
|
6
12
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires the GitHub CLI and valid GitHub authentication.
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
2
|
name: viral-launch
|
|
4
|
-
description:
|
|
3
|
+
description: >
|
|
4
|
+
Prepare a project for a public launch: shareable positioning, a launch-readiness pass over the
|
|
5
|
+
repository, and the growth loops worth building, without pretending virality is guaranteed. Use
|
|
6
|
+
when the user says "help me launch this", "prep for Product Hunt", "write the launch post", "make
|
|
7
|
+
this shareable", "launch plan", or is about to make a repo or product public. For building the
|
|
8
|
+
thing itself use mvp-oneshot or product-builder.
|
|
5
9
|
license: MIT
|
|
6
10
|
allowed-tools: Bash, Read, Write, WebSearch, WebFetch
|
|
7
11
|
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.
|
|
@@ -27,7 +27,7 @@ const OUT = arg('out', './mine.json');
|
|
|
27
27
|
const SINCE = Date.parse(`${arg('since', '')}T00:00:00Z`);
|
|
28
28
|
const UNTIL = Date.parse(`${arg('until', '')}T00:00:00Z`);
|
|
29
29
|
|
|
30
|
-
if (!Number.isFinite(SINCE) || !Number.isFinite(UNTIL)
|
|
30
|
+
if (!Number.isFinite(SINCE) || !Number.isFinite(UNTIL)) {
|
|
31
31
|
console.error('usage: mine-transcripts.mjs --since YYYY-MM-DD --until YYYY-MM-DD [--out path] [--root dir]');
|
|
32
32
|
process.exit(2);
|
|
33
33
|
}
|
|
@@ -46,7 +46,23 @@ function walk(dir, out = []) {
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
// A user-role text record that is really harness output, not something a person typed.
|
|
49
|
-
|
|
49
|
+
// A user-role text record that is really harness output, not something a person typed.
|
|
50
|
+
// Each alternative below was found by a run that mis-counted. The first pass caught the
|
|
51
|
+
// obvious wrappers and still let 26% through: skill body dumps, image attachments,
|
|
52
|
+
// already-loaded stubs and permission-grant echoes all sit in human-turn position.
|
|
53
|
+
const HARNESS = new RegExp('^(' + [
|
|
54
|
+
'<system-reminder', '<command-name', '<command-message', '<local-command',
|
|
55
|
+
'<bash-input', '<bash-stdout', '<bash-stderr', '<user-prompt-submit-hook',
|
|
56
|
+
'<task-notification', '<cross-session-message',
|
|
57
|
+
'Caveat: The messages below',
|
|
58
|
+
'\\[Request interrupted',
|
|
59
|
+
'Base directory for this skill:', // a skill body dumped into the turn
|
|
60
|
+
'Skill /[^ ]+ is already loaded', // re-invocation stub
|
|
61
|
+
'Permission granted for:', // permission-grant echo
|
|
62
|
+
'\\[Image #\\d+\\]', // bare attachment
|
|
63
|
+
'\\[Image: source:',
|
|
64
|
+
'\\[Pasted text',
|
|
65
|
+
].join('|') + ')');
|
|
50
66
|
|
|
51
67
|
const textOf = (msg) => {
|
|
52
68
|
const c = msg?.content;
|
|
@@ -68,7 +84,8 @@ const S = {
|
|
|
68
84
|
limits: [],
|
|
69
85
|
humanTurns: [],
|
|
70
86
|
echoTurns: 0,
|
|
71
|
-
|
|
87
|
+
interruptsAll: 0,
|
|
88
|
+
interruptsMain: 0,
|
|
72
89
|
compacts: 0,
|
|
73
90
|
usage: { in: 0, out: 0, cacheRead: 0, cacheWrite: 0 },
|
|
74
91
|
};
|
|
@@ -134,16 +151,8 @@ for (const f of files) {
|
|
|
134
151
|
|
|
135
152
|
if (r.type === 'assistant') {
|
|
136
153
|
const model = r.message?.model;
|
|
154
|
+
if (model) bump(S.models, model);
|
|
137
155
|
const u = r.message?.usage;
|
|
138
|
-
if (model) {
|
|
139
|
-
const stats = S.models.get(model) || { messages: 0, in: 0, out: 0, cacheRead: 0, cacheWrite: 0 };
|
|
140
|
-
stats.messages++;
|
|
141
|
-
stats.in += u?.input_tokens || 0;
|
|
142
|
-
stats.out += u?.output_tokens || 0;
|
|
143
|
-
stats.cacheRead += u?.cache_read_input_tokens || 0;
|
|
144
|
-
stats.cacheWrite += u?.cache_creation_input_tokens || 0;
|
|
145
|
-
S.models.set(model, stats);
|
|
146
|
-
}
|
|
147
156
|
if (u) {
|
|
148
157
|
S.usage.in += u.input_tokens || 0;
|
|
149
158
|
S.usage.out += u.output_tokens || 0;
|
|
@@ -182,9 +191,12 @@ for (const f of files) {
|
|
|
182
191
|
}
|
|
183
192
|
|
|
184
193
|
const raw = textOf(r.message);
|
|
194
|
+
// Two scopes, two names. The first version reported the all-records count and the
|
|
195
|
+
// per-session count under one label `interrupts`, so the top-level figure (27) did not
|
|
196
|
+
// match the sum of the per-session rows (15) and neither number could be trusted.
|
|
185
197
|
if (raw.includes('[Request interrupted')) {
|
|
186
|
-
S.
|
|
187
|
-
if (sess) sess.interrupts++;
|
|
198
|
+
S.interruptsAll++;
|
|
199
|
+
if (sess) { S.interruptsMain++; sess.interrupts++; }
|
|
188
200
|
}
|
|
189
201
|
if (!main || r.userType !== 'external' || !raw || sawToolResult) continue;
|
|
190
202
|
|
|
@@ -219,13 +231,14 @@ const report = {
|
|
|
219
231
|
humanTurnsPerDay: byDay,
|
|
220
232
|
turnsPerSession: { median: pct(0.5), p90: pct(0.9), max: humanCounts.at(-1) ?? 0 },
|
|
221
233
|
shortTurnsUnder40Chars: S.humanTurns.filter((t) => t.text.trim().length < 40).length,
|
|
222
|
-
|
|
234
|
+
interruptsMainSessions: S.interruptsMain,
|
|
235
|
+
interruptsAllRecords: S.interruptsAll,
|
|
223
236
|
compactEvents: S.compacts,
|
|
224
237
|
capacityLimitEvents: S.limits.length,
|
|
225
238
|
capacityLimitSamples: S.limits.slice(0, 10),
|
|
226
239
|
usage: S.usage,
|
|
227
240
|
cacheReadToOutputRatio: S.usage.out ? +(S.usage.cacheRead / S.usage.out).toFixed(1) : null,
|
|
228
|
-
models: [...S.models].sort((a, b) => b[1]
|
|
241
|
+
models: [...S.models].sort((a, b) => b[1] - a[1]),
|
|
229
242
|
topTools: [...S.tools].sort((a, b) => b[1] - a[1]).slice(0, 40),
|
|
230
243
|
agentSpawns: [...S.agents].sort((a, b) => b[1] - a[1]),
|
|
231
244
|
skillInvocations: [...S.skills].sort((a, b) => b[1] - a[1]),
|
|
@@ -233,6 +246,23 @@ const report = {
|
|
|
233
246
|
sessions,
|
|
234
247
|
};
|
|
235
248
|
|
|
249
|
+
// Internal consistency gate. A report whose aggregates disagree with its own rows is not
|
|
250
|
+
// evidence, and a previous version shipped exactly that. Fail loudly rather than emit it.
|
|
251
|
+
const rowInterrupts = sessions.reduce((n, s) => n + s.interrupts, 0);
|
|
252
|
+
const rowHuman = sessions.reduce((n, s) => n + s.human, 0);
|
|
253
|
+
const problems = [];
|
|
254
|
+
if (rowInterrupts !== report.interruptsMainSessions) {
|
|
255
|
+
problems.push(`interruptsMainSessions ${report.interruptsMainSessions} != sum of session rows ${rowInterrupts}`);
|
|
256
|
+
}
|
|
257
|
+
if (rowHuman !== report.humanTurnsOrganic) {
|
|
258
|
+
problems.push(`humanTurnsOrganic ${report.humanTurnsOrganic} != sum of session rows ${rowHuman}`);
|
|
259
|
+
}
|
|
260
|
+
if (problems.length) {
|
|
261
|
+
console.error('INCONSISTENT REPORT, refusing to write:\n ' + problems.join('\n '));
|
|
262
|
+
process.exit(3);
|
|
263
|
+
}
|
|
264
|
+
report.echoFilterVersion = 2;
|
|
265
|
+
|
|
236
266
|
fs.writeFileSync(OUT, JSON.stringify(report, null, 1));
|
|
237
267
|
fs.writeFileSync(OUT.replace(/\.json$/, '') + '-turns.json', JSON.stringify(S.humanTurns, null, 1));
|
|
238
268
|
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: retro-analysis
|
|
3
|
-
description:
|
|
3
|
+
description: >
|
|
4
|
+
Produce a recurring engineering retrospective from repository history, delivery evidence, work
|
|
5
|
+
patterns, code-quality signals and prior snapshots, in repository, comparison or cross-project
|
|
6
|
+
mode. Use when the user asks for a retro over shipped work: "run a retrospective", "how did this
|
|
7
|
+
quarter go", "compare this month to last", "what did we ship", "engineering retro across my
|
|
8
|
+
repos", or when a scheduled retro job fires. This is the repository axis: for how the agents
|
|
9
|
+
themselves are being operated use agent-ops-retro, for a single finished change use wrap-up.
|
|
4
10
|
license: MIT
|
|
5
11
|
metadata:
|
|
6
12
|
author: Oleg Koval
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: wrap-up
|
|
3
|
-
description:
|
|
3
|
+
description: >
|
|
4
|
+
Close out a finished piece of work: verify the implementation actually matches its original
|
|
5
|
+
objective, confirm every applicable check is green, and safely tidy the temporary files,
|
|
6
|
+
worktrees and local branches the task created. Use when a change is believed done and the user
|
|
7
|
+
says "wrap up", "we are done here", "finish up", "clean up after this", "tidy the worktrees", or
|
|
8
|
+
before handing work off. This is the single-change axis: for a retro over repository history use
|
|
9
|
+
retro-analysis, for how the agents are being operated use agent-ops-retro.
|
|
4
10
|
license: MIT
|
|
5
11
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, Grok, and other Agent Skills compatible tools.
|
|
6
12
|
metadata:
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: changelog-generator
|
|
3
|
-
description:
|
|
3
|
+
description: >
|
|
4
|
+
Turn git commit history into a user-facing changelog: read the commits since the last release,
|
|
5
|
+
categorise them, and rewrite technical messages as release notes a customer can actually read.
|
|
6
|
+
Use when the user asks for "a changelog", "release notes", "what changed since the last release",
|
|
7
|
+
"write the CHANGELOG entry", or is preparing a release and needs the notes written. For setting
|
|
8
|
+
up the release pipeline itself use semantic-release-beta.
|
|
4
9
|
license: MIT
|
|
5
10
|
allowed-tools: Bash, Read, Write
|
|
6
11
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires git history access in the target repository.
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: semantic-release-beta
|
|
3
|
-
description:
|
|
3
|
+
description: >
|
|
4
|
+
Set up or repair a Node.js release pipeline built on semantic-release-npm-github-publish, with a
|
|
5
|
+
stable channel on main and a prerelease channel on a beta branch, including the GitHub Actions
|
|
6
|
+
validation and npm publishing behaviour. Use when the user wants "semantic release set up", "a
|
|
7
|
+
beta release channel", "prerelease publishing", "automated npm publishing", or when an npm
|
|
8
|
+
package's releases are still manual and should become commit-driven. For writing the notes of a
|
|
9
|
+
single release use changelog-generator.
|
|
4
10
|
license: MIT
|
|
5
11
|
allowed-tools: Bash, Read, Write, Edit
|
|
6
12
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires a Node.js package repository that uses git and GitHub Actions.
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ai-tools-setup
|
|
3
|
-
description:
|
|
3
|
+
description: >
|
|
4
|
+
Set up, repair, and report on the RTK+ICM+Vox AI development toolkit: installs missing tools,
|
|
5
|
+
fixes broken hooks and MCP config, and shows an effectiveness digest covering token savings,
|
|
6
|
+
memory accumulation and voice health. Use when the user says "set up my AI tools", "my hooks are
|
|
7
|
+
broken", "MCP is not loading", "check my toolkit", "is ICM working", "how much are these tools
|
|
8
|
+
saving me", or when the scheduled weekly toolkit report fires.
|
|
4
9
|
license: MIT
|
|
5
10
|
allowed-tools: Bash, Read, Edit, Write
|
|
6
11
|
compatibility: Claude Code on macOS (Homebrew required)
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: promptctl
|
|
3
|
-
description:
|
|
3
|
+
description: >
|
|
4
|
+
Manage reusable prompts with the promptctl CLI: template-based prompt engineering, prompt
|
|
5
|
+
generation, and scoring a prompt before it ships. Use when the user wants to "write a reusable
|
|
6
|
+
prompt", "score this prompt", "turn this into a prompt template", "share prompts across repos",
|
|
7
|
+
or names promptctl directly. For bringing an agent skill into this catalog use
|
|
8
|
+
add-to-my-skills.
|
|
4
9
|
license: MIT
|
|
5
10
|
allowed-tools: Bash, Read, Write
|
|
6
11
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires promptctl to be installed when the workflow depends on the CLI.
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: docs-index-keeper
|
|
3
|
-
description:
|
|
3
|
+
description: >
|
|
4
|
+
Keep a repository's Markdown docs index in sync with the files that actually exist, by installing
|
|
5
|
+
and running docs-index-keeper in a pre-commit hook, in CI, or as a one-off sweep. Use when the
|
|
6
|
+
user says "the docs index is stale", "update the docs index", "add a docs index check to CI",
|
|
7
|
+
"our doc links are out of date", or when new docs were added without being linked anywhere.
|
|
4
8
|
license: MIT
|
|
5
9
|
allowed-tools: Bash, Read, Write, Edit, Grep, Glob
|
|
6
10
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires shell access and Node.js 18+ when installing from npm.
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: website-analytics-bootstrap
|
|
3
|
-
description:
|
|
3
|
+
description: >
|
|
4
|
+
Stand up a website's first SEO analytics loop end to end: persistent SerpBear rank tracking,
|
|
5
|
+
Google Search Console, seeded keywords, read-only technical audits and Telegram alerts on a local
|
|
6
|
+
host or NAS. Use when the user says "set up rank tracking", "this site has no analytics", "track
|
|
7
|
+
my keywords", "bootstrap SEO monitoring", or wants to know how a site performs in search when no
|
|
8
|
+
tracking exists yet. For diagnosing an existing indexing problem use
|
|
9
|
+
search-console-indexing-audit.
|
|
4
10
|
license: MIT
|
|
5
11
|
allowed-tools: Bash, Read, Write, Edit
|
|
6
12
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires network access, a reachable deployment host, and owner-provided Search Console and alert credentials.
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vinted-listing
|
|
3
|
-
description:
|
|
3
|
+
description: >
|
|
4
|
+
Create, edit, and safely publish a Vinted listing through the signed-in browser, using verified
|
|
5
|
+
item details and the owner's original photos. Suggests title, description, category, brand,
|
|
6
|
+
condition, colour and parcel size from the photos, saves a draft first, and requires explicit
|
|
7
|
+
confirmation before publishing. Use when the user wants to list, sell, relist or price an item on
|
|
8
|
+
Vinted, or says "put this on Vinted", "create a Vinted listing", "sell this on Vinted", "edit my
|
|
9
|
+
Vinted draft", or "publish that listing". Browser workflow, not an API integration.
|
|
4
10
|
---
|
|
5
11
|
<!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
|
|
6
12
|
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gh-cli
|
|
3
|
-
description:
|
|
3
|
+
description: >
|
|
4
|
+
Reach for the GitHub CLI (gh) to do something on GitHub from the command line: repositories,
|
|
5
|
+
issues, pull requests, Actions runs and logs, projects, releases, gists, codespaces, org and
|
|
6
|
+
extension management. Use when a task needs a gh command and the exact syntax, flag or API path
|
|
7
|
+
is not obvious, or the user says "use gh", "what is the gh command for", "list my PRs from the
|
|
8
|
+
CLI", or "query the GitHub API". For driving a PR through review bots and CI use the
|
|
9
|
+
olko-github-pr skills instead; this one is the command reference.
|
|
4
10
|
license: MIT
|
|
5
11
|
allowed-tools: Bash
|
|
6
12
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires the GitHub CLI and valid GitHub authentication.
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
2
|
name: viral-launch
|
|
4
|
-
description:
|
|
3
|
+
description: >
|
|
4
|
+
Prepare a project for a public launch: shareable positioning, a launch-readiness pass over the
|
|
5
|
+
repository, and the growth loops worth building, without pretending virality is guaranteed. Use
|
|
6
|
+
when the user says "help me launch this", "prep for Product Hunt", "write the launch post", "make
|
|
7
|
+
this shareable", "launch plan", or is about to make a repo or product public. For building the
|
|
8
|
+
thing itself use mvp-oneshot or product-builder.
|
|
5
9
|
license: MIT
|
|
6
10
|
allowed-tools: Bash, Read, Write, WebSearch, WebFetch
|
|
7
11
|
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.
|
|
@@ -27,7 +27,7 @@ const OUT = arg('out', './mine.json');
|
|
|
27
27
|
const SINCE = Date.parse(`${arg('since', '')}T00:00:00Z`);
|
|
28
28
|
const UNTIL = Date.parse(`${arg('until', '')}T00:00:00Z`);
|
|
29
29
|
|
|
30
|
-
if (!Number.isFinite(SINCE) || !Number.isFinite(UNTIL)
|
|
30
|
+
if (!Number.isFinite(SINCE) || !Number.isFinite(UNTIL)) {
|
|
31
31
|
console.error('usage: mine-transcripts.mjs --since YYYY-MM-DD --until YYYY-MM-DD [--out path] [--root dir]');
|
|
32
32
|
process.exit(2);
|
|
33
33
|
}
|
|
@@ -46,7 +46,23 @@ function walk(dir, out = []) {
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
// A user-role text record that is really harness output, not something a person typed.
|
|
49
|
-
|
|
49
|
+
// A user-role text record that is really harness output, not something a person typed.
|
|
50
|
+
// Each alternative below was found by a run that mis-counted. The first pass caught the
|
|
51
|
+
// obvious wrappers and still let 26% through: skill body dumps, image attachments,
|
|
52
|
+
// already-loaded stubs and permission-grant echoes all sit in human-turn position.
|
|
53
|
+
const HARNESS = new RegExp('^(' + [
|
|
54
|
+
'<system-reminder', '<command-name', '<command-message', '<local-command',
|
|
55
|
+
'<bash-input', '<bash-stdout', '<bash-stderr', '<user-prompt-submit-hook',
|
|
56
|
+
'<task-notification', '<cross-session-message',
|
|
57
|
+
'Caveat: The messages below',
|
|
58
|
+
'\\[Request interrupted',
|
|
59
|
+
'Base directory for this skill:', // a skill body dumped into the turn
|
|
60
|
+
'Skill /[^ ]+ is already loaded', // re-invocation stub
|
|
61
|
+
'Permission granted for:', // permission-grant echo
|
|
62
|
+
'\\[Image #\\d+\\]', // bare attachment
|
|
63
|
+
'\\[Image: source:',
|
|
64
|
+
'\\[Pasted text',
|
|
65
|
+
].join('|') + ')');
|
|
50
66
|
|
|
51
67
|
const textOf = (msg) => {
|
|
52
68
|
const c = msg?.content;
|
|
@@ -68,7 +84,8 @@ const S = {
|
|
|
68
84
|
limits: [],
|
|
69
85
|
humanTurns: [],
|
|
70
86
|
echoTurns: 0,
|
|
71
|
-
|
|
87
|
+
interruptsAll: 0,
|
|
88
|
+
interruptsMain: 0,
|
|
72
89
|
compacts: 0,
|
|
73
90
|
usage: { in: 0, out: 0, cacheRead: 0, cacheWrite: 0 },
|
|
74
91
|
};
|
|
@@ -134,16 +151,8 @@ for (const f of files) {
|
|
|
134
151
|
|
|
135
152
|
if (r.type === 'assistant') {
|
|
136
153
|
const model = r.message?.model;
|
|
154
|
+
if (model) bump(S.models, model);
|
|
137
155
|
const u = r.message?.usage;
|
|
138
|
-
if (model) {
|
|
139
|
-
const stats = S.models.get(model) || { messages: 0, in: 0, out: 0, cacheRead: 0, cacheWrite: 0 };
|
|
140
|
-
stats.messages++;
|
|
141
|
-
stats.in += u?.input_tokens || 0;
|
|
142
|
-
stats.out += u?.output_tokens || 0;
|
|
143
|
-
stats.cacheRead += u?.cache_read_input_tokens || 0;
|
|
144
|
-
stats.cacheWrite += u?.cache_creation_input_tokens || 0;
|
|
145
|
-
S.models.set(model, stats);
|
|
146
|
-
}
|
|
147
156
|
if (u) {
|
|
148
157
|
S.usage.in += u.input_tokens || 0;
|
|
149
158
|
S.usage.out += u.output_tokens || 0;
|
|
@@ -182,9 +191,12 @@ for (const f of files) {
|
|
|
182
191
|
}
|
|
183
192
|
|
|
184
193
|
const raw = textOf(r.message);
|
|
194
|
+
// Two scopes, two names. The first version reported the all-records count and the
|
|
195
|
+
// per-session count under one label `interrupts`, so the top-level figure (27) did not
|
|
196
|
+
// match the sum of the per-session rows (15) and neither number could be trusted.
|
|
185
197
|
if (raw.includes('[Request interrupted')) {
|
|
186
|
-
S.
|
|
187
|
-
if (sess) sess.interrupts++;
|
|
198
|
+
S.interruptsAll++;
|
|
199
|
+
if (sess) { S.interruptsMain++; sess.interrupts++; }
|
|
188
200
|
}
|
|
189
201
|
if (!main || r.userType !== 'external' || !raw || sawToolResult) continue;
|
|
190
202
|
|
|
@@ -219,13 +231,14 @@ const report = {
|
|
|
219
231
|
humanTurnsPerDay: byDay,
|
|
220
232
|
turnsPerSession: { median: pct(0.5), p90: pct(0.9), max: humanCounts.at(-1) ?? 0 },
|
|
221
233
|
shortTurnsUnder40Chars: S.humanTurns.filter((t) => t.text.trim().length < 40).length,
|
|
222
|
-
|
|
234
|
+
interruptsMainSessions: S.interruptsMain,
|
|
235
|
+
interruptsAllRecords: S.interruptsAll,
|
|
223
236
|
compactEvents: S.compacts,
|
|
224
237
|
capacityLimitEvents: S.limits.length,
|
|
225
238
|
capacityLimitSamples: S.limits.slice(0, 10),
|
|
226
239
|
usage: S.usage,
|
|
227
240
|
cacheReadToOutputRatio: S.usage.out ? +(S.usage.cacheRead / S.usage.out).toFixed(1) : null,
|
|
228
|
-
models: [...S.models].sort((a, b) => b[1]
|
|
241
|
+
models: [...S.models].sort((a, b) => b[1] - a[1]),
|
|
229
242
|
topTools: [...S.tools].sort((a, b) => b[1] - a[1]).slice(0, 40),
|
|
230
243
|
agentSpawns: [...S.agents].sort((a, b) => b[1] - a[1]),
|
|
231
244
|
skillInvocations: [...S.skills].sort((a, b) => b[1] - a[1]),
|
|
@@ -233,6 +246,23 @@ const report = {
|
|
|
233
246
|
sessions,
|
|
234
247
|
};
|
|
235
248
|
|
|
249
|
+
// Internal consistency gate. A report whose aggregates disagree with its own rows is not
|
|
250
|
+
// evidence, and a previous version shipped exactly that. Fail loudly rather than emit it.
|
|
251
|
+
const rowInterrupts = sessions.reduce((n, s) => n + s.interrupts, 0);
|
|
252
|
+
const rowHuman = sessions.reduce((n, s) => n + s.human, 0);
|
|
253
|
+
const problems = [];
|
|
254
|
+
if (rowInterrupts !== report.interruptsMainSessions) {
|
|
255
|
+
problems.push(`interruptsMainSessions ${report.interruptsMainSessions} != sum of session rows ${rowInterrupts}`);
|
|
256
|
+
}
|
|
257
|
+
if (rowHuman !== report.humanTurnsOrganic) {
|
|
258
|
+
problems.push(`humanTurnsOrganic ${report.humanTurnsOrganic} != sum of session rows ${rowHuman}`);
|
|
259
|
+
}
|
|
260
|
+
if (problems.length) {
|
|
261
|
+
console.error('INCONSISTENT REPORT, refusing to write:\n ' + problems.join('\n '));
|
|
262
|
+
process.exit(3);
|
|
263
|
+
}
|
|
264
|
+
report.echoFilterVersion = 2;
|
|
265
|
+
|
|
236
266
|
fs.writeFileSync(OUT, JSON.stringify(report, null, 1));
|
|
237
267
|
fs.writeFileSync(OUT.replace(/\.json$/, '') + '-turns.json', JSON.stringify(S.humanTurns, null, 1));
|
|
238
268
|
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: retro-analysis
|
|
3
|
-
description:
|
|
3
|
+
description: >
|
|
4
|
+
Produce a recurring engineering retrospective from repository history, delivery evidence, work
|
|
5
|
+
patterns, code-quality signals and prior snapshots, in repository, comparison or cross-project
|
|
6
|
+
mode. Use when the user asks for a retro over shipped work: "run a retrospective", "how did this
|
|
7
|
+
quarter go", "compare this month to last", "what did we ship", "engineering retro across my
|
|
8
|
+
repos", or when a scheduled retro job fires. This is the repository axis: for how the agents
|
|
9
|
+
themselves are being operated use agent-ops-retro, for a single finished change use wrap-up.
|
|
4
10
|
license: MIT
|
|
5
11
|
metadata:
|
|
6
12
|
author: Oleg Koval
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: wrap-up
|
|
3
|
-
description:
|
|
3
|
+
description: >
|
|
4
|
+
Close out a finished piece of work: verify the implementation actually matches its original
|
|
5
|
+
objective, confirm every applicable check is green, and safely tidy the temporary files,
|
|
6
|
+
worktrees and local branches the task created. Use when a change is believed done and the user
|
|
7
|
+
says "wrap up", "we are done here", "finish up", "clean up after this", "tidy the worktrees", or
|
|
8
|
+
before handing work off. This is the single-change axis: for a retro over repository history use
|
|
9
|
+
retro-analysis, for how the agents are being operated use agent-ops-retro.
|
|
4
10
|
license: MIT
|
|
5
11
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, Grok, and other Agent Skills compatible tools.
|
|
6
12
|
metadata:
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: changelog-generator
|
|
3
|
-
description:
|
|
3
|
+
description: >
|
|
4
|
+
Turn git commit history into a user-facing changelog: read the commits since the last release,
|
|
5
|
+
categorise them, and rewrite technical messages as release notes a customer can actually read.
|
|
6
|
+
Use when the user asks for "a changelog", "release notes", "what changed since the last release",
|
|
7
|
+
"write the CHANGELOG entry", or is preparing a release and needs the notes written. For setting
|
|
8
|
+
up the release pipeline itself use semantic-release-beta.
|
|
4
9
|
license: MIT
|
|
5
10
|
allowed-tools: Bash, Read, Write
|
|
6
11
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires git history access in the target repository.
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: semantic-release-beta
|
|
3
|
-
description:
|
|
3
|
+
description: >
|
|
4
|
+
Set up or repair a Node.js release pipeline built on semantic-release-npm-github-publish, with a
|
|
5
|
+
stable channel on main and a prerelease channel on a beta branch, including the GitHub Actions
|
|
6
|
+
validation and npm publishing behaviour. Use when the user wants "semantic release set up", "a
|
|
7
|
+
beta release channel", "prerelease publishing", "automated npm publishing", or when an npm
|
|
8
|
+
package's releases are still manual and should become commit-driven. For writing the notes of a
|
|
9
|
+
single release use changelog-generator.
|
|
4
10
|
license: MIT
|
|
5
11
|
allowed-tools: Bash, Read, Write, Edit
|
|
6
12
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires a Node.js package repository that uses git and GitHub Actions.
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ai-tools-setup
|
|
3
|
-
description:
|
|
3
|
+
description: >
|
|
4
|
+
Set up, repair, and report on the RTK+ICM+Vox AI development toolkit: installs missing tools,
|
|
5
|
+
fixes broken hooks and MCP config, and shows an effectiveness digest covering token savings,
|
|
6
|
+
memory accumulation and voice health. Use when the user says "set up my AI tools", "my hooks are
|
|
7
|
+
broken", "MCP is not loading", "check my toolkit", "is ICM working", "how much are these tools
|
|
8
|
+
saving me", or when the scheduled weekly toolkit report fires.
|
|
4
9
|
license: MIT
|
|
5
10
|
allowed-tools: Bash, Read, Edit, Write
|
|
6
11
|
compatibility: Claude Code on macOS (Homebrew required)
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: promptctl
|
|
3
|
-
description:
|
|
3
|
+
description: >
|
|
4
|
+
Manage reusable prompts with the promptctl CLI: template-based prompt engineering, prompt
|
|
5
|
+
generation, and scoring a prompt before it ships. Use when the user wants to "write a reusable
|
|
6
|
+
prompt", "score this prompt", "turn this into a prompt template", "share prompts across repos",
|
|
7
|
+
or names promptctl directly. For bringing an agent skill into this catalog use
|
|
8
|
+
add-to-my-skills.
|
|
4
9
|
license: MIT
|
|
5
10
|
allowed-tools: Bash, Read, Write
|
|
6
11
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires promptctl to be installed when the workflow depends on the CLI.
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: docs-index-keeper
|
|
3
|
-
description:
|
|
3
|
+
description: >
|
|
4
|
+
Keep a repository's Markdown docs index in sync with the files that actually exist, by installing
|
|
5
|
+
and running docs-index-keeper in a pre-commit hook, in CI, or as a one-off sweep. Use when the
|
|
6
|
+
user says "the docs index is stale", "update the docs index", "add a docs index check to CI",
|
|
7
|
+
"our doc links are out of date", or when new docs were added without being linked anywhere.
|
|
4
8
|
license: MIT
|
|
5
9
|
allowed-tools: Bash, Read, Write, Edit, Grep, Glob
|
|
6
10
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires shell access and Node.js 18+ when installing from npm.
|