NotFair Plugin is a collection of open-source SEO, generative-engine-optimization, and marketing workflows that AI agents can follow. It helps agents audit websites, analyze search and advertising data, plan campaigns, and make reviewable marketing changes; the catalogue entries are its skills, instructions, MCP connection, and plugin.
Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add skills/nowork-studio/notfair-plugin/seo-analysisnpx skills add nowork-studio/notfair-plugin --skill seo-analysisgit clone --depth 1 https://github.com/nowork-studio/notfair-pluginWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/nowork-studio/notfair-plugin/seo-analysis)<a href="https://agentmods.dev/skills/nowork-studio/notfair-plugin/seo-analysis"><img src="https://agentmods.dev/badge/skills/nowork-studio/notfair-plugin/seo-analysis.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00297 | $0.14324 |
| Opus 5 | $0.00148 | $0.07162 |
| Sonnet 5 | $0.00059 | $0.02865 |
| Haiku 4.5 | $0.00030 | $0.01432 |
Grade B, and why
seo-analysis scanned grade B with 3 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 5d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Reads agent configuration directorieslowAgent snooping
.claude/, .codex/, .gemini/ hold keys, settings and other credentials a mod has no legitimate need for.
CONTENT_REF=$(find ~/.claude/plugins ~/.claude/skills ~/.codex/skills .agents/skills -name "content-writing.md" -path "*content-writer*" 2>/dev/null | head -1) Downgraded: this mod is about security review, or the phrase is quoted, so it is likely naming the pattern rather than instructing it.
Enumerates other installed skillslowAgent snooping
Other skills' SKILL.md files reveal prompts, capabilities and secrets that should be invisible to peers.
CONTENT_REF=$(find ~/.claude/plugins ~/.claude/skills ~/.codex/skills .agents/skills -name "content-writing.md" -path "*content-writer*" 2>/dev/null | head -1) Downgraded: this mod is about security review, or the phrase is quoted, so it is likely naming the pattern rather than instructing it.
Makes network callslowCapability
Not a fault in itself. Listed so you know the mod talks to something, and to what.
DOMAIN=$(python3 -c "import sys; from urllib.parse import urlparse; print(urlparse(sys.argv[1]).netloc.lstrip('www.'))" "$TARGET_URL") How it starts
The opening of the file, as written. The whole thing — 1,353 lines — stays where its author put it; the contents beside it link to each section on GitHub.
SEO Analysis
You are a senior technical SEO consultant. You combine real Google Search Console data with deep knowledge of how search engines rank pages to find problems, surface opportunities, and produce specific, actionable recommendations.
Your goal is not to produce a generic report. It is to find the 3-5 changes that will have the biggest impact on this specific site's organic traffic, and explain exactly how to make them.
Works on any site. Works whether you are inside a website repo or auditing a URL cold.
Step 0 — Establish the Website URL
Before doing anything else, check for previously audited sites:
ls ~/.toprank/business-context/*.json 2>/dev/null | xargs -I{} python3 -c "
import json, sys
from datetime import datetime, timezone
try:
d = json.load(open(sys.argv[1]))
gen = datetime.fromisoformat(d.get('generated_at', '1970-01-01T00:00:00+00:00'))
age = (datetime.now(timezone.utc) - gen.astimezone(timezone.utc)).days
print(f\"{d.get('target_url', d.get('domain','?'))} (audited {age}d ago)\")
except: pass
" {}
If one or more cached sites are listed, show them and ask:
"I've audited these sites before — use one, or enter a different URL:
- https://example.com (audited 12 days ago)
- Enter a different URL"
If the user picks a cached site, load target_url from that domain's ~/.toprank/business-context/<domain>.json and set it as $TARGET_URL. Skip to Phase 0.
If no cached sites exist, ask the user:
"What is the main URL of the website you want to audit? (e.g. https://yoursite.com)"
Wait for their answer. Store this as $TARGET_URL — it is needed for the entire audit: URL Inspection API calls, technical crawl, metadata fetching, and matching against GSC properties.
Once you have the URL, also attempt to auto-detect it from the repo to confirm or catch mismatches:
package.json→"homepage"field or scripts with domain hintsnext.config.js/next.config.ts→env.NEXT_PUBLIC_SITE_URLorbasePathastro.config.*→site:fieldgatsby-config.js→siteMetadata.siteUrlhugo.toml/hugo.yaml→baseURL_config.yml(Jekyll) →urlfield.envor.env.local→NEXT_PUBLIC_SITE_URL,SITE_URL,PUBLIC_URLvercel.json→ deployment aliasesCNAMEfile (GitHub Pages)
What ships with it
21 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
- evals/evals.json 9.7 KB
- references/gsc_setup.md 6.5 KB
- scripts/_gcloud.py 939 B runs code
- scripts/_uid.py 2.9 KB runs code
- scripts/analyze_gsc.py 27 KB runs code
- scripts/cms_detect.py 2.1 KB runs code
- scripts/fetch_contentful_content.py 14 KB runs code
- scripts/fetch_ghost_content.py 14 KB runs code
- scripts/fetch_strapi_content.py 16 KB runs code
- scripts/fetch_wordpress_content.py 14 KB runs code
- scripts/list_gsc_sites.py 3.8 KB runs code
- scripts/pagespeed.py 12 KB runs code
- scripts/preflight_contentful.py 7.6 KB runs code
- scripts/preflight_ghost.py 8.2 KB runs code
- scripts/preflight_strapi.py 11 KB runs code
- scripts/preflight_wordpress.py 10 KB runs code
- scripts/preflight.py 17 KB runs code
- scripts/push_strapi_seo.py 18 KB runs code
- scripts/show_gsc.py 5.2 KB runs code
- scripts/show_pagespeed.py 7.4 KB runs code
- scripts/url_inspection.py 14 KB runs code
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 5d ago First seen · 1,353 lines · 297 tokens per session scan B 6ef290a5c766
seo-analysis is a skill published in the GitHub repository nowork-studio/notfair-plugin (3,451 stars, last pushed 7d ago), licensed MIT. It adds 297 tokens to every session and 14,324 once invoked, about $0.0015 per session on Opus 5. A static security scan graded it B with 3 findings (reads agent configuration directories, enumerates other installed skills, makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
octowiz-doctowiz
The Octowiz doctor — diagnose, monitor, and fix the full octowiz + AELLI integration. Use whenever octowiz or AELLI isn't behaving correctly, a hook isn't firing, an advisory isn't returning, or you want a real-time activity feed. Also guides first-time setup, configuration from scratch, and upgrading from older…
setup
Setup orchestrator for the Octowiz Bridge. Re-runs the live environment check, builds a gap list, and runs only the phases needed: plugins, memory, repo, verify. Invoked automatically by octowiz:octowiz when hard gaps are detected.
octowiz
Octowiz AI coding workflow coordinator. Reads IntegraHub memory doctrine at runtime, detects where you are in the development lifecycle, and routes to the right skill combination from superpowers + mattpocock-skills. Use this skill at the START of any development work — whether you have a fresh idea, an existing plan…
build-user-persona
Build evidence-backed user personas from research inputs. Creates structured persona documents grounded in evidence, with each attribute clearly labeled as research-validated or inferred. Use this skill when you need personas for an FR, strategy doc, or design brief. Trigger on: "build a persona", "create user…
competitive-analysis
Structure a competitive landscape analysis — player profiles, capability comparison matrix, whitespace opportunities, and strategic implications. Use this skill when entering a new market, refreshing strategy, or preparing for a planning cycle. Trigger on: "do a competitive analysis", "who are our competitors"…
write-feature-request
Guided Feature Request (FR) authoring. Assists the user in writing a high-quality FR by collecting structured inputs (problem, solution, outcomes, requirements), then auto-generates Acceptance Criteria for every requirement. If any AC cannot be written due to missing information, the skill identifies the gaps and…