강의자료·워크숍 자료를 HTML 슬라이드덱으로 만들고, 브라우저에 띄운 채로 고칠 문장을 드래그 선택해 지시하면 즉시 반영되는 라이브 편집 시스템의 오케스트레이터. 인터뷰 → 구성안 승인 게이트 → HTML 빌드 → 라이브 편집 → 배포의 5단계로 진행한다. 채팅에 '몇 번째 슬라이드가 어떻다'고 말로 지목할 필요 없이 화면에서 직접 고친다. '강의자료 만들어줘', '강의 슬라이드', '워크숍 자료', '교육자료', '세미나 발표자료', 'HTML 슬라이드', '슬라이드덱' 요청 시 반드시 사용. 후속 작업: 슬라이드 수정·추가·삭제·분할·합치기·순서 변경, 라이브 편집 시작·재개, 피드백 반영, 되돌리기, 특정 장만 다시, 구성안 재검토, 분량 늘리기·줄이기, 기존 HTML 강의자료 편집·개선, 발표자 노트 작성, 배포·공유 요청 시에도 반드시 이 스킬을 사용. ※ .pptx 파일 산출은 axlabs-mckinsey-pptx 플러그인, 한글 .hwpx 문서는 각 문서 하네스를...
Installs into .claude/skills of the current project.
Are you the author of Lecture Deck Orchestrator?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/parkjui92-lecture-deck-orchestrator)
---
name: lecture-deck-orchestrator
description: "강의자료·워크숍 자료를 HTML 슬라이드덱으로 만들고, 브라우저에 띄운 채로 고칠 문장을 드래그 선택해 지시하면 즉시 반영되는 라이브 편집 시스템의 오케스트레이터. 인터뷰 → 구성안 승인 게이트 → HTML 빌드 → 라이브 편집 → 배포의 5단계로 진행한다. 채팅에 '몇 번째 슬라이드가 어떻다'고 말로 지목할 필요 없이 화면에서 직접 고친다. '강의자료 만들어줘', '강의 슬라이드', '워크숍 자료', '교육자료', '세미나 발표자료', 'HTML 슬라이드', '슬라이드덱' 요청 시 반드시 사용. 후속 작업: 슬라이드 수정·추가·삭제·분할·합치기·순서 변경, 라이브 편집 시작·재개, 피드백 반영, 되돌리기, 특정 장만 다시, 구성안 재검토, 분량 늘리기·줄이기, 기존 HTML 강의자료 편집·개선, 발표자 노트 작성, 배포·공유 요청 시에도 반드시 이 스킬을 사용. ※ .pptx 파일 산출은 axlabs-mckinsey-pptx 플러그인, 한글 .hwpx 문서는 각 문서 하네스를 사용."
---
# 강의자료 제작 · 라이브 편집 오케스트레이터
강의자료를 **한 개의 자기완결 HTML 파일**로 만들고, 브라우저에 띄운 상태에서
사용자가 화면의 문장을 드래그 선택해 남긴 지시를 즉시 반영한다.
핵심 전환: 사용자가 "3번 슬라이드가 너무 방어적이야"라고 **말로 지목**하는 대신,
그 문장을 **화면에서 긁어** "덜 방어적으로"라고 적는다. 지목 비용이 0이 된다.
## 구성 자산
| 자산 | 위치 | 역할 |
|------|------|------|
| 서버 | `lecture-live-edit/scripts/server.py` | 정적 서빙 + 오버레이 주입 + 피드백 수집 |
| 오버레이 | `lecture-live-edit/scripts/editor.js` | 하이라이트 → 지시 UI, 자동 새로고침 |
| 큐 CLI | `lecture-live-edit/scripts/lle.py` | `pending` / `done` / `status` / `adopt` / `revert` |
| 덱 규격 | `lecture-deck-build` 스킬 | 표준 골격·슬라이드 문법·인터뷰 질문 |
| 편집 규약 | `lecture-live-edit` 스킬 | 드레인 절차·앵커링·재개 의식 |
에이전트 팀을 쓰지 않는다. 라이브 편집은 **반응 속도가 품질**이므로 메인 세션이 직접 편집한다.
(대규모 신규 집필로 조사가 많이 필요할 때만 `Explore`/`general-purpose`로 조사만 분리한다.)
---
## Phase 0 — 컨텍스트 확인 (항상 먼저)
작업 폴더는 강의별로 하나씩 둔다(`<작업루트>/<강의명>/`). 사용자가 지정하지 않으면 현재 폴더를 쓴다. 다음을 확인해 분기한다.
1. **대상 폴더에 `feedback/` 이 있다** → 진행 중인 강의. **재개 의식**(Phase 4의 재개 절차)으로 간다.
2. **사용자가 기존 HTML 파일을 지목했다** → **입양**(`lle.py adopt`) 후 Phase 3 뒷부분(서버 기동)부터.
3. **그 외** → 신규. Phase 1로.
> ⚠️ **어떤 턴이든 시작할 때**, 라이브 편집 중인 프로젝트가 있으면
> `python3 "$TOOL"/lle.py status --root <폴더>` 로 `pending` 을 먼저 확인한다
> (`$TOOL` 해석법은 `lecture-live-edit` 스킬의 "도구 경로 확인" 참조).
> 0이 아니면 사용자가 무슨 말을 하든 **먼저 드레인**하고 답한다. 이것이 알림이 유실돼도
> 피드백이 사라지지 않게 하는 최후의 안전망이다.
---
## Phase 1 — 인터뷰
`lecture-deck-build` 스킬의 `references/interview-storyline.md` 를 Read 해 질문 세트를 쓴다.
한 번에 다 묻지 말고 **AskUserQuestion 1~2회**로 핵심만 확정한다.
반드시 확정할 것: **청중 / 목적(끝나고 무엇을 할 수 있게 되나) / 시간 / 톤 / 기존 자료 유무**.
나머지(분량·시각 형식·색)는 기본값으로 제안하고 라이브 편집에서 고치게 한다.
— 인터뷰를 길게 끄는 것이 이 시스템의 취지에 반한다. **일단 만들고 화면에서 고친다.**
기존 자료(.hwpx/.docx/.pdf/.md/기존 덱)를 주면 먼저 읽어 골자를 인터뷰 답변으로 대체한다.
---
## Phase 2 — 구성안 + ★ 승인 게이트
`_workspace/구성안.md` 에 장별 설계를 표로 쓴다. 각 행: `sid · 유형 · 헤드 메시지 · 근거/자료 · 시각 형식`.
- **헤드 메시지**는 "무엇에 대해 말한다"가 아니라 **주장 한 문장**으로 쓴다.
(✗ "AI 도입 현황" → ✓ "도입률은 높지만 정착률은 3분의 1이다")
- 40~50분 강의 ≈ 20~28장이 기준. 간지(divider)를 축마다 넣는다.
**★ 구성안 사용자 승인 게이트 (필수)**
표를 제시하고 승인을 받는다. 승인 없이 빌드로 넘어가지 않는다.
이 게이트에서 걸러진 구조 오류 1건이 라이브 편집 20건보다 싸다.
사용자가 "그냥 만들어봐"라고 하면 승인으로 간주하고 진행한다.
---
## Phase 3 — 빌드 · 기동
1. `lecture-deck-build` 스킬을 따라 `<강의명>/deck.html` 을 만든다
(표준 골격 `assets/deck-skeleton.html` 복사 후 내용 채우기).
2. **서버 경로와 포트를 해석한다.** `launch.json` 은 자연어 플레이스홀더를 못 쓰므로
여기서만 실제 절대경로가 필요하다.
```bash
SERVER=$(find ~/.claude -name server.py -path '*lecture-live-edit/scripts*' 2>/dev/null | head -1)
python3 -c "import socket;s=socket.socket();print('4601 사용중' if s.connect_ex(('127.0.0.1',4601))==0 else '4601 비어있음')"
```
포트는 강의별로 고정하며 4601부터 순서대로 쓴다(이미 쓰이면 4602, 4603 …).
3. 작업 루트의 `.claude/launch.json` 에 항목을 **추가**한다(기존 항목을 지우지 않는다).
`<SERVER>` 자리에 2단계에서 얻은 절대경로를 넣는다:
```json
{ "name": "<강의명>", "runtimeExecutable": "python3",
"runtimeArgs": ["<SERVER>", "--root", "./<강의명>", "--port", "4601"],
"port": 4601 }
```
4. `preview_start({name: "<강의명>"})` 로 서버를 띄우고 Browser pane 에 표시한다.
5. 스크린샷으로 첫 화면을 확인한다. 깨진 레이아웃은 여기서 잡는다.
---
## Phase 4 — 라이브 편집 (상주)
**Monitor 장전** — 사용자가 피드백을 보내면 자동으로 깨어나게 한다. 프로젝트당 1회.
```
Monitor(persistent: true, timeout_ms: 3600000,
description: "<강의명> 라이브 편집 피드백",
command: tail -F -n 0 "<절대경로>/feedback/queue.jsonl" | (JSON을 한 줄 요약으로 변환))
```
정확한 커맨드와 재장전 규칙은 `lecture-live-edit` 스킬을 Read 해서 쓴다.
**알림이 오면** → `lecture-live-edit` 스킬의 드레인 절차를 그대로 수행한다:
`lle.py pending` → 슬라이드별 Edit → `lle.py done --cursor <cursor_after> --note "..."`.
`done` 시점에 브라우저가 자동으로 새로고침되며 보던 슬라이드에 그대로 머문다.
**사용자에게 안내할 조작** (Phase 3 직후 한 번):
> 화면에서 고치고 싶은 **문장을 드래그**하면 뜨는 [수정 지시] 버튼을 누르고 어떻게 고칠지 적어 보내세요.
> 장 전체는 슬라이드 위 💬 배지, 자료 전체는 우하단 [덱 전체]. 보내면 제가 바로 고치고 화면이 갱신됩니다.
> 조작: ← → 이동 · `O` 목차 · `N` 발표자 노트 · `T` 밝게/어둡게 · `F` 전체화면
**세션 재개 의식** (세션이 끊겼다가 돌아왔을 때 — Monitor 는 세션과 함께 죽지만 큐는 디스크에 남아 유실이 없다):
1. `preview_start({name})` (이미 떠 있으면 재사용된다)
2. `lle.py status` → `pending` 이 있으면 먼저 드레인
3. Monitor 재장전
4. 사용자에게 한 줄 보고: "이어서 편집 가능합니다. 밀린 피드백 n건은 반영했습니다."
---
## Phase 5 — 마감 · 배포
`deck.html` 은 **이미 클린하다**(오버레이는 서버가 응답에만 주입하므로 파일에 없다). 별도 정리 불필요.
확인만: `grep -c "__editor" <강의명>/deck.html` → `0` 이어야 한다.
배포 경로를 제시하고 **사용자가 고른 뒤에** 실행한다:
| 방법 | 쓸 때 | 방법 |
|------|-------|------|
| 파일 그대로 | 가장 안전. 오프라인·수정 자유 | `SendUserFile` 로 `deck.html` 전달. 더블클릭하면 열린다 |
| 링크 공유 | 수강생에게 URL로 배포 | `Artifact` 로 게시 → URL. **게시 전 사용자 확인 필수** |
| 인쇄·PDF | 핸드아웃 | 브라우저에서 `Cmd+P` (골격에 인쇄 CSS 있음) |
Artifact 게시 시: 골격은 외부 CDN을 쓰지 않으므로 CSP 제약을 그대로 통과한다.
게시는 되돌리기 어려운 외부 공개 행위이므로 **반드시 먼저 묻는다.**
---
## 운영 원칙
- **인터뷰는 짧게, 수정은 화면에서.** 완벽한 첫 초안보다 빠른 첫 초안이 이 시스템의 설계 의도다.
- **추측해서 반영하지 않는다.** 지시가 모호하면 `--needs-input` 으로 표시하고 채팅으로 되묻는다.
나머지 항목은 그대로 진행한다(부분 드레인).
- **자동 새로고침은 `done` 한 번에 한 번.** 여러 슬라이드를 고쳐도 마지막에 한 번만 게시해
중간 상태가 화면에 노출되지 않게 한다.
- **되돌리기는 항상 가능.** `pending` 이 편집 직전 스냅샷을 남기므로
"직전으로 되돌려" 는 `lle.py revert --root <폴더>` 한 번이다.
- 강의 1건 = 폴더 1개 = 포트 1개. 같은 프로젝트를 두 세션이 동시에 편집하지 않는다(커서 이중 기록).