← ClaudeAtlas

form-tailorlisted

기관 양식 샘플이나 이전 자료를 넣으면 그 틀·문체·서식을 학습해 새 내용을 같은 양식으로 만들어 주는 문서 생성 스킬. 고정 템플릿을 탑재하지 않고, 사용자가 런타임에 제공한 샘플(.hwp/.hwpx/.docx)에서 구조·글머리 체계(□ㅇ-*①Ⅰ)·개조식 문체·표 관행·제목/서명/날짜 형식을 추출(프로파일)한 뒤, 새 원고 내용을 그 프로파일에 맞춰 재구성하고 동일 형식으로 출력한다. 생성 후에는 샘플 대비 서식 충실도(섹션 순서·기호체계·문체 준수)를 점검해 보고한다. 다음 상황에서 반드시 사용한다: '기관 양식대로 만들어줘', '이 샘플처럼 작성', '양식 맞춰서', '이전 보고서 형식으로', '한글 보고서 양식', '보고서 서식 ��춤', '기관 서식 적용', '샘플 문서 틀 재사용' 등의 요청. 백지에서 자유 형식 문서를 쓰는 것이 아니라, 주어진 양식에 정확히 맞추는 작업에 적용한다. 내용 자체의 조사·집필은 별도 스킬/작업으로 하고, 이 스킬은 '양식 이식'에 집중한다.
parkjui92/form-tailor · ★ 0 · AI & Automation · score 70
Install: claude install-skill parkjui92/form-tailor
# form-tailor — 기관 양식 맞춤 제작 **핵심 아이디어:** 이 스킬은 특정 기관의 템플릿을 내장하지 않는다. 대신 **사용자가 제공한 샘플에서 "양식"을 데이터로 추출**하고, 새 내용을 그 틀에 부어 같은 형식으로 출력한다. 즉 양식은 코드가 아니라 **런타임 입력**이다 — 그래서 어느 기관 양식에도 적용되고, 저장소에는 어떤 기관의 자산도 담기지 않는다. ``` [샘플 양식] ──파싱──▶ [양식 프로파일] ──┐ ├──▶ [양식에 맞춘 새 문서] ──▶ [충실도 점검] [새 내용/원고] ────정리──────────────────┘ ``` --- ## 입력 두 가지 1. **양식 샘플(필수)**: 따라 할 틀. 기관 배포 서식, 지난번 보고서/계획서, 빈 양식 폼 등. `.hwp` / `.hwpx` / `.docx` / (`.pdf`는 구조 참고용). 2. **채울 내용(필수)**: 새로 담을 원고·메모·요점. 이미 다른 형식으로 쓴 초안이어도 되고, 항목만 나열한 메모여도 된다. 둘 중 ��나라도 없으면 사용자에게 요청한다. 특히 샘플 없이 "기관 양식"만 언급되면, "따라 할 샘플 파일을 주시면 그 틀대로 맞춰 드립니다"라고 안내한다(임의로 지어낸 양식을 쓰지 않는다). --- ## Phase 1: 양식 프로파일 추출 (learn-from-sample) 샘플을 파싱해 **양식 프로파일**을 만든다. 도구 우선순위: | 형식 | 파싱 도구 (우선순위) | |------|---------------------| | `.hwp` / `.hwpx` | **kordoc MCP** — `parse_document`(구조), `parse_form`(폼필드), `extract_profile`(스타일), `parse_table`(표), `detect_format` | | `.docx` | **python-docx** (아래 레시피) → 또는 docx 스킬 | | `.pdf` | pdf 스킬로 텍스트·레이아웃 참고(정밀 서식은 제한적) | > **도구 부재 시**: kordoc·pandoc·soffice가 모두 없고 입력이 `.docx`면 **python-docx가 유일 경로**다. 이때 아래 레시피를 반드시 따른다. 입력이 `.hwp/.hwpx`인데 kordoc이 없으면, 사용자에게 kordoc 설치를 안내하거나 `.docx`로 저장해 달라고 요청한다(LibreOffice 변환은 표가 평탄화될 수 있음을 알림). ### .docx 파싱 레시피 (python-docx) python-docx는 고수준 API가 스타일 상속을 해석하지 않으므로, 아래 폴백을 지켜야 프로파일이 반쪽으로 비지 않는다: - **글머리 레벨 감지**: 각 문단 텍스트의 **선행 글머리 글자**(□ ㅇ - * ① Ⅰ)와, 그 앞의 **선행 공백 수**(`text[:len(text)-len(text.lstrip())]`의 길이) 또는 `paragraph_format.l