OCR, classify, and organize scanned PDFs into category subfolders using AI vision and language models. Processes medical, financial, insurance, tax, legal, personal, and household documents.
Resources
7Install
npx skillscat add fdu-ins/insurance-skills/scan-organizer Install via the SkillsCat registry.
SKILL.md
Scan Organizer
Processes scanned PDFs — extracts text (Docling + vision OCR), classifies by category using an LLM, and organizes into subfolders with markdown and metadata sidecars. Works with any OpenAI-compatible API (Ollama, OpenAI, OpenRouter, etc.).
Categories
medical, financial, insurance, tax, legal, personal, household, other
Commands
Run from the scan-organizer project directory.
Process new scans
uv run scan-organizer processDry run (classify without moving)
uv run scan-organizer process --dry-runProcess a single file
uv run scan-organizer process --file /path/to/scan.pdfForce re-process all (including already processed)
uv run scan-organizer process --forceCheck inbox status
uv run scan-organizer statusUndo a processed file (move back to inbox)
uv run scan-organizer undo <filename>Reclassify a file
uv run scan-organizer reclass <filename>Output Format
All commands output JSON to stdout. Progress messages go to stderr.
Process output
{"processed": 3, "skipped": 7, "errors": 0, "results": [{"file": "...", "category": "medical", "title": "...", "destination": "..."}]}Status output
{"inbox_count": 10, "unprocessed": 3, "already_processed": 7, "categories": {"medical": 2, "financial": 3}}Architecture
- Extract — Docling parses PDF structure and native text
- OCR — Pages with sparse text are rendered to PNG and sent to a vision model
- Classify — Merged text sent to a language model for categorization
- Organize — PDF moved to
<scans_dir>/<category>/,.md+.meta.jsonsidecars written
File Organization
<scans_dir>/
medical/
2025-12-20_lab-results_0003.pdf
2025-12-20_lab-results_0003.md
2025-12-20_lab-results_0003.meta.json
financial/
...
.manifest.json <- tracks all moves for undoTips
- Run
statusfirst to see how many unprocessed scans are in the inbox - Use
--dry-runto preview classifications before moving files - The manifest tracks all moves for auditability
- If a classification is wrong, use
reclassto undo and re-process