{"id":"tutor","name":"tutor","summary":"Obsidian StudyVault学習のためのインタラクティブクイズチューター。","body":"# Tutor Skill\n\nQuiz-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.\n\n## File Structure\n\n```\nStudyVault/\n├── *dashboard*              ← Compact overview: proficiency table + stats\n└── concepts/\n    ├── {area-name}.md       ← Per-area concept tracking (attempts, status, error notes)\n    └── ...\n```\n\n- **Dashboard**: Only aggregated numbers. Links to concept files. Stays small forever.\n- **Concept files**: One per area. Tracks each concept with attempts, correct count, date, status, and error notes. Grows proportionally to unique concepts tested (bounded).\n\n## Workflow\n\n### Phase 0: Detect Language\n\nDetect user's language from their message → `{LANG}`. All output and file content in `{LANG}`.\n\n### Phase 1: Discover Vault\n\n1. Glob `**/StudyVault/` in project\n2. List section directories\n3. Glob `**/StudyVault/*dashboard*` to find dashboard\n4. If found, read it. Preserve existing file path regardless of language.\n5. If not found, create from template (see Dashboard Template below)\n\nIf no StudyVault exists, inform user and stop.\n\n### Phase 2: Ask Session Type\n\n**MANDATORY**: Use AskUserQuestion to let the user choose what to do. Analyze the dashboard to build context-aware options, then present them.\n\nRead the dashboard proficiency table and build options based on current state:\n\n1. If unmeasured areas (⬜) exist → include \"Diagnostic\" option targeting those areas\n2. If weak areas (🟥/🟨) exist → include \"Drill weak areas\" option naming the weakest area(s)\n3. Always include \"Choose a section\" option so the user can pick any area\n4. If all areas are 🟩/🟦 → include \"Hard-mode review\" option\n\nPresent these as an AskUserQuestion with header \"Session\" and concise descriptions showing which areas each option targets. The user MUST select before proceeding.\n\n### Phase 3: Build Questions\n\n1. Read markdown files in target section(s)\n2. If drilling weak area: also read `concepts/{area}.md` to find 🔴 unresolved concepts — rephrase these in new contexts (don't repeat the same question)\n3. Craft exactly 4 questions following `references/quiz-rules.md`\n\n**CRITICAL**: Read `references/quiz-rules.md` before crafting ANY question. Zero hints allowed.\n\n### Phase 4: Present Quiz\n\nUse AskUserQuestion:\n- 4 questions, 4 options each, single-select\n- Header: \"Q1. Topic\" (max 12 chars)\n- Descriptions: neutral, no hints\n\n### Phase 5: Grade & Explain\n\n1. Show results table (question / correct answer / user answer / result)\n2. Wrong answers: concise explanation\n3. Map each question to its area\n\n### Phase 6: Update Files\n\n#### 1. Update concept file (`concepts/{area}.md`)\n\nFor each question answered:\n- **New concept**: Add row to table + if wrong, add error note under `### 오답 메모` (or localized equivalent)\n- **Existing 🔴 concept answered correctly**: Increment attempts & correct, change status to 🟢, keep error note (learning history)\n- **Existing 🟢 concept answered wrong again**: Increment attempts, change status back to 🔴, update error note\n\nTable format:\n```markdown\n| Concept | Attempts | Correct | Last Tested | Status |\n|---------|----------|---------|-------------|--------|\n| concept name | 2 | 1 | 2026-02-24 | 🔴 |\n```\n\nError notes format (only for wrong answers):\n```markdown\n### Error Notes\n\n**concept name**\n- Confusion: what the user mixed up\n- Key point: the correct understanding\n```\n\n#### 2. Update dashboard\n\n- Recalculate per-area stats from concept files (sum attempts/correct across all concepts in that area)\n- Update proficiency badges: 🟥 0-39% · 🟨 40-69% · 🟩 70-89% · 🟦 90-100% · ⬜ no data\n- Update stats: total questions, cumulative rate, unresolved/resolved counts, weakest/strongest\n\nDashboard stays compact — no session logs, no per-question details.\n\n## Dashboard Template\n\nCreate when no dashboard exists. Filename localized to `{LANG}`. Example in English:\n\n```markdown\n# Learning Dashboard\n\n> Concept-based metacognition tracking. See linked files for details.\n\n---\n\n## Proficiency by Area\n\n| Area | Correct | Wrong | Rate | Level | Details |\n|------|---------|-------|------|-------|---------|\n(one row per section, last column = [[concepts/{area}]] link)\n| **Total** | **0** | **0** | **-** | ⬜ Unmeasured | |\n\n> 🟥 Weak (0-39%) · 🟨 Fair (40-69%) · 🟩 Good (70-89%) · 🟦 Mastered (90-100%) · ⬜ Unmeasured\n\n---\n\n## Stats\n\n- **Total Questions**: 0\n- **Cumulative Rate**: -\n- **Unresolved Concepts**: 0\n- **Resolved Concepts**: 0\n- **Weakest Area**: -\n- **Strongest Area**: -\n```\n\n## Concept File Template\n\nCreate per area when first question is asked. Example:\n\n```markdown\n# {Area Name} — Concept Tracker\n\n| Concept | Attempts | Correct | Last Tested | Status |\n|---------|----------|---------|-------------|--------|\n\n### Error Notes\n\n(added as concepts are missed)\n```\n\n## Important Reminders\n\n- ALWAYS read `references/quiz-rules.md` before creating questions\n- NEVER include hints in option labels or descriptions\n- NEVER use \"(Recommended)\" on any option\n- Randomize correct answer position\n- After grading, ALWAYS update both concept file AND dashboard\n- Communicate in user's language","author":"@bevibing","ownerProfile":null,"authorContacts":null,"sourceUrl":"https://github.com/bevibing/tutor-skills/tree/main/skills/tutor","license":"MIT","category":"review","lang":"en","tokens":1297,"stars":0,"calls30d":1,"claimed":false,"visibility":"public","origin":"crawler","version":"0.1.0","createdAt":"2026-08-22","updatedAt":"2026-08-22","files":[{"path":"references/quiz-rules.md","size":2131,"sha256":"4ecf315341cea0bbed7df74155cbc1b8234c61f3a8f5b5adeb7f0fa11e3f0edd"}],"requires":{"mcp":[],"tools":[]},"safety":{"flags":[],"scannedAt":"2026-08-22","hasScripts":false,"networkEndpoints":[]}}