# What Is the Purpose of the Second Pass in Humanizer's Rewrite Process?

> Discover how Humanizer's second pass ensures AI output is factual and human-like. Improve your content with this crucial quality check.

- Repository: [Siqi Chen/humanizer](https://github.com/blader/humanizer)
- Tags: internals
- Published: 2026-09-07

---

**Humanizer's second pass serves as a quality assurance checkpoint that verifies fact preservation and eliminates residual AI tells before producing the final output.**

The **blader/humanizer** repository implements a two-pass rewrite workflow designed to transform AI-generated prose into natural-sounding human text. While the first pass handles the initial transformation, the second pass—documented in [`SKILL.md`](https://github.com/blader/humanizer/blob/main/SKILL.md) as the "Check the draft" step—ensures the output meets both accuracy and stylistic standards.

## How Humanizer's Two-Pass Workflow Works

Humanizer processes text through two distinct phases, each with a dedicated purpose.

### First Pass: Draft the Rewrite

In the initial pass, the agent rewrites the supplied prose to remove identified AI tells while preserving every factual claim. This step corresponds to *Step 2* in the skill description at [`SKILL.md`](https://github.com/blader/humanizer/blob/main/SKILL.md) lines 35-36.

```python

# First pass: generate a draft rewrite

draft = humanizer.rewrite(text)

```

The result is an intermediate draft that may still contain subtle AI patterns or minor factual drift.

### Second Pass: Check the Draft

The second pass performs critical validation before finalization. According to [`SKILL.md`](https://github.com/blader/humanizer/blob/main/SKILL.md) lines 37-38, this step evaluates two specific criteria:

- **Fact-preservation** — Verifies that no new information has been introduced and nothing has been unintentionally omitted
- **Residual AI tells** — Scans for remaining patterns that still sound AI-generated, such as lingering "not-X-but-Y" contrasts, extra dashes, or weak-alone tells

```python

# Second pass: validate the draft

final = humanizer.check_and_finalize(draft)
print(final)

```

Only after this verification does Humanizer produce the final version.

## What the Second Pass Detects

The quality assurance step targets specific failure modes that survive the first pass.

| Issue Type | Examples Detected |
|------------|-----------------|
| **Residual AI tells** | "not-X-but-Y" contrasts, unnecessary dashes, weak-alone patterns |
| **Factual drift** | Added claims, omitted details, altered meaning |

When residual tells are found, Humanizer prepares a short list requiring further editing—enabling targeted refinement rather than full rewrites.

## Manual Implementation of the Two-Pass Process

For workflows without programmatic access, the manual approach follows the same structure:

1. **Run the rewrite** — Feed the original paragraph to Humanizer
2. **Read the draft aloud** — Listen for awkward phrasing or missing facts
3. **Request remaining tells** — Humanizer returns any patterns still detected
4. **Apply suggested edits** — Produce the clean final version

This mirrors the automated `check_and_finalize()` logic documented in the source.

## Why Two Passes Beat One

Single-pass rewriting risks two failure modes: **over-editing** that introduces factual errors, or **under-editing** that leaves detectable AI patterns. The separation of drafting from verification—implemented in [`SKILL.md`](https://github.com/blader/humanizer/blob/main/SKILL.md) at lines 35-38—allows each pass to optimize for a distinct goal:

- **First pass**: Maximize AI tell removal
- **Second pass**: Maximize accuracy and completeness

## Summary

- Humanizer's rewrite process intentionally splits work across two passes
- The **second pass purpose** is quality assurance, not additional transformation
- It verifies **fact preservation** and identifies **residual AI tells**
- Source documentation resides in [`SKILL.md`](https://github.com/blader/humanizer/blob/main/SKILL.md); pattern reference in [`README.md`](https://github.com/blader/humanizer/blob/main/README.md)

## Frequently Asked Questions

### Does Humanizer always require two passes?

Yes—according to the `blader/humanizer` source code in [`SKILL.md`](https://github.com/blader/humanizer/blob/main/SKILL.md), the two-pass structure is fundamental to the rewrite workflow. The "Check the draft" step is explicitly defined as a required phase, not an optional enhancement.

### What happens if the second pass finds errors?

Humanizer prepares a short list of residual AI tells requiring further editing. The draft is not finalized until these issues are addressed, ensuring no factually compromised or stylistically detectable text reaches output.

### Can I skip the second pass for faster results?

The repository documentation does not describe a single-pass mode. The `check_and_finalize()` logic—as implied by the workflow description—is integral to producing valid output that meets Humanizer's accuracy and naturalness standards.

### Where is the two-pass workflow documented?

The complete process is specified in [`SKILL.md`](https://github.com/blader/humanizer/blob/main/SKILL.md) at lines 35-38, with additional context on AI tell patterns available in [`README.md`](https://github.com/blader/humanizer/blob/main/README.md).