$npx -y skills add bevibing/tutor-skills --skill tutorInteractive quiz tutor for Obsidian StudyVault learning. Use when the user wants to: (1) Take a diagnostic assessment of their knowledge, (2) Study or review specific sections/topics, (3) Drill weak areas identified in previous sessions, (4) Check their learning progress or dashb
| 1 | # Tutor Skill |
| 2 | |
| 3 | Quiz-based tutor that tracks what the user knows and doesn't know at the **concept level**. The goal is helping users discover their blind spots through questions. |
| 4 | |
| 5 | ## File Structure |
| 6 | |
| 7 | ``` |
| 8 | StudyVault/ |
| 9 | ├── *dashboard* ← Compact overview: proficiency table + stats |
| 10 | └── concepts/ |
| 11 | ├── {area-name}.md ← Per-area concept tracking (attempts, status, error notes) |
| 12 | └── ... |
| 13 | ``` |
| 14 | |
| 15 | - **Dashboard**: Only aggregated numbers. Links to concept files. Stays small forever. |
| 16 | - **Concept files**: One per area. Tracks each concept with attempts, correct count, date, status, and error notes. Grows proportionally to unique concepts tested (bounded). |
| 17 | |
| 18 | ## Workflow |
| 19 | |
| 20 | ### Phase 0: Detect Language |
| 21 | |
| 22 | Detect user's language from their message → `{LANG}`. All output and file content in `{LANG}`. |
| 23 | |
| 24 | ### Phase 1: Discover Vault |
| 25 | |
| 26 | 1. Glob `**/StudyVault/` in project |
| 27 | 2. List section directories |
| 28 | 3. Glob `**/StudyVault/*dashboard*` to find dashboard |
| 29 | 4. If found, read it. Preserve existing file path regardless of language. |
| 30 | 5. If not found, create from template (see Dashboard Template below) |
| 31 | |
| 32 | If no StudyVault exists, inform user and stop. |
| 33 | |
| 34 | ### Phase 2: Ask Session Type |
| 35 | |
| 36 | **MANDATORY**: Use AskUserQuestion to let the user choose what to do. Analyze the dashboard to build context-aware options, then present them. |
| 37 | |
| 38 | Read the dashboard proficiency table and build options based on current state: |
| 39 | |
| 40 | 1. If unmeasured areas (⬜) exist → include "Diagnostic" option targeting those areas |
| 41 | 2. If weak areas (🟥/🟨) exist → include "Drill weak areas" option naming the weakest area(s) |
| 42 | 3. Always include "Choose a section" option so the user can pick any area |
| 43 | 4. If all areas are 🟩/🟦 → include "Hard-mode review" option |
| 44 | |
| 45 | Present these as an AskUserQuestion with header "Session" and concise descriptions showing which areas each option targets. The user MUST select before proceeding. |
| 46 | |
| 47 | ### Phase 3: Build Questions |
| 48 | |
| 49 | 1. Read markdown files in target section(s) |
| 50 | 2. If drilling weak area: also read `concepts/{area}.md` to find 🔴 unresolved concepts — rephrase these in new contexts (don't repeat the same question) |
| 51 | 3. Craft exactly 4 questions following `references/quiz-rules.md` |
| 52 | |
| 53 | **CRITICAL**: Read `references/quiz-rules.md` before crafting ANY question. Zero hints allowed. |
| 54 | |
| 55 | ### Phase 4: Present Quiz |
| 56 | |
| 57 | Use AskUserQuestion: |
| 58 | - 4 questions, 4 options each, single-select |
| 59 | - Header: "Q1. Topic" (max 12 chars) |
| 60 | - Descriptions: neutral, no hints |
| 61 | |
| 62 | ### Phase 5: Grade & Explain |
| 63 | |
| 64 | 1. Show results table (question / correct answer / user answer / result) |
| 65 | 2. Wrong answers: concise explanation |
| 66 | 3. Map each question to its area |
| 67 | |
| 68 | ### Phase 6: Update Files |
| 69 | |
| 70 | #### 1. Update concept file (`concepts/{area}.md`) |
| 71 | |
| 72 | For each question answered: |
| 73 | - **New concept**: Add row to table + if wrong, add error note under `### 오답 메모` (or localized equivalent) |
| 74 | - **Existing 🔴 concept answered correctly**: Increment attempts & correct, change status to 🟢, keep error note (learning history) |
| 75 | - **Existing 🟢 concept answered wrong again**: Increment attempts, change status back to 🔴, update error note |
| 76 | |
| 77 | Table format: |
| 78 | ```markdown |
| 79 | | Concept | Attempts | Correct | Last Tested | Status | |
| 80 | |---------|----------|---------|-------------|--------| |
| 81 | | concept name | 2 | 1 | 2026-02-24 | 🔴 | |
| 82 | ``` |
| 83 | |
| 84 | Error notes format (only for wrong answers): |
| 85 | ```markdown |
| 86 | ### Error Notes |
| 87 | |
| 88 | **concept name** |
| 89 | - Confusion: what the user mixed up |
| 90 | - Key point: the correct understanding |
| 91 | ``` |
| 92 | |
| 93 | #### 2. Update dashboard |
| 94 | |
| 95 | - Recalculate per-area stats from concept files (sum attempts/correct across all concepts in that area) |
| 96 | - Update proficiency badges: 🟥 0-39% · 🟨 40-69% · 🟩 70-89% · 🟦 90-100% · ⬜ no data |
| 97 | - Update stats: total questions, cumulative rate, unresolved/resolved counts, weakest/strongest |
| 98 | |
| 99 | Dashboard stays compact — no session logs, no per-question details. |
| 100 | |
| 101 | ## Dashboard Template |
| 102 | |
| 103 | Create when no dashboard exists. Filename localized to `{LANG}`. Example in English: |
| 104 | |
| 105 | ```markdown |
| 106 | # Learning Dashboard |
| 107 | |
| 108 | > Concept-based metacognition tracking. See linked files for details. |
| 109 | |
| 110 | --- |
| 111 | |
| 112 | ## Proficiency by Area |
| 113 | |
| 114 | | Area | Correct | Wrong | Rate | Level | Details | |
| 115 | |------|---------|-------|------|-------|---------| |
| 116 | (one row per section, last column = [[concepts/{area}]] link) |
| 117 | | **Total** | **0** | **0** | **-** | ⬜ Unmeasured | | |
| 118 | |
| 119 | > 🟥 Weak (0-39%) · 🟨 Fair (40-69%) · 🟩 Good (70-89%) · 🟦 Mastered (90-100%) · ⬜ Unmeasured |
| 120 | |
| 121 | --- |
| 122 | |
| 123 | ## Stats |
| 124 | |
| 125 | - **Total Questions**: 0 |
| 126 | - **Cumulative Rate**: - |
| 127 | - **Unresolved Concepts**: 0 |
| 128 | - **Resolved Concepts**: 0 |
| 129 | - **Weakest Area**: - |
| 130 | - **Strongest Area**: - |
| 131 | ``` |
| 132 | |
| 133 | ## Concept File Template |
| 134 | |
| 135 | Creat |