Roman Prigodskii

All work

indelible

Open source, MIT or Apache-2.0

A tutor for teaching yourself anything, built as a skill for Claude Code. It plans backwards from your date, teaches from sheets you read and then close, marks your work from photos of the paper, and tests everything again, cold, two days later.

romanprigodskii.github.io/indelible
The practice sheet on indelible’s site, which I built. Question 2 is answered without a check, and the marking shows the one that would have caught the slip. Recorded in Chrome.
tests, run on macOS, Linux and Windows
588
lines of Python in its scripts, standard library only
17,743
rules in the sheet checker
14
network requests made by the scripts
0

Nothing counts until it survives 48 hours

A score on the day you learned something mostly shows that the explanation is still fresh. So every new skill is tested again two days later, on fresh questions, with nothing looked at in the 24 hours before, and that is the first score that counts. A question missed there comes back after 1 day, 3 days, 1 week and 3 weeks.

One topic, from the lesson to retiredOne topic on indelible's default intervals, with time on a log scale. Day 0, the lesson: 6 of 6 on the drills, which is practice and does not count. Day 2, 48 hours later and cold: the 2-day recheck, 3 of 4, the first score that counts. The question it missed comes back after 1 day (day 3), 3 days (day 6), 1 week (day 13) and 3 weeks (day 34), passing each time, and after four passes on four different days it is retired. The scores are an example, not a measurement.48 hours, cold+1 day+3 days+1 week+3 weeksDay 0the lesson: 6 of 6practice onlyDay 2the recheck: 3 of 4the first that countsDay 3the miss, backpassedDay 6passedDay 13passedDay 34four passes on four daysretired
One topic, from the lesson to retiredOne topic on indelible's default intervals, with time on a log scale. Day 0, the lesson: 6 of 6 on the drills, which is practice and does not count. Day 2, 48 hours later and cold: the 2-day recheck, 3 of 4, the first score that counts. The question it missed comes back after 1 day (day 3), 3 days (day 6), 1 week (day 13) and 3 weeks (day 34), passing each time, and after four passes on four different days it is retired. The scores are an example, not a measurement.48 hours+1 day+3 days+1 week+3 weeksDay 0the lesson: 6 of 6, practice onlyDay 2 the recheck: 3 of 4the first that countsDay 3 the miss, back, passedDay 6passedDay 13passedDay 34four passes on four days, retired
One topic on indelible’s default intervals, with days on a log scale. The scores are an example, not a measurement. From the recheck on, the marks are blue: those scores count.

Every number the tool reports carries that label, measured or practice. The method was developed with one learner over about four weeks, which is not a controlled study. Its principles come from well-studied effects, retrieval practice, spacing and interleaving, and the intervals are defaults a learner can change.

Check backwards, in writing

Beside every answer goes one written check that runs the other way: put the answer back into the question, rebuild the total, or test the definition against the question’s words. Solving it again in your head tends to repeat the slip. A check on paper catches it, so drills and rechecks print a check line under every answer, with a hint while the topic is new.

Question 4 of a 2-day recheck printed by indelible: Solve 3x + 5 = 20, a box for x, and under it a Check line with the hint, Put your x back into 3x + 5.
Question 4 of a 2-day recheck, printed by indelible.

Each sheet ends with one line, Least sure I chose the right idea, instead of a confidence mark on every answer. Doubt tends to fire on the arithmetic, while the costly mistakes are confident misreadings of a definition.

Three rules the model can’t skip

A skill is a set of instructions, and a model can break an instruction. So the three rules that matter most are enforced by the scripts, and Claude has to go through them.

  1. A sheet Claude has written

    the sheet checker

    a sheet you can print

    It refuses a measuring sheet that names its topic, an answer from the key anywhere in the text, and a drill with no check line.

  2. Your attempt, filed as a photo or typed answers

    the sealed key

    the answer key, for marking

    Keys are sealed when a sheet is built. A helper agent writes each sheet and its key to files, so the answers never pass through the chat.

  3. The next session opens

    the brief

    what the last one skipped, done first

    A session left open is closed first, missed sessions are asked about, and a recheck whose window has passed is dealt with before anything new.

What each script stands between.

The scripts are plain Python with no dependencies. They make no network requests, and a browser they start to print a sheet to PDF runs with its network blocked.

What a session opens with

When a session starts, Claude reads one summary, the brief. The scripts build it from plain files in a folder the learner chooses: what is due, how the last sessions went, and every number with the kind of evidence behind it.

$ python3 indelible.py brief
IELTS Academic · exam · 2026-12-12 (58 days left)
NOW/NEXT: today 07:00–07:15 2-day recheck (mixed) (15 min) · today 07:15–08:00 fixing mistakes: 2-day recheck first, then the mistakes from the diagnostic (45 min)
DUE: 2-day rechecks ready now: 1 · mistakes due: 1 slip · mistakes to fix before they come back: 1
MASTERY (0–5): Matching headings 2 · True, false or not given 1 · Task 1 overview 1 · Paraphrase 1
LAST SESSIONS:
  Tue 13 Oct 07:00 · 52 of 60 min · 9 questions, 9 right · closed same day
  Mon 12 Oct 07:00 · 50 of 60 min · 8 questions, 4 right · closed same day
PACE: mixed sheet about 142 s per question (1 sheet; plan 99 s) [measured] · reading about 100 s per question (1 sheet; plan 70 s) [practice]
The first lines of the brief for the sample study folder in the repository, at its fixed clock, Thursday 15 October 2026. The learner is invented.

Installing it is two commands in Claude Code. Then you say what you are learning and by when, and answer a few questions.

claude plugin marketplace add romanprigodskii/indelible claude plugin install indelible@indelible