Model or dataset
epoko77-ai/im-not-ai avatar
epoko77-ai/im-not-ai

im-not-ai: A Claude skill that strips Korean AI tells without touching the content

AI가 쓴 한글을 사람 글처럼 윤문하는 Claude 스킬 — Korean AI-text humanizer: detects and rewrites translationese, mechanical parallelism, and 71 other AI tells

5,569 stars604 forksPythonMIT

At a glance

What is it?
im-not-ai is a Korean-language humanizer packaged as a Claude Code skill. It detects 70 translationese and AI-typical patterns, routes text through one of three pipelines based on a pre-score, and enforces a change-rate gate to prevent over-editing.
Who is it for?
Adopt im-not-ai if you write or edit Korean with Claude Code, Copilot CLI, Codex CLI, or Gemini CLI and need to remove AI-typical phrasing without altering facts or numbers. Skip it if you work primarily in English or other languages, or if your text is under 15,000 characters and you want a single fast pass.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 9 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What problem it solves and who it is for

Korean text produced by ChatGPT, Claude, or Gemini carries recognizable tells: translationese like "~를 통해" and "~에 있어서", mechanical parallelism with "첫째/둘째/셋째", AI idioms such as "결론적으로" and "시사하는 바가 크다", overuse of passive voice, and excessive bullet points or emoji. im-not-ai is a Claude skill that detects these patterns and rewrites the style while leaving the content untouched. It targets Korean specifically because, as the README argues, English-oriented humanizers like QuillBot or Undetectable AI handle Korean poorly, and most Korean AI tells come from English translationese. The intended users are writers and engineers who draft in Korean with an agentic CLI and want the output to read like a human wrote it, not like a machine translated it.

The taxonomy: 10 categories and 70 sub-patterns

The detection system is organized into 10 major categories labeled A through J. Category A covers translationese, including double passive forms like "~되어진다" and the obsessive use of "그/그녀" (sub-pattern A-16). B is excessive English quotation and terminology. C includes structural AI patterns like mechanical enumeration and excessive bullets. D lists AI idioms such as "결론적으로" and "혁신적인". E covers rhythm uniformity, including low sentence-length standard deviation and listener honorific inconsistency. F is modifier redundancy, G is hedging overuse, H is conjunction spam at sentence starts, I is excessive formal nouns like "것이다" and "점", and J is visual decoration overuse such as bold and dashes. In total there are 70 sub-patterns plus one held for verification. Each pattern carries a severity: S1 means definitive AI tell and must be removed, S2 allows one or two occurrences, and S3 only matters in combination with other patterns. The full list and prescriptions live in the references files ai-tell-taxonomy.md and rewriting-playbook.md.

The route_hint architecture: three pipelines, not one

The core design decision is a pre-processing script, prepare_monolith_input.py, that quantitatively scores the input text using KatFish and post-editese metrics, then deterministically outputs a route_hint of light, standard, or heavy. Light uses a single LLM call and skips diagnosis and finalize; if there is almost nothing to fix it exits early with "이미 좋습니다" (already good). Standard uses two calls: one diagnostic call to identify dominant patterns, then one targeted rewriting call. Heavy uses three or more calls, including a finalizer that compares the output against the original for meaning preservation. The user can override the route with flags: --strict or "정밀 모드" forces heavy, "가볍게" forces light. The README claims a measured result where a 10,000-character text processed with chunking into 7 calls consumed 610K tokens, while a single call consumed 134K, a 4.5x reduction with equal quality. That is why chunking is heavy-only and not recommended below 15,000 characters.

The four rules and the change-rate gate

im-not-ai operates under four stated principles: meaning invariance, evidence-based editing, genre preservation, and no over-editing. The meaning invariance rule says facts, claims, numbers, proper nouns, and direct quotes are preserved 100%. The evidence-based rule means only detected spans are modified; untouched sections stay as they are. Genre preservation prevents turning a column into literature or a report into an essay. The over-editing rule is enforced by a deterministic script, verify_change_rate.py, which runs after every pipeline and checks the change rate. If the change rate exceeds 30%, the script warns; if it exceeds 50%, it forces a stop. This is a concrete guardrail against the common failure of aggressive humanizers that rewrite everything and lose the author's voice. The quality grades A through D are tied to this gate: grade C triggers a second pass if over-editing signals appear, and grade D demands human review.

