Run this on a page you already published. It will probably fail.
Content Gate audits one page against the ten checks that decide whether AI-assisted content ranks, gets cited by answer engines, and survives Google's scaled-content policy. It runs inside Claude Code, needs no API key, has zero dependencies, and never sends your content anywhere.
It does not write pages. It tells you the truth about the ones you have.
Every AI writing tool sources from one of two places: the current search results, or the model's own memory. Both are public. So no AI tool can produce the first E in E-E-A-T, because first-hand Experience only exists inside the operator's head and their invoice history. The result is copy that is fluent, structurally correct, and completely interchangeable with every competitor's. Google's spam policy does not care whether a human or a machine wrote it. It targets publishing at scale without adding value, and interchangeable is the definition of no value added.
This tool finds that gap on a specific page and names it.
Prerequisites: Claude Code installed. That is it. Claude Code already ships Node, and these scripts have no dependencies.
Never used Claude Code? Read MANUAL.md. It has the full install, both Windows and Mac, with the errors you will actually hit.
git clone https://github.com/zainsaeeed/content-gate.git
cd content-gate
claudeThen, in Claude Code:
/gate https://yourclient.com/the-page-you-are-worried-about
Or against a local draft:
/gate examples/before.md
You can also run the deterministic half with no AI at all:
node bin/gate.mjs examples/before.mdTen gates. Eight run as deterministic scripts, so they give the same answer every time. Two need judgment and run through Claude Code.
| Gate | Checks | Auto-fail |
|---|---|---|
| G1 Experience proof | Provable first-hand markers, every claim backed by one | yes |
| G2 E-E-A-T presence | Would a skeptical customer believe this business | yes |
| G3 Duplication risk | Near-duplicate siblings, the doorway pattern | yes |
| G4 Passage extractability | Can an answer engine lift a clean block | no |
| G5 Keyword stuffing | Exact-phrase density against a 2.5% ceiling | yes |
| G6 Meta and headings | Title, description, one H1, thin sections, em dash | yes |
| G8 Readability | Flesch-Kincaid band and long-sentence ratio | no |
| G9 AI tells and voice | 111 banned terms and 6 structural anti-patterns | yes |
| G10 Source resolution | Does every cited source resolve and say what you claim | yes |
| G11 Schema and JSON-LD | Valid markup, and self-serving review markup | yes |
| G13 Conversion readiness | Click-to-call, a real CTA, fabricated urgency | yes |
| L17 AI-citation levers | Statistics, sources, quotations, filler openers | no |
Full thresholds and where they come from: gates/README.md.
Two files ship in examples/. The same page, before and after a repair pass.
$ node bin/gate.mjs examples/before.md
VERDICT: BLOCKED score 23/100 5 of 9 gates failed
FAIL G1 Experience proof........... 0/5 marker types, 2 unproven claim(s)
FAIL G4 Passage extractability..... 3/6 sections extractable (50%, want 80%+)
FAIL G5 Keyword stuffing........... top phrase "water heater repair" at 11.76% (ceiling 2.5%)
FAIL G9 AI tells and voice......... 33 Tier-1 hit(s) across 30 distinct term(s)
FAIL G13 Conversion readiness...... no tel: link, CTA present
$ node bin/gate.mjs examples/after.md
VERDICT: NEEDS WORK score 83/100 0 of 9 gates failed
PASS G1 Experience proof........... 5/5 marker types, 0 unproven claim(s)
PASS G5 Keyword stuffing........... top phrase "round rock" at 2.15% (ceiling 2.5%)
PASS G8 Readability................ FK grade 6.8 (band 6 to 9)
PASS G11 Schema and JSON-LD........ 1 block(s), types: Plumber
PASS L17 AI-citation levers........ 12 figures (2.15/100w), 2 sources, 2 quotes
Open both files and compare them. The second one is not better written. It is better sourced. That is almost always the entire difference.
| Command | What it does |
|---|---|
/gate <file or url> |
Full audit. Runs the scripts, then the two judgment gates, writes a report |
/fix <file> |
Repairs what can be repaired without inventing a fact. Re-runs the gate and shows both scores |
/explain <gate, code, or "phrase"> |
Teaches the rule, the threshold, and the actual fix |
The scripts also run standalone:
node bin/gate.mjs page.md # audit one page
node bin/gate.mjs a.md b.md c.md # adds the duplication check
node bin/gate.mjs page.md --keyword "plumber dallas"
node bin/gate.mjs page.md --out report.md
node bin/gate.mjs page.md --json
node bin/gate.mjs --self-testIt will never invent a fact to make your page pass.
If a fix needs a license number, a real job, or a named neighborhood, it writes [FILL: what is needed and who has it] and hands the gap back to you. A draft with honest gaps is shippable work. A draft with invented specifics is a liability that can get your client's whole site demoted.
The gate cannot tell a real license number from a plausible fake one. You can. That responsibility does not transfer to the tool.
Deliberately. It inspects one page. It does not create anything.
It will not write a page from a keyword, research a topic, build a topical map, hold your client's brand facts, learn a house voice, plan internal links across a site, carry compliance overlays for medical or legal or financial verticals, publish to WordPress, or track anything over time.
If you run this on your client work and find that most pages fail G1, that is the honest result and it is not a problem this tool solves. Diagnosing one page and producing forty a month to a standard are different jobs. This is the first one.
The second one is SEO-CONTENT-OS, the paid system this gate was extracted from. It is not required to use this, and this is not a crippled version of it. Everything here works completely, forever, for free.
- Zero dependencies. No
npm install. Nothing to audit but this repo. - Zero network calls in the scripts. The only Node built-ins imported anywhere are
fs,path, andurl. There is nohttp, nonet, nofetch. Check it yourself:grep -rE "node:(http|net)|fetch\(" lib/ bin/returns nothing. - Zero telemetry. Nothing phones home, because nothing can.
- No API key, no account, no signup.
- Your content never leaves your machine.
input/andreports/are gitignored so a client page cannot be committed by accident. - 1,211 lines across 4 files. Small enough to read before you trust it.
Full detail and how to verify each claim: SECURITY.md.
The blocklist at gates/ai-tell-blocklist.md is parsed at runtime, not hardcoded. Add a term, run node bin/gate.mjs --self-test, open a PR. New AI tells appear constantly and the list is never finished.
MIT. Use it on client work, fork it, sell services with it. See LICENSE.
Built by Xegents AI. Questions: zain@xegents.com