{"id":"c4b84c57-3a38-422b-94c7-941401e9cbd4","shortId":"9Utzuc","kind":"skill","title":"tutor","tagline":"Interactive 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","description":"# 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","tags":["tutor","skills","bevibing","agent-skills","claude","claude-code","claude-skills","skill","skillsmp"],"capabilities":["skill","source-bevibing","skill-tutor","topic-agent-skills","topic-claude","topic-claude-code","topic-claude-skills","topic-skill","topic-skills","topic-skillsmp"],"categories":["tutor-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/bevibing/tutor-skills/tutor","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add bevibing/tutor-skills","source_repo":"https://github.com/bevibing/tutor-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 822 github stars · SKILL.md body (5,162 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-02T18:52:58.400Z","embedding":null,"createdAt":"2026-04-18T21:56:59.498Z","updatedAt":"2026-05-02T18:52:58.400Z","lastSeenAt":"2026-05-02T18:52:58.400Z","tsv":"'-02':497 '-100':551,634 '-24':498 '-39':545,625 '-69':547,628 '-89':549,631 '/studyvault':159,168 '0':135,544,620,621,624,639,644,647 '1':15,154,157,244,322,400,426,495 '12':390 '2':23,162,205,255,330,410,494,522 '2026':496 '3':29,166,270,319,355,415 '4':37,173,284,358,373,378,380 '40':546,627 '5':185,397 '6':423 '70':548,630 '90':550,633 'across':535 'ad':677 'add':439,445 'aggreg':100 'allow':371 'also':335 'alway':271,684,710 'analyz':220 'answer':406,408,412,436,456,471,505,706 'area':32,86,91,113,247,254,258,263,268,283,287,308,334,338,421,431,528,540,603,604,617,649,651,657,665 'area-nam':85 'ask':206,662 'askuserquest':211,299,377 'assess':19 'attempt':94,118,459,475,487,670 'attempts/correct':534 'awar':227 'back':478 'badg':543 'base':48,240,593 'blind':71 'bound':132 'build':224,238,320 'chang':461,476 'char':391 'check':38 'choos':216,273 'column':615 'communic':717 'compact':79,565 'concept':62,84,92,104,109,116,130,337,343,428,430,438,455,470,486,492,509,531,537,592,616,643,646,652,667,669,679,713 'concept-bas':591 'concis':304,413 'confus':511 'content':150 'context':226,348 'context-awar':225 'correct':119,405,457,460,488,520,605,671,705 'count':120,561 'craft':356,366 'creat':189,576,655,688 'critic':362 'cumul':558,640 'current':242 'dashb':43 'dashboard':78,98,169,172,193,222,234,524,563,574,579,590,716 'data':553 'date':121 'descript':305,392,697 'detail':573,600,609 'detect':136,138 'diagnost':18,250 'directori':165 'discov':69,155 'doesn':57 'drill':30,261,332 'english':587 'equival':453 'error':96,124,446,465,481,499,507,675 'exact':357 'exampl':585,663 'exist':179,199,248,259,454,469,580 'explain':399 'explan':414 'fair':626 'file':75,105,110,149,180,325,425,429,532,598,653,714 'filenam':581 'find':171,341 'first':659 'follow':360 'forev':108 'format':484,501 'found':175,188 'glob':158,167 'goal':65 'good':629 'grade':398,709 'grow':126 'hard':291 'hard-mod':290 'header':301,386 'help':67 'hint':370,395,692 'histori':468 'identifi':33 'import':682 'includ':249,260,272,289,691 'increment':458,474 'inform':200 'interact':2 'keep':464 'key':517 'know':55,59 'knowledg':22 'label':695 'lang':145,152,584 'languag':137,141,184,721 'last':489,614,672 'learn':8,40,467,589 'let':213 'level':63,608 'link':102,597,618 'list':163 'local':452,582 'log':568 'mandatori':209 'map':416 'markdown':324,485,506,588,664 'master':632 'max':389 'md':88,339,432 'messag':144 'metacognit':594 'miss':681 'mix':515 'mode':292 'must':314 'name':87,265,493,510,666 'neutral':393 'never':690,698 'new':347,437 'note':97,125,447,466,482,500,508,676 'number':101 'obsidian':6 'one':111,610 'option':228,239,251,264,276,294,310,381,694,703 'output':147 'overview':80 'path':181 'per':90,112,527,571,612,656 'per-area':89,526 'per-quest':570 'phase':134,153,204,318,372,396,422 'pick':281 'point':518 'posit':707 'present':230,295,374 'preserv':178 'previous':35 'proceed':317 'profici':81,235,542,601 'progress':41 'project':161 'proport':127 'q1':387 'question':74,321,354,359,368,379,404,418,435,557,572,638,660,689 'quiz':3,47,375 'quiz-bas':46 'random':704 'rate':559,607,641 'read':176,232,323,336,363,685 'recalcul':525 'recommend':700 'references/quiz-rules.md':361,364,686 'regardless':182 'remind':683 'repeat':351 'rephras':344 'resolv':645 'result':402,409 'review':26,293 'row':440,611 'section':164,275,328,613 'sections/topics':28 'see':192,596 'select':315,385 'session':36,207,302,567 'show':306,401 'singl':384 'single-select':383 'skill':45 'skill-tutor' 'small':107 'source-bevibing' 'specif':27 'spot':72 'stat':83,529,555,636 'state':243 'status':95,122,462,477,491,674 'stay':106,564 'stop':203 'strongest':650 'structur':76 'studi':24 'studyvault':7,77,198 'sum':533 'tabl':82,236,403,442,483 'take':16 'target':252,311,327 'templat':191,194,575,654 'test':131,490,673 'topic':388 'topic-agent-skills' 'topic-claude' 'topic-claude-code' 'topic-claude-skills' 'topic-skill' 'topic-skills' 'topic-skillsmp' 'total':556,619,637 'track':51,93,114,595 'tracker':668 'tutor':1,4,44,49 'type':208 'understand':521 'uniqu':129 'unmeasur':246,622,635 'unresolv':342,642 'unresolved/resolved':560 'updat':424,427,480,523,541,554,711 'use':9,210,376,699 'user':12,54,68,139,201,215,279,313,407,514,719 'vault':156 'want':13 'weak':31,257,262,333,623 'weakest':267,648 'weakest/strongest':562 'workflow':133 'wrong':411,444,472,504,606 'zero':369 '메모':450 '오답':449","prices":[{"id":"c00222ad-b7a6-44b9-8b5d-a513cea85b7a","listingId":"c4b84c57-3a38-422b-94c7-941401e9cbd4","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"bevibing","category":"tutor-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:56:59.498Z"}],"sources":[{"listingId":"c4b84c57-3a38-422b-94c7-941401e9cbd4","source":"github","sourceId":"bevibing/tutor-skills/tutor","sourceUrl":"https://github.com/bevibing/tutor-skills/tree/main/skills/tutor","isPrimary":false,"firstSeenAt":"2026-04-18T21:56:59.498Z","lastSeenAt":"2026-05-02T18:52:58.400Z"}],"details":{"listingId":"c4b84c57-3a38-422b-94c7-941401e9cbd4","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"bevibing","slug":"tutor","github":{"repo":"bevibing/tutor-skills","stars":822,"topics":["agent-skills","claude","claude-code","claude-skills","skill","skills","skillsmp"],"license":"mit","html_url":"https://github.com/bevibing/tutor-skills","pushed_at":"2026-02-28T14:41:09Z","description":"A Claude Code skill that turns PDFs, docs, and codebases into Obsidian study vaults","skill_md_sha":"aeec70d843344d5992f4ba042a693b40f11a8c65","skill_md_path":"skills/tutor/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/bevibing/tutor-skills/tree/main/skills/tutor"},"layout":"multi","source":"github","category":"tutor-skills","frontmatter":{"name":"tutor","description":"Interactive 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 dashboard, or says things like \"quiz me\", \"test me\", \"let's study\", \"/tutor\", \"학습\", \"퀴즈\", \"평가\"."},"skills_sh_url":"https://skills.sh/bevibing/tutor-skills/tutor"},"updatedAt":"2026-05-02T18:52:58.400Z"}}