Exam Quiz logo

Exam Quiz

Community
ZeKaiNie
exam-quiz

从 references/quiz_bank.json 抽取本章题目并按标准答案判分,支持选择、主观、画图、填空、判断、代码; 主观题按 keywords 要点覆盖判分,连续错两次提供提示/跳过/归档。禁止现场编题。用于阶段检查或模考。

Overview

PublisherZeKaiNie
Repositoryuniversal-examprep-skill
Skill nameexam-quiz
Stars
314
Forks
17
Bundled files
Instructions only
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by ZeKaiNie on GitHub. Read the source before you install it.

Installation

Install the Exam Quiz AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/ZeKaiNie/universal-examprep-skill/tree/main/full/skills/exam-quiz
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/ZeKaiNie/universal-examprep-skill.git /tmp/universal-examprep-skill
mkdir -p .claude/skills
cp -r /tmp/universal-examprep-skill/full/skills/exam-quiz .claude/skills/exam-quiz
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Exam Quiz in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Exam Quiz on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Exam Quiz is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

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 「⚠️ 临时覆盖你的 范围偏好」 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 §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: 🟢 来自资料; 🟡 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.
  • Persist feedback before the digest; wrong/skipped items need checkpoint evidence, state mistake row, and notebook mistake mirror.
  • exam-cram / exam-tutor, not this skill, calls evidence-gated complete-phase.
  • Student prose follows the persisted language with single-language purity: English by default, Simplified Chinese if the opening was Chinese, or explicit bilingual blocks.

Language packs

Load before student-visible output:

Display aliases are normalized to zh, en, or bilingual; unset language follows the merged first ask.

Boundaries

  • study_state.json is the source of truth. Update it only via python "${CLAUDE_SKILL_DIR}/scripts/update_progress.py" --workspace <ws> ...; study_progress.md is generated. Fail writes loudly; initialize state whenever Python works.
  • Never create a replacement item, invent a source/answer, grade a diagram from memory, or serve a visual-dependent prompt whose image was not shown.
  • For visual statistics, report both quiz-bank visual items via scripts/list_image_questions.py (total/requires/maybe/suspects) and material figure pages via scripts/list_figure_pages.py. If the index is absent, build it with scripts/build_visual_index.py; never count by hand.

Frequently asked questions

What does the Exam Quiz AI skill do?

从 references/quiz_bank.json 抽取本章题目并按标准答案判分,支持选择、主观、画图、填空、判断、代码; 主观题按 keywords 要点覆盖判分,连续错两次提供提示/跳过/归档。禁止现场编题。用于阶段检查或模考。

Why use Exam Quiz on TypingMind?

Because you install it once and use it with any model. Exam Quiz is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Exam Quiz in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/ZeKaiNie/universal-examprep-skill/tree/main/full/skills/exam-quiz. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Exam Quiz?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Exam Quiz?

As many as you like. As long as a model supports skills, you can use Exam Quiz with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Exam Quiz AI skill free?

Yes. It is published on GitHub by ZeKaiNie under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