npx claudepluginhub m98/fluent --plugin fluentThis skill uses the workspace's default tool permissions.
Fluent uses SM-2 (SuperMemo 2) to decide when the learner next sees an item. This skill is the single source of truth for the algorithm. Every practice skill updates `<data_dir>/spaced-repetition.json` (where `<data_dir>` is resolved by `fluent_paths.data_dir()`) through these rules after each answered question.
Runs daily spaced-repetition review queue using SM-2 algorithm. Pulls due items for error patterns, vocabulary, grammar; generates exercises, evaluates responses, updates intervals. Invoke with /review.
Explains and configures individual spacing algorithms using student performance data and forgetting curves for personalizing retention schedules in adaptive learning platforms.
Creates evidence-based learning plans using spaced repetition, retrieval practice, interleaving, and elaboration for long-term retention. Guides goal definition, material breakdown, scheduling, and progress tracking for exams, skills, or tech mastery.
Share bugs, ideas, or general feedback.
Fluent uses SM-2 (SuperMemo 2) to decide when the learner next sees an item. This skill is the single source of truth for the algorithm. Every practice skill updates <data_dir>/spaced-repetition.json (where <data_dir> is resolved by fluent_paths.data_dir()) through these rules after each answered question.
Load this skill whenever the tutor:
easiness_factor, interval_days, repetitions, or mastery_level on a spaced-repetition item.today / tomorrow / this_week / later) to place an item in.Skip this skill when the db-updater skill is already being used — the update-db.py script runs SM-2 internally.
| Score | Quality | Meaning |
|---|---|---|
| 10/10 | 5 | Perfect, instant recall |
| 8-9 | 4 | Correct after hesitation |
| 6-7 | 3 | Correct with difficulty |
| 4-5 | 2 | Incorrect but remembered when shown |
| 2-3 | 1 | Incorrect, familiar |
| 0-1 | 0 | Complete blackout |
Rule: quality = floor(score / 2).
if quality >= 3: # correct
if repetitions == 0:
interval = 1
elif repetitions == 1:
interval = 6
else:
interval = round(previous_interval * easiness_factor)
repetitions += 1
else: # incorrect
interval = 1
repetitions = 0
Apply after every answer:
EF_new = EF + (0.1 - (5 - quality) * (0.08 + (5 - quality) * 0.02))
EF_new = max(1.3, EF_new)
Track consecutive_correct and consecutive_incorrect per item:
if consecutive_correct >= 5:
mastery_level = min(5, mastery_level + 1)
consecutive_correct = 0
elif consecutive_incorrect >= 3:
mastery_level = max(0, mastery_level - 1)
consecutive_incorrect = 0
After each answer, the item in spaced-repetition.json must have:
easiness_factor — updated via formulainterval_days — new intervalrepetitions — incremented or resetconsecutive_correct / consecutive_incorrect — one incremented, the other resettotal_reviews — incrementedmastery_level — possibly changeddue_date — today + interval_days (YYYY-MM-DD)last_reviewed — todayAfter updating:
interval_days == 1 → review_queue.tomorrowinterval_days <= 7 → review_queue.this_weekinterval_days > 7 → review_queue.laterIf the learner got it wrong (quality < 3), keep the item in review_queue.today so it reappears in the same session.
Do not hand-edit spaced-repetition.json. Call .claude/hooks/update-db.py with a review_results array — the script runs SM-2 atomically and rebuilds the queue. Only do manual math when the script is unavailable. See the db-updater skill for the payload schema.
python3 .claude/hooks/update-db.py <<'EOF'
{
"session_id": "session-NNN",
"date": "YYYY-MM-DD",
"review_results": [
{ "item_id": "vocab_huis", "quality": 4 }
]
}
EOF
See .claude/references/sm2-worked-examples.md for 4 worked examples covering: correct answer (regular case), wrong answer (reset + EF drop), 5th consecutive correct (mastery bump), 3rd consecutive wrong (mastery drop). Each example shows the full before/after state.
Quick version:
interval = round(prev * EF), repetitions += 1, EF barely moves.interval = 1, repetitions = 0, EF drops sharply, item stays in today's queue.update-db.py. Only reimplement this math when the script is unavailable.SM-2 reviews items just before the learner forgets them, maximizing long-term retention per minute of practice. Wrong scheduling means wasted reviews (too early) or forgotten items (too late). The whole Fluent system rests on these numbers being correct.