---
name: kist-ppt
description: "KIST(한국과학기술연구원) 공식 발표자료(PPTX)를 KIST_template.pptx의 디자인 톤앤매너에 맞춰 자동 생성하는 스킬. 4-에이전트 팀(template-analyst → outline-architect → slide-builder → qa-reviewer)이 협업하여 학회 기조강연·세미나·R&D 보고용 슬라이드 덱을 산출. 사용자가 'KIST 발표자료', 'KIST PPT', 'KIST 슬라이드', 'KIST 기조강연', 'KIST 세미나', 'kist-ppt', 'KIST 템플릿으로 발표자료', 'KIST_template.pptx 기반 PPT', '한국과학기술연구원 발표자료' 등을 요청하면 이 스킬을 반드시 사용. KIST 톤앤매너(맑은 고딕 강제 통일, 다크 네이비 #1F497D, 좌측 컬러바, 우상단 KIST 로고, 학회 푸터) + 모던 디자인 시스템(흰 카드 + 옅은 외곽선 #E5E7EB + 부드러운 그림자 + vertical center + 정사각형 bullet 마커)을 보장한다."
---

# kist-ppt — KIST 발표자료 생성 스킬

KIST(한국과학기술연구원) 공식 발표자료를 `KIST_template.pptx`의 디자인 DNA에 맞춰 자동 생성합니다. 4-에이전트 팀이 협업하는 **에이전트 팀 모드**로 동작합니다.

## 핵심 디자인 원칙 (v2 — Modern)

