| name | hwpx |
| description | 한글(HWPX) 보고서 생성/편집/읽기 스킬. .hwpx 파일, 한글 문서, Hancom, OWPML 관련 요청 시 사용. |
HWPX 보고서 생성 스킬 — JSON-first (신뢰성 우선)
한글(Hancom) HWPX 보고서를 생성한다. HWPX는 ZIP+XML(OWPML) 컨테이너라, 본문 XML을 손으로
작성하면 거의 항상 텍스트가 <hp:t> 밖에 들어가 "파일은 열려도 본문이 안 보이는" 결과가 된다.
그래서 이 스킬은 본문 XML을 직접 쓰지 않는다. 너는 보고서의 내용만 JSON으로 만들고,
스킬의 결정론적 빌드 스크립트가 템플릿·스타일·<hp:t> 배치·표를 정확히 조립한다.
(이 스킬의 디렉토리 절대경로는 스킬 로드 시 제공된다. 아래 <skill_dir>를 그 경로로 바꿔 쓴다.
강한 모델용 수동 XML 편집·읽기 상세는 SKILL.original.md 참조.)
0. 환경 점검 (세션당 1회)
python3 -c "import lxml"
성공하면 진행. 실패하면 설치 후 재확인:
python3 -m pip install --user --quiet -r "<skill_dir>/requirements.txt"
1. 보고서 "내용"을 JSON으로 작성해 파일로 저장
다음 스키마 그대로 작성한다 (예: /tmp/report_content.json):
{
"title": "보고서 제목",
"dept": "작성 부서명 (선택)",
"sections": [
{"heading": "1. 추진 배경 및 목적",
"bullets": [
"□ 핵심을 압축한 한 줄 범주 문장 (30~35자)",
" ❍ 그 범주의 구체적 설명을 활동·대상·방법까지 담아 한 문장으로 (65~70자)"
]},
{"heading": "3. 추진 일정", "bullets": [],
"table": {"template": "schedule", "headers": ["일자","추진내용","담당"],
"rows": [["’26.03.05.","[일반 1회] AI 개요","외부연사"]]}}
]
}
문체 규칙(개조식 — 반드시 지킬 것):
- 각 섹션 bullets는
□ 상위 줄과 그 아래 ❍ 하위 줄의 위계로 구성한다.
□ 상위 줄: '□ ' 뒤 기준 30~35자. 단순 라벨 금지(핵심을 압축한 한 줄 범주 문장). 세부는 ❍로 내린다.
❍ 하위 줄: ' ❍ '(앞 공백 2칸)로 시작, 6570자의 구체적 설명 문장. 보통 □ 하나당 ❍ 12개.
- 종결은 명사형으로(~구축, ~강화, ~추진, ~확보, ~운영, ~고도화 등). '~합니다/~습니다/~한다/~된다/~있다'는 금지.
- 표의 일자 열은 '’26.03.05.' 형식(연.월.일)으로 쓴다.
- 요청에 명시된 수치·구성(회차 수, 트랙, 도구명 등)을 빠짐없이 정확히 반영한다.
2. 한 번의 명령으로 빌드 (XML은 손대지 말 것)
python3 "<skill_dir>/scripts/build_from_json.py" /tmp/report_content.json <output>.hwpx
build_from_json.py가 템플릿 제목 도형·스타일·표·<hp:t> 배치를 결정론적으로 조립한다.
- 성공 출력 예:
OK: <경로> · 섹션 N개 · 표 M개. 그 .hwpx 경로를 사용자에게 알린다.
3. (선택) 문체 검증
python3 "<skill_dir>/scripts/style_check.py" <output>.hwpx
INVALID가 나오면 위반 줄(X ...)을 보고 JSON의 해당 bullet을 고쳐(□ 3035자로 줄이고 넘치는
세부는 ❍ 6570자로 내림, 명사형 종결) 1번부터 다시 빌드한다.
절대 금지 (약한 모델이 흔히 어기는 것)
- 본문
section0.xml이나 zip 내부를 직접 작성·편집 금지. cat <<EOF > section0.xml 같은 방식
절대 금지 — <hp:t> 누락/오배치로 본문이 사라진다. 오직 build_from_json.py로만 만든다.
- 텍스트를
<hp:run>에 직접 넣지 마라(반드시 <hp:t> 안). 이 배치는 스크립트가 알아서 한다.
- 수치·날짜·고유명사·인용은 요청 그대로 보존한다.