@olegkoval/agent-skills 1.21.1 → 1.23.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 (49) hide show
  1. package/.claude-plugin/plugin.json +5 -2
  2. package/.cursor-plugin/index.json +15 -0
  3. package/.grok-plugin/index.json +15 -0
  4. package/.kiro/steering/wikipedia-uk-editor.md +105 -0
  5. package/.windsurf/rules/wikipedia-uk-editor.md +104 -0
  6. package/README.md +4 -1
  7. package/catalog/skills.json +70 -0
  8. package/collections/software-development.json +2 -1
  9. package/package.json +1 -1
  10. package/packages/software-development/ci-fix-loop/SKILL.md +202 -0
  11. package/packages/software-development/ci-fix-loop/adapters/claude/plugin.json +5 -0
  12. package/packages/software-development/ci-fix-loop/adapters/claude/skills/ci-fix-loop/SKILL.md +203 -0
  13. package/packages/software-development/ci-fix-loop/adapters/codex/README.md +20 -0
  14. package/packages/software-development/ci-fix-loop/adapters/cursor/plugin.json +6 -0
  15. package/packages/software-development/ci-fix-loop/adapters/cursor/skills/ci-fix-loop/SKILL.md +203 -0
  16. package/packages/software-development/ci-fix-loop/adapters/grok/plugin.json +6 -0
  17. package/packages/software-development/ci-fix-loop/adapters/grok/skills/ci-fix-loop/SKILL.md +203 -0
  18. package/packages/software-development/pr-description-writer/SKILL.md +152 -0
  19. package/packages/software-development/pr-description-writer/adapters/claude/plugin.json +5 -0
  20. package/packages/software-development/pr-description-writer/adapters/claude/skills/pr-description-writer/SKILL.md +153 -0
  21. package/packages/software-development/pr-description-writer/adapters/codex/README.md +19 -0
  22. package/packages/software-development/pr-description-writer/adapters/cursor/plugin.json +6 -0
  23. package/packages/software-development/pr-description-writer/adapters/cursor/skills/pr-description-writer/SKILL.md +153 -0
  24. package/packages/software-development/pr-description-writer/adapters/grok/plugin.json +6 -0
  25. package/packages/software-development/pr-description-writer/adapters/grok/skills/pr-description-writer/SKILL.md +153 -0
  26. package/packages/software-development/wikipedia-uk-editor/SKILL.md +116 -0
  27. package/packages/software-development/wikipedia-uk-editor/adapters/claude/plugin.json +5 -0
  28. package/packages/software-development/wikipedia-uk-editor/adapters/claude/skills/wikipedia-uk-editor/SKILL.md +117 -0
  29. package/packages/software-development/wikipedia-uk-editor/adapters/claude/skills/wikipedia-uk-editor/references/strategy.md +97 -0
  30. package/packages/software-development/wikipedia-uk-editor/adapters/claude/skills/wikipedia-uk-editor/references/wikitext-uk.md +121 -0
  31. package/packages/software-development/wikipedia-uk-editor/adapters/claude/skills/wikipedia-uk-editor/scripts/wiki.sh +98 -0
  32. package/packages/software-development/wikipedia-uk-editor/adapters/codex/README.md +20 -0
  33. package/packages/software-development/wikipedia-uk-editor/adapters/cursor/plugin.json +6 -0
  34. package/packages/software-development/wikipedia-uk-editor/adapters/cursor/skills/wikipedia-uk-editor/SKILL.md +117 -0
  35. package/packages/software-development/wikipedia-uk-editor/adapters/cursor/skills/wikipedia-uk-editor/references/strategy.md +97 -0
  36. package/packages/software-development/wikipedia-uk-editor/adapters/cursor/skills/wikipedia-uk-editor/references/wikitext-uk.md +121 -0
  37. package/packages/software-development/wikipedia-uk-editor/adapters/cursor/skills/wikipedia-uk-editor/scripts/wiki.sh +98 -0
  38. package/packages/software-development/wikipedia-uk-editor/adapters/grok/plugin.json +6 -0
  39. package/packages/software-development/wikipedia-uk-editor/adapters/grok/skills/wikipedia-uk-editor/SKILL.md +117 -0
  40. package/packages/software-development/wikipedia-uk-editor/adapters/grok/skills/wikipedia-uk-editor/references/strategy.md +97 -0
  41. package/packages/software-development/wikipedia-uk-editor/adapters/grok/skills/wikipedia-uk-editor/references/wikitext-uk.md +121 -0
  42. package/packages/software-development/wikipedia-uk-editor/adapters/grok/skills/wikipedia-uk-editor/scripts/wiki.sh +98 -0
  43. package/packages/software-development/wikipedia-uk-editor/adapters/hermes/README.md +3 -0
  44. package/packages/software-development/wikipedia-uk-editor/adapters/kiro/steering/wikipedia-uk-editor.md +105 -0
  45. package/packages/software-development/wikipedia-uk-editor/adapters/pi/README.md +3 -0
  46. package/packages/software-development/wikipedia-uk-editor/adapters/windsurf/rules/wikipedia-uk-editor.md +104 -0
  47. package/packages/software-development/wikipedia-uk-editor/references/strategy.md +97 -0
  48. package/packages/software-development/wikipedia-uk-editor/references/wikitext-uk.md +121 -0
  49. package/packages/software-development/wikipedia-uk-editor/scripts/wiki.sh +98 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "olko-agent-skills",
