Skip to content
Agentmart
Submit a tool

stopslop

Clean technical prose with no AI tells, gated by a linter on the text that ships.

Skill by Marcin Jeziorek

IndexedMIT
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/imaginaerumai-stopslop

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Clean technical prose with no AI tells, gated by a linter on the text that ships. Use for docs, READMEs, PR descriptions, commit messages, tickets, and published pages, or when text sounds like AI.

Use cases: writing

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found
Runs as
Node.js package

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/stopslop

What's inside

Skill name
stopslop
Description
Clean technical prose with no AI tells, gated by a linter on the text that ships. Use for docs, READMEs, PR descriptions, commit messages, tickets, and published pages, or when text sounds like AI.
License
MIT
Metadata
author: Marcin Jeziorek · version: 2.1.0 · inspired-by: humanizer by Siqi Chen (blader, MIT); unslop by Lauren Tan (pstack, MIT); Wikipedia: Signs of AI writing · inspired-by-license: licenses/humanizer.MIT.txt licenses/pstack.MIT.txt
Instructions
73 lines in SKILL.md · view on GitHub

Before installing

  • Ships executable scripts

Files (3)

  • SKILL.md
  • patterns.md · references/
  • stopslop.mjs · scripts/

SKILL.md (first lines)

# stopslop

> **Origin.** Written by Marcin Jeziorek. The pattern groups follow Siqi Chen's [humanizer](https://github.com/blader/humanizer) (MIT). Some rules come from Lauren Tan's `unslop` in [pstack](https://github.com/cursor/plugins/tree/main/pstack) (MIT). Both draw on Wikipedia's [Signs of AI writing](https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing). New here: a linter that gates shipped text, an engineering writing standard, and a workflow built from 36 logged sessions.

## The standard

Every piece of text meets all six rules. They have no exceptions.

<!-- stopslop-standard -->
1. No em dashes or en dashes, ever. Use a period, a comma, or parentheses. A writing sample that uses dashes does not change this.
2. Plain text only. No emojis, ever.
3. Each sentence states one technical fact, instruction, or decision in plain professional language.
4. Use the fewest words that keep the meaning. Cut every word that does not change what the reader knows or does.
5. Bold at most once per paragraph, and only for the one thing a skimming reader must not miss.
6. The text is one complete structure. It opens with the conclusion or the purpose. Sections follow in the order the reader needs them. Nothing repeats, nothing dangles, and no closing summary restates the body.
<!-- /stopslop-standard -->

## Why a linter

Rules alone fail at the last step. In logged sessions (method in [docs/field-data.md](https://github.com/imaginaerumai/field-tested-skills/blob/main/docs/field-data.md)), a page shipped with 13 em dashes while a skill banning them was loaded. [scripts/stopslop.mjs](scripts/stopslop.mjs) checks the mechanical rules on the exact bytes that ship. Rules 3, 4, and 6 also need your judgment.

## Steps

1. Get the current text. For a published page or shared doc, fetch the live version now. The user may have edited it since your last read.
2. Lint it with `node scripts/stopslop.mjs <file>`, or pipe the text in.
3. Read it against [references/patterns.md](references/patterns.md) for the tells a script cannot see. Done when you have checked every `judgment` row and listed each hit.
4. Rewrite whole sentences around their point. Keep every supported fact, name, number, and link. Add no fact the source or the user did not give you. Leave sentences the user wrote unchanged unless they asked.
5. Lint the exact payload you will publish, commit, or send. The bar is zero `hard` hits. Fix each `strong` hit or state why it stays.
6. Report in one line, unless the Modes table says otherwise: `stopslop: <n> hard and <n> strong fixed, <n> kept (reason).`

## Modes

| Surface | Output |
|---|---|
| Chat reply | The clean reply. No report line unless asked. |
| Commit message, PR description | The final text only. |
| File | Edit prose only. Code, commands, paths, YAML, and link targets stay byte-identical. Then the report line. |
| Published page | Fetch live, edit, lint the payload, publish, report. |
| Review only | Lint output and a ranked list of judgment tells. No rewrite. |

## Engineering writing

| Write | Not |
|---|---|
| `p95 fell from 120 ms to 40 ms on 10k requests` | `significantly faster` |
| `test_retry covers the timeout path` | `this ensures reliability` |
| PR description that opens with the effect on the caller, then how it was verified | PR description that opens with implementation history |
| `Fix row drop when batch exceeds 1000` | `Improve export robustness` |
| A comment that explains why | A comment that narrates what changed |
| `Config missing port. Add port: 8080 to app.yaml.` | `Something went wrong.` |
| The behavior, stated | `seamless`, `robust`, `blazing fast` |

## When a tell is not a tell

Leave a flagged phrase alone inside a quotation, a proper name, or a passage about the phrase itself. Put such phrases in inline code so the linter skips them. One weak tell alone does not justify an edit. Several together do.

## The linter

```bash
node scripts/stopslop.mjs README.md docs/*.md     # files
pbpaste | node scripts/stopslop.mjs               # stdin
node scripts/stopslop.mjs --json page.md          # for tools
```

| Tier | Effect | Rules |
|---|---|---|
| hard | exit 1 | dash, emoji, chatbot, staged-opener |
| strong | fix on one sighting | not-x-but-y, closer, unbacked-claim, guarantee, copula-dodge, bold-label, bold-density, filler, long-sentence (over 30 words) |
| weak | fix when several appear | ai-word, hype, curly-quote, title-case |

It skips code fences, inline code, link targets, and URLs. Node 18 or later, no dependencies. As a docs gate: `node skills/writing/stopslop/scripts/stopslop.mjs $(git ls-files '*.md')`.

From imaginaerumai/field-tested-skills, MIT.

Signals

Stars
0
Forks
0
Open issues
0
Last commit (this folder)
Oct 20, 2026 (8 days ago)
Last release
Oct 20, 2026 (8 days ago)

From GitHub (fetched Oct 24, 2026).

Details

Version
2.1.0
License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from Marcin Jeziorek

Cite this page

stopslop skill. Agent Mart. https://agentmart.dev/skills/imaginaerumai-stopslop (last updated 2026-10-24)