Quentin Berger

Repo2AIContext

Extension VS Code pour préparer un dépôt au contexte LLM.

Dans mes workflows avec assistants de codage, la friction ne venait pas seulement de la question posée au modèle. À ce moment-là, les assistants directement intégrés dans les IDE n’étaient pas encore devenus le réflexe évident qu’ils sont en train de devenir. Cursor existait déjà, mais l’usage d’un assistant intégré ou d’un modèle frontier (parmi les plus avancés) via API posait vite une question de coût : abonnement dédié, consommation au fil des requêtes, ou dépendance à un environnement spécialisé.

Mon objectif était plus pragmatique : continuer à utiliser ChatGPT ou Claude dans le navigateur, avec un abonnement déjà payé et l’accès aux meilleurs modèles disponibles dans ces interfaces, tout en supprimant la partie pénible du workflow. Il fallait choisir les bons fichiers, garder l’arborescence lisible, éviter le bruit du dépôt, rester dans un budget de tokens et produire un bloc que je pouvais coller sans passer dix minutes à recomposer le projet à la main.

Repo2AIContext est né de ce besoin très concret. J’en ai fait une extension VS Code parce que le bon endroit pour préparer ce contexte est l’éditeur lui-même : là où les fichiers sont déjà visibles, où l’on connaît l’état du workspace, et où l’on peut sélectionner avant de copier. La conversation, elle, pouvait rester dans le navigateur.

Relier VS Code au navigateur

J’ai choisi de sortir du modèle de la simple commande parce que le problème n’était pas seulement de copier. Il fallait construire un pont entre deux espaces de travail : VS Code pour lire et sélectionner le dépôt, ChatGPT ou Claude dans le navigateur pour raisonner sur le code. L’extension ne cherchait donc pas à remplacer l’assistant ; elle préparait mieux l’entrée qu’on lui donnait.

Le vrai choix produit était la sélection. L’extension expose une vue Snapshot dans l’Activity Bar de VS Code, avec un arbre de fichiers, des cases de sélection, un bouton de capture, un réglage Select all et des compteurs de fichiers et de tokens.

Capture de la sidebar Repo2AIContext dans VS Code, avec l’arbre de fichiers, les compteurs et les réglages de blacklist.
Dans la sidebar, la sélection, les compteurs et l’action de capture restent au même endroit : l’utilisateur ajuste le contexte avant de l’envoyer vers ChatGPT ou Claude.

Ce format donne un contrôle plus fin qu’un script terminal : sélectionner un dossier entier, retirer un fichier, conserver seulement une partie du dépôt, puis lancer la capture quand le contexte est cohérent.

Filtrer sans masquer les décisions

Le risque d’un outil de capture est de tout embarquer. Un dépôt réel contient vite des dossiers massifs, des fichiers générés, des binaires, des fichiers de build ou des éléments qu’il ne faut pas coller dans une conversation. Le filtrage devait donc faire partie du cœur de l’outil dès le départ, pas arriver comme un nettoyage après coup.

Repo2AIContext respecte .gitignore, ignore les dossiers lourds comme node_modules, .git, dist, build, .next ou .venv, saute les liens symboliques, marque les binaires comme ignorés et permet d’ajouter des noms ou extensions en blacklist depuis la sidebar.

Faire compter le contexte avant la copie

Une fois l’arbre construit, l’extension estime le poids du contexte fichier par fichier et dossier par dossier. Les compteurs restent approximatifs, mais ils donnent une information exploitable au moment où elle compte : avant la capture. Un fichier trop lourd est marqué comme tronqué, un binaire comme ignoré, et les dossiers agrègent les métriques de leurs enfants.

Cette estimation n’a pas besoin d’être parfaite pour être utile. Elle sert surtout à orienter le geste : retirer un dossier de tests générés, garder seulement une partie de src, ou exclure un lockfile si l’on cherche à expliquer l’architecture plutôt qu’à reproduire un état exact de dépendances.

Exemple de capture générée

La sortie générée reste volontairement simple : une arborescence, puis le contenu des fichiers sélectionnés séparé par chemin. Exemple fictif, avec des noms et contenus modifiés :

demo-dashboard/
├── package.json
├── src/
│   ├── app.ts
│   └── services/
│       └── metrics.ts
└── README.md

---------------- src/app.ts ----------------
import { createDashboard } from "./services/metrics";

export function start() {
  return createDashboard({ source: "sample-data" });
}

---------------- src/services/metrics.ts ----------------
export function createDashboard(options: { source: string }) {
  return {
    title: "Demo dashboard",
    source: options.source,
    widgets: ["revenue", "latency", "usage"]
  };
}

---------------- README.md ----------------
# Demo Dashboard
Projet fictif utilisé pour illustrer le format de capture.

Ce format a l’avantage d’être lisible par un humain avant collage, tout en donnant au modèle les deux repères qui manquent souvent dans une copie manuelle : la position du fichier dans le dépôt et son contenu exact.

Ce que ce projet prouve

Repo2AIContext n’est pas un projet massif. Sa valeur tient justement à son périmètre maîtrisé : un besoin précis, un environnement cible clair, une interface adaptée au geste utilisateur, et une livraison sous forme d’extension VS Code.

Sur le plan technique, il montre ma capacité à réaliser une application d’outillage complète dans un écosystème existant : extension TypeScript, webview, interactions avec le workspace, configuration et presse-papiers. Il montre aussi un travail d’optimisation pragmatique : filtrage intelligent, limites de taille, concurrence contrôlée et traitement explicite des fichiers lourds ou binaires.

Sur le plan produit, il correspond bien à ce que je cherche à construire : des outils simples, utiles, directement liés à la manière dont les développeurs travaillent avec l’IA. Ici, l’enjeu était très concret : rendre viable un workflow navigateur avec ChatGPT ou Claude, sans payer chaque interaction au tarif API et sans dépendre d’un environnement de développement spécialisé. Le projet ne cherche pas à impressionner par sa taille. Il prouve plutôt qu’une friction bien identifiée peut devenir un produit fini, documenté et installable.