Patina
Korean adaptation of blader/humanizer - Claude Code skill that removes AI writing patterns from Korean text
Install / Use
/learn @devswha/PatinaQuality Score
Category
Development & EngineeringSupported Platforms
README
patina
Make AI text sound like a human wrote it.
A Claude Code skill that detects and removes AI writing patterns from Korean, English, Chinese, and Japanese text. It finds the telltale signs -- the "delve into"s, the triple-item lists, the vague conclusions -- and rewrites them into natural prose.
"LLMs use statistical algorithms to guess what should come next. The result tends toward the most statistically likely result that applies to the widest variety of cases." — Wikipedia
See It In Action
Before (AI-sounding):
AI coding tools represent a groundbreaking milestone showcasing the innovative potential of large language models, signifying a pivotal turning point in software development evolution. This not only streamlines processes but also fosters collaboration and facilitates organizational alignment.
After (humanized):
AI coding tools speed up grunt work. Config files, test scaffolding, that kind of thing. The problem is the code looks right even when it isn't. It compiles, passes lint, so you merge it -- then find out later it's doing something completely different from what you intended.
112 patterns detected across Korean (28), English (28), Chinese (28), and Japanese (28). See the full pattern list below.
Install
mkdir -p ~/.claude/skills
git clone https://github.com/devswha/patina.git ~/.claude/skills/patina
# Expose the MAX variant as its own Claude skill
ln -snf ~/.claude/skills/patina/patina-max ~/.claude/skills/patina-max
Claude Code will detect /patina automatically. Add the symlink step as well if you want /patina-max exposed as a separate skill.
Quick Install
curl -fsSL https://raw.githubusercontent.com/devswha/patina/main/install.sh | bash
This handles everything: creates the skills directory, clones the repo, and sets up the patina-max symlink. Safe to run again to update.
Use
In Claude Code, type:
/patina
[paste your text here]
Korean is the default language. For other languages:
/patina --lang en
[paste your English text here]
/patina --lang zh
[paste your Chinese text here]
/patina --lang ja
[paste your Japanese text here]
More Options
| Flag | What it does |
|------|-------------|
| --lang en | Process English text |
| --lang zh | Process Chinese text |
| --lang ja | Process Japanese text |
| --batch docs/*.md | Process multiple files at once |
| --in-place | Overwrite originals (with --batch) |
| --suffix .humanized | Save as {file}.humanized.md |
| --outdir output/ | Save results to a directory |
| --profile blog | Use blog/essay writing style |
| --profile formal | Use formal document style (CVs, resumes, proposals) |
| --diff | Show what changed and why, pattern by pattern |
| --audit | Detect AI patterns only (no rewriting) |
| --score | Get an AI-similarity score from 0-100 |
| --ouroboros | Iterative self-improvement: rewrite until AI score converges |
Combine flags freely: /patina --lang en --audit --profile blog or /patina --profile formal
MAX Mode (Multi-Model)
Run the same text through multiple AI models and pick the best result:
/patina-max
[paste your text here]
Each model humanizes independently, results are scored for AI-likeness, and the lowest-scoring (most human) result wins.
| Flag | What it does |
|------|-------------|
| --models claude,gemini | Choose which models to use |
| --lang en | Process English text |
| --profile blog | Use blog/essay writing style |
Supported models: claude, codex, gemini. MAX mode feeds all three via stdin (claude -p, gemini -p '' --output-format text, codex exec --skip-git-repo-check) and captures Codex's final answer with --output-last-message.
Each MAX run uses a unique temp directory, waits only for the models you selected, and marks timed-out runs as failed instead of waiting forever.
Score Mode
Check how AI-like your text is without rewriting:
/patina --score
[paste your text here]
Returns a 0-100 AI-likeness score with per-category breakdown:
| Category | Weight | Detected | Raw Score | Weighted |
|---------------|--------|----------|-----------|----------|
| content | 0.20 | 3/6 | 33.3 | 6.7 |
| language | 0.20 | 1/6 | 11.1 | 2.2 |
| style | 0.20 | 2/6 | 27.8 | 5.6 |
| communication | 0.15 | 0/3 | 0.0 | 0.0 |
| filler | 0.10 | 1/3 | 11.1 | 1.1 |
| structure | 0.15 | 1/4 | 25.0 | 3.8 |
| Overall | | | | 19.3 (±10) |
Interpretation: 16-30 = Mostly human-like, minor traces
Score ranges: 0-15 human | 16-30 mostly human | 31-50 mixed | 51-70 AI-like | 71-100 heavily AI
When used with rewrite or ouroboros mode, a fidelity score (0-100, higher = better) is also shown, measuring how faithfully the output preserves the original meaning:
| Metric | Score |
|---------------|---------|
| AI-likeness | 23/100 |
| Fidelity | 87/100 |
| Combined | 19/100 |
Fidelity checks four criteria: claims preserved, no fabrication, tone match, and length ratio. The combined score weights both dimensions — configurable per profile (e.g., academic: fidelity 0.60, AI 0.40; blog: AI 0.70, fidelity 0.30).
The score is pattern-based and deterministic — it reuses the same 28 (Korean), 28 (English), 28 (Chinese), or 28 (Japanese) detection patterns from audit mode. Profile overrides affect scoring (e.g., blog profile suppresses bold pattern #14).
Ouroboros Mode (Iterative Self-Improvement)
Automatically rewrite until the AI score drops below a target:
/patina --ouroboros
[paste your text here]
The ouroboros loop runs the full humanization pipeline repeatedly, scoring after each iteration:
Ouroboros Iteration Log
| Iter | Before | After | Improvement | Reason |
|------|--------|-------|-------------|-------------|
| 0 | — | 78 | — | Initial |
| 1 | 78 | 45 | +33 | |
| 2 | 45 | 28 | +17 | Target met |
Final score: 28/100 (±10)
Iterations: 2/3
Reason: Target met (target: 30)
[final humanized text]
Termination conditions (whichever comes first):
- Target met: Score drops to ≤ 30 (configurable)
- Plateau: Score improves by less than 10 points between iterations
- Regression: Score increases (text got worse) — rolls back to previous iteration
- Max iterations: Hard cap of 3 iterations (configurable)
Configuration — customize in .patina.yaml:
ouroboros:
target-score: 30 # Stop when score <= this (0-100)
max-iterations: 3 # Maximum loop iterations
plateau-threshold: 10 # Minimum improvement required
--ouroboros cannot be combined with --diff, --audit, or --score.
How It Works
Your text
|
v
[Phase 1] Structure scan -- fix paragraph-level issues (repetition, passive voice)
|
v
[Phase 2] Sentence rewrite -- fix word-level issues (AI vocabulary, filler, hedging)
|
v
[Phase 3] Self-audit -- "does this still sound like AI?" -- fix remaining issues
|
v
Natural-sounding text
The skill loads language-specific pattern packs (ko-*.md, en-*.md, zh-*.md, or ja-*.md) and applies them through this 3-phase pipeline. Profiles and voice guidelines shape the tone.
<a name="patterns"></a>Patterns
Korean (28 patterns)
<details> <summary><b>Structure Patterns</b> (Phase 1) -- 4 patterns for document-level issues</summary>| # | Pattern | What AI does | Fix | |---|---------|-------------|-----| | 25 | Structural Repetition | Every paragraph follows the same claim-evidence-significance structure | Vary structures: question, detail, short punch | | 26 | Translationese | Unnatural calques from English ("~It is a fact that") | Use natural Korean sentence forms | | 27 | Passive Voice Overuse | Double passive constructions | Active voice or simple passive | | 28 | Unnecessary Loanwords | "Leverage insights for synergy" | Native Korean equivalents |
</details> <details> <summary><b>Content Patterns</b> -- 6 patterns for substance issues</summary>| # | Pattern | What AI does | Fix | |---|---------|-------------|-----| | 1 | Importance Inflation | "groundbreaking milestone", "pivotal turning point" | Replace with specific facts, dates, numbers | | 2 | Media Mention Inflation | "featured in NYT, BBC, etc." | Cite one specific article | | 3 | Superficial -ing Analysis | "showcasing, symbolizing, contributing" | Remove filler or add real sources | | 4 | Promotional Language | "stunning natural beauty... gem of tourism" | Neutral description with facts | | 5 | Vague Attributions | "experts say... industry insiders note" | Name the actual source | | 6 | Formulaic Challenges/Prospects | "despite challenges... bright future" | Specific problems and concrete plans |
</details> <details> <summary><b>Language Patterns</b> -- 6 patterns for grammar/vocabulary issues</summary>| # | Pattern | What AI does | Fix | |---|---------|-------------|-----| | 7 | AI Vocabulary Overuse | Korean AI filler words overuse
