training-the-reader
Skill0 starsChanged 45 days agoMITView on GitHub
Use when a teaching or study artifact must get plainer across repeated cold reads; when the same reader stalls keep recurring page after page (a term used before it is defined, a number with no origin, a 40-word sentence, a picture that decorates instead of carrying the mechanism); when a rewrite must keep code, figures and tables frozen while only the prose changes; or when cold reads and Feynman-style rewrites are being delegated to cheaper models and each read should start from what the last one found instead of re-deriving it.
In this repository21 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- avoid-sycophantic-blowbackSkill
- cadquery-modelingSkill
- capturing-judgment-as-dataSkill
- deletion-tripwireSkill
- educational-html-prepSkill
- emoting-on-8x8Skill
- feynman-explanationSkill
- guarding-silent-failuresSkill
- iterative-lesson-refinementSkill
- look-driven-iterationSkill
- managing-assumption-debtSkill
- nemesis-reviewSkill
- paladin-reviewSkill
- pause-before-nuclear-fanoutSkill
- rehearsing-against-a-counterpartySkill
- review-courtSkill
- sandwich-testSkill
- stretching-frontier-tokensSkill
- versioningSkill
- skill-name-with-hyphensSkill
The file
We split this skill into the rules it gives an agent
4 rules. About 0 are common, 4 are distinctive, and 0 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈4
Distinctive · estimate
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 27
Not for: checking truth (use nemesis-review), first-draft authoring, or pages a script can fully verify.
- Distinctive: line 59
After a kill, message the SAME agent first.
- Distinctive: line 95
Stop dispatching; the next signal is the human's own stalls, which no twin can predict.
- Distinctive: line 128
Every one was caught by a check written hours earlier for a different reason.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Training the Reader
Overview
The reader's intelligence lives in a file, not in a model. Every cold read starts by reading the defect catalog, every read ends by appending to it, and any defect class seen twice is promoted from a judgment the reader must make to a check a script makes for free. Over time the cheap model spends its tokens only on what scripts cannot judge: does the everyday picture carry the mechanism, and would a person have to read this twice.
REQUIRED BACKGROUND: superpowers:iterative-lesson-refinement (the reader profile the twin is derived from) and educational-html-prep (the Feynman page rules). This skill adds the learning loop those two lack: a catalog that grows, an audit contract that feeds it, a promotion rule.
When to Use
- The maintainer says a page is "word salad", "verbal insanity", "impossible to learn from".
- A cold read returned findings you have seen on an earlier page.
- Many files must be rewritten plainer with the code, figures and numbers untouched.
- The frontier model's quota is the bottleneck and the words will be READ, not spoken.
Not for: checking truth (use nemesis-review), first-draft authoring, or pages a script can fully verify.
The Loop (one file or one page at a time)
| Step | Who | What |
| 0 Archive | script | Copy the original beside the target. Every later check diffs against it. |
| 1 Gate | script, zero tokens | scripts/check_plain.py <file> --orig <original> --config <project.json>: frozen blocks unchanged, not longer, no sentence over the cap, banned words, term before definition, number without origin, table spacing. --selftest first. |
| 2 Read | cheap model | Dispatch from references/dispatch-templates.md. The reader reads references/defect-catalog.md FIRST, then the page, and reports quote-only findings plus the audit lines. |
| 3 Fix | cheap model | Rewrite prose under the frozen contract; frontier writes only the analogy seeds and verifies corrections. |
| 4 Re-gate | script | Same command. A fix that fails the gate is not a fix. |
| 5 Append | orchestrator | Copy the read's NEW CLASS and RECURRENCE lines into the catalog with the quote. |
| 6 Promote | orchestrator | A class seen twice gets a check in the gate, negative-tested (see guarding-silent-failures). |
Model Routing
| Work | Model | Why |
| Gates, archives, table normalizing, assembly of frozen blocks | script | Zero tokens, never drifts |
| Cold reads with the catalog in hand | cheap (Sonnet-class) | Judgment is adequate once the catalog carries the intelligence |
| Prose rewrites under the gate | cheap | The gate refuses the countable failures; the charter carries the rest |
| Analogy seeds, catalog entries, verifying a correction, the reader model | frontier | Wrong seed or wrong reader model generates a whole class of defects |
Token Rules (each from a real loss)
- Write the whole file first, then gate. A killed agent leaves a finishable file.
- Assemble by script for anything over ~20 KB. One 34 KB Write exceeded the output cap.
- Waves of three or four agents. A twelve-agent wave died on a five-hour usage limit twice.
- One read, one write, at most three fix rounds per file. Never re-read an original.
- The orchestrator never loads the page. It reads reports and gate output only.
- Readers read a RENDER, never the HTML.
scripts/render_page.py <page.html> <out.txt>keeps headings, lists, fenced code, figure step captions and [DETAILS] markers; reads cost about half (78k-106k against 156k-208k) with no loss the reports could show. - After a kill, message the SAME agent first; its transcript persists. Re-dispatch only if that fails.
The Frozen Contract (the rewrite rule)
Frozen, asserted by the gate: section headings (the numbered core, not a suffix after a colon), every code block, every figure, every table value, every measured number. Prose is everything else, and the rewrite must be SHORTER than the original. A bold "say this out loud" line may be shortened, never lengthened or removed.
Common Mistakes
| Mistake | Fix |
| Reader re-derives the profile and catalog from scratch each dispatch | Ten-line dispatch pointing at both files |
| Picture opens the section but the code shows a different bug | Reader checks the picture against the broken code's actual line |
| Rewriter adds definitions and blows the length cap | Cut a repeated explanation, never a definition |
| Freezing a heading whose suffix contains a banned word | Freeze ## N. TITLE; the suffix is prose |
| Gate splitter treats a bullet list or a bold label as one 150-word sentence | Split on blank lines, bullets, bold labels, semicolons; strip inline code before tags |
| A table followed by prose with no blank line renders an extra row | Normalizer inserts the blank line |
| Findings answered, catalog never updated | Step 5 is not optional; the next read pays for it |
| A seed picture handed to a writer as fact | Seeds are hypotheses; the writer checks the picture against the broken code's changed line (catalog C10); four of sixteen seeds were wrong |
| A scripted fix trusted because it printed "ok" | Count-assert every replace, exclude frozen regions, make prose regexes wrap-tolerant, re-run the full gate after each script |
| A new gate wired into a pipeline stage that never sees what it checks | Wire it where the whole artifact exists, then count the cases it must refuse BEFORE trusting the first green build: a done-line gate placed after the builder had peeled the done line off passed ten sheets, eight of which it should have refused |
| A scripted structural edit whose regex treats a markup prefix as text | Anchor the prefix explicitly (an optional (> ?)? let (.*\S) capture the > itself and three labels lost their blockquote), then grep for the damage signature and render one touched page before the gate's PASS is believed; a blank line inside a paragraph is not a gate class |
| A filler trim that lands inside a frozen block | Assert the match sits outside code, svg and tables before replacing; the frozen-svg check caught a five-character trim inside a figure caption |
| An exemption marker for a banned form | Fix the exception to fit the gate instead (characters in a problem became "that player"); a pronoun survived three sweeps, each fixing only the spellings it searched for, and an exemption is where the next survivor hides |
| A wrap-tolerant matcher that stops at a blockquote prefix | Join words with \s+(?:>\s?)?; a phrase straddling "the\n> interviewer" returned zero matches and looked absent |
| The first sweep of a new check trusted | Positive-test the guard: 59 of the first 70 hits were the gate's own artifacts (headings read as prose, bold labels split from their definitions, thousands separators, defined numbers re-flagged) |
The text render hands readers code with the generics deleted: <pre> content was unescaped, then the global tag strip removed <IActionResult> as if it were a tag | Park <pre> blocks before stripping tags and restore them last (fixed in scripts/render_page.py 2026-09-29); spot-check one code block in a render before trusting a read of a C# page |
When to Stop
The teaching score plateaus early (7 to 8); the finish score is what the loop moves, and it moves on executability: setup printed before launch, the condition on the bullet it modifies, the folder located on the first command line, a count stated where a chip is charged. When a re-read returns "none, ship it" and its siblings return one or two judgment items, the reader-twin is exhausted. Stop dispatching; the next signal is the human's own stalls, which no twin can predict.
Field addition (2026-09-30): HTML pages, dropped hedges, and what a twin cannot know
A ten-page HTML teaching site for a codebase ran through this loop: 409 sentences over 30 words went to 0, teach 7 to 8, finish 6 to 7. What it added:
- HTML works through the render. Gate the text render (
render_page.py), normalize its numbered headings to the gate's form, drop the one-line figure summaries, and freeze every<svg>byte for byte against the archived HTML. A wrapper of about 100 lines did it; the gate itself was unchanged. - A project config REPLACES list keys. Build it in code from the defaults plus the project's extras. In a codebase
KB, a
file:linecitation is a number's origin; without that cue every line number read as unsourced. - The gate passed while the rewrite changed 10 claims. Seven were dropped hedges. Per this skill's own promotion rule the class became a check: each hedge term's count in the rewrite must not fall below the original, with an explicit flag to pass after a writer checks that the hedge moved rather than vanished. The other three needed a drift auditor reading the before and after renders. Run one after every site-wide prose pass.
- Gate quirks shape the prose. The sentence splitter did not split before a sentence opening with inline code, so writers started sentences with filler to satisfy it and prefixed source citations with "Code:". Harmless, but it is the gate writing the page; when a quirk is worked around twice, fix the splitter.
- A twin knows how the reader reads, not what the reader must do. The final read's top fix was "add a day-one block: what to ask first". Built without asking, it was wrong: the reader already had assigned work. Act on a twin's findings about the text; turn its claims about the reader's needs into one question to the human.
Provenance
- 2026-09-02, born: a 21-walkthrough interview-prep library the maintainer called "verbal insanity" after a rebuild had reused it verbatim. Baseline cold reads 7 teach / 5 finish. After the loop: 21/21 files pass the gate, ten day pages cold-read by catalog-armed cheap readers (teach 7 to 8, finish 6 to 7; one page re-read after fixes moved 5 to 7), a 220k-token picture sweep found eight defects four full reads had missed, and eight judgment classes became script checks the same day. Catalog at 37 classes.
- 2026-09-02, the guard guarded its author: four of the orchestrator's own scripted fixes broke files in ways that looked finished (a regex ate two time lines, a trim edited a frozen table row, a normalizer overran a length ceiling by one character, an example id in a command line inflated every plan chip). Every one was caught by a check written hours earlier for a different reason.
- 2026-09-02, second pass: nine pages re-read after fixes by catalog-armed cheap readers on plain-text renders (80k-106k tokens per read, about half the HTML cost), each told the previous reads' findings and made to quote where each fix landed before scoring. Finish scores reached 7 or 8 on all ten pages (two needed a third read). Five new classes (C38-C42); five judgment classes became builder rules the same day (a conditional done line, no typed totals, no pronouns, a legend derived from the chips, hub chips synced from the pages). Three of the orchestrator's own scripted fixes misfired and were caught by gates or renders, never by their own success messages.
Field addition (2026-11-02): the lean form for a one-page dashboard, and a second reader on a cheaper model
A project dashboard (one HTML page, about 100 KB, a flow diagram and ring meters) got the loop without the gate or the
archive: render with scripts/render_page.py, ONE Sonnet read armed with references/defect-catalog.md (108K; TEACH
4, FINISH 6), the fixes made in the page builder, then a Haiku read of the first 180 lines of the new render as a named
persona (a C#/SQL expert new to ML, 92K; TEACH 5, FINISH 7, every ask "clear"). What the reads found that the author
and a visual screen could not: a glossary folded at the bottom and stale from a month before (three methods and a test
set the page no longer had), one identical outcome string printed 37 times, "notes 12" as a link label, "you" meaning
two different people on one page, glued fragments where ; had become . without a capital, and no sentence saying
what is live for users (nothing was). Two of those became builder rules the same evening (capitalise after the inserted
full stop, the shared outcome said once in the summary). Rules that held: the word list sits beside the first use, not
at the bottom; a dashboard says what is NOT in production; the second read goes to the cheaper model and gets a persona
and a line limit, and its "clear / unclear" per ask is the finish score that matters.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

