# **Kompletny pakiet OpenClaw SKILL** w układzie **router + sub‑skills**, gotowy do skopiowania jako katalogi z `SKILL.md`. Oparłem format o to, że **OpenClaw skill to katalog zawierający `SKILL.md` z YAML frontmatter + instrukcje**, a skills są ładowane m.in. z `/skills` oraz `~/.openclaw/skills` (z priorytetem workspace > local > bundled). W samym pliku frontmatter typowo występują pola jak `name`, `description`, opcjonalnie `version`, `trigger`, `tools` itd. [\[docs.openclaw.ai\]](https://docs.openclaw.ai/tools/skills), [\[openclaws.io\]](https://openclaws.io/docs/tools/skills/), [\[deepwiki.com\]](https://deepwiki.com/lekt9/openclaw-foundry/5.1-skill-format-and-structure) [\[clawdocs.org\]](https://clawdocs.org/guides/skill-development/), [\[deepwiki.com\]](https://deepwiki.com/lekt9/openclaw-foundry/5.1-skill-format-and-structure) Dodatkowo w QA uwzględniłem bramki SEO, które przewijają się w materiałach typu “SEO recommendations / requirements”: m.in. **duplicate content, canonicalization, pagination, structured data, IA, on‑page, performance, mobile-first**. *** ## 1) Struktura katalogów (wklej do `/skills/`) skills/ seo-ai-router/ SKILL.md artifacts/ brief.schema.json research.schema.json outline.schema.json draft.schema.json qa.schema.json seo-research/ SKILL.md seo-outline/ SKILL.md seo-writer/ SKILL.md seo-onpage/ SKILL.md seo-schema/ SKILL.md seo-qa-gates/ SKILL.md seo-publish/ SKILL.md seo-measure-refresh/ SKILL.md *** ## 2) Router SKILL — `skills/seo-ai-router/SKILL.md` ```markdown --- name: seo-ai-router version: 1.0.0 description: Router i orkiestrator procesu tworzenia tresci SEO per etap customer journey (Inicjacja->Badania->Porownywanie->Transakcja->Doswiadczenie) z artefaktami JSON i bramkami QA. trigger: "seo pipeline|seo workflow|customer journey|inicjacja|badania|porownywanie|transakcja|doswiadczenie|checklista seo|seo machine" tools: [filesystem, browser, http, shell] --- # SEO AI Router (Customer Journey) ## Cel Gdy uzytkownik prosi o tresc SEO, strategie, checklisty, artykul, landing, porownanie lub material pod dowolny etap sciezki zakupowej, ten skill ma: 1) wykryc etap i intencje, 2) wygenerowac artefakty (Brief -> Research -> Outline -> Draft -> OnPage -> Schema -> QA -> Publish -> Measure), 3) wywolac (konceptualnie) sub-skills w odpowiedniej kolejnosci. ## Kiedy uzywac Aktywuj, gdy prosba dotyczy: - tworzenia/planowania tresci SEO, - dopasowania do intencji/funnel/journey, - przygotowania materialu “pod AI/agentow”, - wdrozenia procesu content ops (research->publish->refresh). ## Detekcja etapu (reguly) - Inicjacja: definicje, "co to jest", edukacja, problem - Badania: rankingi, opinie, przewodniki zakupowe - Porownywanie: "X vs Y", alternatywy, tabele, kalkulatory - Transakcja: "kup", "cena", "gdzie kupic", landing/product/pricing - Doswiadczenie: instrukcje, KB, troubleshooting, posprzedaz Jesli niejasne: przyjmij Badania jako domysl i w brief oznacz `stage_confidence: low`. ## Kontrakt artefaktow (pliki lub bloki w odpowiedzi) W kazdym kroku generuj JSON zgodny z prostym schematem: - `brief.json` - `research.json` - `outline.json` - `draft.md` (lub html) - `onpage.json` - `schema.jsonld` - `qa.json` - `publish.json` - `measure.json` ## Orkiestracja (kolejnosc sub-skills) 1) Uruchom **seo-research** 2) Uruchom **seo-outline** 3) Uruchom **seo-writer** 4) Uruchom **seo-onpage** 5) Uruchom **seo-schema** 6) Uruchom **seo-qa-gates** 7) Uruchom **seo-publish** 8) Uruchom **seo-measure-refresh** ## Wyjscie finalne dla uzytkownika Zawsze zwroc: - gotowy artefakt docelowy (np. artykul/landing/KB), - oraz komplet JSON-ow (albo “bundle” w jednej odpowiedzi), - oraz liste decyzji: etap, intencja, target, CTA, linkowanie wewn. ## Notatka o snippetach (meta) Pamietaj: snippet w wynikach wyszukiwania jest zwykle generowany z tresci strony, ale meta description moze zostac uzyte, gdy lepiej opisuje strone. Uwzglednij to w kroku seo-onpage. ``` *** ## 3) Sub-skill: Research — `skills/seo-research/SKILL.md` ```markdown --- name: seo-research version: 1.0.0 description: Research SEO: intencja, pytania, katy, konkurencja, mapa slow kluczowych pod etap customer journey. trigger: "seo research|intencja|paa|faq|konkurencja|serp" tools: [browser, http] --- # SEO Research Agent ## Wejscie Oczekuj `brief.json`: - stage, persona, intent, topic, geo/lang, KPI ## Kroki 1) Okresl primary intent: informational / commercial / transactional / navigational. 2) Zbierz liste pytan (FAQ/PAA style) + obiekcje + synonimy. 3) Zaproponuj 3-5 katow (angles) dopasowanych do etapu: - Inicjacja: edukacja, definicja, problem->rozwiazanie - Badania: metodologia, kryteria, ranking - Porownywanie: roznice, trade-offs, "dla kogo" - Transakcja: wartosc, oferta, dowody, CTA - Doswiadczenie: diagnoza, kroki naprawy, KB 4) Zbuduj mapowanie: query cluster -> sekcje strony (H2/H3). 5) Zapisz `research.json`. ## Output: research.json (minimal) { "stage": "...", "intent": "...", "topic": "...", "keyword_clusters": [ {"cluster":"...", "queries":["..."], "notes":"..."} ], "questions": ["..."], "objections": ["..."], "angles": ["..."], "internal_links_suggested": { "prev_stage": ["..."], "next_stage": ["..."] } } ``` *** ## 4) Sub-skill: Outline — `skills/seo-outline/SKILL.md` ```markdown --- name: seo-outline version: 1.0.0 description: Buduje outline H1-H3 + FAQ + plan linkowania wewnetrznego na podstawie research. trigger: "outline|struktura|h2|h3|plan tresci" tools: [filesystem] --- # SEO Outline Agent ## Wejscie `research.json` ## Kroki 1) Stworz H1 zgodny z intencja. 2) Zaprojektuj H2/H3 tak, by: - w pierwszych sekcjach odpowiadac “wprost” na potrzebe, - pokrywac klastry slow kluczowych, - dodac FAQ (Q/A). 3) Dodaj sekcje “dla kogo”, “kiedy wybrac”, “alternatywy” jesli etap >= Badania. 4) Ustal CTA i linki do poprzedniego/nastepnego etapu. ## Output: outline.json { "h1": "...", "sections": [ {"h2":"...", "h3":["..."], "intent_note":"..."} ], "faq": [{"q":"...", "a_hint":"..."}], "cta": {"primary":"...", "secondary":"..."}, "internal_links": [{"anchor":"...", "target":"..."}] } ``` *** ## 5) Sub-skill: Writer — `skills/seo-writer/SKILL.md` ```markdown --- name: seo-writer version: 1.0.0 description: Pisze draft na podstawie outline; dodaje TLDR, przyklady, sekcje dopasowane do etapu. trigger: "napisz|draft|artykul|landing|kb" tools: [filesystem] --- # SEO Writer Agent ## Wejscie `outline.json` ## Kroki 1) Napisz wersje 1 w Markdown: - TLDR na gorze (2-5 zdan) - H2/H3 zgodnie z outline 2) Styl: - Inicjacja: edukacyjnie, bez sprzedazy - Badania: kryteria + metodologia + rekomendacje - Porownywanie: trade-offs, tabela roznic (tekstowo) - Transakcja: wartosc, dowody, CTA - Doswiadczenie: szybka diagnoza + kroki 3) Dodaj sekcje FAQ. 4) Dodaj placeholdery do linkow wewnetrznych. ## Output - `draft.md` - `draft.json` (opcjonalnie): streszczenie + kluczowe tezy ``` *** ## 6) Sub-skill: On-page — `skills/seo-onpage/SKILL.md` ```markdown --- name: seo-onpage version: 1.0.0 description: On-page SEO: title, meta description, naglowki, link text, IA, canonical/pagination checklist. trigger: "meta title|meta description|onpage|optymalizacja" tools: [filesystem] --- # SEO On-page Agent ## Wejscie `draft.md` + `research.json` ## Kroki 1) Uloz Title i Meta Description: - unikalne, - zgodne z intencja, - streszczaja i zachecaja (meta moze byc uzyte jako snippet, gdy lepiej opisuje strone niz fragment tresci). 2) Sprawdz zgodnosc H1/H2/H3 z klastrami. 3) Popraw linki wewnetrzne: - anchor text opisowy, - logiczny flow prev/next stage. 4) Zapisz `onpage.json`: - title, description, - link plan, - uwagi do IA. 5) Dodaj tech-checklist: - duplicate content / canonical / pagination / indexing. ## Output: onpage.json { "title": "...", "meta_description": "...", "internal_links": [{"anchor":"...", "target":"..."}], "tech_notes": ["duplicate content", "canonical", "pagination", "indexing"] } ``` *** ## 7) Sub-skill: Structured Data — `skills/seo-schema/SKILL.md` ```markdown --- name: seo-schema version: 1.0.0 description: Dobiera i generuje JSON-LD (FAQ/HowTo/Product/Offer/Breadcrumb) na podstawie typu strony. trigger: "schema|json-ld|structured data|faq schema|howto schema" tools: [filesystem] --- # SEO Schema Agent ## Wejscie `draft.md` + `onpage.json` + stage ## Kroki 1) Dobierz typ: - FAQPage: gdy masz realne Q/A - HowTo: gdy masz kroki - Product/Offer: gdy to strona produktu/oferty - BreadcrumbList: gdy to strona w hierarchii 2) Wygeneruj `schema.jsonld` jako JSON-LD. 3) Dodaj notatke: structured data wspiera rich results i “zrozumienie” tresci przez wyszukiwarki. ## Output - `schema.jsonld` ``` *** ## 8) Sub-skill: QA Gates — `skills/seo-qa-gates/SKILL.md` ```markdown --- name: seo-qa-gates version: 1.0.0 description: Bramki jakosci SEO: intencja, duplikacja/canonical/pagination, structured data, linki, mobile-first, performance. trigger: "qa seo|bramki|quality gates|audit" tools: [filesystem] --- # SEO QA Gates Agent ## Wejscie `draft.md` + `onpage.json` + `schema.jsonld` ## Bramki (PASS/FAIL + fixlist) 1) Intent match: czy tresc odpowiada na intencje etapu? 2) Meta: Title/Description unikalne i zgodne z trescia. 3) Tech: duplicate content, canonicalization, pagination, indexing. 4) Structured data: czy pasuje do strony i jest sensowne. 5) Linki: opisowy anchor text + crawlable (typowy problem w audytach). 6) Mobile-first + performance (traktuj jako release gate). ## Output: qa.json { "status": "pass|fail", "checks": [ {"name":"intent", "status":"pass|fail", "notes":"..."}, {"name":"meta", "status":"pass|fail", "notes":"..."}, {"name":"tech", "status":"pass|fail", "notes":"..."}, {"name":"schema", "status":"pass|fail", "notes":"..."}, {"name":"links", "status":"pass|fail", "notes":"..."}, {"name":"mobile_perf", "status":"pass|fail", "notes":"..."} ], "fixlist": ["..."] } ``` *** ## 9) Sub-skill: Publish — `skills/seo-publish/SKILL.md` ```markdown --- name: seo-publish version: 1.0.0 description: Przygotowanie do publikacji: URL, breadcrumbs, mapowanie do kategorii, plan indeksacji, checklist pre-publish. trigger: "publish|publikuj|wdroz|deploy content" tools: [filesystem] --- # SEO Publish Agent ## Wejscie `qa.json` + `draft.md` + `onpage.json` + `schema.jsonld` ## Reguly - Jesli QA fail: nie publikuj, zwroc fixlist. - Jesli QA pass: 1) Zaproponuj slug URL (ASCII, krotki). 2) Zapisz paczke: content + schema + meta. 3) Zapisz `publish.json` z polami: - url_slug - breadcrumbs - next_refresh_hint ## Output: publish.json { "url_slug": "...", "breadcrumbs": ["...","..."], "publish_notes": ["..."], "next_refresh_hint": "..." } ``` *** ## 10) Sub-skill: Measure & Refresh — `skills/seo-measure-refresh/SKILL.md` ```markdown --- name: seo-measure-refresh version: 1.0.0 description: Pomiar i refresh: sygnaly z ruchu, CTR, nowe pytania, plan aktualizacji, retarget do kolejnego etapu. trigger: "measure|refresh|aktualizacja|performance review seo" tools: [filesystem] --- # SEO Measure & Refresh Agent ## Wejscie `publish.json` + KPI z brief ## Kroki 1) Zdefiniuj “refresh triggers”: - spadek CTR, - zmiana intencji, - nowe pytania, - nowy konkurent/format SERP. 2) Zaproponuj plan refresh: - update meta, - rozbudowa FAQ, - dodanie sekcji porownawczej lub CTA do kolejnego etapu. 3) Output `measure.json`. ## Output: measure.json { "signals": ["..."], "hypotheses": ["..."], "refresh_actions": ["..."], "next_review_window": "..." } ``` *** # 11) (Opcjonalnie) Minimalne schematy JSON (router artifacts) Jeśli chcesz walidować artefakty, wrzuć te pliki do `skills/seo-ai-router/artifacts/`. To są ultra-proste schematy (bez zależności). ### `brief.schema.json` ```json { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "required": ["stage", "topic", "intent"], "properties": { "stage": {"type": "string"}, "topic": {"type": "string"}, "intent": {"type": "string"}, "persona": {"type": "string"}, "kpi": {"type": "array", "items": {"type": "string"}}, "stage_confidence": {"type": "string"} } } ``` (Pozostałe schematy mogę Ci dopisać analogicznie, ale już teraz masz “działający” pakiet — OpenClaw nie wymaga schematów, to tylko Twoje QA/porządek.) *** ## Jak tego używać (praktycznie, bez filozofii) 1. Skopiuj katalogi do `/skills/` (to ma najwyższy priorytet ładowania skills). [\[docs.openclaw.ai\]](https://docs.openclaw.ai/tools/skills), [\[openclaws.io\]](https://openclaws.io/docs/tools/skills/) 2. W rozmowie piszesz np.: * „Zrob mi content pod etap Porownywanie dla \[temat]” * „Przygotuj landing pod Transakcja dla \[produkt]” * „Zrob KB pod Doswiadczenie: jak naprawic \[problem]” Router ma wtedy poprowadzić agentową sekwencję i zwrócić paczkę artefaktów. *** > Mała uwaga techniczna: w Mermaid **nie używaj słowa `end` jako tekstu w węźle flowchart** (potrafi „wywalić” parser) — lepiej `END` albo `[END]`.\ > Dla sequenceDiagram `alt/else/loop` są wspierane wprost. [\[mermaid.ai\]](https://mermaid.ai/open-source/syntax/flowchart.html), [\[emersonbot....github.io\]](https://emersonbottero.github.io/mermaid-docs/syntax/flowchart.html) [\[docs.merma...viewer.com\]](https://docs.mermaidviewer.com/diagrams/sequence.html), [\[mermaid.ai\]](https://mermaid.ai/open-source/syntax/examples.html), [\[emersonbot....github.io\]](https://emersonbottero.github.io/mermaid-docs/syntax/sequenceDiagram.html) *** ## 1) Diagram (Flowchart): Router + artefakty + QA gates + retry loop ```mermaid flowchart TD %% ========================= %% ENTRY %% ========================= U[User request: temat + cel] --> R0[Router: detect stage + intent] R0 --> D1{Stage detected?} D1 -->|yes| BR[brief.json] D1 -->|no| BR_LOW[brief.json + stage_confidence=low] %% ========================= %% STAGE MAP (customer journey) %% ========================= subgraph ST["Stage map"] S1[Inicjacja] S2[Badania] S3[Porownywanie] S4[Transakcja] S5[Doswiadczenie] S1 --> S2 --> S3 --> S4 --> S5 end BR --> ST BR_LOW --> ST %% ========================= %% PIPELINE %% ========================= subgraph PL["AI Pipeline (artefakty)"] direction TB P1[seo-research] --> A1[research.json] A1 --> P2[seo-outline] --> A2[outline.json] A2 --> P3[seo-writer] --> A3[draft.md] A3 --> P4[seo-onpage] --> A4[onpage.json] A4 --> P5[seo-schema] --> A5[schema.jsonld] A5 --> P6[seo-qa-gates] --> A6[qa.json] A6 --> DEC_QA{QA status?} end BR --> P1 BR_LOW --> P1 %% ========================= %% QA BRANCHING + FIX LOOP %% ========================= DEC_QA -->|pass| P7[seo-publish] --> A7[publish.json] DEC_QA -->|fail| FIX[Fixlist: what to change] FIX --> P3 %% ========================= %% PUBLISH + MEASURE %% ========================= A7 --> P8[seo-measure-refresh] --> A8[measure.json] A8 --> DEC_REFRESH{Refresh needed?} DEC_REFRESH -->|yes| P1 DEC_REFRESH -->|no| OUT[Output bundle: content + JSON artifacts] %% ========================= %% QA GATES DETAILS (what QA checks) %% ========================= subgraph QA["QA Gates (co sprawdzamy)"] direction TB Q1[Intent match: etap vs tresc] Q2[Meta: title + description unique] Q3[Tech: duplicate/canonical/pagination/indexing] Q4[Structured data: FAQ/HowTo/Product when fits] Q5[Links: opisowe + crawlable] Q6[Mobile-first + performance] end P6 --> QA ``` Dlaczego to jest „bardziej szczegółowe”: * Masz **artefakty jako węzły** (`brief.json`, `research.json`, `outline.json`, `draft.md`, `onpage.json`, `schema.jsonld`, `qa.json`, `publish.json`, `measure.json`) * Jest **gałąź QA pass/fail** oraz **pętla naprawcza** (wracasz do `seo-writer` i przechodzisz dalej) * Jest **pętla refresh** po pomiarach (wraca do research, jeśli trzeba) * Jest osobny subgraph „QA Gates” opisujący *co* sprawdzasz (zgodne z tym, co przewija się w checklistach SEO: duplicate/canonical/pagination/structured data/perf/mobile etc.). ## 2) Diagram (Sequence): Router + sub‑skills + alt/loop/opt + artefakty Ten wariant jest „bardziej operacyjny” — pokazuje kto (który agent) co produkuje i kiedy następuje retry. ``` mermaid sequenceDiagram autonumber participant U as User participant HQ as Orchestrator participant R as seo-research participant O as seo-outline participant W as seo-writer participant S as seo-onpage participant SC as seo-schema participant Q as seo-qa-gates participant PB as seo-publish participant M as seo-measure-refresh U->>HQ: Request (topic, goal, stage optional) HQ->>HQ: Detect stage + intent HQ-->>U: Plan preview (stage, intent, artifacts list) HQ->>R: brief.json R-->>HQ: research.json HQ->>O: research.json O-->>HQ: outline.json HQ->>W: outline.json W-->>HQ: draft.md HQ->>S: draft.md + research.json S-->>HQ: onpage.json (title, meta, links) HQ->>SC: draft.md + onpage.json SC-->>HQ: schema.jsonld loop QA until pass HQ->>Q: draft.md + onpage.json + schema.jsonld Q-->>HQ: qa.json (pass/fail + fixlist) alt QA fail HQ->>W: fixlist + outline.json W-->>HQ: draft.md (revised) HQ->>S: draft.md update S-->>HQ: onpage.json update HQ->>SC: schema update if needed SC-->>HQ: schema.jsonld else QA pass HQ->>PB: content bundle PB-->>HQ: publish.json (slug, notes) end end opt Measure and refresh HQ->>M: publish.json + KPI M-->>HQ: measure.json (signals + refresh plan) end HQ-->>U: Final bundle (content + JSON artifacts) ``` `loop`, `alt/else`, `opt` są natywnie wspierane w Mermaid sequenceDiagram (to standardowy sposób na pokazanie retry i warunków). [\[docs.merma...viewer.com\]](https://docs.mermaidviewer.com/diagrams/sequence.html), [\[mermaid.ai\]](https://mermaid.ai/open-source/syntax/examples.html), [\[emersonbot....github.io\]](https://emersonbottero.github.io/mermaid-docs/syntax/sequenceDiagram.html) ***