Community생산성 & 협업github.com

Study Pack (스터디 팩)

Notion 또는 업로드된 파일의 강의 자료를 연결된 학습 팩(실라보, 레주모, 레비장, 선택 사항인 플라누)으로 변환하거나 기존 팩을 업데이트합니다. 모든 강의가 동일한 형식으로 일관되게 보이고 작동하도록 고정된 질문 양식과 페이지 키트를 사용합니다.

Study Pack (스터디 팩)란 무엇인가요?

이 스킬은 강의 자료(Notion 페이지, 업로드된 PDF, docx, 슬라이드, 이미지 등)를 체계적인 4페이지 학습 팩(실라보: 핵심 주제, 레주모: 전체 강의 + 풀이 예제, 레비장: 짧은 수업 + 연습 문제, 플라누: 시험 대비 일정 계획)으로 자동 변환합니다. 모든 페이지는 `kit/` 디렉토리의 고정된 빌드 스크립트(`build.py`)와 스키마(`SCHEMA.md`)에 의해 생성되므로, 사용자는 내용(JSON)만 작성하면 됩니다. 페이지 레이아웃, 질문 형식(`questions.py`의 고정된 양식), 도구(카운트다운, 계산기, 노트, 튜터 등)는 키트가 완전히 제어하여 모든 강의가 동일한 디자인과 기능을 갖도록 보장합니다. 업데이트 모드에서는 기존 팩을 읽고 수정하며, 연습 문제 ID와 진행 상황(로컬 스토리지)을 보존합니다. 계산 위주 과목, 시험 모드, 사용자 정의 연습 문제 형식(lesson-style)을 지원하고, 시험 문제 복원, 예제 검증(SymPy), 접근성 대비 검사 등 다양한 기능을 제공합니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/CAFEERON21br18/claude-skills/tree/HEAD/study-pack

Installed? Explore more 생산성 & 협업 skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

학습 팩 (Study Pack)

하나의 강의를 위한 네 개의 연결된 페이지로, 항상 키트 (kit/, github.com/CAFEERON21br18/claude-skills 내 study-pack/kit 폴더)로 빌드됩니다.

  1. 실라보 (Sílabo): 번호가 매겨진 주제, 필수 핵심 사항.
  2. 레주모 (Resumo): 전체 강의, 완전한 설명, 주제당 ≥ 3개의 풀이된 예제.
  3. 레비장 (Revisão): 짧은 수업 + 연습 문제 (사용자 또는 Claude 제공), 채점, 기록, 노트, 튜터.
  4. 플라누 (Plano) (선택 사항): 시험까지의 날짜별 계획, 차트, 체크 표시.

규칙 제로: 키트가 디자인을 결정하며, 당신은 내용만 작성합니다

  • 모든 페이지는 kit/build.py에서 생성됩니다. 페이지 HTML, CSS 또는 JS를 수동으로 작성하거나 패치하지 말고, 레이아웃을 "개선"하지 말며, 페이지별 스타일을 추가하지 마십시오. 동일한 옵션 ⇒ 동일한 페이지가 생성되며, 강의(CDI, AL, LP…)에 관계없이 동일합니다.
  • 오직 kit/SCHEMA.md에 설명된 JSON만 작성(json.dump 사용)한 후, 빌드, 확인, 게시하십시오.
  • 질문은 항상 kit/questions.py의 양식, 순서, 형식을 따릅니다. 절대 다른 방식으로 표현, 순서 변경, 분할하거나 질문하지 마십시오. 테마 이름을 색상 없이 나열하지 마십시오.
  • 키트로 수행할 수 없는 작업이 있다면 최종 메시지에서 한 줄로 알리십시오. HTML로 해결하지 마십시오.

키트가 고정하는 사항(재구현하지 마십시오): 헤더(CDI 레이아웃: 왼쪽에 강의 라인 + 제목, 오른쪽에 4개의 팩 탭, 두 번째 행에 도구: 카운트다운 · 페이지 도구 · As minhas notas · ruben-bonanni-ribeiro.dev의 해/달 아이콘이 있는 라이트/다크 버튼), 주제 레일, 임베디드 폰트가 포함된 KaTeX, 넓은 수학 수식 맞춤, 노트, 튜터 채팅, 그래프 계산기, 집중 모드, 역일 기준 카운트다운, 동일 탭 링크, 전화 레이아웃, 저장소.

