ワンクリックで
eval-summary
// readings.ts의 요약 필드가 원본 kr 마크다운과 비교하여 잘 작성되었는지 평가합니다. 이슈별로 개선사항을 제안하고 사용자 컨펌 후 readings.ts를 수정합니다. 사용: /eval-summary week1 또는 /eval-summary week1/slug
// readings.ts의 요약 필드가 원본 kr 마크다운과 비교하여 잘 작성되었는지 평가합니다. 이슈별로 개선사항을 제안하고 사용자 컨펌 후 readings.ts를 수정합니다. 사용: /eval-summary week1 또는 /eval-summary week1/slug
YouTube 콘텐츠의 챕터별 하위페이지 구조를 readings.ts에 생성하고, 전체 번역 파일에서 챕터별 번역 파일을 자동 생성합니다. 사용: /split-youtube-chapters week1/deep-dive-llms
코드 수정 완료 후 conventional commit 형식의 커밋 메시지를 자동 생성하고 사용자 확인 후 커밋합니다. 사용자가 커밋해줘 또는 /commit 요청 시 사용.
나노바나나 프롬프트의 정확성을 한글 번역본과 비교하여 검증하고, WebSearch로 팩트체크한 후 이슈별로 사용자 확인을 거쳐 수정합니다. 사용: /improve-prompt week1/deep-dive-llms/tokenization
Reading 원문에서 나노바나나 프로용 치트시트 프롬프트를 생성합니다. 3단계 에이전트 파이프라인(분석→구조설계→프롬프트생성)으로 콘텐츠 유형에 맞는 프롬프트 생성. 사용: /nanobanana week1/slug
나노바나나에서 생성된 치트시트 이미지를 public에 복사하고 readings.ts에 cheatsheetImage 필드를 추가합니다. 사용: /publish-cheatsheet week1/slug
나노바나나 치트시트 이미지를 Gemini Vision으로 분석하여 해당 kr md 파일의 내용과 일치하는지 검증합니다. 기술적/문맥적 오류, 잘못된 텍스트/그래프/그림을 찾아냅니다. 사용: /review-cheatsheet week1/slug/chapter
| name | eval-summary |
| description | readings.ts의 요약 필드가 원본 kr 마크다운과 비교하여 잘 작성되었는지 평가합니다. 이슈별로 개선사항을 제안하고 사용자 컨펌 후 readings.ts를 수정합니다. 사용: /eval-summary week1 또는 /eval-summary week1/slug |
| arguments | [{"name":"path","description":"week{N} 또는 week{N}/slug 형식\n- 주차 전체: week1 (해당 주차의 요약 필드가 있는 모든 리딩 검증)\n- 개별 리딩: week1/deep-dive-llms\n","required":true},{"name":"skip-apply","description":"수정 적용 없이 리포트만 생성","required":false},{"name":"auto-apply","description":"사용자 확인 없이 모든 수정 자동 적용","required":false}] |
readings.ts의 요약 필드를 원본 kr 마크다운과 비교하여 품질을 평가합니다.
# 주차 전체 검증
/eval-summary week1
# 개별 리딩 검증
/eval-summary week1/deep-dive-llms
/eval-summary week1/how-openai-uses-codex
# 옵션
/eval-summary week1 --skip-apply # 리포트만 생성
/eval-summary week1 --auto-apply # 자동 적용
| 필드 | 설명 | 타입 |
|---|---|---|
tldr | TL;DR 전체 요약 | string |
learningGoals | 학습 목표 배열 | string[] |
chapterSummaries | 챕터별 요약 | ChapterSummary[] |
motivation | 동기부여 섹션 | object |
keyTakeaways | 핵심 요점 | object[] |
| 기준 | 설명 |
|---|---|
| 정확성 | 원문 내용을 정확히 반영하는가 |
| 완전성 | 중요한 내용이 누락되지 않았는가 |
| 간결성 | 불필요하게 길거나 중복되지 않았는가 |
| 일관성 | 용어와 어조가 일관되는가 |
| 소스 | 경로 |
|---|---|
| readings.ts | src/content/readings.ts |
| kr 마크다운 (기본) | docs/week{N}/{slug}/kr/index.md |
| kr 마크다운 (부모) | docs/week{N}/{slug}/kr/_index.md |
.claude/outputs/eval-summary/
└── week{N}/{slug}/
└── evaluation-report.json
/eval-summary week1/slug
│
▼
┌─────────────────────────────────┐
│ 1. 경로 파싱 │
│ week{N} → 주차 전체 │
│ week{N}/slug → 개별 리딩 │
└─────────────────────────────────┘
│
▼
┌─────────────────────────────────┐
│ 2. 데이터 로드 │
│ - readings.ts 요약 필드 │
│ - kr 마크다운 파일 │
└─────────────────────────────────┘
│
▼
┌─────────────────────────────────┐
│ 3. Task: summary-evaluator │
│ 요약 vs 원본 비교 검증 │
│ → JSON 이슈 리포트 │
└─────────────────────────────────┘
│
▼
┌─────────────────────────────────┐
│ 4. 이슈별 사용자 컨펌 │
│ (--skip-apply가 아닌 경우) │
└─────────────────────────────────┘
│
▼
┌─────────────────────────────────┐
│ 5. 승인된 수정사항 적용 │
│ Edit tool로 readings.ts │
└─────────────────────────────────┘
│
▼
┌─────────────────────────────────┐
│ 6. 결과 요약 출력 │
└─────────────────────────────────┘
이 스킬이 호출되면 다음 단계를 따르세요.
경로 구조 확인:
- 1단계 (week1): 주차 전체 검증
→ readings.ts에서 week === 1인 모든 리딩 추출
→ 요약 필드(tldr, learningGoals, chapterSummaries, motivation, keyTakeaways)가
하나 이상 있는 리딩만 필터링
- 2단계 (week1/slug): 개별 리딩 검증
→ readings['week1/slug'] 추출
대상 리딩 수집 로직 (주차 전체 시):
1. Read tool로 src/content/readings.ts 파일 읽기
2. 해당 주차의 모든 리딩 키 추출
3. 요약 필드가 있는 리딩만 필터링
4. 각 리딩에 대해 검증 수행
각 리딩에 대해:
1. readings.ts에서 요약 필드 추출:
- tldr (YouTube 콘텐츠)
- learningGoals (YouTube 콘텐츠)
- chapterSummaries (YouTube 콘텐츠)
- motivation (동기부여 섹션)
- keyTakeaways (핵심 요점)
2. kr 마크다운 파일 경로 결정:
- isParent === true && children 있음:
→ docs/week{N}/{slug}/kr/_index.md
- 그 외:
→ docs/week{N}/{slug}/kr/index.md
3. Read tool로 kr 마크다운 파일 읽기
파일이 없는 경우:
- kr 마크다운 없음: "번역 파일을 찾을 수 없습니다: /translate-reading 먼저 실행해주세요."
- 요약 필드 없음: "검증할 요약 필드가 없습니다." (해당 리딩 스킵)
Task tool 호출:
- subagent_type: "general-purpose"
- prompt: .claude/agents/eval-summary/summary-evaluator.md 내용
+ "## 입력 데이터"
+ "### 리딩 키: {week/slug}"
+ "### readings.ts 요약 필드:"
+ [tldr, learningGoals, chapterSummaries, motivation, keyTakeaways를 JSON으로]
+ "### 원본 kr 마크다운:"
+ [마크다운 전체 내용]
- description: "summary-evaluator - {slug} 요약 품질 검증"
에이전트가 JSON 형식으로 이슈 리포트를 반환합니다.
JSON 블록(```json ... ```) 추출하여 파싱합니다.
출력 디렉토리 생성:
mkdir -p .claude/outputs/eval-summary/week{N}/{slug}/
결과 저장:
Write tool로 evaluation-report.json 저장
--skip-apply 옵션인 경우:
→ 리포트 내용 출력 후 종료
→ Step 5, 6 스킵
이슈를 severity 순서로 정렬: critical → major → minor
각 이슈에 대해:
--auto-apply 옵션인 경우:
→ 모든 이슈 자동 승인
그 외:
→ AskUserQuestion tool 사용
AskUserQuestion 호출 예시:
questions:
- question: "이 수정사항을 적용하시겠습니까?"
header: "[Major] {field}"
options:
- label: "적용"
description: |
현재: "{current}"
수정: "{suggested}"
이유: {reason}
- label: "건너뛰기"
description: "이 이슈를 무시하고 다음으로 진행"
multiSelect: false
사용자 선택 처리:
- "적용": approvedIssues 배열에 추가
- "건너뛰기": skippedIssues 배열에 추가
- "Other" (직접 입력): customFixes 배열에 추가 (사용자 입력값 사용)
approvedIssues와 customFixes의 각 항목에 대해:
1. Read tool로 src/content/readings.ts 파일 읽기
2. 해당 리딩 키 위치 찾기: 'week{N}/{slug}':
3. 수정할 필드 위치 찾기
4. Edit tool로 수정 적용:
- old_string: 현재 값
- new_string: suggested 또는 custom 값
필드별 수정 방법:
- tldr: tldr: '...' 라인 찾아서 교체
- learningGoals: learningGoals: [...] 블록 찾아서 교체
- chapterSummaries: chapterSummaries 배열 내 특정 항목 교체
- motivation: motivation: {...} 블록 찾아서 교체
- keyTakeaways: keyTakeaways 배열 내 특정 항목 교체
주의: 한글 포함 시 Edit tool 사용 (Write 대신)
→ 정확한 old_string 매칭 필요
완료 메시지 형식:
✅ 요약 평가 완료!
📊 **검증 결과**
- 검증된 리딩: {N}개
- 발견된 이슈: {N}건
- Critical: {N}건
- Major: {N}건
- Minor: {N}건
📝 **적용된 수정** (--skip-apply가 아닌 경우)
- 승인됨: {N}건
- 건너뜀: {N}건
📁 **리포트 저장 위치**
.claude/outputs/eval-summary/week{N}/{slug}/evaluation-report.json
💡 **다음 단계**
pnpm build # TypeScript 검증
pnpm dev # 웹에서 확인
수정 적용 없이 리포트만 생성합니다.
사용자 확인 없이 모든 수정을 자동 적용합니다.
.claude/agents/eval-summary/summary-evaluator.md - 요약 품질 평가 에이전트| 유형 | 설명 |
|---|---|
inaccuracy | 원문과 다른 내용 |
omission | 중요 내용 누락 |
redundancy | 불필요한 반복 |
inconsistency | 용어/스타일 불일치 |
verbosity | 불필요하게 긴 표현 |
| 레벨 | 기준 |
|---|---|
critical | 핵심 내용 오류, 심각한 누락 |
major | 중요 정보 누락/왜곡 |
minor | 표현 개선, 일관성 문제 |
| 상황 | 처리 |
|---|---|
| kr 마크다운 없음 | "번역 파일을 찾을 수 없습니다: /translate-reading 먼저 실행해주세요." |
| readings.ts에 리딩 없음 | "리딩을 찾을 수 없습니다: /upload-reading 먼저 실행해주세요." |
| 요약 필드 없음 | "검증할 요약 필드가 없습니다." (해당 리딩 스킵) |
| JSON 파싱 실패 | 원본 출력 저장 후 수동 검토 안내 |
| 점수 | 의미 |
|---|---|
| 9-10 | 우수, 수정 불필요 |
| 7-8 | 양호, Minor 수정 권장 |
| 5-6 | 보통, Major 수정 필요 |
| 3-4 | 미흡, 상당 부분 재작성 권장 |
| 1-2 | 불량, 전체 재작성 필요 |