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

Writing that doesn’t give the model away.

You write with ChatGPT or Claude, and readers can tell from the first few lines. This kit finds those lines in your text and helps you rewrite them in your own words.

It’s free. The check runs on your own computer in under a second, and your text doesn’t go anywhere. For posts, landing pages, emails, release notes and fiction there are separate helpers that rewrite the text for its genre.

Install
No terminal? Check a text right in your browser →
RUN ON A LANDING-PAGE 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

Every finding carries a category and a severity, from a hard error down to a nit, so you can see what to fix first. The report comes out the same on any machine.

17
Skills
28
Linter categories
50ms
per 5,000-word file
MIT
License
IIWHY

Write with a model long enough and you start writing in its voice.

A model makes drafting faster, but the draft slowly fills up with the same phrases: “it’s important to note that…”, “delve into the rich tapestry of…”, “in today’s fast-paced world…”. Once you notice them, you find them everywhere, in LinkedIn posts and in investor updates. Readers recognize them in the first line and start skimming.

It started as a script that found these phrases in my own drafts. Rules for particular genres grew around it, and the result is a set of seventeen skills with the linter as the first of them. The set is on GitHub under the MIT license and installs in about thirty seconds. The linter is a plain Python script you add to CI with one line. Each skill is a markdown file: Claude Code picks them up after a restart.

IIIWHAT’S INSIDE

A linter, twelve genre skills, three checks and an updater.

A genre skill rewrites the text, and the result then goes through the linter again. Each skill’s `description:` field says when to call it, so Claude Code doesn’t mix up similar skills.

01PROSE

Prose

The writer linter and five skills that fit prose to a genre and a register.

  • writerregex linter, 28 categories, English and Russian
  • viral-textsocial posts with a hook, numbered points, a question to the reader and a call to action
  • prose-editfiction editing with a Pelevin or Manson voice
  • essay-writeessays and longreads with an ironic Manson-style ending and V/H/P markers for hypotheses
  • tone-shiftermoves text between a casual and an academic register
  • pelevin-digressionPelevin-style authorial digressions
02PRODUCT & MARKETING

Product and marketing

These skills arrived in version 1.6. Each carries a banned-phrase list for its genre and before/after pairs to test its output against.

  • landing-copyhero, feature blocks, pricing, SEO and ads
  • release-notesrelease notes in Keep a Changelog format, one version for engineers and one for customers
  • rfc-writerRFCs, ADRs and technical specs following RFC 2119
  • microcopyerror messages, empty states and buttons
  • cold-emaila five-part cold email under 120 words
  • image-promptprompts for Midjourney, DALL-E and Flux built on a six-part formula
  • video-promptprompts for Kling, Veo and Sora, laid out shot by shot
03CHECKS

Checks and updates

The checks only write a report and change nothing, which makes them easy to run before a commit or in CI. skills-update installs new versions.

  • style-checkchecks prose before a commit
  • translation-synccompares the English and Portuguese translations with the Russian original
  • canon-checkchecks a chapter against the story bible
  • skills-updateupdates the set when a new version is out
IVINSTALL

There are four ways to install.

The first three copy the skills into `~/.claude/skills/`, where Claude Code finds them after a restart, with no changes to `settings.json`. The Docker image is for CI and installs nothing on your machine.

curl

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

Needs only bash and python3; works on macOS and Linux.

Updating, uninstalling and fixing a failed install are covered in docs/INSTALL.md.

NEWSLETTER

I’ll write when a new version ships.

One email per release: which skills were added, which phrases joined the banned list, and now and then a before-and-after teardown of one text. Every email has an unsubscribe link.

I don’t share your address with anyone, and the emails carry no tracking.

VBEFORE AND AFTER

A landing-page paragraph before and after landing-copy.

On the left, the paragraph a model writes for a landing page when nobody stops it. On the right, the same paragraph after `landing-copy`. Below them, the linter report on the original and the list of edits.

BEFORE
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
For teams that switched to our process last quarter, a pull request review takes four hours instead of two days. The numbers for each team are on the case-study page.

Free for the first 30 days; pricing is on its own page.
LINTER REPORT ON THE ORIGINAL

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

WHAT CHANGED
  • The paragraph opens with the result; “we’re excited to announce” is gone.
  • The hype adjectives gave way to a result you can check: four hours of review instead of two days.
  • “Industry-leading team” became case studies with per-customer numbers.
  • The generic promises “save time”, “boost productivity” and “get more done” are gone; the same number stands in for them.
  • “Click here to learn more” is replaced by a reason to click: the first 30 days are free.

The original could sit on any website; the rewrite describes one product.

VIWHICH SKILL

What are you writing?

Next to each one is the skill, or chain of skills, that handles it.

01PROSE

Prose and longreads

  • A chapter that doesn’t contradict the canonprose-edit + canon-check
  • A longread without the model’s fingerprintsessay-write
  • A post in your own voiceviral-text
  • The same paragraph in a different registertone-shifter
02PRODUCT & MARKETING

Product and marketing

  • A landing page without ad-speaklanding-copy + microcopy
  • Release notes engineers read to the endrelease-notes
  • A cold email that gets readcold-email
  • An RFC that survives a tough reviewrfc-writer
03IMAGES, VIDEO, CHECKS

Images, video and checks

  • An image the way you pictured itimage-prompt
  • Video with the camera move you wantvideo-prompt
  • A repository without the model’s phrasesstyle-check
  • A translation that stays true to the originaltranslation-sync

Every category and fourteen ready-made recipes are in docs/SKILL-INDEX.md · docs/COMPOSING.md

VIIQUESTIONS

Questions I get asked.

  • 01

    What changes once it’s installed?

    The linter finds the model’s phrases before an editor or a reader does. On my drafts the first cleanup pass now takes about ten minutes; it used to take an hour. The voice stays yours instead of drifting toward Claude’s.

  • 02

    How is this different from Grammarly, LanguageTool or Hemingway?

    Grammarly checks grammar, LanguageTool finds typos and simple style mistakes, and Hemingway watches sentence length and adverbs. None of them looks for a language model’s phrasing, because they were built around human mistakes. A model writes “navigate the complexities” and “rich tapestry”, hedges for the sake of looking balanced, groups abstract nouns in threes, reaches for “revolutionary” and “world-class”, and opens with “we’re excited to announce”.

  • 03

    Why regular expressions when a model could do the checking?

    A CI check runs on every commit. Regular expressions need 50 ms per file, while a model needs 5 to 10 seconds and an API bill, and on the same text regular expressions always produce the same report. Rewriting text well takes an understanding of meaning, so the genre skills do use a model, and the linter then checks what they produced.

  • 04

    The set started in Russian. How does it handle English?

    The linter works on English the same way it works on Russian. All 28 categories have English patterns, and the marketing categories added in version 1.8 were written in English first. On a test text written in English by a model, the linter finds 54 problems across 18 categories. Fourteen of the seventeen skills work in both languages; three are tied to Russian because they edit authorial style.

  • 05

    Can I run the linter without Claude Code?

    Yes, `python3 writer/scripts/lint.py file.md` runs on its own. Everything except the linter needs Claude Code, and the genre skills use the model to rewrite. For CI there is a Docker image, so you don’t need Python on the machine.

VIIITRY IT

Run the linter on your latest draft.

The linter needs nothing but Python. I have been checking my own writing with it for more than a year.

I work with businesses the same way: find what is broken first, then fix it.

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