AI ์์ด์ ํธ๊ฐ HWPX ๋ฌธ์๋ฅผ ๋ฐ๋ก ์ฝ๊ณ , ์ฑ์ฐ๊ณ , ๋ง๋ค๊ณ , ์ ๊ฒํ๊ฒ ํด์ฃผ๋ ๊ณต์ ์จ๋ณด๋ฉ ์คํฌ
์์ Python ยท ํ์ปด์คํผ์ค ๋ถํ์ ยท ํฌ๋ก์ค ํ๋ซํผ
| ๊ณ์ธต | ๋ ํฌ | ์ญํ |
|---|---|---|
| ๐ฆ ๋ผ์ด๋ธ๋ฌ๋ฆฌ | python-hwpx |
์์ ํ์ด์ฌ HWPX ํ์ฑยทํธ์งยท์์ฑ ์ฝ์ด |
| ๐ MCP ์๋ฒ | hwpx-mcp-server |
MCP ํด๋ผ์ด์ธํธ(Claude Desktop, VS Code ๋ฑ)์์ HWPX ์กฐ์ |
| ๐ฏ ์์ด์ ํธ ์คํฌ | hwpx-plugins |
์์ด์ ํธ๊ฐ HWPX๋ฅผ ๋ฐ๋ก ์ฐ๊ฒ ํด์ฃผ๋ ๊ณต์ ์จ๋ณด๋ฉ ์คํฌ |
hwpx-plugins์ python-hwpx ๊ธฐ๋ฐ์ ๊ณต์ ์์ด์ ํธ ์คํฌ์ด๋ค. HWPX๋ฅผ ์ ๋ชจ๋ฅด๋ ์ฌ์ฉ์๋ ์คํฌ๋ง ์ค์นํ๋ฉด ์์ด์ ํธ์๊ฒ ์์ฐ์ด๋ก ๋งํ๋ ๊ฒ๋ง์ผ๋ก ํ๊ธ ๋ฌธ์๋ฅผ ๋ค๋ฃจ๊ฒ ํ๋ ๊ฒ์ด ๋ชฉํ๋ค. ์์ด์ ํธ๋ SKILL.md์ ์์ฌ๊ฒฐ์ ํธ๋ฆฌ๋ฅผ ๋ฐ๋ผ ์๋ง์ ์คํฌ๋ฆฝํธ๋ MCP ๋๊ตฌ๋ฅผ ์ค์ค๋ก ํธ์ถํ๋ค.
- ์ฝ๊ธฐยท์ถ์ถ โ
.hwpxํ ์คํธ, ํ, ๊ฐ์ฃผ๊น์ง ์ถ์ถ (JSON/Markdown) - ์์ ์ฑ์ โ ์น์ธ๋ ์์์ ๊ทธ๋๋ก ๋๊ณ ๋ฐ์ดํธ ๋ณด์กด์ผ๋ก ์ ๋ง ์ฑ์ด๋ค
- ๋ฌธ์ ์์ฑ โ
hwpx.builder๋ก ๋จธ๋ฆฌ๊ธยท์ชฝ๋ฒํธยทํยท์ด๋ฏธ์ง๊ฐ ์๋ ์ ๋ฌธ์๋ฅผ ์กฐ๋ฆฝ - ์ ๊ฒยท๋ณต๊ตฌ โ ๊ตฌ์กฐ/ํ์ง lint, ํ์ปด์์ ์ ์ด๋ฆฌ๋ ํ์ผ repair
- ๋์ ํฌ๋งท์ Open XML ๊ธฐ๋ฐ
.hwpx๋ค. ๋ ๊ฑฐ์ ๋ฐ์ด๋๋ฆฌ.hwp์ง์ ํธ์ง์ ๋ฒ์ ๋ฐ์ด๋ค.
์์กด์ฑ ์ค์น (๋ชจ๋ ํธ์คํธ ๊ณตํต):
python3 -m pip install -U python-hwpx lxml๊ถ์ฅ ๊ธฐ์ค: Python 3.10+ ยท python-hwpx >= 2.23.0 ยท hwpx-mcp-server >= 2.15.0 ยท ์คํฌ ๋ฒ๋ค 0.1.20.
์ค์น ์งํ ์ฒซ ์ฑ๊ณต ๊ฒฝ๋ก๋ฅผ ํ ๋ฒ์ ํ์ธ:
python3 scripts/quickcheck.py
# [OK] basic hwpx skill workflow passed์ด ์คํฌ๋ฆฝํธ๋ Python ๋ฒ์ โ python-hwpx/lxml import โ ์์ ๋ฌธ์ ์์ฑ โ ๊ตฌ์กฐ ์ ๊ฒ โ ํ
์คํธ ์ถ์ถ์ ํ ๋ฒ์ ํ์ธํ๋ค. ๊ฒฝ๋ก๋ณ๋ก ๋ ๊ฒ์ฆํ๋ ค๋ฉด --builder, --document-plan, --operating-plan, --template-formfit, --visual-review ํ๋๊ทธ๋ฅผ ๋ถ์ธ๋ค.
์ค์น ํ ์ฌ์ฉ์๊ฐ ์ง์ ํ์ด์ฌ์ ์น ์ผ์ ๊ฑฐ์ ์๋ค. Claude CodeยทCursorยทCodex ๊ฐ์ ์์ด์ ํธ์๊ฒ ์์ฐ์ด๋ก ๋งํ๋ฉด ์คํฌ์ด ํธ๋ฆฌ๊ฑฐ๋๋ค.
| ์ด๋ ๊ฒ ๋งํ๋ฉด | ์์ด์ ํธ๊ฐ ํ๋ ์ผ |
|---|---|
| "์ด hwpx ํ ์คํธ ์ ๋ถ ๋ฝ์์ค" | ํ ์ ๋ฌธ๋จยท๊ฐ์ฃผ ํฌํจ ํ ์คํธ ์ถ์ถ |
"{ํ๊ต๋ช
}ยท{๋ด๋น์} ์๋ฆฌํ์์ ์ ๋ถ ๋ฐ๊ฟ์ค" |
ํ๊น์ง ํฌํจํ ํ๋ ์ด์คํ๋ ์ ์ญ ์นํ |
| "์ด ์์์ ๊ทธ๋๋ก ๋๊ณ ๋ด์ฉ๋ง ์ฑ์์ค" | ๋ฐ์ดํธ ๋ณด์กด ์์ form-fit (์ ์ฑ์ยทํ/์ด ์กฐ์ ยทํ์ปด ๊ฒ์ฆ) |
| "๋จธ๋ฆฌ๊ธยท์ชฝ๋ฒํธ ๋ค์ด๊ฐ ์ด์ ๊ณํ์ ์๋ก ๋ง๋ค์ด์ค" | hwpx.builder๋ก ๋ ์ด์์ ๋ฏผ๊ฐ ๋ฌธ์ ์กฐ๋ฆฝ |
| "ํ์ปด์์ ์ ์ด๋ฆฌ๋ hwpx์ธ๋ฐ ๋ณต๊ตฌํด์ค" | repair/recover ๋ณต๊ตฌ ๋ณต์ฌ๋ณธ ์์ฑ |
| "์ด hwpx ๊ตฌ์กฐ๋ ํ ๊ฐ์ ์ ๊ฒํด์ค" | ๊ตฌ์กฐยทํ์ง ์ ๊ฒ |
์์ โ ์ฌ์ฉ์: "์ฒจ๋ถํ ๊ฐ์ ํต์ ๋ฌธ ์์์์ ํ๊ต๋ช ์ด๋ ๋ ์ง๋ง ์ฐ๋ฆฌ ํ๊ต ๊ฑธ๋ก ๋ฐ๊ฟ์ ์ ํ์ผ๋ก ์ค." ์์ด์ ํธ: ์๋ณธ์ ๋ณด์กดํ ์ฑ form-fit์ผ๋ก ๊ฐ์ ์ฑ์ฐ๊ณ , ํจํค์งยท์คํค๋ง ๊ฒ์ฆ์ ๊ฑฐ์น ์ ํ์ผ์ ๋๋ ค์ค๋ค.
์์ด์ ํธ๋ ์์ฒญ ์ฑ๊ฒฉ์ ๋ฐ๋ผ builder / document-plan / form-fit / repair ์ค ๋ฌด์์ ์ธ์ง ์ค์ค๋ก ํ๋จํ๋ค. ๋จธ๋ฆฌ๊ธยท์ชฝ๋ฒํธยทํ์ฒ๋ผ ๋ ์ด์์์ ๋ฏผ๊ฐํ ์์
์์๋ visual_review_required๊ฐ ์ผ์ง๋ฏ๋ก, ์์ด์ ํธ๋ ์ต์ข
์ ์ถ ์ ์ด๋ฆฐ ๋ฌธ์ ์๊ฐ ๊ฒํ evidence๊น์ง ๊ฐ์ด ๋จ๊ธด๋ค.
์์ด์ ํธ๊ฐ ํธ๋ฆฌ๊ฑฐํ๋ ์ฃผ์ ๊ธฐ๋ฅ์ ํ ๋ง๋ณ๋ก ์ ๋ฆฌํ๋ค. ์ ์ฒด ๋๊ตฌยท์ํฌํ๋ก ๋ชฉ๋ก์ SKILL.md์ references/ ์ฐธ๊ณ .
- ์ฝ๊ธฐ โ ํ ์คํธ/ํ/๊ฐ์ฃผ ์ถ์ถ, JSONยทMarkdown ๋ณํ, ๋ฐ์์ ์ถฉ์ค ์ฝ๊ธฐ ยท workflows-reading.md
- ์์ โ ๋๋ฆํ(
list_form_fields/fill_form_field) 1๊ธ ์ง์, ๋ฐ์ดํธ ๋ณด์กด ๊ตฌ์กฐ์ form-fill(์ ์ฑ์ยทํ/์ดยทํ ์ฝ์ /์ญ์ ยท์ด๋๋น ์๋๋ง์ถคยทํฐํธ shrink-to-fitยท์คํ์ปด ๊ฒ์ฆ) ยท workflows-forms.md - ์์ฑ โ
hwpx.builder(๋จธ๋ฆฌ๊ธ/๋ฐ๋ฅ๊ธยท์ชฝ๋ฒํธยท๋ฆฌ์น ๋ฐยท๋ชฉ๋กยท๋ณํฉ/์์/์ด๋๋น ํยท์ด๋ฏธ์งยทํ์ด์ง ๋๋), ์ ์ธํhwpx.document_plan.v1, ๊ณต๋ฌธยท๋ณด๊ณ ์ยท์ ์์ ๋ ์ํผ ยท workflows-creation.md ยท workflows-authoring.md - ํธ์ง โ ์์ ์ ์ฉ
apply_edits(dry_runยทrevision ๊ฐ๋ยท๋ฉฑ๋ฑํค)ยทundo_last_edit, ์ธ๊ฐ ๋จ์ ์์ ํธ์ง, ์ถ์ ๋ณ๊ฒฝ(redline) ยท workflows-editing.md ยท workflows-redline.md - ๊ณต๋ฌธ์ โ
inspect_official_document_stylelintยท๊ฒฐ์ฌ๋ ํ๋ฆฌ์ ยท์ฅ๋ฅด ๋ ์ํผ, ์ ๊ตฌ๋์กฐํ(doc_diff/create_comparison_table_document) ยท official-document-rules.md - ์๋ TOCยท์ํธ์ฐธ์กฐ โ ๋ค์ดํฐ๋ธ ๋ชฉ์ฐจ ์์ฑยทํ์ด์ง ์ฌ๊ณ์ฐ ํธ๋ฆฌ๊ฑฐ ยท workflows-toc.md
- ์์ฐ์ฑ โ
mail_merge๋๋ ์์ฐยทtable_compute, ์์ ์ด์(extract_style_profile)ยทํ ํ๋ฆฟ ๋ ์ง์คํธ๋ฆฌ, ๊ณ ๊ธ ์์ฑ๊ธฐ(์ฌ์ง๋์งยท๋ช ํจยท์กฐ์ง๋) ยท workflows-bulk-compare.md - PII โ ๊ฐ์ธ์ ๋ณด ๋ง์คํน ๊ฒ์ดํธยทscan ยท workflows-pii.md
- ์ ๋ขฐ ๋ฃจํ โ
render_preview(ํ์ด์ง PNG ์๊ธฐ๊ฒ์ฆ), package/schema/text ๊ฒ์ฆ, ์๊ฐ ๊ฒํ evidence ๊ณ์ฝ ยท evidence-contract.md
์์กด์ฑ(python-hwpx lxml)์ ์ ๋น ๋ฅธ ์์์์ ํ ๋ฒ๋ง ์ค์นํ๋ค. ์๋๋ ํธ์คํธ๋ณ ์ง์
์ ์ด๋ค. ์ค์นยท์ฌ์ค์น ํ์๋ ์ ์์ด์ ํธ ์ธ์
์ ์์ํด์ผ ์ skill๊ณผ MCP ๋๊ตฌ๊ฐ ๋ก๋๋๋ค.
claude plugin marketplace add airmang/hwpx-plugins
claude plugin install hwpx-plugin@hwpx์๋ ์ค์น๋ฅผ ์ํ๋ฉด ์ด ๋ ํฌ๋ฅผ hwpx-plugins ํด๋์งธ ํ๋ก์ ํธ ๋ก์ปฌ .claude/skills/hwpx-plugins/ ๋๋ ๊ธ๋ก๋ฒ ~/.claude/skills/hwpx-plugins/์ ๋ณต์ฌํ๋ค.
codex plugin marketplace add airmang/hwpx-plugins
codex plugin add hwpx-plugin@hwpx์๋ ๊ฒฝ๋ก๋ .agents/skills/hwpx-plugins/.
์ด ๋ ํฌ๋ฅผ .cursor/skills/hwpx-plugins/(๋๋ ๊ธ๋ก๋ฒ ~/.cursor/skills/)์ ๋ณต์ฌํ๊ณ , .cursor/rules/hwpx.mdc ํธ๋ฆฌ๊ฑฐ ๋ฃฐ์ ๋๋ค. ์คํฌ๊ณผ ๋ฃฐ์ ํจ๊ป ๋๋ฉด ์์ฐ์ด ์์ฒญ๊ณผ **/*.hwpx ํ์ฅ์ ๋ ๋ค๋ก ํธ๋ฆฌ๊ฑฐ๋๋ค.
---
description: HWPX/ํ๊ธ ๋ฌธ์ ์์
์ hwpx-plugins์ ์ฌ์ฉ
globs:
- "**/*.hwpx"
alwaysApply: false
---
ํ๊ธ ๋ฌธ์(.hwpx), ๊ฐ์ ํต์ ๋ฌธ, ๊ณต๋ฌธ, ํ๊ธ ์์, OWPML, ํ๋ ์ด์คํ๋ ์นํ, ๋ฌธ์ ์๋ํ ์์ฒญ์ด๋ฉด `.cursor/skills/hwpx-plugins/`์ `SKILL.md`๋ฅผ ๋จผ์ ์ฝ๊ณ ๊ทธ ์ํฌํ๋ก๋ฅผ ๋ฐ๋ฅธ๋ค.๊ฐ ํธ์คํธ ๋ฒ๋ค๊ณผ MCP ๋ฐฐ์ ์๋ด๊ฐ ํจ๊ป ๋ค์ด ์๋ค.
| Host | Bundle | Install entry point |
|---|---|---|
| OpenClaw | plugins/openclaw/hwpx-plugin |
openclaw.plugin.json + INSTALL-mcp.md |
| Hermes Agent | plugins/hermes/hwpx |
hermes skills publish + INSTALL-mcp.md |
์ด ๋ ํฌ๋ HWPX ์คํฌ์ canonical ์์ค๋ก, ํธ์คํธ๋ณ ๋ฒ๋ค(Claude Code / Codex / OpenClaw / Hermes)์ ํ ์์ค์์ ๋น๋ํ๋ค. canonical
SKILL.md,references/,examples/,scripts/๋ฅผ ํธ์งํ ๋คpython3 scripts/build_hwpx_plugins.py๋ก ์ฌ๋น๋ํ๊ณpython3 scripts/validate_hwpx_plugin.py๋ก ๊ฒ์ฆํ๋ค. MCP ๋ฐ์ฒ๋ ๋ก์ปฌ sibling checkout(../hwpx-mcp-server,../python-hwpx)์ ์ฐ์ ํ๊ณ , ์์ผ๋ฉด ์ฒซ MCP ์์ ์hwpx-mcp-server==2.15.0์ ํ๋ฌ๊ทธ์ธ ๋ก์ปฌ venv์ ์ค์นํ๋ค.
ํ์์ ์น ํ์ ์๋ค. ์์ด์ ํธ๊ฐ ๋ด๋ถ์์ ๊ฐ์ ์คํฌ๋ฆฝํธยทMCP ๋๊ตฌ๋ฅผ ํธ์ถํ๋ค. ๊ฒฐ๊ณผ๋ฅผ ์์ผ๋ก ํ์ธํ๊ฑฐ๋ CI์์ ๋๋ฆด ๋๋ง ์ฐธ๊ณ ํ๋ค. ์ ์ฒด ์์ ๋
examples/์ฐธ๊ณ .
# ํ
์คํธ ์ถ์ถ
python3 scripts/text_extract.py input.hwpx --format json --include-nested --out output.json
# ํ๋ ์ด์คํ๋ ์ ์ญ ์นํ (ํ ์
ํฌํจ)
python3 scripts/zip_replace_all.py template.hwpx output.hwpx \
--replace "{ํ๊ต๋ช
}=ํ
์คํธ์ด" "{๋ด๋น์}=ํ๊ธธ๋" --auto-fix-ns
# ์ต์ ์ฑ๊ณต ๊ฒฝ๋ก: ์์ฑ โ ์ถ์ถ
python3 examples/01_create_and_save.py
python3 scripts/text_extract.py examples/out/01_created.hwpxzip_replace_all.py์ fix_namespaces.py๋ ์์ HWPX๊ฐ validate_editor_open_safety()๋ฅผ ํต๊ณผํ ๊ฒฝ์ฐ์๋ง ๋์ ํ์ผ์ ๊ต์ฒดํ๋ค. ๊ฒ์ฆ ์คํจ ์ ๊ธฐ์กด output์ ๋ณด์กด๋๋ค.
builder / document-plan / operating-plan / form-fit ๊ฒฝ๋ก๋ ๊ฐ๊ฐ examples/10_create_with_builder.py, 06_create_from_document_plan.py, 07_create_operating_plan.py, 08_template_formfit.py๋ก ํ์ธํ๋ฉฐ, ๋์ํ๋ quickcheck.py --builder/--document-plan/--operating-plan/--template-formfit ํ๋๊ทธ๋ก ๊ฒ์ดํธ๋ฅผ ๊ฒ์ฆํ๋ค. ์์ธํ ์ ์ฐจ์ evidence ๊ณ์ฝ์ references/์ ์๋ค.
save()๋์save_to_path()๋ฅผ ์ฌ์ฉํ๋ค.- ์ ๋ฌธ์ ์กฐ๋ฆฝ์๋
hwpx.builder๋ฅผ ์ฐ์ ํ๊ณ , ์ ์ฅ ์งํBuilderSaveReport์ hard gates(package_validationยทdocument_errorsยทreopen)์visual_review_required๋ฅผ ํ์ธํ๋ค. replace_text_in_runs()๋ ํ ์ ๊น์ง ํญ์ ๋ณด์ฅํ์ง ์์ผ๋ฏ๋ก, ์์ ์ ์ฒด ์นํ์zip_replace_all.py(๋๋ form-fit)๋ฅผ ์ฐ์ ํ๋ค.visual_review_required=true๋ package/schema/text ๊ฒ์ฌ๋ ํต๊ณผํ์ง๋ง ์ด๋ฆฐ ๋ฌธ์์ ํ์ด์ง ๋๋ยทํ ๋ง์ถคยท์๋ฆผ์ ์์ง ํ์ธ ์ ๋๋ค๋ ๋ป์ด๋ค. ์ต์ข ์ ์ถ์ ๋งํ๋ ค๋ฉด HWPX viewer์์ ์ด์ด๋ณธ ๋คscripts/visual_review.py๋ก--screenshot์ด ํฌํจ๋observed_passevidence๋ฅผ ๋จ๊ธด๋ค. viewer๊ฐ ์๋ CI/์ปจํ ์ด๋์์๋--viewer none --status blockedfallback์ ๋จ๊ธฐ๊ณ handoffํ๋ค.- ์์ /๋ฌธ์์๋ ์ด๋ฆยท์ ํ๋ฒํธยท์ด๋ฉ์ผยท์ฃผ์ ๋ฑ PII๋ฅผ redaction ์์ด ๋ฃ์ง ์๋๋ค.
- SKILL.md โ ์์ด์ ํธ์ฉ ์์ฌ๊ฒฐ์ ํธ๋ฆฌ์ ์ค์ ์ํฌํ๋ก
- references/ โ API ๋ ํผ๋ฐ์ค(api.md)ยทํ ๋ง๋ณ ์ํฌํ๋กยท๊ณต๋ฌธ์ ๊ท์นยทevidence ๊ณ์ฝ
- examples/ โ ์์ฑยท์ถ์ถยท์นํยทform-fitยทdocument-planยทmail-merge ์์
- CHANGELOG.md โ ๋ฒ์ ๋ณ๊ฒฝ ์ด๋ ฅ
python3 -m pip install -U python-hwpx lxml๋ฅผ ๋ค์ ์คํํ๊ณ python3 scripts/quickcheck.py๊ฐ ํต๊ณผํ๋์ง, ๊ฒฐ๊ณผ ํ์ผ์ด examples/out/ ์๋ ์๊ธฐ๋์ง, ์
๋ ฅ์ด ์ค์ .hwpx ZIP ํจํค์ง์ธ์ง ํ์ธํ๋ค. ์ฌํ๋๋ฉด quickcheck.py ์ถ๋ ฅ๊ณผ ํจ๊ป ์ด์๋ฅผ ๋จ๊ธด๋ค.
๊ณ ๊ทํ (airmang) โ GitHub @airmang ยท Base Library python-hwpx
Apache License 2.0. See LICENSE and NOTICE.