Communitygithub.com

coursmith-course

Créez un cours interactif (étapes, diagrammes, animations, images, glossaire par section et quiz final) et publiez-le dans le catalogue Coursmith à l'aide de l'interface en ligne de commande coursmith. Utilisez cette compétence lorsque l'utilisateur demande de créer, écrire, générer, mettre à jour, publier ou soumettre un cours ou une leçon pour Coursmith, ou de vérifier une révision Coursmith.

Qu'est-ce que coursmith-course ?

Cette compétence permet à un agent IA de guider un utilisateur tout au long du processus complet de création et de publication d'un cours interactif sur la plateforme Coursmith. Elle couvre la rédaction de contenu (étapes, visuels, glossaires, quiz), l'utilisation de l'outil en ligne de commande `coursmith` pour la validation et la soumission, ainsi que le suivi du processus de révision. L'agent orchestre les échanges avec l'utilisateur pour définir le plan du cours, génère les fichiers de cours (course.json et assets/) selon un schéma strict, et exécute les commandes appropriées du CLI. Idéale pour les développeurs et les créateurs de contenu technique, elle automatise les tâches répétitives tout en respectant les politiques de contenu et les règles de validation de Coursmith. Elle garantit une soumission réussie en corrigeant les erreurs et en s'adaptant aux retours de l'équipe de révision.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Uranio/coursmith-plugin/tree/main/plugin/skills/coursmith-course

Demander à votre IA préférée

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

Documentation

Créer et publier un cours Coursmith

Vous écrivez un cours sous la forme d'un dossier contenant course.json et un répertoire assets/, vous le vérifiez avec l'interface en ligne de commande coursmith, puis vous le soumettez. Un agent de révision sur le portail l'approuve ensuite, demande une révision ou le rejette. Votre travail se termine lorsque le cours est approuvé, ou lorsque vous avez expliqué le résultat de la révision à l'utilisateur.

Exécutez l'interface en ligne de commande avec npx --yes coursmith@latest <commande> --json. Le paquet npm public inclut l'interface en ligne de commande et cette compétence ; aucun accès GitHub ni installation globale n'est nécessaire. Si npx est manquant, demandez à l'utilisateur d'installer Node.js 20 ou plus récent et de suivre le guide à /install. Avec --json, chaque commande imprime un document JSON ; lisez-le au lieu de deviner.

