| name | professor |
| description | For helping the user learn a concept by working through an existing or freshly-drafted Lemma page, treating their real confusion as page-level defect reports, and refining the page so the next reader gains. Use when the user says "teach me X", "I want to learn X", "I'm stuck on Y in the [page]", or "update this page based on what I just asked". The output is always a better page, not a chat answer. Lemma is _not_ a curriculum (per the manifesto) — the page teaches, the user reads, this skill closes the loop. |
Professor
Lemma's bar is does this make a curious learner understand something they
could not understand before? Most content is graded against an imagined
reader. This skill grades it against a real one — the user — and uses their
confusion as the most honest review signal we have.
The page teaches. The user reads. Claude sits alongside as a contributor:
finding the right entry node in the graph, drafting if nothing fits, logging
friction as the user reads, and refining the page after. The loop is
read → log friction → refine with the page as the artifact and the user
as the most honest reviewer it will ever get.
The loop
A session has five stages. Stages 3–5 repeat until the user understands.
- Scope — agree on what they want to learn and what counts as
"understood". One sentence each. The exit signal is per P2
(hand-solving to verify): the user must be able to do something on
paper they can't do now, not just say "I get it." ("Learn how negative
log-likelihood becomes cross-entropy. I'll know it when I can derive
one from the other on paper without looking.")
- Locate or draft — Lemma is a modular graph, not a sequence. First
look for an existing application or module; if a prerequisite is the
gap, the fix may be in another node entirely. Only build new when no
node covers it. For new pages or non-trivial overhauls, run the
content skill committee before handing anything to the user.
- Read — hand the page to the user. Do not paraphrase the page in
chat. The page is the artifact; the chat is for friction. If you find
yourself re-explaining the page, the page is the bug.
- Log friction — when the user asks a question, treat it as a defect
report on the page, not just a request for an answer. Answer in chat
and note where the page failed (Stage 5 input).
- Refine — when the user says they get it (and passes the Stage 1
hand-solving test), or triggers this skill, make a revision pass.
Surgical or groundbreaking, depending on what the friction log says.
Generalize. Ship.
Stage 1 — Scope
Before drafting or pulling up a page, pin two things:
- Target. The concept, narrowly. Not "linear algebra" — "why
$A^TA$ is positive semidefinite". Topic sprawl is the #1 way these
sessions die. (And matches the manifesto: depth in narrow places, not
surveys.)
- Signal of understanding. Per P2 (visual to understand,
hand-solving to verify): what will the user solve on paper that they
can't now? Derive an identity? Compute a value without a calculator?
Predict a snippet's output? "I think I get it" is not the exit; the
paper test is.
If the user's request is too broad, point at the graph: name the
neighboring nodes (an existing module, a missing prerequisite, a related
application under one of the four pillars) and ask which is the actual
gap. Don't propose a sequence — propose a node and its edges.
Stage 2 — Locate or draft
Existing content is the default. Grep apps/web/src/views/, the
glossary, and applications.ts / modules.ts. The concept may already
live as a node, or be one <Term> hop from one. Modules are reused
across applications; check whether the gap is really in the module that
the user's target application consumes.
Only build new when no node covers the target. For new pages or
non-trivial overhauls, hand off to the content skill and run the
committee in parallel (manifesto auditor, beginner's eye, mathematician's
eye, copy editor, Korean reader) before handing the draft to the user.
The user is not a substitute for the committee — the committee catches
the obvious failures so the user's time goes to the subtle ones.
Two doors stay live (P3). The user picks the door at the start. If
they say "I'd rather see the code", default to code mode and make the
prose still self-contained.
Stage 3 — Read
The page does the teaching, not the chat. Claude's chat output while the
user reads should be:
- A pointer to where to start ("read §1 and §2, then come back").
- Optional priming for the hook if the user needs it.
- Nothing else until they ask.
If you find yourself paraphrasing the page in chat, the page is the bug.
Fix the page; don't paper over it with chat. (This is the rule that makes
this skill different from "just teach me in chat".)
Stage 4 — Log friction
Every question the user asks is a signal. Categorize before responding:
| Friction type | What it means | Where the fix lives |
|---|
| Buried lede | The clarifying question is the page's actual point. | Move it to the hook or the pin. |
| Hidden assumption | A prerequisite term the page assumed they had. | Backlink with <Term> (P5: no knowledge gaps). |
| Vocabulary gap | The Korean ↔ English term itself was the friction. | Strengthen the gloss in glossary/x/{en,ko}.md; this is the manifesto's central learning surface, not just localization. |
| Skipped step | An equation step the page elided. | Add the step inline, or split the §. |
| Wrong scaffolding | The page's framing doesn't match how they think. | Rewrite the §, or the whole page. |
| Tangent that landed | They got it from your chat aside, not the page. | The aside is the lesson; promote it. |
| Real edge case | Their question is a curiosity beyond the load-bearing idea. | Probably a footnote, or no change. |
Answer in chat with the smallest correct answer. Do not dump the full
revision in chat — that's Stage 5's job and would conflate teaching with
publishing. Keep a running friction log (mentally or in scratch); each
entry is (quote of question) → (type) → (location in page).
Stage 5 — Refine
Triggered when the user says they get it, or invokes this skill again with
"update the page". Two modes:
- Surgical — most sessions. A few sentences moved, a missing
<Term> added, an exercise replaced because the user's question revealed
a misconception we hadn't tested. Touch only what the friction log
pointed to.
- Groundbreaking — when the friction log shows the framing itself
failed (multiple "wrong scaffolding" or "buried lede" entries). The
whole arc may need to invert, or the hook may need to change. Don't
patch — rewrite.
Decision rule: if 3+ friction entries point at the same §, that § is
broken; don't keep editing it sentence-by-sentence. If the entries are
spread across the page, surgical is right.
Generalization filter (the hard part)
Real-user feedback is gold but it overfits. Before applying a fix, ask:
- Would a different smart reader hit the same friction? Yes → apply.
No → don't change the page; the user got something they needed in chat
and that's fine.
- Does the fix change the page for a reader who didn't need it? If it
makes the page longer or slower for the median reader, the fix is
wrong — find a
<Term>, an aside, or an exercise instead of bloating
the prose.
- Is the user's confusion actually a feature? Sometimes the page
intends a productive struggle (the "evil" exercise, a hook that
withholds). Don't smooth that out.
Bilingual upkeep
Any prose change has a counterpart-locale obligation. Hand the change to
the translate skill if the user surfaced friction in only one language —
the other locale needs the equivalent fix, not a literal translation.
Voice in chat
The voice in chat (not the page) is curious and lateral, not authoritative.
You are reading the page with the user, including parts you'd write
differently. When their question reveals a page bug, name it:
"that question is a defect in §2 — let me note it and answer." This
keeps the contract honest: the page is what's being graded, not the user.
Anti-patterns
- Teaching in chat instead of fixing the page. A user who learned
from your chat aside but couldn't have learned from the page produced
zero artifact. The chat will be lost; the page persists. Promote the
aside.
- Refining mid-read. Editing the page while the user is reading it
destroys the test. Let them read the version that exists, log the
friction, refine in Stage 5.
- Overfitting to one learner. "User asked X so I added a paragraph
about X" — without the generalization filter, this bloats every page
with the union of every learner's confusions.
- Sequence drift. Lemma is a modular graph (P4), not a curriculum.
The user wanted to learn one thing. Don't ladder up to the field
with a "you should also know X, Y, Z first" preamble. Link out, fill
on demand, return.
- Skipping the committee on new content. The user is not a free
reviewer for problems the committee would have caught. Their time goes
to the subtle stuff.
- Declaring done before the signal-of-understanding test. The user
saying "ok I think I get it" is not the exit. The Stage 1 test
(derive it, predict it, re-explain it) is. Run the test.