페이지별 도구 (고정 순서, 꺼진 옵션은 단순히 표시되지 않음):

페이지헤더 도구헤더 아래 스트립
실라보카운트다운 · 집중(Foco) · 내 노트(As minhas notas) · ☾/☀—
레주모카운트다운 · 계산기 · 집중 · 내 노트 · ☾/☀—
레비장카운트다운 · 계산기 · 집중 · 오답만(Só erradas) · 기록(Histórico) · 내 노트 · ☾/☀완료(done) / 정답(right) / 검토(to review) + 저장(saved)
플라누카운트다운 · 오늘(Hoje) · 완료 숨기기(Esconder feitas) · ☾/☀완료된 세션 + 시간

0단계 — 키트, 그리고 팩이 이미 존재합니까?

  1. 키트를 매번 가져옵니다(변경되었을 수 있음): git clone --depth 1 https://github.com/CAFEERON21br18/claude-skills /tmp/sp && cp -r /tmp/sp/study-pack/kit ./kit kit/SCHEMA.md를 읽습니다.
  2. 사용자의 아티팩트를 나열하고(Artifact 목록, 범위 "all", 제한 200) "실라보/Syllabus/Programa — ", "레주모 — ", "레비장/Revision — ", "플라노 — " 또는 유사한 이름을 찾습니다.
  3. 발견 → 한 번 물어봅니다: "Já existe um pacote de . Atualizo esse ou crio um novo?" (기존 항목 업데이트(권장) · 새로 만들기). 업데이트 선택 시: "O que muda?" (새 자료 통합 · 옵션 변경 · 누락된 페이지 추가 · 연습 문제 다시 만들기). 이름 모호함 → 가장 가까운 일치 항목과 함께 한 번 물어보고, "Nenhum, começar do zero" (없음, 처음부터 시작)를 제공합니다. 발견되지 않음 → 조용히 진행합니다.

업데이트 모드

  • 각 기존 페이지를 전체 Artifact action:"read"로 path 없이 지금 0단계에서 읽습니다. 게시는 전체 라이브 버전을 읽지 않으면 거부됩니다. 큰 페이지는 저장된 파일로 반환됩니다: 해당 파일을 약 150~200줄 단위로 끝까지 읽습니다. 그런 다음 각 페이지의 HTML(read에 path:"index.html" 사용)도 extract.py를 위해 저장합니다.
  • python3 kit/extract.py pack <saved pages…>는 키트 페이지에서 pack/ (pack.json, topics, plan.json)을 재구축합니다. slug, storage, urls, 주제 번호 및 연습 문제 ID를 그대로 유지합니다.
  • 이전 팩(키트 데이터 없음): 페이지에서 설정(테마, 글꼴, 언어, 기능, 개수)을 추론하고 pack.json을 작성합니다. 진행 상황이 유지되도록 저장소 키를 "storage"에 복사합니다: localStorage 키(예: cdi-revisao-v1, lp-revision-v2)를 storage.ls.revisao에, db 문서 이름(예: revisao, lp-revision-v2)을 storage.docs.revisao에, 플라누와 테마 접두사도 동일하게 저장합니다.
  • 연습 문제: 동일한 문제(동일한 시트 + 번호)는 ID를 유지합니다. 새 문제는 다음 번호를 받습니다. 제거된 문제에 대한 시도는 "Exercício da versão anterior" (이전 버전의 연습 문제)로 표시됩니다: 최종 메시지에 그렇게 알립니다.
  • 플라누 유지: 날짜가 지정된 세션을 절대 이동하지 마십시오(체크 표시는 날짜 + 색인으로 키가 지정됨). 텍스트, 개수 및 링크만 업데이트합니다. 처음부터 다시 빌드된 계획은 이전 체크 표시를 잃습니다: 최종 메시지에 그렇게 알립니다.
  • 사용자가 변경하려는 질문과 새로운 자료에서 발생하는 질문(예: 사용자가 이제 연습 문제를 업로드한 경우 소스)만 묻습니다. 나머지는 모두 pack.json에서 재사용합니다.
  • 각 페이지의 기존 url에 게시합니다. 페이지별로 변경된 사항을 마무리합니다.

