@olegkoval/agent-skills 1.29.0 → 1.31.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 +4 -2
- package/.cursor-plugin/index.json +10 -0
- package/.grok-plugin/index.json +10 -0
- package/.kiro/steering/website-analytics-bootstrap.md +159 -0
- package/.kiro/steering/wikipedia-uk-editor.md +24 -3
- package/.windsurf/rules/website-analytics-bootstrap.md +158 -0
- package/.windsurf/rules/wikipedia-uk-editor.md +24 -3
- package/README.md +8 -6
- package/catalog/skills.json +46 -0
- package/collections/marketing.json +1 -1
- package/collections/software-development.json +2 -1
- package/package.json +1 -1
- package/packages/marketing/website-analytics-bootstrap/SKILL.md +171 -0
- package/packages/marketing/website-analytics-bootstrap/adapters/claude/plugin.json +5 -0
- package/packages/marketing/website-analytics-bootstrap/adapters/claude/skills/website-analytics-bootstrap/SKILL.md +172 -0
- package/packages/marketing/website-analytics-bootstrap/adapters/cursor/plugin.json +6 -0
- package/packages/marketing/website-analytics-bootstrap/adapters/cursor/skills/website-analytics-bootstrap/SKILL.md +172 -0
- package/packages/marketing/website-analytics-bootstrap/adapters/grok/plugin.json +6 -0
- package/packages/marketing/website-analytics-bootstrap/adapters/grok/skills/website-analytics-bootstrap/SKILL.md +172 -0
- package/packages/marketing/website-analytics-bootstrap/adapters/kiro/steering/website-analytics-bootstrap.md +159 -0
- package/packages/marketing/website-analytics-bootstrap/adapters/windsurf/rules/website-analytics-bootstrap.md +158 -0
- package/packages/software-development/vinted-listing/SKILL.md +58 -0
- package/packages/software-development/vinted-listing/adapters/claude/plugin.json +5 -0
- package/packages/software-development/vinted-listing/adapters/claude/skills/vinted-listing/SKILL.md +59 -0
- package/packages/software-development/vinted-listing/adapters/claude/skills/vinted-listing/references/photo-and-duplicate-policy.md +20 -0
- package/packages/software-development/vinted-listing/adapters/codex/README.md +3 -0
- package/packages/software-development/vinted-listing/adapters/cursor/plugin.json +6 -0
- package/packages/software-development/vinted-listing/adapters/cursor/skills/vinted-listing/SKILL.md +59 -0
- package/packages/software-development/vinted-listing/adapters/cursor/skills/vinted-listing/references/photo-and-duplicate-policy.md +20 -0
- package/packages/software-development/vinted-listing/adapters/grok/plugin.json +6 -0
- package/packages/software-development/vinted-listing/adapters/grok/skills/vinted-listing/SKILL.md +59 -0
- package/packages/software-development/vinted-listing/adapters/grok/skills/vinted-listing/references/photo-and-duplicate-policy.md +20 -0
- package/packages/software-development/vinted-listing/references/photo-and-duplicate-policy.md +20 -0
- package/packages/software-development/wikipedia-uk-editor/SKILL.md +24 -3
- package/packages/software-development/wikipedia-uk-editor/adapters/claude/skills/wikipedia-uk-editor/SKILL.md +24 -3
- package/packages/software-development/wikipedia-uk-editor/adapters/claude/skills/wikipedia-uk-editor/references/newcomer-tasks.md +80 -0
- package/packages/software-development/wikipedia-uk-editor/adapters/claude/skills/wikipedia-uk-editor/references/strategy.md +10 -0
- package/packages/software-development/wikipedia-uk-editor/adapters/claude/skills/wikipedia-uk-editor/scripts/wiki.sh +58 -2
- package/packages/software-development/wikipedia-uk-editor/adapters/codex/README.md +39 -9
- package/packages/software-development/wikipedia-uk-editor/adapters/cursor/skills/wikipedia-uk-editor/SKILL.md +24 -3
- package/packages/software-development/wikipedia-uk-editor/adapters/cursor/skills/wikipedia-uk-editor/references/newcomer-tasks.md +80 -0
- package/packages/software-development/wikipedia-uk-editor/adapters/cursor/skills/wikipedia-uk-editor/references/strategy.md +10 -0
- package/packages/software-development/wikipedia-uk-editor/adapters/cursor/skills/wikipedia-uk-editor/scripts/wiki.sh +58 -2
- package/packages/software-development/wikipedia-uk-editor/adapters/grok/skills/wikipedia-uk-editor/SKILL.md +24 -3
- package/packages/software-development/wikipedia-uk-editor/adapters/grok/skills/wikipedia-uk-editor/references/newcomer-tasks.md +80 -0
- package/packages/software-development/wikipedia-uk-editor/adapters/grok/skills/wikipedia-uk-editor/references/strategy.md +10 -0
- package/packages/software-development/wikipedia-uk-editor/adapters/grok/skills/wikipedia-uk-editor/scripts/wiki.sh +58 -2
- package/packages/software-development/wikipedia-uk-editor/adapters/kiro/steering/wikipedia-uk-editor.md +24 -3
- package/packages/software-development/wikipedia-uk-editor/adapters/windsurf/rules/wikipedia-uk-editor.md +24 -3
- package/packages/software-development/wikipedia-uk-editor/references/newcomer-tasks.md +80 -0
- package/packages/software-development/wikipedia-uk-editor/references/strategy.md +10 -0
- package/packages/software-development/wikipedia-uk-editor/scripts/wiki.sh +58 -2
|
@@ -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.30.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Oleg Koval"
|
|
7
7
|
},
|
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
"./packages/software-development/open-source-publisher",
|
|
27
27
|
"./packages/marketing/viral-launch",
|
|
28
28
|
"./packages/marketing/search-console-indexing-audit",
|
|
29
|
+
"./packages/marketing/website-analytics-bootstrap",
|
|
29
30
|
"./packages/software-development/cloudflare-block-countries",
|
|
30
31
|
"./packages/software-development/obsidian-pr-sync",
|
|
31
32
|
"./packages/software-development/obsidian-task-rollover",
|
|
@@ -52,6 +53,7 @@
|
|
|
52
53
|
"./packages/software-development/pr-finalize-complete",
|
|
53
54
|
"./packages/software-development/morning-routine",
|
|
54
55
|
"./packages/software-development/release-day",
|
|
55
|
-
"./packages/software-development/branch-cleanup"
|
|
56
|
+
"./packages/software-development/branch-cleanup",
|
|
57
|
+
"./packages/software-development/vinted-listing"
|
|
56
58
|
]
|
|
57
59
|
}
|
|
@@ -76,6 +76,11 @@
|
|
|
76
76
|
"source": "./packages/marketing/search-console-indexing-audit/adapters/cursor",
|
|
77
77
|
"description": "Analyze Google Search Console Coverage CSV exports and correlate them with sitemap, robots, canonical, redirect, and noindex signals."
|
|
78
78
|
},
|
|
79
|
+
{
|
|
80
|
+
"name": "olko:website-analytics-bootstrap",
|
|
81
|
+
"source": "./packages/marketing/website-analytics-bootstrap/adapters/cursor",
|
|
82
|
+
"description": "Set up a website's first SEO analytics loop with persistent SerpBear rank tracking, Google Search Console, seeded keywords, read-only technical audits, and Telegram alerts on a local host or NAS."
|
|
83
|
+
},
|
|
79
84
|
{
|
|
80
85
|
"name": "olko:cloudflare-block-countries",
|
|
81
86
|
"source": "./packages/software-development/cloudflare-block-countries/adapters/cursor",
|
|
@@ -205,6 +210,11 @@
|
|
|
205
210
|
"name": "olko:branch-cleanup",
|
|
206
211
|
"source": "./packages/software-development/branch-cleanup/adapters/cursor",
|
|
207
212
|
"description": "Prune stale git branches after a merge wave: delete closed/merged remote branches, remove local tracking refs that no longer exist on the remote, and optionally clean up merged local branches. Natural follow-up to dependabot-triage."
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
"name": "olko:vinted-listing",
|
|
216
|
+
"source": "./packages/software-development/vinted-listing/adapters/cursor",
|
|
217
|
+
"description": "Create, edit, and safely publish Vinted listings through the signed-in browser, using verified item details and the owner’s original photos."
|
|
208
218
|
}
|
|
209
219
|
]
|
|
210
220
|
}
|
package/.grok-plugin/index.json
CHANGED
|
@@ -81,6 +81,11 @@
|
|
|
81
81
|
"source": "./packages/marketing/search-console-indexing-audit/adapters/grok",
|
|
82
82
|
"description": "Analyze Google Search Console Coverage CSV exports and correlate them with sitemap, robots, canonical, redirect, and noindex signals."
|
|
83
83
|
},
|
|
84
|
+
{
|
|
85
|
+
"name": "olko:website-analytics-bootstrap",
|
|
86
|
+
"source": "./packages/marketing/website-analytics-bootstrap/adapters/grok",
|
|
87
|
+
"description": "Set up a website's first SEO analytics loop with persistent SerpBear rank tracking, Google Search Console, seeded keywords, read-only technical audits, and Telegram alerts on a local host or NAS."
|
|
88
|
+
},
|
|
84
89
|
{
|
|
85
90
|
"name": "olko:cloudflare-block-countries",
|
|
86
91
|
"source": "./packages/software-development/cloudflare-block-countries/adapters/grok",
|
|
@@ -215,6 +220,11 @@
|
|
|
215
220
|
"name": "olko:branch-cleanup",
|
|
216
221
|
"source": "./packages/software-development/branch-cleanup/adapters/grok",
|
|
217
222
|
"description": "Prune stale git branches after a merge wave: delete closed/merged remote branches, remove local tracking refs that no longer exist on the remote, and optionally clean up merged local branches. Natural follow-up to dependabot-triage."
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
"name": "olko:vinted-listing",
|
|
226
|
+
"source": "./packages/software-development/vinted-listing/adapters/grok",
|
|
227
|
+
"description": "Create, edit, and safely publish Vinted listings through the signed-in browser, using verified item details and the owner’s original photos."
|
|
218
228
|
}
|
|
219
229
|
]
|
|
220
230
|
}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
<!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
inclusion: manual
|
|
5
|
+
description: "Set up a website's first SEO analytics loop with persistent SerpBear rank tracking, Google Search Console, seeded keywords, read-only technical audits, and Telegram alerts on a local host or NAS."
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
> 🤖 *Auto-generated by **weekly-pattern-learner** · reusable first-run website analytics onboarding workflow derived from a validated local/NAS setup pattern*
|
|
9
|
+
|
|
10
|
+
# website-analytics-bootstrap
|
|
11
|
+
|
|
12
|
+
Build a repeatable, observable SEO analytics loop for a website without making unapproved content or code changes.
|
|
13
|
+
|
|
14
|
+
## Outcome
|
|
15
|
+
|
|
16
|
+
At completion, the operator has:
|
|
17
|
+
|
|
18
|
+
- persistent rank tracking for the target domain and a small, evidence-based keyword seed set;
|
|
19
|
+
- Google Search Console connected to the correct property and verified with a real API query;
|
|
20
|
+
- daily rank/Search Console refreshes;
|
|
21
|
+
- a read-only technical audit for key pages, `robots.txt`, and `sitemap.xml`;
|
|
22
|
+
- Telegram alerts for failures and a weekly health summary;
|
|
23
|
+
- saved reports, raw HTTP responses, logs, schedules, credentials locations, and a concise handoff.
|
|
24
|
+
|
|
25
|
+
This skill automates observation and reporting. Website edits, SEO copy changes, indexing submissions, and deployments remain approval-gated.
|
|
26
|
+
|
|
27
|
+
## First-run questions
|
|
28
|
+
|
|
29
|
+
Ask at most three questions only when the answer cannot be discovered safely:
|
|
30
|
+
|
|
31
|
+
1. What is the canonical website URL and which host/NAS should run the service?
|
|
32
|
+
2. Which Google Search Console property should be used: Domain or URL-prefix?
|
|
33
|
+
3. Should alerts use an existing Telegram bot/chat, or should the owner create one?
|
|
34
|
+
|
|
35
|
+
Never ask the user to paste private keys, bot tokens, passwords, or app passwords into chat. Accept them through the target UI, a secure secret store, or a protected host file.
|
|
36
|
+
|
|
37
|
+
## Workflow
|
|
38
|
+
|
|
39
|
+
### 1. Inspect before changing anything
|
|
40
|
+
|
|
41
|
+
- Read project-local agent instructions and inspect `.claude/scripts/` before making HTTP tooling.
|
|
42
|
+
- Check the current repository, remote, dirty worktree, deployment files, and existing analytics/monitoring integrations.
|
|
43
|
+
- Resolve the host using read-only checks. Prefer the reachable VPN/Tailscale address when the LAN address is unavailable.
|
|
44
|
+
- Check Docker/Container Manager, Node, Python/uv, systemd, and the host's supported scheduler.
|
|
45
|
+
- Preserve unrelated worktree changes. Do not reset, delete, or overwrite broad directories.
|
|
46
|
+
- Check whether an existing skill already covers post-connection GSC indexing analysis; use `search-console-indexing-audit` for that later phase instead of duplicating it.
|
|
47
|
+
|
|
48
|
+
### 2. Choose the deployment path
|
|
49
|
+
|
|
50
|
+
Prefer a persistent container when Docker is healthy. If Docker is unavailable or broken, use the supported native runtime as a deliberate fallback:
|
|
51
|
+
|
|
52
|
+
- pin the application version used for the setup;
|
|
53
|
+
- store application source separately from persistent data;
|
|
54
|
+
- set a non-default port and an explicit application URL;
|
|
55
|
+
- run under a least-privilege service user;
|
|
56
|
+
- keep secrets in a protected environment file, never in source, shell history, logs, or reports;
|
|
57
|
+
- build and run the production application before configuring automation.
|
|
58
|
+
|
|
59
|
+
Before applying any persistent setup, credential or permission changes, enabling the scheduler, or performing Telegram delivery or test actions, require explicit owner confirmation for that specific action. If confirmation is absent, default to a no-op and do not perform the action. Record the confirmation outcome alongside the actual path, runtime, port, service user, and rollback/restart command.
|
|
60
|
+
|
|
61
|
+
### 3. Configure SerpBear
|
|
62
|
+
|
|
63
|
+
- Create or verify the admin account without printing the password.
|
|
64
|
+
- Configure a supported scraper/proxy such as SerpApi through the UI or protected settings.
|
|
65
|
+
- Set daily scraping with a conservative strategy and retry behavior appropriate to API quotas.
|
|
66
|
+
- Add the canonical domain exactly once.
|
|
67
|
+
- Seed 8–12 phrases from visible services, locations, and positioning. Start with a mix of branded, service, and location queries; do not invent volume or ranking claims.
|
|
68
|
+
- Verify at least one real rank result and record the initial baseline.
|
|
69
|
+
|
|
70
|
+
Keyword seed examples should be generated from the target site's actual language, for example `{service} photographer`, `{service} {city}`, and the brand name. Expand the list only after Search Console supplies real queries or the owner confirms the market.
|
|
71
|
+
|
|
72
|
+
### 4. Connect Google Search Console
|
|
73
|
+
|
|
74
|
+
Use a Google Cloud service account created for this integration:
|
|
75
|
+
|
|
76
|
+
1. Create a JSON key in the service account's **Keys** tab. Keyless authentication is preferred when supported; otherwise document owner-approved rotation schedule, replacement procedure in SerpBear, and immediate disable/delete revocation steps for compromised or retired JSON keys.
|
|
77
|
+
2. Enable the Google Search Console API in that same Cloud project.
|
|
78
|
+
3. Add the service account's `client_email` as a **Restricted** user (with read-only access) on the exact Search Console property, retaining the existing `webmasters.readonly` scope and query-validation steps.
|
|
79
|
+
4. Enter `client_email` and the JSON `private_key` into SerpBear through its protected settings UI.
|
|
80
|
+
5. Match the property type precisely:
|
|
81
|
+
- Domain property → `sc-domain:example.com`.
|
|
82
|
+
- URL-prefix property → configure the exact URL, including protocol and trailing slash when required.
|
|
83
|
+
6. Trigger a real query and inspect the response. A saved credential flag is not proof of connectivity.
|
|
84
|
+
|
|
85
|
+
Diagnose in this order:
|
|
86
|
+
|
|
87
|
+
- `403 accessNotConfigured` → enable the Search Console API;
|
|
88
|
+
- `403 Forbidden` → verify the property type and service-account user on that exact property;
|
|
89
|
+
- key/decoder errors → verify the full PEM value and newline handling;
|
|
90
|
+
- empty rows with a successful request → report “connected, no data yet,” not a failure.
|
|
91
|
+
|
|
92
|
+
### 5. Add the read-only technical audit
|
|
93
|
+
|
|
94
|
+
Use a reusable project-local script or the target runtime's equivalent for repeated HTTP checks. Save every raw response and reproduction metadata before analysis. At minimum check:
|
|
95
|
+
|
|
96
|
+
- `/`, `/work` or the primary portfolio route;
|
|
97
|
+
- the main service/booking route;
|
|
98
|
+
- `/about` and `/contact`;
|
|
99
|
+
- `/robots.txt`;
|
|
100
|
+
- `/sitemap.xml`.
|
|
101
|
+
|
|
102
|
+
For HTML pages, inspect status, title, meta description, canonical, and accidental `noindex`. For robots and sitemap, inspect status, content type, parseability, and sitemap URL count. Do not infer indexation from a 200 response; use Search Console for index status.
|
|
103
|
+
|
|
104
|
+
Before saving artifacts, sanitize HTTP response headers and body fields by removing session-bearing Set-Cookie values and personal data. Restrict artifact file permissions to owner-read-write only and enforce bounded retention with automatic deletion of artifacts older than the documented retention period. Write a JSON report with timestamp, checked URLs, status, latency, issue list, sitemap count, and artifact paths using only sanitized data. Logs must be structured and must not contain credentials or full secret-bearing request data.
|
|
105
|
+
|
|
106
|
+
### 6. Schedule and alert
|
|
107
|
+
|
|
108
|
+
Prefer a persistent systemd service/timer. If the host cannot install a system unit, use the host's supported scheduler or stop and ask for an operator-approved scheduler change; do not silently assume a user crontab exists.
|
|
109
|
+
|
|
110
|
+
Recommended behavior:
|
|
111
|
+
|
|
112
|
+
- daily audit;
|
|
113
|
+
- immediate Telegram notification only when an actionable issue appears;
|
|
114
|
+
- one weekly healthy/degraded summary;
|
|
115
|
+
- forced test notification during setup;
|
|
116
|
+
- bounded report/artifact retention so daily raw responses cannot fill the NAS.
|
|
117
|
+
|
|
118
|
+
Reuse an existing Telegram bot only when it is explicitly in the same owner scope. Keep bot token and chat ID in a protected environment file and redact them from all output.
|
|
119
|
+
|
|
120
|
+
### 7. Verify every gate
|
|
121
|
+
|
|
122
|
+
Before claiming completion, verify all of the following:
|
|
123
|
+
|
|
124
|
+
- the web service responds with HTTP 200 on its configured port;
|
|
125
|
+
- the target domain and initial keywords are visible in SerpBear;
|
|
126
|
+
- at least one rank query succeeds;
|
|
127
|
+
- Search Console API query succeeds or returns a clearly documented no-data result;
|
|
128
|
+
- the audit runs successfully and writes a report plus raw artifacts;
|
|
129
|
+
- the scheduler is enabled and its next run is visible;
|
|
130
|
+
- a forced Telegram test succeeds;
|
|
131
|
+
- a simulated or observed failure produces a bounded, actionable notification;
|
|
132
|
+
- logs contain no passwords, private keys, bot tokens, or raw credential payloads;
|
|
133
|
+
- the final report identifies what is automatic, what remains approval-gated, and where to find logs/reports.
|
|
134
|
+
|
|
135
|
+
## Failure boundaries
|
|
136
|
+
|
|
137
|
+
Stop and ask for direction when:
|
|
138
|
+
|
|
139
|
+
- the target host or property cannot be identified without guessing;
|
|
140
|
+
- credentials are missing and cannot be entered through a secure UI or host file;
|
|
141
|
+
- the desired alert destination is ambiguous;
|
|
142
|
+
- enabling a scheduler requires a destructive or broad privilege change;
|
|
143
|
+
- the requested automation would edit or publish site content without approval.
|
|
144
|
+
|
|
145
|
+
Do not claim “connected” because settings were saved. Do not claim “indexed” because a page returned 200. Do not claim SEO improvement before a baseline and a later comparison exist.
|
|
146
|
+
|
|
147
|
+
## Handoff format
|
|
148
|
+
|
|
149
|
+
Return a compact handoff containing:
|
|
150
|
+
|
|
151
|
+
- target domain and deployment URL/port;
|
|
152
|
+
- SerpBear version and scraper mode;
|
|
153
|
+
- keyword count and initial baseline;
|
|
154
|
+
- Search Console property type and verification result;
|
|
155
|
+
- audit scope and latest issue count;
|
|
156
|
+
- Telegram schedule and test result;
|
|
157
|
+
- report/log/artifact locations;
|
|
158
|
+
- any manual action still required;
|
|
159
|
+
- explicit statement that no site content or code was changed unless approved.
|
|
@@ -23,7 +23,7 @@ Turn a URL or article title into a complete, policy-compliant Ukrainian Wikipedi
|
|
|
23
23
|
A single deliverable written to a scratch file and echoed in chat:
|
|
24
24
|
|
|
25
25
|
- the **target page** (exact ukwiki title, and whether it exists)
|
|
26
|
-
- the **wikitext** —
|
|
26
|
+
- 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
|
|
27
27
|
- the **edit summary** in Ukrainian (≤ 200 chars)
|
|
28
28
|
- the **source list** with the URL, publisher, and date actually fetched for each
|
|
29
29
|
- **risk notes**: notability (ВП:ЗН) standing, anything a patroller will challenge, what still needs a human check
|
|
@@ -34,12 +34,15 @@ A single deliverable written to a scratch file and echoed in chat:
|
|
|
34
34
|
|
|
35
35
|
| Input | Mode |
|
|
36
36
|
|---|---|
|
|
37
|
+
| explicit newcomer task (tier + type, e.g. "Середні → Оновлювати статті") | mode set by task type — see below |
|
|
37
38
|
| en.wikipedia.org URL, no uk equivalent | **Translate** — new uk article |
|
|
38
39
|
| uk.wikipedia.org URL, stub or thin | **Expand** |
|
|
39
40
|
| uk.wikipedia.org URL with `{{Без джерел}}` / `{{Джерело}}` | **Source** |
|
|
40
41
|
| uk.wikipedia.org URL, prose/format problems | **Cleanup** |
|
|
41
42
|
| "what should I edit next" | **Plan** — read `references/strategy.md`, propose a ranked list |
|
|
42
43
|
|
|
44
|
+
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.
|
|
45
|
+
|
|
43
46
|
Resolve the title first — `scripts/wiki.sh` handles redirects. Never draft against the wrong title.
|
|
44
47
|
|
|
45
48
|
### 2. Read before writing
|
|
@@ -49,6 +52,7 @@ Resolve the title first — `scripts/wiki.sh` handles redirects. Never draft aga
|
|
|
49
52
|
./scripts/wiki.sh get en "Title" # source-language wikitext
|
|
50
53
|
./scripts/wiki.sh langlink en "Title" uk # does a uk version already exist?
|
|
51
54
|
./scripts/wiki.sh check uk "Шаблон:Особа" # does this template/page exist?
|
|
55
|
+
./scripts/wiki.sh tasks <type> [n] # list candidates for a newcomer task type: copyedit|links|references|update|expand
|
|
52
56
|
```
|
|
53
57
|
|
|
54
58
|
Stop and report if:
|
|
@@ -83,21 +87,38 @@ Run every item. Report failures rather than hiding them.
|
|
|
83
87
|
- [ ] No original synthesis (ВП:ОД)
|
|
84
88
|
- [ ] Dates, numbers, and name transliterations are Ukrainian-correct
|
|
85
89
|
- [ ] Edit summary written in Ukrainian and states what changed and why
|
|
90
|
+
- [ ] The edit stayed inside the assigned task type's allowed scope
|
|
91
|
+
- [ ] Any maintenance template removed was actually earned — the underlying problem is genuinely fixed
|
|
86
92
|
|
|
87
93
|
### 6. Deliver
|
|
88
94
|
|
|
89
|
-
|
|
95
|
+
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.
|
|
96
|
+
|
|
97
|
+
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:
|
|
90
98
|
|
|
91
99
|
- new article → `https://uk.wikipedia.org/wiki/Тайтл?action=edit`
|
|
92
|
-
-
|
|
100
|
+
- existing article → `https://uk.wikipedia.org/w/index.php?title=Тайтл&action=edit`, replace the whole edit box
|
|
93
101
|
- test first → `Вікіпедія:Пісочниця` or the user's own `Користувач:Ім'я/Чернетка`
|
|
94
102
|
|
|
103
|
+
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`:
|
|
104
|
+
|
|
105
|
+
```sh
|
|
106
|
+
pbcopy < "/absolute/path/to/slug.wiki"
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Add an optional second line when the edit summary is long enough to be worth copying:
|
|
110
|
+
|
|
111
|
+
```sh
|
|
112
|
+
printf '%s' 'Опис редагування…' | pbcopy
|
|
113
|
+
```
|
|
114
|
+
|
|
95
115
|
Then stop. Do not offer to save it.
|
|
96
116
|
|
|
97
117
|
## References
|
|
98
118
|
|
|
99
119
|
- `references/strategy.md` — the contribution strategy: what to farm, in what order, and how to build standing without getting flagged
|
|
100
120
|
- `references/wikitext-uk.md` — verified uk templates, citation formats, article skeletons, policy shortcuts
|
|
121
|
+
- `references/newcomer-tasks.md` — the newcomer task tiers (Легкі/Середні/Важкі) and the binding scope contract for each task type
|
|
101
122
|
- `scripts/wiki.sh` — read-only MediaWiki API helper
|
|
102
123
|
|
|
103
124
|
## Verification
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
<!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
description: "Set up a website's first SEO analytics loop with persistent SerpBear rank tracking, Google Search Console, seeded keywords, read-only technical audits, and Telegram alerts on a local host or NAS."
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
> 🤖 *Auto-generated by **weekly-pattern-learner** · reusable first-run website analytics onboarding workflow derived from a validated local/NAS setup pattern*
|
|
8
|
+
|
|
9
|
+
# website-analytics-bootstrap
|
|
10
|
+
|
|
11
|
+
Build a repeatable, observable SEO analytics loop for a website without making unapproved content or code changes.
|
|
12
|
+
|
|
13
|
+
## Outcome
|
|
14
|
+
|
|
15
|
+
At completion, the operator has:
|
|
16
|
+
|
|
17
|
+
- persistent rank tracking for the target domain and a small, evidence-based keyword seed set;
|
|
18
|
+
- Google Search Console connected to the correct property and verified with a real API query;
|
|
19
|
+
- daily rank/Search Console refreshes;
|
|
20
|
+
- a read-only technical audit for key pages, `robots.txt`, and `sitemap.xml`;
|
|
21
|
+
- Telegram alerts for failures and a weekly health summary;
|
|
22
|
+
- saved reports, raw HTTP responses, logs, schedules, credentials locations, and a concise handoff.
|
|
23
|
+
|
|
24
|
+
This skill automates observation and reporting. Website edits, SEO copy changes, indexing submissions, and deployments remain approval-gated.
|
|
25
|
+
|
|
26
|
+
## First-run questions
|
|
27
|
+
|
|
28
|
+
Ask at most three questions only when the answer cannot be discovered safely:
|
|
29
|
+
|
|
30
|
+
1. What is the canonical website URL and which host/NAS should run the service?
|
|
31
|
+
2. Which Google Search Console property should be used: Domain or URL-prefix?
|
|
32
|
+
3. Should alerts use an existing Telegram bot/chat, or should the owner create one?
|
|
33
|
+
|
|
34
|
+
Never ask the user to paste private keys, bot tokens, passwords, or app passwords into chat. Accept them through the target UI, a secure secret store, or a protected host file.
|
|
35
|
+
|
|
36
|
+
## Workflow
|
|
37
|
+
|
|
38
|
+
### 1. Inspect before changing anything
|
|
39
|
+
|
|
40
|
+
- Read project-local agent instructions and inspect `.claude/scripts/` before making HTTP tooling.
|
|
41
|
+
- Check the current repository, remote, dirty worktree, deployment files, and existing analytics/monitoring integrations.
|
|
42
|
+
- Resolve the host using read-only checks. Prefer the reachable VPN/Tailscale address when the LAN address is unavailable.
|
|
43
|
+
- Check Docker/Container Manager, Node, Python/uv, systemd, and the host's supported scheduler.
|
|
44
|
+
- Preserve unrelated worktree changes. Do not reset, delete, or overwrite broad directories.
|
|
45
|
+
- Check whether an existing skill already covers post-connection GSC indexing analysis; use `search-console-indexing-audit` for that later phase instead of duplicating it.
|
|
46
|
+
|
|
47
|
+
### 2. Choose the deployment path
|
|
48
|
+
|
|
49
|
+
Prefer a persistent container when Docker is healthy. If Docker is unavailable or broken, use the supported native runtime as a deliberate fallback:
|
|
50
|
+
|
|
51
|
+
- pin the application version used for the setup;
|
|
52
|
+
- store application source separately from persistent data;
|
|
53
|
+
- set a non-default port and an explicit application URL;
|
|
54
|
+
- run under a least-privilege service user;
|
|
55
|
+
- keep secrets in a protected environment file, never in source, shell history, logs, or reports;
|
|
56
|
+
- build and run the production application before configuring automation.
|
|
57
|
+
|
|
58
|
+
Before applying any persistent setup, credential or permission changes, enabling the scheduler, or performing Telegram delivery or test actions, require explicit owner confirmation for that specific action. If confirmation is absent, default to a no-op and do not perform the action. Record the confirmation outcome alongside the actual path, runtime, port, service user, and rollback/restart command.
|
|
59
|
+
|
|
60
|
+
### 3. Configure SerpBear
|
|
61
|
+
|
|
62
|
+
- Create or verify the admin account without printing the password.
|
|
63
|
+
- Configure a supported scraper/proxy such as SerpApi through the UI or protected settings.
|
|
64
|
+
- Set daily scraping with a conservative strategy and retry behavior appropriate to API quotas.
|
|
65
|
+
- Add the canonical domain exactly once.
|
|
66
|
+
- Seed 8–12 phrases from visible services, locations, and positioning. Start with a mix of branded, service, and location queries; do not invent volume or ranking claims.
|
|
67
|
+
- Verify at least one real rank result and record the initial baseline.
|
|
68
|
+
|
|
69
|
+
Keyword seed examples should be generated from the target site's actual language, for example `{service} photographer`, `{service} {city}`, and the brand name. Expand the list only after Search Console supplies real queries or the owner confirms the market.
|
|
70
|
+
|
|
71
|
+
### 4. Connect Google Search Console
|
|
72
|
+
|
|
73
|
+
Use a Google Cloud service account created for this integration:
|
|
74
|
+
|
|
75
|
+
1. Create a JSON key in the service account's **Keys** tab. Keyless authentication is preferred when supported; otherwise document owner-approved rotation schedule, replacement procedure in SerpBear, and immediate disable/delete revocation steps for compromised or retired JSON keys.
|
|
76
|
+
2. Enable the Google Search Console API in that same Cloud project.
|
|
77
|
+
3. Add the service account's `client_email` as a **Restricted** user (with read-only access) on the exact Search Console property, retaining the existing `webmasters.readonly` scope and query-validation steps.
|
|
78
|
+
4. Enter `client_email` and the JSON `private_key` into SerpBear through its protected settings UI.
|
|
79
|
+
5. Match the property type precisely:
|
|
80
|
+
- Domain property → `sc-domain:example.com`.
|
|
81
|
+
- URL-prefix property → configure the exact URL, including protocol and trailing slash when required.
|
|
82
|
+
6. Trigger a real query and inspect the response. A saved credential flag is not proof of connectivity.
|
|
83
|
+
|
|
84
|
+
Diagnose in this order:
|
|
85
|
+
|
|
86
|
+
- `403 accessNotConfigured` → enable the Search Console API;
|
|
87
|
+
- `403 Forbidden` → verify the property type and service-account user on that exact property;
|
|
88
|
+
- key/decoder errors → verify the full PEM value and newline handling;
|
|
89
|
+
- empty rows with a successful request → report “connected, no data yet,” not a failure.
|
|
90
|
+
|
|
91
|
+
### 5. Add the read-only technical audit
|
|
92
|
+
|
|
93
|
+
Use a reusable project-local script or the target runtime's equivalent for repeated HTTP checks. Save every raw response and reproduction metadata before analysis. At minimum check:
|
|
94
|
+
|
|
95
|
+
- `/`, `/work` or the primary portfolio route;
|
|
96
|
+
- the main service/booking route;
|
|
97
|
+
- `/about` and `/contact`;
|
|
98
|
+
- `/robots.txt`;
|
|
99
|
+
- `/sitemap.xml`.
|
|
100
|
+
|
|
101
|
+
For HTML pages, inspect status, title, meta description, canonical, and accidental `noindex`. For robots and sitemap, inspect status, content type, parseability, and sitemap URL count. Do not infer indexation from a 200 response; use Search Console for index status.
|
|
102
|
+
|
|
103
|
+
Before saving artifacts, sanitize HTTP response headers and body fields by removing session-bearing Set-Cookie values and personal data. Restrict artifact file permissions to owner-read-write only and enforce bounded retention with automatic deletion of artifacts older than the documented retention period. Write a JSON report with timestamp, checked URLs, status, latency, issue list, sitemap count, and artifact paths using only sanitized data. Logs must be structured and must not contain credentials or full secret-bearing request data.
|
|
104
|
+
|
|
105
|
+
### 6. Schedule and alert
|
|
106
|
+
|
|
107
|
+
Prefer a persistent systemd service/timer. If the host cannot install a system unit, use the host's supported scheduler or stop and ask for an operator-approved scheduler change; do not silently assume a user crontab exists.
|
|
108
|
+
|
|
109
|
+
Recommended behavior:
|
|
110
|
+
|
|
111
|
+
- daily audit;
|
|
112
|
+
- immediate Telegram notification only when an actionable issue appears;
|
|
113
|
+
- one weekly healthy/degraded summary;
|
|
114
|
+
- forced test notification during setup;
|
|
115
|
+
- bounded report/artifact retention so daily raw responses cannot fill the NAS.
|
|
116
|
+
|
|
117
|
+
Reuse an existing Telegram bot only when it is explicitly in the same owner scope. Keep bot token and chat ID in a protected environment file and redact them from all output.
|
|
118
|
+
|
|
119
|
+
### 7. Verify every gate
|
|
120
|
+
|
|
121
|
+
Before claiming completion, verify all of the following:
|
|
122
|
+
|
|
123
|
+
- the web service responds with HTTP 200 on its configured port;
|
|
124
|
+
- the target domain and initial keywords are visible in SerpBear;
|
|
125
|
+
- at least one rank query succeeds;
|
|
126
|
+
- Search Console API query succeeds or returns a clearly documented no-data result;
|
|
127
|
+
- the audit runs successfully and writes a report plus raw artifacts;
|
|
128
|
+
- the scheduler is enabled and its next run is visible;
|
|
129
|
+
- a forced Telegram test succeeds;
|
|
130
|
+
- a simulated or observed failure produces a bounded, actionable notification;
|
|
131
|
+
- logs contain no passwords, private keys, bot tokens, or raw credential payloads;
|
|
132
|
+
- the final report identifies what is automatic, what remains approval-gated, and where to find logs/reports.
|
|
133
|
+
|
|
134
|
+
## Failure boundaries
|
|
135
|
+
|
|
136
|
+
Stop and ask for direction when:
|
|
137
|
+
|
|
138
|
+
- the target host or property cannot be identified without guessing;
|
|
139
|
+
- credentials are missing and cannot be entered through a secure UI or host file;
|
|
140
|
+
- the desired alert destination is ambiguous;
|
|
141
|
+
- enabling a scheduler requires a destructive or broad privilege change;
|
|
142
|
+
- the requested automation would edit or publish site content without approval.
|
|
143
|
+
|
|
144
|
+
Do not claim “connected” because settings were saved. Do not claim “indexed” because a page returned 200. Do not claim SEO improvement before a baseline and a later comparison exist.
|
|
145
|
+
|
|
146
|
+
## Handoff format
|
|
147
|
+
|
|
148
|
+
Return a compact handoff containing:
|
|
149
|
+
|
|
150
|
+
- target domain and deployment URL/port;
|
|
151
|
+
- SerpBear version and scraper mode;
|
|
152
|
+
- keyword count and initial baseline;
|
|
153
|
+
- Search Console property type and verification result;
|
|
154
|
+
- audit scope and latest issue count;
|
|
155
|
+
- Telegram schedule and test result;
|
|
156
|
+
- report/log/artifact locations;
|
|
157
|
+
- any manual action still required;
|
|
158
|
+
- explicit statement that no site content or code was changed unless approved.
|
|
@@ -22,7 +22,7 @@ Turn a URL or article title into a complete, policy-compliant Ukrainian Wikipedi
|
|
|
22
22
|
A single deliverable written to a scratch file and echoed in chat:
|
|
23
23
|
|
|
24
24
|
- the **target page** (exact ukwiki title, and whether it exists)
|
|
25
|
-
- the **wikitext** —
|
|
25
|
+
- 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
|
|
26
26
|
- the **edit summary** in Ukrainian (≤ 200 chars)
|
|
27
27
|
- the **source list** with the URL, publisher, and date actually fetched for each
|
|
28
28
|
- **risk notes**: notability (ВП:ЗН) standing, anything a patroller will challenge, what still needs a human check
|
|
@@ -33,12 +33,15 @@ A single deliverable written to a scratch file and echoed in chat:
|
|
|
33
33
|
|
|
34
34
|
| Input | Mode |
|
|
35
35
|
|---|---|
|
|
36
|
+
| explicit newcomer task (tier + type, e.g. "Середні → Оновлювати статті") | mode set by task type — see below |
|
|
36
37
|
| en.wikipedia.org URL, no uk equivalent | **Translate** — new uk article |
|
|
37
38
|
| uk.wikipedia.org URL, stub or thin | **Expand** |
|
|
38
39
|
| uk.wikipedia.org URL with `{{Без джерел}}` / `{{Джерело}}` | **Source** |
|
|
39
40
|
| uk.wikipedia.org URL, prose/format problems | **Cleanup** |
|
|
40
41
|
| "what should I edit next" | **Plan** — read `references/strategy.md`, propose a ranked list |
|
|
41
42
|
|
|
43
|
+
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.
|
|
44
|
+
|
|
42
45
|
Resolve the title first — `scripts/wiki.sh` handles redirects. Never draft against the wrong title.
|
|
43
46
|
|
|
44
47
|
### 2. Read before writing
|
|
@@ -48,6 +51,7 @@ Resolve the title first — `scripts/wiki.sh` handles redirects. Never draft aga
|
|
|
48
51
|
./scripts/wiki.sh get en "Title" # source-language wikitext
|
|
49
52
|
./scripts/wiki.sh langlink en "Title" uk # does a uk version already exist?
|
|
50
53
|
./scripts/wiki.sh check uk "Шаблон:Особа" # does this template/page exist?
|
|
54
|
+
./scripts/wiki.sh tasks <type> [n] # list candidates for a newcomer task type: copyedit|links|references|update|expand
|
|
51
55
|
```
|
|
52
56
|
|
|
53
57
|
Stop and report if:
|
|
@@ -82,21 +86,38 @@ Run every item. Report failures rather than hiding them.
|
|
|
82
86
|
- [ ] No original synthesis (ВП:ОД)
|
|
83
87
|
- [ ] Dates, numbers, and name transliterations are Ukrainian-correct
|
|
84
88
|
- [ ] Edit summary written in Ukrainian and states what changed and why
|
|
89
|
+
- [ ] The edit stayed inside the assigned task type's allowed scope
|
|
90
|
+
- [ ] Any maintenance template removed was actually earned — the underlying problem is genuinely fixed
|
|
85
91
|
|
|
86
92
|
### 6. Deliver
|
|
87
93
|
|
|
88
|
-
|
|
94
|
+
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.
|
|
95
|
+
|
|
96
|
+
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:
|
|
89
97
|
|
|
90
98
|
- new article → `https://uk.wikipedia.org/wiki/Тайтл?action=edit`
|
|
91
|
-
-
|
|
99
|
+
- existing article → `https://uk.wikipedia.org/w/index.php?title=Тайтл&action=edit`, replace the whole edit box
|
|
92
100
|
- test first → `Вікіпедія:Пісочниця` or the user's own `Користувач:Ім'я/Чернетка`
|
|
93
101
|
|
|
102
|
+
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`:
|
|
103
|
+
|
|
104
|
+
```sh
|
|
105
|
+
pbcopy < "/absolute/path/to/slug.wiki"
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Add an optional second line when the edit summary is long enough to be worth copying:
|
|
109
|
+
|
|
110
|
+
```sh
|
|
111
|
+
printf '%s' 'Опис редагування…' | pbcopy
|
|
112
|
+
```
|
|
113
|
+
|
|
94
114
|
Then stop. Do not offer to save it.
|
|
95
115
|
|
|
96
116
|
## References
|
|
97
117
|
|
|
98
118
|
- `references/strategy.md` — the contribution strategy: what to farm, in what order, and how to build standing without getting flagged
|
|
99
119
|
- `references/wikitext-uk.md` — verified uk templates, citation formats, article skeletons, policy shortcuts
|
|
120
|
+
- `references/newcomer-tasks.md` — the newcomer task tiers (Легкі/Середні/Важкі) and the binding scope contract for each task type
|
|
100
121
|
- `scripts/wiki.sh` — read-only MediaWiki API helper
|
|
101
122
|
|
|
102
123
|
## Verification
|
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<p><strong>Agent-agnostic skill catalog for Codex, Claude, Cursor, Grok, Copilot, Windsurf, Kiro, and other skill-aware tools.</strong></p>
|
|
4
4
|
<p>
|
|
5
5
|
<img src="https://img.shields.io/badge/license-MIT-16a34a" alt="MIT license">
|
|
6
|
-
<img src="https://img.shields.io/badge/skills-
|
|
6
|
+
<img src="https://img.shields.io/badge/skills-45-2563eb" alt="45 skills">
|
|
7
7
|
<img src="https://img.shields.io/badge/platforms-Codex%20%7C%20Claude%20%7C%20Cursor%20%7C%20Grok%20%7C%20Copilot%20%7C%20Windsurf%20%7C%20Kiro-111827" alt="Codex Claude Cursor Grok Copilot Windsurf Kiro">
|
|
8
8
|
<img src="https://img.shields.io/badge/status-public%20catalog-16a34a" alt="Public catalog">
|
|
9
9
|
</p>
|
|
@@ -139,11 +139,11 @@ packages/{category}/{skill}/SKILL.md
|
|
|
139
139
|
|
|
140
140
|
</details>
|
|
141
141
|
|
|
142
|
-
## All
|
|
142
|
+
## All 45 Skills
|
|
143
143
|
|
|
144
144
|
Each entry links to its `SKILL.md`. Reference any skill by its `olko:*` lookup name in a new agent session.
|
|
145
145
|
|
|
146
|
-
### Software development (
|
|
146
|
+
### Software development (39)
|
|
147
147
|
|
|
148
148
|
| Skill | What it does | Use when |
|
|
149
149
|
|-------|-------------|----------|
|
|
@@ -186,12 +186,14 @@ Each entry links to its `SKILL.md`. Reference any skill by its `olko:*` lookup n
|
|
|
186
186
|
| [morning-routine](packages/software-development/morning-routine/SKILL.md) | Runs the complete start-of-day setup in one pass: rolls over unfinished Obsidian tasks, syncs open GitHub PRs into today's daily note, and sweeps safe Dependabot patch bumps | Starting the workday by chaining obsidian-task-rollover, obsidian-pr-sync, and dependabot-triage in sequence |
|
|
187
187
|
| [release-day](packages/software-development/release-day/SKILL.md) | Orchestrates a full release-day workflow for iOS, Android, or Garmin apps: verifies CI is green, generates a changelog, drafts store listing copy, triggers semantic-release or tags manually, waits for the build, and queues the App Store submission | Cutting a release from "code is ready" to "build submitted" in one orchestrated pass |
|
|
188
188
|
| [branch-cleanup](packages/software-development/branch-cleanup/SKILL.md) | Prunes stale git branches after a merge wave: deletes closed/merged remote branches, removes local tracking refs that no longer exist on the remote, and optionally cleans up merged local branches | Tidying up after a Dependabot triage batch merge or a sprint wind-down |
|
|
189
|
+
| [vinted-listing](packages/software-development/vinted-listing/SKILL.md) | Creates and safely publishes Vinted listings from verified item details and the seller’s original photos, with automatic suggestions, duplicate checks, draft verification, and publish confirmation | Creating, editing, or publishing a Vinted listing |
|
|
189
190
|
|
|
190
|
-
### Marketing (
|
|
191
|
+
### Marketing (3)
|
|
191
192
|
|
|
192
193
|
| Skill | What it does | Use when |
|
|
193
194
|
|-------|-------------|----------|
|
|
194
195
|
| [search-console-indexing-audit](packages/marketing/search-console-indexing-audit/SKILL.md) | Audits Google Search Console Coverage exports against sitemap, robots, canonical, redirect, and noindex signals | Diagnosing GSC indexing issues such as redirects, canonical alternates, and discovered-but-not-indexed pages |
|
|
196
|
+
| [website-analytics-bootstrap](packages/marketing/website-analytics-bootstrap/SKILL.md) | Sets up persistent SerpBear rank tracking, Google Search Console, seeded keywords, read-only SEO audits, and Telegram alerts on a local host or NAS | Bootstrapping SEO analytics and monitoring for a new website |
|
|
195
197
|
| [viral-launch](packages/marketing/viral-launch/SKILL.md) | Sets up a project repository and launch plan for shareable marketing, public launch readiness, and growth loops | Preparing a repo, product, open-source package, or creator tool for public launch |
|
|
196
198
|
|
|
197
199
|
### Music (1)
|
|
@@ -291,8 +293,8 @@ See [docs/skill-anatomy.md](docs/skill-anatomy.md) for the package format.
|
|
|
291
293
|
```text
|
|
292
294
|
agent-skills/
|
|
293
295
|
├── packages/
|
|
294
|
-
│ ├── software-development/ (
|
|
295
|
-
│ ├── marketing/ (
|
|
296
|
+
│ ├── software-development/ (39 skills)
|
|
297
|
+
│ ├── marketing/ (3 skills)
|
|
296
298
|
│ ├── music/ (1 skill)
|
|
297
299
|
│ └── photography/ (1 skill)
|
|
298
300
|
├── catalog/
|