# Voice Humanizer

> Voice Humanizer: Extract Voice + Humanize Text

- Skill: `lucadominguez/voice-humanizer` (Agent Skill)
- Install (CLI): `npx skillmds@latest add lucadominguez/voice-humanizer`
- Raw SKILL.md: https://api.skillmd.com/api/skills/lucadominguez/voice-humanizer/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: lucadominguez (https://skillmd.com/u/lucadominguez)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/lucadominguez/voice-humanizer

---

# Voice Humanizer: Extract Voice + Humanize Text

Combines the forensic voice extraction from agentic-humanizer with the
28-pattern detection engine from brandonwise/humanizer. Extract once,
rewrite forever.

## When to use

- User pastes AI-generated text and wants it to sound human
- User wants their writing voice extracted from a sample
- User says "humanize this" or "make this sound like me"
- User wants to rewrite text in a specific saved voice

## Step 1: Resolve voice fingerprint

Check if the user specified a voice profile name. If they said "use my email voice"
or "use my prompting style", load the corresponding fingerprint directly from
`~/.voice-humanizer/voices/<name>.json`. See `references/voice-catalog.md` for
the current profile inventory.

If no profile name was given, check for a default fingerprint at
`~/.voice-humanizer/fingerprint.json`.

If neither exists, or the user says "extract my voice" / "new voice sample",
run the extraction below.

### Extraction

Ask the user:

> *"Paste 200+ words of your writing and I'll extract your voice fingerprint."*

Validate the sample:
- Under 50 words: reject, ask for more
- 50-199 words: warn that 200+ works better, let them continue
- 200+ words: proceed

Run this extraction prompt internally against the sample:

```
Analyze the writing sample and extract stable style traits. Return JSON only.

Focus on style, not topic. Do not copy private facts, names, or anecdotes.
Prefer observable habits over generic labels. If a trait is not visible,
write "not enough evidence".

Output this exact schema:

{
  "voice_summary": "one-line description of the overall voice",
  "avg_sentence_length": "N-N words",
  "sentence_length_variance": "high|medium|low + one-line note",
  "signature_openings": ["phrase1", "phrase2", "phrase3"],
  "signature_closings": ["phrase1", "phrase2"],
  "function_word_habits": "description of connector/preposition/article patterns",
  "punctuation_quirks": "description of punctuation habits",
  "register": "casual|casual-professional|professional|academic",
  "contraction_use": "high|medium|low",
  "hedge_use": "high|medium|low",
  "idiom_inventory": ["phrase1", "phrase2", "phrase3"],
  "paragraph_rhythm": "description of paragraph structure",
  "do_list": ["rule1", "rule2", "rule3"],
  "dont_list": ["rule1", "rule2", "rule3"]
}
```

Show the extracted fingerprint to the user and ask:

> *"Look right?"*

Options: Yes, Edit, Re-extract.

On Yes, save to `~/.voice-humanizer/fingerprint.json` and
`~/.voice-humanizer/sample.txt`.

On Edit, let the user correct fields inline. Validate all required fields
are present before saving.

On Re-extract, ask what to change and re-run.

## Step 2: Humanize text

When given text to humanize, apply this pipeline:

### Phase A: Detect AI patterns

Scan for all 28 AI writing patterns:

**Content (1-6):** significance inflation, notability name-dropping,
superficial -ing analyses, promotional language, vague attributions,
formulaic challenges

**Language (7-13):** AI vocabulary (see Tier 1/2 below), copula avoidance,
negative parallelisms, rule of three, synonym cycling, false ranges,
em dash overuse

**Style (14-19):** em dash overuse, boldface overuse, inline-header lists,
Title Case headings, emoji overuse, curly quotes

**Communication (20-28):** chatbot artifacts, cutoff disclaimers,
sycophantic tone, filler phrases, excessive hedging, generic conclusions,
reasoning chain artifacts, excessive structure, confidence calibration,
acknowledgment loops

### Tier 1 vocabulary (dead giveaways — never use)

