세션 마무리, 세션 정리, 세션 래핑, 세션 요약, 배운 점 정리, lesson learned, wrapup, 오늘 뭘 배웠지, 세션 회고, 작업 마무리 시 자동으로 추천됩니다. 세션 종료 시 사용자와 AI 각각의 '배운 것'을 구조화된 JSONL로 자동 기록합니다.
SKILL.md
name: wrapup description: "세션 마무리, 세션 정리, 세션 래핑, 세션 요약, 배운 점 정리, lesson learned, wrapup, 오늘 뭘 배웠지, 세션 회고, 작업 마무리 시 자동으로 추천됩니다. 세션 종료 시 사용자와 AI 각각의 '배운 것'을 구조화된 JSONL로 자동 기록합니다."
/wrapup
세션 종료 시 2계층(세션 요약 + Lesson-Learned)을 한 번에 기록하는 스킬.
- 스키마 상세:
references/schema.md참조 - 저장 스크립트:
scripts/save-wrapup.py - 통계 스크립트:
scripts/read-stats.py
스크립트 경로 규칙: 이 스킬의 base directory를 $SKILL_DIR로 참조한다.
실행 시 python "$SKILL_DIR/scripts/save-wrapup.py" 형태로 절대 경로 사용.
언어별 변경 힌트 매핑
| 언어 코드 | language_name | language_label | change_hint |
|---|---|---|---|
| ko | 한국어 | 랩업 언어 | /wrapup 언어 변경 |
| en | English | Wrap-up Language | /wrapup change lang |
| ja | 日本語 | ラップアップ言語 | /wrapup 言語変更 |
| zh-cn / zh | 中文(简体) | 摘要语言 | /wrapup 切换语言 |
| 기타 | (직접 입력) | Wrap-up Language | /wrapup change lang |
워크플로우
아래 8단계를 순서대로 실행한다.
Step 0: 언어 설정 확인
사용자 입력에 "언어 변경", "change lang", "change language", "言語変更", "切换语言" 중 하나라도 포함되어 있으면 → Step 0-B로 이동.
Step 0-A: 기존 설정 읽기 (일반 실행)
python "$SKILL_DIR/scripts/settings.py" read
- 결과에
"initialized": true→language,language_name,change_hint값을 기억한다 → Step 1로 무음 진행 - 결과가
{}또는 파일 없음 → Step 0-C
Step 0-B: 언어 변경 (키워드 트리거)
AskUserQuestion으로 언어 선택 (4개 고정 옵션 + Other):
- 한국어 (ko)
- English (en)
- 日本語 (ja)
- 中文(简体) (zh-cn)
선택 후:
python "$SKILL_DIR/scripts/settings.py" write --lang {code} --name "{name}"
"{name}(으)로 언어가 설정되었습니다." 안내 → Step 1로 진행.
Step 0-C: 최초 설정 (설정 파일 없을 때)
시스템 언어 감지:
python "$SKILL_DIR/scripts/settings.py" detect
AskUserQuestion 1개: "Select the language for wrapup records. (Detected: {detected_name})"
- {detected_name} 사용 (Recommended)
- English (en)
- 한국어 (ko)
- 日本語 (ja)
- 中文(简体) (zh-cn)
선택 후 write → language, language_name, change_hint 기억 → Step 1로 진행.
Step 1: 세션 메타정보 수집
단일 호출로 모든 메타정보를 수집한다:
python "$SKILL_DIR/scripts/collect-meta.py"
반환 JSON 필드:
date— 현재 시각 (ISO 8601)project— 프로젝트 경로session_id— 세션 UUIDsession_name— 세션명 (/rename으로 설정한 이름)stats— 누적 통계 (user_lessons / ai_lessons / session_summaries)
session_name이 빈 문자열이면 중단 → "세션명이 설정되지 않았습니다. /rename 세션명으로 설정 후 다시 시도해주세요." 안내
Step 2: 대화 컨텍스트 분석 → 2계층 드래프트 생성
언어 규칙: 모든 내용(info, qa, conclusions, actions, lesson 제목/요약 등)은 Step 0에서 확인된 언어({language_name})로 작성한다. 대화가 다른 언어로 진행되었더라도 설정 언어로 번역하여 기록한다.
전체 대화 컨텍스트에서 아래 항목을 추출한다.
계층 1 — 세션 요약:
- A. 정보 요약: 세션에서 조사/파악된 핵심 정보 (불릿 포인트)
- B. Q&A 정리: 사용자 질문 + AI 답변 쌍
- C. 협의 결론: 토론/비교된 안건의 결론 + 이유(rationale)
- D. 작업 내역: 세션 중 실제로 수행한 작업 목록 (구현, 파일 수정, 버그 수정, 테스트, 문서 작업 등). Q&A나 토론이 아닌 실제 실행된 행위.
- E. 액션 아이템: 후속 할 일 목록 (priority: high/medium/low)
계층 2 — Lesson-Learned:
사용자 학습 탐지 — Q: 이 대화에서 사용자가 무언가를 알게 됐는가?
- What/Who/When/Where 질문→AI 답변 패턴 → type:
user_fact_question - Why/How/비교/분석 질문→AI 답변 패턴 → type:
user_concept_question - 통찰/깨달음 표현 → type:
user_insight_feedback- [확실한 신호] "새로 알게 됐다", "깨달았다", "처음 알았어", "이건 몰랐는데" "이렇게 되는 거구나", "그래서 ~이었구나", "결국 ~이구나"
- [후속 발화와 함께] -군(요)/-네(요) 어미, "아!"/"오!" — 단독으로는 백채널과 구분 불가
- 기존 관점/전제가 틀렸음을 발견 → type:
user_perspective_shift"이렇게 생각하면 안 되겠다", "내가 잘못 알고 있었네", "완전히 다르게 봐야겠어"
AI 학습 탐지 — Q: 이 대화에서 AI가 무언가를 알게 됐거나, 방식을 바꿨는가?
- 에러/오답 → 수정 패턴 → type:
ai_trial_error - 새로운 정보/맥락 발견 → type:
ai_research_discovery - 접근 방식 전환 → type:
ai_strategy_pivot - 사용자가 AI에게 가르치거나 방향을 지정 → type:
ai_user_guided- 명시적 교정: "아니야", "틀렸어", "실제로는 ~야"
- 도메인 주입: "내 상황은 ~이야", 배경/전문 지식 제공
- 가이드라인: "~스타일로", "~는 하지 마"
- 방식 교정: 출력 포맷/어조/수준 재지시
양쪽 모두 해당하면 양쪽 다 기록 (같은 내용이지만 관점이 다름).
각 lesson에 category와 tags를 부여한다.
Step 3: 통합 드래프트 표시 + 확인
2계층을 하나의 통합 드래프트로 표시한다. 아래 포맷 사용:
━굵은 가로선으로 주요 섹션 구분,▸로 서브섹션 표시- 좌우 세로 테두리 없음 (한/영 혼용 시 정렬 깨짐)
- Q&A·협의 결론은 테이블 금지 — 번호 목록으로 표시 (터미널에서
|정렬 불가) - 소제목(
▸) 바로 다음 줄에 가는 선(─)이 온다. 소제목과 가는 선 사이에 빈 줄 없음 - 가는 선(
─) 앞에 공백 없음. 첫 번째 열(column 0)에서 시작한다 - 가는 선 다음에 빈 줄 하나, 그 다음 항목 시작
- 번호 항목의 두 번째 줄 이후는 반드시 5칸 공백(스페이스×5)으로 들여쓴다. 0칸(행 맨 앞)은 절대 금지.
-->줄:" --> 내용"(공백 5개 →-->→ 공백 1개 → 내용)[결정]/[이유]줄:" [결정] 내용"(공백 5개 → 태그 → 공백 1개 → 내용)- 금지 패턴 예시 (아래 중 하나라도 나오면 틀린 것):
1. 항목 → 내용 ← ❌ 들여쓰기 0칸 [결정] 내용 ← ❌ 들여쓰기 0칸 --> 내용 ← ❌ 들여쓰기 0칸
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
◆ 세션 요약 드래프트
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
▸ 정보 요약
────────────────────────────────────────────────────────────────────────────────────────
• ...
• ...
▸ Q&A
────────────────────────────────────────────────────────────────────────────────────────
1. 질문 내용
--> 답변 내용 ← ✅ 공백 5칸 + -->
2. 질문 내용
--> 답변 내용
❌ 틀린 예 (절대 금지):
1. 질문 내용
→ 답변 내용 ← 들여쓰기 0칸
▸ 협의 결론
────────────────────────────────────────────────────────────────────────────────────────
1. [주제] 주제 내용
[결정] 결정 내용 ← ✅ 공백 5칸 + [결정]
[이유] 결정 근거 ← ✅ 공백 5칸 + [이유]
2. [주제] 주제 내용
[결정] 결정 내용
[이유] 결정 근거
❌ 틀린 예 (절대 금지):
1. [주제] 주제 내용
[결정] 결정 내용 ← 들여쓰기 0칸
[이유] 결정 근거 ← 들여쓰기 0칸
▸ 작업 내역
────────────────────────────────────────────────────────────────────────────────────────
✓ ...
✓ ...
▸ 액션 아이템
────────────────────────────────────────────────────────────────────────────────────────
▶ [high] ...
▷ [medium] ...
· [low] ...
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
◈ Lesson-Learned 드래프트
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
▸ 사용자 학습
────────────────────────────────────────────────────────────────────────────────────────
1. 주제 내용 [학습분류]
--> 내용 요약 ← ✅ 공백 5칸 + -->
2. 주제 내용 [학습분류]
--> 내용 요약
▸ AI 학습
────────────────────────────────────────────────────────────────────────────────────────
1. 주제 내용 [학습분류]
--> 내용 요약 ← ✅ 공백 5칸 + -->
2. 주제 내용 [학습분류]
--> 내용 요약
❌ 틀린 예 (절대 금지):
1. 주제 내용 [학습분류]
→ 내용 요약 ← 들여쓰기 0칸
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
AskUserQuestion으로 확인:
- "확인 - 이대로 기록"
- "수정 필요"
- "세션 요약만 기록"
- "Lesson-Learned만 기록"
Step 4: 수정 루프
"수정 필요" 선택 시 사용자의 자유 텍스트 수정 지시를 받아 드래프트 반영 → Step 3 반복.
Step 5: 저장
확인된 드래프트를 JSON으로 구성하여 저장한다.
중요 — 드래프트 용어 → JSON 키 매핑:
| 드래프트 용어 | summary 하위 JSON 키 | 비고 |
|---|---|---|
| 정보 요약 | info |
배열 of 문자열 |
| Q&A | qa |
배열 of {q, a} |
| 협의 결론 | conclusions |
배열 of {topic, decision, rationale} |
| 작업 내역 | done |
배열 of 문자열 |
| 액션 아이템 | actions |
배열 of {title, priority} |
| 현재 시각 | date |
ISO 8601 형식 |
반드시 위 키 이름을 정확히 사용할 것. information, decisions, work_done, action_items, timestamp 등은 오류를 유발한다.
저장 방법 — Write 도구 + 단일 Bash(python:*) 호출 2단계로 처리한다.
python -c "..." 안에 데이터를 직접 내장하면 멀티라인 및 데이터 내 $() 텍스트가
Claude Code 안전 검사를 유발하므로 사용하지 않는다.
① Write 도구로 JSON 파일 저장:
JSON 데이터를 SKILL_DIR/scripts/.wrapup-tmp.json 에 Write 도구로 직접 저장한다.
(Write 도구는 bash 안전 검사 대상이 아님)
입력 JSON 전체 구조는 references/schema.md의 "save-wrapup.py 입력 JSON" 참조.
"세션 요약만" 선택 시 user_lessons, ai_lessons를 빈 배열로.
"Lesson-Learned만" 선택 시 summary 내부를 빈 배열로.
② --file 인수로 저장 스크립트 실행 (단일 라인, $() 없음):
python "SKILL_DIR\scripts\save-wrapup.py" --file "SKILL_DIR\scripts\.wrapup-tmp.json"
실행 후 SKILL_DIR/scripts/.wrapup-tmp.json 파일은 아래 단일 호출로 정리한다:
python -c "import os; os.remove(r'SKILL_DIR\scripts\.wrapup-tmp.json')"
SKILL_DIR은 실제 스킬 base directory 절대 경로로 치환한다 (예: C:\Users\Pro\.claude\skills\wrapup).
저장 실패 시: 드래프트 텍스트를 그대로 출력하여 수동 저장 가능하게 안내.
Step 6: /atodo 연동 제안
액션 아이템이 1건 이상이면 AskUserQuestion:
- "전부 등록" → 각 항목을
/atodoSkill 호출 - "선택해서 등록" → 개별 AskUserQuestion으로 확인 후 등록
- "나중에" → 건너뜀
/atodo 호출 실패 시: 액션 아이템 텍스트만 표시, 수동 등록 안내.
Step 7: 완료 메시지
저장 결과와 누적 통계를 아래 형식으로 표시한다. 한/영 혼용 시 좌우 세로선은 문자 폭 차이로 정렬이 어긋나므로 사용하지 않는다. 가로선으로만 구역을 구분하고, 같은 줄 내 항목 구분 세로선(│)은 그대로 사용한다.
─────────────────────────────────────────────────────────────────
세션 랩업 완료!
─────────────────────────────────────────────────────────────────
저장됨
├─ 세션 요약 {저장 경로}/summaries.jsonl
├─ 사용자 학습 N건
└─ AI 학습 N건
─────────────────────────────────────────────────────────────────
누적 통계
사용자 학습 총 N건 │ AI 학습 총 N건 │ 세션 요약 총 N건
─────────────────────────────────────────────────────────────────
{language_label}: {language_name} │ 변경: {change_hint}
─────────────────────────────────────────────────────────────────
{change_hint}는 "언어별 변경 힌트 매핑" 표에서 현재 언어에 해당하는 값을 사용한다.
에러 핸들링
| 상황 | 처리 |
|---|---|
| 세션명 미설정 | Step 1 중단 + /rename 안내 |
| JSONL 파일 없음 (첫 실행) | 자동 생성 |
| 저장 실패 | 드래프트 텍스트 출력 → 수동 저장 안내 |
| 대화 컨텍스트 너무 짧음 | "추출할 학습 내용이 부족합니다" 안내 |
| /atodo 호출 실패 | 액션 아이템 텍스트만 표시, 수동 등록 안내 |