Tool · tool guide

Cursor SEO Skill: SKILL.md, Not a Gate

A cursor seo skill is a committed SKILL.md plus a command. Frontmatter loads it. A parser, not chat, decides the merge. Official Cursor docs linked.

Published Updated 11 min readBy William Zhu & InfiniSynapse Data Team

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.

Cursor SEO Skill: SKILL.md, Not a Gate
On this page

By William Zhu · Cofounder, InfiniSynapse · Published: 2026-09-09 · Last updated: 2026-09-23 · Last verified: 2026-09-23 · Reviewed by the InfiniSynapse Data Team.

Reviewed by: InfiniSynapse Data Team · method review 2026-09-14. Byte counts of three committed .cursor/skills/ files plus one first-party CLI document for this tool URL.

Trust / COI: About · Corrections. SEO Health is a commercial product from this team. The skill inventory below is this website repository, not a hosted Agent run and not a customer merge.

TL;DR

A cursor seo skill in this repository starts as committed files, not as a merge badge. The shortest of those files is a 30-line pointer. A pointer can tell an agent where the rules live. It cannot parse issues[].status.

Direct answer: A cursor seo skill is a committed SKILL.md plus a command the agent is allowed to run. Frontmatter loads it. A parser, not chat, decides the merge. On 2026-09-14 this repo held three skills. The live tool URL then returned CLI exit 0 with Image Alt Text still warning. Loading the skill is not a page pass.

The sample is three committed skill files plus one public CLI document. That sample cannot prove an Agent invoked the skill, and it does not prove a ranking change. Drop the file sizes and the desk is no longer replayable.

What you will learn

  • How a cursor seo skill differs from Cursor Rules and from seo ci cd
  • Which three skills this website repo actually commits
  • Why seo-blog-content is a 30-line pointer and not a parser
  • What the live CLI returned on /en/tool/cursor-seo-skill
  • Where this page stops and a sibling owns the surface

What is a cursor seo skill?

Key definition: A cursor seo skill is a directory at .cursor/skills/<name>/SKILL.md that names a job, a path glob, and a verification command. It does not certify rankings. It does not issue an official Google grade. Its useful output is the file the agent is told to keep, plus the exit code of a local parser.

Cursor Agent Skills is the platform reminder that a skill is a directory the agent can load. That official page does not grade this host and does not define SEO_RED.

After the skill names a row, a team may file it on an InfiniSynapse Server API long-task workspace and watch SSE. That API path is optional sequencing, not a substitute for the retained JSON.

Skill vs Cursor Rules vs CI

Cursor Rules steer tone and short always-on instructions. A cursor seo skill is a longer, named procedure the agent loads when the job matches. The merge rule — file, fields, exit, required check — lives on seo ci cd. Do not file the skill as if it were that hub.

How to add the SKILL.md

  1. Create .cursor/skills/<name>/SKILL.md.
  2. Put required name and description in the frontmatter so the agent can discover it. Details stay on the official skills page.
  3. Name one command the agent may run, with a package pin. Do not tell the model to invent a green report.
  4. Keep gate.mjs (or the same parser) in the repo. The skill text is not the exit code.

Do not paste a 40-question audit playbook into the skill and call that CI.

File vs packaged npm skill

SEOAgent for Cursor and seo-geo-optimizer are other people's installable packs. This page is a first-party file you commit. We do not rank those products. If you install a pack, you still need a parser beside it — the npm name is not issues[].status.

Pointer files are not parsers

seo-blog-content in this repo is 30 lines and 1466 bytes. It points at the longer skill tree. It contains no JSON.parse, no process.exit, and no SEO_CONTRACT string. Calling that pointer a merge gate is a category error.

The IETF requirements-language standard is why this page uses MUST-style language only for observed exits. It does not turn a skill pointer into a required check.

Agent text is not a status field

A model can say the title looks fine. The observed CLI on this URL still left a warning row. A skill that treats the transcript as the verdict has already left the evidence path.

Python subprocess documentation is the independent reminder that a spawned process has its own exit code. Quote that exit. Do not summarize it.

Desk inventory on 2026-09-14

Node v22.18.0 was on PATH. The package pin was infinitegrowth@0.1.1. The desk counted three committed skills, then ran the pinned CLI against this tool URL.