Fichiers de référence dans ce dossier de compétence (lisez-les lorsque vous atteignez l'étape correspondante) :

FichierUtilisation
references/course.schema.jsonLa structure exacte de course.json. Les clés inconnues sont rejetées.
references/block-catalog.mdChaque bloc de contenu et visuel, avec des exemples JSON valides et des règles.
references/animation-presets.mdLes 7 préréglages d'animation et quand les utiliser.
references/writing-guide.mdComment rédiger des étapes, glossaires et quiz qui passent la révision.
references/content-policy.mdCe qui n'est pas autorisé et comment traiter les sujets sensibles.
examples/sample-course/Un cours complet qui passe la validation. Copiez sa structure.

1. Se connecter

  1. Exécutez npx --yes coursmith@latest whoami --json. Si cela imprime un username, passez à l'étape 2.
  2. Sinon, exécutez npx --yes coursmith@latest login --no-wait --json. Montrez à l'utilisateur le verificationUri et le userCode et demandez-lui d'ouvrir le lien, de vérifier le code et de cliquer sur Approuver.
  3. Lorsque l'utilisateur confirme, exécutez npx --yes coursmith@latest login --resume --json et vérifiez qu'il imprime logged_in.

2. Se mettre d'accord sur le cours avec l'utilisateur

Demandez, en un seul message, tout ce que l'utilisateur n'a pas déjà fourni :

  • Sujet et, si utile, l'angle ou le public cible.
  • Langue du cours (n'importe quelle langue ; vous aurez besoin de son code BCP-47 tel que it, en, pt-BR).
  • Difficulté : débutant, intermédiaire ou avancé.
  • Optionnel : durée souhaitée (par défaut environ 30 minutes), prérequis, éléments à inclure ou à éviter.

Vérifiez le sujet par rapport à references/content-policy.md. S'il n'est pas autorisé, dites-le et arrêtez-vous. S'il s'agit d'un sujet sensible (santé, droit, finance, politique, religion…), planifiez un traitement neutre et une clause de non-responsabilité.

3. Proposer un plan et le faire approuver

Montrez à l'utilisateur :

  • le titre, un sous-titre d'une ligne, 2 à 6 objectifs d'apprentissage ;
  • 3 à 6 sections, chacune avec un résumé d'une ligne et 2 à 5 titres d'étapes ;
  • pour chaque étape, le visuel que vous prévoyez (graphique, diagramme, préréglage d'animation, image ou rien) ;
  • le nombre prévu de questions de quiz (au moins 10, couvrant chaque section).

Révisez jusqu'à ce que l'utilisateur soit d'accord. N'écrivez pas course.json avant cela.

4. Écrire le cours

Créez un nouveau dossier nommé d'après le cours (en kebab-case) avec course.json et assets/. Suivez exactement references/course.schema.json et copiez la structure de examples/sample-course/course.json.

Règles appliquées par le validateur (détails dans references/block-catalog.md) :

  • schemaVersion est "1.0". N'écrivez pas courseId : l'interface en ligne de commande le gère.
  • Tous les identifiants sont en lettres minuscules, chiffres et tirets, uniques dans tout le cours (sections, étapes, ressources, questions de quiz).
  • Chaque étape a un title et au moins un bloc ; la plupart des étapes ont également un visual.
  • Glossaire : chaque section a un glossary qui définit chaque concept qu'elle introduit et chaque terme technique ou domaine qu'elle utilise. Dans le texte, marquez chaque terme comme [[terme]], ou [[terme|texte affiché]] lorsque le libellé diffère (utilisez aliases pour les pluriels et les inflexions). Un terme marqué doit être défini dans la même section ou une section antérieure. Les définitions sont autonomes et rédigées dans la langue du cours.
  • Visuels : les graphiques sont des spécifications Vega-Lite avec data.values en ligne (pas d'URL) ; les diagrammes sont en Mermaid sans click ni %%{init}%% ; les animations utilisent un des 7 préréglages ; les images font référence à une ressource par son identifiant.
  • Markdown : pas de HTML brut, pas d'images Markdown (utilisez un bloc image), les liens doivent être https://.
  • Quiz final : au moins 10 questions ; chaque section est testée par au moins une question (sectionRef) ; chaque question a une explanation. Types : single, multiple, true_false, ordering (les éléments de classement sont listés dans le bon ordre ; le portail les mélange).
  • Des questions check optionnelles à la fin d'une étape donnent aux apprenants un retour rapide et ne sont pas notées.

Écrivez section par section et maintenez la cohérence de la langue, de la difficulté et de la terminologie tout au long du cours (voir references/writing-guide.md).

5. Créer les ressources

  • Une image de couverture est requise (meta.coverImage), idéalement 1200×630.
  • Si vous disposez d'un outil de génération d'images, produisez des fichiers PNG, JPEG ou WebP. Sinon, écrivez du SVG propre à la main : formes simples, palette claire, viewBox défini, pas de scripts, pas de liens ou polices externes, pas d'images intégrées.
  • Pour une animation highlight-svg, donnez aux éléments à mettre en surbrillance un attribut id.
  • Placez chaque fichier directement dans assets/ et déclarez-le dans assets[] avec kind (image ou svg), file (assets/<nom>) et un texte alt significatif. Remplissez generatedBy pour les images générées par IA.
  • Chaque fichier doit faire moins de 3 Mo ; l'ensemble du bundle moins de 25 Mo.

6. Valider jusqu'à ce que ce soit propre

Exécutez npx --yes coursmith@latest validate <dossier> --json. Cela imprime { "ok": ..., "issues": [...] } ; chaque problème a severity, code, path (par exemple sections[1].steps[0].blocks[2]) et message.

Corrigez chaque error, puis exécutez à nouveau. Répétez jusqu'à ce que ok soit true. Corrigez également les avertissements lorsqu'ils sont peu coûteux (par exemple glossary.unreferenced : marquez le terme avec [[...]] là où il est utilisé).

7. Soumettre et suivre la révision

  1. Exécutez npx --yes coursmith@latest submit <dossier> --json. Cela télécharge le cours et imprime status: "in_review" avec un submissionId. L'interface en ligne de commande écrit .coursmith.json dans le dossier ; conservez-le, car il lie les soumissions ultérieures au même cours.
  2. Exécutez npx --yes coursmith@latest status --dir <dossier> --wait --json (il attend jusqu'à 10 minutes ; exécutez-le à nouveau si le statut est toujours in_review).
  3. Agissez en fonction du status :
    • approved : donnez à l'utilisateur le courseUrl. Mentionnez toutes suggestions optionnelles dans review.issues.
    • needs_revision : pour chaque problème dans review.issues, ouvrez l'élément à path, appliquez la suggestion (ou corrigez ce que décrit message), puis validez et soumettez à nouveau. Dites à l'utilisateur ce que vous avez changé. Les problèmes avec severity: "warning" sont facultatifs.
    • rejected : expliquez review.summary à l'utilisateur. Ne soumettez pas à nouveau le même contenu.

Si submit signale review_in_progress, attendez la révision en cours avec status --wait d'abord.

Mettre à jour un cours publié

Modifiez le même dossier (conservez .coursmith.json) et soumettez à nouveau. La nouvelle version passe par la révision tandis que la version actuelle reste en ligne ; maintenez les identifiants des étapes stables pour que les apprenants conservent leur progression.

Dépannage

Sortie de l'interface en ligne de commandeQue faire
not_logged_in / code de sortie 3Revenez à l'étape 1.
client_outdatedRéessayez avec npx --yes coursmith@latest pour que npm récupère la dernière version de l'interface en ligne de commande.
validation_failed de submitExécutez validate et corrigez les problèmes qu'il liste.
rate_limitedL'utilisateur a atteint la limite de soumission quotidienne ; réessayez demain.
assets.content_type / assets.invalidLe contenu du fichier ne correspond pas à son extension, ou il est corrompu. Réexportez-le.
animation.unknown_elementLe SVG ne contient pas d'élément avec cet id (les identifiants sont conservés, les scripts et liens externes sont supprimés).

Skills associés