exam-ingest
>
pinned to #a70759dupdated 2 weeks ago
Ask your AI client: “install skills/exam-ingest”.
Requires the metahub MCP server installed in your client. Set up MCP.
mh install skills/exam-ingestmetahub 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
Convert scattered prep materials into the fixed workspace structure that exam-cram depends on. Build the knowledge base only; do not teach or grade. Produce references/wiki/, references/quiz_bank.json, study_plan.md, and study_progress.md, then hand control back to exam-cram.
Activation
Activate when the workspace is missing — that is, any of references/wiki/, references/quiz_bank.json, or study_progress.md is absent. Also activate when the user has just uploaded courseware/syllabus/highlights/past exams, or explicitly requests 「初始化 / 建库 / 开始备考」(initialize / build the bank / start prepping).
Inputs
- Student-uploaded materials: text, textbook page images, teacher-marked highlights, past exam papers, lecture audio transcripts.
- Target workspace directory (default: current workspace root).
Workflow
- Dependency preflight (BEFORE touching the materials — never let a student discover a missing library as a mid-ingest crash). Run
python "${CLAUDE_SKILL_DIR}/scripts/check_deps.py" --materials <dir>: it is the single manifest of every optional dependency (PDF text backends / PyMuPDF page rendering / local browser for the cheatsheet PDF), probes what is installed, and prints the exactpip install …command for anything the student's materials actually NEED (exit 5 = a needed backend is missing). When something needed is missing, ask the student ONCE with the one-line consent phrasing from the language pack, install on yes, then re-run the preflight; on no, proceed only for the non-PDF part of the materials and say plainly what will be skipped. Never install silently, and never skip the preflight when the materials folder contains PDFs. - Parse the materials. Extract knowledge points, core formulas, high-frequency question types, and term definitions. Group them by chapter or phase.
- Build
raw_input.jsonin the background so it matchesscripts/ingest.py. Auto-construct an object withcourse_name,phases[], andquiz_bank[], and write it to a temp directory. Never ask the user to write or edit this JSON.- Every quiz item MUST carry
chapter(orphase); without it, chapter review cannot retrieve the item. Every item MUST carrysource:teacher(from the teacher/past exams) orai_generated(added by AI). - Set each item's type to one of six:
choice / subjective / diagram / fill_blank / true_false / code. - PDF / materials folder → use the official entry point; NEVER hand-write ad-hoc parsing scripts: when the input is a folder of lecture/homework PDFs, run
python <package-root>/scripts/build_raw_input_from_workspace.py --materials <dir> --out raw_input.json --asset-root <workspace>/references/assets --report parse_report.json. It preserves original-page provenance (source_file/source_pages), renders figure-dependent pages to full-page PNG assets, extracts lecture Example/Quiz question-solution pairs into the bank, and emits a parse report (extracted / skipped / warnings + the backend used). PDF text/rendering are optional dependencies — textpip install pypdf; renderingpip install pymupdf(bundles PNG) orpypdfium2 Pillow; when a dependency is missing the script fails with a clear message telling you what to install. Pure.txt/.mdmaterials need no dependency.--asset-rootmust point at<workspace>/references/assets(with rendering on but unset: auto skips with a warning, required errors out).Alert-takeover obligation (HARD): after build/import you MUST readparse_report.json'swarningsandskipped,ai_review_manifest.json'sentries, and the workspaceingest_report.json'smissing_answer_idsIN FULL, and handle them one by one: whatever is recoverable (re-save as UTF-8, rename with a chNN/sol marker, multimodally read the PDF/image directly to backfill knowledge points or questions) gets handled immediately; whatever is not, you MUST tell the student explicitly which materials were not imported and why. You MUST NOT silently skip a single entry — every program-side alert assumes 「AI 会接手」 (the AI takes over); if you don't take it over, it is lost forever. Common entries:likely_asset_required_but_no_image(install a rendering backend),pdf_pages_no_text/scanned_pdf(multimodal page reading to backfill),unsupported_format(read directly or convert),exam_no_markers(read the paper and extract questions directly),chapter_unassigned(check against the wiki chaptering),hw_pairing_ambiguous/hw_unpaired_solution_file(ask a human to confirm the pairing). Seedocs/file-format.md§4. - Homework auto-ingest: the official builder also recognizes homework / solution PDFs (filename patterns like
hw1.pdf+hw1_sol.pdf,作业3.pdf+作业3答案.pdf), pairs separate question/solution files automatically (inlineSolutionblocks too), and emits bank items taggedsource_type="homework"with page provenance — so homework-only scope has real inventory. Unpaired solutions / unanswered problems are fail-loud warnings in parse_report.json.
- Every quiz item MUST carry
- Run the package-root
scripts/ingest.py:python <package-root>/scripts/ingest.py --input <temp-json>. When the full package is installed in Claude Code,${CLAUDE_SKILL_DIR}points at the package root — usepython "${CLAUDE_SKILL_DIR}/scripts/ingest.py" --input <…>.- Recall cross-check AFTER ingest has created the workspace (
references/quiz_bank.jsonmust exist — this step reads it): runpython <package-root>/scripts/build_visual_index.py --workspace <workspace> --materials <dir>to build the dual visual indices (image_question_index.json+figure_page_index.json) and get the suspected-missed visual question report (source pages that ARE visual but whose items carry no visual flag/asset). If suspects are found, rerun with--apply(needs a render backend) to attach the original-page screenshot and setmaybe_requires_assets=true— never leave a figure-dependent item silently unlabeled. (In the no-Python fallback of step 4 this cross-check is unavailable — say so instead of skipping silently.)
- Recall cross-check AFTER ingest has created the workspace (
- No-Python fallback. If the script fails (e.g.
python is not recognized), switch immediately and silently: use file-write tools to build, fromlocales/<lang>/templates/(pick the pack matchingstudy_state.json.language; default zh, and fall back to the zh pack when an en template file is missing), the filesreferences/wiki/chN_*.md,references/quiz_bank.json,study_plan.md, andstudy_progress.md. - Label provenance (canonical labels in
docs/language-policy.md). In wiki paragraphs, distinguish 🟢 来自资料 from 🟡 AI补充,可能与你老师讲的不完全一致. For a question the teacher gave no answer to and AI answers instead, mark the answer ⚠️ AI生成答案,非老师/教材提供.
Output Contract
- Produce the standard workspace:
references/wiki/,references/quiz_bank.json,study_plan.md,study_progress.md. - The quiz_bank schema supports asset-aware fields for image-dependent lecture questions (e.g. a Venn diagram shown on a slide, a page figure/table):
source_file/source_pages,assets(underreferences/assets/),requires_assets,maybe_requires_assets,question_text_status. When a question depends on a figure that isn't transcribed into text: only setrequires_assets=trueormaybe_requires_assets=truewhen you actually attach a valid question-side image asset underreferences/assets/(the validator rejects visual-required items whose asset is missing/unreadable or answer-side-only). Notescripts/ingest.pyonly writesreferences/wiki/,quiz_bank.json, and the plan/progress files — it does NOT create or copyreferences/assets/. So if you reference an asset, you must write the image file under<workspace>/references/assets/yourself (file-write tools) before/after running ingest; otherwise leave the visual-required fields unset/false. If you have only a source-page reference and no image, setquestion_text_status="page_reference"withsource_file+source_pagesand leaverequires_assets/maybe_requires_assetsunset — the page reference tells the tutor to surface the page without the hard asset requirement. (The official builder takes the opposite, fail-closed stance for a figure it detected but couldn't render: it keepsrequires_assets=truewith the missing asset recorded, so the workspace won't validate until you install a render backend or supply the image. Both are intentional — hand-authoring stays graceful and never emits an invalid workspace, while the builder forces a genuinely-needed figure to surface rather than silently dropping it.) These fields are optional and backward-compatible (old banks stay valid); the official builderscripts/build_raw_input_from_workspace.pyemits them from PDF material (see Workflow step 2). Seedocs/file-format.md§4. - Emit one setup-receipt line, then hand control back to
exam-cramfor step two (teaching). - 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. The cold-start receipt follows the same dispatch; 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-ingest.mden→../../locales/en/skills/exam-ingest.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
scripts/ingest.pyandlocales/<lang>/templates/live at the package root, not insideskills/exam-ingest/. If this subskill is installed alone (CLAUDE_SKILL_DIRpoints only atskills/exam-ingest/), the script and templates are unavailable — install the whole package (including rootscripts/andlocales/), or use the step-4 no-Python fallback to build the workspace by hand.- Do not modify the logic of
scripts/ingest.py; only call it. - Use only safe filenames under
references/wiki/. The script rejects../, absolute paths, and duplicate names. - Do not fabricate a "standard answer" the teacher did not provide without the ⚠️ label. When materials are insufficient, state the gap honestly.
- Do not overwrite an existing
study_progress.md. The script does not clear it by default;--forcebacks it up first.
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-ingest