Use when the user wants to be quizzed, tested, or asked questions on any topic — programming concepts, protocols, algorithms, tools, or any subject they are studying
Installs into .claude/skills of the current project.
Are you the author of Quiz Me?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/yarikleto-quiz-me)
---
name: quiz-me
description: Use when the user wants to be quizzed, tested, or asked questions on any topic — programming concepts, protocols, algorithms, tools, or any subject they are studying
argument-hint: "[topic]"
---
Requested topic/task: $ARGUMENTS
Before accessing education data, read `${CLAUDE_PLUGIN_ROOT}/references/education-data.md`. Resolve every `<education-db>` below using that contract. Current session ID: `${CLAUDE_SESSION_ID}`.
# Quiz Me
Interactive quiz that tests understanding through a mix of multiple-choice and open-ended questions. All results are saved to the global education DB.
## How to Use
Invoke with `/claude-teacher:quiz-me [topic]` or just `/claude-teacher:quiz-me` and specify the topic when asked.
Examples: `/claude-teacher:quiz-me TCP sockets`, `/claude-teacher:quiz-me git`, `/claude-teacher:quiz-me sorting algorithms`
## Quiz Flow
### Setup
1. Read `<education-db>/dashboard.json` — check topic statuses
2. Read `<education-db>/student.json` — adapt to learning style
3. If a topic was given, read `<education-db>/topics/<topic>.json` if it exists — check for unresolved misconceptions and previous scores
4. If no topic given, pick from: first any topics with `next_review <= today`, then `weak` topics, then `learned` topics
5. Also check project-local `memory/knowledge_gaps.md` for covered topics
### Question Loop
```
Determine topic → Check for unresolved misconceptions → Ask question → Wait for answer → Evaluate → (30% chance: ask "explain your thinking") → Record result → More questions? → Score summary → Save to DB
```
## Rules
1. **One question per message.** Never batch questions.
2. **Mix formats:** Alternate between multiple-choice (4 options via `AskUserQuestion` — arrow key selection) and open-ended (plain text). Use multiple-choice for factual recall, open-ended for conceptual understanding.
3. **Grade fairly:** For open-ended answers, accept correct reasoning even if wording is imprecise. If partially correct, say what was right and what was missing.
4. **Explain after every answer:** Whether right or wrong, give a brief explanation of WHY the correct answer is correct. This is the learning moment. **Use WebSearch to verify your explanation** — never hallucinate facts in quiz explanations. Include a source link when citing specific facts.
5. **Adapt difficulty:** Start medium. If the user gets 2+ right in a row, increase difficulty. If they get 2+ wrong, ease up and cover fundamentals.
6. **Only quiz on covered material:** NEVER ask about topics that haven't been taught yet. Check `dashboard.json` — only topics with status `weak`, `learned`, or `solid` are fair game. If a topic has no entry or hasn't been explained, it's off limits. If no quizzable topics exist: "Nothing to quiz on yet — let's learn something first!"
7. **Prioritize misconceptions:** If the topic file has unresolved misconceptions, craft questions that specifically test those misunderstandings FIRST.
8. **"Explain your thinking" check:** ~30% of correct answers, ask the student to explain WHY their answer is right. If their reasoning is wrong despite the correct answer, record it as a misconception.
9. **Track score:** Keep a running tally (e.g., "3/5 correct"). Show final summary when the quiz ends.
10. **Let the user control pace:** The quiz ends when the user says stop, or after 10 questions if no limit was specified. Ask "Continue?" after every 5 questions.
11. **Use context:** If inside a project directory, read relevant files to generate questions about the actual codebase — not just generic textbook questions.
12. **No trick questions.** Every question should teach something useful.
## Question Format
**Multiple choice — use `AskUserQuestion` tool:**
For every multiple-choice question, use the `AskUserQuestion` tool so the student can select answers with arrow keys. If the tool is unavailable, ask the same question with plain-text options and wait for an answer.
```
AskUserQuestion({
questions: [{
question: "Q3 (medium): What system call creates a new socket in C?",
header: "Q3",
multiSelect: false,
options: [
{ label: "a) connect()", description: "Choice A" },
{ label: "b) socket()", description: "Choice B" },
{ label: "c) bind()", description: "Choice C" },
{ label: "d) listen()", description: "Choice D" }
]
}]
})
```
The student selects with arrow keys and Enter — no typing needed. Option descriptions must be neutral; explain the choices after the student answers.
**Rules for AskUserQuestion quiz options:**
- Always provide exactly 4 options for multiple choice
- Randomize correct answer position (don't always put it in slot b)
- Use neutral descriptions that do not reveal correctness or repeat the question definition. Explain alternatives only after grading
- The `header` field should be the question number (e.g., "Q1", "Q2")
- If the student selects "Other" (custom input), treat it as an open-ended answer
**Open-ended — use plain text:**
```
Q4 (medium): In your own words, explain why FTP uses two separate TCP connections instead of one.
```
Open-ended questions are printed as plain text — the student types their answer freely.
## After Each Answer
```
Correct! [or] Not quite.
[Brief explanation of the correct answer and why it matters]
Score: 3/4
```
If the student got it wrong, record the misconception immediately in the topic file.
## Score Summary & DB Update
At the end of the quiz:
**1. Show summary:**
```
── Quiz Complete ──────────────────
Topic: [topic]
Score: 7/10 (70%)
Depth: [surface → working] (promoted!)
Strong areas: [what they got right]
Review these: [concepts they struggled with]
Misconceptions found: [list any new ones]
Next review: [calculated date]
───────────────────────────────────
```
**2. Save quiz record** to `<education-db>/quizzes/[date]_[topic-slug]_[quiz-id].json`:
```json
{
"quiz_id": "[stable UUID for this attempt]",
"session_id": "${CLAUDE_SESSION_ID}",
"completed": true,
"date": "[today]",
"topic": "[topic-slug]",
"questions": [
{
"question": "...",
"type": "multiple_choice|open_ended",
"student_answer": "...",
"correct_answer": "...",
"correct": true,
"reasoning_check": false,
"reasoning_was_sound": null
}
],
"score": 70,
"status_before": "learned",
"status_after": "learned",
"depth_before": "surface",
"depth_after": "working",
"notes": "..."
}
```
If stopped early, save the attempt as `completed: false` and report answered questions without changing mastery or the review interval. Avoid dividing by zero if no questions were answered.
**3. Update topic file** `<education-db>/topics/[topic-slug].json`:
- Update `quiz_scores` array, `last_reviewed`, `status`, `depth`
- Add any new misconceptions
- Recalculate `next_review` using spaced repetition:
- Score >=80%: double `review_interval_days`, set `next_review` accordingly
- Score <50%: reset interval to 1 day, demote to `weak`
- Score 50-79%: keep current interval
**4. Update dashboard** `<education-db>/dashboard.json`:
- Update topic entry, recalculate `stats`, `total_quizzes`, `average_score`
**5. Update project-local** `memory/knowledge_gaps.md` if it exists.
**6. Append to session log** `<education-db>/sessions/[date].jsonl`:
```jsonl
{"time": "[now]", "event": "quiz", "topic": "[slug]", "score": 70, "passed": false, "misconceptions_found": 1}
```
## Priority Order for Questions
1. **Unresolved misconceptions** on the topic (highest priority — targeted questions)
2. Topics marked **Weak** in dashboard (need remediation)
3. Topics marked **Learned** with `next_review <= today` (due for spaced repetition)
4. Topics marked **Learned** that haven't been verified at `working` depth
5. Topics marked **Solid** — for reinforcement and deeper questions
## Integration with Other Skills
- **`/claude-teacher:ascii [concept]`** — if a question involves a visual concept and the student got it wrong, offer to illustrate it.
- **`/claude-teacher:challenge [topic]`** — for hands-on practice after quiz identifies weak areas.
- **`/claude-teacher:progress`** — student can check their overall dashboard.
- **`/claude-teacher:save-progress`** — quiz results are auto-saved, but student can explicitly save mid-session.