Skip to content
Back to skills

Quiz Me

ASecurity

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

  • 9 stars
  • 0 votes
  • 4 copies
  • 38 views
  • Added September 12, 2026
educationgogit

Security analysis

A100/100

Scanned September 12, 2026

npx -y skills add yarikleto/claude-teacher-plugin --skill quiz-me --agent claude-code

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.

Security grade badge for Quiz Me
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/yarikleto-quiz-me/badge)](https://www.skillsdirectory.com/skills/yarikleto-quiz-me)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…