@olegkoval/agent-skills 1.30.0 → 1.32.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 (45) hide show
  1. package/.claude-plugin/plugin.json +4 -2
  2. package/.cursor-plugin/index.json +5 -0
  3. package/.grok-plugin/index.json +5 -0
  4. package/.kiro/steering/website-analytics-bootstrap.md +159 -0
  5. package/.kiro/steering/wikipedia-uk-editor.md +24 -3
  6. package/.windsurf/rules/website-analytics-bootstrap.md +158 -0
  7. package/.windsurf/rules/wikipedia-uk-editor.md +24 -3
  8. package/README.md +8 -6
  9. package/catalog/skills.json +42 -0
  10. package/collections/marketing.json +1 -1
  11. package/collections/software-development.json +2 -1
  12. package/package.json +1 -1
  13. package/packages/marketing/website-analytics-bootstrap/SKILL.md +171 -0
  14. package/packages/marketing/website-analytics-bootstrap/adapters/claude/plugin.json +5 -0
  15. package/packages/marketing/website-analytics-bootstrap/adapters/claude/skills/website-analytics-bootstrap/SKILL.md +172 -0
  16. package/packages/marketing/website-analytics-bootstrap/adapters/cursor/plugin.json +6 -0
  17. package/packages/marketing/website-analytics-bootstrap/adapters/cursor/skills/website-analytics-bootstrap/SKILL.md +172 -0
  18. package/packages/marketing/website-analytics-bootstrap/adapters/grok/plugin.json +6 -0
  19. package/packages/marketing/website-analytics-bootstrap/adapters/grok/skills/website-analytics-bootstrap/SKILL.md +172 -0
  20. package/packages/marketing/website-analytics-bootstrap/adapters/kiro/steering/website-analytics-bootstrap.md +159 -0
  21. package/packages/marketing/website-analytics-bootstrap/adapters/windsurf/rules/website-analytics-bootstrap.md +158 -0
  22. package/packages/software-development/shared-knowledge-artifact/SKILL.md +89 -0
  23. package/packages/software-development/shared-knowledge-artifact/adapters/claude/plugin.json +5 -0
  24. package/packages/software-development/shared-knowledge-artifact/adapters/claude/skills/shared-knowledge-artifact/SKILL.md +90 -0
  25. package/packages/software-development/shared-knowledge-artifact/adapters/claude/skills/shared-knowledge-artifact/references/prompt.txt +78 -0
  26. package/packages/software-development/shared-knowledge-artifact/references/prompt.txt +78 -0
  27. package/packages/software-development/wikipedia-uk-editor/SKILL.md +24 -3
  28. package/packages/software-development/wikipedia-uk-editor/adapters/claude/skills/wikipedia-uk-editor/SKILL.md +24 -3
  29. package/packages/software-development/wikipedia-uk-editor/adapters/claude/skills/wikipedia-uk-editor/references/newcomer-tasks.md +80 -0
  30. package/packages/software-development/wikipedia-uk-editor/adapters/claude/skills/wikipedia-uk-editor/references/strategy.md +10 -0
  31. package/packages/software-development/wikipedia-uk-editor/adapters/claude/skills/wikipedia-uk-editor/scripts/wiki.sh +58 -2
  32. package/packages/software-development/wikipedia-uk-editor/adapters/codex/README.md +39 -9
  33. package/packages/software-development/wikipedia-uk-editor/adapters/cursor/skills/wikipedia-uk-editor/SKILL.md +24 -3
  34. package/packages/software-development/wikipedia-uk-editor/adapters/cursor/skills/wikipedia-uk-editor/references/newcomer-tasks.md +80 -0
  35. package/packages/software-development/wikipedia-uk-editor/adapters/cursor/skills/wikipedia-uk-editor/references/strategy.md +10 -0
  36. package/packages/software-development/wikipedia-uk-editor/adapters/cursor/skills/wikipedia-uk-editor/scripts/wiki.sh +58 -2
  37. package/packages/software-development/wikipedia-uk-editor/adapters/grok/skills/wikipedia-uk-editor/SKILL.md +24 -3
  38. package/packages/software-development/wikipedia-uk-editor/adapters/grok/skills/wikipedia-uk-editor/references/newcomer-tasks.md +80 -0
  39. package/packages/software-development/wikipedia-uk-editor/adapters/grok/skills/wikipedia-uk-editor/references/strategy.md +10 -0
  40. package/packages/software-development/wikipedia-uk-editor/adapters/grok/skills/wikipedia-uk-editor/scripts/wiki.sh +58 -2
  41. package/packages/software-development/wikipedia-uk-editor/adapters/kiro/steering/wikipedia-uk-editor.md +24 -3
  42. package/packages/software-development/wikipedia-uk-editor/adapters/windsurf/rules/wikipedia-uk-editor.md +24 -3
  43. package/packages/software-development/wikipedia-uk-editor/references/newcomer-tasks.md +80 -0
  44. package/packages/software-development/wikipedia-uk-editor/references/strategy.md +10 -0
  45. package/packages/software-development/wikipedia-uk-editor/scripts/wiki.sh +58 -2
