# De AI Gate

> Use to check content for AI-writing tells / de-AI a draft / gate prose before publishing or committing - triggers include "check for AI tells", "de-AI this", "scan for em-dashes or curly quotes", "is this AI-written", "gate content before publish". Scans prose, HTML, or authored data records for de-AI typographic tells (em-dash, curly quotes, ellipsis, invisible unicode) and high-precision AI phrase tells, plus record-source corruption, with a hard pass/fail exit code. Read-only, no network, no credentials.

- Skill: `bryanbenner/de-ai-gate` (Agent Skill, multi-file: 10 files)
- Install (CLI): `npx skillmds@latest add bryanbenner/de-ai-gate`
- Raw SKILL.md: https://api.skillmd.com/api/skills/bryanbenner/de-ai-gate/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Web & Frontend
- Author: BryanBenner (https://skillmd.com/u/bryanbenner)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/bryanbenner/de-ai-gate

---


# de-AI Gate

A deterministic, read-only content-honesty gate. Two HARD scan modes:

- **Served-HTML scan** (`--html`): char tells (em/en-dash, ellipsis, invisible unicode) + 12 high-precision AI phrase tells, after stripping CSS/comments.
- **Record-source scan** (`--records`): typographic-substitution corruption (curly quotes/apostrophe, no-break space, ellipsis char) on authored JS/JSON/TS spine - the check that catches AI-smuggled curly quotes a served-HTML gate misses.

Structural heuristics (sentence-length sigma, tricolon, transition scaffolding, watchlist clusters) report as advisory WARN and never change the exit code.

## Invoke

```bash
# from the skill directory (or point node/python at its absolute path)
# served content
node cli.mjs --html ../my-site/public/articles ../my-site/public/guides
# authored records
node cli.mjs --records ../my-site/data/
# Git-Bash / Python surface (HARD tells only)
python gate.py --html ../my-site/public/ --records ../my-site/data/
```

Exit `1` on any HARD violation (use `--warn-only` for non-blocking baseline mode). Run --html and --records as separate invocations (or separate flags); mixing record and html targets in one call is not supported.

## One catalog, two runtimes

All tells live in `catalog.json`. `engine.js` (JS) and `gate.py` (Python) both read it, so the tell definitions are single-source and never fork. Add a new tell once, in the catalog. Note: JS and Python regex word-boundary handling differs on text where a non-ASCII letter is directly adjacent to a tell word (no separator) - a near-zero case in real prose; both engines otherwise agree.

## Scope

Gate reader-facing prose: README/docs, published pages, skill instructions,
release notes, About text, UI copy. Skip detector code and test fixtures (they
contain the glyphs they detect), commit messages (gate the shipped docs, not
history), and verbatim third-party quotes. Full scope rules in `README.md`.

## Safety

Read-only file scan. No SessionStart/auto-run hook, no credentials or cookies, no network or egress, zero dependencies. See `README.md`.

