vision-ocr

vision-ocr is a skill for Claude Code, Codex from OPTIMETA/PAIDEIA. It costs 100 tokens per session (2,061 once invoked), scanned B, original, MIT.

An OCR guide for converting handwritten or scanned answer PDFs into Markdown text for grading. OCR, or optical character recognition, reads text from images; this guide supports Claude vision, a local vision model, and a basic fallback.

In plain words
What is it for?
Use it when grading scanned or handwritten PDFs to select an OCR engine, convert pages into Markdown, keep processing local when required, or recover with a fallback engine.
Why use it?
It provides a way to process messy handwriting, mixed English and Korean text, and mathematical notation when normal text extraction is unreliable.

Skill for Claude CodeCodex

Installs and runs on its own, but its text points at files inside its plugin — anything it tells you to read at a ${CLAUDE_PLUGIN_ROOT} path is only there once the plugin is installed. Installing the plugin gets both.

Part of the paideia plugin — 6 skills, 18 commands shipped together

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add skills/optimeta/paideia/vision-ocr
Any agent
npx skills add OPTIMETA/PAIDEIA --skill vision-ocr
Clone the repo
git clone --depth 1 https://github.com/OPTIMETA/PAIDEIA

Made for: Claude Code, Codex.

Or install paideia, the plugin that ships this one along with the rest of its 6 skills, 18 commands.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for vision-ocr