1단계 — 자료 수집 (질문 전)

  • 출처: 이름이 지정되거나 링크된 Notion 페이지(각각 가져오고, 강의의 하위 페이지를 따라감), 업로드된 파일(PDF, docx, 슬라이드, 이미지, 전체 읽기), 붙여넣은 텍스트. 강의 이름이 지정되었지만 출처가 없는 경우 → Notion을 검색하고, 한 줄로 페이지를 확인합니다.
  • Notion에서 "lesson-style" 과 같은 이름의 페이지를 검색합니다(사용자 고유의 연습 문제 형식). 찾으면 읽습니다: 이것이 첫 번째 연습 문제 형식 옵션이 됩니다.
  • 모든 주제, 정의, 정리, 방법, 함정, 풀이된 예제, 출처(시트 + 번호)가 있는 연습 문제, 시험 날짜, 사용자 고유의 연습 문제에 대해: 주제, 난이도, 방법, 해결(전체 / 부분 / 답변만 / 없음)을 수집합니다.
  • 명제 누락(답변만 있는 시트): 질문 전에 지금 한 줄로 알리고 PDF를 요청합니다. 절대 명제를 만들어내지 마십시오. 사용자의 다른 페이지 또는 답변 표에서 재구성된 명제는 "reconstructed": true ("enunciado reconstituído")를 받습니다.
  • Notion의 교과서: 주제 블록(예: 1–3, 4–8, 9–11)당 하나의 하위 에이전트로 추출하고 병렬로 처리합니다. 각 에이전트는 주제별로 JSON을 반환합니다: 교과서 번호가 있는 정의 및 정리, 함정, ≥ 4개의 단계(무엇 + 이유)와 최종 답변이 있는 풀이된 예제; 각각은 sympy로 모든 숫자를 다시 계산하고, 조용히 수정하는 대신 교과서 오류를 플래그 지정합니다 → bookerr 블록 ("Gralha no livro" (교과서 오류)).
  • 마스터 주제 목록: 강의 순서대로 1, 2, 3…으로 번호를 매기고, 절대 문자를 사용하지 마십시오. 이후에 절대 번호를 다시 매기지 마십시오.
  • 계산 위주 강의(수학, 물리학, 통계학, 공학, 금융) → 계산기 질문이 표시됩니다.
  • 읽을 수 없는 출처 → 어떤 것인지 알리고 계속 진행합니다.

2단계 — 질문 (하나의 고정된 양식)

  1. python3 kit/questions.py --lang <pt|fr|en> [--mine] [--calc] [--lesson-style] [--exam YYYY-MM-DD] (--mine: 사용자가 자신의 연습 문제를 업로드한 경우, --calc: 계산 위주 강의인 경우, --lesson-style: 해당 Notion 페이지가 존재하는 경우, --exam: 날짜가 발견된 경우.)
  2. 비주얼라이저 read_me (모듈 elicitation)를 호출한 다음, show_widget을 정확히 출력된 HTML, 제목 study_pack_details와 함께 호출합니다. 위젯에 다른 것은 없고, 추가 질문도 없습니다.
  3. 답변은 한 줄로 반환됩니다 (Theme: … · Font: … · Features: … · Exercise format: … · Source: … · Per topic: … · Language: … · Graph calc: … · Tutor: … · Plan: … · Deadline: … · Hours: …). pack.json에 매핑합니다.
  4. 이 세션에 비주얼라이저가 없는 경우 → questions.py … --text의 출력을 그대로 보내고(각 테마와 해당 16진수 색상을 표시함) 번호가 매겨진 답변을 기다립니다. 다른 형식은 절대 사용하지 마십시오.
  5. 건너뛰거나 응답하지 않은 경우(무인 실행) → 기본값: 포커스 테마, Atkinson Hyperlegible, 사이드바 + 집중 + 기록 + 진행 + 카운트다운, lesson-style이 발견되면 해당 형식, 그렇지 않으면 객관식 + 자유 답변, 사용자가 연습 문제를 가지고 있으면 50/50, 그렇지 않으면 강의 자료, 주제당 5개, 대화 언어, 계산기(계산 위주인 경우), 튜터(예), 플라누(없음). 사용된 기본값을 알립니다.

