/exam-quiz
从 references/quiz_bank.json 抽取本章题目并按标准答案判分,支持选择、主观、画图、填空、判断、代码; 主观题按 keywords 要点覆盖判分,连续错两次提供提示/跳过/归档。禁止现场编题。用于阶段检查或模考。
$ npx -y skills add ZeKaiNie/universal-examprep-skill --skill exam-quiz --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/exam-quiz
Context preview
The summary Claude sees to decide when to auto-load this skill.
从 references/quiz_bank.json 抽取本章题目并按标准答案判分,支持选择、主观、画图、填空、判断、代码; 主观题按 keywords 要点覆盖判分,连续错两次提供提示/跳过/归档。禁止现场编题。用于阶段检查或模考。
SKILL.md
exam-quiz.SKILL.mdname: exam-quiz
description: >
从 references/quiz_bank.json 抽取本章题目并按标准答案判分,支持选择、主观、画图、填空、判断、代码;
主观题按 keywords 要点覆盖判分,连续错两次提供提示/跳过/归档。禁止现场编题。用于阶段检查或模考。
license: MIT
exam-quiz — question drilling and grading
Purpose
Present one chapter/phase-scoped bank item at a time, grade against its stored answer, archive wrong/skipped items through state, and return control to `exam-cram`. Never invent a question or answer.
Activation
Use after teaching when a checkpoint is needed, or when the student asks for drills or a mock exam.
Inputs
- Existing `references/quiz_bank.json`, whose items have `type`, answer/provenance fields, and `chapter` or `phase`; subjective items also have `keywords`.
- Current chapter/phase and `study_state.json` mastery/scope. An untagged item cannot enter a chapter checkpoint.
- Optional `difficulty` (1–5) and `difficulty_reason` from `score_difficulty.py`: a structural lower bound, never semantic truth or a per-student score.
Workflow
1. **Select only eligible bank items.** Filter both `chapter` and `phase`. A missing bank is an incomplete workspace and returns to `exam-ingest`; an existing but empty usable pool produces no substitute and caps completion at `covered_unverified`.
The default source pool is mixed. Persist a student restriction and select it with `scripts/select_questions.py`; exclude and count items lacking `source_type`. Before any one-turn exception say 「⚠️ 临时覆盖你的 <scope> 范围偏好」 or `⚠️ Temporarily overriding your <scope> scope preference`; do not silently change the stored scope.
For targeted/checkpoint selection run `python "${CLAUDE_SKILL_DIR}/scripts/select_hard_questions.py" --workspace <ws> --chapter <current> -n <k>`. `--chapter` is the only exact chapter filter; `--from-chapter N` means every numeric chapter ≥N and is only for `shore_up`, never a checkpoint. Explicit cross-chapter practice may omit chapter. The selector combines structural difficulty (using `score_difficulty.py` on the fly when needed) with mistake/confusion/window mastery, mode, and stored scope. `fill_gaps` serves weak points `先易后难`, then mastered items `先难挑战`; `from_scratch` is globally `先易后难`. `shore_up` requires explicit chapter/from-chapter. Ordering is deterministic, not LLM ranking.
2. **Show prompt assets first (fail-closed).** For `requires_assets=true` or `maybe_requires_assets=true`, before asking, explaining, hinting, or solving, actually render every question-side `question_context` / `figure` / `diagram` / `table` asset, labelled `题面图` or `Question-side asset`. A path is not an image. Show `answer_context` / `worked_solution` only later, labelled `答案图` or `Answer-side asset`. Preserve but never display `student_attempt`: one occurrence taints the same physical path across the complete quiz, teaching, and content-unit layers, so an official-looking duplicate declaration is also unusable. Missing/unreadable files block the structured workspace; an existing asset that the UI cannot render causes an item-level skip. Prefer a safe, self-contained `full` item. `stub` and `page_reference` also require the prompt asset or original page first. Always use `python <package-root>/scripts/show_question_assets.py --workspace <ws> --id <qid> --lang <zh|en>` so the shared three-layer policy is applied; exit 1 means skip. Do not bypass it by rendering a raw bank path yourself. See [`docs/file-format.md`](../../docs/file-format.md) §4.
3. **Grade by type.** `choice`: stored option. `subjective`: required `keywords`/steps with equivalent wording accepted and coverage reported. `fill_blank`: stored fill with valid synonyms. `true_false`: verdict plus one-line reason. `code`: required edits/output. `diagram`: run the standard algorithm from `render_hint`, derive the structure, then compare; teacher convention prevails.
4. **Use the escape hatch.** First wrong answer gets the logic gap, stored explanation, and a hint. On the second consecutive wrong answer offer view hint / skip and archive / continue.
5. **Persist evidence and feedback.** Before any write, if `study_state.json` is absent and Python works, run `python "${CLAUDE_SKILL_DIR}/scripts/update_progress.py" --workspace <ws> init`; only when Python truly cannot run may the generated Markdown be maintained directly. For every handled item record `record-phase-evidence --kind checkpoint --ref <qid> --outcome passed|wrong|skipped`; an ID alone is not mastery. Wrong/skipped items also use `python "${CLAUDE_SKILL_DIR}/scripts/update_progress.py" --workspace <ws> add-mistake --id <qid> --chapter <ch> --note <reason>`. A nonzero state command is a fail-loud write error, not permission to edit the generated view.
Before replying, pipe full verdict, gap, explanation, and source line to `python "${CLAUDE_SKILL_DIR}/scripts/notebook.py" --workspace <ws> add-entry --chapter <ch> --type feedback --id <qid> --title <gist>`. Same chapter/id replaces in place. Wrong/skipped feedback also passes `--mistake` to mirror `mistakes/chNN.md`; that supplements, never replaces, the state row. Then send a short digest and language-pack link. If notebook writing fails, say so and give the full feedback in chat; file-less clients use chat/text breakpoints.
6. **End every graded item with one source line:** `题目来源:<file/page/source_type>|答案来源:<material/AI>|<label>` or `Question source: <...> | Answer source: <...> | <label>`. Missing metadata says 「来源未知」 / `Source unknown` (or `Source page unknown`), never an invented filename/page. The label is one complete canonical sentence from [`docs/language-policy.md`](../../docs/language-policy.md): 🟢 来自资料; 🟡 AI补充,可能与你老师讲的不完全一致; or ⚠️ AI生成答案,非老师/教材提供, with its English counterpart. When no material answer exists, both the `解析/参考答案` title and source line carry the full ⚠️ sentence; without a stored answer, do not force a verdict.
Output Contract
- One item at a time; pass/not-pass plus key-point feedback; finish with the source line and refreshed progress panel.
- P
Read more
name: exam-quiz description: > 从 references/quiz_bank.json 抽取本章题目并按标准答案判分,支持选择、主观、画图、填空、判断、代码; 主观题按 keywords 要点覆盖判分,连续错两次提供提示/跳过/归档。禁止现场编题。用于阶段检查或模考。 license: MIT
exam-quiz — question drilling and grading
Purpose
Present one chapter/phase-scoped bank item at a time, grade against its stored answer, archive wrong/skipped items through state, and return control to `exam-cram`. Never invent a question or answer.
Activation
Use after teaching when a checkpoint is needed, or when the student asks for drills or a mock exam.
Inputs
- Existing `references/quiz_bank.json`, whose items have `type`, answer/provenance fields, and `chapter` or `phase`; subjective items also have `keywords`.
- Current chapter/phase and `study_state.json` mastery/scope. An untagged item cannot enter a chapter checkpoint.
- Optional `difficulty` (1–5) and `difficulty_reason` from `score_difficulty.py`: a structural lower bound, never semantic truth or a per-student score.
Workflow
1. **Select only eligible bank items.** Filter both `chapter` and `phase`. A missing bank is an incomplete workspace and returns to `exam-ingest`; an existing but empty usable pool produces no substitute and caps completion at `covered_unverified`.
The default source pool is mixed. Persist a student restriction and select it with `scripts/select_questions.py`; exclude and count items lacking `source_type`. Before any one-turn exception say 「⚠️ 临时覆盖你的 <scope> 范围偏好」 or `⚠️ Temporarily overriding your <scope> scope preference`; do not silently change the stored scope.
For targeted/checkpoint selection run `python "${CLAUDE_SKILL_DIR}/scripts/select_hard_questions.py" --workspace <ws> --chapter <current> -n <k>`. `--chapter` is the only exact chapter filter; `--from-chapter N` means every numeric chapter ≥N and is only for `shore_up`, never a checkpoint. Explicit cross-chapter practice may omit chapter. The selector combines structural difficulty (using `score_difficulty.py` on the fly when needed) with mistake/confusion/window mastery, mode, and stored scope. `fill_gaps` serves weak points `先易后难`, then mastered items `先难挑战`; `from_scratch` is globally `先易后难`. `shore_up` requires explicit chapter/from-chapter. Ordering is deterministic, not LLM ranking.
2. **Show prompt assets first (fail-closed).** For `requires_assets=true` or `maybe_requires_assets=true`, before asking, explaining, hinting, or solving, actually render every question-side `question_context` / `figure` / `diagram` / `table` asset, labelled `题面图` or `Question-side asset`. A path is not an image. Show `answer_context` / `worked_solution` only later, labelled `答案图` or `Answer-side asset`. Preserve but never display `student_attempt`: one occurrence taints the same physical path across the complete quiz, teaching, and content-unit layers, so an official-looking duplicate declaration is also unusable. Missing/unreadable files block the structured workspace; an existing asset that the UI cannot render causes an item-level skip. Prefer a safe, self-contained `full` item. `stub` and `page_reference` also require the prompt asset or original page first. Always use `python <package-root>/scripts/show_question_assets.py --workspace <ws> --id <qid> --lang <zh|en>` so the shared three-layer policy is applied; exit 1 means skip. Do not bypass it by rendering a raw bank path yourself. See [`docs/file-format.md`](../../docs/file-format.md) §4.
3. **Grade by type.** `choice`: stored option. `subjective`: required `keywords`/steps with equivalent wording accepted and coverage reported. `fill_blank`: stored fill with valid synonyms. `true_false`: verdict plus one-line reason. `code`: required edits/output. `diagram`: run the standard algorithm from `render_hint`, derive the structure, then compare; teacher convention prevails.
4. **Use the escape hatch.** First wrong answer gets the logic gap, stored explanation, and a hint. On the second consecutive wrong answer offer view hint / skip and archive / continue.
5. **Persist evidence and feedback.** Before any write, if `study_state.json` is absent and Python works, run `python "${CLAUDE_SKILL_DIR}/scripts/update_progress.py" --workspace <ws> init`; only when Python truly cannot run may the generated Markdown be maintained directly. For every handled item record `record-phase-evidence --kind checkpoint --ref <qid> --outcome passed|wrong|skipped`; an ID alone is not mastery. Wrong/skipped items also use `python "${CLAUDE_SKILL_DIR}/scripts/update_progress.py" --workspace <ws> add-mistake --id <qid> --chapter <ch> --note <reason>`. A nonzero state command is a fail-loud write error, not permission to edit the generated view.
Before replying, pipe full verdict, gap, explanation, and source line to `python "${CLAUDE_SKILL_DIR}/scripts/notebook.py" --workspace <ws> add-entry --chapter <ch> --type feedback --id <qid> --title <gist>`. Same chapter/id replaces in place. Wrong/skipped feedback also passes `--mistake` to mirror `mistakes/chNN.md`; that supplements, never replaces, the state row. Then send a short digest and language-pack link. If notebook writing fails, say so and give the full feedback in chat; file-less clients use chat/text breakpoints.
6. **End every graded item with one source line:** `题目来源:<file/page/source_type>|答案来源:<material/AI>|<label>` or `Question source: <...> | Answer source: <...> | <label>`. Missing metadata says 「来源未知」 / `Source unknown` (or `Source page unknown`), never an invented filename/page. The label is one complete canonical sentence from [`docs/language-policy.md`](../../docs/language-policy.md): 🟢 来自资料; 🟡 AI补充,可能与你老师讲的不完全一致; or ⚠️ AI生成答案,非老师/教材提供, with its English counterpart. When no material answer exists, both the `解析/参考答案` title and source line carry the full ⚠️ sentence; without a stored answer, do not force a verdict.
Output Contract
- One item at a time; pass/not-pass plus key-point feedback; finish with the source line and refreshed progress panel.
- P
Turn your slides, homework, and past papers into a source-aware tutor that remembers your progress.
Other skills on universal-examprep-skill.
- /confusion-tracker
教学过程中自动捕获和记录学习者的概念疑难点("为什么/是什么/怎么推/什么意思"类型的问题),保存到进度文件的"概念疑难点记录"区,形成考前回顾清单。
Open skill - /exam-audit
只读检查一个已生成的备考工作区是否健康并报告问题,默认不做任何修改。核对 .ingest 原材料版本、 内容单元、接管队列与派生产物完整性,以及 wiki、题库、视觉证据、计划和进度的一致性。当用户怀疑 工作区有问题、建库 readiness 被阻断、或想在开始复习前体检时使用。
Open skill - /exam-cheatsheet
全员通关后把 错题本+笔记本+知识点窗口+wiki 编译成考前速记小抄 cheatsheet.md(每条要点带可溯源 锚点),并在视觉产物模式或用户明确要求 PDF/打印版时按指定页数渲染成打印级 PDF:按「必背结论/公式 → 有难度例题(必要时含题面图)→ 例题解答(代入公式、保留基础过程)→ 要点解释(同类题怎么办)」 四段组织。当复习收尾、用户要「考前小抄/速记/总结/打印版」时使用。
Open skill - /exam-cram
临考前的极速备考总教练。把课件、大纲、重点与真题建成分章 wiki 和标准题库,再组织惰性授课、 题库判分、错题与疑难复盘及可选考前小抄,并持久化进度。用于期末、备考、突击、刷题、划重点、 错题与考前复习;不用于长期规划或与考试无关的写作/编程。
Open skill - /exam-help
备考教练的一屏速查卡:工作流、3×4 学习选择、产物偏好、工作区文件、6 大题型、来源规则与子技能路由。 用户问怎么用、有哪些模式、文件用途或支持题型时使用。
Open skill - /exam-ingest
从学生上传的课件/大纲/老师勾的重点/真题,一键初始化并验证备考工作区:解析 PDF、DOCX、PPTX、 XLSX、常见独立图片与 txt/md,建立分章节 LLM Wiki、标准题库、结构化接管队列与进度状态;仅在 Python 确实无法运行时 明确降级为手动写盘。当工作区尚未建立、资料发生变化、或建库 readiness 被阻断时使用。
Open skill

