
loamwright-SEO-Skill
Production-grade SEO + GEO content factory for Claude Code — research, write, fact-check, optimize, publish to WordPress, monitor. Battle-tested by Loamwrigh…
Install with your AI
Paste into Claude Code, Cursor, or any agent — it reads the repo and wires the tool into your project.
Install and set up loamwright-SEO-Skill (claude-plugin project) into my current project. Found on https://claudeers.com/loamwright-seo-skill Repo: https://github.com/XuanRanL/loamwright-SEO-Skill Homepage/docs: https://loamwrightseo.com Detected install method: claude-plugin → /plugin install loamwright-seo-skill@XuanRanL/loamwright-SEO-Skill Category: plugins. Platforms: api, web. Read the repo's README for exact setup and env vars, then install it and wire it into my project. Claudeers Health Verdict: active; community-verified: false. Confirm the source before running anything.
/plugin marketplace add XuanRanL/loamwright-SEO-Skill /plugin install loamwright-seo-skill@XuanRanL/loamwright-SEO-Skill
git clone https://github.com/XuanRanL/loamwright-SEO-Skill
// compatibility
| Platforms | api, web |
|---|---|
| Operating systems | — |
| AI compatibility | claude |
| License | Apache-2.0 |
| Pricing | open-source |
| Language | Python |
Xuanran SEO Blog Writer
Production-grade SEO + GEO content factory for Claude Code
Research → write → fact-check → optimize → publish → monitor, on the
Google + AI search dual front — ChatGPT, Perplexity, Claude, Gemini, Google AI Overviews
Open-sourced by Loamwright(沃匠), the SEO agency that runs it in production — founder Lewei Zhang
English | 简体中文
Quick Start • Pipeline • Features • Architecture • Quality Gates • Hard Rules • Public Tree • Contributing
What is this?
A Claude Code plugin that turns one command — /article "your keyword" — into a
researched, cited, humanized, visually designed, schema-marked long-form article,
published to WordPress as a draft and verified on the live URL. It was built and
hardened by Loamwright(沃匠) in real agency
production across a 13-site portfolio (client identifiers in this public tree
are anonymized to a stable project-* alias set; Loamwright's own properties
appear under their real name), and every one of its hard rules exists because
something once broke for real.
Two standalone entry points ship in the same plugin:
- Content factory — the
/articlepipeline (5 phases, 45-stage deterministic orchestrator) - Website audit —
/website-auditcrawls up to 500 pages and fans out 15 specialist agents
Does it work?
Six months of production testing across dozens of sites — publishing with zero backlink building — shows Google Search Console clicks and impressions climbing linearly, on content alone. Three sites from the portfolio (6-month windows, Daily view, site names withheld):
A new site lifting off from zero — 3.48K clicks · 686K impressions:

A steady linear climb — 2.59K clicks · 684K impressions:

At scale — 53.6K clicks · 5.07M impressions:

