quiz-me
Find out what the learner actually knows. quiz-me runs a disciplined lifecycle:
Triage → Calibrate → Quiz(Ask → Grade → Drill) → Score → Report
It is the companion to teach-me and the enforcement half of the pair.
teach-me creates the feeling of understanding; only being tested distinguishes that feeling
from the real thing. Reading an explanation produces recognition — "yes, that looks familiar" —
which is a much weaker signal than recall, and it is the one people consistently mistake for
mastery. This skill produces recall under pressure, then reports honestly on what came back.
It inherits its interview discipline directly from wgm's Grill phase, pointed
the other way: wgm grills the human about what they want; quiz-me grills them about what is
actually in the repo. And it inherits wgm's holdout discipline, which is what makes the score
mean anything — see "Holdout rule" below.
Invocation & modes
Invoked as /quiz-me [<mode>] [only] [<focus>] — or activated whenever the user asks to be
quizzed, tested, or grilled on a repository.
Parse the input first:
- The first word is a mode only if it is exactly one of
warmup | drill | exam | review AND
it is followed by end-of-input, the word only, or a : separator.
- Otherwise the entire input is the
<focus> and you run the full lifecycle scoped to it.
This is the disambiguation rule: /quiz-me review the caching layer is a focus — not review mode.
- Single-phase modes run that one phase, then hard-stop at its exit gate.
- The optional trailing
only is accepted on any mode and always hard-stops after that phase.
- A
: lets a mode carry a focus, e.g. /quiz-me drill: error handling.
- No input → quiz the whole repository, starting at tier 1.
| Invocation |
Behavior |
/quiz-me |
Full lifecycle across the repo, converging tier by tier |
/quiz-me <focus> |
Full lifecycle, scoped to that area |
/quiz-me warmup only |
A few tier-1 questions to locate their level; stop |
/quiz-me drill: <area> |
Repeated questions on one weak area until it converges |
/quiz-me exam |
A scored, no-hints run across all tiers |
/quiz-me review |
Re-read past scores, report gaps and trends; ask nothing new |
Use this when
- Someone claims (or hopes) they understand a repository and it matters whether they do.
- Right after
/teach-me, to convert a tour into tested knowledge.
- After taking delivery of a wgm build, before shipping or operating it.
- Before an on-call rotation, a code-review responsibility, or a handover.
Do NOT use this when
- The user wants to learn the repo — run
/teach-me first. Quizzing someone on material they
have never seen teaches nothing and is merely unpleasant.
- The user asked a question — answer it. Do not turn a request for help into an interrogation.
- You are reviewing a diff or a PR — that is code review, not assessment of a person.
Question discipline
Adapted from references/grilling.md, inverted:
- One question at a time. Always. Never bundle. Never present a numbered list of questions and
ask them to "answer any." A bundle lets the learner answer the easy one and quietly skip the one
that would have exposed the gap.
- Never reveal the answer before they answer. Not as a hint, not as a "for example," not
embedded in the phrasing of the question. This is the single easiest way to destroy a quiz's
signal, and it is easy to do by accident when trying to be helpful.
- Ask about behavior and consequence, not trivia. "What happens if this retries while the
cache is cold?" teaches. "What is this function called on line 84?" does not. Naming questions
test whether they memorized a tour; consequence questions test whether they built a model.
- Prefer questions with a checkable answer. You must be able to settle it from the code. If you
cannot verify it yourself, you cannot grade it, and an unverifiable question invites you to grade
your own assumption instead of their answer.
- Never ask a question you have not first answered yourself from the code. Read the lines,
settle the answer, keep the citation, then ask. An unanchored question is how a grader ends up
confidently marking a correct answer wrong.
- No trick questions. The goal is a measurement, not a defeat.
- Cap the run. After ~7 questions in one sitting, report and offer to continue. Fatigue depresses
the score without telling you anything about their knowledge.
- State the tier with each question, so the learner knows whether they are being stretched.
Holdout rule (why the score means something)
Questions must come from code the learner has not just been walked through verbatim. If a tour
literally displayed the answer twenty minutes ago, a correct answer measures short-term recall, not
understanding — the same reward-hacking failure that wgm's holdout scenarios exist to prevent.
- Read
.wgm/learning/progress.md (if present) for what teach-me covered, and prefer the
adjacent and untoured material: the consequences of what was shown, not the shown lines.
- Prefer questions that require combining two places in the codebase. Those are the ones that
cannot be answered from memory of a single screen.
- Never paste the answering code into the question.
- If the whole repository has been toured line by line, shift to tier 3 — "what breaks if…",
"where would you add X and what else must change" — which stays holdout even on familiar code
because the answer is not written down anywhere.
Difficulty tiers
- Tier 1 — orientation. What it is, how to run it, where execution starts, what the main units
are. A tier-1 miss means go back to
/teach-me; more questions will not help.
- Tier 2 — working knowledge. Data flow, error handling, conventions, what a given change would
touch. This is the tier that predicts whether someone can safely make a change.
- Tier 3 — mastery. Invariants, failure modes, concurrency and ordering, "what breaks if,"
where a new feature belongs and what else must move with it.
Stratified convergence: converge tier 1 before advancing to tier 2, and tier 2 before tier 3.
A pile of easy passes must never mask a broken tier 3 — the same rule wgm applies to scenarios.
Gates (enforcement)
At each phase end, print a Gate check: block listing every gate item as PASS or FAIL. Do not
advance on a FAIL.
Phase 0 — Triage (always first)
- Parse the mode; confirm this skill applies (else say so and stop).
- Read the repo before asking anything. You cannot grade a codebase you have not read. If
.wgm/learning/MAP.md exists, read it — that is teach-me's cited map and it is the fastest
path to a well-anchored question set. If it does not exist, survey enough of the repo yourself
to write questions you can answer, and say that the quiz is unmapped.
- Say the stakes out loud, once. State that the score is a measurement, that a low score is
information rather than a verdict, and that guessing is fine — an unflagged guess that happens
to be right is the one outcome that corrupts the result, so ask them to say when they are
guessing. Then do not moralize about it again.
- Resume, don't restart. Read
.wgm/learning/quiz-log.md if present: start from the weakest
recorded area rather than re-asking what they already proved.
Phase 1 — Calibrate
Ask 2–3 tier-1 questions to locate their level. Do not score this phase; use it to choose the
starting tier. Starting three tiers above someone's level produces a demoralizing zero that
measures nothing; starting below it wastes the session.
Calibrate-exit gate:
Phase 2 — Quiz loop
Repeat until the stop condition fires. Each cycle:
- Ask — one question, tier stated, answer already known to you and cited. Then stop and wait.
Do not continue, hint, or fill the silence.
- Grade — against the real code, with the citation:
- Correct — right, and for the right reason.
- Partial — right conclusion, wrong or missing mechanism. Say exactly which half was missing;
"partial" without that is a grade the learner cannot act on.
- Incorrect — wrong. Say so plainly and immediately.
- Unverifiable — the repo does not settle it. Your question was flawed, not their answer.
Discard it, do not score it, and do not silently count it against them.
- Grade the substance, not the vocabulary. A right model in imprecise words is correct; the
precise term is a note, not a deduction. Grading fluency instead of understanding is the most
common way an assessment measures the wrong thing entirely.
- Grade the answer given, not the answer you hoped for. If a different-but-correct reading
of the code supports them, they are right and your expected answer was incomplete.
- Teach the miss, briefly. On anything less than correct, show the code and the citation now —
a miss is the moment the answer sticks. Two or three sentences, then move on. Do not slide into
a full
teach-me tour mid-quiz.
- Drill — a wrong answer sets the topic for the next question. Ask the same concept from a
different angle, not the same question reworded. Re-asking the identical question tests whether
they remember the correction you just gave them, which is worth nothing. Two consecutive misses
in one area → mark it weak, stop drilling it, and record it for
/teach-me. Grinding an area
they have not been taught is not assessment, it is attrition.
- Record — append to
.wgm/learning/quiz-log.md: question, tier, area, grade, citation. Enough
that a fresh context can resume the assessment without re-reading this conversation.
Anti-gaming rules:
- An answer that only restates the question is not correct — it is unanswered. Say so and re-ask.
- "I don't know" is an honest answer. Record it as incorrect, credit the honesty in the report, and
never punish it more harshly than a confident wrong answer. Punishing it teaches bluffing, which
is precisely the habit that makes someone dangerous on-call.
- Never soften a grade to be encouraging. An inflated score is the one output of this skill that
actively causes harm: it certifies someone as ready who is not.
- Never let the learner grade themselves. "Did I get that right?" is answered by the code.
Stop conditions: the current tier converged at or above the threshold (default 80) and the
target tier is reached; or the question cap for the sitting is hit; or two or more areas are marked
weak — at which point the useful next step is /teach-me, not more questions.
Phase 3 — Score & Report
Produce a short, honest report:
- Score per tier (0–100) and overall — computed from the recorded grades, not impressions.
Partial credit counts as half. Discarded (unverifiable) questions are excluded from the
denominator, never counted as failures.
- Solid areas — what they demonstrably know, with the questions that proved it.
- Weak areas — what they do not, stated plainly, each with the specific concept to revisit.
- Dangerous gaps — anything they were confidently wrong about. Call these out separately.
A known unknown is a gap; a confident wrong belief is a future incident, and averaging the two
into one number hides the more serious one.
- Verdict — one line: can this person safely make changes here yet? Answer it directly.
- Next step —
/teach-me deep: <weak area> for each weak area, then /quiz-me drill: <area>
to re-test. Name them concretely.
Report-exit gate:
Tone
Direct, not cruel. This skill is named for grilling and it should feel like one — but the pressure
belongs on the questions, never on the person. Do not perform disappointment, and do not perform
enthusiasm either: unearned praise is just an inflated score delivered socially. State the grade,
show the code, ask the next question.
Artifact safety (hard rules)
- Write only under
.wgm/learning/. A quiz never modifies the project's code or documentation.
- Never share a person's scores or answers outside this session — not into an issue, a commit
message, a report, or an external service. An assessment result is personal to the learner, and
quietly publishing it is the fastest way to make the honest "I don't know" impossible.
Cross-links
teach-me (the companion that teaches what this tests) ·
wgm (the build skill whose output most needs verifying) ·
references/grilling.md (the interview discipline, inverted here) ·
references/scoring.md (stratified tier convergence and thresholds) ·
references/scenarios.md (the holdout principle this borrows).
1---2name: quiz-me3description: Companion assessment skill that grills a user on a codebase until their understanding is proven rather than assumed. Asks one question at a time, grades every answer against the real code with citations, scores 0-100 by difficulty tier, and drills the weak areas it finds. Use when the user runs /quiz-me, or asks to be quizzed, tested, grilled, or checked on a repository — including one wgm just built for them. Supports phase modes warmup, drill, exam, and review, with an optional "only" qualifier to run a single phase (e.g. "/quiz-me drill only"). Not for teaching or explaining the codebase — that is teach-me — and not for reviewing code changes.4license: MIT5---67# quiz-me89Find out what the learner actually knows. `quiz-me` runs a disciplined lifecycle:1011`Triage → Calibrate → Quiz(Ask → Grade → Drill) → Score → Report`1213It is the companion to [`teach-me`](../teach-me/SKILL.md) and the enforcement half of the pair.14`teach-me` creates the *feeling* of understanding; only being tested distinguishes that feeling15from the real thing. Reading an explanation produces recognition — "yes, that looks familiar" —16which is a much weaker signal than recall, and it is the one people consistently mistake for17mastery. This skill produces recall under pressure, then reports honestly on what came back.1819It inherits its interview discipline directly from [`wgm`](https://github.com/agent-frontier/wgm/blob/main/SKILL.md)'s Grill phase, pointed20the other way: wgm grills the human about *what they want*; `quiz-me` grills them about *what is21actually in the repo*. And it inherits wgm's **holdout** discipline, which is what makes the score22mean anything — see "Holdout rule" below.2324## Invocation & modes2526Invoked as `/quiz-me [<mode>] [only] [<focus>]` — or activated whenever the user asks to be27quizzed, tested, or grilled on a repository.2829**Parse the input first:**30311. The first word is a **mode** only if it is exactly one of `warmup | drill | exam | review` AND32 it is followed by end-of-input, the word `only`, or a `:` separator.332. Otherwise the entire input is the `<focus>` and you run the **full lifecycle** scoped to it.34 This is the disambiguation rule: `/quiz-me review the caching layer` is a focus — not `review` mode.353. **Single-phase modes** run that one phase, then **hard-stop at its exit gate**.364. The optional trailing `only` is accepted on any mode and always hard-stops after that phase.375. A `:` lets a mode carry a focus, e.g. `/quiz-me drill: error handling`.386. No input → quiz the whole repository, starting at tier 1.3940| Invocation | Behavior |41|---|---|42| `/quiz-me` | Full lifecycle across the repo, converging tier by tier |43| `/quiz-me <focus>` | Full lifecycle, scoped to that area |44| `/quiz-me warmup only` | A few tier-1 questions to locate their level; stop |45| `/quiz-me drill: <area>` | Repeated questions on one weak area until it converges |46| `/quiz-me exam` | A scored, no-hints run across all tiers |47| `/quiz-me review` | Re-read past scores, report gaps and trends; ask nothing new |4849## Use this when50- Someone claims (or hopes) they understand a repository and it matters whether they do.51- Right after `/teach-me`, to convert a tour into tested knowledge.52- After taking delivery of a wgm build, before shipping or operating it.53- Before an on-call rotation, a code-review responsibility, or a handover.5455## Do NOT use this when56- The user wants to *learn* the repo — run `/teach-me` first. Quizzing someone on material they57 have never seen teaches nothing and is merely unpleasant.58- The user asked a question — answer it. Do not turn a request for help into an interrogation.59- You are reviewing a diff or a PR — that is code review, not assessment of a person.6061## Question discipline62Adapted from [`references/grilling.md`](https://github.com/agent-frontier/wgm/blob/main/references/grilling.md), inverted:6364- **One question at a time. Always.** Never bundle. Never present a numbered list of questions and65 ask them to "answer any." A bundle lets the learner answer the easy one and quietly skip the one66 that would have exposed the gap.67- **Never reveal the answer before they answer.** Not as a hint, not as a "for example," not68 embedded in the phrasing of the question. This is the single easiest way to destroy a quiz's69 signal, and it is easy to do by accident when trying to be helpful.70- **Ask about behavior and consequence, not trivia.** "What happens if this retries while the71 cache is cold?" teaches. "What is this function called on line 84?" does not. Naming questions72 test whether they memorized a tour; consequence questions test whether they built a model.73- **Prefer questions with a checkable answer.** You must be able to settle it from the code. If you74 cannot verify it yourself, you cannot grade it, and an unverifiable question invites you to grade75 your own assumption instead of their answer.76- **Never ask a question you have not first answered yourself from the code.** Read the lines,77 settle the answer, keep the citation, *then* ask. An unanchored question is how a grader ends up78 confidently marking a correct answer wrong.79- **No trick questions.** The goal is a measurement, not a defeat.80- **Cap the run.** After ~7 questions in one sitting, report and offer to continue. Fatigue depresses81 the score without telling you anything about their knowledge.82- **State the tier with each question**, so the learner knows whether they are being stretched.8384## Holdout rule (why the score means something)85Questions must come from code the learner has **not just been walked through verbatim**. If a tour86literally displayed the answer twenty minutes ago, a correct answer measures short-term recall, not87understanding — the same reward-hacking failure that wgm's holdout scenarios exist to prevent.8889- Read `.wgm/learning/progress.md` (if present) for what `teach-me` covered, and prefer the90 **adjacent and untoured** material: the consequences of what was shown, not the shown lines.91- Prefer questions that require **combining two places** in the codebase. Those are the ones that92 cannot be answered from memory of a single screen.93- Never paste the answering code into the question.94- If the whole repository has been toured line by line, shift to tier 3 — "what breaks if…",95 "where would you add X and what else must change" — which stays holdout even on familiar code96 because the answer is not written down anywhere.9798## Difficulty tiers99- **Tier 1 — orientation.** What it is, how to run it, where execution starts, what the main units100 are. A tier-1 miss means go back to `/teach-me`; more questions will not help.101- **Tier 2 — working knowledge.** Data flow, error handling, conventions, what a given change would102 touch. This is the tier that predicts whether someone can safely make a change.103- **Tier 3 — mastery.** Invariants, failure modes, concurrency and ordering, "what breaks if,"104 where a new feature belongs and what else must move with it.105106**Stratified convergence:** converge tier 1 before advancing to tier 2, and tier 2 before tier 3.107A pile of easy passes must never mask a broken tier 3 — the same rule wgm applies to scenarios.108109## Gates (enforcement)110At each phase end, **print a `Gate check:` block listing every gate item as PASS or FAIL.** Do not111advance on a FAIL.112113## Phase 0 — Triage (always first)1141. Parse the mode; confirm this skill applies (else say so and stop).1152. **Read the repo before asking anything.** You cannot grade a codebase you have not read. If116 `.wgm/learning/MAP.md` exists, read it — that is `teach-me`'s cited map and it is the fastest117 path to a well-anchored question set. If it does not exist, survey enough of the repo yourself118 to write questions you can answer, and say that the quiz is unmapped.1193. **Say the stakes out loud, once.** State that the score is a measurement, that a low score is120 information rather than a verdict, and that guessing is fine — an unflagged guess that happens121 to be right is the one outcome that corrupts the result, so ask them to say when they are122 guessing. Then do not moralize about it again.1234. **Resume, don't restart.** Read `.wgm/learning/quiz-log.md` if present: start from the weakest124 recorded area rather than re-asking what they already proved.125126## Phase 1 — Calibrate127Ask **2–3 tier-1 questions** to locate their level. Do not score this phase; use it to choose the128starting tier. Starting three tiers above someone's level produces a demoralizing zero that129measures nothing; starting below it wastes the session.130131**Calibrate-exit gate:**132- [ ] A starting tier is chosen and stated.133- [ ] Every calibration question was answerable from code you have actually read.134135## Phase 2 — Quiz loop136Repeat until the stop condition fires. **Each cycle:**1371381. **Ask** — one question, tier stated, answer already known to you and cited. Then stop and wait.139 Do not continue, hint, or fill the silence.1402. **Grade** — against the real code, with the citation:141 - **Correct** — right, and for the right reason.142 - **Partial** — right conclusion, wrong or missing mechanism. Say exactly which half was missing;143 "partial" without that is a grade the learner cannot act on.144 - **Incorrect** — wrong. Say so plainly and immediately.145 - **Unverifiable** — the repo does not settle it. **Your question was flawed, not their answer.**146 Discard it, do not score it, and do not silently count it against them.147 - Grade the **substance, not the vocabulary**. A right model in imprecise words is correct; the148 precise term is a note, not a deduction. Grading fluency instead of understanding is the most149 common way an assessment measures the wrong thing entirely.150 - Grade the **answer given**, not the answer you hoped for. If a different-but-correct reading151 of the code supports them, they are right and your expected answer was incomplete.1523. **Teach the miss, briefly.** On anything less than correct, show the code and the citation now —153 a miss is the moment the answer sticks. Two or three sentences, then move on. Do not slide into154 a full `teach-me` tour mid-quiz.1554. **Drill** — a wrong answer sets the topic for the next question. Ask the **same concept from a156 different angle**, not the same question reworded. Re-asking the identical question tests whether157 they remember the correction you just gave them, which is worth nothing. Two consecutive misses158 in one area → mark it **weak**, stop drilling it, and record it for `/teach-me`. Grinding an area159 they have not been taught is not assessment, it is attrition.1605. **Record** — append to `.wgm/learning/quiz-log.md`: question, tier, area, grade, citation. Enough161 that a fresh context can resume the assessment without re-reading this conversation.162163**Anti-gaming rules:**164- An answer that only restates the question is **not** correct — it is unanswered. Say so and re-ask.165- "I don't know" is an honest answer. Record it as incorrect, credit the honesty in the report, and166 never punish it more harshly than a confident wrong answer. Punishing it teaches bluffing, which167 is precisely the habit that makes someone dangerous on-call.168- Never soften a grade to be encouraging. An inflated score is the one output of this skill that169 actively causes harm: it certifies someone as ready who is not.170- Never let the learner grade themselves. "Did I get that right?" is answered by the code.171172**Stop conditions:** the current tier converged at or above the threshold (default **80**) and the173target tier is reached; or the question cap for the sitting is hit; or two or more areas are marked174weak — at which point the useful next step is `/teach-me`, not more questions.175176## Phase 3 — Score & Report177Produce a short, honest report:178179- **Score per tier (0–100)** and overall — computed from the recorded grades, not impressions.180 Partial credit counts as half. Discarded (unverifiable) questions are excluded from the181 denominator, never counted as failures.182- **Solid areas** — what they demonstrably know, with the questions that proved it.183- **Weak areas** — what they do not, stated plainly, each with the specific concept to revisit.184- **Dangerous gaps** — anything they were *confidently wrong* about. Call these out separately.185 A known unknown is a gap; a confident wrong belief is a future incident, and averaging the two186 into one number hides the more serious one.187- **Verdict** — one line: can this person safely make changes here yet? Answer it directly.188- **Next step** — `/teach-me deep: <weak area>` for each weak area, then `/quiz-me drill: <area>`189 to re-test. Name them concretely.190191**Report-exit gate:**192- [ ] Every tier attempted has a score derived from recorded grades.193- [ ] Weak areas name a **concept**, not just a file.194- [ ] Confidently-wrong answers are reported separately from "I don't know."195- [ ] `.wgm/learning/quiz-log.md` is written so a later session can resume.196- [ ] The verdict is stated in one unhedged sentence.197198## Tone199Direct, not cruel. This skill is named for grilling and it should feel like one — but the pressure200belongs on the *questions*, never on the person. Do not perform disappointment, and do not perform201enthusiasm either: unearned praise is just an inflated score delivered socially. State the grade,202show the code, ask the next question.203204## Artifact safety (hard rules)205- Write **only** under `.wgm/learning/`. A quiz never modifies the project's code or documentation.206- Never share a person's scores or answers outside this session — not into an issue, a commit207 message, a report, or an external service. An assessment result is personal to the learner, and208 quietly publishing it is the fastest way to make the honest "I don't know" impossible.209210## Cross-links211[`teach-me`](../teach-me/SKILL.md) (the companion that teaches what this tests) ·212[`wgm`](https://github.com/agent-frontier/wgm/blob/main/SKILL.md) (the build skill whose output most needs verifying) ·213[`references/grilling.md`](https://github.com/agent-frontier/wgm/blob/main/references/grilling.md) (the interview discipline, inverted here) ·214[`references/scoring.md`](https://github.com/agent-frontier/wgm/blob/main/references/scoring.md) (stratified tier convergence and thresholds) ·215[`references/scenarios.md`](https://github.com/agent-frontier/wgm/blob/main/references/scenarios.md) (the holdout principle this borrows).