stop-ai-slopCAUTION
Zero-dependency linter and gate that blocks AI-generated comment slop: multi-line narrative comments, changelog markers, step-numbered filler. Write-time plugin for OpenCode, Claude Code hooks, pre-commit, GitHub Action, GitLab CI, MCP server. RU+EN+DE+FR+ES detection.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
English | Русский
[](https://www.npmjs.com/package/stop-ai-slop) [](LICENSE) [](package.json) [](package.json)
stop-ai-slop is a zero-dependency comment linter and gate that blocks AI-generated comment slop before it lands in your codebase. One scanner (skill/scripts/scan.mjs, theRULEStable) is the single source of truth for a one-line, why-only comment policy. It is enforced at write-time (OpenCode plugin, Claude Code PreToolUse hook), at commit-time (pre-commit hook installed with--install), and in CI (GitHub Action, GitLab CI template) — and it also runs as an MCP server. Node >= 18, zero npm dependencies, MIT licensed, works on Windows, Linux and macOS.
AI coding agents over-comment: multi-line narrative blocks, // was X, now Y changelog notes, Step 1 / Step 2 filler, banner dividers, markdown inside comments, TODO without a ticket, comments that restate the code line beneath them, rotting file.py:123 pointers, even invisible zero-width and BiDi characters. stop-ai-slop catches all of it deterministically — no LLM, no scoring threshold, no network — and blocks the offending edit or commit.
Install in two commands
npm i -D stop-ai-slop npx stop-ai-slop --install # writes the pre-commit hook + npm scripts into the current repo
--install is the only command that modifies your repo: it appends a marked block to .git/hooks/pre-commit (idempotent, never clobbers an existing hook) and adds the stop-ai-slop / stop-ai-slop:all npm scripts. The hook embeds the absolute path to the scanner as of install time — after moving or re-cloning the scanner, run --install again.
Homebrew
brew tap WhiteBite/stop-ai-slop https
39644e9f28f9OBSERVED · 2026-10-11Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.
claude mcp add stop-ai-slop-playground -- npx -y stop-ai-slop-playground
{
"mcpServers": {
"stop-ai-slop-playground": {
"command": "npx",
"args": [
"-y",
"stop-ai-slop-playground"
]
}
}
}Exposed tools (3)
2 read · 1 write · 0 destructive.
| Tool | Risk | Description |
|---|---|---|
slop_baseline | read | Записи baseline текущего git-корня |
slop_explain | write | Обоснование правила (Why/Instead/Write/Ignore) |
slop_scan | read | Полное сканирование каталога на slop-комментарии |
Trust audit
CAUTIONgrade B · trust 84/100 Install with care. The audit found things worth knowing before you trust its output.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | WARN |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (5 observation(s))
- Network
- none-observed
- Shell
- declared (5 observation(s))
- Dependencies
- not all pinned
- Secrets in source
- none-found
Findings (14)
writeFileSync(join(dir, "spec.feature"), "# language: ru\n# Контекст сценария: док, инспектор и история чата\n# покрыты отдельными сценариями\n@tag\nФункционал: Chat\n Сценарий: x\n Допустим y\n")
writeFileSync(join(dir, "spec-slop.feature"), "# было так, стало иначе\n# removeSource rewrites rows\nФункционал: Chat\n")
const SLOP_MD = "<!-- первая строка\nвторая строка -->\n"
export const OBVIOUS_WORD_SPLIT = /[^a-zа-яё0-9]+/
.filter((w) => w !== "" && /[a-zа-яё]/.test(w) && !OBVIOUS_STOPWORDS.has(w))
.pre-commit-hooks.yaml
import { detectCommentSlop } from "../../skill/scripts/src/detect.mjs"import { PROFILES, profileFor } from "../../skill/scripts/src/profiles.mjs"import { rt, setLang } from "../../skill/scripts/src/i18n.mjs"const CATALOG_PATH = fileURLToPath(new URL("../../detekt-rules/rule-catalog.json", import.meta.url))const KT_MARKERS_PATH = fileURLToPath(new URL("../../detekt-rules/src/main/kotlin/whitebite/slop/SlopMarkers.kt", import.meta.url))repo-aeo, typescript
- **Multi-language natural-language detection.** Changelog markers, numbered steps and "This function..." openers are matched in RU + EN + DE + FR + ES. Deterministic competitors are English-only; the
- **Multi-language natural-language detection.** Changelog markers, numbered steps and "This function..." openers are matched in RU + EN + DE + FR + ES. Deterministic competitors are English-only; the
Gates applied: no_behavioural_pass.
39644e9f28f9full audit observations/trust-audit/mcp-server/whitebite__stop-ai-slop.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-11 | 39644e9f28f9 | CAUTION | B | 84 | first audit |
Questions
What is the stop-ai-slop MCP server?
Zero-dependency linter and gate that blocks AI-generated comment slop: multi-line narrative comments, changelog markers, step-numbered filler. Write-time plugin for OpenCode, Claude Code hooks, pre-commit, GitHub Action, GitLab CI, MCP server. RU+EN+DE+FR+ES detection.
What tools does stop-ai-slop expose?
3 in total: 2 read-only, 1 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.
Is stop-ai-slop safe to connect to an agent?
With care. The audit graded it B (84/100) and found 14 things worth knowing before you trust this server, listed below with the exact line each was found on.
What credentials does stop-ai-slop need?
No credential environment variables were found in its source, so it appears to need none.
How current is this page?
The grade is for one exact copy of the source (39644e9f28f9), read on 2026-10-11. The repository is watched and re-audited when it changes.