3
3
  "description": "Agent-agnostic skill catalog for Codex, Claude, Cursor, Grok, Copilot, Windsurf, Kiro, and other skill-aware tools.",
4
- "version": "1.21.0",
4
+ "version": "1.22.0",
5
5
  "author": {
6
6
  "name": "Oleg Koval"
7
7
  },
@@ -37,6 +37,9 @@
37
37
  "./packages/software-development/coderabbitloop",
38
38
  "./packages/software-development/add-to-my-skills",
39
39
  "./packages/software-development/ai-tools-setup",
40
- "./packages/software-development/changelog-generator"
40
+ "./packages/software-development/changelog-generator",
41
+ "./packages/software-development/wikipedia-uk-editor",
42
+ "./packages/software-development/pr-description-writer",
43
+ "./packages/software-development/ci-fix-loop"
41
44
  ]
42
45
  }
@@ -135,6 +135,21 @@
135
135
  "name": "olko:changelog-generator",
136
136
  "source": "./packages/software-development/changelog-generator/adapters/cursor",
137
137
  "description": "Create user-facing changelogs from git history by categorising commits and rewriting them for readers rather than developers."
138
+ },
139
+ {
140
+ "name": "olko:wikipedia-uk-editor",
141
+ "source": "./packages/software-development/wikipedia-uk-editor/adapters/cursor",
142
+ "description": "Draft policy-compliant Ukrainian Wikipedia edits — translate an English article into uk, expand or source an existing uk article, or fix a maintenance backlog item — and return ready-to-paste wikitext plus an edit summary."
143
+ },
144
+ {
145
+ "name": "olko:pr-description-writer",
146
+ "source": "./packages/software-development/pr-description-writer/adapters/cursor",
147
+ "description": "Draft and post a GitHub PR title and body from git diff and commit history. Chains after git-commit and before qodoloop / coderabbitloop."
148
+ },
149
+ {
150
+ "name": "olko:ci-fix-loop",
151
+ "source": "./packages/software-development/ci-fix-loop/adapters/cursor",
152
+ "description": "Diagnose GitHub Actions CI failures in a loop: fetch failing check logs, fix, push, and repeat until green. Direct analog of qodoloop / coderabbitloop for test and lint failures."
138
153
  }
139
154
  ]
140
155
  }
@@ -145,6 +145,21 @@
145
145
  "name": "olko:changelog-generator",
146
146
  "source": "./packages/software-development/changelog-generator/adapters/grok",
147
147
  "description": "Create user-facing changelogs from git history by categorising commits and rewriting them for readers rather than developers."
148
+ },
149
+ {
150
+ "name": "olko:wikipedia-uk-editor",
151
+ "source": "./packages/software-development/wikipedia-uk-editor/adapters/grok",
152
+ "description": "Draft policy-compliant Ukrainian Wikipedia edits — translate an English article into uk, expand or source an existing uk article, or fix a maintenance backlog item — and return ready-to-paste wikitext plus an edit summary."
153
+ },
154
+ {
155
+ "name": "olko:pr-description-writer",
156
+ "source": "./packages/software-development/pr-description-writer/adapters/grok",
157
+ "description": "Draft and post a GitHub PR title and body from git diff and commit history. Chains after git-commit and before qodoloop / coderabbitloop."
158
+ },
159
+ {
160
+ "name": "olko:ci-fix-loop",
161
+ "source": "./packages/software-development/ci-fix-loop/adapters/grok",
162
+ "description": "Diagnose GitHub Actions CI failures in a loop: fetch failing check logs, fix, push, and repeat until green. Direct analog of qodoloop / coderabbitloop for test and lint failures."
148
163
  }
149
164
  ]
150
165
  }
