From study-assistant
강의노트를 기반으로 대화형 단계별 복습 세션을 진행하는 스킬. 사용자가 "복습하자", "이번 주 복습", "review", "3주차 복습해줘", "강의 내용 다시 보자", "이해 안 되는 부분 있어" 등을 요청할 때 사용한다. 강의노트를 섹션별로 나누어 한 단계씩 설명하고, 이해도 확인 질문을 던지며, 사용자 응답에 따라 추가 설명 또는 다음 단계로 진행한다.
How this skill is triggered — by the user, by Claude, or both
Slash command
/study-assistant:reviewThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
강의노트를 기반으로 섹션별 단계적 복습을 진행한다. 한꺼번에 전체를 쏟아내지 않고, 작은 단위로 설명 → 질문 → 피드백 → 다음 단계 순서로 진행한다.
강의노트를 기반으로 섹션별 단계적 복습을 진행한다. 한꺼번에 전체를 쏟아내지 않고, 작은 단위로 설명 → 질문 → 피드백 → 다음 단계 순서로 진행한다.
과목과 주차를 파악하고, 해당 강의노트를 로드한다.
import os
SESSION_BASE = '/sessions/{session_id}'
MNT = os.path.join(SESSION_BASE, 'mnt')
SYSTEM_DIRS = {'uploads', '.claude', '.skills', '.local-plugins',
'.cowork-lib', '.cowork-perm-req', '.cowork-perm-resp'}
def find_course_folders():
folders = []
for item in os.listdir(MNT):
full = os.path.join(MNT, item)
if not os.path.isdir(full):
continue
if item.startswith('.') or item in SYSTEM_DIRS:
continue
folders.append({'name': item, 'path': full})
return folders
def load_note(course_path, week):
note_dir = os.path.join(course_path, '강의노트')
for f in os.listdir(note_dir):
if f'{week:02d}' in f and f.endswith('.md'):
return os.path.join(note_dir, f)
return None
강의노트가 없으면 사용자에게 먼저 /create-note를 안내한다.
강의노트의 # 헤더를 기준으로 대단원을 나누고, 각 대단원 안의 ## 헤더로 소단원을 나눈다.
def split_sections(note_content):
"""강의노트를 대단원/소단원으로 분리"""
sections = []
current_major = None
current_minor = None
current_content = []
for line in note_content.split('\n'):
if line.startswith('# ') and not line.startswith('## '):
# 이전 섹션 저장
if current_major:
sections.append({
'major': current_major,
'minor': current_minor,
'content': '\n'.join(current_content)
})
current_major = line[2:].strip()
current_minor = None
current_content = []
elif line.startswith('## '):
if current_content and current_major:
sections.append({
'major': current_major,
'minor': current_minor,
'content': '\n'.join(current_content)
})
current_minor = line[3:].strip()
current_content = []
else:
current_content.append(line)
# 마지막 섹션
if current_major and current_content:
sections.append({
'major': current_major,
'minor': current_minor,
'content': '\n'.join(current_content)
})
return sections
한 섹션을 다룰 때 아래 순서를 따른다:
맞은 경우:
틀린 경우:
질문이 있는 경우:
복습 세션이 끝나면:
/quiz로 해당 주차 퀴즈 풀기/flashcard로 핵심 개념 플래시카드 생성/review로 다른 주차 복습1. 과목·주차 파악 → 강의노트 로드
2. 노트를 섹션별로 분리
3. 섹션 목록 제시 → 시작점 선택
4. 각 섹션: 핵심 제시 → 질문 → 응답 처리 → 다음
5. 세션 종료: 요약 + 취약 포인트 + 다음 단계 제안
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub cjrain-12505614/study-assistant-marketplace --plugin study-assistant