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 skills add Hainrixz/claude-seo-ai --skill seo-fix-applygit clone --depth 1 https://github.com/Hainrixz/claude-seo-aiWrote 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/hainrixz/claude-seo-ai/seo-fix-apply)<a href="https://agentmods.dev/skills/hainrixz/claude-seo-ai/seo-fix-apply"><img src="https://agentmods.dev/badge/skills/hainrixz/claude-seo-ai/seo-fix-apply/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/hainrixz/claude-seo-ai/seo-fix-apply"><img src="https://agentmods.dev/badge/skills/hainrixz/claude-seo-ai/seo-fix-apply.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector warn
SkillSpector: 1 finding, up to high
These are SkillSpector’s own severities. On a checked sample its high-severity flags on skills were ~96% false positives — a documented command, a public API, a “never do X” rule — so we show them as a caution to read, not a verdict. Why →
- high Prompt Injection · line 13 Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.Fix: Audit all comments and invisible characters. Remove any instructions that direct the agent to perform unauthorized actions. Use plain, reviewable content.
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.00091 | $0.01843 |
| Opus 5 | $0.00046 | $0.00922 |
| Sonnet 5 | $0.00018 | $0.00369 |
| Haiku 4.5 | $0.00009 | $0.00184 |
Grade A, and why
seo-fix-apply scanned grade A with 1 finding 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 4d 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.
Makes network callslowCapability
Not a fault in itself. Listed so you know the mod talks to something, and to what.
route around. **Never** emulate an adapter with ad-hoc `curl`, `wp`, or `shopify` commands — the How it starts
The opening of the file, as written. The whole thing — 96 lines — stays where its author put it; the contents beside it link to each section on GitHub.
seo-fix-apply (writer protocol)
This file is the authoritative protocol; agents/seo-fixer-writer.md carries the in-context
summary — keep the two in sync. Edit, Write and Bash are deliberately not pre-approved here:
Claude Code's native diff and command prompts must reach the user for every write, and the
guard-write / guard-bash hooks run on top of them.
You apply what was already confirmed. You do not decide what to fix, you do not improve a diff you were given, and you never widen the change set.
Inputs
The fix command dispatches you with a JSON envelope:
| key | meaning |
|---|---|
RUN_DIR |
<DATA>/fix/runs/<id>/ — plan.json, manifest.json (with confirmed[]), preview/, before/, after/, log.ndjson |
SCRIPTS_DIR |
absolute <plugin_root>/scripts/. Run scripts as node "<SCRIPTS_DIR>/<x>.mjs" … with the literal path — never a ${...} token, never a relative scripts/ path |
DATA |
plugin data root. Backups live here, never in the user's project |
PROJECT_ROOT |
the user's project (local targets only) |
confirmed_change_ids[] |
the ONLY change ids you may apply |
tickets |
{ <change_id>: <ticket id or the exact command> } — one-shot, 15-minute, issued after the user confirmed |
publish |
false by default; true only after a second confirmation, and it carries its own ticket |
force |
allows writing into a dirty git tree |
return |
"JSON array of findings only" |
Read plan.json for the Change records. A change you were not given an id for does not get applied,
previewed again, or "helpfully" included.
Protocol (per confirmed change, in order)
- Git pre-flight.
git status --porcelaininPROJECT_ROOT. Dirty tree and noforce: true⇒ do not write: return the finding with its pre-fixstatusandskipped_dirty_treeinevidence.observed. Neverstash,checkoutorreset— the user's uncommitted work is theirs. - Backup before the first write. Local files: copy to
<DATA>/backups/<run-id>/<relative path>(the adapter'sapplydoes this itself; when you write with Edit/Write, do it yourself withmkdir -p+cpbefore the first edit of that file). Remote resources: the adapter writesbefore/<change_id>.json. Record nothing in the project. - Local diffs — Edit/Write, not the adapter. For
target.kind: filechanges whose strategy is AUTO (html-head,front-matter,config-file,liquid), apply the previewed diff with Edit (or Write for a new file) so the native diff prompt andguard-writeengage. Apply exactly the preview: same insertion point, same text, no reformatting, no extra content,TODO:<field>placeholders preserved verbatim. A JSX/TSX or other non-AUTO strategy arrives asskipped_unreadyfrom the adapter and is yours to apply by hand — still exactly as previewed. - Remote targets — the adapter CLI, with its ticket. Anything whose
target.kindis notfilegoes throughnode "<SCRIPTS_DIR>/adapters/<adapter>.mjs" apply --run "<RUN_DIR>" --change <id> --ticket <ticket> --data "<DATA>" --json. The ticket is required and one-shot; a missing or expired one is a real failure, not something to route around. Never emulate an adapter with ad-hoccurl,wp, orshopifycommands — theguard-bashhook blocks them and it is right to. If no adapter exists for that target, keep the finding's pre-fixstatuswithskipped_unreadyplus the manual path frompreview/. - Idempotent. If the change is already present (the JSON-LD block, the marker comment, the
field's value), make no edit: report
status: passwithskipped_idempotentinevidence.observed. Re-running must never duplicate or corrupt content. - Re-verify. Run
verify --run "<RUN_DIR>" --change <id>and the finding'sverification.reproduceverbatim. Record the assertion's pass/fail. A stale CDN or page cache ispending_cacheinevidence.observedwithstatus: warn— never a claimedpass. A local framework target with no dev server is a source-level pass: say "source verified, re-audit after deploy" rather than claiming the live page changed. - Publish — only with
publish: trueand its own ticket. Publishing is what makes staged work public (shopify theme publish, a Webflow site publish, a HubSpot draft push-live). It is a separate op with a separate confirmation and a separate ticket:node "<SCRIPTS_DIR>/adapters/<adapter>.mjs" publish --run "<RUN_DIR>" --ticket <publish ticket> --data "<DATA>". Without both, leave the change staged and say so in the finding. Never pass--allow-live,--liveor-ato the Shopify CLI: that path is blocked and publishing has its own op. - Log. One NDJSON line per change in
<RUN_DIR>/log.ndjson(change id, files or resource, result). Redact anything credential-shaped; the adapters' own logging already does. - On failure, stop widening. A failed change is reported as
failwith the error text; do not retry with a different method, a different file, or a broader edit. Rollback isrollback --run "<RUN_DIR>" --change <id>and it needs its own ticket.
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.
- 4d ago Changed · +64 lines · +4 tokens per session 48823e709af3
- 5d ago First seen · 32 lines · 87 tokens per session scan A f266b1f36faa
seo-fix-apply is a skill published in the GitHub repository Hainrixz/claude-seo-ai (59 stars, last pushed 4d ago), licensed MIT. It adds 91 tokens to every session and 1,843 once invoked, about $0.0005 per session on Opus 5. A static security scan graded it A with 1 finding (makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-06.
Other skills, from other repositories
linkedin-post
Draft a daily LinkedIn post for S M Moshiur Rahman about business development, grounded in a real problem he hit that day and real numbers from OmniRank. Use when he says "linkedin post", "today's post", "draft a post", or describes friction he wants written up.
audit
Use when asked to audit a site's SEO, check AEO or answer-engine readiness, diagnose why a page is not ranking or not being cited by AI, verify structured data, or run pre-deploy discoverability checks on built HTML.
geo-artifacts
Use when asked to generate or fix llms.txt, llms-full.txt or facts.json, make a site citable or ingestible by ChatGPT, Claude, Perplexity or Gemini, or publish machine-readable ground truth for AI crawlers.
web-optimization
Audit or generate web content optimized for traditional search (SEO), AI generative answer engines like ChatGPT/Perplexity/Google AI Overviews (GEO), and answer engines / featured snippets / voice (AEO). Use when the user asks to improve a page's ranking or AI-citability, run an SEO/GEO/AEO audit of a URL or file, add…
fire-your-seo-agency
A procedure for improving how a website appears in search engines and how AI answer systems find and cite it. It covers search, answer-engine, generative-AI, and Naver visibility.
ansvisor-aeo-coach-standalone
Standalone (no-MCP) version of the Ansvisor AEO Coach. Use this only when the user's Claude client cannot connect to the Ansvisor MCP server (e.g. claude.ai web without a Connector configured). Fetches live data from the Ansvisor REST API directly with the user's API key via code execution. For clients that support…