@@ -0,0 +1,105 @@
1
+ <!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
2
+
3
+ ---
4
+ inclusion: manual
5
+ description: "Draft policy-compliant Ukrainian Wikipedia edits — translate an English article into uk, expand or source an existing uk article, or fix a maintenance backlog item — and return ready-to-paste wikitext plus an edit summary."
6
+ ---
7
+
8
+ # Ukrainian Wikipedia Editor
9
+
10
+ Turn a URL or article title into a complete, policy-compliant Ukrainian Wikipedia edit that the human pastes into the wiki editor themselves.
11
+
12
+ ## Hard Rules
13
+
14
+ 1. **Never submit an edit.** No `action=edit`, no logged-in browser automation, no bot password. This skill only reads and drafts. The human pastes and saves. Automated saving without a ВП:БОТ approval risks a block.
15
+ 2. **Never invent a source, a date, a number, or a citation.** Every fact added must trace to a source that was actually fetched in this session. If it cannot be sourced, it does not go in the article.
16
+ 3. **Never copy-paste prose from a source.** Ukrainian Wikipedia deletes copyright violations (ВП:Авторські права) on sight. Paraphrase in Ukrainian and cite.
17
+ 4. **Never translate machine-literally.** A rough MT dump is a deletion candidate. Ukrainian syntax, Ukrainian transliteration of names, Ukrainian date format (`12 березня 2024`), decimal comma.
18
+ 5. **Use only template and policy names verified against the live wiki.** See `references/wikitext-uk.md`. If a template is not listed there, verify it exists before using it — the helper script has a `check` command.
19
+ 6. **Disclose AI assistance** on the user page and, when substantial, in the edit summary. Undisclosed LLM output is the fastest route to scrutiny.
20
+
21
+ ## Outcome
22
+
23
+ A single deliverable written to a scratch file and echoed in chat:
24
+
25
+ - the **target page** (exact ukwiki title, and whether it exists)
26
+ - the **wikitext** — full article, or an exact-replacement section, or a precise before/after diff for small fixes
27
+ - the **edit summary** in Ukrainian (≤ 200 chars)
28
+ - the **source list** with the URL, publisher, and date actually fetched for each
29
+ - **risk notes**: notability (ВП:ЗН) standing, anything a patroller will challenge, what still needs a human check
30
+
31
+ ## Workflow
32
+
33
+ ### 1. Classify the task
34
+
35
+ | Input | Mode |
36
+ |---|---|
37
+ | en.wikipedia.org URL, no uk equivalent | **Translate** — new uk article |
38
+ | uk.wikipedia.org URL, stub or thin | **Expand** |
39
+ | uk.wikipedia.org URL with `{{Без джерел}}` / `{{Джерело}}` | **Source** |
40
+ | uk.wikipedia.org URL, prose/format problems | **Cleanup** |
41
+ | "what should I edit next" | **Plan** — read `references/strategy.md`, propose a ranked list |
42
+
43
+ Resolve the title first — `scripts/wiki.sh` handles redirects. Never draft against the wrong title.
44
+
45
+ ### 2. Read before writing
46
+
47
+ ```sh
48
+ ./scripts/wiki.sh get uk "Тайтл" # current wikitext
49
+ ./scripts/wiki.sh get en "Title" # source-language wikitext
50
+ ./scripts/wiki.sh langlink en "Title" uk # does a uk version already exist?
51
+ ./scripts/wiki.sh check uk "Шаблон:Особа" # does this template/page exist?
52
+ ```
53
+
54
+ Stop and report if:
55
+ - a uk article already exists for a "new translation" (then it is an **Expand** task, not a new page)
56
+ - the subject fails ВП:ЗН — do not draft an article that will be deleted; say so and propose an alternative target
57
+
58
+ ### 3. Gather real sources
59
+
60
+ For **Translate**: the English article's own reference list is a source *lead*, not a source. Fetch each reference actually cited for the claims you keep. Drop claims whose sources are dead or paywalled beyond verification. Prefer Ukrainian-language sources where they exist — patrollers weigh them higher.
61
+
62
+ For **Source/Expand**: search for the specific unsourced claim, not the topic in general. Reject blogs, press releases, user-generated wikis, and the subject's own site for anything contested (ВП:АД).
63
+
64
+ Record for each source: URL, title, publisher, publication date, access date. These become `{{Cite web}}` / `{{Стаття}}` / `{{Книга}}` parameters — see `references/wikitext-uk.md`.
65
+
66
+ ### 4. Draft the wikitext
67
+
68
+ Follow `references/wikitext-uk.md` for structure, citation templates, infoboxes, section names, categories, and the `{{Перекладена стаття}}` attribution template that translations legally require.
69
+
70
+ Scale to the subject: a person gets ~4–8 sourced sentences minimum, not two. Under that, it is a stub — label it `{{Заготовка}}` honestly rather than pretending it is complete.
71
+
72
+ ### 5. Self-check before delivering
73
+
74
+ Run every item. Report failures rather than hiding them.
75
+
76
+ - [ ] Every non-obvious factual claim has an inline `<ref>`
77
+ - [ ] No sentence is a translated copy of a copyrighted source
78
+ - [ ] Every template used exists (checked, not assumed)
79
+ - [ ] `{{Перекладена стаття}}` present with the source revision id, if translated
80
+ - [ ] Categories present and non-empty; at least one is a real existing category
81
+ - [ ] Interwiki handled via Wikidata note, not hardcoded links
82
+ - [ ] Neutral tone (ВП:НТЗ) — no promotional adjectives, no unattributed evaluation
83
+ - [ ] No original synthesis (ВП:ОД)
84
+ - [ ] Dates, numbers, and name transliterations are Ukrainian-correct
85
+ - [ ] Edit summary written in Ukrainian and states what changed and why
86
+
87
+ ### 6. Deliver
88
+
89
+ Write the draft to a scratch file (`.md` alongside the raw `.wiki` text so paste is clean), print the edit summary, and tell the human exactly where to paste it:
90
+
91
+ - new article → `https://uk.wikipedia.org/wiki/Тайтл?action=edit`
92
+ - section replace → name the section and its exact current heading
93
+ - test first → `Вікіпедія:Пісочниця` or the user's own `Користувач:Ім'я/Чернетка`
94
+
95
+ Then stop. Do not offer to save it.
96
+
97
+ ## References
98
+
99
+ - `references/strategy.md` — the contribution strategy: what to farm, in what order, and how to build standing without getting flagged
100
+ - `references/wikitext-uk.md` — verified uk templates, citation formats, article skeletons, policy shortcuts
101
+ - `scripts/wiki.sh` — read-only MediaWiki API helper
102
+
103
+ ## Verification
104
+
105
+ The skill has done its job when the human can paste the output unchanged, and the resulting edit survives patrolling with no maintenance template added.
@@ -0,0 +1,104 @@
1
+ <!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
2
+
3
+ ---
4
+ description: "Draft policy-compliant Ukrainian Wikipedia edits — translate an English article into uk, expand or source an existing uk article, or fix a maintenance backlog item — and return ready-to-paste wikitext plus an edit summary."
5
+ ---
6
+
7
+ # Ukrainian Wikipedia Editor
8
+
9
+ Turn a URL or article title into a complete, policy-compliant Ukrainian Wikipedia edit that the human pastes into the wiki editor themselves.
10
+
11
+ ## Hard Rules
12
+
13
+ 1. **Never submit an edit.** No `action=edit`, no logged-in browser automation, no bot password. This skill only reads and drafts. The human pastes and saves. Automated saving without a ВП:БОТ approval risks a block.
14
+ 2. **Never invent a source, a date, a number, or a citation.** Every fact added must trace to a source that was actually fetched in this session. If it cannot be sourced, it does not go in the article.
15
+ 3. **Never copy-paste prose from a source.** Ukrainian Wikipedia deletes copyright violations (ВП:Авторські права) on sight. Paraphrase in Ukrainian and cite.
16
+ 4. **Never translate machine-literally.** A rough MT dump is a deletion candidate. Ukrainian syntax, Ukrainian transliteration of names, Ukrainian date format (`12 березня 2024`), decimal comma.
17
+ 5. **Use only template and policy names verified against the live wiki.** See `references/wikitext-uk.md`. If a template is not listed there, verify it exists before using it — the helper script has a `check` command.
18
+ 6. **Disclose AI assistance** on the user page and, when substantial, in the edit summary. Undisclosed LLM output is the fastest route to scrutiny.
19
+
20
+ ## Outcome
21
+
22
+ A single deliverable written to a scratch file and echoed in chat:
23
+
24
+ - the **target page** (exact ukwiki title, and whether it exists)
25
+ - the **wikitext** — full article, or an exact-replacement section, or a precise before/after diff for small fixes
26
+ - the **edit summary** in Ukrainian (≤ 200 chars)
27
+ - the **source list** with the URL, publisher, and date actually fetched for each
28
+ - **risk notes**: notability (ВП:ЗН) standing, anything a patroller will challenge, what still needs a human check
29
+
30
+ ## Workflow
31
+
32
+ ### 1. Classify the task
33
+
34
+ | Input | Mode |
35
+ |---|---|
36
+ | en.wikipedia.org URL, no uk equivalent | **Translate** — new uk article |
37
+ | uk.wikipedia.org URL, stub or thin | **Expand** |
38
+ | uk.wikipedia.org URL with `{{Без джерел}}` / `{{Джерело}}` | **Source** |
39
+ | uk.wikipedia.org URL, prose/format problems | **Cleanup** |
40
+ | "what should I edit next" | **Plan** — read `references/strategy.md`, propose a ranked list |
41
+
42
+ Resolve the title first — `scripts/wiki.sh` handles redirects. Never draft against the wrong title.
43
+
44
+ ### 2. Read before writing
45
+
46
+ ```sh
47
+ ./scripts/wiki.sh get uk "Тайтл" # current wikitext
48
+ ./scripts/wiki.sh get en "Title" # source-language wikitext
49
+ ./scripts/wiki.sh langlink en "Title" uk # does a uk version already exist?
50
+ ./scripts/wiki.sh check uk "Шаблон:Особа" # does this template/page exist?
51
+ ```
52
+
53
+ Stop and report if:
54
+ - a uk article already exists for a "new translation" (then it is an **Expand** task, not a new page)
55
+ - the subject fails ВП:ЗН — do not draft an article that will be deleted; say so and propose an alternative target
56
+
57
+ ### 3. Gather real sources
58
+
59
+ For **Translate**: the English article's own reference list is a source *lead*, not a source. Fetch each reference actually cited for the claims you keep. Drop claims whose sources are dead or paywalled beyond verification. Prefer Ukrainian-language sources where they exist — patrollers weigh them higher.
60
+
61
+ For **Source/Expand**: search for the specific unsourced claim, not the topic in general. Reject blogs, press releases, user-generated wikis, and the subject's own site for anything contested (ВП:АД).
62
+
63
+ Record for each source: URL, title, publisher, publication date, access date. These become `{{Cite web}}` / `{{Стаття}}` / `{{Книга}}` parameters — see `references/wikitext-uk.md`.
64
+
65
+ ### 4. Draft the wikitext
66
+
67
+ Follow `references/wikitext-uk.md` for structure, citation templates, infoboxes, section names, categories, and the `{{Перекладена стаття}}` attribution template that translations legally require.
68
+
69
+ Scale to the subject: a person gets ~4–8 sourced sentences minimum, not two. Under that, it is a stub — label it `{{Заготовка}}` honestly rather than pretending it is complete.
70
+
71
+ ### 5. Self-check before delivering
72
+
73
+ Run every item. Report failures rather than hiding them.
74
+
75
+ - [ ] Every non-obvious factual claim has an inline `<ref>`
76
+ - [ ] No sentence is a translated copy of a copyrighted source
77
+ - [ ] Every template used exists (checked, not assumed)
78
+ - [ ] `{{Перекладена стаття}}` present with the source revision id, if translated
79
+ - [ ] Categories present and non-empty; at least one is a real existing category
80
+ - [ ] Interwiki handled via Wikidata note, not hardcoded links
81
+ - [ ] Neutral tone (ВП:НТЗ) — no promotional adjectives, no unattributed evaluation
82
+ - [ ] No original synthesis (ВП:ОД)
83
+ - [ ] Dates, numbers, and name transliterations are Ukrainian-correct
84
+ - [ ] Edit summary written in Ukrainian and states what changed and why
85
+
86
+ ### 6. Deliver
87
+
88
+ Write the draft to a scratch file (`.md` alongside the raw `.wiki` text so paste is clean), print the edit summary, and tell the human exactly where to paste it:
89
+
90
+ - new article → `https://uk.wikipedia.org/wiki/Тайтл?action=edit`
91
+ - section replace → name the section and its exact current heading
92
+ - test first → `Вікіпедія:Пісочниця` or the user's own `Користувач:Ім'я/Чернетка`
93
+
94
+ Then stop. Do not offer to save it.
95
+
96
+ ## References
97
+
98
+ - `references/strategy.md` — the contribution strategy: what to farm, in what order, and how to build standing without getting flagged
99
+ - `references/wikitext-uk.md` — verified uk templates, citation formats, article skeletons, policy shortcuts
100
+ - `scripts/wiki.sh` — read-only MediaWiki API helper
101
+
102
+ ## Verification
103
+
104
+ The skill has done its job when the human can paste the output unchanged, and the resulting edit survives patrolling with no maintenance template added.
package/README.md CHANGED
@@ -140,7 +140,7 @@ packages/{category}/{skill}/SKILL.md
140
140
 
141
141
  Each entry links to its `SKILL.md`. Reference any skill by its `olko:*` lookup name in a new agent session.
142
142
 
143
- ### Software development (24)
143
+ ### Software development (27)
144
144
 
145
145
  | Skill | What it does | Use when |
146
146
  |-------|-------------|----------|
@@ -148,6 +148,7 @@ Each entry links to its `SKILL.md`. Reference any skill by its `olko:*` lookup n
148
148
  | [ai-tools-setup](packages/software-development/ai-tools-setup/SKILL.md) | Sets up, repairs, and reports on the RTK + ICM + Vox AI development toolkit — installs missing tools, fixes broken hooks and MCP config | Bootstrapping AI dev tools on a new machine or diagnosing broken integrations |
149
149
  | [apple-store-submit](packages/software-development/apple-store-submit/SKILL.md) | Handles App Store rejection emails end-to-end — parses rejection reasons, creates a fix plan, implements code changes, and prepares resubmission | Responding to App Store rejections for privacy strings, entitlements, or guideline violations |
150
150
  | [changelog-generator](packages/software-development/changelog-generator/SKILL.md) | Transforms git commits into polished user-facing changelogs by categorising changes and rewriting technical commit messages | Preparing release notes, app store update descriptions, or a public changelog |
151
+ | [ci-fix-loop](packages/software-development/ci-fix-loop/SKILL.md) | Diagnoses GitHub Actions CI failures in a loop: fetches failing check logs, applies a targeted fix, pushes, and waits for the next run — repeating until green or a blocker needs a human | CI is red after a push and you want it driven to green automatically |
151
152
  | [cloudflare-block-countries](packages/software-development/cloudflare-block-countries/SKILL.md) | Blocks specific countries via Cloudflare WAF Custom Rules using the API | Geo-blocking traffic or setting up WAF country rules across single or multiple zones |
152
153
  | [coderabbitloop](packages/software-development/coderabbitloop/SKILL.md) | Iteratively drives a GitHub PR to zero unresolved CodeRabbit findings, reading each inline comment's own Prompt for AI Agents block, replying to the thread, and resolving it | Fully addressing a PR against CodeRabbit's review before merging |
153
154
  | [crash-course](packages/software-development/crash-course/SKILL.md) | Expert tutor for rapid, source-grounded learning of any topic: a timed 4-hour sprint plus cheat-sheet, learning-ladder, quiz-me, Feynman, and resource-curation modes | Ramping up on an unfamiliar codebase, project, or concept under time pressure |
@@ -160,6 +161,7 @@ Each entry links to its `SKILL.md`. Reference any skill by its `olko:*` lookup n
160
161
  | [obsidian-task-rollover](packages/software-development/obsidian-task-rollover/SKILL.md) | Migrates unchecked tasks from today's Obsidian daily note to the next workday under `## Carried over` | End-of-day bullet-journal task migration |