그런 다음, 빌드 전에:

  • **출처 = 내 것만(mine only)**이고 일부 주제에 사용자의 연습 문제가 없는 경우 → 지금 해당 주제를 말하고 한 번 묻습니다: 연습 문제 없이 두기(공지 포함) 또는 해당 주제만 강의/Claude 연습 문제로 채우기.
  • "기타(Other)" 테마 → kit/themes.json에서 가장 가까운 사전 설정을 복사하고, 색상만 변경한 후, python3 kit/check_contrast.py <file>을 통과할 때까지 실행하고, 객체를 pack.json theme에 넣습니다.
  • 형식 → 연습 문제 유형: lesson-style = 해당 규칙(아래); 출처대로(Como na fonte) = 시트의 형식 유지(개방형 질문 → free; 객관식/참-거짓은 시트에 있는 경우에만); 객관식(Escolha múltipla) = mcq; 자유 답변(Resposta livre) = free; V/F = tf. (빈칸 채우기는 키트에 없습니다.)

3단계 — 내용 작성 (JSON만)

주제를 그룹으로 나누고 최대 4개의 하위 에이전트로 병렬로 작성합니다(예: 1–3, 4–6, 7–9, 10–11). 각 에이전트에 제공: kit/SCHEMA.md, 주제의 자료, 2단계의 답변, 그리고 다음 규칙. 각 에이전트는 Python 스크립트(json.dump, 수동 금지)를 사용하여 pack/topics/<n>.json을 작성하고 sympy로 모든 계산을 확인합니다. 그런 다음 파일을 읽고 규칙을 따르는지 확인합니다.

실라보 (syllabus): 주제당 2–6개의 글머리 기호, ≤ 12단어, 명사구/규칙/공식, 문장 없음, 불필요한 내용 없음. 시험 관련 규칙만 포함하고, 지어낸 내용은 없습니다.

레주모 (resumo + examples): 주제의 모든 정의, 정리, 규칙 및 방법을 완전히 설명합니다(직관 → 공식 진술 → 사용 시기 및 방법), 강의 표기법 사용; def / thm / formula / method / trap 블록. 주제당 ≥ 3개의 풀이된 예제, 간단한 수준부터 시험 수준까지, 다양한 방법: 해결 방법이 있는 사용자의 연습 문제를 먼저, 그 다음 강의 예제, 그 다음 새로운 예제. 각 단계에는 do + why (+ 학생들이 실수하는 trap)가 있습니다. 출처 레이블: 실제 출처, 또는 "new" → "Novo" (새로운 예제). 지어낸 예제를 강의 출처로 레이블하지 마십시오. 객관식 문제를 예제로 재사용할 때는 솔루션 단계만 유지하고 옵션에 대한 문장은 삭제합니다.

레비장 (lesson, worked, exercises): 짧은 수업 블록, 하나의 worked 예제, 그 다음 연습 문제.

연습 문제 선택:

  • 내 것만, 모두: 해당 주제 아래의 모든 사용자 연습 문제, 추가 없음; 연습 문제가 없는 주제는 공지를 받음. 내 것만, N개: 주제당 가장 좋은 N개 — 시험 관련성이 가장 높은 순, 그 다음 다양성(각 방법 한 번씩, 쉬움 → 시험 수준, 동일한 것을 동일한 방식으로 테스트하는 두 문제 없음); N개 미만이면 모두 + shortage 공지.
  • 50/50, 모두: 모든 사용자 연습 문제 + Claude가 제공하는 같은 수의 문제, 사용자의 문제가 가장 적게 다루는 부분을 대상으로 함. 50/50, N개: 사용자 문제의 절반(위와 같이 선택, 반올림), 동일한 스타일의 Claude 문제 절반.
  • 강의 자료(Yours): 강의 연습 문제를 먼저, 그 다음 동일한 스타일의 새로운 문제.

