Use when processing scanned homework PDFs, organizing student submissions by name, creating individual student files from batched scans, checking homework completion, or updating grading spreadsheets. Handles handwritten name recognition via vision, fuzzy roster matching, session resume for large batches, and checklist generation.
Inherits all available tools
Additional assets for this skill
This skill inherits all available tools. When active, it can use any tool Claude has access to.
reference/page-analysis.mdreference/pdf-creation.mdreference/spreadsheet-update.mdreference/status-tracking.mdreference/troubleshooting.mdreference/verification.mdreference/workflow-flowchart.mdscripts/create_student_pdfs.pyscripts/extract_pages.pyscripts/update_status.pytemplates/homework-grading-status.yamlAutomates processing of scanned homework: extract student names from pages using vision, match to roster, create individual PDFs per student, and update completion spreadsheets.
Core accuracy requirements:
Trigger phrases:
Symptoms this skill addresses:
Required inputs:
Phase 0: Planning (BEFORE ANYTHING ELSE)
├── Count pages in PDF (fitz.open → len(doc))
├── CREATE tracking file with batch plan
├── Calculate sessions needed: ceil(total_pages / 99)
├── Display plan to user:
│ "150 pages = 2 sessions (99 + 51)"
└── User confirms before proceeding
Phase 1: Setup
├── Load roster from xlsx skill
├── Extract PDF pages as images
└── Tracking file already exists from Phase 0
Phase 2: Page Analysis (CRITICAL)
├── Check tracking file for current_session and start_page
├── Read EACH page individually (max 99 per session)
├── Find Name field at top
├── Match to roster (fuzzy matching)
├── Save to tracking file after EACH page
└── Stop at session limit, inform user to resume
Phase 3: User Verification
├── Display uncertain pages
├── User confirms/corrects names
└── All pages must be assigned
Phase 4: Create PDFs
├── Group pages by student
├── Create individual PDFs
└── Skip Unknown pages
Phase 5: Update Spreadsheet
├── Add assignment column
├── Mark submissions with X
└── Update Total formula
Phase 6: Verification
├── Check each PDF has correct pages
├── Cross-reference spreadsheet
└── Cleanup temp files
| Phase | Reference File | Script/Template |
|---|---|---|
| Decision Flow | workflow-flowchart.md | - |
| Page Analysis | page-analysis.md | scripts/extract_pages.py |
| Status Tracking | status-tracking.md | scripts/update_status.py, templates/homework-grading-status.yaml |
| PDF Creation | pdf-creation.md | scripts/create_student_pdfs.py |
| Spreadsheet | spreadsheet-update.md | - |
| Verification | verification.md | - |
| Troubleshooting | troubleshooting.md | - |
Always invoke these skills:
Skill: document-skills:xlsx # For spreadsheet operations
Skill: document-skills:pdf # For PDF manipulation
ceil(total_pages / 99) = number of sessionsIf you notice ANY of these, stop and investigate:
| Red Flag | What's Wrong | Action |
|---|---|---|
| No tracking file yet | Starting analysis without Phase 0 | Create tracking file FIRST with batch plan |
| No batch plan shown | User doesn't know session count | Display plan, get confirmation |
| Batching pages | Reading multiple pages at once | Read ONE page per Read call |
| Skipping verification | Not opening created PDFs | Verify EACH PDF |
| Ignoring uncertain pages | Creating PDFs with Unknown | User must confirm names first |
| Not saving to tracking file | Only saving at end | Save after EACH page |
| Assuming page order | "Pages 1-10 are Student A" | Read name on EVERY page |
| Level | Meaning | Action |
|---|---|---|
| high | Name clear, exact roster match | Proceed |
| medium | Name readable, fuzzy match | Proceed with note |
| low | Name hard to read, best guess | Flag for user review |
| unknown | Cannot read name | MUST get user input |
Claude has a 99-image limit per session. The tracking file manages this:
Phase 0: Create tracking file, show batch plan:
"150 pages = 2 sessions (99 + 51)"
User confirms.
Session 1: Analyze pages 0-98, save each to tracking file
At page 98: "Session limit reached. Resume in new session."
Session 2: Detect tracking file, resume from page 99
Analyze pages 99-149
All pages done → proceed to PDF creation
Tracking file location: {output_folder}/homework-grading-status.yaml
{output_folder}/
├── homework-grading-status.yaml (workflow state)
├── Student Individual Files/
│ ├── {Student1}.pdf
│ ├── {Student2}.pdf
│ └── ...
└── {completion_spreadsheet} (updated)
| Mistake | Why It Fails | Correct Approach |
|---|---|---|
| Skipping Phase 0 | No batch plan, can't resume properly | Create tracking file FIRST |
| Not showing batch plan | User surprised by multi-session work | Display plan, get confirmation |
| Reading multiple pages at once | Can't accurately identify names | One page per Read call |
| Not checking Name field specifically | Other text confuses matching | Focus on "Name:" at top |
| Skipping PDF verification | Wrong pages get included | Open and check each PDF |
| Forcing through Unknown pages | Creates unusable output | Get user confirmation |
| Not using xlsx skill | Spreadsheet corruption | Always invoke xlsx skill first |
pip install PyMuPDF pandas openpyxl pyyaml filelock