161
162
  | [open-source-publisher](packages/software-development/open-source-publisher/SKILL.md) | Prepares an open-source repository for public publishing with branding, CI/CD, and release hygiene | Releasing a private project publicly with proper GitHub Pages, README, and social preview |
162
163
  | [product-builder](packages/software-development/product-builder/SKILL.md) | Builds a full-stack web app or SaaS product from a user description using production-oriented defaults | Building a complete app, SaaS, dashboard, or product rather than a prototype |
164
+ | [pr-description-writer](packages/software-development/pr-description-writer/SKILL.md) | Drafts and posts a GitHub PR title and body from git diff and commit history, respecting existing PR templates | Opening a PR after pushing a branch or wanting a structured PR description written automatically |
163
165
  | [promptctl](packages/software-development/promptctl/SKILL.md) | Uses `promptctl` for reusable prompt templates, scoring, and workflow automation | A project needs prompt conventions, review, scoring, or reusable prompt workflows |
164
166
  | [qodoloop](packages/software-development/qodoloop/SKILL.md) | Iteratively drives a GitHub PR to zero unresolved Qodo findings, reading each finding's own Agent Prompt, replying to the thread, and resolving it | Fully addressing a PR against Qodo's code review before merging |
165
167
  | [relay](packages/software-development/relay/SKILL.md) | Uses `claude-relay` to run long or rate-limit-prone tasks autonomously across subscription accounts | A task will outlive one session or hit rate limits partway through |
