I built a tool to catch myself writing like a robot

Humanizer detects AI writing patterns in text. Here's why I built it and what I learned about how LLMs actually write.
I built a tool to catch myself writing like a robot

I write with AI every day. Claude helps me draft, edit, brainstorm. It’s useful. But I noticed something: my own writing started sounding off. Generic. Like I was channeling corporate blog energy even when writing personal stuff.

So I built Humanizer.

The problem

AI-generated text has patterns. Not the obvious ones like “As an AI language model…” Those are easy to spot. I’m talking about structural tics that make text feel processed.

Significance inflation. Everything becomes a “transformative approach” or “groundbreaking methodology.” AI loves making mundane things sound historic.

Vague attribution. AI writes “Experts agree…” without naming who. Which experts? What study? It hedges because it can’t cite.

The -ing tail. Sentences that end with “…highlighting the importance of continued innovation” or “…demonstrating the potential for future growth.” Filler.

Synonym cycling. Using “platform” then “solution” then “ecosystem” then “framework” for the same thing. AI was trained to avoid repetition, so it rotates through synonyms like a thesaurus on shuffle.

Once you see these patterns, you can’t unsee them.

What it does

Humanizer is a CLI that scores text for AI patterns. Feed it a document, get back:

  1. Pattern detection across 28 categories (content, language, style, filler)
  2. Vocabulary flagging for 560+ known AI-isms across three severity tiers
  3. Statistical analysis: burstiness, type-token ratio, readability scores

The output tells you what’s triggering and where. You fix it or you don’t.

humanizer score "Your text here" --verbose

What I learned

Building this taught me things about LLM output that I didn’t expect.

Human writing has rhythm. Short sentences. Then longer ones with more complexity. Then short again. AI flattens this. Every sentence comes out roughly the same length. Humanizer measures “burstiness” to catch this.

Hedging is a tell. Phrases like “it’s worth noting” or “it’s important to consider” are padding. AI models get trained to be non-committal. Real writers state things and move on.

The vocabulary is narrow. AI loves certain words: delve, tapestry, vibrant, leverage, synergy. These get flagged as Tier 1 violations. Less obvious ones like foster or nuanced are Tier 2. Together they create that unmistakable GPT-essay smell.

Integrations

The CLI is fine for one-off checks, but I wanted this running inside my AI tools.

MCP Server works with Claude Desktop, VS Code, and anything that supports Model Context Protocol:

# Add to Claude Desktop config
{
  "mcpServers": {
    "humanizer": {
      "command": "node",
      "args": ["/path/to/humanizer/mcp-server/index.js"]
    }
  }
}

OpenAI Custom GPT gets the rules baked in. Copy openai-gpt/instructions.md into a new GPT, optionally wire up the API for live scoring.

HTTP API for custom integrations:

curl -X POST http://localhost:3000/api/score \
  -H "Content-Type: application/json" \
  -d '{"text": "This serves as a testament to innovation."}'

Returns {"score": 62, "badge": "🟠"}.

OpenClaw skill installs from ClawHub:

clawhub install ai-humanizer

All four methods give you the same 28 patterns and vocabulary checks. Pick whatever fits your workflow.

Using it

I run this on my own drafts now. Not to game detectors. Those are mostly snake oil anyway. I run it to catch myself slipping into robot mode.

The rules are baked into how I work:

  • If I wouldn’t say it out loud, I rewrite it
  • Specifics over generalizations
  • One word for one concept
  • Let the reader decide if something is important

The repo is MIT licensed. 211 tests, zero runtime deps, works as a CLI or OpenClaw skill.

Take it, break it, tell me what’s missing.