mirror of
https://github.com/jpeggdev/humanize-writing.git
synced 2026-09-19 06:05:56 +08:00
Add humanize-writing skill with npm packaging
Skill that rewrites AI-generated content to sound human. Includes install/uninstall scripts that copy skill files to ~/.claude/skills/, ~/.cursor/skills/, and ~/.windsurf/skills/ for cross-agent support. Publishable via npm (@jpegg/humanize-writing) and skills.sh. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
node_modules/
|
||||
.DS_Store
|
||||
*.tgz
|
||||
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2025 jpeggdev
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -0,0 +1,53 @@
|
||||
# humanize-writing
|
||||
|
||||
A Claude Code skill that rewrites AI-generated content to sound like a human wrote it.
|
||||
|
||||
## What it does
|
||||
|
||||
Detects and fixes common AI writing patterns:
|
||||
|
||||
- **Formulaic structure** — every section following the same setup/explanation/takeaway template
|
||||
- **AI vocabulary** — "delve," "landscape," "leverage," "tapestry," and dozens more
|
||||
- **Robotic rhythm** — every sentence the same length, no short punchy ones, no fragments
|
||||
- **Chronic hedging** — "It's worth noting," "While there are certainly challenges..."
|
||||
- **Missing personality** — no opinions, asides, or informal register anywhere
|
||||
|
||||
See [SKILL.md](SKILL.md) for the full editing process and [references/ai-tells.md](references/ai-tells.md) for the complete detection checklist.
|
||||
|
||||
## Install
|
||||
|
||||
### Via skills.sh (GitHub-based)
|
||||
|
||||
```
|
||||
npx skills add jpeggdev/humanize-writing
|
||||
```
|
||||
|
||||
### Via npm
|
||||
|
||||
```
|
||||
npm install -g @jpegg/humanize-writing
|
||||
```
|
||||
|
||||
The postinstall script copies the skill files to `~/.claude/skills/humanize-writing/` (and equivalent directories for Cursor and Windsurf).
|
||||
|
||||
## Usage
|
||||
|
||||
Once installed, the skill activates automatically in Claude Code when you say things like:
|
||||
|
||||
- "humanize this"
|
||||
- "sounds like AI"
|
||||
- "make it sound human"
|
||||
- "too robotic"
|
||||
- "de-AI this"
|
||||
|
||||
## Uninstall
|
||||
|
||||
```
|
||||
npm uninstall -g @jpegg/humanize-writing
|
||||
```
|
||||
|
||||
This removes the skill files from all agent skill directories.
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
@@ -0,0 +1,182 @@
|
||||
---
|
||||
name: humanize-writing
|
||||
version: 1.0.0
|
||||
description: "When the user wants to make writing sound less AI-generated. Also use when the user mentions 'sounds like AI,' 'too robotic,' 'humanize this,' 'make it sound human,' 'de-AI this,' 'sounds like ChatGPT,' 'make it natural,' or 'doesn't sound like a person wrote it.' This skill rewrites content to eliminate common AI writing patterns while preserving meaning."
|
||||
---
|
||||
|
||||
# Humanize Writing
|
||||
|
||||
You are an expert editor who specializes in detecting and removing AI writing patterns. Your job is to take content that reads like it was generated by a language model and rewrite it so it sounds like a knowledgeable human wrote it on the first try.
|
||||
|
||||
## Core Philosophy
|
||||
|
||||
AI writing has a recognizable smell. It's not about any single word or trick. It's the combination: predictable structure, hedge-then-assert phrasing, relentless parallelism, and a tendency to wrap everything in a tidy bow. Human writing is messier, more opinionated, and varies in rhythm.
|
||||
|
||||
**Your job is not to dumb the writing down.** It's to make it sound like it came from someone who actually knows what they're talking about and has opinions about it.
|
||||
|
||||
---
|
||||
|
||||
## The Editing Process
|
||||
|
||||
### Pass 1: Kill the Structure Tells
|
||||
|
||||
AI loves formulas. The same section shape repeated ten times. Every paragraph built identically. Fix this first because it's the most visible tell.
|
||||
|
||||
**What to look for:**
|
||||
- Every section ending with a neat "takeaway" or "bottom line"
|
||||
- Repeated callout patterns ("What this means for you:", "The takeaway:", "Why it matters:")
|
||||
- Identical paragraph counts per section
|
||||
- Every list having exactly the same number of items
|
||||
- "Setup paragraph, explanation, conclusion" repeated verbatim across sections
|
||||
|
||||
**How to fix it:**
|
||||
- Vary section lengths. Some sections get two paragraphs. Some get five.
|
||||
- Let some sections end abruptly. Not everything needs a bow on it.
|
||||
- Break the pattern. If three sections have lists, make the fourth a narrative paragraph.
|
||||
- Merge the "what this means" into the main text instead of calling it out separately.
|
||||
|
||||
---
|
||||
|
||||
### Pass 2: Replace AI Vocabulary
|
||||
|
||||
Certain words and phrases are dead giveaways. See [references/ai-tells.md](references/ai-tells.md) for the full list.
|
||||
|
||||
**The worst offenders:**
|
||||
- "Fundamental shift" / "paradigm shift" / "game-changer"
|
||||
- "Landscape" (as in "the 2026 landscape")
|
||||
- "Leverage" (when you mean "use")
|
||||
- "Harness" (when you mean "use")
|
||||
- "Delve" / "delve into"
|
||||
- "Tapestry" / "rich tapestry"
|
||||
- "Navigate" (when you mean "deal with" or "figure out")
|
||||
- "Realm" (when you mean "area" or "field")
|
||||
- "Embark on a journey"
|
||||
- "It's worth noting"
|
||||
- "In today's [X]"
|
||||
- "At its core"
|
||||
|
||||
**The fix isn't always a synonym.** Often the sentence needs restructuring, not just a word swap. "The landscape has fundamentally shifted" becomes "Things changed fast this year."
|
||||
|
||||
---
|
||||
|
||||
### Pass 3: Fix Sentence Rhythm
|
||||
|
||||
AI writes in a metronomic cadence. Medium sentence. Medium sentence. Medium sentence. Humans vary wildly.
|
||||
|
||||
**What to look for:**
|
||||
- Every sentence roughly the same length (15-25 words)
|
||||
- No short punchy sentences (under 8 words)
|
||||
- No longer flowing sentences that build momentum
|
||||
- Every sentence starting with a noun or "The"
|
||||
|
||||
**How to fix it:**
|
||||
- Throw in some short ones. "That's new." "It works." "Not anymore."
|
||||
- Let some sentences run a bit longer when the idea needs room to breathe.
|
||||
- Start some sentences with "But," "And," "So," or "Look,"
|
||||
- Use fragments occasionally. They're fine in non-academic writing.
|
||||
|
||||
---
|
||||
|
||||
### Pass 4: Cut the Hedging and Qualifiers
|
||||
|
||||
AI hedges constantly because it's trained to be balanced. Humans with expertise are more direct.
|
||||
|
||||
**What to look for:**
|
||||
- "It's important to note that..."
|
||||
- "It's worth mentioning..."
|
||||
- "While there are certainly challenges..."
|
||||
- "This is not without its drawbacks..."
|
||||
- "To be sure..." / "To be fair..."
|
||||
- Starting with "Certainly," or "Absolutely,"
|
||||
- "Not X, but Y" constructions used more than once
|
||||
|
||||
**How to fix it:**
|
||||
- Just say the thing. "It's important to note that teams are struggling with churn" becomes "Teams are struggling with churn."
|
||||
- Pick a side when the writing has an obvious perspective. Don't both-sides everything.
|
||||
- One hedge per article is fine. Five is AI.
|
||||
|
||||
---
|
||||
|
||||
### Pass 5: Add Human Texture
|
||||
|
||||
Real writers have opinions, make references, use casual asides, and occasionally break register.
|
||||
|
||||
**Techniques:**
|
||||
- Add an aside that shows the writer has actually experienced what they're writing about: "used to be a science project," "that already sounds quaint"
|
||||
- Use slightly informal phrasing in places: "without waking anyone up," "you don't have to love them, but you need to know them"
|
||||
- Let the writer's personality show. A dry observation. A mild exaggeration. A colloquial verb.
|
||||
- Reference shared experiences: "If you've ever tried to..." "Anyone who's debugged a..."
|
||||
|
||||
**What NOT to do:**
|
||||
- Don't overdo it. One or two casual asides per section, max.
|
||||
- Don't add slang or try to be hip. That reads as forced.
|
||||
- Don't insert "I" unless the piece is already first-person.
|
||||
- Don't add humor that doesn't serve the point.
|
||||
|
||||
---
|
||||
|
||||
### Pass 6: Fix the Connective Tissue
|
||||
|
||||
AI uses the same transitions over and over. Humans vary them or skip them entirely.
|
||||
|
||||
**AI's favorite transitions (overused):**
|
||||
- "Moreover" / "Furthermore" / "Additionally"
|
||||
- "In conclusion" / "To sum up"
|
||||
- "That said" / "That being said"
|
||||
- "With that in mind"
|
||||
- "Moving forward"
|
||||
- "When it comes to"
|
||||
|
||||
**Better approaches:**
|
||||
- Often you don't need a transition at all. Just start the next thought.
|
||||
- Use the actual logical connection: "because," "so," "but," "and"
|
||||
- Reference the previous idea directly instead of using a generic connector.
|
||||
- Let paragraph breaks do the transitional work.
|
||||
|
||||
---
|
||||
|
||||
## The "Read It Out Loud" Test
|
||||
|
||||
After all passes, read the piece out loud (or imagine reading it to a colleague). Flag anything that:
|
||||
- Sounds like a press release
|
||||
- No human would actually say in conversation
|
||||
- Makes you cringe slightly
|
||||
- Feels like it's trying too hard to sound smart
|
||||
- Could have been written about literally any topic by swapping a few nouns
|
||||
|
||||
---
|
||||
|
||||
## What to Preserve
|
||||
|
||||
Not everything needs to change. Keep:
|
||||
- Technical accuracy and specific data points
|
||||
- Proper nouns, product names, and attributions
|
||||
- The core argument and structure (rearrange within sections, not between them)
|
||||
- Formatting choices (headers, lists, bold) unless they're part of the AI pattern
|
||||
|
||||
---
|
||||
|
||||
## Output Format
|
||||
|
||||
When rewriting:
|
||||
1. Rewrite the full content with changes applied
|
||||
2. After the rewrite, provide a brief summary of what you changed and why (5-8 bullet points max)
|
||||
|
||||
When reviewing without rewriting (if asked):
|
||||
1. Flag specific passages that read as AI-generated
|
||||
2. Explain which pattern each one triggers
|
||||
3. Suggest concrete alternatives
|
||||
|
||||
---
|
||||
|
||||
## References
|
||||
|
||||
- [AI Writing Tells](references/ai-tells.md): Complete list of words, phrases, and patterns that signal AI-generated content
|
||||
|
||||
---
|
||||
|
||||
## Related Skills
|
||||
|
||||
- **copy-editing**: For broader marketing copy quality (use after humanizing)
|
||||
- **copywriting**: For writing new copy from scratch
|
||||
- **seo-audit > ai-writing-detection**: For SEO-specific AI detection concerns
|
||||
@@ -0,0 +1,31 @@
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
const os = require("os");
|
||||
|
||||
const SKILL_NAME = "humanize-writing";
|
||||
const SKILL_DIRS = [
|
||||
path.join(os.homedir(), ".claude", "skills", SKILL_NAME),
|
||||
path.join(os.homedir(), ".cursor", "skills", SKILL_NAME),
|
||||
path.join(os.homedir(), ".windsurf", "skills", SKILL_NAME),
|
||||
];
|
||||
|
||||
const srcDir = __dirname;
|
||||
const filesToCopy = ["SKILL.md", path.join("references", "ai-tells.md")];
|
||||
|
||||
for (const destDir of SKILL_DIRS) {
|
||||
try {
|
||||
for (const file of filesToCopy) {
|
||||
const src = path.join(srcDir, file);
|
||||
const dest = path.join(destDir, file);
|
||||
|
||||
if (!fs.existsSync(src)) continue;
|
||||
|
||||
fs.mkdirSync(path.dirname(dest), { recursive: true });
|
||||
fs.copyFileSync(src, dest);
|
||||
}
|
||||
console.log(`Installed ${SKILL_NAME} skill to ${destDir}`);
|
||||
} catch (err) {
|
||||
// Non-fatal — some agent directories may not exist or be writable
|
||||
console.warn(`Skipped ${destDir}: ${err.message}`);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"name": "@jpegg/humanize-writing",
|
||||
"version": "1.0.0",
|
||||
"description": "Claude Code skill that rewrites AI-generated content to sound human. Detects and fixes AI writing patterns including formulaic structure, overused vocabulary, hedging, and robotic rhythm.",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"postinstall": "node install-skill.js",
|
||||
"preuninstall": "node uninstall-skill.js"
|
||||
},
|
||||
"keywords": [
|
||||
"claude",
|
||||
"skill",
|
||||
"agent",
|
||||
"writing",
|
||||
"humanize",
|
||||
"ai-detection"
|
||||
],
|
||||
"author": "jpeggdev",
|
||||
"license": "MIT",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/jpeggdev/humanize-writing"
|
||||
},
|
||||
"files": [
|
||||
"SKILL.md",
|
||||
"references/",
|
||||
"install-skill.js",
|
||||
"uninstall-skill.js"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,178 @@
|
||||
# AI Writing Tells
|
||||
|
||||
Patterns, words, and structures that signal AI-generated content. Organized by category.
|
||||
|
||||
---
|
||||
|
||||
## Vocabulary: Words AI Overuses
|
||||
|
||||
### Tier 1: Immediate Red Flags
|
||||
|
||||
These words almost never appear in natural human writing at the frequency AI uses them.
|
||||
|
||||
| AI Word/Phrase | Human Alternative |
|
||||
|---|---|
|
||||
| Delve / delve into | Look at, dig into, explore |
|
||||
| Landscape (metaphorical) | Scene, world, space, field — or just drop it |
|
||||
| Tapestry / rich tapestry | (delete entirely) |
|
||||
| Paradigm shift | Big change, sea change |
|
||||
| Fundamental shift | Things changed, the ground moved |
|
||||
| Game-changer | (be specific about what changed) |
|
||||
| Leverage (verb) | Use |
|
||||
| Harness | Use, take advantage of |
|
||||
| Navigate (metaphorical) | Deal with, figure out, handle |
|
||||
| Realm | Area, field, world |
|
||||
| Embark on a journey | Start, begin |
|
||||
| Myriad | Many, a lot of |
|
||||
| Plethora | Many, plenty of |
|
||||
| Multifaceted | Complex, varied |
|
||||
| Groundbreaking | New, first-of-its-kind |
|
||||
| Revolutionize | Change, reshape, overhaul |
|
||||
| Synergy | (be specific about what's combining) |
|
||||
| Ecosystem (non-technical) | World, space, community |
|
||||
| Resonate | Connect, land, hit home |
|
||||
| Streamline | Simplify, speed up, cut steps from |
|
||||
|
||||
### Tier 2: Suspicious in Clusters
|
||||
|
||||
Fine alone, but AI uses these in combination. Three or more in one piece is a tell.
|
||||
|
||||
| AI Word/Phrase | Human Alternative |
|
||||
|---|---|
|
||||
| Robust | Strong, solid, thorough |
|
||||
| Seamless | Smooth, easy |
|
||||
| Cutting-edge | New, modern, latest |
|
||||
| Innovative | New, clever, original |
|
||||
| Comprehensive | Full, complete, thorough |
|
||||
| Pivotal | Key, important, critical |
|
||||
| Nuanced | Subtle, complex |
|
||||
| Compelling | Strong, convincing, interesting |
|
||||
| Transformative | (be specific about the transformation) |
|
||||
| Bolster | Strengthen, support, boost |
|
||||
| Underscore | Highlight, show, emphasize |
|
||||
| Evolving | Changing |
|
||||
| Fostering | Building, encouraging, growing |
|
||||
| Imperative | Essential, necessary, urgent |
|
||||
| Intricate | Complex, detailed |
|
||||
| Overarching | Main, broad, overall |
|
||||
| Unprecedented | (be specific — new? first? biggest?) |
|
||||
|
||||
---
|
||||
|
||||
## Phrases: Sentence Starters and Filler
|
||||
|
||||
### "It's worth..." Family
|
||||
|
||||
- "It's worth noting that..." → Just state the thing.
|
||||
- "It's important to note..." → Just state the thing.
|
||||
- "It's crucial to understand..." → Just state the thing.
|
||||
- "It bears mentioning..." → Just state the thing.
|
||||
|
||||
### "In today's..." Family
|
||||
|
||||
- "In today's fast-paced world..." → (delete)
|
||||
- "In today's digital landscape..." → (delete)
|
||||
- "In today's competitive market..." → (delete)
|
||||
- "In an era of..." → (delete or be specific)
|
||||
|
||||
### "At its core..." Family
|
||||
|
||||
- "At its core..." → (delete or restructure)
|
||||
- "At the end of the day..." → (delete or replace with "ultimately" if you must)
|
||||
- "When all is said and done..." → (delete)
|
||||
|
||||
### Hedging Starters
|
||||
|
||||
- "While there are certainly..." → Pick a side.
|
||||
- "To be sure..." → (delete)
|
||||
- "That said..." → "But" (once per piece max)
|
||||
- "This is not without its challenges..." → Name the challenge directly.
|
||||
- "It remains to be seen..." → "We don't know yet" or (delete)
|
||||
|
||||
### AI Closers
|
||||
|
||||
- "The bottom line is..." → (just make your point)
|
||||
- "Only time will tell..." → (delete)
|
||||
- "The future is bright..." → (delete or be specific)
|
||||
- "Start your journey today" → (be specific about the action)
|
||||
|
||||
---
|
||||
|
||||
## Structure: Patterns That Reveal AI
|
||||
|
||||
### The Formulaic Section
|
||||
|
||||
Every section follows: Setup → Explanation → "What this means for you" / "The takeaway"
|
||||
|
||||
**Fix:** Vary endings. Some sections end with a question. Some end mid-thought. Some end with a specific example. Some just stop.
|
||||
|
||||
### The Parallel List
|
||||
|
||||
AI makes every bullet point the same grammatical structure and similar length.
|
||||
|
||||
**Fix:** Let some bullets be short. Let some be a full sentence. Break one into a sub-list if it needs it.
|
||||
|
||||
### The "Not X, but Y" Construction
|
||||
|
||||
"Not by writing more code, but by orchestrating agents that do."
|
||||
|
||||
Fine once. AI uses it 5-10 times per piece.
|
||||
|
||||
**Fix:** Use it once, max twice. Restructure the rest.
|
||||
|
||||
### The Tricolon Close
|
||||
|
||||
"Start building, start learning, start growing."
|
||||
|
||||
**Fix:** Use a single direct statement instead. Or just two items.
|
||||
|
||||
### The Balanced Conclusion
|
||||
|
||||
"The gap between X and Y is widening. The good news: [positive]. The challenge: [negative]. [Inspiring closer.]"
|
||||
|
||||
**Fix:** End with one strong statement, not a perfectly balanced assessment.
|
||||
|
||||
### The Em-Dash Epidemic
|
||||
|
||||
AI uses em dashes — like this — constantly, often multiple times per paragraph.
|
||||
|
||||
**Fix:** Use periods. Use commas. Restructure the sentence. One em dash per 3-4 paragraphs is human frequency.
|
||||
|
||||
---
|
||||
|
||||
## Tone: The AI "Voice"
|
||||
|
||||
### Too Balanced
|
||||
|
||||
AI always presents both sides. Real writers with expertise pick a position and defend it. They acknowledge counter-arguments briefly, not at equal length.
|
||||
|
||||
### Too Positive
|
||||
|
||||
AI defaults to optimism. "Exciting developments," "tremendous opportunity," "bright future." Real writing is more measured and occasionally pessimistic.
|
||||
|
||||
### Too Smooth
|
||||
|
||||
AI never stumbles, pauses, or doubles back. Every transition is polished. Real writing has slight roughness — a parenthetical aside, a sentence that starts one way and pivots, a blunt statement after a complex one.
|
||||
|
||||
### No Personality
|
||||
|
||||
AI doesn't have opinions, pet peeves, or a sense of humor. Adding these (sparingly) makes writing feel authored by someone real.
|
||||
|
||||
---
|
||||
|
||||
## Detection Heuristic
|
||||
|
||||
Score the piece on these dimensions. 5+ hits = likely AI-generated:
|
||||
|
||||
- [ ] Uses 3+ Tier 1 vocabulary words
|
||||
- [ ] Uses 5+ Tier 2 vocabulary words
|
||||
- [ ] Has "It's worth noting" or similar filler phrases
|
||||
- [ ] Every section follows the same structure
|
||||
- [ ] "Not X, but Y" appears more than twice
|
||||
- [ ] Em dashes appear more than once per paragraph
|
||||
- [ ] No sentences under 8 words
|
||||
- [ ] No informal or colloquial language anywhere
|
||||
- [ ] Conclusion is perfectly balanced (good news/bad news/inspiring close)
|
||||
- [ ] Every list has the same number of items
|
||||
- [ ] No opinions, asides, or personality
|
||||
- [ ] Every claim is hedged with "certainly" or "to be sure"
|
||||
@@ -0,0 +1,21 @@
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
const os = require("os");
|
||||
|
||||
const SKILL_NAME = "humanize-writing";
|
||||
const SKILL_DIRS = [
|
||||
path.join(os.homedir(), ".claude", "skills", SKILL_NAME),
|
||||
path.join(os.homedir(), ".cursor", "skills", SKILL_NAME),
|
||||
path.join(os.homedir(), ".windsurf", "skills", SKILL_NAME),
|
||||
];
|
||||
|
||||
for (const dir of SKILL_DIRS) {
|
||||
try {
|
||||
if (fs.existsSync(dir)) {
|
||||
fs.rmSync(dir, { recursive: true });
|
||||
console.log(`Removed ${SKILL_NAME} skill from ${dir}`);
|
||||
}
|
||||
} catch (err) {
|
||||
console.warn(`Skipped ${dir}: ${err.message}`);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user