Faire vérifier tes vrais exercices, en sécurité

Le companion est un petit programme Node.js qui tourne uniquement sur ton ordinateur.

Ce que c'est, ce que ce n'est pas

Le Claude Code Trainer Companion est un petit serveur Node.js (livré dans ton kit ccodelab-kit.mjs, à télécharger en haut de cette page) qui écoute uniquement sur 127.0.0.1 — ton propre ordinateur. Quand tu cliques « Lancer la vérification » sur un exercice, le site lui envoie une liste de vérifications typées (« le dossier projets/mon-site existe-t-il ? », « le dernier commit contient-il le mot contact ? »). Le companion exécute uniquement les vérifications qu'il connaît, dans le dossier que tu as choisi, et répond vrai / faux.

Ce qu'il ne fait jamais :

  • exécuter une commande envoyée par le navigateur (il n'existe aucune route « exécute ceci ») ;
  • lire ou écrire en dehors de l'espace de travail choisi ;
  • envoyer quoi que ce soit sur internet ;
  • modifier tes fichiers (il ne fait que lire, sauf runTests qui lance npm test si tu l'as explicitement autorisé au démarrage).

Installation

Prérequis : Node.js 20 ou plus (node --version).

Télécharge le kit avec le bouton en haut de cette page (inclus dans l'Accès Fondateur) et range ccodelab-kit.mjs dans ton dossier personnel. Rien d'autre à installer : c'est un seul fichier.

Lancement

Choisis le dossier dans lequel tu fais tes exercices (par exemple ~/projets) :

node ccodelab-kit.mjs companion --workspace ~/projets
node ccodelab-kit.mjs companion --workspace $HOME\projets
node ccodelab-kit.mjs companion --workspace ~/projets

Le companion affiche alors :

Claude Code Trainer Companion
Espace de travail : /Users/lea/projets
Écoute sur        : http://127.0.0.1:4666
Jeton d'appairage : 7f3a-91c2-4be0
Vérifications     : dirExists, fileExists, fileContains, gitIsRepo, gitBranch, gitCommitCount, gitClean, gitCommitMessage, gitignoreIncludes, gitNotTracked, gitNotContains, npmScriptExists, jsonHasKey, jsonEquals, gitFileChanged, fileCount
Exécution des tests : désactivée (ajoute --allow-tests pour autoriser npm test et ces scripts)
Ctrl+C pour arrêter.

Copie le jeton d'appairage dans Paramètres → Companion, puis « Tester et activer ». Le jeton change à chaque lancement : c'est voulu, il empêche un autre site ouvert dans ton navigateur d'utiliser le companion à ton insu.

Navigateur compatible

  • Chrome, Edge ou Brave : compatibles. Au premier « Tester et activer », Chrome affiche « … souhaite accéder à d'autres applis et services sur cet appareil ». Clique sur Autoriser, puis reclique sur « Tester et activer » (le premier essai peut afficher « Pas de réponse en 2,5 s » pendant que la question attend ta réponse).
  • Safari n'est pas compatible avec le companion : il bloque toute connexion d'un site sécurisé vers un programme local, même autorisé. Le reste de la formation fonctionne normalement dans Safari ; ouvre simplement Chrome, Edge ou Brave pour les vérifications avec le companion.
  • Si tu as cliqué sur « Bloquer » par erreur : clique sur l'icône à gauche de l'adresse du site, rétablis l'accès aux applis et services de l'appareil, puis recharge la page.

Options

OptionEffet
--workspace <dossier>dossier racine autorisé (obligatoire)
--port <n>port d'écoute (défaut 4666)
--allow-testsautorise runTests et npmScript : lance npm test ou npm run lint, build, typecheck ou check (liste fermée) dans le projet, sans shell, avec délai maximal
--origin <url>origine supplémentaire autorisée (par défaut : ccodelab.fr, localhost:5173 et localhost:4173)

Ce que vérifie chaque exercice

Avant chaque vérification, l'exercice affiche la liste exacte des points contrôlés. Le companion journalise aussi chaque vérification dans son terminal : tu vois tout ce qu'il fait.

Sécurité, en détail

  • Écoute limitée à 127.0.0.1 : injoignable depuis le réseau.
  • Jeton d'appairage obligatoire sur chaque requête ; CORS restreint aux origines de la formation.
  • Tous les chemins sont résolus puis vérifiés comme étant à l'intérieur du workspace ; .. et liens symboliques sortants sont refusés.
  • Taille de lecture plafonnée (1 Mo par fichier).
  • Ce qui revient au navigateur, c'est un résultat (réussi ou non) et une courte explication : jamais le contenu de tes fichiers. Les valeurs trouvées dans un JSON ne sont pas renvoyées, et les clés ou jetons reconnus (Stripe, GitHub, Anthropic, AWS, JWT, variables *_KEY, *_TOKEN, *_SECRET, *_PASSWORD) sont masqués dans les sorties de npm. Ton dossier personnel apparaît sous la forme ~.
  • Git est appelé avec des arguments fixes (git rev-parse, git log -1…), jamais avec du texte venant du navigateur en position de commande.
  • Toute donnée reçue du navigateur est considérée comme non fiable et validée par schéma avant usage.
  • Le code source est court et lisible : companion/src/. Lis-le, c'est un bon exercice.

Arrêter

Ctrl+C dans le terminal du companion. Le site repasse automatiquement en mode guidé.