--- name: fluent-progress description: Show the learner's language learning progress, statistics, mastery levels, streak, and achievements. Use when the learner asks "how am I doing", "show my progress", "stats", "dashboard", "what's my streak", "how many words have I learned", or invokes /fluent-progress. Read-only โ€” safe to auto-invoke. allowed-tools: Read, Bash --- # Progress Dashboard ## Overview Show the learner a comprehensive, personalized progress report with visual statistics, skill mastery levels, trends, and next goals. This is read-only: do not modify any database files. ## When to Use Trigger this skill when: - Learner types `/fluent-progress`. - Learner asks about their progress, statistics, streak, mastery, achievements, or how they're improving. - Learner asks "how am I doing", "show me my stats", "am I getting better". - After a session ends, if the learner wants a broader view than the session summary. Skip this skill when the learner is mid-practice โ€” the ongoing session skill already shows per-turn feedback, and opening the full dashboard interrupts the flow. ## Instructions ### 1. Load all 6 databases Prefer the helper script over manual Read calls: ```bash python3 "${CLAUDE_PLUGIN_ROOT:-${CLAUDE_PROJECT_DIR:-.}}/.claude/hooks/read-db.py" ``` This returns a single JSON with all 6 databases + computed fields (`due_reviews_count`, `next_session_id`, `streak_active`, `days_since_last_session`). If the helper is unavailable, fall back to reading each file directly. Resolve the data directory via `fluent_paths.data_dir()` first โ€” do NOT hardcode `data/` (plugin installs store data under `~/.claude/fluent-data/`): - `/learner-profile.json` - `/progress-db.json` - `/mastery-db.json` - `/mistakes-db.json` - `/spaced-repetition.json` - `/session-log.json` If any are missing, point the learner at `/fluent-setup` and stop. ### 2. Generate the report Use this exact structure. Fill in values from the databases; compute percentages and progress bars yourself. ```markdown # ๐Ÿ“Š {learner_name}'s {target_language} Learning Dashboard **Last Updated:** {today} --- ## ๐ŸŽฏ Overview **Current Level:** {current_level} **Target Level:** {target_level} **Progress to {next_level}:** {progress_bar} {percentage}% **Days Studying:** {total_days} **Current Streak:** ๐Ÿ”ฅ {streak_days} {day_or_days} {streak_message} **Total Sessions:** {total_sessions} **Total Study Time:** {total_minutes} minutes ({hours} hours) --- ## ๐Ÿ’ช Skills Mastery ### Writing โœ๏ธ **Level:** {n}/5 {stars} **Accuracy:** {percent}% **Progress:** {progress_bar} **Last Practiced:** {date_or_never} ### Speaking ๐Ÿ—ฃ๏ธ **Level:** {n}/5 {stars} **Accuracy:** {percent}% **Progress:** {progress_bar} **Last Practiced:** {date_or_never} ### Vocabulary ๐Ÿ“š **Level:** {n}/5 {stars} **Words Known:** {count} **Words Mastered:** {count} **Progress:** {progress_bar} **Last Practiced:** {date_or_never} ### Reading ๐Ÿ‘€ **Level:** {n}/5 {stars} **Comprehension:** {percent}% **Progress:** {progress_bar} **Last Practiced:** {date_or_never} --- ## ๐Ÿ“ˆ Progress Trends ### Accuracy Over Time {generate ASCII chart from progress-db weekly_summary} ### This Week's Summary - **Sessions:** {count} - **Minutes:** {total} - **Exercises:** {count} - **Accuracy:** {percent}% - **Skills Practiced:** {list} --- ## ๐ŸŽฏ Focus Areas ### ๐Ÿ”ด Critical (Needs Urgent Attention) {patterns from mistakes-db with mastery 0-1 and high frequency} ### ๐ŸŸก Working On (Making Progress) {patterns from mistakes-db with mastery 2-3} ### ๐ŸŸข Strong (Almost Mastered) {patterns from mistakes-db with mastery 4-5} --- ## ๐Ÿ”„ Spaced Repetition Status **Items Due Today:** {count} **Items Due This Week:** {count} **Items Mastered:** {count} --- ## ๐Ÿ† Achievements Unlocked {list from learner-profile โ†’ achievements, show locked ones with ๐Ÿ”’} --- ## ๐Ÿ“… Session History | Date | Duration | Skill | Accuracy | |------|----------|-------|----------| {most recent 5-10 sessions from session-log} --- ## ๐ŸŽฏ Next Goals **Short-term (This Week):** {derive from weak patterns + due reviews} **Medium-term (This Month):** {derive from skill mastery gaps} **Long-term:** {derive from target level gap} --- ## ๐Ÿ’ก Recommendations 1. {top weak area from mistakes-db} 2. {skill not practiced recently} 3. {due review count if > 0} --- "{personalized motivational message}" ``` ### 3. Optional interpretation footer Append this only if the learner seems new or asks what the numbers mean: ```markdown ## ๐Ÿ“– How to Read Your Stats **Mastery Levels:** - โญโ˜†โ˜†โ˜†โ˜† (1/5): Just started - โญโญโ˜†โ˜†โ˜† (2/5): Learning - โญโญโญโ˜†โ˜† (3/5): Good - โญโญโญโญโ˜† (4/5): Strong - โญโญโญโญโญ (5/5): Mastered **Accuracy bands:** 0-40% intensive, 40-60% learning, 60-75% good, 75-85% strong, 85%+ excellent. ``` ## Examples ### Example 1 โ€” minimal (A1 learner, week 1) > # ๐Ÿ“Š Mohammad's Dutch Learning Dashboard > > **Current Level:** A1 โ†’ A2 (4% to A2) > **Current Streak:** ๐Ÿ”ฅ 3 days > **Total Sessions:** 3 ยท 45 min > > ### Vocabulary ๐Ÿ“š > **Level:** 1/5 โญโ˜†โ˜†โ˜†โ˜† ยท 12 words known ยท 0 mastered > > Speaking / Writing / Reading: Not yet practiced. > > **Items Due Today:** 6 โ€” run `/fluent-review` first. > > "Three days in a row โ€” momentum matters. Keep going!" ### Example 2 โ€” trigger on natural-language question Learner: "how am I doing on Dutch?" โ†’ auto-invoke this skill, render the full dashboard. ## Critical Rules - **Read-only.** Never call `update-db.py` or edit any JSON in `data/`. - **Use the current streak value** from `learner-profile.json`. Never guess or increment. - **Use `day` vs `days`** correctly (1 = day, else days). - **Skip sections with no data.** If speaking hasn't been practiced, show "Not yet practiced" โ€” don't fabricate numbers. - **Cite the learner by name** from `learner-profile.json`. - **Use target-language greetings** where natural (e.g. "Goed gedaan!" for Dutch). ## Why This Skill Auto-Invokes Unlike session commands, this is a pure read. A false-positive (Claude opens the dashboard when the learner asked something else) costs only a few tokens โ€” no DB corruption, no interrupted practice. Worth the lower trigger bar.