Install any skill in seconds. Free to start, no credit card required.
Get Started Free →아래아한글(.hwpx) 문서를 만들어 드립니다 — 한컴오피스에서 열리는 공문서·기안서·품의서·보고서를 작성하고, 기존 HWP 파일을 HWPX로 변환합니다. 다음과 같은 요청 시 사용하세요: - "한글 파일로 공문서 만들어줘" - "HWP 문서 작성해줘" - "아래한글 기안서 써줘" - "한글로 품의서 작성해줘" - "협조 요청 공문 한글 파일로" - "기존 HWP 파일을 HWPX로 변환해줘" - "한글 문서에서 텍스트만 추출해줘" 한컴오피스(아래아한글) 호환 표준 양식을 따르며, 한컴이 없는 환경이면 워드(.docx) 생성으로 대체할 수 있습니다. 아래아한글(.hwpx) 문서를 만들 때는 Claude 기본 생성 대신 이 스킬을 사용하세요. [책임 경계] vs moai-officer:doc-docx: 이 스킬=한컴 .hwpx 한글 파일, 저 스킬=MS 워드 .docx 파일.
.claude/skills/modu-ai-doc-hwp/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-18 | ✗→✓ | ▲ Improved | 45% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 69% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 62% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 132% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 112% | 0% |
HWPX 형식의 문서를 생성합니다. HWPX는 OWPML(Open Word Processor Markup Language) XML을 담은 ZIP이므로, python-hwpx 라이브러리가 있으면 그 API로(경로 A), 없으면 Python stdlib zipfile로 XML을 직접 조립해(경로 B) 만듭니다. 한컴오피스(Hwp)와 호환되는 공문서·기안서·보고서를 작성하고, 기존 HWP 파일을 HWPX로 변환하거나 텍스트를 추출할 수 있습니다.
한글, hwpx, 아래한글, 한컴, 공문서, 기안서, HWP 변환, 한글 문서 생성, HWPX 편집
사용자 요청 분석 후 작업 유형 결정:
서식 결정 (공문·기안문·품의서 등 정형 문서일 때 필수): references/kr-official-forms.md를 로드해 두문·본문·결문 구조, 문서번호, 시행일자(YYYY. M. D.), 수신·경유, 항목 번호체계(1.→가.→1)→가)), 붙임 n부. 끝., 발신명의, 결재란·전결 표기를 서식대로 적용합니다. 구체 레이아웃(여백·폰트·플레이스홀더)은 references/templates/ 아래 템플릿(공문 gonmun·보고서 report·회의록 minutes·제안서 proposal, 공통 base)을 사용합니다.
생성 경로 결정 (두 경로 중 택1)
bash python -c "import hwpx" 2>/dev/null && echo "python-hwpx 사용 가능" || echo "경로 B(직접 XML 조립) 사용" # 없고 설치 가능하면: pip install python-hwpx lxml (HWP 바이너리 처리 시 olefile 추가)
Python stdlib zipfile만으로 조립할 수 있습니다. 3단계 인라인 코드를 그대로 실행합니다.
경로 A (python-hwpx 있을 때):
pythonfrom hwpx import HwpxDocument hwp = HwpxDocument.new() # 단락 추가·표 삽입·서식 적용은 python-hwpx API(add_paragraph, add_table 등)로 수행 hwp.save("output.hwpx")
경로 B (stdlib만, 기본 경로): HWPX = ZIP(mimetype + version.xml + Contents/content.hpf + Contents/section0.xml 등)을 zipfile로 직접 씁니다. 최소 골격:
pythonimport zipfile # section0.xml — OWPML 본문(단락·표). 실제로는 <hp:p> 단락, <hp:tbl> 표를 필요한 만큼 채웁니다. section = """<?xml version="1.0" encoding="UTF-8"?> <hs:sec xmlns:hs="http://www.hancom.co.kr/hwpml/2011/section" xmlns:hp="http://www.hancom.co.kr/hwpml/2011/paragraph"> <hp:p><hp:run><hp:t>여기에 본문 단락 텍스트</hp:t></hp:run></hp:p> </hs:sec>""" with zipfile.ZipFile("output.hwpx", "w", zipfile.ZIP_DEFLATED) as z: z.writestr("mimetype", "application/hwp+zip") # 반드시 첫 엔트리 z.writestr("version.xml", '<?xml version="1.0"?><hv:HCFVersion xmlns:hv="http://www.hancom.co.kr/hwpml/2011/version"/>') z.writestr("Contents/section0.xml", section) # 실제 배포용은 header.xml(글꼴·문단모양)·content.hpf(패키지 매니페스트)를 함께 채웁니다.
> 경로 B는 최소 골격입니다. 서식·표·머리글 등 복잡한 문서는 python-hwpx(경로 A) 사용을 권장하며, > 라이브러리가 없으면 위 XML을 OWPML 스펙에 맞춰 단락·표 요소를 확장해 조립합니다.
생성한 HWPX가 OWPML 스펙을 준수하는지 stdlib로 직접 검증합니다 — ZIP 무결성·필수 XML well-formed 여부를 확인합니다:
pythonimport zipfile, xml.etree.ElementTree as ET with zipfile.ZipFile("output.hwpx") as z: assert z.testzip() is None, "ZIP 손상" names = z.namelist() assert "mimetype" in names and "Contents/section0.xml" in names, "필수 엔트리 누락" ET.fromstring(z.read("Contents/section0.xml")) # XML well-formed 검증 (실패 시 ParseError) print("OWPML 기본 구조 OK — 한컴오피스에서 최종 열림 여부는 사용자가 확인")
.hwpx (한컴오피스 2010+ 표준)| 기능 | 상태 | 비고 | |------|------|------| | 단락 추가 | 안정 | 기본 기능 | | 볼드/이탤릭/밑줄 | 안정 | lxml 패치 자동 적용 | | 테이블 | 안정 | 행/열 제한 없음 | | 머리글/바닥글 | 안정 | - | | 각주/미주 | 안정 | - | | 북마크 | 안정 | - | | 텍스트 치환 | 안정 | - | | 도형 (선/사각/타원) | 제한 | 한글에서 오류 경고 발생 가능 | | 이미지 삽입 | 제한 | 불완전한 pic 요소 생성 | | 다단 설정 | 제한 | 한글에서 오류 경고 발생 가능 |
HWPX 파일은 한컴오피스에서 최적으로 열립니다. 한컴오피스가 설치되지 않은 환경에서는 moai-officer:doc-docx 스킬 사용을 권장합니다.
한컴 전용 폰트(HY헤드라인, HY견고딕 등)는 한컴오피스 설치 환경에서만 정상 표시됩니다. 배포 시 폰트 내장 또는 PDF 변환을 권장합니다.
HWP 파일 버전(2010/2014/2018 등)에 따라 변환 제한이 있을 수 있습니다. 구버전 HWP는 텍스트 추출만 가능할 수 있습니다.
| 상황 | 해결 방법 | |------|-----------| | 파일 생성 실패 (경로 A) | python-hwpx·lxml 설치 여부 확인(pip install python-hwpx lxml) 후 재시도, 또는 3단계 경로 B(stdlib zipfile 조립)로 전환 | | HWPX 라이브러리 미설치 | python-hwpx가 없으면 3단계 경로 B(라이브러리 없이 ZIP+XML 직접 조립)를 사용하세요 — 설치는 선택입니다 | | HWP 변환 오류 | HWP 파일 버전(2010/2014/2018 등)을 확인하세요. 구버전은 변환 제한이 있을 수 있습니다 | | OWPML 구조 오류 | 4단계 인라인 검증 코드(zipfile + ElementTree)로 ZIP 무결성·XML well-formed를 확인하고, 오류 내용을 공유해 주시면 수정을 도와드립니다 | | 폰트 깨짐 | 한컴 전용 폰트(HY헤드라인, HY견고딕 등)는 한컴오피스 설치 환경에서만 정상 표시됩니다 | | 한글에서 열리지 않음 | OWPML 네임스페이스를 확인하고 xml 헤더가 올바른지 검증하세요 |
한글 문서 생성이 끝나면 산출된 .hwpx 파일을 다시 열어 플레이스홀더 잔존·OWPML 구조·한글 인코딩 깨짐·표 깨짐을 자체 검수하고, 문제가 있으면 자동 수정 후 재생성하며 최종 PASS/FAIL 결과를 보고합니다.
moai-officer:doc-docx - DOCX(Word) 문서 생성moai-officer:doc-pptx - 발표용 PPT 슬라이드 생성moai-officer:doc-xlsx - 엑셀 데이터 시트 생성본 스킬이 산출하는 한국어 텍스트는 배포 전 의무 게이트를 통과합니다:
moai-coworker:ai-slop-reviewer — 1차 일반 AI 슬롭 검수 (금지어, 구조 패턴, 리듬)moai-writer:korean-humanize — 2차 한국어 정밀 윤문 (40+ 패턴 SSOT, 의미 불변)두 게이트는 대시 대비 헤드라인·조사·체언 종결 조각문·"A에서 B로" 전환 공식 S1 패턴을 잡아냅니다. 게이트 통과 없이 산출물을 바로 배포하지 않습니다. > 정형 서식 보호 — 이 스킬의 산출물은 정형 문서다. 슬롭 검수는 금지어 치환만 수행하고, 구조(개조식·항목 번호 체계·두문/본문/결문)는 재작성하지 않는다.
| 파일 | 로드 조건 | |------|-----------| | references/kr-official-forms.md | 공문·기안문·품의서 등 정형 문서 작성 시 (워크플로우 2단계 필수 — 두문/본문/결문·항목 번호체계·붙임/끝.·결재란·전결 표기 SSOT) | | references/guide.md | HWPX 생성 전반의 상세 가이드가 필요할 때 (라이브러리 활용·문서 조립 절차) | | references/owpml-spec.md | HWPX 편집 시 OWPML XML 네임스페이스·섹션 파일 구조 등 스펙 참조가 필요할 때 | | references/format-converter.md | HWPX·PPTX·DOCX·XLSX 형식 간 변환·템플릿 기반 문서 생성 에이전트가 필요할 때 | | references/templates/base.md | 모든 HWPX 템플릿의 공통 페이지·폰트·스타일 기본값이 필요할 때 | | references/templates/gonmun.md | 공문서(시행문) 생성 시 (「행정 효율과 협업 촉진에 관한 규정」 별지 서식 기반 레이아웃) | | references/templates/report.md | 보고서 HWPX 생성 시 | | references/templates/minutes.md | 회의록 HWPX 생성 시 | | references/templates/proposal.md | 제안서 HWPX 생성 시 |
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 41,980 | 17,611 | -58% | 1 | 1 | 0% | 7,929 | 3,537 | -55% | 0 | 0 | — |
case-18 | fail→pass | 17,543 | 4,029 | -77% | 1 | 1 | 0% | 2,618 | 3,809 | +45% | 0 | 0 | — |
case-07 | pass→pass | 24,253 | 23,733 | -2% | 1 | 1 | 0% | 5,669 | 7,308 | +29% | 0 | 0 | — |
case-02 | fail→pass | 29,561 | 25,530 | -14% | 1 | 1 | 0% | 4,895 | 8,278 | +69% | 0 | 0 | — |
case-03 | pass→pass | 30,577 | 28,991 | -5% | 1 | 1 | 0% | 5,770 | 8,357 | +45% | 0 | 0 | — |
case-04 | pass→pass | 43,483 | 42,275 | -3% | 1 | 1 | 0% | 8,227 | 11,252 | +37% | 0 | 0 | — |
case-05 | pass→pass | 24,629 | 15,272 | -38% | 1 | 1 | 0% | 4,568 | 6,419 | +41% | 0 | 0 | — |
case-06 | pass→pass | 51,758 | 18,304 | -65% | 1 | 1 | 0% | 4,067 | 7,031 | +73% | 0 | 0 | — |
case-08 | pass→pass | 11,206 | 28,575 | +155% | 1 | 1 | 0% | 1,929 | 7,857 | +307% | 0 | 0 | — |
case-09 | fail→fail | 11,881 | 14,346 | +21% | 1 | 1 | 0% | 2,039 | 4,632 | +127% | 0 | 0 | — |
case-10 | pass→pass | 8,852 | 10,709 | +21% | 1 | 1 | 0% | 1,639 | 4,861 | +197% | 0 | 0 | — |
case-11 | fail→pass | 24,702 | 18,498 | -25% | 1 | 1 | 0% | 4,283 | 6,942 | +62% | 0 | 0 | — |
case-12 | pass→pass | 21,724 | 31,530 | +45% | 1 | 1 | 0% | 3,444 | 7,378 | +114% | 0 | 0 | — |
case-13 | fail→pass | 16,307 | 18,498 | +13% | 1 | 1 | 0% | 2,599 | 6,024 | +132% | 0 | 0 | — |
case-14 | fail→pass | 20,567 | 25,027 | +22% | 1 | 1 | 0% | 3,532 | 7,480 | +112% | 0 | 0 | — |
case-15 | fail→pass | 22,765 | 16,053 | -29% | 1 | 1 | 0% | 3,718 | 5,653 | +52% | 0 | 0 | — |
case-16 | pass→pass | 23,022 | 21,243 | -8% | 1 | 1 | 0% | 3,610 | 6,489 | +80% | 0 | 0 | — |
case-17 | fail→pass | 11,879 | 5,959 | -50% | 1 | 1 | 0% | 1,975 | 4,094 | +107% | 0 | 0 | — |
case-19 | fail→pass | 15,084 | 7,966 | -47% | 1 | 1 | 0% | 2,454 | 4,303 | +75% | 0 | 0 | — |
case-20 | fail→pass | 11,241 | 4,976 | -56% | 1 | 1 | 0% | 1,844 | 3,936 | +113% | 0 | 0 | — |
case-21 | fail→pass | 9,152 | 5,389 | -41% | 1 | 1 | 0% | 1,567 | 3,934 | +151% | 0 | 0 | — |
case-22 | fail→pass | 20,387 | 16,546 | -19% | 1 | 1 | 0% | 3,016 | 6,243 | +107% | 0 | 0 | — |
case-23 | fail→pass | 16,017 | 7,147 | -55% | 1 | 1 | 0% | 2,591 | 4,219 | +63% | 0 | 0 | — |
case-24 | pass→pass | 15,880 | 13,946 | -12% | 1 | 1 | 0% | 2,898 | 5,674 | +96% | 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. 24 cases were attempted, and 23 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +50 percentage points is the difference between those two pass rates over the 23 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.