@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.
- package/.claude-plugin/plugin.json +5 -2
- package/.cursor-plugin/index.json +15 -0
- package/.grok-plugin/index.json +15 -0
- package/.kiro/steering/wikipedia-uk-editor.md +105 -0
- package/.windsurf/rules/wikipedia-uk-editor.md +104 -0
- package/README.md +4 -1
- package/catalog/skills.json +70 -0
- package/collections/software-development.json +2 -1
- package/package.json +1 -1
- package/packages/software-development/ci-fix-loop/SKILL.md +202 -0
- package/packages/software-development/ci-fix-loop/adapters/claude/plugin.json +5 -0
- package/packages/software-development/ci-fix-loop/adapters/claude/skills/ci-fix-loop/SKILL.md +203 -0
- package/packages/software-development/ci-fix-loop/adapters/codex/README.md +20 -0
- package/packages/software-development/ci-fix-loop/adapters/cursor/plugin.json +6 -0
- package/packages/software-development/ci-fix-loop/adapters/cursor/skills/ci-fix-loop/SKILL.md +203 -0
- package/packages/software-development/ci-fix-loop/adapters/grok/plugin.json +6 -0
- package/packages/software-development/ci-fix-loop/adapters/grok/skills/ci-fix-loop/SKILL.md +203 -0
- package/packages/software-development/pr-description-writer/SKILL.md +152 -0
- package/packages/software-development/pr-description-writer/adapters/claude/plugin.json +5 -0
- package/packages/software-development/pr-description-writer/adapters/claude/skills/pr-description-writer/SKILL.md +153 -0
- package/packages/software-development/pr-description-writer/adapters/codex/README.md +19 -0
- package/packages/software-development/pr-description-writer/adapters/cursor/plugin.json +6 -0
- package/packages/software-development/pr-description-writer/adapters/cursor/skills/pr-description-writer/SKILL.md +153 -0
- package/packages/software-development/pr-description-writer/adapters/grok/plugin.json +6 -0
- package/packages/software-development/pr-description-writer/adapters/grok/skills/pr-description-writer/SKILL.md +153 -0
- package/packages/software-development/wikipedia-uk-editor/SKILL.md +116 -0
- package/packages/software-development/wikipedia-uk-editor/adapters/claude/plugin.json +5 -0
- package/packages/software-development/wikipedia-uk-editor/adapters/claude/skills/wikipedia-uk-editor/SKILL.md +117 -0
- package/packages/software-development/wikipedia-uk-editor/adapters/claude/skills/wikipedia-uk-editor/references/strategy.md +97 -0
- package/packages/software-development/wikipedia-uk-editor/adapters/claude/skills/wikipedia-uk-editor/references/wikitext-uk.md +121 -0
- package/packages/software-development/wikipedia-uk-editor/adapters/claude/skills/wikipedia-uk-editor/scripts/wiki.sh +98 -0
- package/packages/software-development/wikipedia-uk-editor/adapters/codex/README.md +20 -0
- package/packages/software-development/wikipedia-uk-editor/adapters/cursor/plugin.json +6 -0
- package/packages/software-development/wikipedia-uk-editor/adapters/cursor/skills/wikipedia-uk-editor/SKILL.md +117 -0
- package/packages/software-development/wikipedia-uk-editor/adapters/cursor/skills/wikipedia-uk-editor/references/strategy.md +97 -0
- package/packages/software-development/wikipedia-uk-editor/adapters/cursor/skills/wikipedia-uk-editor/references/wikitext-uk.md +121 -0
- package/packages/software-development/wikipedia-uk-editor/adapters/cursor/skills/wikipedia-uk-editor/scripts/wiki.sh +98 -0
- package/packages/software-development/wikipedia-uk-editor/adapters/grok/plugin.json +6 -0
- package/packages/software-development/wikipedia-uk-editor/adapters/grok/skills/wikipedia-uk-editor/SKILL.md +117 -0
- package/packages/software-development/wikipedia-uk-editor/adapters/grok/skills/wikipedia-uk-editor/references/strategy.md +97 -0
- package/packages/software-development/wikipedia-uk-editor/adapters/grok/skills/wikipedia-uk-editor/references/wikitext-uk.md +121 -0
- package/packages/software-development/wikipedia-uk-editor/adapters/grok/skills/wikipedia-uk-editor/scripts/wiki.sh +98 -0
- package/packages/software-development/wikipedia-uk-editor/adapters/hermes/README.md +3 -0
- package/packages/software-development/wikipedia-uk-editor/adapters/kiro/steering/wikipedia-uk-editor.md +105 -0
- package/packages/software-development/wikipedia-uk-editor/adapters/pi/README.md +3 -0
- package/packages/software-development/wikipedia-uk-editor/adapters/windsurf/rules/wikipedia-uk-editor.md +104 -0
- package/packages/software-development/wikipedia-uk-editor/references/strategy.md +97 -0
- package/packages/software-development/wikipedia-uk-editor/references/wikitext-uk.md +121 -0
- 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.
|
|
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
|
}
|
package/.grok-plugin/index.json
CHANGED
|
@@ -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 (
|
|
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
|
|
package/catalog/skills.json
CHANGED
|
@@ -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
|
}
|
package/package.json
CHANGED
|
@@ -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` |
|