Synthèse automatique
Ce skill enregistre de façon atomique les résultats d'une session d'apprentissage des langues dans les six bases JSON du plugin Fluent, via un unique payload transmis à update-db.py.
Points forts
- Regroupe en une seule écriture atomique (tmp + fsync + rename) les mises à jour des 6 bases, avec sauvegardes préalables et validation du payload
- Évite l'édition manuelle des fichiers JSON et les risques de désynchronisation ou de concurrence
- Recalcule automatiquement la file de répétition espacée (SM-2) à partir des review_results fournis
- Documente clairement le payload attendu, les champs requis et les codes de sortie (0/1/2)
Limites
- Ne couvre que les deltas de session : l'initialisation des bases relève du skill fluent-setup
- Suppose d'appeler read-db.py au préalable pour obtenir next_session_id et l'état courant
- Dépend des variables d'environnement du plugin (CLAUDE_PLUGIN_ROOT / CLAUDE_PROJECT_DIR) et de l'arborescence .claude/hooks
- Une entrée new_vocabulary incomplète produit un enregistrement de répétition espacée incomplet
À utiliser à la fin de toute session d'entraînement (écriture, vocabulaire, oral, lecture, révision, apprentissage) lorsque les erreurs, résultats de révision et nouveaux mots doivent être persistés.
À éviter pour les opérations en lecture seule ou pour la configuration initiale des bases, qui passent respectivement par fluent-progress/read-db.py et fluent-setup.
Analyse de sécurité
PrudenceThe skill uses bash and Python for a legitimate local database-update workflow. It does not fetch remote content, exfiltrate secrets, disable safety mechanisms, or use destructive commands. Risk is limited to executing a trusted local script and mutating local JSON files, with backups and atomic writes described.
- •Executes a local Python script (`update-db.py`) via bash; the script source is not included, so safety depends on the trusted plugin repository contents.
- •Resolves the script path from environment variables (`CLAUDE_PLUGIN_ROOT`/`CLAUDE_PROJECT_DIR`), which could run a different script if those variables are misconfigured.
- •Writes/overwrites six learner JSON databases and regenerates the spaced-repetition queue; backups mitigate but same `session_id` intentionally overwrites prior data.
- •No `allowed-tools` are declared even though the skill requires shell execution and file mutation.
Exemples
Termine la session de révision : enregistre les 5 résultats de révision, les erreurs repérées et les nouveaux mots via update-db.py.La session d'écriture est finie — mets à jour les bases avec les skill_scores, les erreurs et les notes de session.Ajoute ces nouveaux mots à la file de répétition espacée et incrémente total_sessions et total_study_minutes.name: fluent-db-updater description: Atomically update all 6 Fluent learner databases (learner-profile, progress, mistakes, mastery, spaced-repetition, session-log) at session end by calling .claude/hooks/update-db.py with a single JSON payload. Use at the end of every practice session — fluent-writing, fluent-vocab, fluent-speaking, fluent-reading, fluent-review, fluent-learn — to persist the session's errors, review results, new vocabulary, and session metadata.
DB Updater
Overview
Every practice skill ends with a DB update. Instead of hand-editing 6 JSON files (error-prone, racy, easy to desync), pipe one JSON report to update-db.py. The script runs pre-write backups, validates the payload, applies all changes atomically via .tmp + fsync + rename, and rebuilds the spaced-repetition queue.
When to Use
Load this skill whenever the tutor:
- Finishes a practice session and needs to persist results.
- Needs to add new vocabulary to the spaced-repetition queue.
- Needs to record new errors, review results, or mastery changes.
- Needs to bump
total_sessions,current_streak_days, ortotal_study_minutes.
Skip this skill for read-only operations (use the fluent-progress skill or read-db.py directly) and during session setup (use fluent-setup skill instead — update-db.py is for session deltas, not bootstrap).
Instructions
1. Call the script
Run from the repo root:
python3 "${CLAUDE_PLUGIN_ROOT:-${CLAUDE_PROJECT_DIR:-.}}/.claude/hooks/update-db.py" <<'EOF'
{ ...payload... }
EOF
Exit codes: 0 success, 1 validation error, 2 I/O error.
2. Fill the payload
Required fields
session_id— string, conventionsession-NNN. Usecomputed.next_session_idfromread-db.py.date— YYYY-MM-DD.
Optional fields — omit to skip. Full canonical example (copy-paste this and fill in):
${CLAUDE_PLUGIN_ROOT:-${CLAUDE_PROJECT_DIR:-.}}/.claude/references/db-updater-payload.example.json
Key blocks the example covers: skill_scores, errors[], new_vocabulary[], review_results[], topics_covered, breakthroughs, focus_next_session, session_notes, achievements_earned, milestones.
3. Field notes
errors[]— one entry per distinct mistake this session. Collapse duplicates (samepattern_id) before sending;frequencyis bumped by the script.new_vocabulary[]— items the learner met for the first time. Fill every field; incomplete entries yield incomplete spaced-repetition records.review_results[]— items already in the queue that were reviewed. The script runs SM-2 on each. See thefluent-sm2-calculatorskill. Mapping:quality = floor(score / 2).skill_scores[].correctcounts correct exercises, not a percentage. Accuracy is derived.confidenceinlearner-profile.skillsis 0–100 integer;accuracyinprogress-dbis 0.0–1.0 float. The script handles the conversion.milestones[]— each entry is a bare string OR an object{ "milestone": <required non-empty string>, "date": <optional YYYY-MM-DD, defaults to the session date> }. Don't set a nestedsession_id; the script stamps the authoritative top-level one. A malformed entry (neither string nor object, or an object missing/emptymilestone) exits1with no files written. Each milestone becomes both asession-log.milestones[]record and alearner-profile.achievements[]entry.
4. Read before writing
Always call read-db.py at session start to get current state + next_session_id. Don't read each JSON file separately:
python3 "${CLAUDE_PLUGIN_ROOT:-${CLAUDE_PROJECT_DIR:-.}}/.claude/hooks/read-db.py"
Returns all 6 databases plus computed fields (due_reviews_count, next_session_id, streak_active, days_since_last_session).
Examples
Example 1 — /fluent-review session with 5 items
python3 "${CLAUDE_PLUGIN_ROOT:-${CLAUDE_PROJECT_DIR:-.}}/.claude/hooks/update-db.py" <<'EOF'
{
"session_id": "session-012",
"date": "2026-04-24",
"duration_minutes": 12,
"command_used": "/fluent-review",
"skills_practiced": ["vocabulary", "grammar"],
"skill_scores": {
"vocabulary": { "exercises": 3, "correct": 3, "time_minutes": 7 },
"grammar": { "exercises": 2, "correct": 1, "time_minutes": 5 }
},
"review_results": [
{ "item_id": "vocab_huis", "quality": 5 },
{ "item_id": "vocab_deur", "quality": 4 },
{ "item_id": "vocab_raam", "quality": 5 },
{ "item_id": "grammar_omdat_word_order", "quality": 2 },
{ "item_id": "grammar_past_tense", "quality": 4 }
],
"errors": [
{
"pattern_id": "grammar_omdat_word_order",
"category": "grammar",
"your_answer": "omdat ik ben moe",
"correct_answer": "omdat ik moe ben",
"context": "subordinate clause word order",
"severity": "critical"
}
],
"focus_next_session": ["Drill 'omdat' word order"]
}
EOF
Example 2 — /fluent-vocab session with a new word
python3 "${CLAUDE_PLUGIN_ROOT:-${CLAUDE_PROJECT_DIR:-.}}/.claude/hooks/update-db.py" <<'EOF'
{
"session_id": "session-013",
"date": "2026-04-25",
"command_used": "/fluent-vocab",
"skills_practiced": ["vocabulary"],
"new_vocabulary": [
{
"item_id": "vocab_keuken",
"item_type": "vocabulary",
"content": "de keuken",
"answer": "the kitchen",
"category": "household_rooms",
"difficulty": "A1",
"initial_quality": 4,
"priority": "medium"
}
]
}
EOF
Critical Rules
- Call once per session, at the end. The script rebuilds the review queue each run — partial updates risk inconsistency.
- Never hand-edit
spaced-repetition.review_queue. It's regenerated from scratch on every run. - Same
session_idreplaces. Sending the same ID twice overwrites the first call. Useful for corrections, dangerous if unintentional. - Backups are automatic. Written to
.backups/pre-update-<session_id>/before any change. Check there to roll back. - Exit code 1 means validation failed, no files touched. Fix the payload and retry.
- Exit code 2 means I/O failure, no files touched. Check disk space, permissions, then retry.
Why This Matters
Six interdependent JSON files must agree: a new session-log entry, a bumped total_sessions, updated SM-2 params, new mistake patterns, recalculated accuracy, refreshed streak. Hand-editing causes silent desync — streak says 7 days but session-log has 6 entries, mastery says 4 stars but accuracy says 45%. The script is the single source of truth.
Du fichier au premier essai
Le téléchargement contient exactement le contenu affiché sur cette fiche. Cette copie peut différer de la dernière version du dépôt source.
Consulter la source et ses fichiers annexesCe téléchargement contient uniquement SKILL.md. Les scripts, références, modèles et dépendances éventuels ne sont pas inclus. Récupérez les fichiers nécessaires depuis la source en conservant leur arborescence avant de poursuivre.
1. Télécharger le fichier
Télécharger SKILL.mdDepuis la racine d’un projet de test, enregistrez le fichier sous .skill-downloads/atomic-fluent-database-updater-mrx3xzpq/SKILL.md, ou utilisez la commande suivante. Ce dossier sert à examiner la skill avant son installation.
Commande pour macOS/Linux ou WSL : un shell POSIX et curl sont nécessaires. Sous Windows sans WSL, utilisez le bouton de téléchargement et créez le dossier manuellement.
mkdir -p '.skill-downloads/atomic-fluent-database-updater-mrx3xzpq' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/atomic-fluent-database-updater-mrx3xzpq/download' --output '.skill-downloads/atomic-fluent-database-updater-mrx3xzpq/SKILL.md.part' && mv '.skill-downloads/atomic-fluent-database-updater-mrx3xzpq/SKILL.md.part' '.skill-downloads/atomic-fluent-database-updater-mrx3xzpq/SKILL.md'2. Vérifier les prérequis
Lisez SKILL.md avant de l’utiliser. Si le fichier cite des scripts ou services externes, examinez-les et préparez les accès nécessaires dans votre environnement de test.
Aucune section de prérequis reconnue dans ce fichier. Cela ne signifie pas qu’il est autonome : les bibliothèques, outils et accès peuvent être cités ailleurs dans le contenu ou dans le dépôt source.
Les plateformes de la fiche sont des indications du catalogue. Les chemins ci-dessous suivent la documentation des outils ; ils ne prouvent pas que cette skill y a été exécutée. Aucune version minimale de ces outils n’est attestée pour cette fiche.
3. Charger la skill
Après vérification, copiez le dossier complet dans le projet avec l’une des commandes ci-dessous, puis ouvrez une nouvelle session de l’outil. La commande s’arrête si un dossier du même nom existe déjà : comparez les fichiers avant de le remplacer.
Claude Code
test -f '.skill-downloads/atomic-fluent-database-updater-mrx3xzpq/SKILL.md' && test -s '.skill-downloads/atomic-fluent-database-updater-mrx3xzpq/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/fluent-db-updater' && cp -R '.skill-downloads/atomic-fluent-database-updater-mrx3xzpq' '.claude/skills/fluent-db-updater'OpenSkills
OpenSkills doit déjà être installé. La procédure locale install/read est contrôlée avec OpenSkills 1.5.0, qui exige Node.js ≥ 20.6.0. Aucun slug du catalogue n’est résolu automatiquement.
Installation officielle d’OpenSkillsopenskills install './.skill-downloads/atomic-fluent-database-updater-mrx3xzpq'openskills read 'atomic-fluent-database-updater-mrx3xzpq'La lecture doit afficher le contenu du fichier installé et son dossier de base. Elle ne lance ni la skill ni ses dépendances.
Pour un agent qui lit AGENTS.md, synchronisez ensuite l’index. Cette commande modifie AGENTS.md : relisez le diff avant de l’utiliser.
openskills syncMode manuel ou autre outil : joignez SKILL.md à une conversation, ou ouvrez-le dans un agent capable de lire les fichiers. Ajoutez les ressources annexes nécessaires. Il n’existe pas de dossier universel reconnu par tous les outils.
4. Faire un premier essai
Utilisez une entrée courte et fictive : un endpoint d’API, un petit document ou un brief d’interface. Dans une nouvelle conversation, joignez le fichier ou donnez son chemin à l’agent, puis adaptez cette demande :
Lis .skill-downloads/atomic-fluent-database-updater-mrx3xzpq/SKILL.md et applique ses instructions à cet exemple : [décrire une entrée de test]. Indique les fichiers, dépendances ou accès qui manquent. Produis le résultat demandé par la skill sans inventer de données ni exécuter de script non examiné.Résultat attendu : une sortie correspondant aux instructions de la skill, ou une liste précise des prérequis manquants. Une simple confirmation de lecture ne valide pas le premier usage. Si une ressource externe est indisponible, ce parcours reste à tester.
Créer des cartes interactives avec kepler.gl
Data & IA
Création de cartes interactives et export HTML autonome avec le package Python keplergl, à partir de données géospatiales (DataFrame, GeoJSON, CSV).
Optimisation de paramètres par agent
Data & IA
Guide d'optimisation de systèmes configurables avec objectif mesurable, via des essais bornés et une recommandation fondée sur des preuves.
Relance des visiteurs ICP
Data & IA
Identifiez les utilisateurs inscrits correspondant au profil client idéal mais qui n'ont pas activé, et rédigez des messages de relance personnalisés pour les réengager.