By alexfilatov
Profile-driven agentic SEO content-creation suite: keyword research → topic/title planning → article writing. Project-agnostic; everything project-specific lives in seo/profile.json.
Foundation step. Scaffolds a project's SEO profile (seo/profile.json) + data dirs by inferring from the repo and interviewing the user. Re-runnable for edits. Usage /seo-init
Phase 1 — keyword research for the current project. Runs the fetchers, consolidation, clustering, intent classification, and scoring. Output to seo/reports/keywords.<YYYY-MM-DD>.json.
Phase 2 orchestrator — from scored keywords to a publication schedule. Chains seo-rubric-proposer → human gate → seo-title-proposer → human gate → seo-roadmap-builder.
Phase 3 orchestrator — AUTONOMOUS pipeline from a roadmap slug to a finished content artifact (body.md + meta.json). Profile-driven; toggled fact-check/legal/cover. Publishing is out of scope. Usage /seo-write-article <slug> [--interactive]
Step 1/9 of SEO Phase 3. Generates a brief for a specific article (slug), driven entirely by the project profile. Reads the latest roadmap + topics + keywords reports plus the profile. Output: <articlesDir>/<slug>/brief.md. First step of the writing pipeline.
SEO Phase 3 step. Runs ONLY when cover.enabled is true — otherwise exits SKIPPED. Generates ONE cover image automatically (OpenAI gpt-image-1), converts it to cover.webp in the article dir, and records the prompt into meta.json (cover.prompt). Project-agnostic; style hints from cover.style. Graceful skip when OPENAI_API_KEY is absent.
SEO Phase 3 step. Writes the full article draft from brief + outline + sources, in the project's language and voice. Output is body.md — pure article content, no framework front matter. Each hard fact carries an inline citation [^srcN]. Project-agnostic; reads seo/profile.json. Writes human-sounding prose (voice, burstiness, specifics) — not smooth AI filler.
Step 6/9 of SEO Phase 3 — fact-check gate. Extracts every hard fact / concrete claim from the draft and checks it against sources.json, driven by the project profile's contentRigor. In regulated mode it is a HARD gate (missing/off-whitelist citation = BLOCK); in standard mode it is a LIGHT gate (concrete claims need a named credible source; soft issues = WARN). Output: <articlesDir>/<slug>/fact-check.json.
SEO Phase 3 compliance gate. Runs ONLY when contentRigor === "regulated" AND regulated.legalReview is true — otherwise exits SKIPPED. Verifies the article carries the required disclaimer, grounds the expected key acts, and contains no forbidden product claims. Project-agnostic; all criteria come from the regulated.* block of seo/profile.json. Records its verdict into meta.json.
Scaffold a project's SEO profile (seo/profile.json) and data dirs by inferring from the repo and interviewing the user. Use when the user wants to "set up SEO", "initialize SEO suite", "create an SEO profile", "configure SEO for this project", or asks how to start using the SEO suite in a new project. Re-runnable for edits.
Run Phase 1 of the SEO suite — keyword research for the current project. Fetchers → consolidation → clustering → intent classification → scoring, producing seo/reports/keywords.<date>.json. Use when the user asks to "refresh keywords", "run keyword research", "rebuild the keyword report", "update SEO keywords", or starts Phase 1 of the SEO pipeline. Requires seo/profile.json (run seo-init first).
Run Phase 2 of the SEO suite — turn the scored keyword report into a publication schedule. Chains seo-rubric-proposer → human gate → seo-title-proposer → human gate → seo-roadmap-builder, producing seo/reports/roadmap.<date>.json. Use when the user asks to "plan SEO topics", "build the content roadmap", "propose pillars and spokes", "generate article titles", or starts Phase 2 of the SEO pipeline. Requires a Phase-1 keywords report (run seo-refresh first).
Run Phase 3 of the SEO suite — the AUTONOMOUS article-writing pipeline that takes a roadmap slug to a finished content artifact (body.md + meta.json). Profile-driven; toggled fact-check, legal review, and cover generation. Publishing is out of scope. Use when the user asks to "write an SEO article", "draft an article from the roadmap", "generate the article for slug X", "run Phase 3", or names a specific roadmap slug to write. Requires a Phase-2 roadmap (run seo-topics first). Accepts an optional --interactive flag to restore human gates.
Uses power tools
Uses Bash, Write, or Edit tools
Own this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimOwn this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimBased on adoption, maintenance, documentation, and repository signals. Not a security audit or endorsement.
A reusable, profile-driven Claude Code plugin — skills + slash commands + 15 specialized subagents + scripts for agentic SEO content creation, usable across any project. Everything project-specific lives in a per-project seo/profile.json; the suite itself is generic.
Scope: keyword research → topic/title planning → article writing. The pipeline ends at a finished content artifact (
body.md+meta.json). Publishing (writing to a database or via a platform MCP) is intentionally out of scope and handled separately.
Three options, in order of preference:
A. From the marketplace (recommended once published):
/plugin marketplace add alexfilatov/seo-suite
/plugin install seo-suite
B. Local symlink (for development or before the marketplace is public):
./install.sh # symlinks the repo into ~/.claude/plugins/seo-suite
./uninstall.sh
C. Legacy per-file symlinks (older Claude Code without the plugins feature):
./install.sh --legacy # symlinks agents+commands into ~/.claude, records suite path in ~/.seo-suite-home
Requires Node 18+ (Phase-1 scripts) and Python 3 (scoring). Optional API keys go in each project's .env: AHREFS_API_KEY, GSC_*, OPENAI_API_KEY (covers).
Four fetchers feed the keyword pipeline. Each one skips gracefully if its credentials are absent — you can start with just the free ones and add the others later.
| Fetcher | Free? | What it gives you | Setup |
|---|---|---|---|
suggest | ✅ | Google Suggest autocomplete from your seeds | nothing — works out of the box |
competitor | ✅ | Topic ideas from competitor sitemaps + page titles | list domains in keywords.competitors |
gsc | ✅ (free, needs site verification) | Your real impressions / clicks / CTR / position | see below |
ahrefs | 💰 (paid) | Volume + KD + intents at scale | set AHREFS_API_KEY in .env |
GSC is the highest-signal free source for an existing site — it's your real data — but it returns nothing for a brand-new domain that hasn't accumulated impressions yet. Worth wiring up as soon as the site has any traffic.
Two auth paths are supported. OAuth refresh-token is recommended for personal sites — GSC's "Add user" form is flaky with service accounts on sc-domain: properties (rejects with "email not found"). Service-account works when GSC accepts it, and is the right choice for shared/team setups.
Common prerequisite (both paths): in your Google Cloud project, enable the Search Console API at https://console.cloud.google.com/apis/library/searchconsole.googleapis.com.
GSC_OAUTH_CLIENT_ID='<paste>' \
GSC_OAUTH_CLIENT_SECRET='<paste>' \
node $SUITE/scripts/fetchers/gsc-bootstrap.mjs
A browser opens; sign in with the Google account that owns the GSC property; grant the read-only Search Console scope. The script prints three GSC_* lines..env, plus the site URL:
GSC_OAUTH_CLIENT_ID=...
GSC_OAUTH_CLIENT_SECRET=...
GSC_OAUTH_REFRESH_TOKEN=...
GSC_SITE_URL=sc-domain:example.com # or https://example.com/
~/.secrets/<project>-gsc-sa.json, chmod 600).client_email in the JSON). Permission: Restricted. Note: this step rejects some SA emails with "email not found" — if so, switch to Option A..env:
GSC_SERVICE_ACCOUNT_JSON=/absolute/path/to/key.json
GSC_SITE_URL=sc-domain:example.com
Optional tuning vars:
GSC_START_DATE=2024-01-01 # default: 90 days ago
GSC_END_DATE=2024-12-31 # default: today
GSC_ROW_LIMIT=5000 # default: 5000, max 25000
In seo/profile.json, enable the fetcher:
"fetchers": { "suggest": true, "competitor": true, "gsc": true, "ahrefs": false }
Next /seo-refresh will pull your real query data. If neither auth set is configured the fetcher writes an empty payload and the pipeline continues.
Either invoke the slash commands explicitly:
npx claudepluginhub alexfilatov/seo-suite --plugin seo-suiteComplete creative writing suite with 10 specialized agents covering the full writing process: research gathering, character development, story architecture, world-building, dialogue coaching, editing/review, outlining, content strategy, believability auditing, and prose style/voice analysis. Includes genre-specific guides, templates, and quality checklists.
Upstash Context7 MCP server for up-to-date documentation lookup. Pull version-specific documentation and code examples directly from source repositories into your LLM context.
Comprehensive startup business analysis with market sizing (TAM/SAM/SOM), financial modeling, team planning, and strategic research
v9.44.1 — Patch release for Gemini environment/version detection and qwen auth gating. Run /octo:setup.
Comprehensive .NET development skills for modern C#, ASP.NET, MAUI, Blazor, Aspire, EF Core, Native AOT, testing, security, performance optimization, CI/CD, and cloud-native applications
Comprehensive skill pack with 66 specialized skills for full-stack developers: 12 language experts (Python, TypeScript, Go, Rust, C++, Swift, Kotlin, C#, PHP, Java, SQL, JavaScript), 10 backend frameworks, 6 frontend/mobile, plus infrastructure, DevOps, security, and testing. Features progressive disclosure architecture for 50% faster loading.