From fluent
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.
npx claudepluginhub m98/fluent --plugin fluentThis skill is limited to using the following tools:
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.
Runs interactive vocabulary drill sessions using spaced repetition, flashcard prompts across recognition, production, and cloze modes, with per-answer scoring and batched DB updates via Python/Bash. Triggered by /vocab.
Reviews learning progress across topics or specific ones, showing quiz scores, module completion, weak areas, trends, spaced repetition due items, and study recommendations.
Tracks study sessions with spaced repetition reminders, active recall techniques, progress dashboards, technique suggestions, and exam prep schedules.
Share bugs, ideas, or general feedback.
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.
Trigger this skill only when the learner types /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 /vocab or /learn instead.
python3 .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:
- `/learn` — adaptive mixed practice
- `/vocab` — learn new words
- `/progress` — see your stats
# 🔄 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!** 💪
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:
mistakes-db, create a scenario that forces the correct form. E.g. formal_informal_confusion → ask the learner to complete a formal email opening.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:**
Use the 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 db-updater payload:
{ "item_id": "vocab_huis", "quality": 4 }
The update-db.py script runs the SM-2 math (see sm2-calculator skill) and rebuilds the queue. Mapping: quality = floor(score / 2).
## Progress Update
**Reviewed:** {N}/{total}
**Accuracy:** {percent}%
**Time Remaining:** ~{min} min
Keep going! 💪
## 🎉 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}! 🌟
Use the db-updater skill:
command_used: "/review", skills_practiced: [derived from reviewed items]skill_scores — aggregate per skill touchedreview_results[] — every item reviewed, with qualityerrors[] — only patterns where the learner got it wrong (bumps frequency)focus_next_session[] — the 2-3 items with lowest quality this sessionSave exchange to /results/review-session-{NNN}.md for later analysis.
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.)
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 ⭐⭐⭐⭐⭐.)
/review every day. Missing a day breaks the intended spacing./review. Long interactive + SM-2 mutation.spaced-repetition.json. Queue is rebuilt on every update-db.py call.Tell the learner if they ask: