vault backup: 2026-04-14 14:01:52
This commit is contained in:
166
.obsidian/plugins/skills/tutor/SKILL.md
vendored
Normal file
166
.obsidian/plugins/skills/tutor/SKILL.md
vendored
Normal file
@@ -0,0 +1,166 @@
|
||||
---
|
||||
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
|
||||
56
.obsidian/plugins/skills/tutor/references/quiz-rules.md
vendored
Normal file
56
.obsidian/plugins/skills/tutor/references/quiz-rules.md
vendored
Normal file
@@ -0,0 +1,56 @@
|
||||
# Quiz Design Rules
|
||||
|
||||
## Zero-Hint Policy (CRITICAL)
|
||||
|
||||
Every question must be answerable ONLY by someone who actually knows the material.
|
||||
|
||||
1. **Option descriptions**: NEVER reveal correctness
|
||||
- BAD: `label: "stderr"`, `description: "Error output stream used by Cloud Run for error classification"`
|
||||
- GOOD: `label: "stderr"`, `description: "Standard error stream"`
|
||||
|
||||
2. **No "(Recommended)" tag** on any option
|
||||
|
||||
3. **Randomize** correct answer position — never always first or last
|
||||
|
||||
4. **Question phrasing**: Ask about behavior/purpose/output, don't hint at the answer
|
||||
- BAD: "Which error stream does error() use?"
|
||||
- GOOD: "Where does error() method output go?"
|
||||
|
||||
5. **Plausible distractors**: Wrong options must be real concepts from the domain, representing common misconceptions
|
||||
|
||||
## Question Types
|
||||
|
||||
1. **Factual recall**: "What HTTP status code is returned when...?"
|
||||
2. **Conceptual understanding**: "Why does the system use X pattern?"
|
||||
3. **Behavioral prediction**: "What happens when X fails?"
|
||||
4. **Comparison/distinction**: "What is the difference between X and Y?"
|
||||
5. **Debugging scenario**: "Given this error, what is the most likely cause?"
|
||||
|
||||
## Difficulty Balancing
|
||||
|
||||
- Diagnostic: easy 40%, medium 40%, hard 20%
|
||||
- Weak-area drill: medium 30%, hard 70%
|
||||
- Review: all levels evenly
|
||||
|
||||
## Drilling Unresolved Concepts
|
||||
|
||||
When targeting 🔴 concepts from concept files:
|
||||
- Do NOT repeat the exact same question — rephrase in a new context
|
||||
- Test the same underlying knowledge from a different angle
|
||||
- E.g., if user confused "400 vs 422", ask a scenario question where they must choose the correct status code for a new situation
|
||||
|
||||
## AskUserQuestion Format
|
||||
|
||||
- 4 questions per round, 4 options each, single-select
|
||||
- Header: max 12 chars, "Q1. Topic"
|
||||
|
||||
## File Update Protocol
|
||||
|
||||
After grading:
|
||||
1. Update `concepts/{area}.md` — add/update concept rows + error notes
|
||||
2. Update dashboard — recalculate area stats from concept files
|
||||
3. Badges: 🟥 0-39% · 🟨 40-69% · 🟩 70-89% · 🟦 90-100% · ⬜ no data
|
||||
|
||||
## Language Rule
|
||||
|
||||
All file content and output in the user's detected language. Badge emojis are universal.
|
||||
Reference in New Issue
Block a user