@@ -0,0 +1,90 @@
1
+ ---
2
+ name: shared-knowledge-artifact
3
+ description: Build a shared, self-persisting knowledge ledger as a Claude Artifact — a private page that stores its own data, renders itself from that data, and saves new versions of itself, so several agents can read the same lessons before starting work and append to them afterwards. Use when the user wants agents to learn from each other, asks for a shared knowledge base, lessons-learned log, gotcha ledger, or cross-agent memory page they can hand to other sessions.
4
+ license: MIT
5
+ allowed-tools: Bash, Read, Write, Edit, Grep, Glob, Skill, Artifact
6
+ compatibility: Claude Code only — requires the Artifact tool and the artifact runtime capabilities (`capabilities: {artifact: {}}`).
7
+ metadata:
8
+ author: Oleg Koval
9
+ package: shared-knowledge-artifact
10
+ tags:
11
+ - artifacts
12
+ - knowledge-base
13
+ - multi-agent
14
+ - memory
15
+ - lessons-learned
16
+ - documentation
17
+ ---
18
+ <!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
19
+
20
+ # shared-knowledge-artifact
21
+
22
+ Publish one private Artifact page that acts as an append-only knowledge ledger which multiple agents (and the user) read before starting work and write to when reality corrects them. The page **is** the record: it stores its own data and publishes new versions of itself, so nothing depends on a server or on local files.
23
+
24
+ ## Trigger phrases
25
+
26
+ - create a shared artifact my other agents can learn from
27
+ - shared knowledge base / lessons-learned log / gotcha ledger for agents
28
+ - cross-agent memory page
29
+ - somewhere agents can record what they learned so they don't repeat it
30
+
31
+ ## Before writing any code
32
+
33
+ 1. Invoke the `artifact-capabilities` skill — mandatory before declaring `capabilities` or writing any `window.claude.*` code.
34
+ 2. Invoke the `artifact-design` skill — calibrates the design treatment.
35
+ 3. Read the user's actual rules (`CLAUDE.md`, any verification/preferences doc, agent memory) and **seed the ledger with 6-10 real lessons already recorded there**. No lorem, no invented examples — a ledger that opens with fake entries never gets used.
36
+
37
+ ## Persistence mechanism
38
+
39
+ - Declare `capabilities: {artifact: {}}` at publish time.
40
+ - Store the data as a JSON object inside `<script type="application/json" id="ledger-state">`. That block is the authoritative record; the visible page is **rendered from it** at load. Never serialize the live DOM to save.
41
+ - To persist: snapshot `document.documentElement.outerHTML` **once at script start** (pristine source, before any rendering), then on save splice the new JSON into that snapshot's `#ledger-state` block, prepend `<!doctype html>`, and call `artifact.publish(doc)`.
42
+ - Get the namespace with `const artifact = await claude.use("artifact")`; branch on `null` (this view cannot write) and render a read-only state instead of a broken control.
43
+ - Handle publish errors by code: `conflict` means someone published first and every view reloads to the winner — no retry, tell the person to re-add; `not_granted` / `not_writer` means read-only.
44
+ - Publish only after an explicit user action, never on load; batch rapid edits into one publish.
45
+ - Escape `</script` when writing the JSON back, and escape every interpolated note field on render.
46
+
47
+ ## Note schema
48
+
49
+ One fact per entry:
50
+
51
+ ```json
52
+ {"id":"n9","kind":"lesson|trap|pref","scope":"shell|review|github|...",
53
+ "title":"the rule in one line",
54
+ "body":"the concrete behaviour, specific enough to act on",
55
+ "why":"the failure that made this a rule",
56
+ "author":"model or agent name","date":"YYYY-MM-DD"}
57
+ ```
58
+
59
+ Kinds: **lesson** = a habit that holds; **trap** = something that silently produces a *wrong* answer; **pref** = how the user wants the work done.
60
+
61
+ ## UI the page must have
62
+
63
+ - Header: name, one paragraph on what the ledger is for, and live counts (total, traps, lessons, preferences) in `tabular-nums`.
64
+ - Note list, newest first: kind tag, scope tag, author, date, title, body, and a `Why:` line. Kind tags use semantic colour (trap = critical, pref = warning, lesson = accent), separate from the page accent.
65
+ - Scope filter chips derived from the data, including an `all` chip, with `aria-pressed` state.
66
+ - An "Add a note" form (kind, scope, author, title, body, why) that appends to the JSON and publishes, with an inline status line reporting published / conflict / read-only.
67
+ - A "Protocol for agents" section **on the page itself**: read the page with the Artifact tool `action: "read"` before substantive work; parse the `#ledger-state` JSON, never scrape the DOM; **append, don't rewrite**; re-read before writing because another agent may have published since; one fact per note with the failure that caused it. Include the schema snippet.
68
+ - Gatekeeping copy: only non-obvious, durable, cross-cutting lessons. If a repo's `CLAUDE.md` already says it, or a review bot already catches it, leave it out — a littered ledger is worse than a thin one.
69
+
70
+ ## Design constraints
71
+
72
+ - Utilitarian but genuinely polished: this is a reference document, not a landing page. No oversized hero, no emoji section markers, no gradient hero, no everything-centered layout.
73
+ - Avoid the AI-default looks: warm cream + serif + terracotta, near-black + acid green, Inter or Space Grotesk as the "safe" face.
74
+ - Pair a display face, a body face, and a mono utility face from Google Fonts (the only permitted external host), each with a real fallback stack.
75
+ - Theme-aware in all three states: full light palette as tokens on bare `:root`; redefined under `@media (prefers-color-scheme: dark)` guarded as `:root:not([data-theme="light"])`; redefined again under `:root[data-theme="dark"]`. Style everything through tokens and give `body` an explicit token background. No colour whose only definition sits inside a media or `[data-theme]` block.
76
+ - Layout with flex/grid + `gap`, not per-element margins. Wide content in its own `overflow-x: auto` container. Visible focus states. Respect `prefers-reduced-motion`.
77
+ - Title: a short, specific noun-phrase product name (2-4 words), no dash-explainer. Pass a one-sentence `description` and an emoji `favicon`, and keep both stable across redeploys.
78
+
79
+ ## Deliverable
80
+
81
+ Write the HTML to a file, publish it with the Artifact tool, then report:
82
+
83
+ - the URL;
84
+ - that it stays private until shared from the page's share menu;
85
+ - the exact instructions another agent needs — read via Artifact `action: "read"` with that URL, and write by appending to `notes` and republishing **with `url` set to that URL** (a publish *without* `url` forks a separate artifact instead of updating this one).
86
+
87
+ ## Notes
88
+
89
+ - The full copy-paste prompt version of this workflow lives in `references/prompt.txt` — hand it to another agent or session verbatim.
90
+ - Redeploy by republishing the same file path in the same conversation, or by passing `url` from any other conversation.
@@ -0,0 +1,78 @@
1
+ BUILD A SHARED AGENT-KNOWLEDGE ARTIFACT
2
+
3
+ Goal
4
+ Publish a single private Claude Artifact page that acts as an append-only, self-persisting
5
+ knowledge ledger which multiple agents (and I) read before starting work and write to when
6
+ reality corrects us. The page IS the record: it stores its own data and saves new versions of
7
+ itself, so nothing depends on a server or on my local files.
8
+
9
+ Before writing any code
10
+ 1. Load the artifact-capabilities skill (you must, before declaring capabilities or writing any
11
+ window.claude.* code) and the artifact-design skill (calibrates the design treatment).
12
+ 2. Read my global rules (CLAUDE.md / VERIFICATION.md / memory) and seed the ledger with 6-10
13
+ REAL lessons already recorded there. No lorem, no invented examples.
14
+
15
+ Required behaviour
16
+ - Declare capabilities: {artifact: {}} so the page can publish new versions of itself.
17
+ - Store the data as a JSON object inside a <script type="application/json" id="ledger-state">
18
+ block. That block is the authoritative record; the visible page is RENDERED from it at load.
19
+ Never serialize the live DOM to save.
20
+ - To persist: snapshot document.documentElement.outerHTML once at script start (pristine source,
21
+ before any rendering), then on save splice the new JSON into the #ledger-state block of that
22
+ snapshot, prepend <!doctype html>, and call artifact.publish(doc).
23
+ - Get the namespace with: const artifact = await claude.use("artifact"); branch on null (view
24
+ cannot write) and render a read-only state instead of a broken control.
25
+ - Handle publish errors by code: "conflict" means someone published first and every view reloads
26
+ to the winner (no retry - tell the person to re-add); "not_granted"/"not_writer" means
27
+ read-only. Publish only after an explicit user action, never on page load, and batch rapid
28
+ edits into one publish.
29
+
30
+ Note schema (one fact per entry)
31
+ {"id":"...", "kind":"lesson|trap|pref", "scope":"shell|review|github|...",
32
+ "title":"the rule in one line", "body":"the concrete behaviour, specific enough to act on",
33
+ "why":"the failure that made this a rule", "author":"model or agent name",
34
+ "date":"YYYY-MM-DD"}
35
+ Kinds: lesson = a habit that holds; trap = something that silently produces a WRONG answer;
36
+ pref = how I want the work done.
37
+
38
+ UI the page must have
39
+ - Header: title, one-paragraph statement of what the ledger is for, and live counts
40
+ (total notes, traps, lessons, preferences) in tabular-nums.
41
+ - Note list, newest first, each note showing kind tag, scope tag, author, date, title, body,
42
+ and a "Why:" line. Kind tags carry semantic colour (trap = critical, pref = warning,
43
+ lesson = accent) separate from the page accent.
44
+ - Scope filter chips derived from the data, including an "all" chip, with aria-pressed state.
45
+ - An "Add a note" form (kind select, scope, author, title, body, why) that appends to the JSON
46
+ and publishes, with an inline status line reporting published / conflict / read-only.
47
+ - A "Protocol for agents" section, on the page itself, stating: read the page with the Artifact
48
+ tool action "read" before substantive work; parse the #ledger-state JSON, never scrape the DOM;
49
+ APPEND, don't rewrite; re-read before writing because another agent may have published since;
50
+ and one fact per note with the failure that caused it. Include a copyable JSON snippet of the
51
+ schema.
52
+ - Gatekeeping copy: only non-obvious, durable, cross-cutting lessons. If a repo's CLAUDE.md
53
+ already says it or a review bot already catches it, leave it out. A littered ledger is worse
54
+ than a thin one.
55
+
56
+ Design constraints
57
+ - Utilitarian but genuinely polished; this is a reference document, not a landing page. No
58
+ oversized hero, no emoji section markers, no gradient hero, no everything-centered layout.
59
+ - Avoid the AI-default looks: warm cream + serif + terracotta, near-black + acid green, Inter or
60
+ Space Grotesk as the safe face.
61
+ - Pair a display face with a body face and a mono utility face from Google Fonts (the only
62
+ permitted external host), each with a real fallback stack.
63
+ - Theme-aware in all three states: full light palette as tokens on bare :root, redefined under
64
+ @media (prefers-color-scheme: dark) guarded as :root:not([data-theme="light"]), and again under
65
+ :root[data-theme="dark"]. Style everything through tokens; body must set an explicit token
66
+ background. No colour whose only definition sits inside a media or [data-theme] block.
67
+ - Layout with flex/grid + gap, not per-element margins. Wide content in its own overflow-x:auto
68
+ container. Visible focus states. Respect prefers-reduced-motion.
69
+ - Escape all interpolated note text on render, and escape "</script" when writing the JSON back.
70
+ - Title: a short, specific noun-phrase product name (2-4 words), no dash-explainer. Pass a
71
+ one-sentence description and an emoji favicon, and keep both stable across redeploys.
72
+
73
+ Deliverable
74
+ Write the HTML to a file, publish it with the Artifact tool, and report back: the URL, the fact
75
+ that it is private until shared from the page's share menu, and the exact instructions another
76
+ agent needs - read via Artifact action "read" with that URL, and write by appending to notes and
77
+ republishing with `url` set to that URL (a publish WITHOUT url forks a separate artifact instead
78
+ of updating this one).
@@ -0,0 +1,78 @@
1
+ BUILD A SHARED AGENT-KNOWLEDGE ARTIFACT
2
+
3
+ Goal
4
+ Publish a single private Claude Artifact page that acts as an append-only, self-persisting
5
+ knowledge ledger which multiple agents (and I) read before starting work and write to when
6
+ reality corrects us. The page IS the record: it stores its own data and saves new versions of
7
+ itself, so nothing depends on a server or on my local files.
8
+
9
+ Before writing any code
10
+ 1. Load the artifact-capabilities skill (you must, before declaring capabilities or writing any
11
+ window.claude.* code) and the artifact-design skill (calibrates the design treatment).
12
+ 2. Read my global rules (CLAUDE.md / VERIFICATION.md / memory) and seed the ledger with 6-10
13
+ REAL lessons already recorded there. No lorem, no invented examples.
14
+
15
+ Required behaviour
16
+ - Declare capabilities: {artifact: {}} so the page can publish new versions of itself.
17
+ - Store the data as a JSON object inside a <script type="application/json" id="ledger-state">
18
+ block. That block is the authoritative record; the visible page is RENDERED from it at load.
19
+ Never serialize the live DOM to save.
20
+ - To persist: snapshot document.documentElement.outerHTML once at script start (pristine source,
21
+ before any rendering), then on save splice the new JSON into the #ledger-state block of that
22
+ snapshot, prepend <!doctype html>, and call artifact.publish(doc).
23
+ - Get the namespace with: const artifact = await claude.use("artifact"); branch on null (view
24
+ cannot write) and render a read-only state instead of a broken control.
25
+ - Handle publish errors by code: "conflict" means someone published first and every view reloads
26
+ to the winner (no retry - tell the person to re-add); "not_granted"/"not_writer" means
27
+ read-only. Publish only after an explicit user action, never on page load, and batch rapid
28
+ edits into one publish.
29
+
30
+ Note schema (one fact per entry)
31
+ {"id":"...", "kind":"lesson|trap|pref", "scope":"shell|review|github|...",
32
+ "title":"the rule in one line", "body":"the concrete behaviour, specific enough to act on",
33
+ "why":"the failure that made this a rule", "author":"model or agent name",
34
+ "date":"YYYY-MM-DD"}
35
+ Kinds: lesson = a habit that holds; trap = something that silently produces a WRONG answer;
36
+ pref = how I want the work done.
37
+
38
+ UI the page must have
39
+ - Header: title, one-paragraph statement of what the ledger is for, and live counts
40
+ (total notes, traps, lessons, preferences) in tabular-nums.
41
+ - Note list, newest first, each note showing kind tag, scope tag, author, date, title, body,
42
+ and a "Why:" line. Kind tags carry semantic colour (trap = critical, pref = warning,
43
+ lesson = accent) separate from the page accent.
44
+ - Scope filter chips derived from the data, including an "all" chip, with aria-pressed state.
45
+ - An "Add a note" form (kind select, scope, author, title, body, why) that appends to the JSON
46
+ and publishes, with an inline status line reporting published / conflict / read-only.
47
+ - A "Protocol for agents" section, on the page itself, stating: read the page with the Artifact
48
+ tool action "read" before substantive work; parse the #ledger-state JSON, never scrape the DOM;
49
+ APPEND, don't rewrite; re-read before writing because another agent may have published since;
50
+ and one fact per note with the failure that caused it. Include a copyable JSON snippet of the
51
+ schema.
52
+ - Gatekeeping copy: only non-obvious, durable, cross-cutting lessons. If a repo's CLAUDE.md
53
+ already says it or a review bot already catches it, leave it out. A littered ledger is worse
54
+ than a thin one.
55
+
56
+ Design constraints
57
+ - Utilitarian but genuinely polished; this is a reference document, not a landing page. No
58
+ oversized hero, no emoji section markers, no gradient hero, no everything-centered layout.
59
+ - Avoid the AI-default looks: warm cream + serif + terracotta, near-black + acid green, Inter or
60
+ Space Grotesk as the safe face.
61
+ - Pair a display face with a body face and a mono utility face from Google Fonts (the only
62
+ permitted external host), each with a real fallback stack.
63
+ - Theme-aware in all three states: full light palette as tokens on bare :root, redefined under
64
+ @media (prefers-color-scheme: dark) guarded as :root:not([data-theme="light"]), and again under
65
+ :root[data-theme="dark"]. Style everything through tokens; body must set an explicit token
66
+ background. No colour whose only definition sits inside a media or [data-theme] block.
67
+ - Layout with flex/grid + gap, not per-element margins. Wide content in its own overflow-x:auto
68
+ container. Visible focus states. Respect prefers-reduced-motion.
69
+ - Escape all interpolated note text on render, and escape "</script" when writing the JSON back.
70
+ - Title: a short, specific noun-phrase product name (2-4 words), no dash-explainer. Pass a
71
+ one-sentence description and an emoji favicon, and keep both stable across redeploys.
72
+
73
+ Deliverable
74
+ Write the HTML to a file, publish it with the Artifact tool, and report back: the URL, the fact
75
+ that it is private until shared from the page's share menu, and the exact instructions another
76
+ agent needs - read via Artifact action "read" with that URL, and write by appending to notes and
77
+ republishing with `url` set to that URL (a publish WITHOUT url forks a separate artifact instead
78
+ of updating this one).
@@ -34,7 +34,7 @@ Turn a URL or article title into a complete, policy-compliant Ukrainian Wikipedi
34
34
  A single deliverable written to a scratch file and echoed in chat:
