DEV Community

Yan Std
Yan Std

Posted on Edited on Originally published at skills.sh

Why AI Detectors Flag Your Writing (And How to Actually Fix It - Not Bypass It)

You wrote something yourself. Or your AI assistant wrote it and you edited it heavily. Either way, the detector says "likely AI-generated". Your client asks questions. The editor raises an eyebrow, and suddenly a perfectly good piece of writing is treated like a confession.

Here is the uncomfortable truth: the detector is not reading your mind. It is reading your statistics. Once you understand which statistics, you can fix the real problem instead of fighting a black box.

This article breaks down the measurable patterns that make text "sound like AI", shows you how to find them in your own writing with a free open-source tool, and explains why "bypassing" is the wrong goal entirely.

TL;DR

  • Detectors and editors flag text for measurable reasons: uniform sentence rhythm, low burstiness (coefficient of variation of sentence lengths), repetitive vocabulary (MATTR), and template phrases ("in today's rapidly evolving landscape")
  • These patterns have names, numbers, and thresholds - they are not magic
  • You can scan your text locally with npx humanizer-lint - no account, no upload, zero network calls
  • The goal is not to "bypass AI detection". The goal is to write like a human, which happens to also read better

What "sounds like AI" actually means

Ask a writer why a paragraph sounds robotic and you get vibes. Ask a statistician and you get numbers. The main ones:

1. Burstiness - the rhythm fingerprint

Human writing is uneven. You write an 8-word sentence, then a 3-word punch, then a 31-word winding sentence that carries two side thoughts and lands on a callback nobody saw coming. This variation, which researchers measure as the coefficient of variation of sentence lengths across a passage, is called burstiness. Humans write high-burstiness prose. Language models, which predict one token at a time and drift toward the mean, produce startlingly even sentences. Low burstiness is the single strongest statistical tell.

2. Monotonous rhythm within paragraphs

Even when the total variation looks acceptable, AI text often falls into runs where sentence after sentence lands at 12, 13, 14 words with no relief. Readers feel this as monotony even when they cannot name it. Editors call it "flat prose". It is measurable as the standard deviation of adjacent sentence lengths, and it explains why even grammatically clean text can feel exhausting to read.

3. MATTR - vocabulary repetition

Moving-Average Type-Token Ratio tracks lexical diversity over a sliding window, which makes it harder to fake with a few fancy words early on. AI text tends to reuse the same comfortable words over long passages. Humans reach for weirder words more often, especially in technical writing where the subject itself drags in unusual vocabulary.

4. Slop phrases

The vocabulary tells. Individually, several of these are ordinary words:

  • "in today's rapidly evolving landscape"
  • "it is important to note that"
  • "furthermore", "moreover", "in conclusion"
  • "leverage", "delve", "paradigm shift"

Some are fine in context. The problem is density and predictability - when four sentences in a row each open with a template connector, no detector is needed to smell the machine.

Before and after: the same idea, measured

Here is a paragraph written the way models like to write it:

In today's rapidly evolving digital landscape, it is important to note that
AI-generated content has become increasingly prevalent. Furthermore, this
paradigm shift has revolutionized the way we approach content creation.
Moreover, businesses must leverage these cutting-edge technologies to stay
ahead of the curve. In conclusion, embracing these innovative solutions is
essential for success in the modern era.
Enter fullscreen mode Exit fullscreen mode

Run through the analyzer (more on that below): score 40/100, FAIL. Burstiness CV: 0.16. Every violation class fires - seven slop phrases, one monotonous run, low burstiness across the text.

Now the same idea, rewritten to actually vary:

AI-generated content is everywhere now. That part is obvious. What most
people miss is why editors and detectors flag it: not because it is wrong,
but because it is too even. Every sentence lands at the same length, and
every paragraph follows the same arc. Real writers do not write that way.
They lurch. They pause. A long, winding clause appears in the middle of a
paragraph, and then it lands on three words. That unevenness, which
researchers measure as burstiness and which every detector picks up on
indirectly, is what our linter checks first before it looks at anything else.
Enter fullscreen mode Exit fullscreen mode

