MIKEFLUFF.COMEN · 2026
Mikefluff
IOPEN SOURCE · MIT · v1.9

Stop writing like an LLM.

The only linter built for what LLMs produce — not for what humans get wrong.

A toolkit for cleaning the LLM out of LLM-assisted writing. Catches the tells in English and Russian, in under fifty milliseconds, with no model call. Twelve wrappers compose on top for the genres LLMs handle worst: landing copy, release notes, fiction, cold email, image and video prompts.

Install now
LIVE — WHAT THE LINTER CATCHES ON A REAL DRAFT
$ python3 writer/scripts/lint.py draft.md
writer-lint: neuroslop suspected (14 hits)
By category:
L1:32 MARKETING_HYPE 'revolutionary'
L1:47 MARKETING_HYPE 'game-changing'
L1:1 WEAK_OPENER "We're excited to"
L3:1 VAGUE_BENEFIT 'Save time'
L3:84 EMPTY_CTA 'Click here'
L3:59 MARKETING_HYPE 'world-class'
... 8 more

No model call, ~50 ms on a 5K-word file. Each hit carries category and severity. Same diagnosis on every machine — deterministic by design.

17
Skills
28
Linter categories
50ms
/ 5K-word file
MIT
License
IIWHY

Every LLM-assisted draft I shipped was starting to read like every other LLM-assisted draft.

The cost of writing with LLMs isn’t time — it’s that the drafts stop sounding like you. They start sounding like Claude’s version of you. Once you notice, you can’t unsee it: “it’s important to note that…”, “delve into the rich tapestry of…”, “in today’s fast-paced world…” — every LinkedIn post, every product update, every investor email wearing the same set of tells, all of them blurring into one voice. Readers spot it before you do.

So I built a tool that strips those tells. Then I extended it. Now it is one offline linter and seventeen agent skills, MIT-licensed, with one curl to install. The linter is pure Python — fifty milliseconds, deterministic, no model call, runs in any CI or on the command line. The skills are plain markdown specs; Claude Code loads them natively today, and any agent that reads markdown skills can use them tomorrow.

IIIWHAT’S IN THE BOX

One base linter, twelve wrappers, three audits, one meta.

Composed in layers. Each wrapper has a sharp `description:` field so Claude Code picks the right one without colliding with the others.

01BASE & PROSE WRAPPERS

Prose

The base `writer` linter plus five wrappers that shape the prose for a specific genre or register.

  • writerbase regex linter, 28 categories (EN + RU)
  • viral-texthooks, numbered points, NLP question, CTA
  • prose-editfiction (Pelevin / Manson voice vectors)
  • essay-writenon-fic longread, Manson coda, V/H/P markers
  • tone-shifterregister shifts (casual ↔ academic)
  • pelevin-digressionopinionated voice inserts
02PRODUCT & MARKETING

Product & marketing

Newer wrappers (v1.6+). Each ships banned-pattern catalogues plus before/after calibration pairs.

  • landing-copyhero, features, pricing, SEO, ads
  • release-notesKeep-a-Changelog, per-audience tone
  • rfc-writerRFCs / ADRs / Tech Specs (RFC 2119)
  • microcopyerror states, empty states, buttons
  • cold-email5-block, under 120 words, banned ceremony
  • image-promptMJ / DALL-E / Flux (6-part formula)
  • video-promptKling / Veo / Sora (beat structure)
03AUDITS & META

Audits & meta

Read-only — report and exit. Designed for CI gating. The meta-skill manages the collection itself.

  • style-checkpre-commit prose gate
  • translation-syncRU↔EN↔PT-BR parity
  • canon-checkstory-bible consistency
  • skills-updatechecks GitHub and applies new release
IVINSTALL

Four install paths, one destination.

Skills land in `~/.claude/skills/` and are auto-discovered when Claude Code restarts. No `settings.json` edits required.

curl

fastest
curl -fsSL https://raw.githubusercontent.com/Mikefluff/skills/main/install.sh | bash

No deps beyond bash + python3. macOS + Linux.

Updates, uninstall, and troubleshooting at docs/INSTALL.md.

NEWSLETTER

Get notified when the next skill ships.

New skill ideas, banned-pattern updates, and the occasional rewrite teardown. One email per release. Unsubscribe with a click.

No tracking, no third-party share. Just release notes.

VBEFORE & AFTER

The transformation, not the diagnosis.

A paragraph of landing-page slop on the left. The same paragraph after running `landing-copy` on the right. The linter report and the named changes below.

BEFORE — RAW DRAFT
We're excited to announce our revolutionary, game-changing platform — built by an industry-leading team using state-of-the-art technology.