35
35
 
36
36
  - the **target page** (exact ukwiki title, and whether it exists)
37
- - the **wikitext** — full article, or an exact-replacement section, or a precise before/after diff for small fixes
37
+ - the **wikitext** — always the complete final article in one `.wiki` file, ready to paste over the whole edit box; never a diff, never a БУЛО/СТАЛО list of manual replacements
38
38
  - the **edit summary** in Ukrainian (≤ 200 chars)
39
39
  - the **source list** with the URL, publisher, and date actually fetched for each
40
40
  - **risk notes**: notability (ВП:ЗН) standing, anything a patroller will challenge, what still needs a human check
@@ -45,12 +45,15 @@ A single deliverable written to a scratch file and echoed in chat:
45
45
 
46
46
  | Input | Mode |
47
47
  |---|---|
48
+ | explicit newcomer task (tier + type, e.g. "Середні → Оновлювати статті") | mode set by task type — see below |
48
49
  | en.wikipedia.org URL, no uk equivalent | **Translate** — new uk article |
49
50
  | uk.wikipedia.org URL, stub or thin | **Expand** |
50
51
  | uk.wikipedia.org URL with `{{Без джерел}}` / `{{Джерело}}` | **Source** |
51
52
  | uk.wikipedia.org URL, prose/format problems | **Cleanup** |