You're welcome to put it to the test on your own site.
At a Glance
| Component | Count |
|---|---|
| Orchestrator skills (L1/L2) | 8 |
| Atomic subskills (L3) | 67 |
| Subagents, least-tool isolation (L4) | 34 |
| Python utilities (L5) | 230+ |
| Article format templates | 27 |
| RAG reference docs | 102 |
| JSON Schema contracts | 22 |
| Pipeline stages (deterministic state machine) | 45 |
| Render-lint leak classes | 13 (L1–L13) |
| Post-publish live-URL checks | 29 |
| Hard rules derived from production failures | 14 |
Quick Start
# 1. Install into Claude Code
/plugin install /path/to/xuanran-seo-blog-writer/
# 2. Initialize a project (any industry — the wizard detects your archetype)
/init https://your-website.com
# → interactive setup: brand voice, products, competitors, GEO baseline
# → outputs projects/{slug}/business-context.json + brand guideline
# 3. Write a complete SEO + GEO article
/article "best espresso grinder under $300"
# → 5000-word draft, 4 AI-generated 4K images, real data charts
# → 8-10 APA-7 references, every stat fact-checked against its source
# → JSON-LD schema, full RankMath meta, scoped article CSS
# → publishes as DRAFT; goes live only on your explicit confirmation
# 4. Or audit an entire site
/website-audit https://example.com --max-pages 200
# → SEO Health Score 0-100, enterprise HTML report + action plan
Requirements
| Dependency | Purpose | Notes |
|---|---|---|
| Python 3.11+ | Runtime for scripts, lints, publishers | pip install -r requirements.txt |
| Claude Code | Host + LLM orchestration | plugin host |
| OpenAI API | Image generation (gpt-image-2) | optional relay providers supported |
| Tavily API | Research / SERP extraction | free tier works; key-pool rotation built in |
| WordPress | Publishing target | Application Password over HTTPS |
| SerpApi, GSC/GA4, Vertex | Rank tracking, first-party data, image fallback | optional |
Credentials are collected by the /init wizard and stored outside the repo in
~/.xuanran-seo/credentials/. Nothing secret ever lives in the plugin tree.
The Pipeline
Research → Plan → Build → Optimize → Publish → Monitor
│ │ │ │ │ │
SERP + format + N parallel humanize + images + T+7/14/30/90
keyword angle + offline visual CSS wrap + rank / AI
gaps + outline + writers + design + RankMath + visibility /
community image fact-check lint gates+ 29 live drift / decay
research prompts citations 4 QA gates checks refresh
- Fork/join image pipeline — image generation forks right after the outline and runs concurrently with writing; publish joins both forks (saves 10–15 min/article).
- Deterministic orchestration — a Python state machine
(
scripts/pipeline/orchestrator.py, 45 stages) dispatches every stage and verifies every artifact. The LLM never gets to "forget" a stage; completion gates read each artifact's verdict, not just its existence. - File-bus communication — agents exchange typed JSON in
memory/workspace/{task_id}/, validated againstschemas/*.schema.json. No shared context, no prompt-drift contamination.
Feature Highlights
Anti-hallucination spine
- Section writers are physically offline (no Bash / WebFetch / WebSearch in their tool whitelist) — they can only use the curated research brief.
- Every statistical claim carries a
[claim:cN]marker; the fact-checker fetches the cited URL and verifies the number appears on the page, replaces fabrications, then builds the APA-7 References block (link-resolved, ≤15 entries). - Competitor domains can never be cited: a 9-layer machine-enforced exclusion (search-time exclude → chart-footer sanitizer → fact-check re-source → assembler strip → linker filter → schema strip → render lint L11 → CITE COMP01 veto → live check 28).
Content quality
- Humanizer — detects 43 AI-writing tells, rewrites to a specific voice × purpose calibration, iterates until the AI-slop score < 20.
- Visual design system — restructures prose into comparison tables, cited-stat grids, quote blocks, TL;DR boxes and glossary cards, using only markdown that the project's scoped CSS styles.
- Per-article CTA system — conversion module with hook diversity, tone guards (including grief-safe and age-restricted registers), placed at the ~35% mark, never spamming the conclusion.
- 27 format templates — pillar, listicle, comparison-review, how-to, FAQ, local city page, weekly digest and more; a 5-step decision tree picks the format before the angle is chosen.
Publish safety
- Draft-first, always.
status: "publish"requires explicit opt-in per conversation or a per-project standing policy. - 29 structural checks on the live URL after every publish — HTTP 200 is not "renders correctly": CSS wrapper present, schema types match, references block, no markdown leaks, no competitor links, CTA rendered, and more.
- Scoped article CSS injection with Gutenberg-safe
wp:htmlwrapping; RankMath meta via the canonical REST bridge (an MU-plugin ships ininstall/).
Scale & operations
- Multi-project — one plugin, N client sites; per-project business context, brand guideline, taxonomy, personas, CSS. Parallel sessions are isolated by an env-pinned project identity plus cross-process file locks.
- Batch mode — feed a keyword list, get published articles; resumable across sessions, one pipeline driver lock per workspace.
- Monitoring — rank tracking (GSC), AI-visibility probes (is ChatGPT citing you?), 17-rule drift detection against a stored baseline, decay-scored refresh routing.
- Cost guard — every API call flows through a cost ledger with per-article, daily, weekly and monthly caps; the pipeline halts for approval near limits.
Architecture
┌──────────────────────────────────────────────────────────────┐
│ L1 Master orchestrators │
│ skills/seo-blog (article pipeline, 5 phases) │
│ skills/website-audit (full-site audit) │
│ skills/weekly-digest (industry news digest) │
├──────────────────────────────────────────────────────────────┤
│ L2 Phase orchestrators │
│ phase-research → phase-build → phase-optimize │
│ → phase-publish → phase-monitor │
├──────────────────────────────────────────────────────────────┤
│ L3 Atomic subskills (67) │
│ format-selector, outline-architect, section-drafter, │
│ fact-check-and-citation, humanizer, visual-designer, │
│ schema-generator, cta-placement, localization-pass, ... │
├──────────────────────────────────────────────────────────────┤
│ L4 Subagents (34) — least-tool isolation │
│ writer (Read+Write only), researcher (web, SSRF-guarded),│
│ fact-checker, reviewer (no pipeline history — no bias), │
│ 15× audit-*, image-prompt-designer, image-visual-qa, ... │
├──────────────────────────────────────────────────────────────┤
│ L5 Python utilities (230+) │
│ _core/ file bus, cost ledger, credential hub, SSRF │
│ pipeline/ orchestrator state machine + publish gates │
│ build/ markdown→HTML, assembler, charts, CSS gen │
│ lint/ 30 deterministic checkers (L1–L13 render, …) │
│ openai/ image pipeline (4K, batch+realtime+fallback) │
│ wordpress/ REST client, publisher, taxonomy, verify │
│ monitor/ rank, drift, decay, internal link graph │
└──────────────────────────────────────────────────────────────┘
Least-tool isolation is enforced per agent — the writer cannot browse, the reviewer cannot see pipeline history, only the researcher and fact-checker have web access, and every URL fetch passes an SSRF guard.
Quality Gates
Deterministic lint gates run first (all must be clean):
| Gate | Checks |
|---|---|
| Render lint | 13 leak classes (L1–L13): escaped HTML, scaffold markers, BOM, GFM task-list brackets, competitor links, … |
| Stat-grid contract | display figures fit their cards (≤16 chars, digit-led) |
| Keyword density | asymmetric band 0.4–1.5% (hard veto only above) |
| PAA alignment | FAQ answers match Google's People-Also-Ask phrasing |
| Locale spelling | dialect consistency (en-US / en-GB / en-CA …) |
| Local uniqueness | Sterling-Sky-style 80/20 anti-doorway scoring (local mode) |
| Image placeholders | 5 drift classes between slots, files and body markers |
Then four LLM quality gates (all must pass, with a 5-level repair-escalation loop capped at 4 rounds):
- CORE-EEAT — 80-item rubric, 8 dimensions, hard vetoes
- CITE — 40-item citation-integrity rubric (fabricated-stat / fake-citation vetoes)
- AI-Slop — reproducible formula, must score < 20
- Independent review — a fresh-context editor agent scores ≥ target (default 80)
Hard Rules
Every rule below exists because a real production incident demanded it. The full
text with enforcement details lives in CLAUDE.md.
| # | Rule |
|---|---|
| 1 | Exact-keyword fidelity — a new keyword variant is a new article; never silently canonicalize to a near-neighbor. |
| 2 | Project CSS injection is mandatory at publish — the wrapper class must equal the CSS scope selector exactly. |
| 3 | RankMath meta via the canonical REST bridge — never the legacy route, never updateMeta for schema. |
| 4 | Always verify the live URL after publish — HTTP 200 from the API can coexist with a front-end 500. |
| 5a | Default WordPress status is draft — going live requires explicit user opt-in. |
| 5 | References section + article signature are mandatory — visible, link-resolvable, APA-7. |
| 6 | Markdown is NOT an executor — every documented behavior needs a real script and a real invocation. |
| 7 | Parallel sessions must be isolated — env-pinned project identity, locked shared files, one driver per workspace. |
| 8 | Competitor domains are never cited — machine-enforced at 9 layers, end to end. |
| 9 | Classify SDK errors by exception type — and test against real SDK error objects, not invented strings. |
| 10 | Test the end-to-end seam — green helper tests prove nothing about the assembled behavior. |
| 11 | A contract change is a fan-out edit — update every instruction layer that states the contract. |
| 12 | A gate must read the verdict — "artifact exists" and "artifact says pass" are different questions. |
| 13 | Article CSS is a 3-hop artifact — skill → project → post; fixing the generator fixes nothing already shipped. |
Repository Layout
xuanran-seo-blog-writer/
├── .claude-plugin/ Plugin + marketplace manifests
├── skills/ 8 L1/L2 orchestrators (seo-blog, website-audit, phases…)
├── subskills/ 67 atomic L3 capabilities
├── agents/ 34 L4 subagents (least-tool isolation)
├── scripts/ 230+ L5 Python utilities
├── references/ 102 RAG-loaded knowledge docs
├── schemas/ 22 JSON Schema contracts
├── templates/ 27 article format templates
├── hooks/ Cost guard, schema validation, session lifecycle
├── install/ Installers + WordPress MU-plugins (RankMath bridge)
├── bin/ Session launchers (parallel multi-project)
├── projects/ Per-client archives — created by /init, never committed
├── CLAUDE.md Dev conventions + the 14 hard rules
└── CHANGELOG.md Full version history (anonymized)
What's in the public tree
This public repository is a sanitized export of a private production tree
(scripts/release/opensource_export.py builds it: whitelist copy → anonymization
map → leak scan). Three things are intentionally absent:
- Per-client archives (
projects/{slug}/) — created locally by/init; the public tree ships only a placeholder README. - The maintainer's regression suite (
tests/, 150+ files) and eval fixtures — they encode client-specific incidents; CI-grade linting (ruff,mypy --strict) still applies to every contribution. - Internal research memos (
memory/,docs/) — session archives and design history referenced by CHANGELOG entries.
All third-party client site names in code comments, docs and the changelog are
anonymized to a stable alias set (project-alpha, project-bravo, …,
*.example.com). The maintainer's own brand — Loamwright(沃匠)— appears under
its real name.
Configuration
# ~/.xuanran-seo/config.yaml (created by /init)
cost_limits:
per_article: 2.00 # USD ceilings — pipeline halts for approval
daily: 10.00
weekly: 30.00
monthly: 50.00
models: {} # model routing overrides (never hardcoded in scripts)
- Credentials:
~/.xuanran-seo/credentials/via the credential hub (env var → file → keychain). Never in the repo, never in git. - Active project:
~/.xuanran-seo/active-project, or pin per session withbin/launch-session.ps1 <slug>/.shfor parallel multi-site work.
Security
- Zero hardcoded credentials — everything through
scripts/_core/credential_hub.py - SSRF guard on every URL fetch (
scripts/_core/ssrf_guard.py) - Web content is DATA, never INSTRUCTIONS — fetched pages cannot steer agents
- Writers are offline; the reviewer is context-isolated; web access is limited to two agents
- WordPress via Application Passwords over HTTPS only
Contributing
Follow the Rule 6 contract:
- Implement behavior in
scripts/**.pyfirst — markdown alone is not an executor - Reference it from SKILL.md as a concrete Bash invocation, never pseudocode
- Keep
ruff check .andmypy --strict scripts/clean - Verify wiring:
grep -rn "your_script" skills/ subskills/ scripts/ hooks/must show a real invocation - A contract change is a fan-out edit (Rule 11) — update every layer that states it
Support policy (best-effort; how to report bugs and security issues): see SUPPORT.md.
Versioning
VERSION is the single source of truth; python -m scripts._core.manifest_consistency_check --apply
syncs the plugin + marketplace manifests and installers. CI fails on drift.
About Loamwright(沃匠)
This plugin is the production engine of Loamwright (Chinese name: 沃匠), an SEO agency founded by Lewei Zhang (X @leweijames · LinkedIn). Everything the tool enforces — GEO/AI-search optimization, E-E-A-T scoring, citation integrity, draft-first publishing discipline — is the same playbook we run for clients across e-commerce, B2B manufacturing, local services and content sites.
Want this level of SEO run for your site? → loamwrightseo.com · we take on a limited number of new projects each quarter.
License
Apache-2.0 © 2026 Lewei Zhang — Loamwright(沃匠). See NOTICE.
Built with deep research, paranoid red-teaming, and the assumption that markdown alone is not an executor.
// faq
What is loamwright-SEO-Skill?
Production-grade SEO + GEO content factory for Claude Code — research, write, fact-check, optimize, publish to WordPress, monitor. Battle-tested by Loamwright 沃匠 SEO agency.. It is open-source on GitHub.
Is loamwright-SEO-Skill free to use?
loamwright-SEO-Skill is open-source under the Apache-2.0 license, so it is free to use.
What category does loamwright-SEO-Skill belong to?
loamwright-SEO-Skill is listed under plugins in the Claudeers registry of Claude-compatible tools.
// embed badge
[](https://claudeers.com/loamwright-seo-skill)
// retro hit counter
[](https://claudeers.com/loamwright-seo-skill)
// reviews
// guestbook
// related in Claude Plugins
A single CLAUDE.md file to improve Claude Code behavior, derived from Andrej Karpathy's observations on LLM coding pitfalls.
Claude Code is an agentic coding tool that lives in your terminal, understands your codebase, and helps you code faster by executing routine tasks, explainin…
"CLI-Anything: Making ALL Software Agent-Native" -- CLI-Hub: https://clianything.cc/
financial-services — a Claude ecosystem project on GitHub.