exam-review
>
pinned to #a70759dupdated 2 weeks ago
Ask your AI client: “install skills/exam-review”.
Requires the metahub MCP server installed in your client. Set up MCP.
mh install skills/exam-reviewmetahub onboarded this repo on the author's behalf.
If you own github.com/ZeKaiNie/universal-examprep-skill on GitHub, claim the listing to take over publishing. Your claim preserves the existing eval history and badges; only the curator label is replaced with verified-publisher on your next publish.
Stars
252
Last commit
2 weeks ago
Latest release
published
- #agent-skill
- #ai-tutor
- #anthropic
- #anti-hallucination
- #claude
- #claude-code
- #claude-skill
- #cram
- #edtech
- #education
- #exam-prep
- #llm
- #quiz
- #rag
- #study-tool
Evaluation report
WarningsAutomated checks the publisher passed at publish time — structure, docs, safety, and whether the artifact behaves as claimed.a70759d· 2 weeks ago
Documentation
41Description qualitywarn
50 words · 274 chars — manifest description is empty; graded the GitHub repo description instead
A skill's manifest description doubles as its trigger — add one to SKILL.md (15+ words, e.g. “use this skill when …”).
README is present and substantial
11,522 chars · 9 sections · 3 code blocks
Tags / topics declared
15 total — agent-skill, ai-tutor, anthropic, anti-hallucination, claude, claude-code (+9)
README has usage / example sections
no labeled section but 3 code blocks document usage
Homepage / docs URL declared
no homepage declared (registry will use the repo URL) — info-only, not blocking
Release history
1- releasecurrenta70759dwarn2 weeks ago
Contents
Purpose
Clear the backlog of recorded mistakes and confusions before the exam. Replay only previously recorded items; teach no new chapters and add no new questions.
Activation
Run when the student enters the final review stage, or asks to 「复盘错题 / 查漏补缺 / 考前过一遍」 (replay mistakes / find gaps / final pass).
Inputs
- Review backlog source:
study_state.json(mistake_archive/confusion_log) when it exists — the structured-state source of truth; otherwisestudy_progress.md's ❌ 错题档案 and 💡 概念疑难点记录 (the md is a generated view that may be stale). references/quiz_bank.json: source items, keyed by id, re-fetched for each recorded mistake.
Workflow
- Reload mistake records — from
study_state.json'smistake_archivewhen it exists (read it orupdate_progress.py show; the generated md may be stale/hand-edited), else fromstudy_progress.md. For each recorded mistake, read its item id, fetch that exact item fromreferences/quiz_bank.jsonby id, and have the student redo it. Replay only items already recorded; never invent or add new questions.- Visual-first asset gate (fail-closed) — if the re-fetched item has
requires_assets=trueormaybe_requires_assets=true, apply the same contract asexam-quizanddocs/file-format.md§4: before asking, explaining, hinting, or solving, render/show every question-side asset (question_context/figure/diagram/table) inline and label it per §4 in the active reply language (中文/双语题面图,EnglishQuestion-side asset). Do not show answer-side assets (answer_context/worked_solution) before those prompt assets; show them only during solution/review and label them per §4 in the active reply language (中文/双语答案图,EnglishAnswer-side asset). If a question-side asset is missing/unreadable, the UI cannot render it, or you only have a non-rendering path (including malformed slash-prefixed Windows drive-letter Markdown), skip the replay and say it is blocked for lack of visible prompt context. Treatstub/page_referencetext as non-standalone: surface the prompt asset or original page first, else skip it rather than replaying an item the student cannot see.
- Visual-first asset gate (fail-closed) — if the re-fetched item has
- If the student answers a replayed item correctly, mark it 已订正 in the record. If still wrong, re-explain using the item's
explanationfield and keep it in the record. - Reload the confusion-tracker entries — from
study_state.json'sconfusion_logwhen it exists, else fromstudy_progress.md. Read each entry aloud and have the student restate it in their own words (what it is, why it works that way). - If the student restates an entry correctly, set its status to 已回顾. If still vague, re-explain once and keep its status 待回顾.
- Compile the open list: items still marked wrong plus entries still 待回顾. Hand this list to the final sprint and to
exam-cheatsheetas priority input (it biases which knowledge points get the hard worked examples).- Persist-first (notebook CLI) — review conclusions do not evaporate in chat: write the open list (the 「还没拿下的清单」) and each replay's conclusion into the notebook BEFORE replying:
echo <review body> | python "${CLAUDE_SKILL_DIR}/scripts/notebook.py" --workspace <ws> add-entry --chapter <ch> --type review --id <slug> --title <review gist>(body via STDIN; same--idreplaces in place;notebook/index.mdrebuilds; the script resolves from the skill package root). The chat reply is a digest of the list plus the pack-provided link line (zh 「完整复盘:notebook/chNN.md#<anchor>|目录:notebook/index.md」, enFull review: notebook/chNN.md#<anchor> | Index: notebook/index.md). On a failed write, TELL the student and give the full list in chat; file-less clients keep chat-only output perexam-cram's capability dispatch.
- Persist-first (notebook CLI) — review conclusions do not evaporate in chat: write the open list (the 「还没拿下的清单」) and each replay's conclusion into the notebook BEFORE replying:
- Write results back: with
study_state.json, update statuses viaupdate_progress.py set-mistake-status/set-confusion-statusand add rows viaadd-mistake/add-confusion(md regenerates); without state, update eachstudy_progress.mdrow in place (已订正 / 已回顾 / 待回顾) and append only genuinely new records. Never leave a mastered item as a stale wrong/待回顾 row. Do not overwrite other skills' writes.
Output Contract
- Produce one not-yet-mastered list (「还没拿下的清单」): recorded mistakes plus confusion entries, each with its current status (已订正 / 已回顾 / 待回顾). End with a refreshed progress panel.
- Persist-first default: that list and the session's review conclusions are written into
notebook/chNN.mdvia the notebook CLI (--type review) BEFORE the chat reply — the chat carries a digest plus the pack-provided link line, never the sole copy (Workflow step 5). On a failed write, say so and deliver the full list in chat; file-less clients keep chat-only output. - Persist each mistake/confusion status update — with
study_state.json, viaupdate_progress.py set-mistake-status/set-confusion-status(andadd-*for genuinely new records; the md regenerates); without state, update each existingstudy_progress.mdrow in place (已订正 / 已回顾 / 待回顾) and append only genuinely new records. Never leave a mastered item still marked wrong/待回顾. Then return control toexam-cram. - Student-facing output defaults to English (Simplified Chinese if the student opened in Chinese); a persisted
study_state.jsonlanguage(中文/English/双语) switches it per exam-cram's dispatch rule with single-language purity. (Seedocs/language-policy.md.)
Language packs
Student-visible wording for this skill lives in per-language packs — load the one matching study_state.json.language BEFORE emitting any student-visible output:
zh→../../locales/zh/skills/exam-review.mden→../../locales/en/skills/exam-review.mdbilingual→ compose from the zh pack with a> EN:mirror line per block (rules in../../docs/language-policy.md) Unset language → this is the first conversation: the merged first-ask (mode × time budget × language) decides it; default en unless the student opened in Chinese.
Boundaries
-
Structured progress state: when
study_state.jsonexists it is the SINGLE SOURCE OF TRUTH — update it viapython "${CLAUDE_SKILL_DIR}/scripts/update_progress.py" --workspace <ws> set/add-mistake/add-confusion/set-mistake-status/set-confusion-status/set-check/render(marking a replayed row 已订正/已回顾 goes throughset-mistake-status/set-confusion-status --id <qid> --status <状态>; ticking a知识点打卡item goes throughset-check --match <文本>|--index <N>);study_progress.mdis a GENERATED view (hand edits are lost on the next render — never hand-patch it). If a state write fails, TELL the user; never continue as if it saved. Withoutstudy_state.jsonbut WITH Python (a fresh, uninitialized workspace), runupdate_progress.py --workspace <ws> initto create the source of truth FIRST — do not stop at hand-editingstudy_progress.md; only when Python truly cannot run does a hand-maintained md stay valid. -
Scope filter & override: default question pool is mixed; a student-restricted range (e.g. homework-only) is a recorded scope filter — serving items outside it requires the scope-override line first in the active reply language (
中文「⚠️ 临时覆盖你的 <scope> 范围偏好」 /English⚠️ Temporarily overriding your <scope> scope preference), and untagged (source_typemissing) items are excluded from restricted scopes with their count reported. Official selector:scripts/select_questions.py. -
Replay only recorded items. Never add a question that is not already in the records or the quiz bank.
-
Share the progress record with
confusion-tracker: in state-backed workspaces both skills go throughupdate_progress.py(append viaadd-confusion, status viaset-confusion-status); only in md-only workspaces append/updatestudy_progress.mdrows in place. Never overwrite another skill's writes.
Reviews
No reviews yet. Be the first.
Related
Frontend Slides
Create beautiful slides on the web using Claude's frontend skills
Planning With Files
Claude Code skill implementing Manus-style persistent markdown planning — the workflow pattern behind the $2B acquisition.
Browser Use
🌐 Make websites accessible for AI agents. Automate tasks online with ease.
mh install skills/exam-review