zekainie/exam-review
> 考前复盘已记录错题与概念疑难:重做原题、复述疑难、更新已订正/已回顾/待回顾状态,并形成最后扫雷清单。 进入最终复习阶段或用户要求复盘、查漏补缺时使用。
npx skills add https://github.com/ZeKaiNie/universal-examprep-skill --skill exam-review
Clear recorded mistakes/confusions before the exam. Replay only existing records; teach no new chapter and invent no question.
Use at final review or when the student explicitly asks to replay mistakes/find gaps.
study_state.json's mistake_archive and confusion_log when state exists; otherwise generated 「❌ 错题档案」 and confusion compatibility rows.references/quiz_bank.json, used to fetch each recorded mistake by exact ID.update_progress.py show), fetch each exact bank item, and ask it again. Never add an unrecorded/bank-external question.For requires_assets=true or maybe_requires_assets=true, before asking, explaining, hinting, or solving, render every question-side question_context / figure / diagram / table asset, labelled 题面图 or Question-side asset. Only later may solution/review show 答案图 / Answer-side asset. A path is not an image. Preserve but never display student_attempt; its physical path is tainted across the complete quiz, teaching, and content-unit layers, including duplicate official-looking declarations. Missing/unreadable or UI-unrenderable prompt assets cause a fail-closed skip; stub / page_reference also require the original prompt page first. Use scripts/show_question_assets.py for every replay and treat a nonzero result as a skip; do not render a raw bank path directly. See exam-quiz and docs/file-format.md §4.
已订正; still wrong → explain from the stored explanation and retain it.confusion_log; ask the student to restate what/why/how. Correct restatement → 已回顾; vague → explain once and retain 待回顾.待回顾 confusions for the final sprint/exam-cheatsheet. Pipe each conclusion/list to python "${CLAUDE_SKILL_DIR}/scripts/notebook.py" --workspace <ws> add-entry --chapter <ch> --type review --id <slug> --title <gist>; same IDs replace and rebuild the index. Then send a digest and language-pack notebook link. If writing fails, say so and give the full list in chat; file-less clients use chat/text breakpoints.study_state.json is absent and Python works, run update_progress.py --workspace <ws> init first; only when Python truly cannot run may Markdown rows be changed in place. Write results via update_progress.py set-mistake-status / set-confusion-status, and genuinely new rows via add-mistake / add-confusion. A nonzero Python command is a fail-loud error, not permission to hand-edit. Never leave a mastered row stale or overwrite another skill's writes.已订正 / 已回顾 / 待回顾 statuses, notebook link, and refreshed panel.update_progress.py set-mistake-status / set-confusion-status.中文 → ../../locales/zh/skills/exam-review.mdEnglish → ../../locales/en/skills/exam-review.md双语 → compose both blockwise, zh then > EN:, under docs/language-policy.mdDisplay aliases are normalized to zh, en, or bilingual.
study_state.json is the source of truth; mutate rows only via update_progress.py. Mark replay results via update_progress.py set-mistake-status / set-confusion-status; set-check alone is not a substitute.source_type; announce any one-turn override first: 「⚠️ 临时覆盖你的 <scope> 范围偏好」 / ⚠️ Temporarily overriding your <scope> scope preference. Use scripts/select_questions.py.confusion-tracker; replay only recorded bank items and never erase concurrent writes.Take zekainie/exam-review from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.