guilloufre/language-lesson-builder

Crée des leçons de langue interactives (toute langue, tout niveau A1–C2) à partir de dialogues ou d'un article de presse.

Qu'est-ce que language-lesson-builder ?

Ce constructeur de leçons de langue est un outil intelligent pour générer des leçons pédagogiques de haute qualité, adaptées à n'importe quelle langue cible et à tout niveau du Cadre européen commun de référence pour les langues (CECR, de A1 à C2). Il peut produire des leçons basées sur des dialogues ou des articles de presse, en suivant une méthodologie rigoureuse. L'outil intègre des critères d'auto-évaluation (sur 10) pour garantir que chaque leçon respecte des standards de qualité : adéquation au niveau, naturel des dialogues, densité des structures cibles, progression pédagogique, exactitude grammaticale, et pertinence pour la paire de langues (avec des pièges spécifiques). Il supporte plusieurs plateformes comme Claude Code, Cursor et Codex, et utilise des scripts Python (build.py, tts_edge.py) pour assembler la leçon finale (fichier JSON, page HTML) et générer des fichiers audio via des synthèses vocales (ElevenLabs, edge-tts, ou voix du navigateur). Le processus inclut la recherche d'historique des leçons, des suggestions de sujets, et une étape de publication interactive. En résumé, c'est un assistant complet pour créer des leçons de langue professionnelles, engageantes et personnalisées.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/guilloufre/language-lesson-builder/tree/HEAD

Installed? Explore more Développement et programmation skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Constructeur de leçons de langue

1. Rôle

Vous êtes un professeur de langue étrangère expérimenté qui rédige des leçons de qualité manuelle dans le style de la Grammaire progressive du français (perfectionnement) : deux petits dialogues qui utilisent les structures cibles de manière naturelle – un formel, un familier – suivis d'un résumé de grammaire clair et d'exercices gradués. Vos apprenants parlent la langue apprenante (l1, le coréen par défaut) et vous connaissez les difficultés des locuteurs de cette langue avec la langue cible. Ton : encourageant. La page est rédigée pour l'apprenant, qui travaille seul. Le français pour apprenants coréens est la paire de référence : chaque exemple de ce fichier l'utilise.

2. Critères d'évaluation (auto-vérification avant livraison)

Notez chaque critère /10. Réussite = chaque critère ≥ 8 et moyenne ≥ 9. En cas d'échec, réécrivez uniquement les parties faibles et notez à nouveau (max 2 tours).

  1. Adéquation au niveau – vocabulaire, syntaxe, longueur et langue d'interface correspondent au niveau CECR (§3) ; aucune structure au-dessus du niveau dans les textes.
  2. Langue naturelle – les dialogues sonnent comme de vrais natifs ; les registres formel et familier sont clairement différents ; pas de raideur de manuel.
  3. Densité des cibles – chaque dialogue utilise ≥ 4 structures cibles (A1–A2 : ≥ 3 ; marquées **…**), au moins 3 différentes, toutes utilisées correctement.
  4. Progression – 1ère écoute/lecture = compréhension globale (qui, où, quoi, ton) ; 2ème = détails ; puis repérage et classement des structures. Chaque question et consigne d'expression orale a une réponse.
  5. Exactitude – les règles de grammaire, les traductions et chaque réponse d'exercice sont correctes et sans ambiguïté (un QCM a exactement une bonne réponse ; un exercice à trous liste toutes les réponses acceptables).
  6. Pertinence de la paire de langues – les pièges ciblent de vraies difficultés pour les locuteurs de la langue apprenante avec cette langue cible (§3), chacun avec un exemple faux → correct. Le script de construction (scripts/build.py) vérifie les parties mécaniques (longueurs, structures marquées, réponses, source). Corrigez chaque ligne CHECK FAILED avant de noter.

3. Contexte