@@ -168,6 +170,7 @@ Each entry links to its `SKILL.md`. Reference any skill by its `olko:*` lookup n
168
170
  | [semantic-release-beta](packages/software-development/semantic-release-beta/SKILL.md) | Sets up `semantic-release` with stable `main` releases and beta prereleases on a `beta` branch | A Node package needs stable npm publishing plus beta prereleases |
169
171
  | [skill-budget-audit](packages/software-development/skill-budget-audit/SKILL.md) | Diagnoses and fixes Claude Code's skill context budget overflow — identifies heavy plugin bundles that exceed the 2% budget | Skills failing to load or Claude hitting context limits from plugin bundles |
170
172
  | [starter-rules](packages/software-development/starter-rules/SKILL.md) | Loads and enforces hard rules for every oleg-koval/* starter | Ensuring 300-line files, E2E tests, pre-commit hooks, Vertical Slice architecture, and KISS/DRY/SOLID |
173
+ | [wikipedia-uk-editor](packages/software-development/wikipedia-uk-editor/SKILL.md) | Drafts policy-compliant Ukrainian Wikipedia edits — en→uk translation, stub expansion, sourcing, backlog cleanup — returning ready-to-paste wikitext, an edit summary, and a verified source list | Editing, translating, or sourcing a uk.wikipedia.org article, or planning what to contribute next |
171
174
 
172
175
  ### Marketing (2)
173
176
 
@@ -672,6 +672,76 @@
672
672
  "kiro",
673
673
  "grok"
674
674
  ]
675
+ },
676
+ {
677
+ "name": "wikipedia-uk-editor",
678
+ "lookupName": "olko:wikipedia-uk-editor",
679
+ "category": "software-development",
680
+ "path": "packages/software-development/wikipedia-uk-editor",
681
+ "description": "Draft policy-compliant Ukrainian Wikipedia edits \u2014 translate an English article into uk, expand or source an existing uk article, or fix a maintenance backlog item \u2014 and return ready-to-paste wikitext plus an edit summary.",
682
+ "tags": [
683
+ "wikipedia",
684
+ "ukrainian",
685
+ "wikitext",
686
+ "translation",
687
+ "sourcing",
688
+ "editing"
689
+ ],
690
+ "adapters": [
691
+ "codex",
692
+ "claude",
693
+ "cursor",
694
+ "copilot",
695
+ "grok",
696
+ "windsurf",
697
+ "kiro",
698
+ "hermes",
699
+ "pi"
700
+ ]
701
+ },
702
+ {
703
+ "name": "pr-description-writer",
704
+ "lookupName": "olko:pr-description-writer",
705
+ "category": "software-development",
706
+ "path": "packages/software-development/pr-description-writer",
707
+ "description": "Draft and post a GitHub PR title and body from git diff and commit history. Chains after git-commit and before qodoloop / coderabbitloop.",
708
+ "tags": [
709
+ "git",
710
+ "github",
711
+ "pull-request",
712
+ "description",
713
+ "pr",
714
+ "workflow"
715
+ ],
716
+ "adapters": [
717
+ "codex",
718
+ "claude",
719
+ "cursor",
720
+ "copilot",
721
+ "grok"
722
+ ]
723
+ },
724
+ {
725
+ "name": "ci-fix-loop",
726
+ "lookupName": "olko:ci-fix-loop",
727
+ "category": "software-development",
728
+ "path": "packages/software-development/ci-fix-loop",
729
+ "description": "Diagnose GitHub Actions CI failures in a loop: fetch failing check logs, fix, push, and repeat until green. Direct analog of qodoloop / coderabbitloop for test and lint failures.",
730
+ "tags": [
731
+ "github-actions",
732
+ "ci",
733
+ "testing",
734
+ "automation",
735
+ "loop",
736
+ "fix"
737
+ ],
738
+ "adapters": [
739
+ "codex",
740
+ "claude",
741
+ "cursor",
742
+ "copilot",
743
+ "grok"
744
+ ]
675
745
  }
676
746
  ]
677
747
  }
@@ -10,6 +10,7 @@
10
10
  "promptctl",
11
11
  "open-source-publisher",
12
12
  "product-builder",
13
- "mvp-oneshot"
13
+ "mvp-oneshot",
14
+ "wikipedia-uk-editor"
14
15
  ]
15
16
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@olegkoval/agent-skills",
3
- "version": "1.21.1",
3
+ "version": "1.23.0",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -0,0 +1,202 @@
1
+ ---
2
+ name: ci-fix-loop
3
+ description: >
4
+ Diagnose GitHub Actions CI failures in a loop: fetch the failing check logs, identify
5
+ the root cause, apply a targeted fix, push, and wait for the next run — repeating until
6
+ all checks are green or a real blocker needs a human. Use when CI is red after a push,
7
+ when the user says "fix CI", "make tests pass", "diagnose CI failures", or "drive this
8
+ to green". Direct analog of qodoloop / coderabbitloop for automated test and lint failures.
9
+ license: MIT
10
+ allowed-tools: Bash, Read, Write, Edit
11
+ compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires git and gh (GitHub CLI) authenticated, with a GitHub Actions workflow configured.
12
+ metadata:
13
+ targets: [_source-only]
14
+ author: Oleg Koval
15
+ tags:
16
+ - github-actions
17
+ - ci
18
+ - testing
19
+ - automation
20
+ - loop
21
+ - fix
22
+ source: weekly-pattern-learner
23
+ source_reason: "qodoloop and coderabbitloop share the push→poll→diagnose→fix→repeat loop; CI failures have the same shape but no dedicated skill existed"
24
+ source_date: "2026-07-28"
25
+ ---
26
+
27
+ > 🤖 *Auto-generated by **weekly-pattern-learner** · qodoloop and coderabbitloop share the push→poll→diagnose→fix→repeat loop; CI failures have the same shape but no dedicated skill existed*
28
+
29
+ # CI Fix Loop
30
+
31
+ Drive a GitHub Actions CI run from red to green: fetch failure logs, diagnose, apply
32
+ a targeted fix, push, and repeat until all required checks pass or a blocker is hit.
33
+
34
+ ## Inputs
35
+
36
+ - **PR number** (optional): detect from current branch if not given.
37
+ - **Check names** (optional): limit to specific failing checks instead of all.
38
+ - **Max iterations** (default: 5)
39
+
40
+ ## Workflow
41
+
42
+ ### 1. Identify the PR and current CI state
43
+
44
+ ```bash
45
+ # Detect PR from current branch
46
+ gh pr view --json number,headRefName,headRefOid \
47
+ -q '{number, branch: .headRefName, sha: .headRefOid}'
48
+
49
+ # Current check status
50
+ gh pr checks --json name,state,conclusion 2>/dev/null \
51
+ || gh run list --branch <branch> --limit 5
52
+ ```
53
+
54
+ Classify each check as: `pass`, `fail`, `pending`, or `skipped`.
55
+
56
+ **Exit immediately if all required checks already pass** — nothing to do.
57
+
58
+ ### 2. Loop (max 5 iterations)
59
+
60
+ #### A. Identify failing checks
61
+
62
+ ```bash
63
+ gh pr checks --json name,state,conclusion \
64
+ --jq '.[] | select(.conclusion == "failure" or .state == "FAILURE")'
65
+ ```
66
+
67
+ For each failing check, record: check name, workflow file, job name.
68
+
69
+ Stop if the working set is empty — all required checks are green.
70
+
71
+ #### B. Check for base-branch regression first
72
+
73
+ Before touching any code, verify the failure is not already present on `main`:
74
+
75
+ ```bash
76
+ gh run list --branch <base-branch> --workflow <workflow-name> --limit 3 \
77
+ --json conclusion --jq '.[].conclusion'
78
+ ```
79
+
80
+ If the same check is failing on the base branch, **stop and report** —
81
+ this is not your PR's fault. Do not attempt a fix that masks a base-branch problem.
82
+ Wait for a `Base branch recovered` notice before re-trying.
83
+
84
+ #### C. Fetch failure logs
85
+
86
+ For each failing check:
87
+
88
+ ```bash
89
+ # Latest run ID for this branch/workflow
90
+ gh run list --branch <branch> --workflow <workflow-name> --limit 1 \
91
+ --json databaseId --jq '.[0].databaseId'
92
+
93
+ # Fetch only failing steps (not the full log)
94
+ gh run view <run-id> --log-failed
95
+ ```
96
+
97
+ Cap log reading at ~200 lines per job — the error is almost always in the last
98
+ 50 lines of a failed step.
99
+
100
+ #### D. Diagnose
101
+
102
+ Classify the failure before writing any code:
103
+
104
+ | Category | Examples | Fix target |
105
+ |---|---|---|
106
+ | Test failure | `FAIL TestFoo`, `AssertionError`, `expected X got Y` | Source or test |
107
+ | Lint / format | `gofmt`, `eslint`, `ruff`, `prettier` | Run auto-formatter |
108
+ | Build error | compile error, missing import, type mismatch | Source |
109
+ | Dependency | `npm ERR!`, missing module, lockfile mismatch | Update lockfile |
110
+ | CI config | YAML parse error, bad action ref, missing secret | Workflow YAML |
111
+ | Flaky test | same test passes on manual re-run | Re-run first; mark if it keeps failing |
112
+
113
+ For flaky-looking failures, re-run the check before touching code:
114
+
115
+ ```bash
116
+ gh run rerun <run-id> --failed
117
+ ```
118
+
119
+ Wait for the rerun result. If it passes on rerun, skip this iteration and go to
120
+ step F to poll for the new result.
121
+
122
+ #### E. Apply a targeted fix
123
+
124
+ Fix **only** what the log names as the failure. Do not refactor surrounding code,
125
+ add unrelated tests, or touch files the failing step never mentioned.
126
+
127
+ Common one-liners:
128
+
129
+ ```bash
130
+ # Go format
131
+ gofmt -w .
132
+ goimports -w .
133
+
134
+ # Node format / lint
135
+ npx prettier --write .
136
+ npx eslint --fix .
137
+
138
+ # Python
139
+ ruff check --fix .
140
+ black .
141
+
142
+ # Lockfile
143
+ npm install # Node
144
+ poetry lock --no-update # Python
145
+ go mod tidy # Go
146
+ ```
147
+
148
+ For test failures: read the failing test and the code it exercises. Fix the code
149
+ or the assertion — but not both in one commit unless the test was clearly wrong
150
+ and the fix is trivial.
151
+
152
+ #### F. Commit and push
153
+
154
+ Stage **only the files touched in step E** — never `git add -A`, which can sweep
155
+ in unrelated local changes:
156
+
157
+ ```bash
158
+ git add <files touched>
159
+ git commit -m "fix(ci): <what was broken> (ci-fix-loop iteration N)"
160
+ git push
161
+ ```
162
+
163
+ Confirm the push succeeded before polling. A resolved check whose fix never reached
164
+ the branch is worse than an unresolved one.
165
+
166
+ #### G. Wait for CI on the new SHA
167
+
168
+ Poll every ~15s (timeout ~8min) for all previously-failing checks to complete
169
+ on the new push:
170
+
171
+ ```bash
172
+ gh pr checks --json name,state,conclusion,startedAt
173
+ ```
174
+
175
+ Wait until all previously-failing checks show a new result (`pass` or `fail`)
176
+ on the current SHA. Do not act on a result that still shows the old SHA.
177
+
178
+ Go back to step A.
179
+
180
+ ### 3. Report
181
+
182
+ | Field | Value |
183
+ |---|---|
184
+ | Iterations | N |
185
+ | Checks fixed | names + root cause |
186
+ | Checks blocked | names + reason (flaky / needs human / base-branch red) |
187
+ | Final status | all green / partial / blocked |
188
+
189
+ ```
190
+ CI fix loop complete.
191
+ Iterations: 2
192
+ Fixed: lint (gofmt: 3 files), test (TestUserCreate — nil pointer in fixture)
193
+ Blocked: none
194
+ Status: all required checks green
195
+ ```
196
+
197
+ ## Chaining
198
+
199
+ | Before this skill | After this skill |
200
+ |---|---|
201
+ | `olko:pr-description-writer` | `olko:qodoloop` |
202
+ | Any `git push` with failing CI | `olko:coderabbitloop` |
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": "olko-ci-fix-loop",
3
+ "description": "Diagnose GitHub Actions CI failures in a loop: fetch failing check logs, fix, push, and repeat until green. Direct analog of qodoloop / coderabbitloop for test and lint failures.",
4
+ "skills": "./skills"
5
+ }