# How Multiple Weak Patterns Collaborate in Humanizer to Detect AI-Generated Text

> Discover how Humanizer uses multiple weak patterns to detect AI text. Learn how combined signals trigger rewrites for more accurate AI detection.

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

---

**Multiple weak patterns collaborate in Humanizer by co-occurring within the same passage to cross a confidence threshold, where isolated signals are ignored but combined signals trigger a rewrite.**

Humanizer analyzes text for characteristic AI writing habits known as "tells," distinguishing between strong signals that warrant immediate edits and weak signals that require corroboration. When multiple weak patterns collaborate in Humanizer, they collectively indicate the clustered "default-model" behavior that the tool is designed to eliminate. The `blader/humanizer` repository implements this logic primarily in [`SKILL.md`](https://github.com/blader/humanizer/blob/main/SKILL.md), where the collaboration mechanism is explicitly defined as a safeguard against over-editing legitimate human stylistic choices.

## The Distinction Between Strong and Weak Tells

Humanizer categorizes its detection patterns into two distinct groups. **Strong tells** (patterns §1-§5) can independently justify an edit, while **weak tells** (marked *weak alone*) remain dormant until they find company from other tells in the same passage.

According to [`SKILL.md`](https://github.com/blader/humanizer/blob/main/SKILL.md), a pattern marked *weak alone* explicitly "needs company from other tells in the same passage before you act" (line 29). This architectural decision prevents the tool from flagging isolated stylistic choices—such as a single em dash or curly quote—that a human writer might deliberately employ.

## How Weak Patterns Collaborate: The Four-Step Mechanism

The collaboration process follows a strict pipeline defined in the Humanizer source code, ensuring that weak signals only trigger action when their combination suggests genuine AI-generation artifacts.

### Step 1: Identify Individual Weak Tells

Humanizer first scans the input text for each weak pattern, including dashes (pattern 8), curly quotes (line 306 in [`SKILL.md`](https://github.com/blader/humanizer/blob/main/SKILL.md)), stacked qualifiers, and triad-style forced lists. Each detection is recorded internally but remains unacted upon at this stage. For example, the presence of em dashes alone (line 162) does not yet trigger a rewrite suggestion.

### Step 2: Group Detections by Passage

The system then clusters detections that occur within the same paragraph, sentence cluster, or logical block. The rule is explicit: "Act on a *weak alone* tell only when several tells share a passage" (line 362 in [`SKILL.md`](https://github.com/blader/humanizer/blob/main/SKILL.md)). This geographic constraint ensures that weak signals must physically co-occur in the text to be considered significant.

### Step 3: Evaluate Combined Strength

When **two or more** weak tells appear within the same scoped passage, Humanizer treats their combination as equivalent to a single strong tell. This threshold reflects the statistical improbability that a human writer would accidentally combine several default model habits—such as stacked qualifiers ("potentially possibly") alongside forced structural patterns—in one concentrated location.

### Step 4: Trigger Edit

Once the combined threshold is met, Humanizer proposes a comprehensive rewrite that removes or rephrases all involved tells simultaneously. The overall workflow (lines 31-38 in [`SKILL.md`](https://github.com/blader/humanizer/blob/main/SKILL.md)) ensures that the resulting text reflects purposeful human authorship rather than mechanical AI defaults.

## Practical Examples of Weak Pattern Collaboration

The [`README.md`](https://github.com/blader/humanizer/blob/main/README.md) reinforces this architecture in its reference table (lines 79-100), labeling patterns 8-21 as "*weak alone*" and reminding users that they "count only when several tells share a passage."

Consider the following input, which contains two weak tells: dash-style connectors (pattern 8) and stacked qualifiers (pattern 9):

```json
{
  "model": "humanizer",
  "input": "The new policy — announced without warning — affects thousands of workers. It could potentially possibly be argued that the changes — long overdue — will improve productivity.",
  "metadata": { "version": "3.0.0" }
}

```

Because these weak patterns collaborate within the same passage, Humanizer triggers a rewrite:

```text
The new policy, announced without warning, affects thousands of workers. The changes, long overdue, will improve productivity.

```

You can invoke this behavior programmatically using the OpenAI-compatible wrapper defined in [`agents/openai.yaml`](https://github.com/blader/humanizer/blob/main/agents/openai.yaml):

```python
import openai

response = openai.ChatCompletion.create(
    model="humanizer",
    messages=[
        {"role": "system", "content": "You are Humanizer, remove AI writing patterns."},
        {"role": "user", "content": "The event features keynote sessions, panel discussions, and networking opportunities — all of which are vital. It could potentially possibly be argued that this format — well‑balanced — improves attendance."}
    ]
)

print(response.choices[0].message.content)

```

In this case, the triad-style forced list and stacked qualifiers co-occur, triggering the collaborative detection mechanism and resulting in a consolidated, human-like paragraph.

## Summary

- **Weak tells require company**: Patterns marked *weak alone* in [`SKILL.md`](https://github.com/blader/humanizer/blob/main/SKILL.md) (like dashes and curly quotes) only trigger edits when they co-occur with other weak tells in the same passage.
- **Geographic clustering is critical**: Detections must share a specific passage or logical block (line 362) to be evaluated together.
- **Threshold is two or more**: The combination of two weak signals elevates the collective confidence to match a single strong tell.
- **Comprehensive rewriting**: Once triggered, Humanizer edits remove all involved patterns simultaneously to eliminate "default-model" artifacts.
- **Source of truth**: The collaboration logic is defined in [`SKILL.md`](https://github.com/blader/humanizer/blob/main/SKILL.md), documented in [`README.md`](https://github.com/blader/humanizer/blob/main/README.md) (lines 79-100), and accessible via [`agents/openai.yaml`](https://github.com/blader/humanizer/blob/main/agents/openai.yaml).

## Frequently Asked Questions

### How does Humanizer prevent false positives from individual weak patterns?

Humanizer explicitly ignores isolated weak tells. According to line 362 of [`SKILL.md`](https://github.com/blader/humanizer/blob/main/SKILL.md), the system "acts on a *weak alone* tell only when several tells share a passage." This ensures that a human writer using a single em dash or one instance of a curly quote will not trigger unnecessary edits, as these isolated instances lack the clustering characteristic of AI-generated text.

### What constitutes a "passage" for weak pattern collaboration?

A passage refers to a paragraph, sentence cluster, or logical block where multiple tells appear in proximity. The [`SKILL.md`](https://github.com/blader/humanizer/blob/main/SKILL.md) documentation (line 362) specifies that weak patterns must "share a passage" to collaborate, meaning they must occur within the same scoped text segment rather than appearing scattered throughout a long document.

### Can two weak tells from different paragraphs trigger a rewrite?

No. The collaboration mechanism requires geographic proximity. The rule specifically states that weak tells must appear in the same passage to count together. If one weak tell appears in paragraph one and another appears in paragraph three, Humanizer treats them as separate, insufficient signals and will not propose an edit for either.

### Which file contains the complete list of weak patterns?

The [`SKILL.md`](https://github.com/blader/humanizer/blob/main/SKILL.md) file contains the authoritative definitions of all patterns, including the *weak alone* designations and the collaboration logic. The [`README.md`](https://github.com/blader/humanizer/blob/main/README.md) provides a user-facing summary table (lines 79-100) listing patterns 8-21 as weak, while [`agents/openai.yaml`](https://github.com/blader/humanizer/blob/main/agents/openai.yaml) implements the interface to access these detection rules programmatically.