tutor — Claude Code skill: what it does, how to install
Interactive quiz tutor tests knowledge against Obsidian StudyVault notes and tracks concept mastery in a markdown dashboard.
npx skills add bevibing/tutor-skills --skill tutor -a claude-codeWhat tutor does
The skill scans for a StudyVault/ directory in your project workspace and reads markdown notes across sections. It generates a 4-question multiple-choice quiz adhering to rules that forbid hints in question text or options. Before quizzing, it prompts you to choose a session type: run a diagnostic, drill known weak spots, or pick a specific section.
Every answered quiz updates both an aggregated dashboard and area files in concepts/{area}.md. The tracker logs attempt counts, dates, status badges, and error notes explaining specific misunderstandings. If no StudyVault directory exists in the workspace, the skill stops immediately.
What it helps with
- discover blind spots in Obsidian study notes
- drill unresolved concepts flagged in previous quiz sessions
- track mastery rates across subject areas in a markdown dashboard
- run diagnostic assessments across unmeasured learning sections
Example prompts for the agent
- quiz me on my study vault notes
- /tutor
- let's drill my weak areas from the dashboard
How to install tutor
1Skills CLI (Vercel)
npx skills add bevibing/tutor-skills --skill tutor -a claude-code2Manually: put the files in place
~/.claude/skills/tutor/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/tutor/
1Skills CLI (Vercel)
npx skills add bevibing/tutor-skills --skill tutor -a codex2Manually: put the files in place
.agents/skills/tutor/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add bevibing/tutor-skills --skill tutor -a cursor2Manually: put the files in place
.cursor/skills/tutor/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install bevibing/tutor-skills tutor2Manually: put the files in place
.github/skills/tutor/SKILL.md1Skills CLI (Vercel)
npx skills add bevibing/tutor-skills --skill tutor -a gemini-cli2Platform CLI
gemini skills install https://github.com/bevibing/tutor-skills --path skills/tutorManually: put the files in place
.devin/skills/tutor/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add bevibing/tutor-skills --skill tutor -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about tutor
How to install tutor in Claude Code?
Run npx skills add bevibing/tutor-skills --skill tutor -a claude-code.
What does the tutor skill do?
It crafts 4-question quizzes from your StudyVault markdown notes, grades answers, and logs concept-level progress in local tracker files.
What happens if StudyVault is missing?
The skill searches for **/StudyVault/ on launch; if missing, it notifies you and halts without creating files.
Source text
SKILL.md · MIT
---
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", "학습", "퀴즈", "평가".
---
# Tutor Skill
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.
## File Structure
```
StudyVault/
├── *dashboard* ← Compact overview: proficiency table + stats
└── concepts/
├── {area-name}.md ← Per-area concept tracking (attempts, status, error notes)
└── ...
```
- **Dashboard**: Only aggregated numbers. Links to concept files. Stays small forever.
- **Concept files**: One per area. Tracks each concept with attempts, correct count, date, status, and error notes. Grows proportionally to unique concepts tested (bounded).
## Workflow
### Phase 0: Detect Language
Detect user's language from their message → `{LANG}`. All output and file content in `{LANG}`.
### Phase 1: Discover Vault
1. Glob `**/StudyVault/` in project
2. List section directories
3. Glob `**/StudyVault/*dashboard*` to find dashboard
4. If found, read it. Preserve existing file path regardless of language.
5. If not found, create from template (see Dashboard Template below)
If no StudyVault exists, inform user and stop.
### Phase 2: Ask Session Type
**MANDATORY**: Use AskUserQuestion to let the user choose what to do. Analyze the dashboard to build context-aware options, then present them.
Read the dashboard proficiency table and build options based on current state:
1. If unmeasured areas (⬜) exist → include "Diagnostic" option targeting those areas
2. If weak areas (🟥/🟨) exist → include "Drill weak areas" option naming the weakest area(s)
3. Always include "Choose a section" option so the user can pick any area
4. If all areas are 🟩/🟦 → include "Hard-mode review" option
Present these as an AskUserQuestion with header "Session" and concise descriptions showing which areas each option targets. The user MUST select before proceeding.
### Phase 3: Build Questions
1. Read markdown files in target section(s)
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)
3. Craft exactly 4 questions following `references/quiz-rules.md`
**CRITICAL**: Read `references/quiz-rules.md` before crafting ANY question. Zero hints allowed.
### Phase 4: Present Quiz
Use AskUserQuestion:
- 4 questions, 4 options each, single-select
- Header: "Q1. Topic" (max 12 chars)
- Descriptions: neutral, no hints
### Phase 5: Grade & Explain
1. Show results table (question / correct answer / user answer / result)
2. Wrong answers: concise explanation
3. Map each question to its area
### Phase 6: Update Files
#### 1. Update concept file (`concepts/{area}.md`)
For each question answered:
- **New concept**: Add row to table + if wrong, add error note under `### 오답 메모` (or localized equivalent)
- **Existing 🔴 concept answered correctly**: Increment attempts & correct, change status to 🟢, keep error note (learning history)
- **Existing 🟢 concept answered wrong again**: Increment attempts, change status back to 🔴, update error note
Table format:
```markdown
| Concept | Attempts | Correct | Last Tested | Status |
|---------|----------|---------|-------------|--------|
| concept name | 2 | 1 | 2026-02-24 | 🔴 |
```
Error notes format (only for wrong answers):
```markdown
### Error Notes
**concept name**
- Confusion: what the user mixed up
- Key point: the correct understanding
```
#### 2. Update dashboard
- Recalculate per-area stats from concept files (sum attempts/correct across all concepts in that area)
- Update proficiency badges: 🟥 0-39% · 🟨 40-69% · 🟩 70-89% · 🟦 90-100% · ⬜ no data
- Update stats: total questions, cumulative rate, unresolved/resolved counts, weakest/strongest
Dashboard stays compact — no session logs, no per-question details.
## Dashboard Template
Create when no dashboard exists. Filename localized to `{LANG}`. Example in English:
```markdown
# Learning Dashboard
> Concept-based metacognition tracking. See linked files for details.
---
## Proficiency by Area
| Area | Correct | Wrong | Rate | Level | Details |
|------|---------|-------|------|-------|---------|
(one row per section, last column = [[concepts/{area}]] link)
| **Total** | **0** | **0** | **-** | ⬜ Unmeasured | |
> 🟥 Weak (0-39%) · 🟨 Fair (40-69%) · 🟩 Good (70-89%) · 🟦 Mastered (90-100%) · ⬜ Unmeasured
---
## Stats
- **Total Questions**: 0
- **Cumulative Rate**: -
- **Unresolved Concepts**: 0
- **Resolved Concepts**: 0
- **Weakest Area**: -
- **Strongest Area**: -
```
## Concept File Template
Create per area when first question is asked. Example:
```markdown
# {Area Name} — Concept Tracker
| Concept | Attempts | Correct | Last Tested | Status |
|---------|----------|---------|-------------|--------|
### Error Notes
(added as concepts are missed)
```
## Important Reminders
- ALWAYS read `references/quiz-rules.md` before creating questions
- NEVER include hints in option labels or descriptions
- NEVER use "(Recommended)" on any option
- Randomize correct answer position
- After grading, ALWAYS update both concept file AND dashboard
- Communicate in user's language
© bevibing · MIT · bevibing/tutor-skills