README.md
[![agentmods](https://agentmods.dev/badge/skills/optimeta/paideia/vision-ocr.svg)](https://agentmods.dev/skills/optimeta/paideia/vision-ocr)
Your own site
<a href="https://agentmods.dev/skills/optimeta/paideia/vision-ocr"><img src="https://agentmods.dev/badge/skills/optimeta/paideia/vision-ocr.svg" alt="Measured on agentmods" height="20"></a>
Per session 100 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 2,061 The whole file, excluding the scripts and references it only reads on demand.
Security scan B 2 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.00100 $0.02061
Opus 5 $0.00050 $0.01030
Sonnet 5 $0.00020 $0.00412
Haiku 4.5 $0.00010 $0.00206

Measured 5d ago against content hash 22b3c0bb7498, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade B, and why

vision-ocr scanned grade B with 2 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 5d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Sends data to an external URLmediumData exfiltration

A POST to an outside endpoint may be telemetry or may be exfiltration; either way the mod talks to somewhere, and you should know where.

- ❌ Don't pass base64 via `curl -d <arg>` — ARG_MAX overflow. Use stdlib `urllib` with POST body.

Makes network callslowCapability

Not a fault in itself. Listed so you know the mod talks to something, and to what.

- ❌ Don't pass base64 via `curl -d <arg>` — ARG_MAX overflow. Use stdlib `urllib` with POST body.
plugins/paideia/skills/vision-ocr/SKILL.md · 134 lines

How it starts

The opening of the file, as written. The whole thing — 134 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Vision-OCR

When to load

  • /grade needs to convert answers/*.pdfanswers/converted/*.md
  • Any hand-written / scanned document whose previous tesseract pass was garbled
  • answer-processing skill's step-2 conversion

Engine choice

.course-meta holds a single line OCR_ENGINE: <engine> written by /paideia:init-course. The grade command reads it and dispatches. Users can override per-call with /paideia:grade --ocr=<engine> [path].

Engine Default? How it runs When to pick it
claude Yes pdftoppm → Claude reads each PNG via the Read tool → synthesizes markdown inline. No external model. No subprocess. The out-of-the-box path. Nothing to install. Highest fidelity on messy handwriting because Claude vision handles mixed-script (English/Korean) prose with LaTeX well.
ollama opt-in python3 ${CLAUDE_PLUGIN_ROOT}/scripts/vision_ocr.py --engine=ollama <pdf> <md> — local Qwen3-VL 8B, with an automatic tesseract fall-back if ollama is unreachable. Reads INTERFACE_LANG from .course-meta to set the prose-language rule. You want the PDF to never leave the machine and you don't want to burn Claude tokens on OCR. Requires one-time ollama pull qwen3-vl:8b (~6 GB).
tesseract opt-in python3 ${CLAUDE_PLUGIN_ROOT}/scripts/vision_ocr.py --engine=tesseract <pdf> <md> — pytesseract (eng for en, eng+kor for ko, derived from .course-meta). Zero cloud + no GPU/VRAM budget. Lowest fidelity on handwriting; fine for typed scans.

All three emit answers/converted/<stem>.md with a <!-- SOURCE: ... --> / <!-- TIER: ... --> header comment that lets /grade caveat the confidence.

Tier 0 — Claude native vision (default)

Pipeline (driven by the /grade command, not this script):

answers/<stem>.pdf
  ↓ pdftoppm -r 200 -png <pdf> <tmpdir>/page   # rasterize to PNG per page
  ↓ Claude reads <tmpdir>/page-1.png, page-2.png, ... via the Read tool
  ↓ Claude synthesizes clean MD following the prompt contract below
answers/converted/<stem>.md
   └── header:  <!-- SOURCE: <stem>.pdf, claude-vision (native), N pages -->

Read the full file on GitHub · 134 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 5d ago First seen · 134 lines · 100 tokens per session scan B 22b3c0bb7498

Subscribe to this mod's changes

vision-ocr is a skill published in the GitHub repository OPTIMETA/PAIDEIA (91 stars, last pushed 1mo ago), licensed MIT. It adds 100 tokens to every session and 2,061 once invoked, about $0.0005 per session on Opus 5. A static security scan graded it B with 2 findings (sends data to an external url, makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.

Related

Other skills, from other repositories

final-review

期末一键复习。考前72小时,把课件(PPT)、课堂笔记、阅读材料、PDF、图片、扫描件等多模态资料自动发现→多模态归一化→逐章分类整合→生成可打印的逐章期末复习稿PDF。面向期末突击党和中英双语课程学生。Use when user mentions anything about organizing or generating final-exam review materials — "期末复习", "考前冲刺", "考前72小时", "期末突击", "整理复习资料", "一键复习", "帮我整理XX课复习", "生成XX课复习", "把课件整理成复习", "把笔记整理成复习", "PPT转复习", "PDF复习"…

limpidwei/final-exam-review · 267 tokens

note-single-lecture

Create high-fidelity study notes for one lecture PDF/PPT using a generated mind map first. Store intermediate artifacts in note-single-lecture-work/ / and final notes in note-single-lecture/. Write descriptive prose mainly in Chinese, preserve key English terms and important English descriptive source sentences, and…

wvov7/course-revision-skills · 103 tokens

closed-book-full-course-highlights

Produce page-ordered highlight summaries for all lecture PDFs in a course, marking multi-page topics as high-priority. Use for closed-book full-course review, 全课要点, examlecturestat, complete slide coverage reports, or closed-book-full-course-highlights.

wvov7/course-revision-skills · 61 tokens

closed-book-single-lecture-analysis

Perform in-depth analysis of one or more lecture PDFs with logic reordering and tiered depth by topic frequency. Use for closed-book single-lecture study, 单讲分析, conceptual deep dives, batch continuation across lecture numbers, or closed-book-single-lecture-analysis.

wvov7/course-revision-skills · 60 tokens

open-book-layered-index

Construct hierarchical open-book exam indexes that map topics to lecture PDF file names and page numbers. Use for open-book revision, 开卷索引, revisionexam.md, course map, slide page lookup, or open-book-layered-index without explanatory prose.

wvov7/course-revision-skills · 56 tokens

note-organizer

Use this skill whenever the user wants to organize course materials, lecture notes, PPT/PDF/DOCX files, textbooks, personal notes, senior-student notes, historical exams, review questions, standards, manuals, or scattered study resources into a structured Markdown note library. Use it even when the user only says…

Renakoni/note-organizer · 228 tokens