Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
"name": "humanizer",
"description": "Rewrite AI-sounding text so it reads naturally without changing what it says.",
"version": "2.11.2",
"version": "2.12.0",
"author": {
"name": "blader",
"url": "https://github.com/blader"
Expand Down
8 changes: 6 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ Humanizer rewrites AI-sounding text so it reads like a person wrote it, without

## How it works

Humanizer uses 35 patterns from Wikipedia's ["Signs of AI writing"](https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing), maintained by WikiProject AI Cleanup. It makes a first pass without treating the original structure as fixed. Then it checks the draft against those patterns and the original claims before rewriting whatever still needs work.
Humanizer uses 38 patterns from Wikipedia's ["Signs of AI writing"](https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing), maintained by WikiProject AI Cleanup. It makes a first pass without treating the original structure as fixed. Then it checks the draft against those patterns and the original claims before rewriting whatever still needs work.

> "LLMs use statistical algorithms to guess what should come next. The result tends toward the most statistically likely result that applies to the widest variety of cases."

Expand Down Expand Up @@ -52,7 +52,7 @@ Now humanize this text:

Humanizer follows the sample's rhythm, word choice, punctuation, and deliberate quirks.

## The 35 patterns
## The 38 patterns

### Content patterns

Expand All @@ -64,6 +64,7 @@ Humanizer follows the sample's rhythm, word choice, punctuation, and deliberate
| 4 | **Sales language** | "nestled within the breathtaking region" | "is a town in the Gonder region" |
| 5 | **Vague sources** | "Experts believe it plays a crucial role" | Name a real source or remove the claim |
| 6 | **Formulaic challenges and outlook** | "Despite challenges... continues to thrive" | Keep the facts and remove the sales pitch |
| 36 | **Empty population claims** | "Almost no one measures this", "a problem nobody named" | Give real evidence or say you don't know how common it is |

### Language and grammar patterns

Expand Down Expand Up @@ -113,6 +114,8 @@ Humanizer follows the sample's rhythm, word choice, punctuation, and deliberate
| 23 | **Filler phrases** | "In order to", "Due to the fact that" | "To", "Because" |
| 24 | **Too many qualifiers** | "could potentially possibly" | "may" |
| 25 | **Generic positive endings** | "The future looks bright" | End with a fact or a sourced plan |
| 37 | **Hedge then overstate** | "It's worth noting that X is the single most important..." | Make the claim and back it, or make a smaller claim |
| 38 | **Unearned superlatives** | "the most important thing", "the single source of truth" | Defend the ranking, attribute it, or demote it |

## Full example

Expand Down Expand Up @@ -154,6 +157,7 @@ Humanizer follows the sample's rhythm, word choice, punctuation, and deliberate
<details>
<summary>Show release notes</summary>

- **2.12.0** - Added three patterns: empty population claims (36), hedge then overstate (37), and unearned superlatives (38). Extended the section 7 word list with the passive-narrator (flagged, surfaced, noted) and filler-adjective (significant, substantive, substantial) families.
- **2.11.2** - Removed the plugin symlink and separate Claude Desktop package. Current Claude Code loads the root `SKILL.md` directly, so GitHub's source ZIP now works in Claude Desktop. No change to the 35 patterns.
- **2.11.1** - Added a Claude Desktop-ready release package with one regular `humanizer/SKILL.md` file. GitHub's source archive still keeps the plugin symlink (fixes #224). No change to the 35 patterns.
- **2.11.0** - Rewrote all repo guidance, descriptions, checks, and skill instructions in Plain Language. Kept all 35 patterns and their behavior.
Expand Down
37 changes: 34 additions & 3 deletions SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ description: |
voice, filler, or chatbot artifacts. Based on Wikipedia's "Signs of AI writing."
license: MIT
metadata:
version: "2.11.2"
version: "2.12.0"
---

# Humanizer: remove AI writing patterns
Expand Down Expand Up @@ -111,8 +111,8 @@ Add details such as dates or public actions only when they come from the source

### 7. Overused AI words

**High-frequency AI words:** Actually, additionally, align with, crucial, delve, emphasizing, enduring, enhance, fostering, garner, gate/gated/gating (figurative; preserve established technical usage), highlight (verb), interplay, intricate/intricacies, key (adjective), landscape (abstract noun), pivotal, quietly, showcase, tapestry (abstract noun), testament, underscore (verb), valuable, vibrant
**Problem:** AI writing uses these words much more often than most people do, especially in groups.
**High-frequency AI words:** Actually, additionally, align with, crucial, delve, emphasizing, enduring, enhance, flagged (passive narrator), fostering, garner, gate/gated/gating (figurative; preserve established technical usage), highlight (verb), interplay, intricate/intricacies, key (adjective), landscape (abstract noun), noted (writer-as-narrator), pivotal, quietly, showcase, significant/substantive/substantial (filler adjectives), surface (verb), surfaced, tapestry (abstract noun), testament, underscore (verb), valuable, vibrant
**Problem:** AI writing uses these words much more often than most people do, especially in groups. Two families are worth naming. *Passive narrator* (flagged, surfaced, noted) points at something without saying who pointed: if you can name the actor, use a direct verb such as *raised* or *warned about*; if you can't, the sentence is hiding the actor. *Filler adjectives* (significant, substantive, substantial) claim importance without backing it up: strip the word, and if the sentence still works, it was filler.
**Before:**
> Additionally, a distinctive feature of Somali cuisine is the incorporation of camel meat. An enduring testament to Italian colonial influence is the widespread adoption of pasta in the local culinary landscape, showcasing how these dishes have integrated into the traditional diet.
**After:**
Expand Down Expand Up @@ -390,6 +390,37 @@ Remove only the unsupported defense. If it contains a real claim, state that cla

One rejected option may be valid. Several short, unrelated rejections are a stronger sign. Ask what new information each sentence adds. If it only records an earlier edit, rewrite the paragraph around its main point.

### 36. Empty population claims

**Phrases to watch:** almost no one, hardly anyone, nobody is doing, everybody is, most people, most teams, the entire industry, the whole community, virtually no, practically no one. Relative-clause variant: "[X] that nobody [verb-ed]" or "[X] nobody [verb-ed]", such as "a problem nobody named" or "a question nobody asked". Inverse form: "everyone knows X", "we all do Y", "we've all seen this".
**Problem:** These sound empirical but cannot be checked. They lean on evidence the writer never gathered. The relative-clause variant hides the same unprovable claim inside a descriptor: "a problem nobody named" asserts that zero people named it, which the writer has no way to defend. If you have specific evidence, give it. If you don't, write "I don't know how common this is" instead of implying a count.
**Before:**
> Almost no one measures this in production. Hardly anyone in the field has solved it, and most teams just work around it.
**After:**
> Two of the seven teams I surveyed measured it. The rest worked around it, and none had a written policy.
**Before (relative-clause variant):**
> The argument usually comes down to an assumption nobody stated.
**After:**
> The argument usually comes down to an assumption neither side put in writing.

### 37. Hedge then overstate

**Phrases to watch:** "It's worth noting that... [strong claim]", "arguably... [absolute claim]", "in some sense... [definite statement]", "to some extent... critically", "broadly speaking... fundamentally"
**Problem:** A soft opener paired with a strong claim in the same sentence. The hedge gives the writer room to retreat while the superlative does the real asserting, so the reader has to guess how much the writer means. Strip the hedge and the sentence becomes a plain claim; strip the superlative and it says nothing. Pick one: make the claim and back it, or make the smaller claim and own it.
**Before:**
> It's worth noting that caching is the single most important optimization here. Arguably, it changes everything about how the service scales.
**After:**
> Caching is the main optimization here. It roughly halves the median response time under load.

### 38. Unearned superlatives

**Phrases to watch:** "the most [adjective]", "the single [noun]", "the biggest/fastest/cheapest/best/worst", "the primary", "the critical/essential/vital", "the only [noun] that [verb]", "the source of truth"
**Problem:** A superlative claims a ranking the text has not established. "The most important feature" and "the single source of truth" read as slogans unless the surrounding sentences show the comparison or the phrase is quoted from a named source. Keep a superlative only when it is defended nearby or attributed. Otherwise demote it ("the most" to "a major", "the single source of truth" to "the canonical copy") or drop it and let the noun carry the point.
**Before:**
> Indexing is the most important thing you can do for query speed, and the query planner is the single source of truth for how a statement runs.
**After:**
> Indexing usually gives the largest gain in query speed. The query planner decides how each statement runs, so read its output before changing an index.

## Check for false positives

### What not to flag
Expand Down