PathLinesBytesParser?
edit-website-content1143512no
seo-blog-content301466no
update-blog-from-temp2528480no
InputProcess exitstderr / warning
red.fixture.json1SEO_RED Title Length
malformed.fixture.json2SEO_CONTRACT missing_result_arrays
warn.fixture.json0(empty)
good.fixture.json0(empty)
missing path2usage: node gate.mjs <report.json>
live /en/tool/cursor-seo-skill CLI0Image Alt Text warning, 2/5 images

The live document used title length 45, description length 152, word count 3409, speed 72, TTFB 1192 ms, HTML 102.8 KB, and one blocking script. cached was false. The document exposed url, page, onPage, issues, images, keywords, speed, seoData, and cached. issues[].status values seen were good and warning. No error row appeared in this sample.

That is an evidence row, not a customer case. A later deploy can change the alt warning. Re-run the command.

Grouped bars for the 2026-09-14 desk: committed skill file size beside CLI warning-row count

Figure: Two series from the same desk. File size is not warning-row count. Neither series is a ranking score.

Three committed skills

update-blog-from-temp is the longest committed skill at 252 lines. It still does not implement gate.mjs. edit-website-content is 114 lines of website-copy guidance. Neither file returns exit 1 when Title Length is red.

An owner who treats line count as enforcement is measuring the wrong column. Line count is inventory. Exit code is the gate.

Live CLI on this tool URL

The CLI exit was 0. The issues array still carried one warning. A job that only inspects $? would have gone green. Keep the file. Parse issues[].status before anyone claims the page passed.

How to reproduce the skill inventory

Count the committed files from the repository root. Do not invent a fourth skill.

wc -l -c \
  .cursor/skills/edit-website-content/SKILL.md \
  .cursor/skills/seo-blog-content/SKILL.md \
  .cursor/skills/update-blog-from-temp/SKILL.md
# 30 1466
# 252 8480

As of 2026-09-14 those three paths were the inventory. This website repo still has no .github/workflows at the app root. A write-up that pastes a green Actions badge is claiming a runner we did not start.

GitHub required-check documentation is the surface that would later make a named job blocking. That page is capability, not proof this repo enabled it.

How to reproduce the CLI

Forgetting -p on this skill desk printed error: unknown command 'seo-health' and stopped at exit 1 before the tool URL was fetched. The working form pins the package with -p:

npx --yes -p infinitegrowth@0.1.1 seo-health check \
  --format json --lang en \
  https://infinisynapse.com/en/tool/cursor-seo-skill

As of 2026-09-14 that command wrote about 73 KB of JSON and left process 0. The skill still has to parse the warning row. Pin infinitegrowth@0.1.1. Floating latest is a different executable.

CISA Secure by Design is why the skill text must not embed credentials. It does not grade the alt warning.

Parser beside the skill

OWASP secure-by-design framework treats a control as designed in, not as a comment the model can skip. A skill that only exists as chat guidance is still a comment.

The local gate.mjs fixtures are the control we actually ran. Red is exit 1. Missing arrays are exit 2. Warning-only JSON is exit 0. Those numbers are observed. They are not a hosted workflow.

Missing frontmatter is a load failure

Cursor documents name and description as required. If those fields are absent, the agent may not load the skill. That is a discovery failure. It is not a page-level red. Keep the two diagnoses on separate tickets.

Process 0 still needs a parser

A transport success only proves that a process returned data. It does not prove the page passed the checks inside that data. For this skill, that split is the whole reason to keep gate.mjs beside the SKILL.md.

NIST SSDF is an independent repository-control baseline. It does not endorse SEO Health and it does not turn exit 0 into a keep vote.

Where this page stops

This page owns the committed-skill inventory and the live CLI on this slug. Surfaces that fail differently live on siblings. This write-up does not become a Claude hook walkthrough on this URL.

A hook that fires on a tool event is a different trigger. An agent edit that still needs a preview is a different acceptance test. Write down the command, the package pin, the UTC date, the target URL, the original fields, and the observed exit code. If any of those are missing, the skill replay is already broken.

Keep stdout on disk even when the parser later returns 1. A red check without a file creates an argument. A retained file creates a repair queue. Redirect the CLI to a known path and leave stderr in the job log. Never hand-edit the report between generation and parsing.

