Skip to main content
ClaudeWave
Skill1.1k repo starsupdated today

moai-domain-humanize

**moai-domain-humanize** is a post-editing tool that removes artificial language patterns from AI-generated text across Korean, English, Japanese, and Chinese while preserving factual accuracy and authorial intent. Use it to refine machine-generated content into natural-sounding prose, with built-in safeguards that warn when more than 30% of text changes and stop at 50% to prevent over-editing.

Install in Claude Code
Copy
git clone --depth 1 https://github.com/modu-ai/moai-adk /tmp/moai-domain-humanize && cp -r /tmp/moai-domain-humanize/.claude/skills/moai-domain-humanize ~/.claude/skills/moai-domain-humanize
Then start a new Claude Code session; the skill loads automatically.

SKILL.md

# moai-domain-humanize

Post-editing specialist that removes "AI tells" from generated text and rewrites it to read as human-authored, while preserving meaning. This is the **editing** counterpart to text generation: it does not write new content, it refines how existing content is said. Covers Korean, English, Japanese, and Chinese.

---

## Quick Reference

### Operating Principles (4)

1. **Meaning preservation is the top rule.** Facts, numbers, statistics, named entities, quotations, citations, and the author's stance/certainty stay intact. Any meaning drift forces a rollback.
2. **Evidence-based edits only.** Every change must trace to a detected tell on a specific span. Stylistic "improvements" unconnected to a catalogued tell are themselves an over-editing signal and are forbidden.
3. **Genre and register preservation.** Humanize *within* the source register — academic stays academic, casual stays casual. Never push formal text into slang or vice versa.
4. **Over-editing prevention.** Flag at >30% change (WARN), halt at >50% change (forced stop / human review). Above 50% you are regenerating, not humanizing.

### Mode Selection

- **Fast mode** (default, up to ~5,000 chars): a single pass — detect, rewrite, self-verify against the meaning-preservation checklist.
- **Strict mode** (long or high-stakes text, or when requested): separate stages — detect → surgical rewrite → content-fidelity audit (facts/figures/stance unchanged) → naturalness review. Re-run a second pass when the result lands at Grade C.

### Output Contract

Return two things:

1. **The humanized text.**
2. **A short change report**: categories hit (with counts), the final quality grade (A/B/C/D), and the percent changed (character-level edit distance ÷ source length). When a guardrail fires, state it explicitly (WARN at >30%, HALT at >50%).

---

## Common Severity Model (shared by all 4 languages)

Each tell carries one severity tier. Detectors gate by occurrence count and overlap, because a single tell rarely proves AI authorship — confidence comes from clustering.

| Tier | Name | Rule |
|------|------|------|
| **S1** | Decisive | A single occurrence strongly confirms AI authorship → remove on first occurrence. |
| **S2** | Strong | Acceptable at 1–2 instances → remove at 3 or more. |
| **S3** | Weak | Problematic only when overlapping other tells → downgrade-only contributor. |

## Common Quality Grades (shared by all 4 languages)

Graded **after** the rewrite, on the residual S1/S2 counts plus improvement % (= proportion of detected tells removed without introducing new ones).

| Grade | Criteria | Action |
|-------|----------|--------|
| **A** | 0 residual S1, ≤2 residual S2, ≥70% improvement | Pass — reads as human-authored |
| **B** | 0 residual S1, ≤4 residual S2, ≥50% improvement | Pass — minor polish remains |
| **C** | 1–2 residual S1, OR <50% improvement, OR over-edit WARN (>30%) | Trigger a second pass |
| **D** | ≥3 residual S1, OR over-edit HALT (>50%), OR meaning drift detected | Request human review; do not auto-ship |

Hard rule: any residual S1 caps the grade at C; any meaning-distortion flag forces D. S3 tells affect the grade only when ≥3 of them overlap and reinforce an S1/S2 finding.

### Over-Editing Guardrails (shared)

Change rate = character-level edit distance ÷ source length; target band ~5–30%.

- **>30% changed → WARN.** Surface a caution and cap at Grade C until each edit is justified by a detected tell. Note: padding-removal legitimately shrinks text, so a length drop alone is not a violation — flag when meaning-bearing spans are altered.
- **>50% changed → HALT.** Stop and require human confirmation; revert to the last safe state.

### Meaning-Preservation Checklist (shared, all must hold)

1. Anchor facts first — fix the claims, numbers, names, dates, and certainty level before editing.
2. Edit at sentence/phrase level, not whole-document regeneration.
3. Add no new facts — never invent specifics to replace vagueness; simplify instead, or flag for the author.
4. Drop no load-bearing facts — removing an inflated wrapper must keep the substantive claim inside.
5. Preserve genuine certainty/hedging and technical terminology verbatim.
6. Final diff check — compare facts, tone, certainty, and examples against the original; revert any edit that drifts.

---

## Language Routing

Each target language has its own tell catalogue (categories, before/after examples in the target language, per-category severity). Load the module that matches the text being edited:

| Language | Module | Source basis |
|----------|--------|--------------|
| Korean (한국어) | `modules/korean.md` | Faithful port of the im-not-ai (Humanize KR) taxonomy (10 categories A–J, 100+ subcategories) |
| English | `modules/english.md` | Web-researched catalogue (10 categories EN-A … EN-J) |
| Japanese (日本語) | `modules/japanese.md` | Web-researched catalogue (9 categories JA-01 … JA-09) |
| Chinese (中文) | `modules/chinese.md` | Web-researched catalogue (11 categories CN-A … CN-K) |

The Korean module is a faithful port of the open-source im-not-ai taxonomy; the English, Japanese, and Chinese modules are independently web-researched catalogues modeled on the same architecture. The common severity model and quality grades above apply uniformly to every module — the modules add only the language-specific tell categories, severities, and example rewrites.

For mixed-language text, detect the dominant language and route to its module; apply each module independently to its spans when the text is genuinely multilingual.

---

## Implementation Guide

### Workflow (per text)

1. **Identify language and mode.** Pick the module by dominant language; pick Fast vs Strict by length / stakes.
2. **Anchor facts.** Record the numbers, names, dates, quotations, and stance that must not change (meaning-preservation checklist item 1).
3. **Detect tells.** Scan against the module's catalogue. Record each hit with its category ID, span, and s