52
53
  | "what should I edit next" | **Plan** — read `references/strategy.md`, propose a ranked list |
53
54
 
55
+ When a newcomer task type is given, it **overrides** the state-based guess above. The per-type scope contract in `references/newcomer-tasks.md` is binding — an assigned type is a ceiling on what the edit may touch, not a floor.
56
+
54
57
  Resolve the title first — `scripts/wiki.sh` handles redirects. Never draft against the wrong title.
55
58
 
56
59
  ### 2. Read before writing
@@ -60,6 +63,7 @@ Resolve the title first — `scripts/wiki.sh` handles redirects. Never draft aga
60
63
  ./scripts/wiki.sh get en "Title" # source-language wikitext
61
64
  ./scripts/wiki.sh langlink en "Title" uk # does a uk version already exist?
62
65
  ./scripts/wiki.sh check uk "Шаблон:Особа" # does this template/page exist?
66
+ ./scripts/wiki.sh tasks <type> [n] # list candidates for a newcomer task type: copyedit|links|references|update|expand
63
67
  ```
64
68
 
65
69
  Stop and report if:
@@ -94,21 +98,38 @@ Run every item. Report failures rather than hiding them.
94
98
  - [ ] No original synthesis (ВП:ОД)
95
99
  - [ ] Dates, numbers, and name transliterations are Ukrainian-correct
96
100
  - [ ] Edit summary written in Ukrainian and states what changed and why
101
+ - [ ] The edit stayed inside the assigned task type's allowed scope
102
+ - [ ] Any maintenance template removed was actually earned — the underlying problem is genuinely fixed
97
103
 
98
104
  ### 6. Deliver
99
105
 
100
- 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:
106
+ For Expand / Source / Cleanup: fetch the current wikitext, apply the changes programmatically (a small Python pass over the fetched file, asserting each anchor string matched exactly once), and write the whole resulting article out. Verify it before delivering — section list intact, every intended change landed, nothing else dropped.
107
+
108
+ Write the draft to a scratch file: the raw `.wiki` file contains nothing but article wikitext (the full final article, ready to paste over the whole edit box); the human-readable explanation of what changed goes in a separate `.md`. Print the edit summary, and tell the human exactly where to paste it:
101
109
 
102
110
  - new article → `https://uk.wikipedia.org/wiki/Тайтл?action=edit`