The seo ci cd hub owns the shared decision model: file, fields, exit, required check. Open that page when the question is the merge rule rather than the skill directory. A cursor seo skill is the discovery layer in front of that rule, not a replacement for it.

Adoption in four reviewable commits

Do not land the pointer, the parser, the preview, and branch protection in one opaque commit. The skill is easier to revert when each change leaves a file. Reproduce the byte counts after the first commit so the inventory cannot drift in silence.

Commit the pointer first

Commit a SKILL.md that names the command and forbids claiming a run that did not happen. Review the frontmatter. Do not yet call the live URL.

Prove the negative fixture

Run gate.mjs on red.fixture.json and malformed.fixture.json. Record exits 1 and 2 in the pull-request body. A rollout that skips the negative path hides the parser.

Connect one preview

Choose one public, non-sensitive preview. Archive the exact JSON. Do not start with 500 pages. The smallest useful path checks one URL, stores one report, and blocks one known error class.

Require the repository check

A job that fails but is not required is telemetry. Configure branch protection so the named job must pass. Keep the artifact on failure so the named row is visible.

Failure modes worth a fixture

Wrong argv. Forgetting -p never reaches the URL. The desk already recorded unknown command 'seo-health'. Put that failure in the skill text before the first preview.

Green transport. CLI exit 0 plus a warning row. Parse the array. The skill exists because that pair happens.

Pointer treated as gate. A 30-line file that only links elsewhere cannot return exit 1. Keep gate.mjs in the repository, not in the model context window.

Version drift. A global seo-health that is not 0.1.1 is a different program. Pin, then upgrade in its own change. A skill that omits the version is already unreproducible.

Missing artifact treated as skip. If the skill says the command ran and no JSON exists, fail closed. Do not invent an empty green object.

Cluster guides

Use this page for the committed-skill inventory, then open the surface you actually operate.

Job you actually haveGuide to open next
Shared merge rule: file, fields, exitseo ci cd
Hook text that is still not a parserclaude code seo

A marketplace pack such as superseo plugin claude still belongs on that hook row. | Non-interactive codex exec | Codex SEO | | An agent edit that still needs a preview plus a file | vibe coding seo |

Inspect the live URL before you commit a skill

Run the browser form once, then reproduce the same JSON from the pinned CLI and keep the file.

Run SEO Health Checker

Use a public URL and never paste secrets.

Frequently Asked Questions

What is a cursor seo skill?

A cursor seo skill is a committed .cursor/skills/<name>/SKILL.md that names a job and a command. It is not a merge badge, not an official Google grade, and not a hosted Agent run.

How do I install a cursor seo skill?

Create the directory, add required frontmatter, and point at one pinned command. Official load paths are on Cursor Agent Skills. Packaged npm skills are optional; you still need a parser beside the file.

Does loading a skill 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 pull-request path unless a named owner accepts the spend.

How should malformed JSON affect the skill path?

Fail closed. The desk used exit 2 for a missing issues array. Keep stderr. Malformed data is not a warning, because the skill cannot prove the required checks ran.

Can process status decide the merge by itself?

No. The live CLI on this slug exited 0 while Image Alt Text was warning. Parse issues[] and onPage[]. Preserve name and status. Then apply the repository rule.

Is this skill result an official Google score?

No. The skill uses product lights as a local merge rule. Those lights are not a Google grade, an index promise, or a traffic forecast.

Do we claim a hosted runner passed?

No. This rewrite counted three committed files and one public CLI. A required check on GitHub is a later commit. Do not display a badge we did not earn.

Conclusion

Use a cursor seo skill when the job is to tell an agent which command to run and which file to keep. The 2026-09-14 desk shows a 30-line pointer, two longer skills, and a live CLI that exited 0 beside a warning. Close the file when the byte counts, the command, the version, the raw fields, and the parser exit are still visible. A committed inventory is more useful than an unsupported Agent anecdote.

Open the InfiniSynapse web app only when a signed-in deep command is the next job. The skill path still ends at the pinned CLI and the kept JSON.

WZ

William Zhu · Cofounder, InfiniSynapse · GitHub @allwefantasy

Desk-validated SEO Health methods. Corrections: zhuhl@infinisynapse.com · corrections policy.

Cursor SEO Skill: SKILL.md, Not a Gate