한국 공공기관 공문서 파일들을 공문 번호별로 자동 분류하여 폴더로 정리합니다. 같은 공문 번호를 가진 파일들(본문 + 첨부파일)을 하나의 폴더에 모아주며, 폴더명은 본문 파일명을 사용합니다. Use when: (1) 공문서 정리, (2) 공문 분류, (3) 공문 파일 정리, (4) 공문 정리 되돌리기가 필요할 때. 파일명 패턴은 references/pattern_examples.md 참조.
Installs into .claude/skills of the current project.
Are you the author of Document Organizer?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/1000ssam-document-organizer)
---
name: document-organizer
description: "한국 공공기관 공문서 파일들을 공문 번호별로 자동 분류하여 폴더로 정리합니다. 같은 공문 번호를 가진 파일들(본문 + 첨부파일)을 하나의 폴더에 모아주며, 폴더명은 본문 파일명을 사용합니다. Use when: (1) 공문서 정리, (2) 공문 분류, (3) 공문 파일 정리, (4) 공문 정리 되돌리기가 필요할 때. 파일명 패턴은 references/pattern_examples.md 참조."
allowed-tools: Bash(node *), Read, Write, Glob, Grep
---
# Document Organizer
## Overview
Windows 환경에서 한국 공공기관 공문서 파일을 공문 번호별로 자동 분류합니다.
**런타임:** Node.js (필수)
## Workflow
Claude는 아래 순서를 **반드시** 따른다.
### Step 1. Config 확인
이 스킬 디렉토리 내 `config.json`을 읽는다.
**config.json이 없는 경우 (최초 실행):**
사용자에게 공문서가 저장된 폴더 경로를 질문한다:
```
"공문서 파일이 들어있는 폴더의 경로를 알려주세요."
```
사용자가 경로를 알려주면, **그 경로를 기본값으로** config.json을 자동 생성한다:
```json
{
"version": "1.0",
"default_profile": "work",
"profiles": {
"work": {
"name": "기본 공문 폴더",
"path": "{사용자가 알려준 경로}",
"last_used": null
}
}
}
```
**중요:**
- 경로 작성 시 반드시 **Windows 절대경로** + **역슬래시 이스케이프(`\\`)**를 사용한다.
- 사용자가 `바탕화면의 공문 모음 폴더` 등 자연어로 말하거나, 현재 세션 작업 디렉토리에서 실행하는 경우에도 절대경로로 변환하여 저장한다.
- **예시 경로를 제시하지 않는다.** 사용자가 지정한 경로가 곧 기본값이 된다.
**config.json이 있는 경우:**
`profiles.<default_profile>.path`를 추출하고 바로 Step 2로 진행한다.
### Step 2. 스크립트 실행
```bash
node "<이 스킬의 디렉토리>/scripts/organize.mjs"
```
- 스킬 디렉토리는 `~/.claude/skills/document-organizer` (설치 위치에 따라 다를 수 있음)
- 프로필 지정 시: `node organize.mjs <config_path> <profile_name>`
- 스크립트가 config.json을 직접 읽고, 대상 폴더를 스캔하고, 정리까지 한번에 수행
- 정리할 때마다 어떤 파일을 어디로 옮겼는지 `config.json`과 같은 폴더의 `.last-organize.json`에 기록한다 (되돌리기에 사용)
### Step 3. 결과 보고
스크립트 출력을 사용자에게 전달 (생성 폴더 수, 이동 파일 수)
- 출력에 `옮기지 않음 (정리 폴더에 같은 이름의 파일이 이미 있음)` 항목이 있으면, 공문번호별 파일 목록을 그대로 보여 주고 "정리 폴더에 같은 이름의 파일이 이미 있어 원래 자리에 남겨 두었습니다. 두 파일을 비교해 필요 없는 쪽을 지워 주세요."라고 안내한다. 어느 파일을 남길지 AI가 임의로 정하거나 덮어쓰지 않는다.
### 공문 정리 되돌리기
사용자가 `"공문 정리 되돌리기"`라고 하면 아래를 실행한다.
```bash
node "<이 스킬의 디렉토리>/scripts/organize.mjs" --undo
```
- 다른 위치의 config를 쓰고 있다면: `node organize.mjs --undo <config_path>`
- 마지막으로 정리한 1회분만 되돌린다. 옮긴 파일을 원래 자리로 돌려놓고, 그때 새로 만든 폴더는 비어 있을 때만 지운다.
- 원래 자리에 같은 이름의 파일이 새로 생겼다면 그 파일은 건드리지 않고 `건너뜀`으로 알린다.
- 한 번 되돌리면 기록이 지워지므로, 같은 정리를 두 번 되돌릴 수는 없다.
- 결과(복원한 파일 수, 건너뛴 파일)를 사용자에게 전달한다.
**최초 실행은 경로 질문 1턴 + config 생성 & 스크립트 실행 1턴 = 최대 2턴.**
**이후 실행은 config 읽기 + 스크립트 실행 = 1턴으로 완료해야 한다.**
## 파일명 패턴
```
(기관명-공문번호 (본문) 발신기관명) [제출] 제목.확장자
(기관명-공문번호 (첨부) 발신기관명) [붙임N] 제목.확장자
(기관명-공문번호 (본문)) [제출] 제목.확장자 ← 발신기관 없는 경우도 지원
```
정규표현식:
```
/\(([^-]+)-(\d+)\s+\((본문|첨부)\)[^)]*\)/
```
`[^)]*`로 괄호 닫기 전까지의 모든 내용(발신기관명 등)을 허용합니다.
상세 예시 → `references/pattern_examples.md`
## Configuration
**위치:** 이 스킬 디렉토리 내 `config.json`
**최초 실행 시:** AI가 사용자에게 경로를 질문하고, 사용자가 지정한 경로를 기본값으로 하여 config.json을 자동 생성한다. 사용자가 직접 편집할 필요 없음.
**구조 예시:**
```json
{
"version": "1.0",
"default_profile": "work",
"profiles": {
"work": {
"name": "기본 공문 폴더",
"path": "(사용자가 최초 실행 시 지정한 경로)",
"last_used": null
}
}
}
```
**경로 규칙:**
- 반드시 Windows 절대경로 사용 (`C:\\...`)
- JSON 내 역슬래시는 이스케이프 (`\\`)
- `/c/Users/...` 같은 Git Bash 스타일 경로 사용 금지
- **기본값 없음:** 사용자가 최초 실행 시 지정한 경로가 곧 기본값
**정리한 폴더를 다른 곳에 두기 (`destination`, 선택):**
기본적으로 공문 폴더는 `path` 안에 만들어진다. 사용자가 "정리한 공문은 다른 폴더에 모아 줘"라고 하면, 그 폴더 경로를 물어 프로필에 `destination`을 추가한다. 이후 `path`에서 파일을 찾아 `destination` 안에 공문별 폴더를 만든다. `destination` 폴더가 없으면 자동으로 만든다.
```json
"work": {
"name": "기본 공문 폴더",
"path": "(공문 파일을 내려받는 폴더)",
"destination": "(정리한 공문 폴더를 모아 둘 폴더)",
"last_used": null
}
```
`destination`을 지우면 다시 `path` 안에 정리한다. 경로 규칙은 `path`와 같다.
상세 구조 → `references/config_structure.md`
## Commands
| 사용자 입력 | 동작 |
|---|---|
| `"공문서 정리"` / `"공문 정리"` / `"공문 분류"` | 기본 프로필로 정리 |
| `"personal 프로필로 공문 정리"` | 특정 프로필 사용 |
| `"공문 경로 변경"` / `"다른 폴더로 공문 정리"` | 새 경로를 질문하고 config.json 업데이트 |
| `"공문 정리 설정 초기화"` | config.json 삭제 (다음 실행 시 경로 재질문) |
| `"공문 정리 되돌리기"` / `"공문 undo"` | 마지막 정리 1회분 되돌리기 (`organize.mjs --undo`) |
| `"정리한 공문은 다른 폴더에 모아 줘"` | 경로를 묻고 프로필에 `destination` 추가 |
## Output Example
```
공문 모음\
├── (OO고등학교-22206 (본문) 경기도구리남양주교육지원청 초등교육지원과) [제출] AI 중점학교 운영 신청\
│ ├── (OO고등학교-22206 (본문) 경기도구리남양주교육지원청 초등교육지원과) [제출] AI 중점학교.pdf
│ ├── (OO고등학교-22206 (첨부) 경기도구리남양주교육지원청 초등교육지원과) [붙임1] 신청서.hwpx
│ └── (OO고등학교-22206 (첨부) 경기도구리남양주교육지원청 초등교육지원과) [붙임2] 계획서.hwpx
└── (OO고등학교-568 (본문) 경기도구리남양주교육지원청 초등교육지원과) [제출] 디지털튜터\
├── (OO고등학교-568 (본문) 경기도구리남양주교육지원청 초등교육지원과) [제출] 디지털튜터.pdf
└── (OO고등학교-568 (첨부) 경기도구리남양주교육지원청 초등교육지원과) [붙임1] 명단.xlsx
```
## Scripts
- `scripts/organize.mjs` — 메인 정리 스크립트 (Node.js)
## Notes
- 본문 파일이 없는 공문은 `공문_기관명-번호` 폴더명 사용
- 패턴 미매칭 파일은 이동하지 않고 원본 위치 유지
- 이미 폴더가 존재하면 기존 폴더에 파일 추가
- 정리 폴더에 같은 이름의 파일이 이미 있으면 덮어쓰지 않고 원래 자리에 남겨 둔 뒤 목록으로 알림
- 되돌리기 기록 `.last-organize.json`은 개인 경로가 들어 있으므로 공유하거나 커밋하지 않는다