Save time, boost productivity, and get more done with our world-class solution. Click here to learn more.
AFTER — landing-copy + writer (hypothetical rewrite)
Cut PR review-time from two days to four hours on the teams that adopted the workflow last quarter. Concrete numbers per team in the case studies.

See pricing — free for 30 days.
WRITER-LINT (BEFORE)

writer-lint: neuroslop suspected 14 hits By severity: blocker 0 caution 14 nit 0 Top categories: MARKETING_HYPE 6 VAGUE_BENEFIT 3 EMPTY_CTA 2 WEAK_OPENER 1 NE_X_A_Y 1 CORPORATE 1

NAMED CHANGES
  • Stripped excitement preamble ("we’re excited to announce") — release goes first, feeling second.
  • Replaced four hype adjectives with one specific number ("two days to four hours").
  • Replaced "industry-leading team" with three named customers — verifiable, not boastful.
  • Replaced three vague benefits ("save time / boost productivity / get more done") with the actual metric.
  • Replaced empty CTA ("Click here to learn more") with a destination verb ("See pricing") and a concrete offer ("free for the first 30 days").

Same word budget. The before sounds like every other LLM-generated landing. The after sounds like a product.

VIWHICH ONE DO I WANT?

Pick by what you’re writing, not by what the skill is called.

Twelve scenarios grouped by domain. Each row points to the skill — or chain of skills — that handles it.

01PROSE

Prose & long-form

  • Ship a chapter without canon driftprose-edit + canon-check
  • Publish a longread that doesn’t read AI-generatedessay-write
  • Post that reads like a person, not a thread botviral-text
  • Re-voice a passage without losing the meaningtone-shifter
02PRODUCT & MARKETING

Product & marketing

  • Ship a landing that doesn’t read like every other SaaSlanding-copy + microcopy
  • Release notes that engineers actually readrelease-notes
  • Cold email that gets opened in inboxes that filter you outcold-email
  • RFC that survives an honest reviewerrfc-writer
03VISUAL & AUDITS

Visual prompts & audits

  • Image prompt that produces what you imaginedimage-prompt
  • Video prompt with the camera you actually wantvideo-prompt
  • Stop AI-tells before they reach your repostyle-check
  • Catch translation drift across RU/EN/PT-BRtranslation-sync

Full taxonomy and fourteen named recipes at docs/SKILL-INDEX.md · docs/COMPOSING.md

VIIFAQ

Five answers people usually ask first.

  • 01

    What actually changes when I adopt this?

    Drafts stop coming back with "this sounds AI-generated" comments. First-pass cleanup goes from an hour to ten minutes. The voice you started writing in stays your voice instead of converging on Claude’s default. If the page you ship is your judgment instead of your model’s, the rest of the team starts treating it that way too.

  • 02

    How is this different from Grammarly, LanguageTool, or Hemingway?

    Grammarly catches grammar. LanguageTool catches typos and basic style. Hemingway catches sentence length and adverbs. None of them catch the specific patterns LLMs produce — "navigate the complexities", "rich tapestry", balance hedges, AI-style triplets, marketing hype ("revolutionary", "world-class"), excitement preambles ("we’re excited to announce"). This is purpose-built for the LLM-output problem, which is a different shape than human-error catching.

  • 03

    Why a regex linter? Wouldn’t an LLM judge do better?

    For pre-commit and CI gating, regex wins: ~50 ms vs 5-10 seconds, no API cost, deterministic, no LLM dependence. For nuanced rewriting, the wrappers do use the LLM — that is where context matters. The linter is the floor; the wrappers are the ceiling.

  • 04

    Russian-first sounds limiting. What about English?

    English coverage is now first-class — all 28 linter categories have EN patterns (the marketing-specific set added in v1.8 is EN-led). On a synthetic English neuroslop fixture, the linter fires 54 hits across 18 categories. Fourteen of seventeen skills support both languages. The three Russian-only skills are author- and language-specific.

  • 05

    Can I run the linter without Claude Code?

    Yes. `python3 writer/scripts/lint.py file.md` works standalone. The wrappers require Claude Code (they are LLM-driven by design). A Docker image exposes the linter for CI without any Python install on the host.

VIIITRY IT

Run the linter on your last draft.

MIT-licensed, no external deps, tested on real prose for over a year. Best thirty seconds you’ll spend this week.

The linter came out of the same habit as everything else here: name the thing precisely, then fix the named thing. It works on businesses too.

v1.9.1 · MIT · ghcr.io/mikefluff/skills · @mikefluff/skills