hwpx-kit
한글(HWP/HWPX) 문서 자동화 — Claude Code 플러그인 & CLI
"이 양식에 채워줘" 한마디로, 서식 무손상 한글 문서가 나옵니다.
양식 채우기 · 메일머지 · 표 생성/조작 · 공문서 표기 검수 · 각주/도장/이미지 — 아래아한글(한컴오피스) 설치 없이 동작하는 AI 에이전트용 HWPX 자동화 도구
무엇이 되나
한글(HWP/HWPX)은 한국 공공·기업 문서의 표준이지만, AI가 다룰 수 있는 도구가 사실상 없었습니다. hwpx-kit은 AI 에이전트가 한글 문서를 읽고, 채우고, 고치고, 새로 만들 수 있게 하는 도구 모음입니다.
👤 "이 양식에 채워줘" → 서식(폰트·표·조판) 무손상으로 값만 채운 사본
👤 "이 기획서를 ○○사업용으로 바꿔줘" → 기존 문서를 양식 삼아 내용 전면 교체
👤 "한글로 새 기획서 만들어줘" → 내장 템플릿으로 표지·장·표 갖춘 문서 생성
👤 "예산 앞에 장 하나 추가하고 표 넣어줘" → 장 헤더 복제·새 표 생성·쪽나눔까지
👤 "금액 한글로 병기해줘" → 금12,340원(금일만이천삼백사십원) — 계산 착오 0
👤 "이거 워드로도 줘" / "PPT로 만들어줘" → docx 변환 / 발표자료 재구성
👤 "이 명단으로 위촉장 30부 만들어줘" → 엑셀 명단 × 양식 일괄 생성 (메일머지)
👤 "제출 전에 검토해줘" → 빈칸·표기 위반·개인정보 잔존 기계 검수
👤 "여기 도장 찍어줘" → 직인·증명사진 삽입 (이미지는 사용자 제공)
👤 "이 이미지 표처럼 그려줘" → 병합·색·열폭·정렬 갖춘 표 원샷 생성
모든 채우기는 원본을 절대 수정하지 않고 사본에만 씁니다. 실제 공공기관 서식 (보도자료·신청서·계획서·회의록·공고문)으로 왕복 검증했습니다.
| hwpx-kit 없이 | hwpx-kit으로 | |
|---|---|---|
| 양식 채우기 | 한글 열고 칸마다 복붙, 서식 깨지면 수작업 복구 | 파일 주고 한마디 — 서식 무손상 사본 |
| 새 기획서 | 백지에서 표지·표·조판 직접 | 내장 템플릿에 내용만 — 몇 분 완주 |
| 금액 병기 | 손으로 한글 표기 (오타 위험) | 결정론 계산 — 금12,340원(금일만이천삼백사십원) |
| AI에게 한글 파일 | 못 읽음 · PDF 변환 우회 | hwpx·hwp 직접 읽기/쓰기 |
이런 분들을 위해 만들었습니다: 공공기관·학교의 서식 담당자, 사업계획서를 반복 작성하는 창업자·연구자, 한글 문서를 AI 워크플로에 넣고 싶은 개발자.
데모 — 한마디로 기획서 한 부
"hwpx로 새로운 사업기획서 작성해줘. 서울광역시에서 진행하는 Claude Code 해커톤"
① 시작점 — 내장 템플릿 (양식 파일이 없을 때 기준. 갖고 있는 양식이 있으면 그 양식을 그대로 씁니다)
② 작업 과정 — 필수 정보(일시·대상·주최·예산)를 먼저 묻고, 답을 받아 진행합니다
③ 결과물 — 표지·5개 장·일정표·예산표까지 채워진 완성본. 서식은 템플릿 그대로
이 데모에서 실제로 일어난 일들:
- 아는 것만 쓰고, 모르는 건 묻습니다 — 장소가 미정이라고 하자 "서울 시내 행사장(추후 확정)"으로 표기하고 확정되면 수정하겠다고 알림. 말하지 않은 정원·시상금을 지어내지 않음
- 내용을 주면 그대로, 안 주면 Claude가 초안 — 시상금 구성은 사용자가 준 숫자 그대로, 추진배경·목적은 "필요하다고 생각하는 것들 다 써줘"라는 요청에 Claude가 작성. 상세하게 말할수록 상세하게 반영됩니다
- 표 계산은 결정론 — 예산표 합계 7,000 + 30,000 = 총계 37,000천원, 수기 계산 착오 없음
- 구조도 바꿉니다 — 장 추가/복제, 표 행 추가·삭제(서식 승계), 쪽나눔까지. "5장 뒤에 강사진 장 추가해줘"가 통합니다
- 기존 양식 재활용 — 작성 완료된 옛 기획서를 주고 "○○사업용으로 바꿔줘"라고 하면 그 문서를 양식 삼아 내용만 전면 교체 (서식 무손상)
30초 설치
Claude Code에서:
/plugin marketplace add 6aneffy/hwpx-kit
/plugin install hwpx-kit@hwpx-kit-market
이게 전부입니다. CLI 런타임은 첫 사용 때 스킬이 알아서 설치를 진행합니다 (PC에 Python 3.10+만 있으면 됩니다).
수동 설치
pip install hwpx-kit-cli
# Windows 일괄 (CLI + 플러그인 등록)
irm https://raw.githubusercontent.com/6aneffy/hwpx-kit/main/install.ps1 | iex
스킬 (Claude Code 플러그인)
| 스킬 | 트리거 | 역할 |
|---|---|---|
| hwpx-form | "이 양식에 채워줘" | 분석→채우기→검증 코어 워크플로. 일괄 생성(메일머지)·표 조작·이미지 편집·각주/링크·페이지 설정·도장 날인·secure 채우기 포함 |
| doc-create | "기획서 만들어줘" (파일 없이) | 백지 생성 라우터 — 내장 템플릿(표지·장 헤더·표 골격) 기반 |
| format-convert | "금액 한글로", "요일 붙여줘" | 금액 병기·날짜 요일·만나이 — 결정론 계산 (LLM 암산 금지) |
| gongmun-format | "공문 형식으로", "검토해줘" | 행안부 공문 규약 — 글머리 위계(□○-※*), 표기, 제출 전 기계 검수 |
| table-calc | "증감 채워줘" | 보고서 표 증감(△·%p)·비율·합계 계산과 관습 표기 |
| office-export | "워드로", "PPT로" | docx 변환(한글 COM) / pptx·xlsx 재구성 |
스킬은 사용자에게 필수 정보를 먼저 묻고(선택지 UI), 초안을 확정받은 뒤 작업합니다. 말하지 않은 값을 지어내지 않습니다.
CLI
모든 명령은 --json으로 한 줄 JSON 봉투(ok/data/warnings/error)를 반환합니다.
종료 코드: 0 성공 · 1 오류 · 2 부분 성공.
# 읽기·분석
hwpx-kit analyze 양식.hwpx --json # 채울 수 있는 필드 탐지 (fill_key 반환)
hwpx-kit read 문서 --format md # 본문 추출 — hwpx·PDF·DOCX·XLSX 내장 지원
hwpx-kit outline 문서.hwpx --json # 문단·표 배치 지도 (삽입 앵커 탐색)
hwpx-kit table-map 문서.hwpx --table 3 --json # 표 셀 좌표·병합 상태
hwpx-kit validate 문서.hwpx --json # 구조 검증
# 채우기·편집 (원본 불변 — 항상 --out 사본)
hwpx-kit fill 양식.hwpx --data 값.json --out 결과.hwpx
hwpx-kit fill-batch 양식.hwpx --rows 명단.xlsx --template 값틀.json --out-dir 결과/ --name "{성명}_위촉장.hwpx" # 메일머지
hwpx-kit inspect 결과.hwpx --json # 제출 전 검수 — 잔여 마커·공문 표기·개인정보·문서 구조·미리보기 잔존
hwpx-kit inspect 결과.hwpx --checks layout --json # 셀 넘침(내용 잘림 위험) 추정 경고
hwpx-kit open-check 결과.hwpx --json # (진단용) 한글 실열림 확인 — 한글을 자동 구동하므로 개발·회귀 전용
hwpx-kit table-set 문서.hwpx --table 3 --data 셀.json --out 결과.hwpx # 좌표 셀 쓰기
hwpx-kit table-clear 문서.hwpx --table 3 --rows 1-20 --out 결과.hwpx # 셀 내용 비우기
hwpx-kit table-copy 문서.hwpx --table 1 --after-table 4 --out 결과.hwpx # 표 통째 복제 (서식·병합 유지)
hwpx-kit table-new 문서.hwpx --rows 6 --cols 4 --like-table 3 --after-text "앵커" --out 결과.hwpx
hwpx-kit row-add 문서.hwpx --table 3 --like 2 --count 3 --out 결과.hwpx # 행 추가 (기준 행 서식 승계)
hwpx-kit row-del 문서.hwpx --table 3 --rows 5-7 --out 결과.hwpx # 행 삭제
hwpx-kit row-height 문서.hwpx --table 3 --like 1 --rows 2-5 --out 결과.hwpx # 행 높이 정돈
hwpx-kit table-build 문서.hwpx --spec 표스펙.json --at-text "앵커" --out 결과.hwpx # 표 원샷 생성 (병합·색·열폭·정렬·내용)
hwpx-kit cell-merge 문서.hwpx --table 3 --range "0,0:0,2" --out 결과.hwpx # 셀 병합 (해제는 cell-split)
hwpx-kit cell-color 문서.hwpx --table 3 --range "0,0:0,5" --color "#D9E5FF" --out 결과.hwpx # 셀 배경색
hwpx-kit col-width 문서.hwpx --table 3 --widths "2,3,3,2" --out 결과.hwpx # 열 너비 비율
hwpx-kit cell-align 문서.hwpx --table 3 --range "0,0:9,5" --align center --out 결과.hwpx # 셀 정렬
hwpx-kit page-break 문서.hwpx --table 5 --out 결과.hwpx # 쪽나눔 (새 장 시작)
hwpx-kit page-setup 문서.hwpx --orientation landscape --margins "20,20,15,15" --out 결과.hwpx # 용지·방향·여백·다단
hwpx-kit image-add 문서.hwpx --image 도장.png --at-text "(인)" --width-mm 20 --out 결과.hwpx # 직인·사진
hwpx-kit image-list 문서.hwpx --json # 본문 이미지 목록 (편집 대상 확인)
hwpx-kit image-replace 문서.hwpx --index 0 --image 새로고.png --out 결과.hwpx # 이미지 교체 (크기·위치 유지, resize/del도)
hwpx-kit seal 문서.hwpx --image 도장.png --at-text "행정안전부장관" --dx-mm 25 --out 결과.hwpx # 발신명의 위 날인 (겹침)
hwpx-kit toc-add 문서.hwpx --at-text "앵커 문단" --out 결과.hwpx # 목차 삽입 — 쪽번호는 한글 COM 실측 (후보 확인은 toc)
hwpx-kit note-add 문서.hwpx --at-text "앵커 문단" --text "각주 내용" --out 결과.hwpx # 각주/미주
hwpx-kit link-add 문서.hwpx --at-text "앵커 문단" --url "https://..." --display "안내" --out 결과.hwpx # 하이퍼링크 (책갈피는 bookmark-add)
hwpx-kit shape-add 문서.hwpx --type line --at-text "앵커 문단" --width-mm 150 --out 결과.hwpx # 구분선·도형
hwpx-kit header-footer 문서.hwpx --footer "대외비" --page-number center --out 결과.hwpx
# 변환·생성
hwpx-kit fmt --amount 12340 --json # 금12,340원(금일만이천삼백사십원)
hwpx-kit fmt --date 20260101 --json # 2026.1.1.(목)
hwpx-kit convert 문서.hwp --json # .hwp → .hwpx (Windows + 한글)
hwpx-kit export 문서.hwpx --to docx --json # 워드로 내보내기 (Windows + 한글)
hwpx-kit generate 초안.md --out 새문서.hwpx # Markdown → 공문서 (kordoc)
hwpx-kit render 문서.hwpx --engine com --out p.pdf # 한글 실물 PDF 미리보기 (정확, Windows+한글) / kordoc SVG는 --engine kordoc
fill_key 계약
analyze가 주는 키를 그대로 데이터 JSON의 키로 씁니다.
| 키 | 대상 | 예시 |
|---|---|---|
clickhere:<이름> |
누름틀 필드 | "clickhere:신청자": "김철수" |
marker:<키> |
{{키}} 마커 |
"marker:출장기간": "7/14~7/16" |
table:<라벨> |
라벨 오른쪽 셀 | "table:성명": "김철수" |
table:<라벨>#N |
같은 라벨 N번째 | "table:담당 부서#2": "운영과" |
table:<라벨> > <방향> |
방향 체인 | "table:과 장 > right > right": "010-…" |
text:<원문> |
문장 교체 (서식 보존) | "text:○○○ 사업": "청년 AI교육 사업" |
fit:<자리원문> |
폭 보존 교체 — 서명란 등 자리 폭이 레이아웃인 곳 | "fit:성명: (인)": "성명: 김철수 (인)" |
delete:<문단원문> |
안내문 삭제 | "delete:(예시입니다)": "" |
bold: / underline:<원문> |
굵게·밑줄 | "bold:핵심 성과": "" |
요구 사항
| 기능 | 필요한 것 |
|---|---|
| 분석·채우기·검증·표 조작·표기 변환·PDF/DOCX/XLSX 읽기 | Python 3.10+ 만 (순수 파이썬) |
.hwp 변환, 워드(docx) 내보내기 |
Windows + 한글(한컴오피스) |
한글 없는 환경(Mac 등)의 구형 .hwp 읽기, MD→HWPX, SVG |
kordoc (Node 18+, 선택) |
아키텍처
Claude Code 스킬 6종 ──→ hwpx-kit CLI (47 명령, JSON 봉투)
└─ adapter/ ← 엔진 격리 계층
├─ python-hwpx hwpx 분석·채우기·표 조작
├─ pypdf·python-docx·openpyxl 타 포맷 읽기
├─ pyhwpx(COM) .hwp 변환·docx 내보내기
└─ kordoc 구형 .hwp·생성·렌더 (선택)
templates/ 기본 계획서 템플릿 (표지·장 헤더·표 골격, 마커 내장)
설계 불변 원칙: ① 원본 절대 수정 금지 ② --json stdout은 봉투 한 줄만
③ 서식은 항상 보존 (셀을 비워도 글자모양이 유지되어 재기입 시 원래 서식을 물려받음).
민감정보 처리 (secure 모드)
주민번호·계좌 같은 값은 AI 모델을 거치지 않고 채울 수 있습니다:
사용자가 값 파일을 직접 작성 → 스킬은 경로만 전달 → fill --secure가 CLI에서만 읽어 채움.
--secure는 하나라도 못 채우면 산출물 없이 실패하고(부분 채움 방지), 출력에 값을 노출하지 않습니다.
제출 전 inspect로 개인정보 잔존(주민번호·전화·이메일 패턴)도 기계 검사할 수 있습니다.
🚧 같은 코어를 MCP 서버로 노출하는 버전도 제작 중입니다 (Claude Desktop 등 MCP 클라이언트용).
검증
- 자동 테스트 212개 (pytest)
- 실서식 수렴 테스트: 보도자료·신청서·계획서·회의록·공고문 5계열, 실제 공공기관 문서 30여 종으로 analyze→fill→validate 왕복
- 실사용 시나리오 테스트 다수 — 백지 생성 완주, 장·표 동적 추가, 보도자료 변환, 외부 사용자 설치·작성 검증 (발견된 문제는 즉시 수정 반영)
라이선스
Apache-2.0 · © 2026 6aneffy
이슈·PR 환영합니다. 특히 실제 기관 양식에서의 analyze/fill 실패 사례 제보가 가장 값집니다 (단, 기관 내부 문서를 이슈에 첨부하지 마세요 — 재현 가능한 합성 예시로 부탁드립니다).
Metadata
Release files for hwpx-kit-cli 0.13.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| hwpx_kit_cli-0.13.1.tar.gz | 72.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| hwpx_kit_cli-0.13.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 164.6 kB
Release files / hwpx_kit_cli-0.13.1.tar.gz
| Download URL | hwpx_kit_cli-0.13.1.tar.gz |
|---|---|
| Size | 72.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a70efb5ce43383ed6841144affb75bb2a4f7f9315f154d782376ae1fd4d877af
|
|
BLAKE2b-256 checksum How to use checksums |
dcf81baaae8d57054c4d36ed2df1fc083b731f269d92dd2dcbcc581dc544f9b4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / hwpx_kit_cli-0.13.1-py3-none-any.whl
| Download URL | hwpx_kit_cli-0.13.1-py3-none-any.whl |
|---|---|
| Size | 92.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e349eea93ba5e4fa919a1df42a97af33beb8b1b7e00e84b5a10533de351a86e1
|
|
BLAKE2b-256 checksum How to use checksums |
4e58108b8f0113dea8f5231ceeb201a1567096875388fcf74a396c780b2120c6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|