init-course

A command that prepares a new course workspace by creating its folders, checking required software, and saving course settings. OCR means turning text in images into editable text.

In plain words
What is it for?
Use it once in a course folder to check Python and Tesseract, optionally check Ollama, ask for course details, and create the workspace instruction files.
Why use it?
It avoids setting up each course by hand and records the language, metadata, and text-recognition choices for later commands.

Command

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 commands/optimeta/paideia/init-course
Clone the repo
git clone --depth 1 https://github.com/OPTIMETA/PAIDEIA
Per session 62 Only the description is in the session, so the agent can decide to use it. The body loads when it is invoked.
When invoked 5,840 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.00062 $0.05840
Opus 5 $0.00031 $0.02920
Sonnet 5 $0.00012 $0.01168
Haiku 4.5 $0.00006 $0.00584

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

Security

Grade B, and why

init-course 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 2d 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.

Asks for rootmediumPrivilege escalation

A mod that escalates privileges can change anything on the machine, not only the project.

- Ubuntu: `sudo apt-get install poppler-utils tesseract-ocr tesseract-ocr-kor`

Makes network callslowCapability

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

curl -fsS --max-time 2 http://localhost:11434/api/tags >/dev/null 2>&1 \
plugins/paideia/commands/init-course.md · 445 lines

How it starts

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

You are bootstrapping the user's current working directory into a fresh paideia workspace. Everything you create lives in the user's CWD, not in the plugin. The plugin itself (skills, commands, vision_ocr.py) is auto-loaded — your job is the per-course state.

Execution plan

Run these steps sequentially. Use the Bash tool. Keep chat output compact — the user is watching progress.

Step 0 — Interface language (ask the user, always in English)

This prompt is always shown in English because we do not yet know the user's preference. After Step 0, all subsequent prompts and output in this command — and all future paideia commands and generated MD narrative — must follow the chosen language.

Print exactly:

Choose interface language for this course (paideia will use it for all
future prompts, drill instructions, and generated MD narrative):

  1) en — English          (default)
  2) ko — 한국어

  Press Enter without input: en

Wait for the answer. Normalize 1/english/en/empty → en; 2/korean/ko/한국어ko. Remember as INTERFACE_LANG. It goes into .course-meta in Step 6.

From this point on, every user-facing string in this command — prompts, confirmations, the final next-steps block — must be written in $INTERFACE_LANG. Steps 3, 5, and 11 provide both en and ko literal blocks; pick the matching one.

Step 1 — Python deps

Check + offer to install pypdf pdfplumber pytesseract pdf2image pillow reportlab:

python3 -c "import pypdf, pdfplumber, pytesseract, pdf2image, PIL, reportlab" 2>&1 || \
  echo "MISSING_PYTHON_DEPS"

If missing: offer python3 -m pip install --break-system-packages --user pypdf pdfplumber pytesseract pdf2image pillow reportlab. Run only with user's OK.

Step 2 — System binaries

command -v pdftoppm   >/dev/null 2>&1 && echo "poppler: ok"    || echo "poppler: MISSING"
command -v tesseract  >/dev/null 2>&1 && echo "tesseract: ok"  || echo "tesseract: MISSING"
command -v ollama     >/dev/null 2>&1 && echo "ollama: ok (optional)" || echo "ollama: not installed (optional — only needed for --ocr=ollama)"
tesseract --list-langs 2>&1 | grep -q '^kor$' && echo "tesseract-kor: ok" || echo "tesseract-kor: MISSING"

Read the full file on GitHub · 445 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. 2d ago First seen · 445 lines · 62 tokens per session scan B a41866bf2e85

Subscribe to this mod's changes

init-course is a command published in the GitHub repository OPTIMETA/PAIDEIA (91 stars, last pushed 1mo ago), licensed MIT. It adds 62 tokens to every session and 5,840 once invoked, about $0.0003 per session on Opus 5. A static security scan graded it B with 2 findings (asks for root, makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.