Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add skills/m98/fluent/fluent-progressnpx skills add m98/fluent --skill fluent-progressgit clone --depth 1 https://github.com/m98/fluentWhat it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00074 | $0.01615 |
| Opus 5 | $0.00037 | $0.00807 |
| Sonnet 5 | $0.00015 | $0.00323 |
| Haiku 4.5 | $0.00007 | $0.00161 |
Grade A, and why
fluent-progress scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 225 lines — stays where its author put it; the contents beside it link to each section on GitHub.
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:
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/):
<data_dir>/learner-profile.json<data_dir>/progress-db.json<data_dir>/mastery-db.json<data_dir>/mistakes-db.json<data_dir>/spaced-repetition.json<data_dir>/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.
# 📊 {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}"
What ships with it
1 file beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2d ago First seen · 225 lines · 74 tokens per session scan A fb36fca80e01
fluent-progress is a skill published in the GitHub repository m98/fluent (381 stars, last pushed 2mo ago), licensed MIT. It adds 74 tokens to every session and 1,615 once invoked, about $0.0004 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
systematic-debugging
Use when encountering any bug, test failure, or unexpected behavior, before proposing fixes.
next-cache-components-adoption
Turn on Cache Components in a Next.js app and resolve the blocking routes it surfaces. Use when the user wants to enable, adopt, or migrate to Cache Components, flip the cacheComponents flag, work through a flood of blocking-prerender / instant validation errors, run the cache-components-instant-false codemod, or…
babysit-pr
Babysit a GitHub pull request after creation by continuously polling review comments, CI checks/workflow runs, and mergeability state until the PR is merged/closed or user help is required. Diagnose failures, retry likely flaky failures up to 3 times, auto-fix/push branch-related issues when appropriate, and keep…
imagegen
Generate or edit raster images when the task benefits from AI-created bitmap visuals such as photos, illustrations, textures, sprites, mockups, or transparent-background cutouts. Use when Codex should create a brand-new image, transform an existing image, or derive visual variants from references, and the output…
cpu-profile-analysis
Analyze V8/Chrome CPU profiles (.cpuprofile) and DevTools trace files (Trace-.json). Use when: profiling performance, investigating slow functions, comparing code paths, finding bottlenecks, analyzing timeToRequest, understanding call trees from sampling profiler data, analyzing layout/paint/rendering, investigating…
next-cache-components-optimizer
Drive a Next.js route to instant navigation by setting up an agentic loop, under Cache Components / PPR, on initial load (hard navigation) and client-side navigation (soft navigation). Encode the goal as a failing @next/playwright instant() e2e and work it to green, one verified route at a time; the shipped test then…