jev-seo
Skill100 starsChanged 9 days agoMITView on GitHub
Free SEO and GEO audits for any site or docs folder. Use when the user asks to audit SEO, check rankings, score AI visibility, validate schemas, inspect robots.txt, crawl for broken links, or gate a deploy on search health. Runs a single Rust binary, no paid APIs. Semantic judgments by TypeSafe Jev when keyed, deterministic scores otherwise.
- Reads credentials
In this repository3 other files it gives its agents.
- AGENTS.mdAGENTS.md
- site/llms.txtllms.txt
- jev-auditSkill
The file
We split this skill into the rules it gives an agent
4 rules. About 0 are common, 1 is distinctive, and 3 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 8
Run the binary. Prefer JSON output when chaining commands.
- Very specific: line 31
Run it over stdio: npx -y @akashpriyadarshii/jev-seo (or jev-seo mcp with a local build).
- Very specific: line 37
No local build? Set JEV_SEO_BIN=/path/to/jev-seo and the wrapper uses it instead of downloading.
- Very specific: line 50
Keep crawls polite: default 50 pages, 8 workers, robots.txt honored.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
jev-seo skill
Run the binary. Prefer JSON output when chaining commands. Never invent scores; every number below comes from a command.
Fast paths
- Full site picture:
jev-seo crawl <url> --max-pages 50thenjev-seo llms <domain>. - Own-site truth:
jev-seo gsc auth, thenjev-seo gsc query --site <url>for free Search Console clicks and positions. - Docs folder gate:
jev-seo audit docs/ --min-pass 60 --html report.html --pdf report.pdf --md report.md. - One question, one answer:
jev-seo geo <file> --query "<query>",jev-seo robots <domain>,jev-seo schema <file>,jev-seo sitemap <url>. - Internal links:
jev-seo link docs/ --limit 10suggests one contextual target per page, orno_link. - Environment check first on a new machine:
jev-seo doctor.
Reading output
Health,Score, andGradelines are deterministic 0-100 values with A-F grades.Top Actionsare ranked by impact with effort bands; ids likeRULE-R01map to the rule registry (R01-R64) insrc/rules.rs.- New in v0.4.0 (unreleased):
check+verify,.jev-seo/policy.toml, regional--country/--language/--device, GSC inspect/winners/losers,bingsites/queries,--sarif/--junit, R59-R64, citation struct,seo_index, 4 new MCP tools (19 total),jev://resources, evidence snapshots. Portable manifest (plugin.json+mcp.json+.app.json), annotated tools, bundledskills/jev-audit/SKILL.md, bridgeGET /health. New in v0.3.0 (2 Oct 2026):serve,capabilities --json,watch --diff-only,fix-plan, crawl sitemap seeding (closes #3), R32/R08/R56 breadth, JS feature gate, GEO trends with sparkline SVG, offline--rescore. v0.1.2 shipped 26 Sep:explain,report --baseline,crawl --vitals,query --provider dfs,seo_cite_check,seo_gap, keyless GEO, drift gates. - Jev contract: Choices offer
insufficient_context, Flags print the runner-up, every fan-out appends to~/.jev-seo/eval.jsonl. Question version rides the spend line. Completenesssays what was skipped (caps, missing sitemap, missing robots). A capped crawl is a sample, not a verdict.Needs reviewmarks Jev answers below the confidence bar. Treat those lines as unverified.--jsonkeeps stdout machine-clean; progress goes to stderr.
MCP server (19 tools)
Run it over stdio: npx -y @akashpriyadarshii/jev-seo (or jev-seo mcp with a local build). Client config:
{ "mcpServers": { "jev-seo": { "command": "npx", "args": ["-y", "@akashpriyadarshii/jev-seo"] } } }No local build? Set JEV_SEO_BIN=/path/to/jev-seo and the wrapper uses it instead of downloading. First npx run needs network for the one-time download; musl/Alpine systems cannot run the glibc builds and must use JEV_SEO_BIN with a local cargo build.
seo_cite_check reports whether an AI answer names the target domain. Three paths, first one that works wins: pass answer to score your own words (works everywhere); omit it and sampling-capable clients answer via sampling/createMessage; otherwise you get needs_answer: true plus the prompt, answer it naturally as you would a user, and re-call with answer. Result fields: cited (bool), since_last (previous verdict or null), source (answer/sampling/engine), excerpt (300 chars).
Agentic loop: seo_gap ranks the Search Console queue (needs site auth once via gsc auth); work it top down; seo_cite_check each query; seo_report surfaces drift alerts (citation lost/gained, geo drops). seo_geo scores keyless without any key; TYPESAFE_API_KEY upgrades it to Jev judgment. Paid engines (Perplexity, OpenRouter, Ollama) plug in via JEV_SEO_LLM_KEY + JEV_SEO_LLM_MODEL (+ optional JEV_SEO_LLM_URL) and answer cite checks server-side. Deploy gate: drift baseline --report audit.json --label v1 before a change, drift compare --report new.json --label v1 after. One-file handoff: audit --digest digest.md, canonical close: bundle audit.json --out bundle.md.
Rules for agents
- Crawl before judging. Never score pages the crawl has not fetched.
- Quote the completeness line alongside any score.
- Gate deploys with
audit --min-passor crawl health deltas via--diff, not vibes.--fail-on blocking(default) fails only on deterministic rules; judgment calls warn.--forbidnames non-negotiables. - Export findings with
--csvfor spreadsheets; rebuild past runs with--rescore, no spend. - Jev needs
TYPESAFE_API_KEY. Without it the tool still runs; semantic sections report local-only output. - Keep crawls polite: default 50 pages, 8 workers, robots.txt honored. Raise
--max-pagesdeliberately.
Capabilities
jev-seo capabilities --json reports {version, rule_set, rules, mcp_tools, mcp_tool_names[], commands[]}. This is the machine source of truth. Do not parse counts from the README.
Plugin bridge
jev-seo serve --addr 0.0.0.0:8787 exposes Streamable HTTP at POST /mcp plus GET /plugin.json and /extensions/* for ChatGPT Plugin Extensions.
Fix plan
jev-seo audit docs/ --json > audit.json && jev-seo fix-plan audit.json --json: deterministic rule to patch to verify per finding (fact or heuristic, confidence capped), sorted blocking first. One hint per finding. Verify with jev-seo audit <file> --json | jq '.findings | no RULE-Rxx'.
Watch
jev-seo watch docs/ --once --no-jev or jev-seo watch https://example.com --once --json; loop mode jev-seo watch docs/ --every 30. Compares against watch-<slug> sqlite baseline, emits clean|regressed|improved|baseline with delta, blocking counts, drift alerts. Polling, not inotify.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