Installation and usage across CLIs

The repository supports Claude Code, GitHub Copilot CLI, OpenAI Codex CLI, and Gemini CLI. The recommended path for Copilot is the plugin marketplace: add the repo with copilot plugin marketplace add epoko77-ai/im-not-ai, then install with copilot plugin install humanize-korean@im-not-ai. Claude Code uses slash commands: /plugin marketplace add, then /plugin install. There is also a clone-and-script method for Claude Code and Codex: git clone, then run ./install.sh, which auto-detects installed claude or codex and creates global symlinks. The install script supports --claude-only and --codex-only flags. Updates come from ./update.sh or /plugin update. The README warns that Copilot and Codex only provide a single-call path; the multi-call standard and heavy pipelines are Claude Code exclusive. That means users of other CLIs get the light path only, regardless of text quality. The project also includes a separate command, korean-ai-tell-taxonomist, for managing the taxonomy and approving new patterns.

Where it is the wrong tool

The most obvious gap is language: this is Korean-only. The pattern taxonomy is built from Korean translationese and honorifics, so it has no value for English or other languages. The second limitation is the dependence on the calling CLI. If you use Copilot or Codex, you get only the single-call route, which means no diagnosis and no finalize step. For a heavily AI-slopped text that route may not catch everything, and the README does not claim it does. The third issue is cost transparency. The README gives token numbers for one measured case, but there is no guarantee of quality equivalence across models, and the user must pick the model. The project does not provide a web interface or a standalone API; it is a skill that runs inside a specific agentic CLI. If you do not use those CLIs, im-not-ai is not directly usable.

A real alternative: generic rewriting prompts

The alternative is not another Korean humanizer; it is writing your own rewriting prompt for a general LLM. Many users already do this: they paste text into ChatGPT or Claude and say "make this sound more human." That approach has no taxonomy, no severity levels, and no change-rate gate. It relies on the model's implicit knowledge of what AI text looks like, which is inconsistent and often results in either minimal changes or full rewrites that alter meaning. im-not-ai's difference is the explicit, documented pattern list and the deterministic pre-scoring. The trade-off is that im-not-ai constrains the pipeline to fixed routes, while a custom prompt can be adapted on the fly. For a one-off text, a prompt is cheaper and requires no installation. For repeated Korean writing, the taxonomy and the over-editing guardrail give im-not-ai an edge that a prompt cannot match.

Maintenance, licensing, and upgrade cost

The repository is under the MIT license, which permits commercial use, modification, and redistribution with attribution. The project is actively maintained, with releases in July and August 2026 addressing plugin skill location and path resolution. The update script and the plugin update command make upgrades straightforward. However, the maintenance cost is not zero. The taxonomy is an external SSOT that must be kept in sync with the skill's references. The README mentions a hold pattern awaiting verification, which implies ongoing curation. The retired agents from v2.1 and the development-only agents in agents/ mean the repository contains more than the runtime skill, and a user who clones it must distinguish between what runs and what is historical. The install.sh auto-detection may fail on unusual setups, and the README does not describe a fallback beyond manual symlinking. For a team, the real cost is learning the taxonomy and trusting the severity levels, which requires reading the reference files before relying on the output.

Editorial conclusion

Adopt im-not-ai if you write or edit Korean with Claude Code, Copilot CLI, Codex CLI, or Gemini CLI and need to remove AI-typical phrasing without altering facts or numbers. Skip it if you work primarily in English or other languages, or if your text is under 15,000 characters and you want a single fast pass. Verify first that your CLI supports the plugin marketplace path, or that install.sh detects your installed tools. Confirm the change-rate gate behavior and the exact severity thresholds in the taxonomy files before trusting it on sensitive content.

Official sources

  1. epoko77-ai/im-not-ai on GitHub
  2. License: MIT
  3. Project website
  4. README
  5. Releases
Community notes

Community notes