Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add kangdacool/hwpx-editing-skill --skill hwpx-editinggit clone --depth 1 https://github.com/kangdacool/hwpx-editing-skillWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/kangdacool/hwpx-editing-skill/hwpx-editing)<a href="https://agentmods.dev/skills/kangdacool/hwpx-editing-skill/hwpx-editing"><img src="https://agentmods.dev/badge/skills/kangdacool/hwpx-editing-skill/hwpx-editing/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/kangdacool/hwpx-editing-skill/hwpx-editing"><img src="https://agentmods.dev/badge/skills/kangdacool/hwpx-editing-skill/hwpx-editing.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00262 | $0.03571 |
| Opus 5.5 | $0.00105 | $0.01428 |
| Sonnet 5.5 | $0.00052 | $0.00714 |
| Haiku 4.5 | $0.00026 | $0.00357 |
Grade A, and why
hwpx-editing scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 14d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 179 lines — stays where its author put it; the contents beside it link to each section on GitHub.
HWPX Editing
HWPX is a zip of XML (HWPML). The traps that corrupt a file aren't obvious
from the outside, so read the relevant section of references/hwpx-guide.md
before editing, and run the scripts in scripts/ to repack and verify —
don't hand-roll the zip or eyeball correctness.
HWPX only. This handles
.hwpx(zip + XML) exclusively. A legacy.hwp(OLE binary, signatureD0CF11E0) must be converted first. The scripts detect.hwpand say so. For one file, 한글의 다른 이름으로 저장 → HWPX; for a folder,scripts/hwp_to_hwpx.py FOLDERconverts in batch (needs Windows + 한글 +pywin32), including password-protected files — see "Legacy.hwp" below. Read-only text/image extraction from.hwpdoesn't need conversion at all: use thehwp5-readingskill.
The one rule that matters most
Never re-zip an HWPX with a normal zip writer. 한글 rejects a file whose
unchanged entries were re-deflated. Use the raw-preserving repacker
(scripts/hwpxlib.py:repack_preserve): it byte-copies every entry you didn't
touch and re-deflates only what you changed, so a no-op repack is byte-identical
to the source — meaning "if the original opens in 한글, your edit opens too."
Workflow
- Inspect first.
python scripts/inspect_hwpx.py FILE.hwpx --breaks— see per-section counts (paragraphs, tables,pic,equation, fields) and, crucially, which paragraphs carry a hiddenpageBreak/columnBreak. If a heading is split from its content or a page/column is blank, hunt those breaks first (§6-A) — don't reach forkeepWithNext. Body-paragraph breaks are usually leftover cruft. ⛔ Breaks live in two places: the paragraph'spageBreakattribute and its paraPr's<hh:breakSetting pageBreakBefore="1">inheader.xml—--breakslists both. A paraPr that a docx→hwpx conversion created can carrypageBreakBefore; if your build clones that paraPr for a new style, every paragraph using the clone starts a new page. When cloning a paraPr, setpageBreakBefore="0"and put page breaks on paragraphs only. (2026-10-12 T4: an upstream docx builder began writingpageBreakBefore; the cloned caption style made each table its own page and pushed every figure caption off its figure, 20→23 pages. Four blind fixes — line spacing, keepWithNext, per-figure breaks, a docx-side skip — were tried beforeheader.xmlwas read. Layout regressed after an upstream change → diff that change and read the actual paraPr/breakSetting first; don't trial-fix.) - Read the matching guide section in
references/hwpx-guide.md(map below). The XML ids/refs (charPrIDRef,paraPrIDRef,borderFillIDRef, …) differ per file — always read them from the actual file, never assume. - Edit the XML with lxml, following the invariants:
- After editing or creating any paragraph, remove its
<hp:linesegarray>(cached line layout goes stale → broken spacing). After structural edits, strip linesegarray from the whole section so 한글 fully re-lays-out. Usehwpxlib.strip_linesegarray. - When you clone a node (endnote, table, equation, image), it inherits the
original's
id/instId→ duplicates → instability. Reassign fresh ids withhwpxlib.make_uid, including nestedsubList>p/tbl/tc/pids. - Reuse existing
charPr/paraPrdefinitions instead of adding new ones; if you must add, update theitemCntor 한글 rejects the file.
- After editing or creating any paragraph, remove its
- Repack with
hwpxlib.repack_preserve(src, changed, out, added):changed= edited entries (keep the XML declaration on top),added= new entries likeBinData/imageN.pngor a newsectionN.xml(also register these incontent.hpf). - Verify every build:
python scripts/verify.py EDITED.hwpx --orig ORIG.hwpx. All hard checks must pass (byte-identity self-check, well-formed XML incl.content.hpf, zero duplicate ids, IDRef/itemCnt integrity, table cell widths, no 각주/미주 nested inside another 주석, zip integrity + mimetype first/STORED). It also prints a minimal-change diff so you can confirm only intended changes are present. - Render, then look —
python scripts/audit_layout.py FILE.hwpx. Steps 1–5 all pass on defects that only a render shows: a number broken across two lines because its column got one character wider, a table footnote stranded alone on the next page, a table-of-contents number that no longer matches. Any change to a table's values, widths, or footnote length needs this step — the earlier checks cannot see layout. - Round-trip in 한글. LibreOffice can't render HWPX, so render-dependent judgments (which heading orphans, whether spacing looks right) need the user to open the file in 한글 and, for equations/TOC, run 도구→차례 새로 고침 or double-click→close to finalize. Say so.
What ships with it
17 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
- references/hwpx-guide.md 46 KB
- scripts/audit_layout.py 11 KB runs code
- scripts/audit_typography.py 7.2 KB runs code
- scripts/col_widths.py 6.8 KB runs code
- scripts/crossref_check.py 14 KB runs code
- scripts/data_to_hwpx_table.py 7.6 KB runs code
- scripts/hwp_to_hwpx.py 17 KB runs code
- scripts/hwpx_guard.py 5.1 KB runs code
- scripts/hwpx_to_docx.py 4.9 KB runs code
- scripts/hwpx_to_markdown.py 4.6 KB runs code
- scripts/hwpxlib.py 58 KB runs code
- scripts/inspect_hwpx.py 4.3 KB runs code
- scripts/remerge_check.py 6.7 KB runs code
- scripts/selftest.py 31 KB runs code
- scripts/tables_to_xlsx.py 4.5 KB runs code
- scripts/tick_boxes.py 5.1 KB runs code
- scripts/verify.py 12 KB runs code
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 14d ago Changed · +11 lines fbb6151b2132
- 1mo ago First seen · 168 lines · 262 tokens per session scan A 2cc6221c0465
hwpx-editing is a skill published in the GitHub repository kangdacool/hwpx-editing-skill (8 stars, last pushed 15d ago), licensed MIT. It adds 262 tokens to every session and 3,571 once invoked, about $0.0010 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
ai-hwp-reader
A read-only tool for opening Korean HWP and HWPX word-processing files, or ZIP archives containing them, without Hancom Office. It converts the contents to Markdown while preserving document structure.
ai-hwp-reader
An AI skill that tells a coding agent how to read Korean HWP and HWPX word-processing files, including files inside ZIP archives. It extracts the content and then uses it to complete the user's requested task.
oma-hwp
Convert Hangul HWP, HWPX, or HWPML documents to Markdown with kordoc. Use for text, table, and image extraction from these formats.
oma-pdf
Extract PDF text, headings, tables, and images into Markdown using opendataloader-pdf. Use for PDF parsing, not PDF layout creation.
pkf-writing
Author, update, convert, validate, persist, and render PKF (.pkf) content through message-inline, Library Asset, or Memory Page carriers. Use for structured reports, knowledge pages, delivery cards, or any .pkf body. NOT for recall, memory-graph placement, or curation decisions — those belong to the memory skill.
dex-obsidian-setup
Turn on Obsidian mode and migrate the vault to wiki links. Use when the user says 'I use Obsidian', 'enable wiki links', 'make this work in Obsidian'. Not for connecting an external tool/API; use create-mcp/integrate-mcp.