From fluent
Computes SM-2 spaced-repetition scheduling for Fluent language learning: score-to-quality conversion, interval updates, easiness factor adjustments, and queue routing.
How this skill is triggered — by the user, by Claude, or both
Slash command
/fluent:fluent-sm2-calculatorThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
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.
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 fluent-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 fluent-db-updater skill for the payload schema.
python3 "${CLAUDE_PLUGIN_ROOT:-${CLAUDE_PROJECT_DIR:-.}}/.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.
npx claudepluginhub m98/fluent --plugin fluentRuns a daily spaced-repetition review session using SM-2 algorithm. Loads due items, generates targeted exercises, evaluates responses, and updates scheduling parameters.
Designs a study system using expanding intervals (e.g., Day 1→2→4→8) to maximize long-term retention with minimum time investment.
Configures individual spacing algorithms using student performance data and forgetting curves. Use when personalizing retention schedules in adaptive learning platforms.