103
- - section replace → name the section and its exact current heading
111
+ - existing article → `https://uk.wikipedia.org/w/index.php?title=Тайтл&action=edit`, replace the whole edit box
104
112
  - test first → `Вікіпедія:Пісочниця` or the user's own `Користувач:Ім'я/Чернетка`
105
113
 
114
+ End the delivery with a copy-to-clipboard command in its own fenced block, using a quoted absolute path — quoted because scratchpad paths contain characters the shell will otherwise mangle — always the raw `.wiki` file, never the `.md`:
115
+
116
+ ```sh
117
+ pbcopy < "/absolute/path/to/slug.wiki"
118
+ ```
119
+
120
+ Add an optional second line when the edit summary is long enough to be worth copying:
121
+
122
+ ```sh
123
+ printf '%s' 'Опис редагування…' | pbcopy
124
+ ```
125
+
106
126
  Then stop. Do not offer to save it.
107
127
 
108
128
  ## References
109
129
 
110
130
  - `references/strategy.md` — the contribution strategy: what to farm, in what order, and how to build standing without getting flagged
111
131
  - `references/wikitext-uk.md` — verified uk templates, citation formats, article skeletons, policy shortcuts
132
+ - `references/newcomer-tasks.md` — the newcomer task tiers (Легкі/Середні/Важкі) and the binding scope contract for each task type
112
133
  - `scripts/wiki.sh` — read-only MediaWiki API helper
113
134
 
114
135
  ## Verification
@@ -35,7 +35,7 @@ Turn a URL or article title into a complete, policy-compliant Ukrainian Wikipedi
35
35
  A single deliverable written to a scratch file and echoed in chat:
36
36
 
37
37
  - the **target page** (exact ukwiki title, and whether it exists)
38
- - the **wikitext** — full article, or an exact-replacement section, or a precise before/after diff for small fixes
38
+ - the **wikitext** — always the complete final article in one `.wiki` file, ready to paste over the whole edit box; never a diff, never a БУЛО/СТАЛО list of manual replacements
39
39
  - the **edit summary** in Ukrainian (≤ 200 chars)
40
40
  - the **source list** with the URL, publisher, and date actually fetched for each
41
41
  - **risk notes**: notability (ВП:ЗН) standing, anything a patroller will challenge, what still needs a human check
@@ -46,12 +46,15 @@ A single deliverable written to a scratch file and echoed in chat:
46
46
 
47
47
  | Input | Mode |
48
48
  |---|---|
49
+ | explicit newcomer task (tier + type, e.g. "Середні → Оновлювати статті") | mode set by task type — see below |
49
50
  | en.wikipedia.org URL, no uk equivalent | **Translate** — new uk article |
50
51
  | uk.wikipedia.org URL, stub or thin | **Expand** |
51
52
  | uk.wikipedia.org URL with `{{Без джерел}}` / `{{Джерело}}` | **Source** |
52
53
  | uk.wikipedia.org URL, prose/format problems | **Cleanup** |
53
54
  | "what should I edit next" | **Plan** — read `references/strategy.md`, propose a ranked list |
54
55
 
56
+ When a newcomer task type is given, it **overrides** the state-based guess above. The per-type scope contract in `references/newcomer-tasks.md` is binding — an assigned type is a ceiling on what the edit may touch, not a floor.
57
+
55
58
  Resolve the title first — `scripts/wiki.sh` handles redirects. Never draft against the wrong title.
56
59
 
57
60
  ### 2. Read before writing
@@ -61,6 +64,7 @@ Resolve the title first — `scripts/wiki.sh` handles redirects. Never draft aga
61
64
  ./scripts/wiki.sh get en "Title" # source-language wikitext
62
65
  ./scripts/wiki.sh langlink en "Title" uk # does a uk version already exist?
63
66
  ./scripts/wiki.sh check uk "Шаблон:Особа" # does this template/page exist?
67
+ ./scripts/wiki.sh tasks <type> [n] # list candidates for a newcomer task type: copyedit|links|references|update|expand
64
68
  ```
65
69
 
66
70
  Stop and report if:
@@ -95,21 +99,38 @@ Run every item. Report failures rather than hiding them.
95
99
  - [ ] No original synthesis (ВП:ОД)
96
100
  - [ ] Dates, numbers, and name transliterations are Ukrainian-correct
97
101
  - [ ] Edit summary written in Ukrainian and states what changed and why
102
+ - [ ] The edit stayed inside the assigned task type's allowed scope
103
+ - [ ] Any maintenance template removed was actually earned — the underlying problem is genuinely fixed
98
104
 
99
105
  ### 6. Deliver
100
106
 
101
- 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:
107
+ For Expand / Source / Cleanup: fetch the current wikitext, apply the changes programmatically (a small Python pass over the fetched file, asserting each anchor string matched exactly once), and write the whole resulting article out. Verify it before delivering — section list intact, every intended change landed, nothing else dropped.
108
+
109
+ Write the draft to a scratch file: the raw `.wiki` file contains nothing but article wikitext (the full final article, ready to paste over the whole edit box); the human-readable explanation of what changed goes in a separate `.md`. Print the edit summary, and tell the human exactly where to paste it:
102
110
 
103
111
  - new article → `https://uk.wikipedia.org/wiki/Тайтл?action=edit`
104
- - section replace → name the section and its exact current heading
112
+ - existing article → `https://uk.wikipedia.org/w/index.php?title=Тайтл&action=edit`, replace the whole edit box
105
113
  - test first → `Вікіпедія:Пісочниця` or the user's own `Користувач:Ім'я/Чернетка`
106
114
 
115
+ End the delivery with a copy-to-clipboard command in its own fenced block, using a quoted absolute path — quoted because scratchpad paths contain characters the shell will otherwise mangle — always the raw `.wiki` file, never the `.md`:
116
+
117
+ ```sh
118
+ pbcopy < "/absolute/path/to/slug.wiki"
119
+ ```
120
+
121
+ Add an optional second line when the edit summary is long enough to be worth copying:
122
+
123
+ ```sh
124
+ printf '%s' 'Опис редагування…' | pbcopy
125
+ ```
126
+
107
127
  Then stop. Do not offer to save it.
108
128
 
109
129
  ## References
110
130
 
111
131
  - `references/strategy.md` — the contribution strategy: what to farm, in what order, and how to build standing without getting flagged
112
132
  - `references/wikitext-uk.md` — verified uk templates, citation formats, article skeletons, policy shortcuts
133
+ - `references/newcomer-tasks.md` — the newcomer task tiers (Легкі/Середні/Важкі) and the binding scope contract for each task type
113
134
  - `scripts/wiki.sh` — read-only MediaWiki API helper
114
135
 
115
136
  ## Verification
@@ -0,0 +1,80 @@
1
+ # Ukrainian Wikipedia newcomer task types
2
+
3
+ Verified against the live `uk.wikipedia.org` API, 2026-08-20.
4
+
5
+ `MediaWiki:NewcomerTasks.json` is the authoritative GrowthExperiments "Suggested edits"
6
+ (Пропоновані редагування) task-type → maintenance-template map on ukwiki. The table below is
7
+ that map.
8
+
9
+ ## Task-type mapping
10
+
11
+ | ukwiki UI label | Tier | task type | Backing template(s) |
12
+ |---|---|---|---|
13
+ | Вичитувати | Легкі / easy | `copyedit` | `Шаблон:Мовні помилки` |
14
+ | (not offered in UI — structured) | easy | `link-recommendation` | none |
15
+ | (not offered in that UI list) | easy | `links` | `Шаблон:Упорядкувати`, `Шаблон:Брак посилань` |
16
+ | Шукати зовнішні посилання | Середні / medium | `references` | `Шаблон:Без джерел` |
17
+ | Оновлювати статті | Середні / medium | `update` | `Шаблон:Оновити` |
18
+ | (not offered — structured) | medium | `image-recommendation`, `section-image-recommendation` | none |
19
+ | Розширювати короткі статті | Важкі / hard | `expand` | `Шаблон:Доробити` |
20
+
21
+ All six templates confirmed EXISTS. `Шаблон:Доробити` is a REDIRECT to `Шаблон:Заготовка`
22
+ (see `references/wikitext-uk.md`).
23
+
24
+ ## Scope contract per task type
25
+
26
+ An assigned task type is a **ceiling**, not a suggestion — overreach on a young account is what
27
+ draws patrollers (see `references/strategy.md` Phase 1). Stay inside the type you picked.
28
+
29
+ ### `copyedit` — Вичитувати
30
+
31
+ - IS: language, grammar, punctuation, typography fixes only.
32
+ - NOT: no new facts, no new refs, no restructuring, no adding/removing/reordering sections.
33
+ - Remove `{{Мовні помилки}}` in the same edit only if the whole article was actually proofread.
34
+ - Edit summary shape: `Вичитка: виправлено [конкретні помилки]`.
35
+
36
+ ### `links` — Упорядкувати / Брак посилань
37
+
38
+ - IS: wikilinks and formatting only.
39
+ - NOT: no prose rewriting.
40
+ - Edit summary shape: `Впорядкування посилань: [що додано/виправлено]`.
41
+
42
+ ### `references` — Шукати зовнішні посилання
43
+
44
+ - IS: add inline `<ref>` to claims that are **already there**.
45
+ - NOT: never rewrite a claim to fit a source you happened to find. If no source supports it as
46
+ written, report it — do not reshape it.
47
+ - Remove `{{Без джерел}}` only when every substantive claim is cited.
48
+ - Edit summary shape: `Додано джерела: [що саме підтверджено]`.
49
+
50
+ ### `update` — Оновлювати статті
51
+
52
+ - IS: replace outdated values/dates/status with sourced current ones, plus the minimum prose the
53
+ change forces.
54
+ - NOT: no scope expansion, no new sections.
55
+ - Every updated number needs a source actually fetched this session — this is the highest
56
+ fabrication-risk type in the set and SKILL.md Hard Rule 2 applies with no exceptions.
57
+ - Edit summary shape: `Оновлено дані: [що змінено] за станом на [дата]`.
58
+
59
+ ### `expand` — Розширювати короткі статті
60
+
61
+ - IS: the **only** type permitted to add sections and substantial new sourced prose. Routes into
62
+ the existing **Expand** mode in SKILL.md.
63
+ - `{{Заготовка}}` comes off only when the article genuinely stops being a stub.
64
+ - Edit summary shape: `Розширено статтю: додано [розділи/теми], джерела`.
65
+
66
+ ## Out of scope: structured task types
67
+
68
+ `link-recommendation`, `image-recommendation`, and `section-image-recommendation` are served
69
+ through the Growth UI's own accept/reject widget on ukwiki, not by pasting wikitext. This skill
70
+ does not improvise a manual equivalent for them — say so plainly and decline rather than draft
71
+ around it.
72
+
73
+ ## Finding candidates
74
+
75
+ `action=query&list=growthtasks` requires login, so this read-only skill cannot use it. Find
76
+ candidate articles for a task type instead with:
77
+
78
+ ```sh
79
+ ./scripts/wiki.sh tasks <type> [n]
80
+ ```
@@ -31,6 +31,16 @@ Rules for this phase: one change per edit, always an edit summary in Ukrainian,
31
31
 
32
32
  Target: ~30–50 edits, **zero reverts**. A revert in this phase costs more than 50 edits gain.
33
33
 
34
+ ### Newcomer tasks as a ready-made Phase 1 queue
35
+
36
+ Ukrainian Wikipedia's own GrowthExperiments "Suggested edits" (Пропоновані редагування) tiers a
37
+ maintenance backlog into Легкі / Середні / Важкі — see `references/newcomer-tasks.md` for the
38
+ full mapping and per-type scope contract. Легкі (`copyedit`) and Середні (`references`, `update`)
39
+ are lower-risk, community-endorsed work for this phase, but they are not zero-revert-risk:
40
+ sourcing and fabrication risks still require verification. Pick candidates
41
+ with `./scripts/wiki.sh tasks <type>` and stay strictly inside the assigned scope. Важкі
42
+ (`expand`) is not Phase 1 work — it belongs in Phase 2 stream A/B, once autoconfirmed.
43
+
34
44
  ## Phase 2 — the volume engine (weeks 2–8)
35
45
 
36
46
  Four streams, run in parallel, roughly in this priority order. Value per unit of effort, highest first:
@@ -10,6 +10,7 @@
10
10
  # wiki.sh search <lang> <query> [n] search article titles
11
11
  # wiki.sh backlog <category> [n] list pages in a uk category (maintenance backlogs)
12
12
  # wiki.sh info <lang> <title> length, last edit, categories, templates used
13
+ # wiki.sh tasks <type> [n] candidate articles for a newcomer task type
13
14
  set -eu
14
15
 
15
16
  UA="wikipedia-uk-editor-skill/1.0 (https://github.com/oleg-koval/agent-skills)"
@@ -24,7 +25,7 @@ api() {
24
25
  jqp() { python3 -c "$1"; }
25
26
 
26
27
  cmd=${1:-}
27
- [ -n "$cmd" ] || { sed -n '2,14p' "$0"; exit 1; }
28
+ [ -n "$cmd" ] || { sed -n '2,13p' "$0"; exit 1; }
28
29
  shift
29
30
 
30
31
  case "$cmd" in
@@ -92,7 +93,62 @@ print('touched:',p.get('touched'))
92
93
  print('cats :', ', '.join(c['title'] for c in p.get('categories',[])) or '(none)')
93
94
  print('tmpls :', ', '.join(t['title'] for t in p.get('templates',[])) or '(none)')"
94
95
  ;;
96
+ tasks)
97
+ type=${1:-}
98
+ n=${2:-20}
99
+ case "$n" in
100
+ ''|*[!0-9]*) echo "Invalid task limit: '$n' (expected a non-negative integer)" >&2; exit 1 ;;
101
+ esac
102
+ case "$type" in
103
+ copyedit) templates="Шаблон:Мовні помилки" ;;
104
+ links) templates="Шаблон:Упорядкувати|Шаблон:Брак посилань" ;;
105
+ references) templates="Шаблон:Без джерел" ;;
106
+ update) templates="Шаблон:Оновити" ;;
107
+ expand) templates="Шаблон:Доробити" ;;
108
+ *)
109
+ echo "Unknown task type: '$type'. Valid types: copyedit, links, references, update, expand" >&2
110
+ exit 1
111
+ ;;
112
+ esac
113
+ [ "$n" -gt 0 ] || exit 0
114
+ results=$(mktemp)
115
+ trap 'rm -f "$results"' EXIT
116
+ oldifs=$IFS
117
+ IFS='|'
118
+ for tmpl in $templates; do
119
+ IFS=$oldifs
120
+ api uk --data-urlencode "action=query" --data-urlencode "list=embeddedin" \
121
+ --data-urlencode "eititle=$tmpl" --data-urlencode "einamespace=0" \
122
+ --data-urlencode "eilimit=$n" |
123
+ jqp "import json,sys
124
+ d=json.load(sys.stdin)
125
+ if 'error' in d: sys.exit('NOT FOUND: '+d['error'].get('info',''))
126
+ for m in d['query']['embeddedin']: print(m['title'])" |
127
+ while IFS= read -r title; do printf '%s\t%s\n' "$tmpl" "$title"; done >> "$results"
128
+ done
129
+ python3 - "$results" "$n" <<'PY'
130
+ import sys
131
+ from collections import OrderedDict
132
+
133
+ path, limit_text = sys.argv[1:]
134
+ limit = int(limit_text)
135
+ groups = OrderedDict()
136
+ seen = set()
137
+ with open(path, encoding="utf-8") as handle:
138
+ for line in handle:
139
+ template, title = line.rstrip("\n").split("\t", 1)
140
+ if title in seen:
141
+ continue
142
+ seen.add(title)
143
+ groups.setdefault(template, []).append(title)
144
+ if len(seen) == limit:
145
+ break
146
+ for template, titles in groups.items():
147
+ print(f"== {template} ==")
148
+ print("\n".join(titles))
149
+ PY
150
+ ;;
95
151
  *)
96
- sed -n '2,14p' "$0"; exit 1
152
+ sed -n '2,13p' "$0"; exit 1
97
153
  ;;
98
154
  esac
@@ -1,20 +1,50 @@
1
1
  # Codex Adapter for wikipedia-uk-editor
2
2
 
3
- This is a Codex-specific adapter for the `olko:wikipedia-uk-editor` skill.
4
- The canonical skill definition is in `../../SKILL.md`.
3
+ Codex resolves this skill today via a symlink:
5
4
 
6
- ## Usage
5
+ ```text
6
+ ~/.codex/skills/olko:wikipedia-uk-editor -> .../agent-skills/packages/software-development/wikipedia-uk-editor
7
+ ```
8
+
9
+ `SKILL.md`, `references/`, and `scripts/` are all reachable through that symlink. Because it's a
10
+ symlink and not a copy, any edit made to this package (this file included) reaches Codex
11
+ immediately — no reinstall, no rebuild step.
12
+
13
+ The canonical skill definition is `../../SKILL.md`.
7
14
 
8
- Invoke in a Codex session:
15
+ ## Requirements
16
+
17
+ `curl` and `python3` — `scripts/wiki.sh` (the read-only MediaWiki API helper) shells out to both.
18
+ See the `compatibility:` field in `../../SKILL.md`.
19
+
20
+ ## Invocation
9
21
 
10
22
  ```text
