Install any skill in seconds. Free to start, no credit card required.
Get Started Free →국립국어원 계열 규칙을 반영한 바른한글(구 부산대 맞춤법/문법 검사기) 표면을 이용해 한국어 문장의 띄어쓰기·맞춤법·문법을 최종 검수합니다. 긴 글은 청크 분할로 나눠 순차 검사하고, 결과를 원문·교정안·이유 중심으로 정리합니다. ai-slop-reviewer가 AI 패턴을 검수한 뒤 마지막 단계에서 호출하는 것을 권장합니다. 다음과 같은 요청 시 반드시 이 스킬을 사용하세요: - "이 한국어 문장 맞춤법 검사해줘", "띄어쓰기 검사" - "README 한국어 문장 최종 검수", "마크다운 맞춤법" - "AI 교정보다 규칙 기반 한국어 검사기로 한 번 더 확인" - "부산대 맞춤법", "바른한글 검사", "국립국어원 규칙" - 블로그·뉴스레터·카피·계약서 등 텍스트 산출물의 최종 교정 단계
.claude/skills/modu-ai-korean-spell-check/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 122% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 129% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 31% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 58% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 29% | 0% |
국립국어원 계열 규칙을 반영한 바른한글(구 부산대 맞춤법/문법 검사기) 표면을 이용해 한국어 문장을 최종 교정합니다. AI가 만들어낸 글의 마지막 검수 단계로 사용합니다.
> 본 스킬은 NomaDamas k-skill office-korean-spell-check (MIT)를 cowork에 포팅했습니다(스킬명은 무접두사 korean-spell-check로 정리). 공개 웹 검사기 기준이며, 최종 문맥 판단은 사람이 확인합니다.
https://nara-speller.co.kr/old_speller/는 비상업적 용도 안내와 개인·학생 무료 문구를 명시합니다.https://nara-speller.co.kr/robots.txt는 /를 허용하지만 /test_speller/는 금지합니다.사용: 블로그·뉴스레터·카피·계약서 등 텍스트 산출물의 최종 교정, README 검수, AI 교정 후 규칙 기반 재확인.
사용 금지: 코드 블록·로그·영문 위주 텍스트 대량 전송, 민감정보 많은 원문의 외부 전송, 상업적 대량 처리.
urllib POST는 old_speller/results에서 검사 결과 HTML을 반환합니다 (Cloudflare 우회용 일반 fetch는 403 가능).별도 스크립트 없이 Python 표준 라이브러리만으로 동작합니다. 브라우저형 User-Agent + urllib POST가 Cloudflare를 우회하며, 응답 HTML에 임베드된 errInfo JSON 배열을 파싱해 원문 / 교정안 / 이유로 정리합니다. 아래 코드를 그대로 실행하되, 긴 글은 1500자 청크로 나눠 청크 간 1초 휴지를 둡니다(외부 의존성 불필요).
pythonimport json, re, time, urllib.request, urllib.parse URL = "https://nara-speller.co.kr/old_speller/results" UA = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120 Safari/537.36" def check_chunk(text: str) -> list[dict]: body = urllib.parse.urlencode({"text1": text}).encode("utf-8") req = urllib.request.Request(URL, data=body, headers={"User-Agent": UA, "Content-Type": "application/x-www-form-urlencoded"}) html = urllib.request.urlopen(req, timeout=30).read().decode("utf-8", "replace") # 응답 HTML의 data 배열(errInfo)에서 원문/교정안/도움말 추출 m = re.search(r"data\s*=\s*(\[.*?\]);", html, re.S) items = json.loads(m.group(1)) if m else [] return [{"original": it.get("orgStr", ""), "suggestions": [c for c in (it.get("candWord") or "").split("|") if c], "reason": it.get("help", "")} for it in items] def spell_check(text: str, size: int = 1500) -> list[dict]: out = [] for i in range(0, len(text), size): out += check_chunk(text[i:i+size]) if i + size < len(text): time.sleep(1) # 청크 간 1초 휴지 (저빈도 정책 준수) return out # 파일 검사: text = open("README.md", encoding="utf-8").read() print(json.dumps(spell_check("아버지가방에들어가신다."), ensure_ascii=False, indent=2))
> 이 스킬은 부재 스크립트(korean_spell_check.py) 참조를 원칙 A(프롬프트/인라인 stdlib 코드)로 대체했습니다. > errInfo/data 필드명·응답 구조는 공개 검사기 변경에 따라 달라질 수 있으니, 파싱 실패 시 응답 HTML을 > 확인해 필드명을 조정합니다. requests·BeautifulSoup 등 외부 패키지 설치는 필요 없습니다.
권장 응답 순서:
원문 / 교정안 / 이유예시 JSON:
json{ "original": "아버지가방에들어가신다", "suggestions": ["아버지가 방에 들어가신다"], "reason": "띄어쓰기, 붙여쓰기, 음절 대치와 같은 교정 방법에 따라 수정한 결과입니다." }
표준 텍스트 산출물 체인:
{콘텐츠 생성 스킬} → ai-slop-reviewer → korean-spell-check → 사용자 최종 검토moai-marketer:content-blog, moai-marketer:content-newsletter, moai-marketer:content-copywriting, moai-marketer:content-sns-contentmoai-coworker:ai-slop-reviewer — AI 패턴(과한 형용사·반복·번역체) 먼저 검수원문 / 교정안 / 이유 중심으로 정리했다.https://nara-speller.co.kr/guide/https://nara-speller.co.kr/speller/https://nara-speller.co.kr/old_speller/, https://nara-speller.co.kr/old_speller/resultshttps://nara-speller.co.kr/robots.txt| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 8,184 | 6,996 | -15% | 1 | 1 | 0% | 1,456 | 3,233 | +122% | 0 | 0 | — |
case-02 | pass→pass | 5,645 | 2,169 | -62% | 1 | 1 | 0% | 943 | 2,176 | +131% | 0 | 0 | — |
case-03 | pass→pass | 14,643 | 7,350 | -50% | 1 | 1 | 0% | 2,631 | 3,240 | +23% | 0 | 0 | — |
case-04 | fail→pass | 7,862 | 4,690 | -40% | 1 | 1 | 0% | 1,223 | 2,800 | +129% | 0 | 0 | — |
case-05 | pass→pass | 12,585 | 2,425 | -81% | 1 | 1 | 0% | 2,036 | 2,204 | +8% | 0 | 0 | — |
case-06 | pass→pass | 8,804 | 5,085 | -42% | 1 | 1 | 0% | 1,639 | 2,801 | +71% | 0 | 0 | — |
case-07 | pass→pass | 11,392 | 4,961 | -56% | 1 | 1 | 0% | 1,890 | 2,631 | +39% | 0 | 0 | — |
case-08 | fail→pass | 12,622 | 5,664 | -55% | 1 | 1 | 0% | 2,160 | 2,839 | +31% | 0 | 0 | — |
case-09 | fail→pass | 15,958 | 13,052 | -18% | 1 | 1 | 0% | 2,422 | 3,836 | +58% | 0 | 0 | — |
case-10 | pass→pass | 10,623 | 7,050 | -34% | 1 | 1 | 0% | 1,698 | 3,021 | +78% | 0 | 0 | — |
case-11 | pass→pass | 13,872 | 6,842 | -51% | 1 | 1 | 0% | 2,102 | 2,995 | +42% | 0 | 0 | — |
case-12 | fail→pass | 12,232 | 3,629 | -70% | 1 | 1 | 0% | 1,882 | 2,419 | +29% | 0 | 0 | — |
case-13 | pass→pass | 9,970 | 4,311 | -57% | 1 | 1 | 0% | 1,926 | 2,503 | +30% | 0 | 0 | — |
case-14 | pass→pass | 9,790 | 3,951 | -60% | 1 | 1 | 0% | 1,809 | 2,519 | +39% | 0 | 0 | — |
case-15 | fail→fail | 8,872 | 6,454 | -27% | 1 | 1 | 0% | 1,448 | 3,104 | +114% | 0 | 0 | — |
case-16 | pass→pass | 16,749 | 8,483 | -49% | 1 | 1 | 0% | 2,515 | 3,112 | +24% | 0 | 0 | — |
case-21 | pass→pass | 6,758 | 1,946 | -71% | 1 | 1 | 0% | 1,148 | 2,092 | +82% | 0 | 0 | — |
case-17 | pass→pass | 9,030 | 6,104 | -32% | 1 | 1 | 0% | 1,479 | 2,842 | +92% | 0 | 0 | — |
case-18 | pass→pass | 12,381 | 8,920 | -28% | 1 | 1 | 0% | 1,969 | 3,245 | +65% | 0 | 0 | — |
case-19 | fail→pass | 11,495 | 8,318 | -28% | 1 | 1 | 0% | 1,733 | 3,463 | +100% | 0 | 0 | — |
case-20 | pass→pass | 12,404 | 7,672 | -38% | 1 | 1 | 0% | 1,973 | 3,074 | +56% | 0 | 0 | — |
case-22 | fail→pass | 7,911 | 1,859 | -77% | 1 | 1 | 0% | 1,299 | 2,145 | +65% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +32 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.