delve, tapestry, vibrant, crucial, comprehensive, meticulous, embark, robust,
seamless, groundbreaking, leverage, synergy, transformative, paramount,
multifaceted, myriad, cornerstone, reimagine, empower, catalyst, invaluable,
bustling, nestled, realm, unpack, deep dive, actionable, impactful, learnings,
bandwidth, net-net, value-add, thought leader

### Tier 2 vocabulary (suspicious in density)

furthermore, moreover, paradigm, holistic, utilize, facilitate, nuanced,
illuminate, encompasses, catalyze, proactive, ubiquitous, quintessential,
cadence, best practices

### Banned phrases

"In today's digital age", "It is worth noting", "plays a crucial role",
"serves as a testament", "in the realm of", "delve into", "harness the power of",
"embark on a journey", "without further ado", "let's dive in", "circle back",
"key takeaways", "paradigm shift", "move the needle", "low-hanging fruit",
"pain points", "double-click on"

### Phase B: Strip + inject

1. **Strip all Tier 1 vocabulary.** Replace with plain alternatives.
2. **Cut banned phrases.** Rewrite the surrounding sentence.
3. **Remove chatbot artifacts.** "I hope this helps!", "Great question!",
   "Let me know if...", "Would you like me to..." — delete entirely.
4. **Kill generic conclusions.** "The future looks bright", "Exciting times
   lie ahead" — replace with a specific fact, or cut.
5. **Replace copula avoidance.** "Serves as" → "is". "Boasts" → "has".
6. **Fix negative parallelisms.** "Not merely X, but rather Y" → just say Y.
7. **Kill vague attributions.** "Experts believe" → name a specific source
   or drop the claim.
8. **Fix filler.** "In order to" → "to". "Due to the fact that" → "because".
   "It is important to note that" → just say the thing.

### Phase C: Inject voice (if fingerprint loaded)

Apply these rules from the loaded fingerprint:

- **Sentence length:** Match `avg_sentence_length` range
- **Rhythm:** Match `sentence_length_variance` pattern
- **Openings:** Use `signature_openings` to start sentences
- **Register:** Match `register` level
- **Contractions:** Match `contraction_use` level
- **Hedging:** Match `hedge_use` level
- **Function words:** Match `function_word_habits` patterns
- **Idioms:** Use phrases from `idiom_inventory` where natural
- **Paragraph rhythm:** Match `paragraph_rhythm` structure
- **Do/don't:** Apply `do_list` and `dont_list` rules

### Phase D: Add texture

1. **Vary sentence rhythm.** Short. Then longer ones. Fragment.
2. **Add an opinion.** React to the facts, don't just report them.
3. **Add a concrete example.** Replace one vague claim with something specific
   (a number, a name, a real scenario).
4. **Acknowledge complexity.** Let some mess in. Perfect structure feels
   algorithmic.
5. **Cut all em dashes.** Replace with periods, commas, colons, or restructure.
   This is a hard constraint. Zero em dashes in final output.
6. **Read aloud test.** If anything sounds like a press release, rewrite it.

### Phase E: Verify

Before returning the final text, verify:
- [ ] Zero Tier 1 vocabulary words
- [ ] Zero banned phrases
- [ ] Zero em dashes (— or –)
- [ ] Zero chatbot artifacts
- [ ] No generic conclusions
- [ ] Sentence rhythm varies (check: adjacent sentences differ in length)
- [ ] At least one concrete specific (number, name, or example)
- [ ] At least one opinion (not just neutral reporting)
- [ ] Voice fingerprint rules applied (if loaded)

## Output format

Present the humanized text followed by a compact change summary:

```
## Humanized
<text>

## Changes
- Killed N Tier 1/2 vocab words: <examples>
- Stripped N banned phrases: <examples>
- Fixed: <pattern fixes applied>
- Voice match: <which fingerprint rules were applied>
```

## Commands

- `/voice-humanizer extract` — extract voice from a new sample
- `/voice-humanizer show` — show the current fingerprint
- `/voice-humanizer reset` — delete saved fingerprint and sample
- `/voice-humanizer humanize [text]` — humanize text with current fingerprint

## Dependencies

None. This is a self-contained LLM skill. No CLI tools, no API keys,
no external services required. The extraction runs on the host LLM.
The humanization runs on the host LLM using the patterns and fingerprint
as constraints.
