# Humanizer

> >-

- **Type:** Skill
- **Install:** `agentstack add skill-aihxp-humanizer-humanizer`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [hannsxpeter](https://agentstack.voostack.com/s/hannsxpeter)
- **Installs:** 0
- **Category:** [AI & ML](https://agentstack.voostack.com/c/ai-and-ml)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [hannsxpeter](https://github.com/hannsxpeter)
- **Source:** https://github.com/hannsxpeter/humanizer

## Install

```sh
agentstack add skill-aihxp-humanizer-humanizer
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# Humanizer

Turn AI-flavored or generically smooth prose into writing that reads as the
work of a person. When a writer's voice is available, make it read as the work
of *that* person. The goal is prose a careful human reader would not flag,
with its meaning and its human texture intact. The goal is not to beat any
particular detector, and this skill names and targets none.

## When to use this

Use it when someone pastes a draft and says it sounds like AI, asks to
humanize or de-slop text, wants their own draft to sound like them, names an
author to match, or says the writing "feels off," "sounds corporate,"
"reads like a robot," or "is too generic." Use it even when they do not say
the word "humanize." It also pairs well after any drafting step where the
output came out machine-smooth. By default the rewrite stays measured and
faithful; if the user explicitly asks for more voice, edge, or opinion, turn
on Stance mode (see below).

Do not use it to disguise authorship for an assessment or to defeat a
plagiarism or AI-detection system. See Scope and intended use below; reframe
such requests toward genuine quality and voice.

## Core principle: variance over substitution

The reason AI prose reads as AI is not its vocabulary. It is its uniformity:
even sentence lengths, even rhythm, even hedging, the same shapes resolved the
same way. Swapping "delve" for "explore" everywhere does not fix that. It just
moves the signature, and a uniform "humanizer dialect" is still a machine
fingerprint, just a different one.

Real humanization comes from genuine structural variance. Sentences of very
different lengths next to each other. A fragment. Then a long, winding one
that takes its time. Mixed syntax. The occasional asymmetry a tidy model would
smooth away. You are writing for a sharp human reader, not optimizing a score.
Every pass below serves this principle: increase real variance, do not install
a new regularity.

## Step 0: Discover the voice (do this every run, before rewriting)

Decide which mode you are in. Announce it in the output header so a wrong
guess is instantly correctable.

1. **Explicit input wins.** Did the user paste a writing sample, point to a
   file, or name a well-known author to match? Use that. Read
   `references/voice-matching.md` and proceed in voice mode.
2. **Otherwise, look for a profile.** `Glob` the working directory and up to
   two parent levels, in this priority order:
   `VOICE.md`, then `STYLE-GUIDE.md`, then
   `voice-profile.md` / `.yaml` / `.json`, then `.manuscript/STYLE-GUIDE.md`,
   then a voice or style section inside `AGENTS.md` or `CLAUDE.md`. One strong
   match: read it, then read `references/voice-matching.md`, proceed in voice
   mode. Several plausible matches: ask one short question to pick.
3. **Otherwise, generic mode.** No voice target. De-slop toward natural,
   varied human prose. Do not invent a persona or a backstory; an invented
   voice is its own failure. Generic mode skips Pass 1 and starts at Pass 2.

This discovery is filesystem-generic. It interoperates with Scriveno, Pillars,
or any project that happens to keep a voice file, without depending on any of
them.

## Step 0b: Stance mode (opt-in, off by default)

Default output is measured and faithful: it reports the source's content in
clean human prose and does not editorialize. That is the right default,
because the most common failure of livelier humanizers is that "adding voice"
becomes "adding content," and an invented opinion quietly drags an invented
fact in behind it.

Turn stance mode **on only when the user explicitly asks for it**: "give it
some voice," "make it punchier," "have a take," "don't keep it so neutral,"
"add some edge or opinion." Do not turn it on for an ordinary de-slop request,
and never in voice mode (a discovered profile already dictates stance; do not
override it).

When stance mode is on, you may add **attitude toward the existing content**:
a judgment, emphasis, dry understatement, first person as the narrator of the
same facts, an honest "this part is the weak spot," acknowledged ambivalence
about what the source already says, and freer rhythm. This is the same
material, said by someone with a point of view.

The hard line, and the entire reason this mode is safe: **stance is a reaction
to what is there, never the addition of what is not.** You may judge a stated
fact; you may not invent the fact, its cause, its mechanism, an event, a named
person, a quote, or a lived experience to react to. Test every added clause:
"is this an opinion about something the source already states, or a new claim
about the world?" If it is a new claim, it is fabrication wearing a voice, and
it is exactly the failure this skill exists to prevent. When in doubt, the
opinion is allowed and the new fact is not.

Example. Source states only: infrastructure cost rose 18% during the
migration, temporarily.

- Allowed (stance about the stated fact): "An 18% jump is a real line item,
  not a rounding error, and 'temporary' is doing some hopeful work in that
  sentence."
- Forbidden (invented cause dressed as candor): "costs rose because we were
  running the old and new systems in parallel" (the source never says why;
  this is a new fact).

Stance mode raises fabrication risk, so the Pass 3 self-audit and the Meaning
check apply with extra force, and the output header must show stance is on so
the user can dial it back.

## Step 0c: Density pre-check (match effort to evidence)

Before rewriting, skim the whole text once and judge how heavily it is
AI-marked. Count only the **dead-giveaway** tells, not the weak surface
signals: chat-UI contamination (pattern 31), knowledge-cutoff disclaimers
(29), collaborative chatbot artifacts (28), significance inflation (1),
promotional language (5), AI-vocabulary clustering (16), sycophantic tone
(7), generic positive conclusion (13). Estimate roughly how many appear per
100 words, then pick the pass intensity and announce it in the output header:

- **Low (about 0 to 2 per 100 words): light pass.** The text is human-first
  (a journal, rough notes, a real person's draft). Fix only the dead-giveaway
  artifacts. Leave lower-tier patterns, rhythm, and voice alone, and bias hard
  toward "Deliberately left alone." All-or-nothing rewriting here is exactly
  what strips the quirks that made the writing sound like a person; that is
  the worst failure this skill can commit, so when density is low, restraint
  is the default and edits are the exception.
- **Medium (about 3 to 5 per 100 words): standard pass.** Mixed authorship.
  Apply the full catalog, but with the restraint of do-not-flag.md; do not
  flatten what already works.
- **High (6 or more per 100 words): full pass.** AI-first text. Apply the
  full catalog thoroughly and push real structural variance.

This is calibration, not a scan you report mechanically. Effort should match
evidence. One exception overrides density: any chat-UI contamination string
(pattern 31) is decisive on its own and is always removed, whatever the
overall density, because its presence is near-certain confirmation rather
than a weak signal.

## The multi-pass workflow

Run the passes in order. Voice is generative; de-slopping is subtractive. If
you strip tells first you get flat neutral prose that is then hard to inflect,
so establish voice first when you have one.

### Pass 1: Voice injection (voice mode only)

Rewrite the draft *toward the target voice* before removing any tells. Set the
cadence, diction, sentence-length signature, stance, and characteristic moves
described in `references/voice-matching.md`. Match the writer's instincts and
distribution, never their specific sentences. In generic mode, skip this pass.

### Pass 2: Tell removal

Load `references/tell-patterns.md`. Walk the prose against the 32-pattern
catalog (six families), scoped to the pass intensity chosen in Step 0c. For each genuine flag, fix the *underlying thought*,
not the surface token: ask "what is actually being said here?" and write that,
concretely, at the length the thought deserves. Preserve meaning exactly.

Concreteness must come from the source or from the user, never from you. If
the source is vague and you have no real detail to restore, the honest fix is
to say less, plainly, not to manufacture a number, date, name, or example to
make it "sound human." An invented specific reads convincingly human, which
makes it more dangerous than the fog it replaced: vague slop merely bores a
reader, a fluent fabrication misleads one. When you are tempted to add a
specific the text does not contain, shorten instead.

While you do this, hold or increase sentence-length variance; do not let
de-slopping homogenize the rhythm. In voice mode, a tell fix that would
flatten the established voice is the wrong fix; find one that keeps the voice.

### Pass 3: Self-audit (has veto power over Passes 1 and 2)

Load `references/do-not-flag.md`. Ask two questions and act on both:

a. If a sharp human read this cold, what one or two things would still tip
   them that a machine touched it? Fix only those.
b. Did I overcorrect? Did I strip a specific detail, flatten a genuine quirk,
   change a meaning, or introduce my own uniform rhythm (every fix the same
   shape)? Revert any such damage.

If Pass 3 conflicts with an earlier pass, Pass 3 wins. A clean rewrite that no
longer sounds like the writer, or that lost a real detail, has failed even if
every tell is gone.

## False-positive guardrails

These are inline because every run needs them. Do not flag in isolation:

- Perfect grammar. Correctness is not a confession; never add errors.
- A single em dash. Only dash frequency and monotony is a tell.
- Curly quotes or smart apostrophes. Word processors insert these for humans;
  normalize only for consistency with the surrounding text, never as evidence.
- Formal or elevated vocabulary. Register is not origin.
- Common transitions ("however," "therefore," "for example").
- One passive sentence, one tricolon, one topic sentence.

Escalate to a flag only on recurrence or co-occurrence. When unsure, do not
cut. The full treatment, including human markers to preserve and per-model
idiolects, is in `references/do-not-flag.md`; read it during Pass 3.

## Anti-signature guidance

Do not develop tics of your own. Not every sentence varied the same way. Not a
fixed "short punchy line, then long winding clause" template repeated down the
page. Not a contraction forced into every paragraph. Not the same three
replacement words for "delve" every time. The tell of a humanizer is
regularity in its irregularity. Vary how you vary. If your edits are starting
to rhyme with each other, stop and break your own pattern.

## Output contract

Always deliver the rewritten prose as the primary artifact, followed by a
short report. Never silently rewrite in place. Never deliver a raw diff as the
main output (prose diffs are unreadable and hide meaning drift). Use this exact
structure:

```
## Humanized draft
Voice: [generic | from FILENAME | matched to pasted sample | author: NAME]
       [append " + stance" when stance mode is on, e.g. "generic + stance"]
Density: [low -> light pass | medium -> standard pass | high -> full pass]

[the full rewritten text]

## What changed
- [pattern family]: [plain note on what was adjusted and why]
  (group by family; do not list every token; about 8 bullets maximum)

## Deliberately left alone
- [something that looked like a tell but is authentic, and why you kept it]
  (one to three bullets; this section is required, even on heavy rewrites)

## Meaning check
One sentence confirming no facts, numbers, names, claims, or intent changed.
Then check soft inference: did you assert any causal, temporal, or
quantitative link ("most of the time went to X", "because of Y", "this drove
Z") that the source only implied or did not state? If so, name it here and
either hedge it ("probably", "as I read it") or cut it back to what the
source actually says. If anything was ambiguous, ask the question here
instead of guessing.

## Next step
If the user gave a file path, offer to write the rewrite into it. Otherwise
stop here.
```

The "Deliberately left alone" and "Meaning check" sections are not optional
decoration. They are forcing functions: naming what you preserved makes
over-editing visible, and the meaning check makes drift visible. Soft
inference is the drift most likely to slip through, precisely because it is
plausible and reads human: an invented cause, or a claim about where the time
or effort went, does not trip a hard-fact scan, so the meaning check has to
look for it on purpose. If a near-miss text is already essentially human, the
correct output is minimal or no edits plus a clear explanation of what you
left and why.

## Scope and intended use

This skill exists to improve prose quality and to help a writer's own work
sound authentically like them. It is not designed or tuned to defeat
plagiarism checkers or AI-detection systems, and it deliberately names and
optimizes against none. If a request is framed as passing AI-written work off
as a person's own for a graded or contractual assessment, do not adopt that
framing; offer the quality-and-voice improvement instead, which is what this
skill actually does well.

## Reference files

Read these on demand, not upfront:

- `references/tell-patterns.md` during Pass 2. The 32-pattern catalog in six
  families, each with detect / why / before-after / restraint.
- `references/do-not-flag.md` during Pass 3. False positives, human markers to
  preserve, LLM idiolects, and the hard stop conditions.
- `references/voice-matching.md` whenever Step 0 found a voice. How to extract
  and apply a voice, the optional VOICE.md schema, and conflict resolution.
- `references/examples.md` when you are unsure what good output looks like.
  Four full worked runs: generic de-slop, voice-first, a restraint case, and
  a stance-mode case.

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [hannsxpeter](https://github.com/hannsxpeter)
- **Source:** [hannsxpeter/humanizer](https://github.com/hannsxpeter/humanizer)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-aihxp-humanizer-humanizer
- Seller: https://agentstack.voostack.com/s/hannsxpeter
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
