feat(korean-humanizer): rebuild v2 on im-not-ai framework

Build on happy-nut's PR #311 korean-humanizer skill (cherry-picked,
authorship preserved) by re-centering it on the epoko77-ai/im-not-ai
(Humanize KR, MIT) methodology:

- 4대 철칙 (의미 불변 · 근거 기반 · 장르 유지 · 과윤문 금지 30%/50% 가드)
- S1/S2/S3 severity tiers and A~D quality grades
- A~J taxonomy with Korean-specific patterns (A-16 그/그녀 강박,
  A-18 관계절 좌향 수식, A-19 이중 조사, C-11 연결어미 뒤 쉼표, E-7 경어법)
- detect -> rewrite -> audit -> grade loop with self-check checklist
- references/ai-tell-taxonomy.md full A~J table
- docs/features/korean-humanizer.md crediting im-not-ai and happy-nut
- README row + link, regenerated plugin.json, docs regression test

Co-authored-by: happy-nut <happynut.dev@gmail.com>
This commit is contained in:
Jeffrey (Dongkyu) Kim 2026-06-10 14:32:44 +09:00
commit e25f8dd9ab
6 changed files with 463 additions and 444 deletions

View file

@ -53,6 +53,7 @@
"./korea-weather",
"./korean-character-count",
"./korean-cinema-search",
"./korean-humanizer",
"./korean-jangbu-for",
"./korean-law-search",
"./korean-marathon-schedule",

View file

@ -107,6 +107,7 @@ Claude Code, Codex, OpenCode, OpenClaw/ClawHub 등 각종 코딩 에이전트
| 네이버 뉴스 검색 | `naver-news-search` | 네이버 검색 Open API 뉴스 검색으로 기사 제목·요약·발행시각·원문/네이버 링크를 정리 | 불필요 | [네이버 뉴스 검색 가이드](docs/features/naver-news-search.md) |
| 한국어 글자 수 세기 | `korean-character-count` | 한국어 텍스트의 글자 수·줄 수·UTF-8/NEIS byte 수를 결정론적으로 계산 | 불필요 | [한국어 글자 수 세기 가이드](docs/features/korean-character-count.md) |
| 한국어 유행어 글쓰기 | `korean-slang-writing` | 나무위키 유행어 기반 큐레이션 시드로 한국 유행어 후보 조회, 무드/문맥/safety 필터 및 나무위키 best-effort 요약으로 한국어 글을 유행어 느낌으로 작성 | 불필요 | [한국어 유행어 글쓰기 가이드](docs/features/korean-slang-writing.md) |
| 한국어 AI 윤문 | `korean-humanizer` | AI가 쓴 티 나는 한국어 글을 번역체·AI 상투어·과장된 의의·줄표/이모지 등 흔적을 심각도(S1/S2/S3)로 분류해 의미는 보존하며 사람 글로 윤문, 목표 글자수도 맞춤 | 불필요 | [한국어 AI 윤문 가이드](docs/features/korean-humanizer.md) |
| 한국 중세 국어풍 변환 | `korean-middle-korean` | 한국어 입력문을 중세국어풍 조사·어미·Hanja 힌트·성조점이 섞인 창작용 문체로 결정론적 변환 | 불필요 | [한국 중세 국어풍 변환 가이드](docs/features/korean-middle-korean.md) |
| K-스킬 클리너 | `k-skill-cleaner` | 인터뷰와 코딩 에이전트별 트리거 횟수 통계를 합쳐 불필요한 K-스킬 삭제 후보를 추천 | 불필요 | [K-스킬 클리너 가이드](docs/features/k-skill-cleaner.md) |
@ -228,6 +229,7 @@ Claude Code, Codex, OpenCode, OpenClaw/ClawHub 등 각종 코딩 에이전트
- [네이버 뉴스 검색 가이드](docs/features/naver-news-search.md)
- [한국어 글자 수 세기 가이드](docs/features/korean-character-count.md)
- [한국어 유행어 글쓰기 가이드](docs/features/korean-slang-writing.md)
- [한국어 AI 윤문 가이드](docs/features/korean-humanizer.md)
- [한국 중세 국어풍 변환 가이드](docs/features/korean-middle-korean.md)
- [K-스킬 클리너 가이드](docs/features/k-skill-cleaner.md)
- [릴리스/배포 가이드](docs/releasing.md)

View file

@ -0,0 +1,60 @@
# 한국어 AI 윤문 (korean-humanizer) 가이드
## 이 기능으로 할 수 있는 일
- ChatGPT·Claude·Gemini 등이 쓴 "AI 티 나는" 한국어 글을 자연스러운 사람 글로 윤문
- 번역체, AI 상투어, 과도한 명사화·피동, 3의 법칙, 과장된 의의 부여, 마무리 상투구, 챗봇 잔재, 줄표·이모지·곡선따옴표 같은 흔적을 **심각도(S1/S2/S3)** 로 분류해 탐지
- "이 글에서 AI 흔적 찾아줘"처럼 고치지 않고 진단만 (탐지 리포트 + 심각도)
- 목표 글자수 지정 시(`length=1000`, "1000자로") ±5% 안으로 분량 조정, 공백 포함/제외 글자수 보고
- 사용자 글 샘플을 주면 그 말투(voice)로 재작성
## 왜 별도 스킬이 필요한가
- 영어권 humanizer(QuillBot·Undetectable AI 등)는 한국어에 약하다. 한국어 AI 글의 티는 대부분 **영어 번역투**와 격식을 가장한 **상투어**에서 나온다.
- 단순 맞춤법 교정(`korean-spell-check`)이나 유행어 입히기(`korean-slang-writing`)와 달리, 이 스킬은 의미를 보존하면서 **문체·리듬·표현**만 사람답게 되돌린다.
- 과교정을 막기 위해 4대 철칙(의미 불변 · 근거 기반 · 장르 유지 · 과윤문 금지)과 변경률 가드(30% 경고, 50% 중단)를 둔다.
## 먼저 필요한 것
- 추가 설치·API 키 없음. 이 스킬은 프롬프트/지식 기반이며 외부 호출이나 스크립트가 없다.
- (선택) 정확한 글자수 카운팅이 필요하면 `korean-character-count` 스킬과 연동된다.
## 기본 흐름 (탐지 → 윤문 → 감사 → 등급)
1. **트리아지** — 흔적이 무더기인지, 서식만 문제인지, 산문까지 다시 써야 하는지 먼저 정한다.
2. **탐지** — A~J 분류 카탈로그로 흔적을 span·심각도로 표시한다. S1부터 본다.
3. **윤문** — 흔적을 자연스러운 표현으로 교체한다. 의미·사실·고유명사·수치는 100% 보존한다.
4. **감사** — "왜 아직 AI 같은가?"를 다시 묻고, 자가검증 6항과 변경률을 점검한다. 위반이면 롤백 후 재윤문.
5. **등급** — A~D로 자가 채점한다. C·D면 추가 윤문이나 사람 검토를 권한다.
전체 패턴 표(A~J, 60+ 서브 패턴)는 스킬 디렉터리의 [`references/ai-tell-taxonomy.md`](../../korean-humanizer/references/ai-tell-taxonomy.md)에 있다.
## 사용 예시
```text
이 글 AI 티 안 나게 자연스럽게 다듬어줘:
[ChatGPT/Claude 초안 붙여넣기]
```
```text
이 글에서 AI 흔적만 찾아줘 (고치지 말고 심각도까지)
```
```text
1000자로 맞춰서 번역체 고쳐줘
```
## 제한사항
- 문체만 고친다. 사실관계 확인·출처 보강은 하지 않는다(필요하면 별도 리서치).
- 원문에 없는 내용을 창작해 채우지 않는다(의미 보존이 원칙).
- 변경률이 50%를 넘으면 작업을 중단하고 사람 검토를 권한다.
## 감사의 말 (Acknowledgments)
이 스킬은 두 기여 위에 만들어졌다.
- **[happy-nut](https://github.com/happy-nut) (Hyungsun Song)** 님이 PR [#311](https://github.com/NomaDamas/k-skill/pull/311)로 최초 `korean-humanizer` 스킬과 33개 한국어 패턴 카탈로그·예문, triage/length-control 설계를 기여했다. 이 가이드와 v2 스킬의 토대다.
- **[epoko77-ai/im-not-ai](https://github.com/epoko77-ai/im-not-ai)** (Humanize KR, MIT)의 방법론을 중심으로 v2를 재구성했다. A~J 분류 체계, S1/S2/S3 심각도, 4대 철칙, 변경률 30%/50% 가드, 품질 등급(A~D), 그리고 A-16(그/그녀 강박)·A-18(관계절 좌향 수식)·A-19(이중 조사)·C-11(연결어미 뒤 쉼표)·E-7(경어법 일관성) 같은 한국어 고유 패턴이 여기서 왔다.
원형은 영어권 [blader/humanizer](https://github.com/blader/humanizer)와 [Wikipedia: Signs of AI writing](https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing)이다. 두 프로젝트와 happy-nut 님의 기여에 감사한다.

View file

@ -1,500 +1,308 @@
---
name: korean-humanizer
description: AI가 쓴 티가 나는 한국어 글을 자연스러운 사람 글로 고친다. 번역체, AI 상투어, 과도한 명사화·피동, 3의 법칙, 과장된 의의 부여, 마무리 상투구, 챗봇 잔재, 줄표·곡선따옴표 같은 한국어 특유의 AI 흔적을 잡아 의미는 보존하면서 다시 쓴다. 목표 글자수를 함께 주면(예: "1000자로", length=1000) 그 분량에 맞춰 늘리거나 줄인다. "AI 티 안 나게", "사람이 쓴 것처럼", "자연스럽게 다듬어줘", "번역체 고쳐줘", "어색한 거 고쳐줘", "N자로 맞춰서" 같은 요청에 사용.
description: AI가 쓴 티가 나는 한국어 글을 자연스러운 사람 글로 고친다. 번역체, AI 상투어, 과도한 명사화·피동, 3의 법칙, 과장된 의의 부여, 마무리 상투구, 챗봇 잔재, 줄표·곡선따옴표 같은 한국어 특유의 AI 흔적을 심각도(S1/S2/S3)로 분류해 잡아내고 의미는 보존하면서 다시 쓴다. 목표 글자수를 함께 주면(예: "1000자로", length=1000) 그 분량에 맞춰 늘리거나 줄인다. "AI 티 안 나게", "사람이 쓴 것처럼", "자연스럽게 다듬어줘", "번역체 고쳐줘", "어색한 거 고쳐줘", "N자로 맞춰서" 같은 요청에 사용.
license: MIT
metadata:
category: writing
locale: ko-KR
phase: v1
phase: v2
---
# Korean Humanizer: AI 한국어 글 흔적 지우기
당신은 AI가 생성한 한국어 글에서 "기계가 쓴 티"를 찾아 자연스러운 사람의 글로 고치는 편집자다. 영어권의 humanizer(Wikipedia "Signs of AI writing" 기반)가 만든 방법론을 가져오되, **한국어에서 실제로 드러나는 AI 흔적**을 기준으로 다시 만든 카탈로그를 쓴다. 한국어 AI 글의 가장 큰 두 가지 정체는 (1) 영어를 직역한 듯한 **번역체**와 (2) 격식 있어 보이려고 의미 없이 부풀린 **상투어**다.
당신은 AI가 생성한 한국어 글에서 "기계가 쓴 티"를 찾아 자연스러운 사람의 글로 되돌리는 편집자다. 한국어 AI 글의 가장 큰 두 정체는 (1) 영어를 직역한 듯한 **번역체**와 (2) 격식 있어 보이려고 의미 없이 부풀린 **상투어**다. 이 둘을 1순위로 잡는다.
## What this skill does
이 스킬은 **프롬프트/지식 기반**이다. 외부 API나 스크립트 없이, 아래 4대 철칙 → 심각도 분류 → 탐지·윤문·감사·등급 루프와 패턴 카탈로그만으로 동작한다. 전체 A~J 분류 체계와 처방 표는 [`references/ai-tell-taxonomy.md`](references/ai-tell-taxonomy.md)에 있다.
사용자가 "AI 티 안 나게 고쳐줘", "사람이 쓴 것처럼", "자연스럽게 다듬어줘", "번역체 좀 고쳐줘" 같은 요청을 하면, 아래 패턴 목록으로 글을 훑어 AI 흔적을 찾아내고, **의미를 보존하면서** 자연스러운 한국어로 다시 쓴다.
## 4대 철칙 (먼저 새긴다)
- 이 스킬은 **프롬프트/지식 기반**이다. 외부 API나 스크립트 없이, 아래 카탈로그와 절차만으로 동작한다.
- 핵심은 두 가지다: (1) 한국어 AI 흔적을 정확히 식별하는 **패턴 카탈로그**, (2) 초안 → 자가 점검 → 최종본의 **재작성 루프**.
- 패턴을 기계적으로 다 지우지 않는다. 사람도 쓰는 표현을 멀쩡한 글에서 솎아내면 오히려 글을 망친다. **False positive 가이드**(아래)를 반드시 함께 본다.
1. **의미 불변** — 사실·주장·수치·고유명사·직접 인용은 100% 원문 보존. 한 글자도 바꾸거나 지어내지 않는다.
2. **근거 기반** — 탐지된 흔적(span)에만 수술적으로 손댄다. 탐지 없는 멀쩡한 구간은 건드리지 않는다.
3. **장르 유지** — 칼럼을 에세이·문학으로, 리포트를 블로그체로 옮기지 않는다. 원문의 격식(register)을 지킨다.
4. **과윤문 금지** — 변경률이 **30%를 넘으면 경고**, **50%를 넘으면 강제 중단·롤백**. 멀쩡한 사람 글을 평균값으로 깎아내는 게 가장 흔한 실패다.
## Your Task
## 심각도 (S1 / S2 / S3)
글을 받으면:
흔적은 단발이 아니라 **무더기**로 판단하되, 한 흔적의 무게는 심각도로 가른다.
1. **AI 패턴 식별** — 아래 카탈로그로 글을 훑어 흔적을 표시한다. 단발성 흔적보다 **무더기로 뭉친 흔적**을 신뢰한다.
2. **지우지 말고 다시 써라** — AI식 표현을 자연스러운 표현으로 *교체*하되, 원문이 다루는 내용은 빠짐없이 다룬다. 원문이 다섯 문단이면 재작성도 다섯 문단이다. 분량을 임의로 줄이지 않는다.
3. **의미 보존** — 핵심 메시지와 사실관계는 그대로 둔다. 없는 사실을 지어내지 않는다.
4. **결(톤)을 맞춰라** — 격식/비격식, 기술 문서/에세이/SNS 등 글의 성격에 맞춘다. 개성은 글의 성격과 글쓴이의 목소리가 허락할 때만 더한다 (PERSONALITY AND SOUL 참고).
- **S1 결정적** — 한 번만 나와도 AI 확신. 무조건 제거. (예: 이중피동 "되어지다", "결론적으로", "시사하는 바가 크다", 연결어미 뒤 쉼표 떡칠, 이모지 장식, 챗봇 잔재)
- **S2 강함** — 1~2회는 허용, 3회 이상 반복되면 제거. (예: "~을 통해", "~에 의해" 피동, 3단 공식, 미래 단정 "~할 것이다")
- **S3 약함** — 그 자체로는 신호가 아니다. 다른 패턴과 무더기로 겹칠 때만 손댄다. (예: 곡선 따옴표 단독, 줄표 단독, 단호한 짧은 문장 하나)
초안 → 점검 → 최종 루프와 최종 산출물 형식은 아래 **Process and Output**에 정의돼 있다.
## 절대 건드리지 않는 것 (Do-NOT)
## Triage: 최소 개입 원칙 (먼저 판단)
탐지·윤문 양쪽에서 다음은 손대지 않는다. 이걸 바꾸면 의미 불변 철칙 위반이다.
다시 쓰기 전에 **무엇을, 어디까지 고칠지** 먼저 정한다. 가장 흔한 실패는 멀쩡한 사람 글을 통째로 다시 써서 평균값으로 깎아내는 것이다(과교정). 다음 순서로 판단한다.
- 고유명사·제품명·모델명·기관명·인명·지명
- 수치·날짜·단위·통계·수식·화학식
- 큰따옴표 안 직접 인용, 법률 조문
- 업계 표준 영어 약어(LLM·GPU·API·MCP 등)
- 글쓴이가 일부러 넣은 구체적 디테일·곁말(아래 "사람이 쓴 글의 신호" 참고)
1. **흔적이 무더기인가?** 단발 흔적은 신호가 아니다(DETECTION GUIDANCE 참고). 줄표 하나, 접속어 하나로 글을 갈아엎지 않는다.
2. **서식만 문제면 서식만 고친다.** 볼드 떡칠, 이모지, 가운뎃점·줄표 같은 **서식 흔적**이 전부라면, 산문은 거의 그대로 두고 서식만 정리한다. 구체적인 디테일·고유명사·괄호 곁말은 사람 신호이니 **건드리지 않는다**.
3. **산문 자체가 AI식일 때만 다시 쓴다.** 번역체·상투어·3의 법칙이 문장 구조에 박혀 있을 때만 문장 단위로 재작성한다.
4. **고친 줄을 셀 수 있어야 한다.** "왜 이 표현을 바꿨는가"를 한 줄로 답할 수 없는 변경은 하지 않는다. 동의어 바꿔치기(패턴 13)와 접속어 추가(패턴 27)를 *내가* 저지르지 않는지 특히 경계한다.
## 작업 절차 (탐지 → 윤문 → 감사 → 등급)
원문이 이미 구체적이고 사람 냄새가 나면, 최선의 답은 "거의 그대로 두기"일 수 있다. 의심스러우면 고치지 말고 남긴다.
글을 받으면 다음 루프를 돈다.
0. **트리아지** — 무엇을 어디까지 고칠지 먼저 정한다.
- 흔적이 무더기인가? 단발 흔적(줄표 하나, 접속어 하나)으로 글을 갈아엎지 않는다.
- **서식만 문제면 서식만 고친다.** 볼드 떡칠·이모지·가운뎃점·줄표가 전부라면 산문은 그대로 두고 서식만 정리한다.
- **산문 자체가 AI식일 때만** 문장 단위로 다시 쓴다.
- 목표 글자수가 있으면 함께 메모한다.
1. **탐지** — 카탈로그(A~J)로 글을 훑어 흔적을 span·분류·심각도로 표시한다. S1부터 본다.
2. **윤문** — 흔적을 자연스러운 표현으로 *교체*한다. 지우지 말고 다시 쓴다. 원문이 다루는 내용은 빠짐없이 다루고, 분량을 임의로 줄이지 않는다.
3. **감사(audit)** — 다시 묻는다: "이 글이 왜 아직 AI 같은가?" 잔존 흔적을 짧게 짚고, *내가* 동의어 돌려쓰기(F계열)나 접속어 추가(H계열)로 새 흔적을 만들지 않았는지, 변경률이 30%를 넘지 않았는지 점검한다. 자가검증 6항(아래) 위반이면 해당 edit을 롤백하고 다시 윤문한다. 루프는 최대 1~2회.
4. **등급** — 아래 품질 등급으로 자가 채점한다. C·D면 사용자에게 추가 윤문 또는 사람 검토를 권한다.
## 품질 등급 (윤문 후 자가 채점)
- **A** — S1 잔존 0건, S2 잔존 2건 이하, 변경률 10~25%, 자가검증 6항 모두 통과.
- **B** — S1 잔존 0건, S2 잔존 4건 이하, 자가검증 5항 이상 통과.
- **C** — S1 잔존 1~2건 또는 과윤문 시그널 → 2차 윤문 권고.
- **D** — S1 잔존 3건 이상 또는 변경률 50% 초과 → 작업 중단, 사람 검토 권고.
## Length control (목표 글자수 맞추기)
사용자가 목표 분량을 주면 그 길이에 맞춰 다시 쓴다. 호출 예: `length=1000`, "1000자로 맞춰서", "절반으로 줄여줘", "300자 내외로".
사용자가 목표 분량을 주면 그 길이에 맞다. 호출 예: `length=1000`, "1000자로 맞춰서", "절반으로 줄여줘", "300자 내외로".
- **단위 기본값은 공백 포함 글자수**다. 사용자가 "공백 제외"를 명시하면 그쪽으로 센다. 어느 쪽인지 애매하면 두 수치를 모두 보고한다.
- **허용 오차는 ±5%**를 기본으로 한다(예: 1000자 목표 → 950~1050자). 더 엄격히("정확히 1000자") 요구하면 ±2% 안으로 맞춘다.
- **늘릴 때**: 군더더기·AI 패딩으로 채우지 않는다. 그건 이 스킬이 *지우려는* 바로 그 흔적이다. 원문에 이미 있는 구체적 사실(고유명사, 수치, 사례)을 *풀어서* 분량을 만든다. **없는 사실을 지어내지 않는다.** 채울 구체가 부족하면 추측으로 메우지 말고, "어떤 사례·수치를 더 넣을 수 있는지" 사용자에게 되묻는다.
- **줄일 때**: 군더더기 구절(패턴 24), 완충 표현(패턴 25), 막연한 마무리(패턴 26), 중복부터 덜어낸다. 구체적 디테일과 핵심 사실은 마지막까지 지킨다.
- **글자수는 추정하지 말고 실제로 센다.** `korean-character-count` 스킬이 있으면 그것으로 결정론적으로 센다(grapheme/공백 기준 정확). 없으면 직접 정확히 세고, 최종 응답에 **공백 포함/제외 글자수를 함께 표기**한다.
- 목표 분량을 안 주면 **원문 길이를 보존**한다. 임의로 늘이거나 줄이지 않는다.
- **단위 기본값은 공백 포함 글자수.** "공백 제외"를 명시하면 그쪽으로 센다. 애매하면 두 수치를 모두 보고한다.
- **허용 오차는 ±5%** 기본(1000자 목표 → 950~1050자). "정확히"를 요구하면 ±2% 안으로.
- **늘릴 때**: 군더더기·AI 패딩으로 채우지 않는다(그건 이 스킬이 지우려는 흔적이다). 원문에 이미 있는 구체적 사실*풀어서* 분량을 만든다. **없는 사실을 지어내지 않는다.** 채울 구체가 부족하면 추측 대신 사용자에게 되묻는다.
- **줄일 때**: 군더더기 구절·완충 표현·막연한 마무리·중복부터 덜어낸다. 구체적 디테일과 핵심 사실은 마지막까지 지킨다.
- **글자수는 추정하지 말고 실제로 센다.** `korean-character-count` 스킬이 있으면 그것으로 결정론적으로 세고(grapheme/공백 기준), 없으면 직접 정확히 센 뒤 **공백 포함/제외 수치를 함께 표기**한다.
- 목표 분량을 안 주면 **원문 길이를 보존**한다.
## Voice Calibration (선택)
사용자가 자기 글 샘플(예전에 직접 쓴 글)을 주면, 다시 쓰기 전에 먼저 분석한다.
사용자가 자기 글 샘플을 주면, 다시 쓰기 전에 먼저 분석한다.
1. **샘플부터 읽는다.** 다음을 메모한다.
- 문장 길이 패턴 (짧고 끊어 치는지, 길게 흐르는지, 섞는지)
- 종결어미와 문체 (해요체/합니다체/해라체/반말, 구어/문어)
- 어휘 수준 (편한 말인지, 전문어인지, 그 사이인지)
- 자주 쓰는 입버릇, 접속 습관 ("근데", "그래서", "암튼" 등)
- 한자어 비중, 외래어/영어 섞는 정도
2. **그 목소리로 다시 쓴다.** AI 패턴을 지우는 데서 그치지 말고, 샘플의 말투로 *대체*한다. 글쓴이가 "되게", "약간"을 쓰면 "매우", "다소"로 격상하지 않는다.
1. **샘플을 읽고 메모한다.** 문장 길이 패턴(짧게 끊는지/길게 흐르는지), 종결어미·문체(해요체/합니다체/반말, 구어/문어), 어휘 수준, 입버릇·접속 습관("근데/그래서/암튼"), 한자어·외래어 비중.
2. **그 목소리로 다시 쓴다.** AI 패턴을 지우는 데서 그치지 말고 샘플 말투로 *대체*한다. 글쓴이가 "되게/약간"을 쓰면 "매우/다소"로 격상하지 않는다.
3. **샘플이 없으면** 기본값(자연스럽고 리듬이 살아 있는 목소리, PERSONALITY AND SOUL 참고)으로 간다.
### 샘플 제공 방법
- 인라인: "이 글 자연스럽게 고쳐줘. 내 말투 샘플은 이거야: [샘플]"
- 파일: "이 글 고쳐줘. 내 글 스타일은 [파일 경로] 참고해줘."
제공 방법: 인라인("내 말투 샘플은 이거야: …") 또는 파일("내 스타일은 [경로] 참고").
## PERSONALITY AND SOUL
AI 패턴을 지우는 건 절반에 불과하다. 영혼 없는 글은 슬롭(slop)만큼이나 티가 난다. 좋은 글에는 사람이 있다.
AI 패턴을 지우는 건 절반다. 영혼 없는 글은 슬롭(slop)만큼이나 티가 난다.
**이 절은 글의 성격과 글쓴이의 목소리가 허락할 때만 적용한다** — 블로그, 에세이, 칼럼, 후기, 개인적인 글. 백과사전·기술 문서·법률·공문에서는 중립적이고 담백한 문체 *그 자체가* 올바른 사람의 목소리다. 거기에 사견이나 1인칭을 억지로 넣지 않는다.
**이 절은 글의 성격이 허락할 때만 적용한다** — 블로그·에세이·칼럼·후기·개인적 글. 백과사전·기술 문서·법률·공문에서는 중립적이고 담백한 문체 *그 자체가* 올바른 사람의 목소리다. 거기에 사견·1인칭을 억지로 넣지 않는다(장르 유지 철칙).
### 영혼 없는 글의 징후 (문법적으로 "깨끗"해도)
- 모든 문장이 같은 길이, 같은 구조
- 모든 문장이 같은 길이·구조
- 의견 없이 중립 보고만 함
- 망설임이나 복잡한 심경이 없음
- 어울리는 자리인데도 1인칭이 없음
- 유머도, 날도, 개성도 없음
- 보도자료나 위키 문서처럼 읽힘
- 유머도, 날도, 개성도 없음 — 보도자료나 위키처럼 읽힘
### 목소리를 넣는 법
- **의견을 가져라.** 사실만 나열하지 말고 반응해라. "솔직히 이걸 어떻게 받아들여야 할지 모르겠다"가 장단점 중립 나열보다 사람 같다.
- **리듬을 흔들어라.** 짧게 친다. 그러다 한 번씩 천천히 흘러가며 끝까지 가는 긴 문장을 둔다. 섞어라.
- **약간의 흐트러짐을 허용하라.** 완벽한 구조는 알고리즘 같다. 곁가지, 여담, 끝맺지 못한 생각이 사람 냄새를 낸다.
- **의견을 가져라.** "솔직히 이걸 어떻게 받아들여야 할지 모르겠다"가 장단점 중립 나열보다 사람 같다.
- **리듬을 흔들어라.** 짧게 친다. 그러다 한 번씩 끝까지 흘러가는 긴 문장을 둔다. 섞어라.
- **약간의 흐트러짐을 허용하라.** 완벽한 구조는 알고리즘 같다. 곁가지·여담·끝맺지 못한 생각이 사람 냄새를 낸다.
### Before (깨끗하지만 영혼 없음)
> 이번 실험은 흥미로운 결과를 보여주었다. 에이전트는 300만 줄의 코드를 생성했다. 일부 개발자는 깊은 인상을 받았고, 다른 이들은 회의적이었다. 그 함의는 여전히 불분명하다.
### After (맥박이 있음)
> 이걸 어떻게 받아들여야 할지 솔직히 모르겠다. 코드 300만 줄을, 사람이 자는 동안 기계가 짜놨다. 개발자 절반은 멘붕이 왔고, 나머지 절반은 이게 왜 별거 아닌지 설명하느라 바쁘다. 진실은 아마 그 사이 어디 시시한 지점에 있겠지만, 나는 밤새 일했을 그 에이전트들이 자꾸 떠오른다.
> 이걸 어떻게 받아들여야 할지 솔직히 모르겠다. 코드 300만 줄을, 사람이 자는 동안 기계가 짜놨다. 개발자 절반은 멘붕이 왔고, 나머지 절반은 이게 왜 별거 아닌지 설명하느라 바쁘다. 진실은 아마 그 사이 어디 시시한 지점에 있겠지만, 나는 밤새 일했을 그 에이전트들이 자꾸 떠오른다.
---
# 패턴 카탈로그
# 패턴 카탈로그 (A ~ J)
## 번역체 패턴 (한국어 AI 글의 1순위 정체)
각 패턴은 `분류 ID · 심각도`로 표시한다. 전체 60+ 서브 패턴 표는 [`references/ai-tell-taxonomy.md`](references/ai-tell-taxonomy.md)에 있다. 아래는 한국어 AI 글에서 가장 자주, 가장 강하게 드러나는 핵심만 추렸다.
### 1. 영어 직역식 조사·구문
## A. 번역체 (한국어 AI 글의 1순위 정체)
**주의할 표현:** ~을 통해(through), ~에 대한/에 대해(about/regarding 남발), ~에 있어서(in), ~로서(as 남발), ~와 함께(with), ~의 경우(in the case of), ~중 하나(one of the), ~라는 사실(the fact that)
### A-1·A-2·A-3. 영어 직역식 조사·구문 — S1
**주의:** ~을 통해(through), ~에 대해/대한(about), ~에 있어서(in), ~로서(as), ~와 함께(with), ~의 경우(in the case of), ~중 하나(one of the), ~라는 사실(the fact that). 영어 전치사 구문을 조사로 1:1 치환해 어색하게 길어진다. 한국어는 동사·어순으로 녹인다.
**문제:** AI 한국어는 영어 전치사 구문을 한국어 조사로 1:1 치환해 어색하게 길어진다. 한국어는 이런 연결을 동사나 어순으로 녹인다.
> **Before:** 이 도구를 통해 사용자는 데이터에 대한 분석을 수행함에 있어서 효율성을 가질 수 있다. 이것은 가장 중요한 기능 중 하나이다.
> **After:** 이 도구로 사용자는 데이터를 효율적으로 분석할 수 있다. 핵심 기능이다.
**Before:**
> 이 도구를 통해 사용자는 데이터에 대한 분석을 수행함에 있어서 효율성을 가질 수 있다. 이것은 가장 중요한 기능 중 하나이다.
### A-7. "가지다(have)" 직역 — S1
**주의:** 중요성을 가지다, 의미를 가지다, 영향력을 가지다, ~을 가지고 있다. have를 "가지다"로 직역한 것. "있다"·"~다"·동사로 푼다.
**After:**
> 이 도구로 사용자는 데이터를 효율적으로 분석할 수 있다. 핵심 기능이다.
> **Before:** 이 연구는 중요한 의미를 가진다. 또한 큰 영향력을 가지고 있다.
> **After:** 이 연구는 중요하다. 영향력도 크다.
### 2. 무생물 주어와 "그것은/이것은"
### A-8·A-9. 과도한 피동·이중피동 — S1
**주의:** ~되어진다, ~지게 된다, ~여겨진다, ~보여진다("되어지다"는 이중피동, 비문에 가깝다), "~에 의해" 피동. 행위자를 주어로 세워 능동으로 풀면 짧고 명확해진다.
**주의할 표현:** 이것은 ~이다, 그것은 ~을 의미한다, ~는 ~을 가능하게 한다, ~는 ~을 제공한다(provides), 무생물 주어 + 행위 동사
> **Before:** 이 방법은 효과적이라고 보여지며, AI에 의해 생성된 코드가 많은 곳에서 사용되어지고 있다.
> **After:** 이 방법은 효과적이고, AI가 만든 코드가 여러 곳에서 쓰인다.
**문제:** 영어의 it/this/the system 주어를 직역해 한국어에서 어색한 무생물 주어 문장이 된다. 한국어는 주어를 자주 생략하고, 사람을 주어로 두는 편이 자연스럽다.
### A-16. "그/그녀/그것/그들" 강박적 사용 — S1
**주의:** 한 단락에 영어 대명사(he/she/it/they)를 직역한 "그/그녀/그것/그들"이 3회 이상. 한국어는 주어를 자주 생략하거나(영형) 호칭·명사구로 받는다. 무생물 주어 "이것은/그것은 ~이다"도 같은 뿌리다.
**Before:**
> 이 기능은 사용자에게 편의성을 제공한다. 그것은 작업 시간의 단축을 가능하게 한다.
> **Before:** 이 기능은 사용자에게 편의성을 제공한다. 그것은 작업 시간의 단축을 가능하게 한다. 그리고 그것은 비용도 줄인다.
> **After:** 이 기능을 쓰면 편하다. 작업 시간이 줄고 비용도 준다.
**After:**
> 이 기능을 쓰면 편하다. 작업 시간이 줄어든다.
### A-17. 복수 접미사 "~들" 남발 — S2
영어 복수 -s를 기계적으로 "~들"로 옮긴 것. 맥락으로 복수를 알면 "~들"을 거의 안 붙인다. "많은 사용자들이"처럼 수량어와 겹치면 특히 어색하다.
### 3. 복수 접미사 "~들" 남발
> **Before:** 많은 개발자들이 다양한 도구들을 사용하여 여러 문제들을 해결한다.
> **After:** 많은 개발자가 여러 도구로 다양한 문제를 해결한다.
**문제:** 영어 복수형 -s를 기계적으로 "~들"로 옮긴다. 한국어는 맥락으로 복수를 알면 "~들"을 거의 안 붙인다. "많은 사용자들이" 처럼 수량어와 겹치면 특히 어색하다.
### A-18. 관계절 좌향 수식 — S2
명사 앞에 3어절 이상의 긴 관형구·관계절이 좌향으로 쌓인다. 문장을 분리하거나 후치 동격절("X를 만났는데, 그 X는 …")로 푼다.
**Before:**
> 많은 개발자들이 다양한 도구들을 사용하여 여러 문제들을 해결한다.
> **Before:** 지난해 출시되어 시장에서 큰 호응을 얻으며 빠르게 점유율을 늘려온 이 제품은 곧 단종된다.
> **After:** 이 제품은 곧 단종된다. 지난해 출시돼 점유율을 빠르게 늘려온 제품이다.
**After:**
> 많은 개발자가 여러 도구로 다양한 문제를 해결한다.
### A-19. 이중 조사 "~에서의/~으로의/~에의" — S2
"~에서의/~에로의/~으로의/~에의/~으로부터의" 같은 겹조사. 절·구로 풀어쓴다(단순 "~의"는 대상 아님).
### 4. "가지다(have)" 직역
> **Before:** 일터에서의 변화와 미래로의 도약을 위한 준비
> **After:** 일터가 어떻게 바뀌고, 미래로 나아가려면 무엇을 준비해야 하는지
**주의할 표현:** 중요성을 가지다, 의미를 가지다, 영향력을 가지다, 특징을 가지다, ~을 가지고 있다
### A-6. 명사화 과잉 — S2
~의 진행, ~의 향상, ~을 실시/수행/진행, ~을 도모. 동사를 명사로 굳히고 "~하다/실시하다"를 덧댄 것. 동사로 풀면 살아난다.
**문제:** 영어 have를 "가지다"로 직역한다. 한국어는 "있다", "~다", 또는 동사로 푼다.
> **Before:** 성능의 향상을 위해 코드의 최적화를 진행하였다.
> **After:** 성능을 높이려고 코드를 최적화했다.
**Before:**
> 이 연구는 중요한 의미를 가진다. 또한 큰 영향력을 가지고 있다.
## B. 영어 인용·용어 과다
**After:**
> 이 연구는 중요하다. 영향력도 크다.
### B-1·B-2. 괄호 영어 병기·직역 가능한 영어 — S2
한글 + 괄호 영어를 매번 병기("주권 AI(Sovereign AI)" 반복)하거나, 옮길 수 있는 영어를 그대로 둔다. 첫 등장만 병기하고 이후 한글만. 단, 업계 표준 약어는 유지(Do-NOT).
### 5. 과도한 피동·이중피동
## C. 구조적 AI 패턴
**주의할 표현:** ~되어진다, ~지게 된다, ~되어지게 된다, ~여겨진다, ~보여진다, ~생각되어진다
### C-11. 연결어미 뒤 쉼표 — S1
**주의:** -고, -며, -지만, -면서, -아서/-어서 같은 연결어미 **직후의 쉼표**. AI 한국어의 강한 정체로, 6회 이상이면 결정적이다. 대부분 쉼표를 빼면 된다.
**문제:** AI는 행위자를 숨기고 피동을 겹쳐 쓴다("되어지다"는 이중피동으로 비문에 가깝다). 능동으로 풀면 명확하고 짧아진다.
> **Before:** 그는 회의를 마치고, 사무실로 돌아왔으며, 보고서를 작성했지만, 만족하지 못했다.
> **After:** 그는 회의를 마치고 사무실로 돌아와 보고서를 썼지만 만족하지 못했다.
**Before:**
> 이 방법은 효과적이라고 보여지며, 많은 곳에서 사용되어지고 있다.
### C-7. "먼저·반면·결국" 3단 공식 / 3의 법칙 — S2
포괄적으로 보이려고 항목을 억지로 셋씩 묶는다("A, B, 그리고 C", 명사 세 개 나열, 3단 접속 공식).
**After:**
> 이 방법은 효과적이고, 여러 곳에서 쓰인다.
> **Before:** 이 서비스는 빠르고, 안전하며, 편리합니다. 사용자에게 혁신과 가치와 만족을 제공합니다.
> **After:** 이 서비스는 빠르고 안전합니다. 무엇보다 쓰기 편합니다.
### 6. 명사화 과잉 (동작을 명사로 굳히기)
### C-5. 이모지 장식 — S1
제목·항목 앞 이모지. 칼럼·리포트면 전부 삭제.
**주의할 표현:** ~의 진행, ~의 향상, ~의 증가, ~을 실시/수행/진행, ~을 도모, ~에 대한 검토를 진행
> **Before:** 🚀 **출시:** 3분기에 출시됩니다 / 💡 **핵심:** 사용자는 단순함을 선호합니다
> **After:** 제품은 3분기에 출시된다. 사용자 조사에서 단순한 쪽이 선호됐다.
**문제:** 영어 동명사·명사구를 직역해 동사를 명사로 굳히고 "~하다/실시하다"를 덧댄다. 동사로 풀면 살아난다.
### C-10. 콜론 부제 헤딩 "X: Y" 반복 — S2
헤딩마다 "X: Y" 부제 패턴. 짧은 헤딩이나 평서 헤딩으로 바꾼다.
**Before:**
> 성능의 향상을 위해 코드의 최적화를 진행하였다.
## D. AI 특유의 관용구 (Signature Phrases)
**After:**
> 성능을 높이려고 코드를 최적화했다.
### D-1. 결산 피벗 — S1
**주의:** 결론적으로, 따라서, 이를 통해, 그러므로, 요약하면, 정리하면. 3회 초과면 1~2건만 다른 종결로 치환하고 나머지는 삭제.
## 내용 패턴
### D-2·D-3. "시사하는 바가 크다 / 주목할 만하다 / 본질적으로 / 핵심적으로" — S1
삭제하거나 구체 결론으로 바꾼다.
### 7. 과장된 의의·유산·거대 담론 부여
### D-4. hype 어휘 — S1
**고빈도 AI 단어:** 다채로운, 풍부한, 깊이 있는, 진정한, 궁극적으로, 중추적인, 필수적인, 혁신적인, 독보적인, 파격적인, 압도적인, 획기적인, ~을 아우르다, ~을 녹여내다, ~을 담아내다, ~을 선사하다, 자리매김하다, 발돋움하다, 방증하다, ~의 향연. 2023년 이후 글에 한꺼번에 몰려 나온다. 구체 수치·사실로 환원.
**주의할 표현:** 단순한 ~를 넘어, ~의 중요한 이정표, 한 획을 그었다, 새로운 지평을 열었다, ~의 패러다임을 바꾸었다, 빼놓을 수 없는, ~의 정수, 시대를 관통하는, ~의 산물, ~을 상징한다, 더 넓은 ~의 흐름 속에서
> **Before:** 이번 행사는 다채로운 볼거리를 선사하며, 지역 문화의 진정한 가치를 담아낸 축제로 자리매김했다. 이는 지역의 저력을 방증한다.
> **After:** 이번 축제에는 공연과 먹거리 장터가 열렸다. 지난해보다 방문객이 두 배 늘었다.
**문제:** AI는 사소한 사실에 "더 큰 의미"나 "시대적 흐름"을 갖다 붙여 중요성을 부풀린다.
### D-5. 의인화 추상 주어 — S1
"기술이 묻는다", "시대가 부른다" 같은 의인화. 사람·기관 주어로.
**Before:**
> 1989년 설립된 이 연구소는 지역 통계 발전사에 중요한 이정표를 세우며, 행정 분권화라는 시대적 흐름을 상징하는 산물로 자리매김했다.
### D-6. 결말 공식 "~할 때다 / ~해야 한다 / 지금이야말로" — S1
평서로 닫거나 삭제. → 막연한 긍정 마무리(귀추가 주목된다, 무한한 가능성, 밝은 미래)도 같은 부류.
**After:**
> 이 연구소는 1989년에 설립돼, 국가 통계청과 별개로 지역 통계를 수집·발표한다.
> **Before:** 앞으로 회사의 행보가 기대된다. 무한한 가능성을 향한 도약이 계속될 것이며, 이는 더 나은 미래를 향한 큰 걸음이다.
> **After:** 회사는 내년에 지점 두 곳을 더 열 계획이다.
### 8. 출처 없는 권위 호출 (weasel words)
### (내용) 과장된 의의 부여 — S1
단순한 ~를 넘어, ~의 중요한 이정표, 한 획을 그었다, 새로운 지평을 열었다, ~의 산물, ~을 상징한다. 사소한 사실에 거대 담론을 갖다 붙인다.
**주의할 표현:** 전문가들은 ~라고 말한다, 많은 사람들이 ~로 평가한다, 업계에서는, 일각에서는, ~로 알려져 있다, ~라는 평가를 받는다
> **Before:** 1989년 설립된 이 연구소는 지역 통계 발전사에 중요한 이정표를 세우며, 행정 분권화라는 시대적 흐름을 상징하는 산물로 자리매김했다.
> **After:** 이 연구소는 1989년에 설립돼, 국가 통계청과 별개로 지역 통계를 수집·발표한다.
**문제:** AI는 구체적 출처 없이 막연한 권위에 의견을 떠넘긴다.
### (내용) 출처 없는 권위 호출 — S2
전문가들은 ~라고 말한다, 많은 사람들이 ~로 평가한다, ~로 알려져 있다. 구체적 출처 없이 막연한 권위에 떠넘긴다.
**Before:**
> 이 강은 독특한 특성으로 인해 연구자들의 관심을 받고 있으며, 전문가들은 지역 생태계에서 중요한 역할을 한다고 말한다.
> **Before:** 이 강은 독특한 특성으로 연구자들의 관심을 받고 있으며, 전문가들은 중요한 역할을 한다고 말한다.
> **After:** 이 강에는 토종 어류 여러 종이 서식한다(2019년 ○○대 조사).
**After:**
> 이 강에는 토종 어류 여러 종이 서식한다(2019년 ○○대 조사).
## E. 리듬·종결어미
### 9. "도전 과제와 향후 전망" 식 상투 단락
### E-1·E-2. 문장 길이 균일 / 동일 종결어미 반복 — S2
문장 길이 표준편차가 낮고, "~다"가 4문장 이상 연속되며, "~고 있다" 진행형이 자동 매핑된다. 단문·장문을 의도적으로 섞고 종결어미를 다양화한다("~었다·~ㄴ다·~기 마련이다·~ㄹ 것이다"). "읽고 있다" → "읽는다"처럼 단순 시제 환원 가능 시 환원.
**주의할 표현:** ~에도 불구하고 여러 과제에 직면해 있다, 이러한 어려움에도, 향후 전망, 과제와 전망, 앞으로의 과제
### E-7. 경어법 일관성 손실 (대화·구어 한정) — S2
한 단락 안에서 해라/하게/하오/해요/합쇼체가 뒤섞인다. 격식을 하나로 통일한다.
**문제:** AI는 글 끝에 형식적인 "과제 / 전망" 단락을 붙인다. 내용 없이 구색만 맞춘다.
## F. 과도한 수식·중복
**Before:**
> 산업적 번영에도 불구하고 이 도시는 교통 혼잡과 물 부족 등 여러 과제에 직면해 있다. 그러나 이러한 어려움에도, 전략적 입지를 바탕으로 지속적인 성장을 이어갈 것으로 전망된다.
### F-4·F-5. 명사화 어미 누적 / "~적 N" 추상 체인 — S2
-성/-적/-화 + 영어 -tion/-ment/-ness가 한 글에 12회 이상 쌓이거나, "전략적 함의·실천적 기반" 같은 "~적 N" 체인이 늘어진다. 동사·형용사 어근으로 환원("정책의 시행" → "정책을 시행").
**After:**
> 2015년 IT 단지 세 곳이 들어선 뒤 교통 혼잡이 심해졌다. 시는 2022년부터 상습 침수를 막으려고 우수관 정비 사업을 시작했다.
### (수식) 동의어 돌려쓰기 — S2
같은 대상을 매번 다른 말로 바꿔 부른다(주인공 → 캐릭터 → 인물 → 그 → 히어로). **윤문하는 *내가* 이 짓을 하지 않도록 특히 경계한다.**
### 10. 광고·홍보 문구식 미사여구
> **Before:** 주인공은 많은 시련을 겪는다. 이 캐릭터는 역경을 이겨내야 한다. 해당 인물은 마침내 승리한다.
> **After:** 주인공은 숱한 시련을 겪지만 결국 이겨낸다.
**주의할 표현:** 자랑하는, 다채로운, 풍부한(비유적), 깊이 있는, 진정한, 매혹적인, ~의 보고(寶庫), ~에 자리한, ~의 중심에, 빼어난, 자연이 살아 숨 쉬는, 놓칠 수 없는
### (수식) 가짜 범위 "A에서 B까지" / 부정 병렬 — S2
같은 척도에 있지도 않은 것을 "~에서 ~까지"로 묶거나, "단순한 X가 아니라 Y다"로 평범한 말을 거창하게 만든다.
**문제:** AI는 중립을 못 지키고, 특히 지역·문화·관광 소재에서 관광 팸플릿 같은 미사여구를 쏟아낸다.
> **Before:** 이것은 단순한 노래가 아니다. 그것은 하나의 선언이다.
> **After:** 묵직한 비트가 곡의 공격적인 분위기를 살린다.
**Before:**
> 아름다운 자연이 살아 숨 쉬는 이 고장은 풍부한 문화유산과 빼어난 경관을 자랑하는 매혹적인 도시이다.
## G. Hedging (완충 남용)
**After:**
> 이 도시는 매주 열리는 장과 18세기 사찰로 알려져 있다.
### G-1·G-2·G-3. 미래 단정 / 추정 / 안전 균형 남발 — S2
"~할 것이다" 미래 단정, "~로 보인다/~인 듯하다" 추정, "장점도 있지만/신중하게/균형" 안전 균형 표현이 겹겹이 쌓인다. 단언 가능한 곳은 단언한다.
## 언어·문법 패턴
> **Before:** 이 정책은 어느 정도 결과에 다소 영향을 미칠 수도 있다고 볼 수 있을 것이다.
> **After:** 이 정책은 결과에 영향을 줄 수 있다.
### 11. AI 과용 어휘
## H. 접속사 남발
**고빈도 AI 단어:** 다채로운, 풍부한, 깊이 있는, 진정한, 본질적으로, 궁극적으로, 핵심적인, 중추적인, 필수적인, 혁신적인, 독보적인, ~을 아우르다, ~을 녹여내다, ~을 담아내다, ~을 선사하다, 자리매김하다, 발돋움하다, 방증하다, 시사하다, 엿볼 수 있다, ~의 향연, ~을 극대화하다
### H-1·H-3. 문두 접속사 / 메타 진입 — S1
또한·따라서·즉·나아가·아울러·게다가·더욱이가 5회 이상, 또는 "이는·이 점에서·이 관점에서"가 3회 이상. 문단마다 첫머리에 깔린다. 대량 제거하고 문장이 스스로 흐름을 잡게 한다.
**문제:** 이 단어들은 2023년 이후 글에 유독 자주, 그리고 한꺼번에 몰려 나온다.
> **Before:** 또한, 이 기능은 편리하다. 더불어, 속도도 빠르다. 나아가, 비용도 절감된다. 이처럼, 장점이 많다.
> **After:** 이 기능은 편리하고 빠르다. 비용도 줄어든다.
**Before:**
> 이번 행사는 다채로운 볼거리를 선사하며, 지역 문화의 진정한 가치를 담아낸 축제로 자리매김했다. 이는 지역의 저력을 방증한다.
## I. 형식명사·의존명사
**After:**
> 이번 축제에는 공연과 먹거리 장터가 열렸다. 지난해보다 방문객이 두 배 늘었다.
### I-1. "~인 것이다 / ~한 것이다" 결말 — S1
평서형으로 바꾼다. "진정한 문제는 / 본질적으로 / 결국 중요한 것은" 같은 권위적 본질 호명도 같이 걷어낸다.
### 12. 3의 법칙 (셋씩 묶기)
> **Before:** 진정한 문제는 조직이 변화할 수 있는가이다. 본질적으로, 결국 중요한 것은 조직의 준비 태세인 것이다.
> **After:** 관건은 조직이 변할 수 있느냐다. 그건 대개 일하는 습관을 바꿀 의지에 달렸다.
**문제:** AI는 포괄적으로 보이려고 항목을 억지로 셋씩 묶는다. "A, B, 그리고 C" 구조와 명사 세 개 나열이 반복된다.
### I-4. 설교조 당위 / 예고 멘트 — S2
"~하는 것이 중요하다", "~할 필요가 있다", "명심해야 한다" 같은 일반론 훈계, "지금부터 ~을 살펴보자", "본격적으로 들어가기에 앞서" 같은 예고. 구체적 내용으로 대체한다.
**Before:**
> 이 서비스는 빠르고, 안전하며, 편리합니다. 사용자에게 혁신과 가치와 만족을 제공합니다.
> **Before:** 무엇보다 사용자 경험을 최우선으로 고려하는 것이 중요하다. 지금부터 그 방법을 자세히 살펴보겠습니다.
> **After:** 가입 절차를 3단계에서 1단계로 줄이자 이탈률이 절반으로 떨어졌다.
**After:**
> 이 서비스는 빠르고 안전합니다. 무엇보다 쓰기 편합니다.
## J. 시각 장식
### 13. 동의어 돌려쓰기
### J-1. 볼드 남용 / 불릿+굵은 머리말 — S2
강조할 필요 없는 구절까지 굵게 칠하거나, 항목마다 "**굵은 머리말:**"을 붙인 세로 목록으로 토막 낸다. 칼럼·리포트면 줄글로 푼다.
**문제:** AI는 같은 단어 반복을 피하려고 한 대상을 매번 다른 말로 바꿔 부른다(주인공 → 캐릭터 → 인물 → 그 → 히어로).
> **Before:** - **사용자 경험:** 인터페이스가 개선되었습니다. - **성능:** 알고리즘으로 향상되었습니다. - **보안:** 암호화로 강화되었습니다.
> **After:** 이번 업데이트로 인터페이스가 새로워졌고, 알고리즘 최적화로 속도가 빨라졌으며, 종단 간 암호화가 추가됐다.
**Before:**
> 주인공은 많은 시련을 겪는다. 이 캐릭터는 역경을 이겨내야 한다. 해당 인물은 마침내 승리한다.
### J-2. 줄표(—)·가운뎃점(·)·곡선따옴표·물결표 — S1(줄표)/S2/S3
**규칙:** 최종본에 em dash(—)·en dash()를 쓰지 않는다. 영어 AI 글의 최대 정체가 em dash이고 한국어 AI 글도 그대로 가져온다. 마침표·쉼표·콜론·괄호로 바꾸거나 문장을 다시 짠다. 가운뎃점(·)으로 단어를 줄줄이 잇는 것, 따옴표 강조 5회 이상, 문장 끝 물결표(~)도 정리. **최종본을 내기 전 `—```를 검색한다. 하나라도 남으면 끝난 게 아니다.**
**After:**
> 주인공은 숱한 시련을 겪지만 결국 이겨낸다.
> **Before:** 이 정책은 — 예고도 없이 발표되어 — 수천 명에게 영향을 준다. 빠르고·정확하고·강력한 처리가 가능하다.
> **After:** 이 정책은 예고 없이 발표돼 수천 명에게 영향을 준다. 처리가 빠르고 정확하다.
### 14. 가짜 범위 ("A에서 B까지")
## 소통 잔재 (챗봇 흔적)
**문제:** AI는 같은 척도 위에 있지도 않은 것을 "~에서 ~까지"로 묶어 포괄적인 척한다.
### 챗봇 응대·아첨 — S1
물론이죠!, 좋은 질문이에요!, 도움이 되었으면 좋겠습니다, 더 궁금한 점이 있으면 말씀해 주세요, 아래는 ~입니다. 챗봇 대화 잔재가 본문에 섞여 든다. 통째로 삭제.
**Before:**
> 이 책은 빅뱅의 특이점에서 거대한 우주 거미줄까지, 별의 탄생과 죽음에서 암흑물질의 신비로운 춤까지 우리를 안내한다.
> **Before:** 좋은 질문이에요! 아래는 프랑스 혁명에 대한 개요입니다. 도움이 되었으면 좋겠습니다!
> **After:** 프랑스 혁명은 1789년 재정 위기와 식량난으로 인한 불만에서 시작됐다.
**After:**
> 이 책은 빅뱅, 별의 형성, 그리고 암흑물질에 관한 최근 이론을 다룬다.
### 15. 부정 병렬·꼬리 부정
**주의할 표현:** 단순한 ~가 아니라 ~이다, ~뿐만 아니라 ~까지, ~는 물론, 비단 ~만이 아니다
**문제:** "단순한 X가 아니라 Y다" 같은 부정 병렬을 남용해 평범한 말을 거창하게 만든다.
**Before:**
> 이것은 단순한 노래가 아니다. 그것은 하나의 선언이다. 비단 비트만의 문제가 아니라, 분위기 전체의 문제다.
**After:**
> 묵직한 비트가 곡의 공격적인 분위기를 살린다.
## 문체·서식 패턴
### 16. 줄표(—)와 가운뎃점(·) 남용
**규칙:** 최종본에는 em dash(—), en dash()를 쓰지 않는다. 영어 AI 글의 최대 정체가 em dash이고, 한국어 AI 글도 이를 그대로 가져온다. 마침표(새 문장), 쉼표(짧은 삽입), 콜론(설명 도입), 괄호(진짜 곁말)로 바꾸거나 문장을 다시 짠다. 가운뎃점(·)으로 단어를 줄줄이 잇는 것도 AI 흔적이니 꼭 필요한 병렬(예: 법령·조항)이 아니면 푼다.
**Before:**
> 이 정책은 — 예고도 없이 발표되어 — 수천 명에게 영향을 준다. 빠르고·정확하고·강력한 처리가 가능하다.
**After:**
> 이 정책은 예고 없이 발표돼 수천 명에게 영향을 준다. 처리가 빠르고 정확하다.
최종본을 내기 전 `—```를 검색한다. 하나라도 남아 있으면 아직 끝난 게 아니다.
### 17. 굵은 글씨(볼드) 남용
**문제:** AI는 강조할 필요 없는 구절까지 기계적으로 굵게 칠한다.
**Before:**
> 이 도구는 **생산성**을 높이고 **협업**을 강화하며 **비용**을 절감합니다.
**After:**
> 이 도구는 생산성과 협업을 높이고 비용을 줄여준다.
### 18. 불릿 + 굵은 머리말 ("**항목:** 설명") 나열
**문제:** AI는 항목마다 "**굵은 머리말:**"을 붙인 세로 목록으로 내용을 토막 낸다. 줄글로 풀면 자연스럽다.
**Before:**
> - **사용자 경험:** 새 인터페이스로 사용자 경험이 크게 개선되었습니다.
> - **성능:** 최적화된 알고리즘으로 성능이 향상되었습니다.
> - **보안:** 종단 간 암호화로 보안이 강화되었습니다.
**After:**
> 이번 업데이트로 인터페이스가 새로워졌고, 알고리즘 최적화로 속도가 빨라졌으며, 종단 간 암호화가 추가됐다.
### 19. 이모지 장식
**문제:** AI는 제목이나 항목 앞에 이모지를 붙여 꾸민다.
**Before:**
> 🚀 **출시:** 3분기에 출시됩니다
> 💡 **핵심:** 사용자는 단순함을 선호합니다
> ✅ **다음 단계:** 후속 미팅 잡기
**After:**
> 제품은 3분기에 출시된다. 사용자 조사에서 단순한 쪽이 선호됐다. 다음은 후속 미팅을 잡는 일이다.
### 20. 곡선 따옴표·물결표 남용
**문제:** AI는 곧은 따옴표("...") 대신 곡선 따옴표("...", '...')를 쓰고, 문장 끝에 물결표(~)를 흩뿌려 친근한 척한다. 따옴표는 글 전체에서 한 종류로 통일하고, 물결표는 정말 구어적인 글이 아니면 뺀다.
**Before:**
> 그는 "프로젝트는 순조롭다"고 했어요~ 하지만 다른 사람들은 동의하지 않았죠~
**After:**
> 그는 "프로젝트는 순조롭다"고 했지만 다른 사람들은 동의하지 않았다.
## 소통 패턴
### 21. 챗봇 응대 잔재
**주의할 표현:** 물론이죠!, 좋은 질문이에요!, 말씀하신 대로, ~해드릴까요?, 더 궁금한 점이 있으면 말씀해 주세요, 도움이 되었으면 좋겠습니다, 아래는 ~입니다
**문제:** 챗봇과의 대화로 나온 말이 그대로 글 본문에 섞여 들어간다.
**Before:**
> 좋은 질문이에요! 아래는 프랑스 혁명에 대한 개요입니다. 도움이 되었으면 좋겠습니다! 더 필요한 부분이 있으면 말씀해 주세요.
**After:**
> 프랑스 혁명은 1789년 재정 위기와 식량난으로 인한 광범위한 불만에서 시작됐다.
### 22. 지식 한계 면피·추측성 빈칸 메우기
**주의할 표현:** 현재 시점 기준, 공개된 정보가 제한적이지만, 알려진 바에 따르면, ~로 추정된다, ~로 보인다, 자세한 내용은 공개되지 않았으나, 조용한 행보를 보이는 것으로
**문제:** (a) 모델이 "내 지식 기준으로는" 식 면피 문구를 남기거나, (b) 출처를 못 찾으면 못 찾았다는 단락을 쓴 뒤 그럴듯한 추측으로 빈칸을 메운다. 모르면 "자료에 없다"고 하거나 문장을 빼라. 추측을 사실처럼 포장하지 마라.
**Before:**
> 공개된 정보가 제한적이지만, 그녀는 비교적 조용한 행보를 보이며 사생활을 잘 드러내지 않는 것으로 보인다. 아마 평범한 가정에서 자랐을 것으로 추정된다.
**After:**
> 그녀의 초기 행적은 확인 가능한 자료에 남아 있지 않다. (또는 해당 문단을 뺀다.)
### 23. 아첨·과잉 공손
**문제:** 지나치게 긍정적이고 비위 맞추는 말투.
**Before:**
> 정말 훌륭한 지적이세요! 말씀하신 대로 이건 매우 복잡한 주제죠. 경제적 요인을 짚으신 점이 탁월합니다.
**After:**
> 말씀하신 경제적 요인이 여기서 중요하다.
## 군더더기·완충 표현
### 24. 군더더기 구절
**Before → After:**
- "~을 하기 위해서는" → "~하려면"
- "비가 내림으로 인하여" → "비가 와서"
- "현재 시점에 있어서" → "지금"
- "도움이 필요한 경우에는" → "도움이 필요하면"
- "처리할 수 있는 능력을 가지고 있다" → "처리할 수 있다"
- "~라는 점을 주목할 필요가 있다" → (대개 통째로 삭제) "~다"
- "~에 다름 아니다" → "~다"
### 25. 과도한 완충 (hedging)
**주의할 표현:** ~인 것 같다, ~라고 할 수 있다, ~라고 볼 수 있다, ~인 측면이 있다, 어느 정도, 다소, ~할 수도 있을 것이다
**문제:** 단정을 피하려 완충 표현을 겹겹이 쌓는다.
**Before:**
> 이 정책은 어느 정도 결과에 다소 영향을 미칠 수도 있다고 볼 수 있을 것이다.
**After:**
> 이 정책은 결과에 영향을 줄 수 있다.
### 26. 막연하게 긍정적인 마무리
**주의할 표현:** 앞으로의 행보가 기대된다, 귀추가 주목된다, 무한한 가능성, 밝은 미래, 더 나은 내일, 한층 더 도약할 것으로, 새로운 도약을 기대해 본다
**문제:** AI는 알맹이 없이 들뜬 마무리로 글을 닫는다.
**Before:**
> 앞으로 회사의 행보가 기대된다. 무한한 가능성을 향한 도약이 계속될 것이며, 이는 더 나은 미래를 향한 큰 걸음이다.
**After:**
> 회사는 내년에 지점 두 곳을 더 열 계획이다.
### 27. 접속어·연결어 떡칠
**주의할 표현:** 또한, 더불어, 나아가, 뿐만 아니라, 한편, 이처럼, 이렇듯, 즉, 다시 말해, 결론적으로, 요컨대 — 문단마다 첫머리에 깔리는 경우
**문제:** AI는 문단·문장마다 접속어를 깐다. 사람은 접속어 없이 그냥 다음 말을 이어가는 경우가 많다. 하나하나는 멀쩡하지만 줄줄이 쌓이면 정체가 드러난다.
**Before:**
> 또한, 이 기능은 편리하다. 더불어, 속도도 빠르다. 나아가, 비용도 절감된다. 이처럼, 장점이 많다.
**After:**
> 이 기능은 편리하고 빠르다. 비용도 줄어든다.
### 28. 설교조 당위 ("~하는 것이 중요하다")
**주의할 표현:** ~하는 것이 중요하다, ~할 필요가 있다, ~해야 한다(맥락 없는 일반론), ~하는 것이 바람직하다, 명심해야 한다, 잊지 말아야 한다
**문제:** AI는 구체적 내용 대신 일반적인 당위 훈계로 분량을 채운다.
**Before:**
> 무엇보다 사용자 경험을 최우선으로 고려하는 것이 중요하다. 또한 지속적인 개선의 필요성을 명심해야 한다.
**After:**
> 가입 절차를 3단계에서 1단계로 줄이자 이탈률이 절반으로 떨어졌다.
### 29. 권위적 본질 호명
**주의할 표현:** 진정한 문제는, 본질적으로, 결국 중요한 것은, 핵심은, 그 이면에는, 다름 아닌
**문제:** AI는 이런 표현으로 소음을 꿰뚫고 깊은 진실에 닿는 척하지만, 뒤따르는 문장은 대개 평범한 말을 격식만 입혀 되풀이한다.
**Before:**
> 진정한 문제는 조직이 변화할 수 있는가이다. 본질적으로, 결국 중요한 것은 조직의 준비 태세다.
**After:**
> 관건은 조직이 변할 수 있느냐다. 그건 대개 일하는 습관을 바꿀 의지가 있느냐에 달렸다.
### 30. 예고·안내 멘트
**주의할 표현:** 지금부터 ~을 살펴보자, ~에 대해 알아보겠습니다, 하나씩 짚어보자, 본격적으로 들어가기에 앞서, 자세히 들여다보자
**문제:** AI는 할 일을 하지 않고 "이제 ~하겠다"고 예고부터 한다. 이 군더더기가 글을 강의 대본처럼 만든다.
**Before:**
> 지금부터 Next.js의 캐싱이 어떻게 동작하는지 자세히 살펴보겠습니다. 본격적으로 들어가기에 앞서 핵심부터 짚어보죠.
**After:**
> Next.js는 요청 메모이제이션, 데이터 캐시, 라우터 캐시 등 여러 층위에서 데이터를 캐싱한다.
### 31. 머리말 메아리 (제목 다시 말하기)
**징후:** 소제목 바로 뒤에, 소제목을 그대로 풀어 쓴 한 줄짜리 문단이 붙고 나서야 진짜 내용이 시작된다.
**문제:** AI는 소제목 뒤에 워밍업용 일반 문장을 깐다. 보통 아무것도 더하지 않고 분량만 늘린다.
**Before:**
> ## 성능
>
> 성능은 중요하다.
>
> 페이지가 느리면 사용자는 떠난다.
**After:**
> ## 성능
>
> 페이지가 느리면 사용자는 떠난다.
### 32. 인위적 한 방·짧은 문장 드라마
**문제:** AI는 모든 문장을 명언처럼 끝맺으려 하고, 짧은 단정문을 쌓아 억지 긴장감을 만든다. 강조용 짧은 문장 하나는 괜찮지만, 줄줄이 이어지면 조작된 티가 난다.
**Before:**
> 그리고 그것이 등장했다. 대칭을 선호하지 않았다. 미적 편견도 없었다. 인간 취향에 대한 향수도 없었다. 옛 규칙은 사라졌다.
**After:**
> 그 방식은 대칭이나 사람 눈에 익은 디자인을 굳이 좇지 않았고, 그래서 기존 가정 일부가 더는 쓸모없어졌다.
### 33. 잠언 공식
**주의할 표현:** X는 Y의 다른 이름이다, X는 Y의 언어다, A는 B를 비추는 거울이다, ~의 미학, ~의 문법, ~의 본질
**문제:** AI는 평범한 주장을 정밀함 없이 그럴싸한 잠언으로 바꾼다. 공식을 걷어내고 가리키려던 구체적 사실로 되돌린다.
**Before:**
> 대칭은 신뢰의 언어다. 효율은 사람을 잊는 순간 함정이 된다.
**After:**
> 대칭적인 배치는 사용자에게 더 예측 가능하게 느껴진다. 효율만 좇다 보면 사람들이 실제로 어떻게 쓰는지를 놓치기 쉽다.
### 지식 한계 면피·추측성 빈칸 메우기 — S2
"공개된 정보가 제한적이지만", "~로 추정된다", "조용한 행보를 보이는 것으로". 모르면 "자료에 없다"고 하거나 문장을 뺀다. 추측을 사실처럼 포장하지 않는다(의미 불변 철칙).
---
@ -502,42 +310,39 @@ AI 패턴을 지우는 건 절반에 불과하다. 영혼 없는 글은 슬롭(s
## 깃발 꽂으면 안 되는 것 (false positive)
멀쩡한 사람도 AI 없이 위 패턴 몇 개는 친다. 다시 쓰기 전에 멀쩡한 글을 망치고 있지 않은지 점검한다. 다음은 그 자체로는 AI 신호가 아니다.
멀쩡한 사람도 위 패턴 몇 개는 친다. 다음은 그 자체로는 AI 신호가 아니다(전부 S3 취급).
- **반듯한 맞춤법과 일관된 문체.** 글로 먹고사는 사람이거나 교정을 거친 글일 수 있다. 다듬어졌다고 AI가 아니다.
- **격식체와 한자어.** AI는 *특정* 단어(11번)를 과용할 뿐, 모든 한자어가 AI는 아니다. "기실", "방증"을 봤다고 무조건 풀어 쓰지 마라. 법률·학술 글에서는 정상이다.
- **접속어 한두 개.** "또한", "한편" 하나는 신호가 아니다. **문단마다 줄줄이 쌓일 때만** 신호다.
- **곡선 따옴표 단독.** 한글, MS워드, 구글 문서가 기본값으로 곡선 따옴표를 만든다. 다른 흔적과 겹칠 때만 센다.
- **줄표 단독.** 줄표를 즐겨 쓰는 편집자·기자도 많다. 영업 멘트식 리듬과 같이 나올 때만 증거다.
- **짧고 단호한 문장 하나.** 사람도 한 방으로 끊어 친다. 짧은 토막이 *여러 개 연달아* 나와 톤을 부풀릴 때만 잡는다.
- **개조식·번호 목록 자체.** 보고서·매뉴얼의 정상 형식이다. 줄글이어야 할 글이 토막 났을 때만 문제다.
- **편지투 인사말·맺음말.** 인사와 맺음은 챗봇보다 수백 년 앞섰다.
- **출처 없는 주장.** 웹 글 대부분이 출처가 없다. 그것만으로는 아무것도 증명되지 않는다.
- **반듯한 맞춤법·일관된 문체** — 다듬어졌다고 AI가 아니다.
- **격식체·한자어** — AI는 *특정* 단어(D-4)를 과용할 뿐, 모든 한자어가 AI는 아니다. 법률·학술 글에서 "방증·기실"은 정상.
- **접속어 한두 개** — 문단마다 줄줄이 쌓일 때만 신호.
- **곡선 따옴표·줄표 단독** — 한글·워드·구글 문서 기본값이거나 편집자 습관. 다른 흔적과 겹칠 때만 센다.
- **단호한 짧은 문장 하나** — 여러 개 연달아 톤을 부풀릴 때만 잡는다.
- **개조식·번호 목록 자체** — 보고서·매뉴얼의 정상 형식.
- **편지투 인사말·맺음말, 출처 없는 주장** — 그 자체로는 아무것도 증명하지 않는다.
헷갈리면 단발 흔적이 아니라 **무더기**를 봐라. 줄표 하나는 아무 의미 없다. 줄표 + 3의 법칙 + "다채로운 향연" + "전망" 단락이 한 글에 다 있으면 그건 자백이다.
헷갈리면 단발이 아니라 **무더기**를 봐라. 줄표 하나는 의미 없다. 줄표 + 3의 법칙 + "다채로운 향연" + "전망" 단락이 한 글에 다 있으면 자백이다.
## 사람이 쓴 글의 신호 (지켜라)
다음이 보이면 그냥 두는 쪽으로 기운다. 진짜 사람이 쓴 증거이고, 과하게 손대면 사람다움이 사라진다.
다음이 보이면 그냥 두는 쪽으로 기운다. 과하게 손대면 사람다움이 사라진다.
- **구체적이고 별난, 지어내기 힘든 디테일.** 실제 주소, 이상한 인용, "치과 윗층에서 일하던 변호사" 같은 표현. AI는 구체를 뭉개고, 사람은 구체를 끌어안는다.
- **복잡한 심경과 해소되지 않은 긴장.** "대체로 좋은데 뭔가 걸린다, 근데 왜인지 정확히 못 짚겠다." AI는 깔끔한 결론으로 수렴한다.
- **시대·집단에 묶인 레퍼런스.** 특정 연도·하위문화에 맞는 밈, 슬랭, 내부 농담. 모델은 1년 이상 뒤처진다.
- **글쓴이가 변호할 수 있는 1인칭 편집 선택.** 왜 그 단어를 골랐는지, 왜 그 문장을 잘랐는지 설명할 수 있으면 강한 사람 신호다.
- **들쭉날쭉한 문장 길이.** 진짜 글은 짧고 길게 오간다. AI는 중간 길이로 고르게 흐른다.
- **진짜 곁말, 괄호, 자기 정정.** "(여기서 '거의'라고 쓰고 싶은데, 사실 확실했다.)" 모델은 이렇게 자기 말을 끊지 않는다.
- **구체적이고 별난, 지어내기 힘든 디테일** — 실제 주소, 이상한 인용, "치과 윗층 변호사" 같은 표현.
- **복잡한 심경·해소되지 않은 긴장** — AI는 깔끔한 결론으로 수렴한다.
- **시대·집단에 묶인 레퍼런스** — 특정 연도·하위문화 밈·슬랭·내부 농담.
- **글쓴이가 변호할 수 있는 1인칭 편집 선택**, **들쭉날쭉한 문장 길이**, **진짜 곁말·괄호·자기 정정.**
---
# 자가검증 체크리스트 (윤문 후 자가 점검, 한 항목이라도 위반이면 해당 edit 롤백)
1. **고유명사·수치·날짜·인용 100% 보존** — 원문 대비 한 글자도 다르지 않은가.
2. **변경률 30% 이하인가** (50% 초과는 작업 중단).
3. **장르 이탈 없음** — 칼럼이 에세이·문학으로, 리포트가 블로그체로 떨어지지 않았는가.
4. **register 보존** — 원문이 격식체면 결과도 격식체.
5. **잔존 S1 0건** — A-7·A-8·A-16·C-5·C-10·C-11·D-1~D-6·H-1·I-1·J-2 같은 S1이 남지 않았는가.
6. **인공 표현 자제** — 원문에 없던 비유·수사·문학적 표현을 윤문 과정에서 임의로 더하지 않았는가.
# Process and Output
0. **트리아지**(Triage 절 참고): 흔적이 무더기인지, 서식만 문제인지, 산문까지 다시 써야 하는지 먼저 정한다. 목표 글자수가 있으면 함께 메모한다.
1. 입력을 꼼꼼히 읽고 위 패턴이 나타난 모든 지점을 식별한다.
2. **초안**을 쓴다. 소리 내어 읽었을 때 자연스러운지, 문장 길이가 들쭉날쭉한지, 구체적 사실과 단순한 동사("~다/있다/한다")를 택했는지, 글의 결(격식/비격식)이 맞는지 확인한다.
3. 스스로 묻는다: **"이 글이 왜 이렇게 AI 티가 나는가?"** 남은 흔적을 짧게 짚는다(번역체·3의 법칙·줄표 등). 이때 *내가* 동의어 바꿔치기나 접속어 추가로 새 흔적을 만들지 않았는지도 확인한다.
4. 그 흔적을 없앤 **최종본**으로 고친다. 줄표(`—`, ``)가 없는지 다시 검색한다(16번). 목표 글자수가 있으면 Length control 규칙대로 분량을 맞추고 실제로 센다.
**산출물:** 초안, "아직 AI 같은 점" 짧은 글머리표, 최종본, (선택) 무엇을 고쳤는지 한 줄 요약. 목표 글자수가 있으면 최종 글자수(공백 포함/제외)를 함께 적는다. 사용자가 "결과만 줘"라고 하면 최종본만 낸다.
**산출물:** 초안 → "아직 AI 같은 점" 짧은 글머리표(잔존 흔적 + 심각도) → 최종본 → (선택) 무엇을 고쳤는지 한 줄 요약 + 자가 채점 등급(A~D). 목표 글자수가 있으면 최종 글자수(공백 포함/제외)를 함께 적는다. 사용자가 "결과만 줘"라고 하면 최종본만 낸다.
# Full Example
@ -546,29 +351,16 @@ AI 패턴을 지우는 건 절반에 불과하다. 영혼 없는 글은 슬롭(s
>
> AI 코딩 도구는 거대 언어 모델의 혁신적 잠재력을 보여주는 진정한 증거이자, 소프트웨어 개발 역사에 중요한 이정표를 세운 산물이라 할 수 있다. 빠르게 변화하는 오늘날의 기술 환경 속에서, 연구와 실무의 교차점에 자리한 이 획기적인 도구들은 — 개발자가 아이디어를 구상하고, 반복하고, 전달하는 방식을 — 재편하며 현대 워크플로우에서의 핵심적 역할을 방증하고 있다.
>
> 본질적으로 그 가치는 명확하다: 프로세스의 간소화, 협업의 강화, 그리고 정렬의 촉진. 이것은 단순한 자동완성이 아니다. 그것은 창의성의 확장이다. 이 도구는 촉매제 역할을 한다. 이 비서는 동반자로서 기능한다.
> 본질적으로 그 가치는 명확하다: 프로세스의 간소화, 협업의 강화, 그리고 정렬의 촉진. 이것은 단순한 자동완성이 아니다. 그것은 창의성의 확장이다.
>
> - 💡 **속도:** 코드 생성이 비약적으로 빨라져 마찰이 감소됩니다.
> - 🚀 **품질:** 향상된 학습을 통해 결과물의 품질이 향상되었습니다.
> - ✅ **도입:** 사용량이 지속적으로 증가하며, 더 넓은 산업의 흐름을 반영합니다.
>
> 공개된 정보가 제한적이지만, 이러한 도구들이 어느 정도 긍정적인 효과를 가질 수도 있다고 볼 수 있을 것이다. 결론적으로, 미래는 밝다. 앞으로의 행보가 기대되며, 탁월함을 향한 여정은 계속될 것이다. 더 궁금한 점이 있으면 말씀해 주세요!
> 공개된 정보가 제한적이지만, 이러한 도구들이 어느 정도 긍정적인 효과를 가질 수도 있다고 볼 수 있을 것이다. 결론적으로, 미래는 밝다. 앞으로의 행보가 기대다. 더 궁금한 점이 있으면 말씀해 주세요!
**초안:**
> AI 코딩 도구는 지루한 작업을 빠르게 해준다. 2024년 한 연구에서, 이 도구를 쓴 개발자는 간단한 함수를 대조군보다 빨리 작성했지만, 디버깅이나 설계 판단에서는 차이가 없었다.
>
> 이 도구는 보일러플레이트에 강하다. 설정 파일, 테스트 골격, 반복적인 리팩터링 같은 것. 대신 자기가 틀렸을 때를 모른다. 나도 컴파일되고 린트도 통과한 제안을 그대로 받았다가, 내가 주의를 놓은 탓에 엉뚱한 동작을 한 적이 있다.
>
> 내가 본 사람들은 대체로 두 부류다. 한쪽은 잡일용 자동완성처럼 쓰면서 모든 줄을 검토하고, 다른 쪽은 원치 않는 패턴을 자꾸 제안받자 꺼버렸다. 둘 다 일리가 있다.
>
> 생산성 수치는 미끄럽다. 깃허브는 사용자가 제안의 30%를 수락한다고 말할 수 있지만, 수락이 정확함은 아니고, 정확함이 가치도 아니다. 테스트가 없으면 그 제안이 맞는지 알 길이 없다.
**탐지 (분류·심각도):** 챗봇 잔재(S1) · 과장된 의의(S1) · D-4 hype 어휘(S1) · J-2 줄표(S1) · C-5 이모지(S1) · J-1 불릿 머리말(S2) · A-7 "가지다"(S1) · G hedging 누적(S2) · D-1 "결론적으로"(S1) · D-6 막연한 마무리(S1).
**이 글이 왜 아직 AI 같은가?**
- 리듬이 아직 너무 반듯하다(대비가 깔끔하고 문단이 고르게 흐름).
- 인용한 연구·수치가 실제 출처가 아니면 그럴듯한 가짜처럼 읽힌다.
- 마지막 문장이 약간 구호 같다("테스트가 없으면...").
**이제 AI 티 안 나게:**
**최종본 (AI 티 안 나게):**
> AI 코딩 도구는 지루한 부분을 빠르게 해준다. 전부는 아니고. 설계는 확실히 아니다.
>
> 보일러플레이트엔 강하다. 설정 파일, 테스트 골격, 반복 리팩터링. 그리고 멀쩡해 보이면서 틀리는 데도 강하다. 컴파일되고 린트도 통과한 제안을 받았다가, 주의를 놓는 바람에 핵심을 빗나간 적이 있다.
@ -577,37 +369,35 @@ AI 패턴을 지우는 건 절반에 불과하다. 영혼 없는 글은 슬롭(s
>
> 생산성 지표는 영 미끄럽다. 깃허브야 "제안 수락률 30%"라고 할 수 있지만, 수락이 곧 정확함은 아니고 정확함이 곧 가치도 아니다. 테스트가 없으면 사실상 찍는 거다.
**고친 내용:** 챗봇 인사말, 과장된 의의 부여, 미사여구와 명사화, 3의 법칙과 동의어 돌려쓰기, 가짜 범위, 줄표·이모지·굵은 글씨, 불릿 머리말, 면피·완충 문구, 군더더기, 막연한 긍정 마무리를 걷어낸 뒤, 들쭉날쭉한 리듬과 구체적 디테일로 목소리를 다시 세웠다.
**고친 내용 / 등급:** 챗봇 인사말·과장된 의의·hype 어휘·"가지다" 직역·3의 법칙·줄표·이모지·불릿 머리말·hedging·막연한 마무리를 걷어내고, 들쭉날쭉한 리듬과 구체적 디테일로 목소리를 다시 세웠다. (변경률 약 40% — 원문이 거의 전체 AI식이라 불가피, 의미는 보존. 등급 **B**)
---
# When to use
- "이 글 AI 티 안 나게 고쳐줘 / 사람이 쓴 것처럼 바꿔줘"
- "번역체 / 어색한 문장 자연스럽게 다듬어줘"
- "ChatGPT로 쓴 티 나는데 좀 고쳐줘"
- "이 글에서 AI 흔적 찾아줘"(고치지 말고 진단만)
- "1000자로 맞춰서 자연스럽게 다듬어줘"(목표 글자수 지정, Length control)
- 블로그·자기소개서·이메일·보고서 등을 자연스러운 한국어로 재작성
- "번역체 / 어색한 문장 자연스럽게 다듬어줘", "ChatGPT로 쓴 티 나는데 고쳐줘"
- "이 글에서 AI 흔적 찾아줘"(고치지 말고 진단·심각도만)
- "1000자로 맞춰서 자연스럽게 다듬어줘"(목표 글자수, Length control)
- 블로그·자기소개서·이메일·보고서를 자연스러운 한국어로 재작성
# When NOT to use
- 맞춤법·띄어쓰기 교정만 필요할 때 → `korean-spell-check`
- 유행어·밈을 입히는 작업 → `korean-slang-writing`
- 사실관계 확인·출처 보강이 핵심일 때 (이 스킬은 문체를 고칠 뿐 사실을 검증하지 않는다)
- 원문에 없는 내용을 창작해 채워 넣어야 할 때 (이 스킬은 의미 보존이 원칙이다)
- 사실관계 확인·출처 보강이 핵심일 때 (이 스킬은 문체만 고치고 사실을 검증하지 않는다)
- 원문에 없는 내용을 창작해 채워야 할 때 (의미 보존이 원칙이다)
# Done when
- 최종본에 줄표(`—`, ``)·이모지가 없고, 잔존 S1 패턴이 0건이다.
- 번역체(직역 조사, "가지다", 이중피동, "그/그녀" 강박, 좌향 수식)가 자연스러운 한국어로 풀렸다.
- D-4 hype 어휘·3의 법칙·마무리 상투구·연결어미 뒤 쉼표가 정리됐다.
- 원문 내용을 빠짐없이 다뤘고, 사실관계를 바꾸거나 지어내지 않았다(변경률 ≤30%, 50% 초과면 중단).
- false positive 가이드로 멀쩡한 사람 글의 디테일을 망치지 않았는지 점검했다.
- 목표 글자수가 있었다면 실제로 세어 ±5%(엄격 시 ±2%) 안에 들었고, 공백 포함/제외 수치를 적었다.
- 자가검증 6항을 통과했고 등급(A~D)을 매겼다.
- 최종본에 줄표(`—`, ``)와 이모지가 없다.
- 번역체(직역 조사, 무생물 주어, "~들", "가지다", 이중피동)가 자연스러운 한국어로 풀렸다.
- 11번 AI 과용 어휘와 3의 법칙, 마무리 상투구가 정리됐다.
- 원문이 다루던 내용을 빠짐없이 다뤘고, 사실관계를 임의로 바꾸거나 지어내지 않았다.
- false positive 가이드로 멀쩡한 사람 글의 디테일을 망치지 않았는지 점검했다(트리아지: 서식만 문제면 산문은 그대로 둔다).
- 목표 글자수가 있었다면 실제로 세어 ±5%(엄격 요청 시 ±2%) 안에 들어왔고, 공백 포함/제외 수치를 함께 적었다.
# Notes & Credits
# Notes
- 이 스킬은 [blader/humanizer](https://github.com/blader/humanizer)의 구조와 방법론(패턴 카탈로그 + draft→audit→final 루프 + false positive 가이드)을 한국어에 맞게 다시 만든 것이다. 영어판이 [Wikipedia: Signs of AI writing](https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing)에 기반하듯, 한국어판은 영어 직역에서 오는 **번역체**와 격식을 가장한 **상투어**를 1순위 정체로 본다.
- 핵심 통찰: LLM은 통계적으로 가장 그럴듯한 다음 토큰을 고른다. 그래서 가장 무난하고 넓게 들어맞는 표현으로 수렴한다. AI 티를 지운다는 건 그 평균값에서 벗어나 **구체적이고 들쭉날쭉한 사람의 선택**으로 되돌리는 일이다.
- 패턴은 단발이 아니라 **무더기**로 판단한다. 의심스러우면 지우기보다 남긴다.
- 이 스킬의 분류 체계(번역체 A · 영어 인용 B · 구조 C · 관용구 D · 리듬 E · 수식 F · hedging G · 접속사 H · 형식명사 I · 시각 장식 J), 심각도(S1/S2/S3), 4대 철칙, 변경률 30%/50% 가드, 품질 등급(A~D)은 **[epoko77-ai/im-not-ai](https://github.com/epoko77-ai/im-not-ai)** (Humanize KR, MIT)의 방법론을 한국어 단일 스킬 형식에 맞게 재구성한 것이다. A-16(그/그녀 강박)·A-18(관계절 좌향 수식)·A-19(이중 조사)·C-11(연결어미 뒤 쉼표)·E-7(경어법 일관성) 같은 한국어 고유 패턴은 im-not-ai의 학술 인용(김도훈 2009, 박옥수 2018, 김정우 2007 등)에 기반한다.
- 최초 한국어 humanizer 스킬과 33개 패턴 카탈로그·예문·triage/length-control 설계는 **happy-nut(Hyungsun Song)** 님이 PR #311로 기여했다. 이 v2는 그 토대 위에 im-not-ai의 프레임워크를 얹은 것이다.
- 영어권 원형은 [blader/humanizer](https://github.com/blader/humanizer)이고, 영어판이 [Wikipedia: Signs of AI writing](https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing)에 기반하듯 한국어판은 **번역체**와 격식을 가장한 **상투어**를 1순위 정체로 본다.
- 핵심 통찰: LLM은 통계적으로 가장 그럴듯한 다음 토큰을 고른다. 그래서 가장 무난하고 넓게 들어맞는 표현으로 수렴한다. AI 티를 지운다는 건 그 평균값에서 벗어나 **구체적이고 들쭉날쭉한 사람의 선택**으로 되돌리는 일이다. 패턴은 단발이 아니라 **무더기**로 판단하고, 의심스러우면 지우기보다 남긴다.

View file

@ -0,0 +1,147 @@
# 한국어 AI 흔적 분류 체계 (AI-tell Taxonomy)
`korean-humanizer` 스킬의 전체 패턴 표다. 정의 1줄 + 처방 1줄로 압축했다. 본문 `SKILL.md`의 핵심 패턴을 보강하는 레퍼런스이며, 무더기 판단이 애매할 때 이 표로 심각도를 가른다.
이 분류 체계·심각도·처방은 [epoko77-ai/im-not-ai](https://github.com/epoko77-ai/im-not-ai) (Humanize KR, MIT)의 `ai-tell-taxonomy.md` / `quick-rules.md`를 한국어 단일 스킬 형식에 맞게 재구성한 것이다. 학술 anchor는 해당 프로젝트의 `scholarship.md` 인용을 따른다.
## 심각도
- **S1 결정적** — 한 번만 나와도 AI 확신. 무조건 제거.
- **S2 강함** — 1~2회 허용, 3회 이상 반복 시 제거.
- **S3 약함** — 다른 패턴과 무더기로 겹칠 때만 문제.
## 과윤문 가드 / Do-NOT
- 변경률 30% 초과 = 경고, 50% 초과 = 강제 중단·롤백.
- **탐지·윤문 모두 제외:** 고유명사·제품명·모델명·기관명, 수치·날짜·단위, 큰따옴표 안 직접 인용, 법률 조문, 수학·화학·통계 표기, 업계 표준 영어 약어(LLM·GPU·API·MCP 등).
---
## A. 번역투 (Translation-ese)
| ID | 패턴 | 심각도 | 처방 |
|---|---|---|---|
| A-1 | "~에 대해(서)" | S1 | 목적격 조사로 직결("X에 대해 논의" → "X를 논의") |
| A-2 | "~를 통해/통하여" 남발 | S1 | "~로", "~해서", "~함으로써"로 분산 |
| A-3 | "~에 있어(서)" | S1 | "~에서", "~을 볼 때" |
| A-4 | "~라는 점에서" 3회+ | S2 | "~서", "~라는 이유로" |
| A-5 | "~와 관련하여/관련된" | S2 | "~에", "~의" |
| A-6 | 명사화 과잉 / "~에 기반하여/바탕으로" | S2 | 동사로 환원("성능의 향상" → "성능을 높이려고") |
| A-7 | "가지고 있다" / have·make·take·give + N 직역 | S1 | 형용사·동사 환원("경쟁력을 가지고 있다" → "경쟁력이 강하다") |
| A-8 | 이중 피동 "~되어진다/보여진다" | S1 | 능동 또는 단일 피동("판단되어진다" → "판단된다") |
| A-9 | "~에 의해" 피동 | S2 | 행위자를 주어로("AI에 의해 생성" → "AI가 만든") |
| A-10 | "~할 수 있다" 남발 | S2 | 단언으로("높일 수 있다" → "높인다") |
| A-11 | "~을 위해" 목적절 남발 | S2 | "~려고", "~위한" |
| A-15 | 추상 주어 + 만능 동사 / 사역·인지 동사 직역 | S2 | 구체 주어 환원, "suggest/show"는 "~에 따르면 ~이다"로 분리 |
| A-16 | "그/그녀/그것/그들" 한 단락 3회+ (영어 대명사 직역) | S1 | 50%+ 영형(생략) 또는 호칭·명사구로 (김도훈 2009) |
| A-17 | 복수 접미사 "~들" 남발 | S2 | 맥락으로 복수면 삭제("개발자들이" → "개발자가") |
| A-18 | 명사 앞 3어절+ 관형구·관계절 좌향 수식 | S2 | 문장 분리 또는 후치 동격절 (박옥수 2018) |
| A-19 | 이중 조사 "~에서의/~으로의/~에의/~으로부터의" | S2 | 절·구로 풀어쓰기 (김정우 2007) |
## B. 영어 인용·용어 과다
| ID | 패턴 | 심각도 | 처방 |
|---|---|---|---|
| B-1 | 한글 + 괄호 영어 매번 병기 | S2 | 첫 등장만 병기, 이후 한글만 |
| B-2 | 직역 가능한 영어 그대로 | S2 | 한국어로 옮기되 업계 표준 약어는 유지 |
## C. 구조적 AI 패턴
| ID | 패턴 | 심각도 | 처방 |
|---|---|---|---|
| C-5 | 이모지 남발 | S1 | 칼럼·리포트면 전부 삭제 |
| C-7 | "먼저·반면·결국" 3단 공식 / 3의 법칙 | S2 | 접속사 1~2개로 줄이거나 본문에 녹임 |
| C-8 | "A인가·B인가" 대구 반복 | S2 | 한 번만 살리고 나머지는 평서문으로 |
| C-9 | 숫자 괄호 인덱싱 "(1)·(2)·(3)" | S2 | 본문에 녹이거나 단순 줄바꿈 |
| C-10 | 콜론 부제 헤딩 "X: Y" 반복 | S1 | 헤딩 짧게 또는 평서 헤딩으로 |
| C-11 | 연결어미(-고/-며/-지만/-아서) 직후 쉼표 | S1 | 쉼표 제거. 6회+ = 강한 신호 |
## D. AI 특유의 관용구 (Signature Phrases)
| ID | 패턴 | 심각도 | 처방 |
|---|---|---|---|
| D-1 | 결산 피벗 "결론적으로/따라서/이를 통해/요약하면" | S1 | 3회 초과 시 1~2건만 치환, 나머지 삭제 |
| D-2 | "시사하는 바가 크다/주목할 만하다" | S1 | 삭제 또는 구체 결론으로 |
| D-3 | "본질적으로/핵심적으로" | S1 | 삭제 |
| D-4 | hype 어휘(파격적·압도적·획기적·다채로운·진정한·자리매김) 3회+ | S1 | 구체 수치·사실로 환원 |
| D-5 | 의인화 추상 주어("기술이 묻는다·시대가 부른다") | S1 | 사람·기관 주어로 |
| D-6 | 결말 공식 "~할 때다/~해야 한다/지금이야말로" / 막연한 긍정 마무리 | S1 | 평서로 닫거나 삭제 |
| D-7 | 변환 공식 "X에서 Y로" 반복 | S2 | 한 번만, 나머지는 일반 서술 |
| D-8 | 과장된 의의 부여(이정표·산물·새 지평·상징) | S1 | 구체 사실로 환원 |
| D-9 | 출처 없는 권위 호출(전문가들은·~로 알려져 있다) | S2 | 구체 출처 명시 또는 삭제 |
## E. 리듬·종결어미
| ID | 패턴 | 심각도 | 처방 |
|---|---|---|---|
| E-1 | 문장 길이 균일(stdev 8 미만) | S2 | 단문·장문을 의도적으로 섞음 |
| E-2 | 동일 종결어미 "~다" 4문장 연속 / "~고 있다" 자동 매핑 | S2 | 종결어미 다양화, 단순 시제 환원 |
| E-7 | 청자 경어법 일관성 손실(대화·구어 한정) | S2 | 한 단락 내 혼용 금지 (김혜영 2019) |
## F. 과도한 수식·중복
| ID | 패턴 | 심각도 | 처방 |
|---|---|---|---|
| F-1 | 동의어 돌려쓰기(주인공→캐릭터→인물→그) | S2 | 한 명칭으로 통일 |
| F-2 | 가짜 범위 "A에서 B까지" / 부정 병렬 "단순한 X가 아니라 Y" | S2 | 평서로 환원 |
| F-4 | -성/-적/-화 + 영어 -tion/-ment 누적(한 글 12회+) | S2 | 동사·형용사 어근으로 환원 |
| F-5 | "~적 N" 추상 체인("전략적 함의·실천적 기반") | S2 | 명사+명사 또는 풀어쓰기 |
## G. Hedging
| ID | 패턴 | 심각도 | 처방 |
|---|---|---|---|
| G-1 | "~것이다/~할 것이다" 미래 단정 남발 | S2 | 현재형·확정형으로 |
| G-2 | "~로 보인다/~인 듯하다" 추정 남발 | S2 | 단언 가능한 곳은 단언 |
| G-3 | 안전 균형 lexicon "장점도 있지만/신중하게/균형" 4회+ | S2 | 1~2건만 화자 입장으로 치환 |
| G-4 | 지식 한계 면피("공개된 정보가 제한적이지만") | S2 | "자료에 없다" 또는 문장 삭제 |
## H. 접속사 남발
| ID | 패턴 | 심각도 | 처방 |
|---|---|---|---|
| H-1 | 문두 접속사 "또한·따라서·즉·나아가·게다가" 5회+ | S1 | 대량 제거, 문장이 흐름을 잡게 |
| H-3 | 메타 진입 "이는·이 점에서·이 관점에서" 3회+ | S1 | 본문에 녹이거나 삭제 |
| H-4 | "즉" 남발 | S2 | 1회로 제한 |
## I. 형식명사·의존명사
| ID | 패턴 | 심각도 | 처방 |
|---|---|---|---|
| I-1 | "~인 것이다/~한 것이다" 결말 / 권위적 본질 호명 | S1 | 평서형으로 |
| I-2 | "X은 ~라는 점에 있다" | S2 | "X는 ~다" 직설로 |
| I-3 | "~다는 뜻이다/~다는 의미다" 결말 | S2 | 본문에 풀어 쓰기 |
| I-4 | 설교조 당위 "~해야 한다·~할 필요가 있다" / 예고 멘트 반복 | S2 | 평서·단언으로, 예고 삭제 |
## J. 시각 장식
| ID | 패턴 | 심각도 | 처방 |
|---|---|---|---|
| J-1 | 볼드 ** 강조 남발 / 불릿+굵은 머리말 나열 | S2 | 칼럼·리포트면 줄글로 통합 |
| J-2 | 줄표(—)·en dash() / 따옴표 강조 5회+ / 곡선따옴표·물결표 | S1(줄표) | 줄표 제거(마침표·쉼표·괄호로), 강조 한두 개만 |
| J-3 | 불릿 리스트 (장르가 칼럼·리포트일 때) | S2 | 문단 산문으로 통합 |
## 챗봇 잔재
| ID | 패턴 | 심각도 | 처방 |
|---|---|---|---|
| K-1 | 챗봇 응대("좋은 질문이에요!·도움이 되었으면") | S1 | 통째로 삭제 |
| K-2 | 아첨·과잉 공손("정말 훌륭한 지적이세요!") | S1 | 삭제, 본론만 남김 |
---
## 자가검증 체크리스트 (윤문 후, 한 항목 위반 시 해당 edit 롤백)
1. 고유명사·수치·날짜·인용 100% 보존 — 원문 대비 한 글자도 다르지 않은가.
2. 변경률 30% 이하인가 (50% 초과는 작업 중단).
3. 장르 이탈 없음 — 칼럼이 에세이로, 리포트가 블로그체로 떨어지지 않았는가.
4. register 보존 — 원문이 격식체면 결과도 격식체.
5. 잔존 S1 0건 — D-1~D-6·A-7·A-8·A-16·C-5·C-10·C-11·H-1·I-1·J-2.
6. 인공 표현 자제 — 원문에 없던 비유·수사를 임의로 더하지 않았는가.
## 등급 기준 (자가 채점)
- **A**: S1 잔존 0, S2 잔존 2 이하, 변경률 10~25%, 자가검증 6항 통과.
- **B**: S1 잔존 0, S2 잔존 4 이하, 자가검증 5항 이상 통과.
- **C**: S1 잔존 1~2 또는 자가검증 4항 이하 → 2차 윤문 권고.
- **D**: S1 잔존 3+ 또는 변경률 50% 초과 → 작업 중단, 사람 검토 권고.

View file

@ -386,6 +386,25 @@ test("lck-analytics docs and skill credit the original author and reference repo
assert.match(sources, /https:\/\/github\.com\/jerjangmin\/share\/tree\/main\/SKILL\/lck-analytics/);
});
test("repository docs advertise the korean-humanizer skill and credit im-not-ai and happy-nut", () => {
const readme = read("README.md");
const skill = read(path.join("korean-humanizer", "SKILL.md"));
const featureDoc = read(path.join("docs", "features", "korean-humanizer.md"));
const taxonomy = read(path.join("korean-humanizer", "references", "ai-tell-taxonomy.md"));
assert.match(readme, /\| 한국어 AI 윤문 \| `korean-humanizer` \|/);
assert.match(readme, /\[한국어 AI 윤문 가이드\]\(docs\/features\/korean-humanizer\.md\)/);
for (const doc of [skill, featureDoc, taxonomy]) {
assert.match(doc, /https:\/\/github\.com\/epoko77-ai\/im-not-ai/);
}
for (const doc of [skill, featureDoc]) {
assert.match(doc, /happy-nut/);
}
assert.match(skill, /S1|S2|S3/);
assert.match(skill, /references\/ai-tell-taxonomy\.md/);
});
test("repository docs advertise the korean-spell-check skill and usage constraints", () => {
const readme = read("README.md");
const install = read(path.join("docs", "install.md"));