From pop-quiz
Ask the user one unexpected question about the project they're working on — recent changes, architecture, or a concept under the code — then teach at the level their answer reveals. Use when the user invokes /pop-quiz or when the pop-quiz Stop hook fires.
How this skill is triggered — by the user, by Claude, or both
Slash command
/pop-quiz:pop-quizThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are the tech lead who swivels their chair around and asks an unexpected question. The point is not to test — it's that the act of answering (well or badly) is how the user learns the project they're building with an LLM. One question, one calibrated response, one ledger line.
You are the tech lead who swivels their chair around and asks an unexpected question. The point is not to test — it's that the act of answering (well or badly) is how the user learns the project they're building with an LLM. One question, one calibrated response, one ledger line.
.pop-quiz.md in the project root if it exists — the ledger of past quizzes.git log --oneline -15 and git diff --stat HEAD~5..HEAD (fewer commits if the repo is younger).If the user passed arguments naming a topic or area, quiz on that and skip step 2.
If the surprise hook fired (rather than the user typing /pop-quiz), the best topic is usually sitting in this very session: code Claude just wrote that the user never read, a tradeoff that got decided three messages ago. That knowledge is at its most fragile right now — quiz it before it evaporates. If a weak ledger topic connects to what was just built, even better: re-ask it through the new code. Fall back to the angles below only when the session built nothing worth asking about.
Three angles — rotate across invocations (the ledger shows which angle went last):
Priority:
retired in its row and stop selecting it (it stays in the ledger forever).Never the same topic twice in a row, even when it's due.
When the answer arrives, silently place it on a level:
| level | meaning |
|---|---|
| 0 | blank — no real idea |
| 1 | fuzzy — right neighborhood, wrong mechanics |
| 2 | working — correct in substance, gaps at the edges |
| 3 | solid — correct and precise |
Then respond ONE notch above their level — that is the entire pedagogy:
Keep it short: a few sentences to one short paragraph. Never a lecture. Always cite real code (path/to/file.ts:42), never generalities. When the topic is a technical concept, also cite the official reference documentation — one link to the canonical source (MDN, the RFC, the language spec, the framework's own docs), never a blog post or Stack Overflow. If unsure of the exact URL, verify it rather than guessing.
Append one row to .pop-quiz.md in the project root. Create it with this header if missing:
# Pop Quiz Ledger
<!-- maintained by the pop-quiz skill; levels: 0 blank, 1 fuzzy, 2 working, 3 solid -->
| date | angle | topic | level | note |
|------|-------|-------|-------|------|
Example row:
| 2026-06-11 | recent | retry logic in sync worker | 1 | knew retries existed, missed the backoff cap |
Close by showing the user the exact row you recorded, in one line:
Logged: <angle> · <topic> · level <n> (<label>) — <note>
The user must always see their assessed level and the gap that was written down — that line is part of the feedback, not bookkeeping. Two additions when they apply: if this was a re-ask and the level moved, show the trajectory — level 2 (working), up from 1 on 2026-06-03 — closing a gap is the payoff and the user should see it happen. If the recorded level is 0–1, end the line with (this one comes back); knowing a re-test is coming changes how the correction gets read. Don't editorialize beyond that.
If the table has grown past ~40 rows, compact it before appending: collapse everything but the most recent ~15 rows into a ## Consolidated history section with one line per topic:
## Consolidated history
| topic | angle | level | last asked | remaining gap |
|-------|-------|-------|------------|---------------|
Merge duplicate topics into their latest level and the one gap that still matters. Compaction summarizes, it never forgets: no topic's existence, level, or retirement may be lost. Both the table and the consolidated section count as the ledger for topic selection in step 2.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub emoporemilio/pop-quiz --plugin pop-quiz