Spaced-Repetition Review Session
SkillProductivityRun today's spaced-repetition review queue — items scheduled by SM-2 that need reinforcement before the learner forgets them. Triggered only when the learner types /fluent-review. Pulls due items from spaced-repetition.review_queue.today, generates a targeted exercise for each, evaluates the response, updates SM-2 parameters, and reshelves items into the correct future queue.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Spaced-Repetition Review Session skill
What this skill tells your AI
The instructions your AI receives, as published by m98/fluent in .claude/skills/fluent-review/SKILL.md and read by ahel’s review.
Overview
Replay items the learner learned before, timed so they hit just before the forgetting curve drops them. This is the single most effective session type — the system depends on it running daily. Items the learner gets right get pushed further into the future; items they miss come back tomorrow.
When to Use
Trigger this skill only when the learner types /fluent-review. The skill is gated with disable-model-invocation: true — mutating SM-2 state from a misread prompt would cascade through every future session.
Skip this skill when the queue is empty — suggest /fluent-vocab or /fluent-learn instead.
Instructions
1. Load review queue
python3 "${CLAUDE_PLUGIN_ROOT:-${CLAUDE_PROJECT_DIR:-.}}/.claude/hooks/read-db.py"
Read spaced-repetition.review_queue.today and daily_limits.review_items_per_day. Sort items by priority (critical → high → medium → low). Cap at the daily limit (usually 20).
If the queue is empty:
🎉 No reviews due today! Your spaced repetition is up to date.
Want to practice something new? Try:
- `/fluent-learn` — adaptive mixed practice
- `/fluent-vocab` — learn new words
- `/fluent-progress` — see your stats
2. Opening
# 🔄 Today's Spaced Repetition Review
Hallo {name}! Time to review items your brain is about to forget. This keeps everything fresh. 🧠
**Items Due Today:** {count}
**Estimated Time:** ~{minutes} min
Why review? Spaced repetition prevents forgetting, moves items into long-term memory, and builds automaticity.
**Ready? Let's start!** 💪
3. Generate exercise per item
Each item has:
{
"item_id": "...",
"item_type": "error_pattern | vocabulary | grammar_rule",
"easiness_factor": 2.5,
"interval_days": 6,
"repetitions": 2,
"due_date": "YYYY-MM-DD",
"priority": "critical | high | medium | low",
"content": "...",
"answer": "..."
}
Generate an exercise matched to item_type:
- error_pattern: load the pattern from
mistakes-db, create a scenario that forces the correct form. E.g.formal_informal_confusion→ ask the learner to complete a formal email opening. - vocabulary: recognition (target → native), production (native → target), or cloze — rotate modes.
- grammar_rule: a fill-in or error-correction exercise that tests the rule.
Present one at a time:
## Review {N}/{total} — {priority emoji}
**Type:** {item_type}
**Last reviewed:** {X} days ago
**Current mastery:** {stars}
{exercise}
**Type your answer:**
4. Evaluate + update SM-2
Use the fluent-feedback-formatter skill for per-answer feedback.
Then stage the item for the end-of-session update. Do NOT hand-edit spaced-repetition.json — use review_results[] in the fluent-db-updater payload:
{ "item_id": "vocab_huis", "quality": 4 }
The update-db.py script runs the SM-2 math (see fluent-sm2-calculator skill) and rebuilds the queue. Mapping: quality = floor(score / 2).
5. Progress pulse every 5 items
## Progress Update
**Reviewed:** {N}/{total}
**Accuracy:** {percent}%
**Time Remaining:** ~{min} min
Keep going! 💪
6. Session summary
## 🎉 Review Session Complete!
**Reviewed:** {count}
**Accuracy:** {percent}%
**Time:** {min} min
### Breakdown
**Mastered (no mistakes):** {count} — won't appear again for a while 🎉
**Good (minor slips):** {count} — next in {X} days
**Need more practice:** {count} — tomorrow again
### Next Review Schedule
- Tomorrow: {count}
- This week: {count}
- Next week: {count}
**Streak:** 🔥 {X} {day/days} 🔥
**Tip:** {one line of advice based on accuracy}
{target-language well done}! 🌟
7. Update all databases
Use the fluent-db-updater skill:
command_used: "/fluent-review",skills_practiced: [derived from reviewed items]skill_scores— aggregate per skill touchedreview_results[]— every item reviewed, withqualityerrors[]— only patterns where the learner got it wrong (bumps frequency)focus_next_session[]— the 2-3 items with lowest quality this session
Save exchange to /results/fluent-review-session-{NNN}.md for later analysis.
Examples
Example 1 — vocabulary review with wrong answer
Review 3/12 — 🔴
Type: vocabulary Last reviewed: 6 days ago Current mastery: ⭐⭐⭐☆☆
Dutch: het raam
What does it mean in English?
Learner: "the door"
❌ Close — those are both openings in a wall, but not the same.
Corrections:
- 🟡 "the door" → "the window" (vocabulary —
het raamis window;de deuris door)Correct version: "het raam" = the window.
Score: 3/10 💪 Easy to mix — we'll review this again soon.
(Logged:
review_results[]item quality=1 →interval_days=1, repetitions=0, stays in today's queue.)
Example 2 — correct answer with mastery bump
Review 7/12 — 🟡
Type: grammar_rule Last reviewed: 14 days ago Current mastery: ⭐⭐⭐⭐☆
Complete: "Ik schrijf u omdat ik ____ kan komen." (reason: can't come)
Learner: "niet"
✅ Perfect — omdat-clause word order locked in.
Answer: "Ik schrijf u omdat ik niet kan komen."
Score: 10/10 🎯
(Logged: quality=5 →
interval_days = round(14 * EF), queue:later.consecutive_correct= 5, mastery → 5 ⭐⭐⭐⭐⭐.)
Critical Rules
- Daily. The whole system assumes the learner runs
/fluent-reviewevery day. Missing a day breaks the intended spacing. - Never auto-invoke. Gated; must fire only on explicit
/fluent-review. Long interactive + SM-2 mutation. - One item at a time. Rushing = false positives.
- Let the learner struggle. If they don't remember, that's useful data (quality 0-2). The algorithm needs honest signals.
- Never hand-edit
spaced-repetition.json. Queue is rebuilt on everyupdate-db.pycall.
What the Schedule Means
Tell the learner if they ask:
- 1 day — new or struggling items
- 2-3 days — learning, building strength
- 1 week — getting comfortable
- 2+ weeks — strong, maintenance only
- 1+ month — mastered, long-term memory
Signals
- GitHub stars
- 399
- Forks
- 57
- Last commit
- Jun 2026
Advanced
- Catalog kind
- skill
- Gateway key
fluent-review- Source
- github.com/m98/fluent