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.
npx agentmods add skills/smileynet/teach-me/lesson-validationnpx skills add smileynet/teach-me --skill lesson-validationgit clone --depth 1 https://github.com/smileynet/teach-meWrote 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.
[](https://agentmods.dev/skills/smileynet/teach-me/lesson-validation)<a href="https://agentmods.dev/skills/smileynet/teach-me/lesson-validation"><img src="https://agentmods.dev/badge/skills/smileynet/teach-me/lesson-validation.svg" alt="Measured on agentmods" height="20"></a>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.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00055 | $0.01602 |
| Opus 5 | $0.00028 | $0.00801 |
| Sonnet 5 | $0.00011 | $0.00320 |
| Haiku 4.5 | $0.00006 | $0.00160 |
Grade A, and why
lesson-validation scanned grade A with 0 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 6d 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.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 123 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Lesson Validation
Run a comprehensive compliance check on one or more lesson pages against all teach-me quality guidelines. Designed to be dispatched as a subagent for independent review — no context from the generation session needed.
When to use
- After generating a lesson (Phase 4 verify in generate-topic)
- Before marking a topic complete
- Periodic audits of existing lessons
- When reviewing adopted/imported lessons (like proto lessons from other projects)
- When guidance changes and existing lessons need re-validation
Input
- A lesson HTML file path (or
--allfor every lesson in a workspace) - The workspace path (for locating reference/code directories, MAP.md, glossary)
Checks (ordered by severity)
Gate checks (MUST pass — blocks completion)
| # | Check | What to verify | How |
|---|---|---|---|
| G1 | Page renders | HTTP 200, no failed resource loads (CSS, JS) | Playwright: load page, check requestfailed events |
| G2 | Template compliance | Has DOCTYPE, style.css link, page-shell.js, breadcrumb nav, import map | Parse HTML for required elements |
| G3 | Code files exist | Every <pre data-file="X"> has a corresponding reference/code/{slug}/X |
Scan data-file attrs, check filesystem |
| G4 | SVG uses CSS vars | No hardcoded hex in inline SVGs | tools/check-svg-vars.py or regex scan for #[0-9a-f]{3,6} inside <svg> |
| G5 | Links valid | Internal links resolve, external links return 2xx | mise run verify or manual link check |
Quality checks (SHOULD pass — report but don't block)
| # | Check | What to verify | How |
|---|---|---|---|
| Q1 | Narrative framing | No <pre> immediately after an <h2>/<h3> with no prose between |
Scan DOM: if a code block's previous sibling is a heading, flag it |
| Q2 | Code block metadata | <pre> blocks that look like named files have data-file attr |
Heuristic: contains shader_type, extends, import, or fn main → should have data-file |
| Q3 | Diff blocks marked | Blocks with <span style="color:var(--error)"> or var(--success) have data-mode="diff" |
Scan for colored spans inside <pre> without data-mode |
| Q4 | Fragment blocks marked | One-liner code blocks or blocks without file headers have data-mode="fragment" |
Heuristic: <3 lines + no file-type header → likely fragment |
| Q5 | Glossary coverage | Domain terms in the lesson text are in the glossary-data island | Compare technical terms against glossary JSON |
| Q6 | Key concept block | Lesson has .key-concept div |
DOM check |
| Q7 | Exercise tests core concept | Exercise exists with hint+answer AND tests the lesson's Win statement (not a peripheral gotcha) | Check for details/summary + compare exercise topic to lesson Win/key-concept |
| Q8 | Read more links | New concepts introduced have links to official docs | Scan .note blocks with "New concept" for presence of <a href> |
| Q9 | Accessibility | SVGs have role="img" + <title>, images have alt text |
DOM scan |
| Q10 | Dark/light rendering | Page renders correctly in both themes | Playwright: toggle theme, check body BG + text color are distinct |
| Q11 | Navigation links | Previous lesson's "What's Next" links to this lesson; this lesson links back to previous | Check prereq lesson file for <a href="this-lesson"> in next-steps section |
| Q12 | Decision callouts complete | Any <strong>Alternative:</strong> note includes decision criteria (when-to-use, default) |
Scan note divs: if contains "Alternative" but missing "when to use"/"prefer"/"default" → warn (implemented as Q14 in check-lesson.py) |
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.
- 6d ago First seen · 123 lines · 55 tokens per session scan A 90e97625b7b5
lesson-validation is a skill published in the GitHub repository smileynet/teach-me (3 stars, last pushed 2d ago), licensed MIT. It adds 55 tokens to every session and 1,602 once invoked, about $0.0003 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
anki
Anki spaced repetition learning system reference. Covers the science of SRS and SM-2 algorithm, card design principles, optimal deck settings, FSRS scheduler, study workflow, essential add-ons, custom templates, filtered decks, and AnkiConnect API.
reading-metaskill
当用户想养成阅读习惯、问「读什么书/怎么读」「如何学习新领域/怎么入门某学科」时调用。 核心理念: 阅读是终极元技能; 读你所爱直到爱上阅读, 没有读完义务; 读原著与经典优先; 以教促学; 每天1-2小时即可进入极少数人行列。 不适用于: 具体某本书的书评、考试备考资料选择。 Triggers: 阅读/读书/怎么学习/入门/原著/书单/reading/how to learn.
textbook-distillation
Turn a textbook or long-form source into a self-paced learning track: chapter map, lesson plan, then self-contained HTML lecture notes (styled as the human specifies) with worked examples, exercises, and checkpoint questions. Read this for "lecture notes" / "study notes" / "course" / "syllabus" requests from a…
learning-notes-automation
学习笔记自动化:视频/播客转录 → 知识点提取 → 闪卡生成 → 知识图谱更新。触发词:学习笔记、闪卡、Anki、知识提取、视频学习.
antivibe
Code learning and audit framework. Analyze any codebase — new, legacy, or AI-generated — and produce educational explanations or architectural audits. Use when the user wants to understand WHAT and WHY behind any code, not just accept it.
baiyueguang-learning
Transform knowledge points into an investigable information network using the Baiyueguang Learning Method.