사용자가 제공한 해결 방법: 이것이 답안 키입니다 — 단계와 표기법을 유지하고, 각 단계를 설명합니다(무엇, 이유, 함정). 누락된 단계는 완성하고 by_claude: true를 표시합니다. 모든 해결 방법을 확인하고(sympy로 다시 계산), 잘못된 단계는 조용히 수정하지 않습니다: flag와 함께 텍스트 및 수정 사항을 표시합니다. 해결 방법이 없으면 직접 작성하고 검증합니다.

lesson-style 규칙 (선택된 경우; Notion 페이지가 더 많은 정보를 제공하면 우선): 정확히 4개의 옵션(A–D)이 있는 mcq; 계산 문제 gate: true ("Resolve no papel primeiro" (먼저 종이에 풀기) + "Já resolvi — mostrar opções" (풀었음 — 옵션 표시)) 및 free_too: true (작업 내용 또는 사진 붙여넣기, Claude가 채점); 수학 옵션은 한 줄에 하나씩(기본 레이아웃), 각각 단일 행; 모든 오답은 일반적인 실수이며 why가 이를 명명합니다; 정답 문자는 다양함(같은 문자가 두 번 이상 연속으로 나타나지 않음).

텍스트: **bold**, 이탤릭체는 사용 금지; 수학은 $…$ / $$…$$; 회상 링크는 [[n]] (회상 기능 켜져 있을 때).

4단계 — 계획 (플라누 = 예인 경우에만)

설정을 pack.json → plan에 넣습니다(시작 = 오늘, hours: "auto" 또는 숫자, 다른 시험과 메모가 있는 busy 일, 어려운 주제에 대한 weights, 팩 언어로 된 hours_note). 그런 다음 python3 kit/plan.py pack을 실행합니다. 시간이 부족할 때 잘라내야 했던 항목을 출력합니다: 최종 메시지에 알립니다.

5단계 — 빌드, 확인, 게시

  1. python3 kit/build.py pack --out pack/out (스키마 오류 시 중지: JSON을 수정하고, HTML은 수정하지 마십시오).
  2. python3 kit/check.py pack/out --shots는 ALL CHECKS PASSED를 출력해야 합니다(400 / 1440px 라이트 및 다크 모드에서 페이지 오버플로우 없음, 잘린 내용 없음, KaTeX 오류 0개, 원시 $ 없음, JS 오류 없음, 고정된 헤더 및 도구 순서, 새 탭 링크 없음, 상호 작용 작동 확인). 그런 다음 pack/out/shots/*를 확인합니다(헤더, 밀집된 수학 블록, 전화 다크 모드). JSON을 수정하고, 다시 빌드하고, 한 번 더 확인합니다.
  3. artifact-capabilities를 로드하고 페이지가 사용하는 기능을 선언합니다: 계정 저장소(db) 및 뷰어 ID(user)는 노트, 기록 및 체크 표시용; Claude 호출(sample)은 튜터 및 채점용(실라보, 레주모, 레비장). 플라누: db + user만.
  4. 새 팩: 4개의 파일을 게시하고(제목은 페이지에서 가져오고, 아이콘 "book"), 4개의 URL을 pack.json → urls에 넣고, 다시 빌드하고, 다시 확인하고, 각 페이지를 해당 URL에 다시 게시합니다(탭과 교차 링크에 URL이 필요함). 업데이트: URL이 이미 pack.json에 있습니다. 각 페이지를 해당 url에 게시합니다.

마무리

몇 줄만: 빌드 또는 업데이트된 내용(카드가 링크를 전달함), 자료에서 누락된 사항, 사용자/강의/Claude가 작성한 연습 문제, 오답으로 플래그 지정된 사용자의 해결 방법 목록(연습 문제 + 단계), 계획에서 잘라내야 했던 항목, 활성화할 수 없었던 항목(튜터, 계정 저장소). 수식이 LaTeX로 복사된다고 한 번 말합니다(선택 + 복사 또는 수식 더블 클릭). 단계 요약은 하지 않습니다.

관련 스킬