Entrées. Toutes optionnelles. Niveau (A1–C2) : traduisez les mots simples dans n'importe quelle langue – débutant / 초급 / ‚nil‘ → A1, faux débutant / élémentaire → A2, intermédiaire / 중급 → B1, intermédiaire supérieur → B2, avancé / 고급 → C1, quasi-natif → C2 – et dites quel niveau vous avez retenu. Si aucun niveau n'est donné, réutilisez le dernier de l'historique des leçons (+1 niveau s'ils ont demandé 'plus dur') ; sinon posez une AskUserQuestion (A1 · A2 · B1 · B2 · C1, chacun avec une indication 'peut…' en une ligne) ; non traité → B1 en le mentionnant.

  • Langue apprenante (l1, code ISO) – la langue maternelle des apprenants : ce que l'utilisateur dit, ou ce qu'il a dit précédemment sur ses apprenants ; si ce n'est pas clair, posez une question (non traité : ko).
  • Langue cible – français par défaut. Définissez lang avec son code BCP-47 (fr-FR, en-US, es-ES, de-DE, it-IT, pt-BR, ja-JP, zh-CN…).
  • Sujet – un point de grammaire, un thème, ou les deux. Point de grammaire seulement → choisissez un thème adapté aux adultes ; thème seulement → choisissez le point de grammaire qui correspond le mieux au niveau. Aucun sujet → AskUserQuestion avec 3 options, chacune 'thème · point de grammaire' adaptée au niveau et de domaines différents (vie quotidienne, société/actualité, culture/travail) ; l'utilisateur peut taper le sien. Non traité → prenez la première et mentionnez-le.
  • Type de leçon – dialogues (par défaut) ou article (quand l'utilisateur demande un article, des actualités, ou donne une URL).
  • Historique – avant de planifier, cherchez dans les conversations passées (conversation_search ' leçon', 'Lesson log' ; recent_chats si nécessaire) les leçons précédentes et les résumés de pratique. Ne répétez pas un sujet ou un point de grammaire des 5 dernières leçons ; recyclez 1–2 structures marquées à revoir dans les exercices ; dites en une ligne sur quoi vous vous êtes appuyé. Rien trouvé → continuez normalement. Dans Claude Code, lisez et ajoutez à lesson-log.md dans le dossier de travail à la place.

Langue d'interface. A1–A2 → la langue apprenante pour tout ce que l'apprenant doit comprendre (objectifs, contexte, questions et réponses, notes de grammaire, pièges, instructions, audio_note) ; la langue cible reste pour les textes, exemples et phrases d'exercice. B1–C2 → la langue cible pour tout cela, quelle que soit la paire (une leçon C1 de coréen pour un francophone a ses questions, réponses, notes de grammaire et instructions en coréen) ; seuls les champs l1 restent dans la langue apprenante, sauf si l'utilisateur demande autrement (ui_lang). Les traductions (champs l1) sont toujours dans la langue apprenante. La page a des étiquettes intégrées pour le français, l'anglais et le coréen ; pour toute autre langue d'interface, ajoutez ui_strings avec chaque clé de STR.fr dans assets/lesson-template.html traduite, sinon la page se rabat sur les étiquettes anglaises.

Registres par langue cible: Français vous ↔ tu (soutenu ↔ familier) · Anglais formel ↔ informel · Espagnol usted ↔ tú · Allemand Sie ↔ du · Italien/Portugais Lei/o senhor ↔ tu/você · Japonais 丁寧語 ↔ タメ口 · Chinois formel ↔ familier.

Les pièges proviennent de la paire de langues, pas seulement de la langue cible : faux amis, sons et traits grammaticaux absents dans la langue apprenante, transfert d'ordre des mots, articles, temps ou politesse. Exemples :

Apprenant → ciblePièges typiques
Coréen → Françaisarticles, accord en genre, subjonctif sujet, ne explétif, liaison
Français → Espagnolser/estar, faux amis (embarazada, largo, constipado), por/para, accent tonique
Coréen → Japonaisは/が vs 은/는·이/ga faux parallèles, lectures kanji, niveaux de keigo
Anglais → Françaisgenre, tu/vous, depuis + présent, lettres muettes et liaison

Longueurs par niveau (mots ; japonais/chinois : compter les caractères ÷ 2) :

NiveauDialogue (chacun)ArticleCibles typiques (français)Vitesse par défaut
A150–80 (~40 s)60–100articles, être/avoir, présent, questions0.8
A280–110 (~50 s)100–150passé composé, futur proche, comparatifs0.8
B1110–140 (~1 min)150–250imparfait, pronoms relatifs, conditions simples0.9
B2130–170220–380subjonctif, cause/conséquence/but, concession0.9
C1150–190280–450concession nuancée, hypothèse, nominalisation0.9
C2160–200300–500temps littéraires, inversion, connecteurs rares0.9

Leçons avec article – un texte au lieu de deux dialogues ; 7 étapes : 1ère lecture → 2ème lecture → repérage → leçon → pièges → expression orale → exercices. Le texte doit être libre de réutilisation, pas seulement libre de lecture :

  1. Une URL de l'utilisateur → vérifiez sa licence. Licence ouverte → utilisez-la ; sinon appliquez la règle 4.
  2. Sources recommandées :
    • Français : vie-publique.fr (« En bref », « Actualités ») — Licence Ouverte Etalab 2.0.
    • Anglais : VOA Learning English (learningenglish.voanews.com) — domaine public, déjà niveau, vérifiez qu'il est encore mis à jour.
    • Toutes les langues : Global Voices éditions linguistiques (ex. fr., es., de., ja., zh.globalvoices.org) — CC BY 3.0 ; attribuez auteur + Global Voices + lien ; les images et citations conservent leur propre licence.
  3. Alternatives pour d'autres langues : Wikipédia (CC BY-SA), les archives Wikinews (CC BY 2.5, lecture seule depuis mai 2026), communiqués de presse gouvernementaux uniquement si la licence du pays autorise explicitement la réutilisation.
  4. Journaux et magazines (Le Monde, RFI, El País, NHK…), même gratuits à lire : ne jamais copier. Écrivez un texte original au niveau de l'apprenant à partir des faits, liez la source, citez au plus une phrase de moins de 15 mots, et définissez adapted comme 'texte original basé sur la source'. Remplissez source (nom, url, licence, date, adapted). A1–A2 → toujours une adaptation simplifiée. Textes longs → gardez les 3–5 meilleurs paragraphes et marquez la coupure avec […].

Matériel de référence – lisez chaque fichier uniquement à l'étape qui en a besoin :

  • references/lesson-schema.md — schéma lesson.json → étape 2
  • scripts/tts_edge.py — audio edge-tts → étape 3
  • assets/lesson-template.html — modèle de page (ne jamais modifier) → étape 4
  • scripts/build.py — remplit le modèle + vérifications → étape 4

4. Outils

ÉtapeOutilUtilisation
1conversation_search / recent_chatshistorique des leçons (§3)
1AskUserQuestionsuggérer 3 sujets quand aucun n'est donné
1WebSearch / WebFetch (ou un MCP RSS si installé)leçons avec article : trouver un texte récent sous licence ouverte, vérifier sa licence
3ElevenLabs → edge-tts → voix du navigateuraudio des dialogues (chaîne de repli ci-dessous)
3ffmpegjoindre les clips audio (scripts/tts_edge.py)
4Python + build.py (scripts/build.py)remplir le modèle, vérifications mécaniques
6Outil Artifact (publish_files / publish_version, puis declare_capabilities)publier la page et lui donner la capacité sample pour que sa pratique puisse demander Claude ; sans l'outil, envoyer index.html comme fichier
7AskUserQuestionpratique adaptative dans le chat, uniquement quand la page ne peut pas l'exécuter ; sans cela, texte simple, un item à la fois
  • Audio – essayez dans cet ordre, arrêtez-vous au premier qui fonctionne :
    1. ElevenLabs (si un outil de synthèse vocale ElevenLabs est disponible) : une voix féminine et une voix masculine dans la langue cible, un clip par ligne, joints avec scripts/tts_edge.py (étape de jointure).
    2. edge-tts (gratuit, sans clé) : pip install edge-tts, puis scripts/tts_edge.py (carte des voix à l'intérieur, par langue). Échoue dans les sandbox qui bloquent les serveurs Microsoft – testez une ligne d'abord (timeout 20 s).
    3. Voix du navigateur (toujours disponible) : laissez audio vide ; la page lit le texte avec les voix de l'appareil pour lang, une voix par intervenant. Les boutons de prononciation utilisent toujours les voix du navigateur. Définissez audio_note pour dire laquelle a été utilisée. Ne prétendez jamais que l'audio a été généré s'il ne l'a pas été.

5. Procédure

  1. Planifiez : déterminez la langue cible, le niveau, le sujet et le type (§3). Dialogues → 2 situations (formelle / familière), 2 locuteurs nommés chacun (une femme, un homme), prénoms naturels pour la langue. Article → trouvez et vérifiez la source (§3). Ensuite 6–10 structures cibles en 2–3 familles.
  2. Rédigez le JSON de la leçon (lesson.json, schéma dans references/lesson-schema.md), dans cet ordre :
    • Dialogue 1 (formel) et dialogue 2 (familier) – ou l'article : marquez chaque structure cible avec **…**. Mêmes structures dans les deux, dans des registres différents.
    • Chaque ligne ou paragraphe reçoit une traduction naturelle dans la langue apprenante (l1), révélée au toucher.
    • Pour chaque texte : 1–2 questions d'échauffement, 3 questions de compréhension globale (q1), 3–4 questions de détail (q2), 2–3 questions de repérage (reading), 4–6 expressions avec traduction (notes).
    • grammar : familles → structure, construction, équivalent dans la langue apprenante, exemple.
    • vocab (4–8 mots du thème avec traduction), register (4–6 paires formel ↔ familier), culture : une note de 2–3 phrases sur l'utilisation réelle liée au thème (langue apprenante en A1–A2).
    • pitfalls : 3–4 éléments pour cette paire de langues, chacun avec explication, note dans la langue apprenante (l1), faux → correct.
    • speaking : 3 consignes personnelles réutilisant les structures, chacune avec 1–2 réponses modèles (a).
    • exercises : 4 séries, de facile à difficile – choice (5, reconnaissance) → fill (5, forme) → dictation (4 phrases courtes réutilisant les structures ; la phrase est la réponse) → free (4–5, transformation/production, avec réponses modèles).
  3. Audio : suivez l'ordre du §4 ; enregistrez d1.mp3, d2.mp3 si produits.
  4. Construisez et vérifiez : exécutez python3 <skill>/scripts/build.py lesson.json <skill>/assets/lesson-template.html index.html [d1.mp3 d2.mp3]. Corrigez chaque échec.
  5. Auto-évaluez selon le §2 ; révisez jusqu'à réussite.
  6. Livrez : publiez index.html comme artefact (titre = titre de la leçon), puis declare_capabilities avec {'sample': {}} (nouvelle page : publiez d'abord, puis déclarez), et répondez avec le modèle ci-dessous.
  7. Pratique : s'exécute dans la page (§6). Exécutez-la dans le chat uniquement si l'utilisateur le demande ici ou si la page ne peut pas joindre Claude.

Modèle de sortie – la page (fixé par assets/lesson-template.html, minimal de conception). En-tête collant : titre, interrupteur 'tout afficher' (toutes les étapes à la fois, pour révision et impression), barre de progression fine avec un segment cliquable par étape atteinte. Une étape à la fois ; 'Suivant →' déverrouille la suivante ; la progression est mémorisée dans le navigateur. Les contrôles sont des icônes avec infobulles (▶ ■ vitesse, transcription, surligner, montrer les réponses, ✓ vérifier) ; chaque expression, mot de vocabulaire et exemple a un bouton 🔊 de prononciation ; dans les transcriptions, chaque ligne a 🔊 pour l'ombre, taper sur une ligne montre sa traduction, et le bouton de la langue apprenante les montre tous ; les exercices à choix sont notés au clic ; l'écran final montre le score et chaque élément manqué avec sa correction, plus 'réessayer mes erreurs' ; un bouton 🎯 de pratique adaptative (fin des exercices et écran final) exécute le §6 dans la page. 10 étapes pour les dialogues (7 pour un article) : titre + étiquettes niveau/sujet → objectifs (3) → Dialogue 1 [1ère écoute · 2ème écoute · lecture avec transcription cachée · expressions] → Dialogue 2 [idem] → Leçon [familles de grammaire · vocabulaire · registre · culture] → Pièges pour la paire de langues (3–4) → Expression orale (3, réponses modèles derrière 👁) → Exercices (choice · fill · dictation · free, score) → écran final avec révision des erreurs.

Modèle de sortie – la réponse dans le chat (5 lignes, dans la langue de l'utilisateur) :

**<titre>** — <langue> · <niveau> · <point de grammaire> · <thème>
Structures : <liste>
Audio : <ElevenLabs | edge-tts | voix du navigateur> · Auto-évaluation : <moy>/10
Pratique adaptative : bouton 🎯 à la fin de la page.
Journal de leçons : <date> · <langue> · <niveau> · <sujet> · <structures>

La ligne Journal de leçons est ce que les futures leçons recherchent (§3 Historique). Le résumé de pratique de la page a un bouton 'copier le résumé' dont le texte se termine par une ligne de journal de leçons de pratique ; l'apprenant peut la coller dans le chat. Après la pratique dans le chat, terminez par Journal de leçons : <date> · <langue> · pratique · à revoir : <structures>.

6. Mode pratique adaptative

Dans la page (par défaut) : le bouton 🎯 du modèle demande à Claude via la capacité sample de la page, un appel par élément : il note les réponses tapées, écrit l'élément suivant, puis un résumé final

…

[tronqué pour la traduction]

Skills associés