SuperSEO Plugin Claude: Not the Merge Gate
superseo plugin claude installs a skill catalog. It does not fail a merge. Name the hook, then let CI read the retained JSON.
Author credentials: William Zhu is cofounder of InfiniSynapse (GitHub @allwefantasy · auto-coder). Desk: shipping SEO Health and the /en/tool/ visibility pages. No personal LinkedIn published. About: team / editorial standards.
Publisher credentials: InfiniSynapse has public profiles on GitHub, YouTube, and X. A 2026 WAIC Future Tech OPC excellence award covers the Agentic Data Infra entry (WAIC; third-party recap: Xinhua / Caohejing). That award does not review this page or SEO Health. Method CLI: infinitegrowth on npm. Archive: recognition and scope notes.

On this page
By William Zhu · Cofounder, InfiniSynapse · Published: 2026-09-09 · Last updated: 2026-10-02 · Last verified: 2026-09-14 · Reviewed by the InfiniSynapse Data Team.
Reviewed by: InfiniSynapse Data Team · method review 2026-09-14. First-party read of vendored
CLAUDE.mdplus localgate.mjsfixture exits.
Trust / COI: About · Corrections. SEO Health is a commercial product from this team. The skill counts below are a desk read of a vendored file, not a hosted Claude session and not a customer merge.
TL;DR
The vendored CLAUDE.md lists 21 skills, 17 commands, and bundle 9.9.5. It names no exit 1 or exit 2 contract. Claude Code SEO that treats that file as a merge gate is reading a catalog, not a parser.
Direct answer: superseo plugin claude installs a skill catalog. It does not fail a merge. Name the hook, then let CI read the retained JSON. Treat Claude Code SEO as repository guidance plus an optional hook. Chat text is not
issues[].status. A hook exit 2 can block a tool call. A later CI parser still has to exit 1 on a content red.
The sample size is one vendored CLAUDE.md plus local fixtures. That sample cannot establish that a hosted Claude session passed a page, and it does not prove a ranking outcome. A Claude Code SEO record that drops the package version is already unreplayable.
What you will learn
- What the vendored file actually lists
- Why 21 skills are not a merge contract
- How the wrong
npxargv fails before a fetch - Where hook exit 2 stops and CI exit 1 begins
- Where this Claude Code SEO page stops and the hub owns policy
What superseo plugin claude names
superseo plugin claude is the InhouseSEO skill pack published as the Claude Code plugin superseo@superseo-skills. The skills live in inhouseseo/superseo-skills. InhouseSEO’s write-up describes the same pack. This page does not host that plugin. The 2026-10-02 check read those two public pages. It did not install the plugin or run a skill.
Marketplace install and the vendored file
Claude Code’s plugin marketplace is how that pack is added, installed, and removed. These three lines are the vendor’s commands, quoted from the repository README and the public uninstall note retrieved 2026-10-02:
/plugin marketplace add inhouseseo/superseo-skills
/plugin install superseo@superseo-skills
/plugin uninstall superseo
The vendored CLAUDE.md in this repository is a different catalog. The 2026-09-14 read still stands: 21 skills, 17 commands, bundle 9.9.5, and no exit contract. Those counts are not the plugin’s skill list.
A skill run still needs a retained file
A plugin skill can fetch a URL and write an audit. Claude Code SEO still keeps the JSON, reads issues[].status, and lets CI exit 1 on a content red. A skill write-up is not that array.
What Claude Code SEO owns in this repo
Key definition: Claude Code SEO is repository guidance in CLAUDE.md plus a hook that can block an unsafe tool action. It does not certify rankings. It does not issue an official Google grade. Its useful output is a safer agent session, not a required check.
The Anthropic Claude Code hooks reference documents exit 2 as blocking on events that can block. That is a tool-call stop. It is not a schema for issues[].
People open Claude Code SEO when an agent is about to edit a page and the repository still needs a mechanical stop later. They do not need the chat to declare the pull request green.
If a signed-in owner later starts an InfiniSynapse Server API long-task workspace, SSE /api/ai/events is optional context, not the CLAUDE.md gate.
Chat guidance is not a merge vote
The observed CLI JSON still includes url, page, onPage, issues, images, keywords, speed, seoData, and cached. Rows expose name and status. The six first-party tool URLs showed good and warning only. Every CLI process exited 0 beside one warning. Claude Code SEO that quotes a chat verdict instead of that array is skipping the only assignable field.
Hook exit 2 is not CI exit 1
When the SuperSEO plugin is about to edit a page, PreToolUse exit 2 can stop that one call. Anthropic’s hooks guide is why a PreToolUse command can refuse a Bash payload. That refusal is local to the agent. A required repository check still has to read the retained JSON. Do not collapse those two exits.
CLAUDE.md inventory on 2026-09-14
Node v22.18.0. Package infinitegrowth@0.1.1. Path: Skills/seo-geo-claude-skills-main/CLAUDE.md. The file names 21 skills, 17 commands, and bundle version 9.9.5. It does not name a JSON SEO merge-gate exit contract.
| Object | Count / value | SEO exit 1/2 named? |
|---|---|---|
| Skills | 21 | no |
| Commands | 17 | no |
| Bundle version | 9.9.5 | no |
Merge-gate issues[].status | absent | no |
The 21 skills include research, build, optimize, monitor, and cross-cutting auditors. That is a catalog. A catalog can tell an agent which skill to open. It cannot return SEO_RED Title Length. Claude Code SEO that files the catalog as merge evidence is filing the wrong object.
Those six first-party CLI documents still share one warning row: Image Alt Text on 2 of 5 images. Speed 72. cached=false. Hub title length 49. Those rows do not appear inside CLAUDE.md.
Figure: Two series from the same desk. Skill count is not an exit-contract count. Neither series is a ranking score.
Twenty-one skills are not a parser
content-quality-auditor and domain-authority-auditor are protocol skills. They still do not write issues[].status for this product CLI. Claude Code SEO should send the agent to the retained JSON, not to a skill score.
Seventeen commands are not fixture exits
/seo:audit-page is a prompt. Local gate.mjs is a process. The desk recorded fixture exits 1 and 2 on disk. The command list did not.
How to reproduce the CLAUDE.md read
Read the vendored file. Then call the pinned CLI so the later required Claude-side check still has a JSON document.
python3 - <<'PY'
from pathlib import Path
p = Path("Skills/seo-geo-claude-skills-main/CLAUDE.md")
text = p.read_text()
print("skills_mentioned_21", "21 skills" in text.lower() or "21 skills" in text)
print("version_9_9_5", "9.9.5" in text)
print("has_exit_1_contract", "exit 1" in text and "issues" in text)
print("bytes", p.stat().st_size)
PY
npx --yes -p infinitegrowth@0.1.1 seo-health check \
--format json --lang en \
https://infinisynapse.com/en/tool/seo-ci-cd
The wrong argv fails first. A Claude session that forgets -p never fetches: the first-party command printed error: unknown command 'seo-health' and exited 1. Pin with -p. As of 2026-09-14 the working hub command wrote about 72 KB of JSON and left process 0. Claude Code SEO still has to hand that file to a parser.
Why the Claude argv must pin -p
Omitting -p in a Claude Bash hook never reaches the preview. Put that failure in the agent runbook before the first preview. RFC 8259 is the JSON grammar the later parser must accept. A chat paraphrase is not that grammar.
What a hook can block without becoming CI
Contrast the catalog with a hook that can refuse a dangerous tool call. A useful Claude Code SEO hook still has a narrow job: inspect the payload, exit 2 on a secret echo, exit 0 otherwise.
PreToolUse can refuse a key
Anthropic Claude Code settings is how hooks.PreToolUse is declared. A small Bash filter that greps for SEO_HEALTH_KEY= is a secrets stop. It is not a title-length check. Do not ask the hook to parse a 72 KB SEO document unless you also retain that document for CI.
CI still reads the file
After the agent session, a required job still has to pin infinitegrowth@0.1.1, write JSON, and parse issues[]. Return 1 on error. Return 2 on missing arrays. Keep warning visible. Claude Code SEO that stops at hook exit 2 leaves the page ungraded.
The OWASP secure-by-design framework is why the hook should refuse secrets in commands. It does not make the chat an official Google score.
A Claude Code SEO settings file that embeds a live key is already a leak. Keep the default check path keyless.
Fixture exits the merge job still needs
Local gate.mjs on the Claude desk returned the exits below. Those codes are the parser contract a later CI step would call. They are not a Claude verdict.
| Claude-desk fixture | Exit | stderr captured |
|---|---|---|
red.fixture.json | 1 | SEO_RED Title Length |
malformed.fixture.json | 2 | SEO_CONTRACT missing_result_arrays |
warn.fixture.json | 0 | (empty) |
good.fixture.json | 0 | (empty) |
| no path | 2 | usage: node gate.mjs <report.json> |
Those five Claude-desk exits are the contract a later required check would return.
The red fixture is valid JSON with one error row. The malformed fixture has a url and no result arrays. json.loads is not enough if you never check those arrays. Claude Code SEO that lets the agent “fix” a missing array in prose still needs exit 2 on disk.
Local gate.mjs numbers
Exit 1 means a named content red. Exit 2 means usage, file, or contract failure. The live hub CLI exited 0 with a warning. Reproduce both layers before you treat a chat as done. Title length 49, description 153, word count 3332, speed 72, TTFB 1488 ms. That hub row is still not a hook result.
Failure modes that confuse chat with a gate
Catalog treated as a gate. 21 skills and 17 commands are navigation. They are not issues[].status.
Hook exit treated as page pass. Exit 2 blocked a tool. It did not read Image Alt Text. Claude Code SEO still needs the file.
Green transport. CLI exit 0 plus a warning row. Parse the array. The hub document already showed that pair.
Agent approval treated as evidence. A model can praise the title. The parser still has to see name and status. Keep the transcript if you want context. Do not let it override the file.
Agent PATH drift. A shell that is not CLI 0.1.1 is a different Claude-side executable. Pin, then upgrade in its own change.
Missing artifact treated as skip. If CI never writes the JSON, Claude Code SEO cannot name the row. Require the file.
Registry GET that afternoon answered HTTP 200 and latest 0.1.1, with license, repository, and homepage left blank. That identity is useful. It is not a Claude session.
This website repository still has no .github/workflows at the app root. Do not claim a hosted job ran because a hook fixture exited 0.
Place hooks next to the hub
The SEO CI/CD complete guide owns the shared rule: file, fields, exit, required check. This page owns the CLAUDE.md catalog and the split between hook exit 2 and parser exit 1.
Codex SEO is the audit-file comparison when the agent is non-interactive codex exec instead of a PreToolUse hook. Teams standardizing editor instructions should open cursor seo skill rather than treating either agent’s prose as CI.
A Claude Code SEO rollout that begins by asking the model for a 50-page audit hides the parser. Prove the negative fixture first. Then connect one public preview. Only then make the named job required.
A hook that this website does not yet ship as merge evidence would still be a PreToolUse filter, not a title-length parser. Claude Code SEO can refuse SEO_HEALTH_KEY= in a Bash payload and exit 2. That stop protects secrets. It does not read Image Alt Text. The vendored catalog still lists 21 skills and 17 commands. None of those rows return SEO_RED Title Length. A reviewer who pastes a /seo:audit-page transcript into the pull request is filing a prompt, not a Claude Code SEO gate.
The hub live row remains the first-party document this desk actually fetched for the sibling CLI: title 49, description 153, 3332 words, speed 72, TTFB 1488 ms. CLI exit 0 sat beside the Image Alt Text warning. Claude Code SEO that treats a chat “looks fine” as that warning’s resolution is skipping the array. Keep the file. Re-run after the next deploy. Do not claim a hosted Claude job already graded the page.
Test the URL before you trust the agent session
Run the browser form once, then reproduce the same JSON from the pinned CLI and keep the file.
Run SEO Health CheckerFrequently Asked Questions
Does the SuperSEO plugin fail a merge?
superseo plugin claude installs a skill catalog. It does not fail a merge. Name the hook, then let CI read the retained JSON.
Does the default hook or check require a login?
No. Default check, audit, and links do not need a CLI key. eeat, aivisibility, and gsc do. Keep those deep commands out of the default Claude Code SEO path unless a named owner accepts the spend.
What happens when the retained JSON is missing arrays?
Fail closed. The desk used exit 2 for SEO_CONTRACT missing_result_arrays. Keep stderr. Malformed data is not a warning, because Claude Code SEO cannot prove the required checks ran.
Can a hook trust only the CLI process status?
No. The live hub CLI exited 0 while Image Alt Text was warning. Parse issues[] and onPage[]. Preserve name and status. Then apply the repository rule.
Does the agent create an official Google score?
No. Product traffic lights enforce a local merge rule. They do not mint a Google 100, promise indexation, or forecast clicks from a chat. A chat paraphrase is also not that grade. A SuperSEO plugin write-up is the same kind of text.
Is CLAUDE.md already a merge gate in this repo?
No. The 2026-09-14 read found 21 skills and no exit 1/2 contract. Claude Code SEO still needs a retained file and a parser.
Conclusion
Use Claude Code SEO when the job is to keep an agent from treating a catalog as a merge decision. The 2026-09-14 desk shows 21 skills, 17 commands, bundle 9.9.5, no named exit contract, fixture exits 1 and 2, and a live hub CLI that exited 0 beside a warning. Stop the Claude write-up when the command, the pin, the raw fields, and the parser exit are still sitting beside the hook log. A catalog listing is more useful than an unsupported chat badge.
Use the InfiniSynapse web app only when a signed-in owner starts a deep task after the hook. The routine path stays the pinned CLI and the retained JSON.
William Zhu · Cofounder, InfiniSynapse · GitHub @allwefantasy
Desk-validated SEO Health methods. Corrections: zhuhl@infinisynapse.com · corrections policy.