/teach-me — 증거 기반 코스 생성기
사용자가 배우고자 하는 모든 주제에 대해 자기 주도형 마크다운 코스와 자체 포함된 HTML 미니 코스를 생성합니다. 성인 학습자(CEFR B1 읽기 수준, 사전 지식 불필요)를 대상으로 하며, 인지 심리학 및 교수 설계 연구에 기반합니다.
사용 시기
- 사용자가
/teach-me <주제>를 호출하는 경우 (또는 인수 없이 호출 시 주제를 요청) - 사용자가 "X에 대해 가르쳐줘", "X를 배우고 싶어", "X에 대해 깊이 파고들기", "X에 대한 코스를 만들어 줘", "나와 함께 X 공부하기"라고 말하는 경우
- 다음 경우에는 사용하지 않음: 간단한 사실 질문("X가 뭐야" — 그냥 답변), 코드 도움말, 디버깅, 문서 조회, 라이브러리 API 질문 (이 경우
context7사용)
교육학 기반 (작업을 시작하기 전에 읽어야 함)
이 스킬은 잘 입증된 학습 과학에 기반합니다. 아래 규칙은 변경 불가능한 기본값입니다 — 이것이 사용자가 지불하는 가치입니다:
- 구체적인 것 다음에 추상적인 것 (Goldstone, Fyfe et al.). 각 챕터는 추상적인 정의 이전에 구체적인 관찰 가능한 사례로 시작합니다.
- 인출 연습이 다시 읽기보다 효과적 (Roediger & Karpicke; Rowland 2014 메타 분석). 각 챕터는 3~5개의 자유 회상 프롬프트와 1개의 챕터 간 콜백으로 끝납니다.
- 의도적인 콜백을 통한 간격 두기 노출 (Cepeda et al. 2006). 각 주요 개념은 이후 최소 2개 이상의 챕터에서 (재정의되지 않고) 사용됩니다.
- 작업 예제 + 역방향 페이딩 (Sweller, Renkl & Atkinson). 초기 챕터: 완전한 작업 예제. 중간: 점진적으로 빈칸 처리된 단계. 후기: 프롬프트만 제공.
- 인지 부하 이론 (Sweller, Mayer). 챕터당 최대 약 4개의 새로운 명명된 개념. 한 번에 하나의 새로운 난이도 차원.
- 분할 / 카드 (Mayer & Pilegard). 챕터는 250~500단어 카드 덱이며, 카드당 하나의 개념, 카드당 하나의 다이어그램입니다.
- 다이어그램 우선 시각적 일관성 (Mayer 멀티미디어 원칙). 관계형 개념에는 필수 다이어그램. 장식용 이미지 없음. 레이블은 별도 범례가 아닌 다이어그램에 인라인으로 표시.
- 비유 위생 (Gentner 구조 매핑). 모든 비유는 2문장 이내에 "이 비유가 깨지는 부분"에 대한 명시적 면책 조항이 따라와야 합니다.
- 전문 용어 게이트 (Nathan/Koedinger 전문가 맹점 연구). 모든 기술 용어는 처음 사용 시 정의되거나 이전 챕터의 용어집 항목에 연결됩니다. "흔한" 용어라도 예외는 없습니다.
- 제약된 자기 설명 프롬프트 (Chi et al.; Bisra et al. 2018 g≈0.55). 카드 사이: "다음 문장을 완성하세요: X가 작동하는 이유는 ___" (토글에 모범 답변 포함).
- B1 독자를 위한 평이한 언어. 평균 문장 ≤18 단어, 최대 25. 문장당 종속절 ≤1개. 수동태 ≤10%. 능동태. 2인칭. 관용구 없음.
- 학습자가 이미 아는 것 위에 구축 (Ausubel). 사전 인터뷰는 사용자의 알려진 영역을 파악합니다. 쓰기 가이드는 이를 비유 은행으로 전환합니다.
- 상태 변화를 보여주고, 설명하지 마세요 (Larkin & Simon 1987; Tversky & Morrison 2002 파악 원칙; Wong/Leahy/Marcus/Sweller 2012 일시적 정보 효과; Tufte 소규모 다중; Mayer 분할). 산문이 연속적인 상태를 설명하는 경우("먼저 이렇게, 그다음 저렇게, 충돌 후에는…"), 대신 2~5패널
<div class="state-sequence">를 사용하세요. 모든 패널에서 동일한 모양, 델타 주석, 캡션 = 트리거 + 불변. 독자는 진화 과정을 봅니다. 이야기를 읽지 않습니다.
폐기됨 — 절대 사용하지 마세요: 학습 스타일(VAK), 10,000시간 프레임, 게임화 스트릭/배지, "참여"를 위한 장식 이미지, "우뇌/좌뇌", "디지털 네이티브".
프로세스 흐름
digraph teach_me {
rankdir=TB;
"호출 구문 분석" [shape=box];
"기존 폴더?" [shape=diamond];
"출력 위치" [shape=box];
"사전 인터뷰" [shape=box];
"리서치 (4개 병렬 에이전트)" [shape=box];
"종합 및 OUTLINE.md 작성" [shape=box];
"사용자 챕터 선택" [shape=box];
"WRITING_GUIDE.md 작성" [shape=box];
"챕터 생성 (병렬 배치)" [shape=box];
"일관성 검사" [shape=box];
"index.html 구축" [shape=box];
"폴더 및 브라우저 열기" [shape=doublecircle];
"호출 구문 분석" -> "기존 폴더?";
"기존 폴더?" -> "출력 위치" [label="아니오"];
"기존 폴더?" -> "출력 위치" [label="확장 / 새로 시작 / 취소"];
"출력 위치" -> "사전 인터뷰";
"사전 인터뷰" -> "리서치 (4개 병렬 에이전트)";
"리서치 (4개 병렬 에이전트)" -> "종합 및 OUTLINE.md 작성";
"종합 및 OUTLINE.md 작성" -> "사용자 챕터 선택";
"사용자 챕터 선택" -> "WRITING_GUIDE.md 작성";
"WRITING_GUIDE.md 작성" -> "챕터 생성 (병렬 배치)";
"챕터 생성 (병렬 배치)" -> "일관성 검사";
"일관성 검사" -> "index.html 구축";
"index.html 구축" -> "폴더 및 브라우저 열기";
}
단계를 건너뛰지 마세요. TaskCreate를 사용하여 진행 상황을 추적하여 사용자가 현재 위치를 알 수 있게 하세요.
0단계 — 호출 구문 분석
- 인수에서 주제를 가져옵니다. 인수가 없으면 다음과 같이 응답하고 기다립니다: "어떤 주제를 배우고 싶으신가요? 기술(라이브러리, 언어, 개념) 또는 비기술(철학, 분야, 스킬) 모두 가능합니다."
- 주제 유효성 검사 가드:
- 주제가 유해한 경우(무기 합성, 악의적인 해킹 대상, 불법 행위) — 간단히 거부하고 중단합니다. 강의하지 않습니다.
- 주제가 불가능할 정도로 광범위한 경우(
프로그래밍,과학,모든 것) — 2~3가지 구체적인 예시를 들어 좁혀 달라고 요청합니다: "매우 광범위합니다. 'TypeScript의 비동기 프로그래밍 패턴' 또는 '컴파일러 작동 방식'과 같은 구체적인 내용으로 좁혀 보시겠어요?" 좁혀진 답변을 기다립니다. - 주제가 모호하지만 다룰 수 있는 경우(
AI,데이터베이스) — 계속 진행합니다. 인터뷰의 자유 형식 범위 질문이 이를 더 좁힐 것입니다.
- 슬러그 계산: 소문자화, 영숫자가 아닌 문자를
-로 대체, 반복되는-축소, 양쪽 공백 제거. 예:비동기 프로그래밍→비동기-프로그래밍.
1단계 — 기존 폴더 확인
- 메모리에서 출력 위치를 읽습니다(이것이 저장되는 방법은 2단계 참조). 메모리에 위치가 아직 없으면 2단계가 위치를 수집할 때까지 이 확인을 연기합니다.
<출력-위치>/learn-<슬러그>/가 이미 존재하는지 확인합니다.- 존재하는 경우,
AskUserQuestion을 통해 세 가지 옵션을 제시합니다:- 확장 — 새 챕터 추가, 새 스타일 노트로 특정 챕터 재생성, 또는 리서치를 새로 고치고 다시 선택.
- 새로 시작 — 기존 폴더 이름을
learn-<슬러그>-archived-YYYY-MM-DD/로 변경하고 새 코스를 진행. - 취소 — 중단.
- 확장인 경우: 하위 옵션 — (a) 새 하위 주제에 대한 챕터 추가(이전 OUTLINE.md를 컨텍스트로 사용하여 리서치로 건너뛰기), (b) 새 노트로 특정 챕터 번호 재생성(해당 챕터의 작성 단계로 건너뛰기), (c) 리서치를 새로 고치고 챕터 다시 선택(이전 OUTLINE.md를 병합하여 전체 재실행).
- 이전 코스를 파괴적으로 덮어쓰지 마세요.
2단계 — 출력 위치
teach-me-output-location또는 유사한 태그가 있는 항목을 메모리에서 검색합니다.C:/Users/AlemTuzlak/.claude/projects/F--projects/memory/*.md에서Glob을 사용하고teach-me에 대해Grep을 사용합니다.- 찾았고 경로가 여전히 존재하면 사용합니다. 간단히 말합니다: "
<경로>에 작성합니다." - 찾을 수 없으면
AskUserQuestion을 통해 질문합니다:F:/projects/learning/사용 (폴더가 없으면 생성) — 권장.- 현재 작업 디렉토리 사용 (
./). - 다른 경로 지정 — 사용자가 "기타"를 통해 제공.
- 사용자가 답변한 후 질문합니다: "향후
/teach-me실행을 위해 이 위치를 기본값으로 저장하시겠습니까?" —AskUserQuestion을 통해 예/아니오. - 예인 경우,
type: user프론트매터와 본문에 경로가 포함된 메모리 파일teach_me_output_location.md를 작성합니다.MEMORY.md에 한 줄을 업데이트합니다. - 이제 확인된 위치로 1단계 기존 폴더 확인을 다시 시도합니다.
3단계 — 사전 인터뷰
두 번의 왕복으로 질문합니다:
1라운드 — 4개의 구조화된 질문이 포함된 단일 AskUserQuestion
Q1 [현재 지식]: <주제>에 대해 얼마나 알고 계신가요?
- 들어본 적 없음
- 용어는 알고 있으나 실습 경험 없음
- 기본적인 것을 구축해 본 적 있음
- 중급 실무자
Q2 [최종 목표 숙련도]: 어느 수준에 도달하고 싶으신가요?
- 개념적 개요만
- 기본적인 것을 구축할 수 있음
- 프로덕션 수준의 것을 구축할 수 있음
- 다른 사람을 가르칠 수 있음
Q3 [깊이 예산]: 어느 정도 깊이를 원하시나요?
- 빠른 입문서 (~3~5개 챕터)
- 표준 (~6~10개 챕터)
- 심층 탐구 (리서치된 모든 것, 10~15개 이상 챕터)
Q4 [연습 부담]: 어느 정도의 실습을 원하시나요?
- 가벼움 (읽기 중심)
- 표준 (읽기 + 인출 + 간헐적 연습 문제)
- 무거움 (모든 챕터에 작업 예제와 연습 문제 포함)
2라운드 — 단일 일반 텍스트 메시지 응답
다음 정확한 메시지를 보냅니다 (<주제>를 대체):
리서치를 시작하기 전에 두 가지만 더 여쭙겠습니다:
1. 이미 잘 알고 계신 것은 무엇인가요? 언어, 프레임워크, 분야, 취미 등 진지하게 시간을 투자한 모든 것을 나열해 주세요 (예: "TypeScript, React, 음악 이론, 요리, 체스"). 새로운 개념을 이미 알고 있는 것에 고정시키기 위한 비유 소스로 사용하겠습니다.
2. <주제> 내에서 특정 각도가 있나요, 아니면 광범위하게 다룰까요? 전체 범위를 원하시면 "놀라게 해줘"라고 말씀해 주세요.
두 가지를 모두 포함하는 단일 응답을 기다립니다. 느슨하게 구문 분석합니다 — 쉼표로 구분된 목록, 글머리 기호 목록 또는 자유 형식을 허용합니다.
답변을 작업 구조체에 저장합니다 (나중에 OUTLINE.md 및 WRITING_GUIDE.md에 작성).
4단계 — 리서치 (4개 병렬 에이전트)
4개의 general-purpose 하위 에이전트가 포함된 일괄 Agent 호출 1개를 전송합니다. 이들은 병렬로 실행됩니다. 각각 자체 포함된 브리핑을 받고 구조화된 보고서를 반환합니다.
레인 A — 권위 있는 콘텐츠. <주제>에 대한 최고의 기사, 튜토리얼, 컨퍼런스 발표, 논문을 찾습니다. WebSearch + WebFetch로 가장 신호가 높은 결과를 가져옵니다. 각각에 대해 한 줄 "읽어야 하는 이유"와 함께 8~15개를 반환하고 [기사|튜토리얼|발표|논문]으로 태그합니다.
레인 B — 틈새 인플루언서 및 실무자. <주제>로 알려진 특정 인물을 찾습니다 — 기술 유명인이 아니라, 이 틈새 시장에 대해 깊이 파고드는 개인 블로그/뉴스레터/Twitter를 가진 실무자입니다. 이름, 개인 매체(블로그 URL), 대표 게시물 URL, 그를 팔로우해야 하는 이유(한 줄)와 함께 4~8개를 반환합니다. 출력물이 기업 마케팅뿐인 사람은 건너뜁니다.
레인 C — 표준 참조 자료. 공식 문서, 명세서, 참조 구현, 결정적인 교과서. <주제>가 라이브러리/프레임워크/CLI 도구인 경우, context7 MCP(resolve-library-id 후 query-docs)를 사용하여 현재 표준 문서를 가져옵니다. 버전 정보와 함께 3~8개 소스를 반환합니다.
레인 D — 하위 주제 지형 및 표준 언어. 주제를 조사하여 하위 주제의 트리를 한 줄 설명과 함께 생성합니다 (일반적으로 8~15개 하위 주제). 교육적 순서(선행 조건 먼저, 고급은 마지막)를 제안합니다. 주제가 기술적인 경우, 공식 문서/프로덕션에서 가장 일반적인 표준 언어를 결정합니다 (예: Temporal → TypeScript 또는 Go; LangGraph → Python). 명시적으로 명시합니다: "표준 언어: X, 이유는 Y."
각 에이전트는 800단어 미만으로 구조화된 보고서를 보고합니다. 4개 모두 반환되면 종합합니다.
5단계 — 개요 및 챕터 선택
- 다음 구조로
<출력-위치>/learn-<슬러그>/OUTLINE.md를 작성합니다:
# <주제> 학습
## 기록된 목표
- **현재 수준**: <Q1 답변>
- **목표 숙련도**: <Q2 답변>
- **깊이**: <Q3 답변>
- **연습 부담**: <Q4 답변>
- **알려진 영역 (비유 은행)**: <2라운드에서 쉼표로 구분>
- **범위/각도**: <2라운드 답변>
## 하위 주제 지형 (리서치에서)
1. <하위 주제 1> — <한 줄 설명>
2. <하위 주제 2> — <한 줄 설명>
...
## 제안된 순서
각 단계에 대한 근거와 함께 선행 조건을 존중하는 순서.
## 권장 챕터 (~N개, 깊이 예산 기준)
제안된 챕터의 번호 매기기 목록. 각 항목: 짧은 제목 + 다루는 내용 한 줄 + 예상 카드 수 (챕터당 5~9개).
## 표준 언어 (기술 주제만 해당)
<언어 및 한 줄 근거>
## 권장 소스
- [소스 1](url) — [유형] — 읽어야 하는 이유
...
## 팔로우할 가치가 있는 틈새 인플루언서
- **이름** — [블로그 url] — 대표 게시물: [게시물 url] — 팔로우해야 하는 이유 한 줄
...
- 파일을 자동으로 엽니다:
Bash code --new-window "<OUTLINE.md의 절대 경로>". - 다음 정확한 메시지로 사용자에게 응답합니다 (적절히 대체):
개요를
<절대 경로>에 작성하여 열어 두었습니다.작성할 챕터를 알려주세요:
all— 모든 권장 챕터 작성1,3,5-7— 특정 챕터 또는 범위- 자유 형식 — 집중할 내용을 자신의 말로 설명
reshape— 확정 전에 추가, 제거, 병합 또는 재정렬할 내용을 알려주세요
reshape을 선택하시면 OUTLINE.md를 수정하고 다시 질문하겠습니다.
- 사용자가
reshape을 선택하면, 노트를 받아 OUTLINE.md를 수정하고, 저장하고, 다시 열고, 다시 질문합니다. 확정될 때까지 반복합니다. - 선택 항목을 최종 정렬된 챕터 목록
picks = [...]로 구문 분석합니다.
6단계 — WRITING_GUIDE.md 작성
<출력-위치>/learn-<슬러그>/WRITING_GUIDE.md를 작성합니다. 이 파일은 모든 챕터 작성 에이전트와 일관성 검사 에이전트를 위한 공유 브리핑입니다. 포괄적이고 구체적이어야 합니다.
<스킬-디렉토리>/assets/templates/WRITING_GUIDE.template.md의 템플릿을 시작점으로 사용합니다 — 사용자의 기록된 인터뷰 답변을 자리 표시자({{TOPIC}}, {{CURRENT_LEVEL}}, {{TARGET_PROFICIENCY}}, {{PRACTICE_LOAD}}, {{KNOWN_DOMAINS}}, {{SCOPE}}, {{CANONICAL_LANGUAGE}})에 대체합니다.
또한 챕터 작성자에게 <스킬-디렉토리>/assets/COMPONENTS.md의 컴포넌트 라이브러리 참조를 안내합니다 — 작성하기 전에 훑어봐야 합니다. 콜아웃, 다이어그램 카드, 비교 블록, 탭, 통계 카드, 플랫폼 알약, 단계 목록을 모두 사용할 수 있습니다. 일부는 마크다운 규칙에서 자동 생성되고, 나머지는 마크다운 내부의 명시적 HTML입니다.
생성된 파일이 이 SKILL.md 상단의 "교육학 기반" 섹션에 나열된 13가지 교육학 규칙을 모두 시행하는지 확인합니다. 가이드에 표현되지 않은 규칙이 있으면 계속 진행하기 전에 추가합니다.
7단계 — 챕터 생성 (병렬 배치)
선택된 챕터를 라운드당 3~5개의 작성자 하위 에이전트로 구성된 병렬 배치로 생성하고, 라운드 간에는 순차적으로 진행합니다.
각 라운드에 대해:
- 각 하위 에이전트는 WRITING_GUIDE.md와 OUTLINE.md(할당된 챕터 제목 및 범위용) 및
<스킬-디렉토리>/assets/COMPONENTS.md를 입력으로 받습니다. 각각<절대-출력-경로>/learn-<슬러그>/cards/chapter-<N>.md에 마크다운 파일을 생성합니다. - 각 챕터는 정확히 다음 구조를 따라야 합니다:
- # 챕터 N: <제목>
- ## 카드 1: <카드 제목> — 하나의 개념. 하나의 다이어그램(다이어그램 카드 컴포넌트 사용). 하나의 비유(있는 경우 비유 요약 + 한계).
> **💡 스스로 설명해 보세요:** …과 같은 자기 설명 프롬프트 (토글 내 모범 답변 포함). - (필요한 만큼 ## 카드 N 반복)
- ## 🧠 인출 연습 — 3~5개의 자유 회상 질문. 1개 이상의 챕터 간 콜백(예: "2장에서 배운 X 개념을 기억하시나요? 여기서는 …")
- ## ⚡ 빠른 연습 문제 (연습 부담이 '표준' 이상인 경우) — 최소 1개.
- 검증: 각 챕터가 교육학 규칙을 위반하지 않는지 확인합니다. 위반 시 수정합니다.
- 모든 라운드가 완료될 때까지 반복합니다.
8단계 — 일관성 검사
전용 에이전트가 모든 생성된 챕터를 검토합니다:
- 용어 일관성: 개념이 모든 챕터에서 동일한 이름으로 참조되는지 확인합니다.
- 교육학 규칙 준수: 13가지 규칙을 다시 확인합니다.
- 간격 두기 콜백 확인: 3단계가 적용되었는지 확인합니다 (각 주요 개념이 ≥2개의 이후 챕터에서 재사용됨).
- 전문 용어 게이트 확인: 모든 기술 용어가 정의되었거나 연결되었는지 확인합니다.
- 비유 위생 확인: 각 비유에 한계 설명이 있는지 확인합니다.
- 다이어그램 존재 확인: 관계형 개념에 다이어그램이 있는지 확인합니다.
- 가독성 확인: 문장 길이, 수동태 사용, B1 수준 준수.
- 문제를 찾으면 수정합니다. (에이전트가 수정할 수 없는 심각한 문제가 있는 경우 경고를 표시하고 사용자에게 알립니다.)
9단계 — 대화형 HTML 미니 코스 구축
<출력-위치>/learn-<슬러그>/index.html에 단일 파일 자체 포함 HTML을 생성합니다:- 모든 카드 콘텐츠 포함.
- 사이드바 탐색.
- 진행률 추적기.
- 인출 연습 답변 토글.
- 다크/라이트 모드.
- 검색.
- 상태 시퀀스 (
<div class="state-sequence">)에 대한 CSS 애니메이션.
- 자동으로 엽니다:
Bash start "" "<절대-경로-출력>/learn-<슬러그>/index.html".
메모리 유지
완료 시, 다음과 같은 메모리 파일을 작성합니다:
<메모리-디렉토리>/course_<슬러그>.md:
---
type: course
created: <날짜-ISO>
topic: <주제>
slug: <슬러그>
path: <절대-경로>
chapters: <챕터-수>
status: complete
---
에이전트 제한사항 및 모범 사례
- 중단 시 재개: 사용자가 중간에 상호작용을 중단했다가 복귀하면,
Glob+Grep을 통해learn-*/디렉토리를 검색하여 마지막 단계를 찾습니다. 이 SKILL.md의 단계를 참고하여 "마지막으로 5단계에 있었습니다. OUTLINE.md가 여기에 있습니다. 계속할까요?"라고 말하고 중단된 지점에서 계속합니다. 처음부터 다시 시작하지 마세요. - 토큰 관리: 각 챕터 작성 에이전트에 명시적인 토큰 예산을 부여합니다 (챕터당 평균 500단어, 카드당 ~100단어). 매우 긴 주제의 경우, 사용자에게 "이 주제는 15개 이상의 챕터가 필요합니다. 지금 첫 8개를 생성한 다음 계속할까요?"라고 질문합니다.
- 사용자 피드백: 생성 중간에 사용자가 "더 자세히 설명해 줘" 또는 "다시 써 줘"라고 말하면, 관련 챕터를 다시 생성하고 일관성 검사를 다시 실행합니다.
- 오류 처리: WebFetch/WebSearch가 소스를 찾지 못하면, 빈 결과를 자리 표시자(
*[리서치 중 소스를 찾을 수 없음]*)로 대체하고 기록합니다. 에이전트를 다시 시도하지 마세요 — 계속 진행하세요.