← ClaudeAtlas

answer-processinglisted

Use whenever the user uploads a hand-written or scanned answer PDF to be graded against a reference solution. Converts answer PDFs in `answers/*.pdf` to markdown in `answers/converted/*.md` using the pdf skill (OCR as needed), then performs strategy-based grading against `converted/solutions/*.md` or `quizzes/*_answers.md`. Invoked by `/grade`.
OPTIMETA/PAIDEIA · ★ 81 · Data & Documents · score 86
Install: claude install-skill OPTIMETA/PAIDEIA
# Answer Processing ## When to load - User uploads an answer PDF and asks to grade it - `/grade` is invoked - User says "I finished the quiz, here's my work" ## Core pipeline ``` answers/<quiz-name>.pdf ← user uploads hand-written scan ↓ (pdf skill, OCR) answers/converted/<quiz-name>.md ↓ (this skill) grade report → stdout (compact) + errors/log.md (append) ``` ## Step-by-step procedure ### Step 1: Locate the answer file If `/grade` was called with an argument, use it as a hint. Otherwise find the most recently modified file in `answers/` (not `answers/converted/`). ### Step 2: Convert PDF to MD (if PDF) **Use the `vision-ocr` skill** — delegates to a local VLM (Qwen3-VL 8B via ollama) for clean prose + LaTeX transcription (the script reads `INTERFACE_LANG` from `.course-meta` so the VLM keeps the handwriting in its original language), with pytesseract as automatic fallback. ```bash python3 "${CLAUDE_PLUGIN_ROOT}/scripts/vision_ocr.py" answers/<name>.pdf answers/converted/<name>.md ``` The script handles model warmup, page-by-page inference, and tier fallback. See `.claude/skills/vision-ocr/SKILL.md`. The output header tells the grader which tier produced the text: - `<!-- SOURCE: ..., qwen3-vl:8b @ 300dpi, N pages -->` → high-confidence - `<!-- TIER: tesseract fallback -->` → degraded; treat results conservatively ### Step 3: Graceful handling of OCR noise Hand-written math OCR will be imperfect. Expect: - Greek letters misread as Latin ($\alph