Score 100/100, PASS. Burstiness CV jumped from 0.16 to 0.78. Nothing was "spun" or paraphrased with synonyms. The information is the same. The rhythm is different - and that is the whole game.

Scanning your own text (free, local, in 30 seconds)

The tool I use is Humanizer Lint - an open-source, zero-dependency Node.js CLI. The important part: it runs 100% locally. Your text never leaves your machine. For writers under NDA, students, and anyone pasting unpublished work, that matters. Most "humanizer" web tools paste your content straight into someone else's server.

# scan a file
npx humanizer-lint --file your-draft.md

# or pipe it
cat your-draft.md | npx humanizer-lint --stdin --lang en

# machine-readable output for CI pipelines
npx humanizer-lint --file draft.md --json
Enter fullscreen mode Exit fullscreen mode

Output looks like this:

Status: FAIL
Score: 40
Language: en

Violations:
  SLOP_PHRASE | Paragraph 1, Sentence 1 | Name the field or conditions directly.
  MONOTONOUS_RHYTHM | Paragraph 1, Sentences 2-4 | Sentence lengths are uniform (12, 13, 14 words).
  LOW_BURSTINESS | Whole text | Vary sentence lengths by splitting one uniform sentence...
Enter fullscreen mode Exit fullscreen mode

Every violation names the exact sentence and tells you what kind of fix applies. You make the call - the tool finds, you decide. That separation matters because a score is only a summary, while the findings are the actual work product: the exact phrase, the exact sentence, and your judgment on top of them.

It supports deep rule packs for English, Indonesian, Spanish, French, German, Portuguese, Malay, and Chinese, plus a universal stylometric mode for 100+ languages. The skill is also installable into AI coding agents (Claude Code, Hermes, Cursor) via the skills registry:

npx skills add yanstd888/humanizer-lint --skill humanizer-lint
Enter fullscreen mode Exit fullscreen mode

That way your agent lints its own drafts before you ever see them. There is also a browser demo if you just want to paste text quickly: humanizer.aiclub.ai.id (this one does run in your browser tab - the analysis is client-side, but pasting is still sending text to a web page, so use judgment for sensitive work; the CLI is the zero-trust option).

Why "bypassing" is the wrong goal

Search "how to bypass AI detection" and you find paraphrasing tools that swap synonyms until the detector relaxes. The text usually reads worse. Sometimes it reads insane. And detectors update, so the victory does not last.

The better frame: detectors are (imperfect) proxies for "does this read like a person wrote it with intention". Fix the intention problem and the detector problem mostly follows. Write with actual rhythm, cut the templates, name things directly - and you get prose that survives editors, readers, and yes, detectors. Not because you tricked them, but because the text genuinely has a human pulse.

(Are detectors themselves reliable? No - they have serious false-positive problems, especially with non-native English writers, which research has documented. That is exactly why understanding the underlying statistics matters: when a detector is wrong about your writing, these are the levers that explain why.)

A practical workflow

  1. Draft however you like - AI-assisted is fine, so is raw
  2. Read it once yourself. Cut anything you would not say out loud
  3. Run the linter, then read the findings one by one instead of chasing a perfect score, because the findings name the exact sentence and the exact pattern while the score only summarizes them
  4. Fix the rhythm problems first (they are the biggest readability win)
  5. Kill slop phrases by naming the specific thing instead of the category
  6. Re-run. Anything above ~80 with no systematic violations is usually fine to ship

The point is not 100. The point is prose that a reader finishes without feeling the machine.

Wrap-up

"Sounding like AI" is not a mystery. It is low burstiness, flat adjacent-sentence rhythm, repetitive vocabulary, and template phrases - all measurable, all fixable with ordinary editing. The tools are free and the analysis can run entirely on your machine.

Repo: github.com/yanstd888/humanizer-lint
Browser demo: humanizer.aiclub.ai.id
npm: npmjs.com/package/humanizer-lint
Skills-sh: https://www.skills.sh/yanstd888/humanizer-lint/humanizer-lint

If you found this useful, a star on the repo helps other writers find it. And if you run the linter on your own draft and find something interesting - a pattern I did not cover here - I would genuinely like to hear about it in the comments.

Top comments (0)