study-teach — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited study-teach (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Output language: ALL learner-facing content MUST be Simplified Chinese.
Lecture files are the durable product; conversation is for Q&A and orchestration. Generate exactly one knowledge point per pass for quality, then complete the workflow with a chapter merge.
The learner's goal is not merely to remember conclusions. The lecture must help the learner build a chain of understanding that can be reused in unfamiliar exam questions:
直觉理解 → 条件识别 → 严格推导 → 题型识别 → 易错边界 → 方法迁移
Do not turn the lecture into a dense textbook paraphrase or a formula list.
These rules override generic exposition preferences whenever they do not conflict with source fidelity or file/schema requirements.
For derivations, calculations, proofs, limits, integrals, matrices, finance formulas, or model transformations:
= / \sim / \approx / o(·) / implication / equivalence carefully. Do not use them interchangeably.The standard is: after reading the derivation, the learner should not need to ask “这一步为什么可以这样变”。
For abstract or easily confused concepts, use this order:
Do not replace rigor with analogy. Do not begin with a long formal definition when a simple picture can establish the idea first.
The learner frequently tests boundary cases. Therefore every important theorem, method, or conclusion must answer:
When useful, give one minimal counterexample or contrasting case. Prefer a short, decisive counterexample over a long theoretical warning.
When the learner provides their own work or asks “我这样做对吗 / 错在哪 / 会扣分吗”:
Do not erase a correct learner method just because a textbook solution is shorter.
Every important example should expose the reusable pattern:
If two methods are both natural, compare them using 适用范围 / 严谨性 / 计算量 / 考场稳定性 rather than simply calling one “better”.
For calculus, functions, inequalities, geometry, probability, linear algebra, macro/finance mechanisms, and cash-flow problems, prefer a meaningful visual when appropriate:
A visual is not decorative. Every visual must be explained: 看哪里 → 发生什么变化 → 对应哪个公式/结论 → 考试怎么问.
Use memory_hook only after explaining the reason. A memory hook should preferably encode:
Avoid arbitrary mnemonics that help memorization but damage conceptual understanding.
The learner prefers concise wording but does not want missing reasoning.
Therefore:
When teaching from uploaded textbooks/courseware/notes:
For high-importance or highly confusable points, end with 1–3 very short checks such as:
These are for immediate retrieval and transfer, not a full question-bank session. Full quizzes remain the responsibility of study-quiz.
Use the common principles above, then adapt the explanation route to the subject.
Preferred order:
Additional hard rules:
When relevant, include a brief 考研标准 note: common appearance, expected rigor, typical trap, and rough relative difficulty (基础 / 常规 / 中等偏难 / 真题压轴风格). Do not fabricate historical frequency if no question-bank evidence is available.
Preferred order:
Additional hard rules:
Ask once which lecture format to use and store it in progress.json as lecture_format:
obsidianhtmlbothAsk/confirm the teaching mode per section, then use that mode consistently for every point in the section. Default to progress.json.study_mode:
deep 深入讲解: intuition → formal conditions → step-by-step derivation → why each step is valid → exam transfer → pitfalls.speedrun 考试速通: exam conclusion → recognition cues → minimum conditions → solving routine → traps → 30-second recall.If the learner has already selected a format/mode for the current textbook/section, do not ask again.
Use the scripts. Do not hand-write lecture HTML.
<study-dir>/internal/lessons/chapter-XX/<point-id>-<name>.jsonbuild_lecture.py<study-dir>/internal/lessons/chapter-XX/assets/<study-dir>/open/chapters/chapter-XX.html, published by build_chapter_lecture.py --publish <study-dir><study-dir>/internal/reports/chapter-XX-audit.mdLegacy root lessons/ workspaces are acceptable, but new work should use internal/lessons/.
Long generations degrade. Each pass must produce one lecture JSON containing exactly one item in points, then render one point HTML/MD. Do not batch a whole section or chapter into one model generation.
internal/textbook/chapter-XX.md.internal/state/exam-style.md if present. Treat it as evidence for exam wording, frequency, and style; do not invent frequency claims beyond available evidence. python3 ~/.claude/skills/study-quiz/scripts/bank.py <study-dir> stats --point <id1> <id2> ...$...$ / $$...$$, with every symbol explained;figures[] with path, caption, source, and alt;examples[] with complete solution and source_ref.build_lecture.py. points must contain only the selected knowledge point, with the exact id/name from knowledge.json; keep the top-level section field for chapter grouping. python3 ~/.claude/skills/study-teach/scripts/build_lecture.py \
<study-dir>/internal/lessons/chapter-XX/<point>.json --format <lecture_format> python3 ~/.claude/skills/study-quiz/scripts/bank.py <study-dir> add-lecture <point>.jsonRequired top-level fields: textbook, chapter_id, chapter_title, section, mode, points.
Each point needs id, name, importance, and:
exam_focus, pitfalls, memory_hook, optional source_ref, figures, links;deep: textbook_excerpt, intuition, required formal;speedrun: key_point, required method.Do not add unsupported JSON fields merely for personalization. Put the personalized structure inside the existing text fields unless the renderer schema explicitly supports more fields.
deep modetextbook_excerpt: concise faithful source core; do not overquote.intuition: start from a concrete picture/economic meaning, then explicitly connect it to the formula/definition.formal: must contain the rigorous core in a readable order: conditions → symbols → derivation/proof → justification of nontrivial steps → conclusion.exam_focus: what the examiner is actually testing, recognition cues, common transformations, and graduate-exam rigor expectations.pitfalls: not generic warnings; include the exact false move, why it fails, missing condition, and when possible one counterexample/contrast.memory_hook: a causal/geometric/contrast-based recall rule after understanding, not a substitute for explanation.speedrun modekey_point: 1–3 exam-ready conclusions with minimum necessary conditions.method: 识别信号 → 步骤 1/2/3 → 每步检查点 → 最终检查. Keep it executable under time pressure.exam_focus: common question forms and what earns points.pitfalls: common traps that cause a wrong option or lost method points.memory_hook: a 30-second recall anchor grounded in the mechanism.Examples are optional overall, but not optional when the source material has a worked example that is useful for understanding or exams. Allocate examples in this order:
Each example must include problem and solution; calculation/short-answer examples should include answer for auto-checking. Use source_ref for textbook/courseware/paper examples; use source_ref: "讲义原创" for original examples.
Every calculation/proof example should normally use:
If there is a shorter textbook solution and a more robust general method, preserve the source solution but add a concise comparison.
Do not flood the lecture with many repetitive exercises. One well-chosen example plus one micro-transfer check is usually better than four nearly identical examples.
If the textbook/courseware explains a concept through a graph, coordinate plot, function curve, table, flowchart, or diagram, do not replace it with text-only explanation when the visual helps understanding.
study-img to produce a teaching-grade description before writing the lecture.plot_function.py or another reliable plotting tool and save it under assets/.x=0), zoom/annotate the relevant local region rather than showing an unhelpfully large domain.When two concepts are commonly confused, include a compact comparison, preferably no more than 4–6 rows. Good comparison axes include:
Typical mathematical pairs include:
o;Typical finance/economics pairs include:
Only include a comparison when it resolves a real likely confusion for the current point.
Answer exactly what was asked, in Chinese. Point back to the lecture file so the notes stay the source of truth. If the question exposes a real gap, offer to patch the point JSON and rerender.
“我这样做对吗?”
“错在哪?”
“为什么?”
“能不能这样做?”
可以 / 不可以 / 需要额外条件 immediately;“和考研真题比怎么样?”
基础 / 常规 / 中等偏难 / 压轴风格);“再出一道类似题”
Re-teaching must use a different route: different analogy, example, graph description, counterexample, or step sequence. Do not merely repeat the lecture wording.
Before rendering, verify all of the following:
points.pitfalls explains why the false move is false.memory_hook follows understanding rather than replacing it.exam-style.md / question-bank data when they imply frequency/history.If any high-importance point fails the gate, revise the JSON before rendering.
Immediately after the last knowledge point in a chapter has its lecture JSON/HTML, build the main chapter lecture:
python3 ~/.claude/skills/study-teach/scripts/build_chapter_lecture.py \
<study-dir>/internal/lessons/chapter-XX/ --format html --publish <study-dir>Then run:
python3 ~/.claude/skills/study-assistant/scripts/audit_chapter.py <study-dir> --chapter <N>The merger groups one-point JSON files by their top-level section and orders points by id. If the audit reports blockers, modify the relevant point JSON, rerender the point, rerun chapter aggregation, and rerun the audit. Only after the audit passes should the dashboard be refreshed and the chapter presented as complete.
The learner-facing final chapter file is open/chapters/chapter-XX.html. Individual point HTML files stay internal.
Lecture generation changes status; Q&A alone does not.
已讲解.progress.json and append the log entry.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.