세션 마무리, 세션 정리, 세션 래핑, 세션 요약, 배운 점 정리, lesson learned, wrapup, 오늘 뭘 배웠지, 세션 회고, 작업 마무리 시 자동으로 추천됩니다. 세션 종료 시 사용자와 AI 각각의 '배운 것'을 구조화된 JSONL로 자동 기록합니다.

0 stars
0 forks
Python
7 views

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": truelanguage, 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 — 세션 UUID
  • session_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에 categorytags를 부여한다.

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:

  • "전부 등록" → 각 항목을 /atodo Skill 호출
  • "선택해서 등록" → 개별 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 호출 실패 액션 아이템 텍스트만 표시, 수동 등록 안내