11
23
  Use the olko:wikipedia-uk-editor skill to draft a Ukrainian Wikipedia edit for <URL or title>.
12
24
  ```
13
25
 
26
+ ```text
27
+ Use the olko:wikipedia-uk-editor skill: Легкі → Вичитувати on "<title>"
28
+ ```
29
+
30
+ ## Modes
31
+
32
+ Classified from the input in `../../SKILL.md` §1:
33
+
34
+ - **Translate** — en.wikipedia.org URL with no uk equivalent
35
+ - **Expand** — uk stub or thin article
36
+ - **Source** — uk article carrying `{{Без джерел}}` / `{{Джерело}}`
37
+ - **Cleanup** — uk article with prose/format problems
38
+ - **Plan** — "what should I edit next" → reads `references/strategy.md`
39
+
40
+ Newcomer task types (`copyedit`, `links`, `references`, `update`, `expand`) route into these same
41
+ modes but under a tighter, type-specific scope ceiling — see `references/newcomer-tasks.md` for
42
+ the full mapping and what each type must not touch.
43
+
14
44
  ## Workflow
15
45
 
16
- See `../../SKILL.md` for the full workflow: classify the task (translate / expand / source /
17
- cleanup / plan), read the live wikitext through the read-only `scripts/wiki.sh` MediaWiki helper,
18
- gather and verify real sources, draft policy-compliant wikitext using the verified templates in
19
- `references/wikitext-uk.md`, run the self-check, and hand back ready-to-paste wikitext with a
20
- Ukrainian edit summary. The skill never saves an edit — the human pastes it.
46
+ Resolve the title, read the live wikitext through `scripts/wiki.sh` (read-only), gather and
47
+ verify real sources, draft policy-compliant wikitext using the verified templates in
48
+ `references/wikitext-uk.md`, run the self-check in `../../SKILL.md` §5, and hand back
49
+ ready-to-paste wikitext with a Ukrainian edit summary. The skill never saves an edit — the human
50
+ pastes it.