1. **원본 슬라이드 통째 복제 + 텍스트 치환** — 신규 합성이 아니라 `KIST_template.pptx`의 원본 슬라이드를 clone하여 KIST 로고·좌측 컬러바·푸터 placeholder·KIST 캠퍼스 사진 등 모든 시각 자산을 자동 보존
2. **폰트 강제 통일** — 모든 run의 latin/eastAsia/cs를 모두 `맑은 고딕`으로 설정하여 영문 'AI', 'I' 등이 Serif(Cambria/Times)로 fallback되는 사고 방지
3. **모던 카드 스타일** — 흰 배경 + `#E5E7EB` 옅은 외곽선 0.5pt + 부드러운 그림자(alpha 12%) + 둥근 모서리(corner adj 0.10)
4. **Vertical center** — 카드 내부 텍스트는 `MSO_ANCHOR.MIDDLE`로 수직 가운데 정렬
5. **정사각형 bullet 마커** — `▸` 텍스트 마커 대신 작은 정사각형 `■` + 적절한 간격, 시각 위계 강화
6. **두자리 섹션 번호** — Roman 'I'/'II' 대신 '01'/'02' 두자리 숫자(맑은 고딕, 옅은 회색 #E5E7EB, 130pt) — Serif 'I' 깨짐 회피
7. **archive cleanup** — 빌드 후 zip 레벨에서 orphan slide part + Content_Types Override 제거하여 PowerPoint 손상 경고 방지

## 디자인 토큰 (모던)

| 키 | 값 | 용도 |
|----|----|------|
| `primary` | `#1F497D` | KIST 다크 네이비 — 제목·강조·디바이더 |
| `primary_light` | `#4F81BD` | 보조 블루 |
| `text_strong` | `#111827` | 본문 강조 (거의 검정) |
| `text_body` | `#374151` | 본문 기본 |
| `text_muted` | `#6B7280` | 보조 텍스트 |
| `text_subtle` | `#9CA3AF` | 캡션·placeholder |
| `border_light` | `#E5E7EB` | 카드 외곽선·섹션 번호 색 |
| `bg_subtle` | `#F9FAFB` | 옅은 회색 placeholder 배경 |
| `white` | `#FFFFFF` | 카드 fill |

## 폰트 사양 (강제)

모든 텍스트 run은 `set_font(run, ...)` 헬퍼를 통해 latin/eastAsia/cs **세 가지 attribute 모두에 `맑은 고딕` 강제 설정**. 영문 문자가 Serif fallback되는 사고 방지.

| 영역 | 크기 | 굵기 | 색상 |
|------|------|------|------|
| 슬라이드 제목 (헤더 바) | 32pt | Bold | `primary` |
| 섹션 번호 (두자리) | 130pt | Bold | `border_light` |
| 섹션 제목 | 36pt | Bold | `primary` |
| 본문 헤드라인 | 22pt | Bold | `primary` |
| 카드 헤드라인 | 20pt | Bold | `primary` |
| 본문 bullet | 15pt | Regular | `text_body` |
| 카드 본문 | 13.5pt | Regular | `text_body` |
| 푸터 | 10pt | Regular | `text_muted` |
| 페이지 번호 | 10pt | Regular | `text_muted` |
| 마무리 헤드라인 | 54pt | Bold | `primary` |
| 마무리 연락처 | 15pt | Regular | `text_muted` |

## 실행 모드: 에이전트 팀

기본값은 에이전트 팀입니다. 분석→설계→빌드→QA가 서로 SendMessage로 도전·검증하며 결과 품질을 끌어올립니다.

## 에이전트 구성

| 팀원 | 에이전트 타입 | 역할 | 출력 |
|------|-------------|------|------|
| `kist-template-analyst` | 커스텀 | 템플릿 DNA(색상·폰트·레이아웃·로고) 추출 | `_workspace/01_template_dna.json` + `_workspace/01_assets/` |
| `kist-outline-architect` | 커스텀 | 슬라이드별 아웃라인(category·title·bullets·notes) 설계 | `_workspace/02_outline.json` |
| `kist-slide-builder` | 커스텀 | python-pptx로 PPTX 실제 생성 | `_workspace/03_draft.pptx` + `_workspace/03_build_log.md` |
| `kist-qa-reviewer` | 커스텀 | 렌더링·DNA준수·콘텐츠정확성 검수 | `_workspace/04_qa_report.json` |
| (리더 = 오케스트레이터) | — | 팀 구성·작업 분배·최종 산출물 복사 | `kist_presentation_{date}.pptx` |

## 사전 요구사항

- `KIST_template.pptx` 파일이 작업 디렉토리 또는 `assets/`에 존재
- 시스템 의존성:
  - Python: `python-pptx`, `markitdown[pptx]`, `Pillow`, `defusedxml`
  - 시스템: `libreoffice` (soffice), `poppler-utils` (pdftoppm)
- 한글 폰트: 맑은 고딕(Malgun Gothic) 또는 대체 폰트(NanumGothic 등) 설치 권장

## 워크플로우

### Phase 1: 준비

1. 사용자 입력에서 다음 정보 파싱(없으면 합리적 가정으로 채움):
   - 발표 제목
   - 발표자 + 소속
   - 학회/행사명 + 일자
   - 청중·시간(미명시 시 30분 가정)
   - 발표 핵심 내용(자유 텍스트)
2. KIST_template.pptx 경로 확인. 없으면 사용자에게 경로 요청
3. 작업 디렉토리에 `_workspace/` 생성
4. 입력 정보를 `_workspace/00_input.md`에 저장

### Phase 2: 팀 구성

```
TeamCreate(
  team_name: "kist-ppt-team",
  members: [
    { name: "analyst",   agent_type: "kist-template-analyst",   prompt: "DNA 추출. _workspace/01_template_dna.json + 01_assets/ 산출" },
    { name: "architect", agent_type: "kist-outline-architect",  prompt: "00_input.md + 01_template_dna.json 읽어 02_outline.json 산출" },
    { name: "builder",   agent_type: "kist-slide-builder",      prompt: "01/02 산출물로 03_draft.pptx 생성. scripts/build_kist_pptx.py 활용" },
    { name: "qa",        agent_type: "kist-qa-reviewer",        prompt: "03_draft.pptx 검수 → 04_qa_report.json. FIX 발견 시 builder에 SendMessage" }
  ]
)
```

작업 등록:

```
TaskCreate(tasks: [
  { title: "템플릿 DNA 추출",          assignee: "analyst" },
  { title: "발표 아웃라인 설계",       assignee: "architect", depends_on: ["템플릿 DNA 추출"] },
  { title: "PPTX 빌드",                 assignee: "builder",   depends_on: ["발표 아웃라인 설계"] },
  { title: "QA 검수 (1차)",             assignee: "qa",        depends_on: ["PPTX 빌드"] },
  { title: "QA 피드백 반영 (필요시)",   assignee: "builder",   depends_on: ["QA 검수 (1차)"] },
  { title: "QA 검수 (최종)",            assignee: "qa",        depends_on: ["QA 피드백 반영 (필요시)"] }
])
```

### Phase 3: 4-단계 파이프라인 (자체 조율)

팀원들이 의존성에 따라 순차 진행하되, SendMessage로 실시간 협업합니다.

**팀 통신 규칙:**

| 발신 | 수신 | 메시지 내용 |
|------|------|-----------|
| analyst | architect | "DNA JSON 준비 완료. 사용 가능 카테고리: [...]" |
| analyst | builder | "KIST 로고 자산 경로: `_workspace/01_assets/kist_logo.png`" |
| architect | builder | "Outline JSON 준비 완료. 총 N장, 섹션 구조: [...]" |
| builder | qa | "Draft PPTX 빌드 완료. 경로: `_workspace/03_draft.pptx`" |
| qa | builder | "FIX/REDO 지시: `_workspace/04_qa_report.json` 참조" |
| builder | architect | (드물게) "슬라이드 4번 본문 과다, 분할 제안" |

**산출물 저장:**

```
_workspace/
├── 00_input.md
├── 01_template_dna.md        ← analyst
├── 01_template_dna.json      ← analyst (머신 리더블)
├── 01_assets/
│   └── kist_logo.png         ← analyst
├── 02_outline.md             ← architect
├── 02_outline.json           ← architect (머신 리더블)
├── 03_draft.pptx             ← builder
├── 03_build_log.md           ← builder
├── 04_qa_thumbs/             ← qa (렌더된 jpg)
├── 04_qa_report.md           ← qa
└── 04_qa_report.json         ← qa (수정 지시)
```

**QA 루프 정책:**
- 최대 3회. FIX 지시 → builder 재빌드 → qa 재검수
- 3회 후에도 결함 잔존 시 잔여 이슈를 보고서에 명시하고 사용자에게 보고

### Phase 4: 최종 산출물 복사

1. QA가 PASS 판정한 PPTX를 `_workspace/03_draft.pptx`에서 사용자 지정 경로로 복사
2. 기본 파일명: `kist_presentation_{YYYYMMDD}.pptx`
3. 빌드 로그·QA 보고서를 `_workspace/`에 보존 (감사 추적용)

### Phase 5: 정리 및 보고

1. 팀 정리 (`TeamDelete`)
2. 사용자에게 보고:
   - 최종 PPTX 경로
   - 슬라이드 수, 섹션 구조
   - 잔여 이슈(있다면)
   - 후속 권장 작업(예: PowerPoint에서 폰트 임베드, 이미지 수동 교체)

## 데이터 흐름

```
[입력]
   ↓
[리더] → TeamCreate(4명) + TaskCreate(6개 작업)
            ↓
   ┌────────┴───────────────────────────────┐
   ↓                                        ↓
[analyst]                              (의존성으로 대기)
   │ DNA 추출 → 01_*.json/md/assets/
   │ SendMessage → architect, builder, qa
   ↓
[architect]
   │ DNA + 입력 → 02_outline.json/md
   │ SendMessage → builder
   ↓
[builder]
   │ DNA + outline → 03_draft.pptx
   │ SendMessage → qa
   ↓
[qa]
   │ 렌더 + 검수 → 04_qa_report.json
   │ PASS? ──→ 완료
   │ FIX? ──→ SendMessage → builder (루프, 최대 3회)
   ↓
[리더]
   │ 최종 파일 복사 + 보고
   ↓
[최종 산출물 PPTX]
```

## 에러 핸들링

| 상황 | 전략 |
|------|------|
| KIST_template.pptx 누락 | 사용자에게 경로 요청. `kist-ppt` 스킬은 템플릿 없이 동작 불가 |
| analyst 실패 | 1회 재시도. 재실패 시 `references/template-dna-spec.md`의 사전 추출된 DNA로 폴백 |
| architect가 모호한 입력으로 멈춤 | 기본 학술 발표 구조(타이틀·목차·3섹션·결론)로 진행, 가정 명시 |
| builder가 한글 폰트 누락 경고 | 진행하되 보고서에 명시. 사용자가 시스템 폰트 설치 후 재오픈 권장 |
| QA가 3회 루프 후 잔여 결함 | 잔여 이슈로 보고, 사용자에게 수동 검토 요청 |
| 팀원 중지 | 리더가 SendMessage로 상태 확인 → 재시작. 재실패 시 해당 팀원 작업을 builder가 보수적으로 대체 |
| soffice/pdftoppm 미설치 | QA가 시각 검수 생략하고 좌표 분석만 수행, 보고서에 명시 |

## 테스트 시나리오

### 정상 흐름
1. 사용자가 "2025 KIMST 학회 기조강연 30분, Agentic Science 주제 발표자료 만들어줘"를 요청
2. Phase 1: 입력 파싱 → 발표 정보 추출 (학회=KIMST, 시간=30분, 주제=Agentic Science)
3. Phase 2: TeamCreate(4명) + 6개 작업 등록
4. Phase 3: analyst가 DNA 추출 → architect가 12장 아웃라인 설계 → builder가 PPTX 빌드 → qa 검수
5. Phase 4: PASS → `kist_presentation_20250508.pptx` 산출
6. Phase 5: 팀 정리 + 사용자 보고

### 에러 흐름
1. Phase 3에서 builder가 슬라이드 7번에 본문 과다로 오버플로 발생
2. qa가 FIX 지시 (텍스트 축약 또는 분할)
3. builder가 SendMessage로 architect에게 분할 요청
4. architect가 outline 갱신 → builder 재빌드 → qa 재검수 → PASS
5. 총 1회 루프로 해결, 최종 PPTX는 정상 산출

## 사용법

### 사용자 입력 예시

**최소 입력:**
```
KIST 학회 발표자료 만들어줘
```
→ 합리적 가정으로 진행, 결과물 보고 시 가정 명시

**권장 입력:**
```
KIST PPT 만들어. 
제목: Agentic Science 시대의 자율연구 플랫폼
발표자: 홍길동 (KIST 디지털생명자원연구단)
학회: 2025 대한기계학회 IT지능융합부문 춘계학술대회 기조강연
일자: 2025-05-08
시간: 40분
주요 내용:
- 1부: 과학기술 발전사 (귀납·연역·귀추 추론)
- 2부: Agentic Science의 등장 (AI 자율연구 플랫폼)
- 3부: KIST의 전략 (Genesis HW/DB)
```

### 호출 트리거 키워드
"KIST 발표자료", "KIST PPT", "KIST 슬라이드", "KIST 기조강연", "KIST 세미나", "kist-ppt", "KIST 템플릿으로 PPT", "KIST_template.pptx 기반 발표자료"

## 참고 자료

- `references/template-dna-spec.md` — KIST_template.pptx의 정밀 디자인 사양 (좌표·색상·폰트)
- `references/layout-patterns.md` — 슬라이드 카테고리별 레이아웃 패턴 카탈로그
- `references/python-pptx-recipes.md` — python-pptx로 KIST 슬라이드를 만드는 코드 레시피
- `scripts/extract_dna.py` — analyst가 사용. 템플릿에서 DNA 추출
- `scripts/build_kist_pptx.py` — builder가 사용. 슬라이드 복제·치환·신규 합성
- `scripts/render_thumbs.py` — qa가 사용. soffice + pdftoppm 변환
- `scripts/qa_check.py` — qa가 사용. DNA·콘텐츠·결함 검증

## 한계 (Limitations)

- KIST 로고 자산은 `KIST_template.pptx` 내부에 임베드된 PNG를 추출하여 사용. 별도 라이선스가 있는 KIST 공식 로고를 사용할 경우 사용자가 직접 교체 필요
- 슬라이드 1(타이틀)의 KIST 야간 캠퍼스 이미지는 템플릿 원본을 그대로 사용. 다른 배경 이미지로 교체하려면 사용자가 PowerPoint에서 수동 작업
- 복잡한 다이어그램(예: Slide 3의 곡선 연결선 타임라인)은 형태 보존이 어려운 경우 단순화하여 재구성. 원본과 1:1 매칭은 보장하지 않음
- 폰트 임베드는 PowerPoint 또는 LibreOffice에서 수동 설정 필요 (python-pptx 미지원)
