Six free, MIT-licensed agent skills. Install all of them with npx skills add cygnixlabs-cmd/cygnix-seo-skills. Each is a short SKILL.md plus one standard-library Python script: no API keys and no paid SEO tool.
Group a keyword list into topic clusters with a pillar keyword, majority search intent and suggested page type, so one page targets each cluster. Use when the user pastes keywords or a keyword CSV and asks to cluster, group, organise or map keywords to pages, or plan a content hub. Offline, no API keys.
npx skills add cygnixlabs-cmd/cygnix-seo-skills --skill keyword-clustering-lite
Real output from skills/keyword-clustering-lite/scripts/cluster.py examples/keywords.txt on the bundled example file:
| # | pillar keyword | intent | page type | keywords | members | |---|---|---|---|---|---| | 1 | crm for small business | commercial | comparison, 'best X' list or review page | 3 | best crm for small business; small business crm software | | 2 | crm vs erp | commercial | comparison, 'best X' list or review page | 2 | erp vs crm difference | | 3 | crm pricing | transactional | product, pricing or service page | 2 | crm pricing comparison | | 4 | free crm software | commercial | comparison, 'best X' list or review page | 2 | crm software near me | | 5 | what is a crm | informational | guide, how-to or FAQ article | 1 | | | 6 | hubspot login | navigational | brand, login or support page | 1 | | | 7 | how to choose a crm | informational | guide, how-to or FAQ article | 1 | | 12 keywords -> 7 clusters (threshold 0.5). Lexical clustering: check top clusters against the live SERP before merging pages.
Need it at scale or inside a workflow? Apify actor: Keyword Clustering Tool & Grouper + Content Brief Generator · full skill on Agensi: Keyword Clusters + Intent Map: No Paid SEO Tool Needed
Classify keywords by search intent (informational, commercial, transactional, navigational, plus a local flag) and suggest the page type that should target each one. Use when the user asks for search intent, keyword intent, what kind of page to build for a keyword, or why a page type does not rank. Offline, rule-based, no API keys.
npx skills add cygnixlabs-cmd/cygnix-seo-skills --skill search-intent-lite
Real output from skills/search-intent-lite/scripts/intent.py examples/keywords.txt on the bundled example file:
| keyword | intent | confidence | local | page type | |---|---|---|---|---| | best crm for small business | commercial | high | | comparison, 'best X' list or review page | | crm for small business | unclear | low | | check the live SERP before choosing | | small business crm software | commercial | high | | comparison, 'best X' list or review page | | crm pricing | transactional | high | | product, pricing or service page | | crm pricing comparison | transactional | mixed | | product, pricing or service page | | how to choose a crm | informational | high | | guide, how-to or FAQ article | | what is a crm | informational | high | | guide, how-to or FAQ article | | crm vs erp | commercial | high | | comparison, 'best X' list or review page | | erp vs crm difference | commercial | high | | comparison, 'best X' list or review page | | free crm software | commercial | high | | comparison, 'best X' list or review page | | hubspot login | navigational | high | | brand, login or support page | | crm software near me | commercial | high | yes | local landing / service-area page | Totals: commercial 6, transactional 2, informational 2, unclear 1, navigational 1
Need it at scale or inside a workflow? Apify actor: SERP Intent Mapper: Keyword Search Intent Classifier · full skill on Agensi: SERP Intent Mapper — Keyword → Page Type Match
Find queries where two or more of your own pages split Google impressions, from a Google Search Console query+page export, and rank them HIGH/MEDIUM/LOW. Use when the user asks about keyword cannibalization, competing pages, pages fighting for the same keyword, or uploads a GSC export with query and page columns. Offline, no API keys.
npx skills add cygnixlabs-cmd/cygnix-seo-skills --skill keyword-cannibalization-lite
Real output from skills/keyword-cannibalization-lite/scripts/cannibalization.py examples/gsc-query-page.csv on the bundled example file:
| severity | query | primary page (most clicks) | competing pages | clicks on competitors | #2 impression share | position gap | |---|---|---|---|---|---|---| | HIGH | how to clean running shoes | https://example.com/blog/clean-shoes | https://example.com/blog/shoe-care | 22 | 49% | 4.4 | | HIGH | best running shoes | https://example.com/best-running-shoes | https://example.com/blog/running-shoes-guide | 15 | 31% | 8.6 | 3 queries checked, 2 cannibalized (2 HIGH). Thresholds: >= 10 impressions and >= 10% share per page.
Need it at scale or inside a workflow? Apify actor: Keyword Cannibalization Checker for Google Search Console · full skill on Agensi: Fix Keyword Cannibalization Using Google Search Console
Compare two Google Search Console page exports (an earlier period and a recent one) and flag pages that are LOST, DECLINING, in STRIKING_DISTANCE, GROWING or STABLE, ranked by clicks lost. Use when the user asks which pages lost traffic, about content decay, what to refresh or update first, or uploads two GSC page exports. Offline, no API keys.
npx skills add cygnixlabs-cmd/cygnix-seo-skills --skill content-decay-lite
Real output from skills/content-decay-lite/scripts/decay.py examples/gsc-pages-previous.csv examples/gsc-pages-current.csv on the bundled example file:
| page | status | clicks before | clicks now | click change | % change | position before → now | |---|---|---|---|---|---|---| | https://example.com/seo-guide | DECLINING | 800 | 420 | -380 | -48% | 4.2 → 6.1 | | https://example.com/keyword-research | DECLINING | 210 | 90 | -120 | -57% | 8.9 → 9.4 | | https://example.com/link-building | DECLINING | 120 | 35 | -85 | -71% | 9.0 → 14.2 | | https://example.com/old-post | LOST | 45 | 0 | -45 | -100% | | | https://example.com/new-post | STRIKING_DISTANCE | 0 | 60 | +60 | | | | https://example.com/technical-seo | GROWING | 300 | 380 | +80 | +27% | 4.0 → 3.6 | 6 pages compared. Clicks lost on declining pages: 630. DECLINING 3, GROWING 1, LOST 1, STRIKING_DISTANCE 1
Need it at scale or inside a workflow? Apify actor: Content Decay Audit - Google Search Console Traffic Drop · full skill on Agensi: Find Decaying Pages: GSC Triage + Content Refresh Plan
Check whether a website has a valid /llms.txt (llmstxt.org format, working links, size) and whether robots.txt lets AI crawlers such as GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot and Google-Extended in. Use when the user asks about llms.txt, AI crawler access, blocking or allowing AI bots, or whether ChatGPT/Claude/Perplexity can read their site. Read-only.
npx skills add cygnixlabs-cmd/cygnix-seo-skills --skill llms-txt-check
Real output from skills/llms-txt-check/scripts/llms_check.py plausible.io on the live site on 23 October 2026:
# llms.txt + AI crawler check: https://plausible.io ## /llms.txt - **Missing** (HTTP 404). - /llms-full.txt: not found (optional) ## AI crawler access (robots.txt, site root) - robots.txt: found; Sitemap line: yes | crawler | access to / | |---|---| | GPTBot | allowed | | OAI-SearchBot | allowed | | ChatGPT-User | allowed | | ClaudeBot | allowed | | Claude-SearchBot | allowed | | PerplexityBot | allowed | | Google-Extended | allowed | | CCBot | allowed | ## Verdict - Publish `/llms.txt`: an H1 with your site name, a `>` one-line summary, then `##` sections listing your 10-20 most useful pages as `- [Title](url): one-line description`. - Note: AI search crawlers rarely fetch llms.txt today; coding agents do. Crawler access in robots.txt matters more for AI search.
Need it at scale or inside a workflow? Apify actor: AEO & AI Visibility Audit: LLM SEO, GEO + llms.txt Checker · full skill on Agensi: Ship llms.txt + Unlock AI Crawlers: Access Fix Pack
Give one web page a quick 0-100 AI search visibility (GEO/AEO readiness) score from its server-rendered HTML - AI crawler access, Organization/WebSite JSON-LD, structured data, title/meta, question headings, answer-first opening, llms.txt and freshness - with the top 5 fixes. Use when the user asks if a page is ready for ChatGPT, Perplexity, Google AI Overviews or other AI search, or wants a GEO/AEO score.
npx skills add cygnixlabs-cmd/cygnix-seo-skills --skill ai-visibility-quick-score
Real output from skills/ai-visibility-quick-score/scripts/quick_score.py https://plausible.io/ on the live site on 23 October 2026:
# AI visibility quick score: https://plausible.io/ **72/100 (GOOD)**, one page, server HTML only. | check | points | |---|---| | AI crawler access (robots.txt) | 25/25 | | Organization / WebSite entity (JSON-LD) | 15/15 | | Other structured data | 0/10 | | Title + meta description | 7/10 | | One H1 + question-style headings | 15/15 | | Answer-first opening + server-rendered text | 10/15 | | /llms.txt | 0/5 | | Freshness date signal | 0/5 | ## Top fixes 1. Add JSON-LD that matches the page (Article, Product, FAQPage, BreadcrumbList…) 2. Open with a 15-80 word direct answer (first real paragraph is 12 words) 3. Publish /llms.txt listing your 10-20 key pages (cheap; coding agents read it) 4. Show a visible Updated date and add dateModified in JSON-LD 5. Title should be 15-65 chars (now 75) AI crawlers: GPTBot ok, OAI-SearchBot ok, ChatGPT-User ok, ClaudeBot ok, Claude-SearchBot ok, PerplexityBot ok, Google-Extended ok, CCBot ok JSON-LD types: WebSite This measures readiness (can AI crawlers fetch, parse and trust this page), not rankings or citations.
Need it at scale or inside a workflow? Apify actor: Website SEO Audit & Site Audit Crawler: Technical SEO + AEO/GEO · full skill on Agensi: AI Search Visibility Suite: 0-100 GEO Score + Report
The full versions (more checks, report templates, fix plans) are sold on Agensi and are searchable from Claude and ChatGPT through the Agensi MCP connector.
Updated 23 October 2026. Built by Cygnix Labs. Prices and free tiers are read from the public Apify Store API on the date above; check the listing for the current price. llms.txt