622 const m = p.slice(base.length).match(/^\/([a-z]{2}(?:-[A-Z]{2})?)\//);622 const m = p.slice(base.length).match(/^\/([a-z]{2}(?:-[A-Z]{2})?)\//);
623 const locale = m ? m[1] : 'en';623 const locale = m ? m[1] : 'en';
624 return href => {624 return href => {
625 if (!href || href[0] !== '/' || href[1] === '/') return href;625 if (!href) return undefined;
626 if (href[0] === '#' || href.startsWith('https://')) return href;
627 if (!(/^\/[A-Za-z0-9]/).test(href)) return undefined;
626 return base + (href.startsWith('/en/') ? '/' + locale + href.slice(3) : href);628 return base + (href.startsWith('/en/') ? '/' + locale + href.slice(3) : href);
627 };629 };
628 }, []);630 }, []);
671 const assemble = p => p.prompt.replace(/\{(\w+)\}/g, (_, k) => fillOf(p, k) || p.slots && p.slots[k] || k);673 const assemble = p => p.prompt.replace(/\{(\w+)\}/g, (_, k) => fillOf(p, k) || p.slots && p.slots[k] || k);
672 const preview = p => p.prompt.replace(/\{(\w+)\}/g, (_, k) => p.slots && p.slots[k] || k);674 const preview = p => p.prompt.replace(/\{(\w+)\}/g, (_, k) => p.slots && p.slots[k] || k);
673 const bodyText = p => preview(p) + ' ' + p.teaches.replace(/\[([^\]]+)\]\([^)]+\)/g, '$1') + ' ' + (p.next || '');675 const bodyText = p => preview(p) + ' ' + p.teaches.replace(/\[([^\]]+)\]\([^)]+\)/g, '$1') + ' ' + (p.next || '');
674 const widthFor = s => (s || '').length + 3 + 'ch';676 const WIDE_RE = /[\u1100-\u115F\u2E80-\uA4CF\uAC00-\uD7A3\uF900-\uFAFF\uFE30-\uFE4F\uFF00-\uFF60\uFFE0-\uFFE6]/g;
677 const widthFor = s => {
678 const t = typeof s === 'string' ? s : '';
679 return t.length + (t.match(WIDE_RE) || []).length + 3 + 'ch';
680 };
675 const ql = q.trim().toLowerCase();681 const ql = q.trim().toLowerCase();
676 const toggleTag = k => {682 const toggleTag = k => {
677 setStart(false);683 setStart(false);
1096 1102
1097export const text = {1103export const text = {
1098 "get-oriented-in-a": {1104 "get-oriented-in-a": {
1099 title: "S'orienter dans un nouveau référentiel",1105 title: "S'orienter dans un nouveau dépôt",
1100 teaches: "Décrivez ce que vous voulez savoir, pas quels fichiers lire. Claude explore le projet par lui-même et retourne un résumé de la façon dont il s'articule.",1106 teaches: "Décrivez ce que vous voulez savoir, pas quels fichiers lire. Claude explore le projet par lui-même et retourne un résumé de la façon dont il s'articule.",
1101 next: "Exécutez `/init` pour configurer `CLAUDE.md` afin que Claude se souvienne de ceci à chaque session"1107 next: "Exécutez `/init` pour configurer `CLAUDE.md` afin que Claude se souvienne de ceci à chaque session",
1108 prompt: "donnez-moi une vue d'ensemble de cette base de code : architecture, répertoires clés et façon dont les éléments s'articulent"
1102 },1109 },
1103 "explain-unfamiliar-code": {1110 "explain-unfamiliar-code": {
1104 title: "Expliquer du code non familier",1111 title: "Expliquer du code non familier",
1105 teaches: "Nommez le fichier et dites dans quel format vous voulez la réponse. Échangez la page HTML contre un diagramme, des points à puces, ou tout ce qui correspond à votre façon d'apprendre.",1112 teaches: "Nommez le fichier et dites dans quel format vous voulez la réponse. Échangez la page HTML contre un diagramme, des points à puces, ou tout ce qui correspond à votre façon d'apprendre.",
1106 next: "Définissez un style de sortie afin que Claude explique toujours dans votre format préféré"1113 next: "Définissez un style de sortie afin que Claude explique toujours dans votre format préféré",
1114 prompt: "expliquez ce que fait {path} et comment les données y circulent. présentez le tout sous forme de {format}",
1115 slots: {
1116 path: "src/scheduler/queue.ts",
1117 format: "une page HTML avec un diagramme, puis ouvrez-la dans mon navigateur"
1118 }
1107 },1119 },
1108 "find-where-something-happens": {1120 "find-where-something-happens": {
1109 title: "Trouver où quelque chose se produit",1121 title: "Trouver où quelque chose se produit",
1110 teaches: "Recherchez par comportement plutôt que par nom de fichier. La recherche fonctionne même quand vous ne savez pas comment le fichier s'appelle ou dans quel répertoire il se trouve."1122 teaches: "Recherchez par comportement plutôt que par nom de fichier. La recherche fonctionne même quand vous ne savez pas comment le fichier s'appelle ou dans quel répertoire il se trouve.",
1123 prompt: "où est-ce que nous {behavior} ?",
1124 slots: {
1125 behavior: "validons les types de fichiers téléversés"
1126 }
1111 },1127 },
1112 "see-what-depends-on": {1128 "see-what-depends-on": {
1113 title: "Vérifier ce qui se casse avant de supprimer",1129 title: "Vérifier ce qui se casse avant de supprimer",
1114 teaches: "Demandez avant de supprimer quoi que ce soit. La liste des appelants et des effets en aval vous indique si vous regardez un nettoyage d'une ligne ou une modification que vous devez coordonner."1130 teaches: "Demandez avant de supprimer quoi que ce soit. La liste des appelants et des effets en aval vous indique si vous regardez un nettoyage d'une ligne ou une modification que vous devez coordonner.",
1131 prompt: "qu'est-ce qui casserait si je supprimais {target} ?",
1132 slots: {
1133 target: "le helper retryWithBackoff"
1134 }
1115 },1135 },
1116 "trace-how-code-evolved": {1136 "trace-how-code-evolved": {
1117 title: "Tracer l'évolution du code",1137 title: "Tracer l'évolution du code",
1118 teaches: "Pointez l'historique des commits quand la question est pourquoi, pas quoi. Claude lit le journal et le blame pour quelle que soit la version control que vous utilisez et explique les décisions derrière l'implémentation actuelle."1138 teaches: "Pointez l'historique des commits quand la question est pourquoi, pas quoi. Claude lit le log et le blame de votre système de contrôle de version, quel qu'il soit, et explique les décisions derrière l'implémentation actuelle.",
1139 prompt: "parcourez l'historique des commits de {path} et résumez comment il a évolué et pourquoi",
1140 slots: {
1141 path: "internal/auth/session.go"
1142 }
1119 },1143 },
1120 "scope-a-change-before": {1144 "scope-a-change-before": {
1121 title: "Délimiter une modification avant de commencer",1145 title: "Délimiter une modification avant de commencer",
1122 teaches: "Dimensionnez le travail avant de vous y engager sur une feuille de route. La liste des fichiers vous indique si vous regardez un composant ou une modification transversale."1146 teaches: "Dimensionnez le travail avant de vous y engager sur une feuille de route. La liste des fichiers vous indique si vous regardez un composant ou une modification transversale.",
1147 prompt: "quels fichiers devrais-je modifier pour {change} ?",
1148 slots: {
1149 change: "ajouter un bouton de mode sombre dans les paramètres"
1150 }
1123 },1151 },
1124 "ask-the-codebase-a": {1152 "ask-the-codebase-a": {
1125 title: "Poser une question produit à la base de code",1153 title: "Poser une question produit à la base de code",
1126 teaches: "Énoncez votre rôle afin que la réponse soit au bon niveau. Claude explique ce que le produit fait réellement à partir du code source, sans que vous ayez besoin de le lire.",1154 teaches: "Énoncez votre rôle afin que la réponse soit au bon niveau. Claude explique ce que le produit fait réellement à partir du code source, sans que vous ayez besoin de le lire.",
1127 next: "Définissez un style de sortie afin que Claude présente toujours les réponses à ce niveau"1155 next: "Définissez un style de sortie afin que Claude présente toujours les réponses à ce niveau",
1156 prompt: "je suis {role}. expliquez-moi étape par étape ce qui se passe quand un utilisateur {action}, de l'interface jusqu'au résultat",
1157 slots: {
1158 role: "PM",
1159 action: "clique sur Exporter en PDF"
1160 }
1128 },1161 },
1129 "plan-a-multi-file": {1162 "plan-a-multi-file": {
1130 title: "Planifier une modification multi-fichiers avant de toucher au code",1163 title: "Planifier une modification multi-fichiers avant de toucher au code",
1131 teaches: "Ajouter « ne pas modifier encore » sépare l'exploration des modifications, afin que vous voyiez l'approche avant que le code ne bouge. Pour faire du plan-first le défaut sur chaque prompt, appuyez sur Maj+Tab pour [mode plan](/docs/fr/permission-modes#analyze-before-you-edit-with-plan-mode)."1164 teaches: "Ajouter « ne modifiez rien pour l'instant » sépare l'exploration des modifications, afin que vous voyiez l'approche avant que le code ne bouge. Pour faire du plan-first le défaut sur chaque prompt, appuyez sur Maj+Tab pour le [mode plan](/docs/fr/permission-modes#analyze-before-you-edit-with-plan-mode).",
1165 prompt: "planifiez comment refactoriser le {target} pour {goal}. listez les fichiers que vous modifieriez, mais ne modifiez rien pour l'instant",
1166 slots: {
1167 target: "module de paiement",
1168 goal: "prendre en charge plusieurs devises"
1169 }
1132 },1170 },
1133 "draft-a-spec-by": {1171 "draft-a-spec-by": {
1134 title: "Rédiger une spécification par entrevue",1172 title: "Rédiger une spécification par entretien",
1135 teaches: "Demandez à être interviewé au lieu d'écrire la spécification vous-même. Claude vous pose des questions structurées jusqu'à ce que les exigences soient complètes, puis écrit le résultat dans un fichier.",1173 teaches: "Demandez à être interviewé au lieu d'écrire la spécification vous-même. Claude vous pose des questions structurées jusqu'à ce que les exigences soient complètes, puis écrit le résultat dans un fichier.",
1136 next: "Enregistrez vos questions d'entrevue en tant que compétence `/spec` afin que chaque spécification commence de la même façon"1174 next: "Enregistrez vos questions d'entretien en tant que skill `/spec` afin que chaque spécification commence de la même façon",
1175 prompt: "je veux créer {feature}. interrogez-moi sur l'implémentation, l'UX, les cas limites et les compromis jusqu'à ce que nous ayons tout couvert, puis écrivez la spécification dans SPEC.md",
1176 slots: {
1177 feature: "des limites de débit par espace de travail"
1178 }
1137 },1179 },
1138 "turn-a-meeting-into": {1180 "turn-a-meeting-into": {
1139 title: "Transformer une réunion en tickets",1181 title: "Transformer une réunion en tickets",
1140 teaches: "Ignorez l'étape de transcription. Claude extrait les éléments d'action de l'entrée non structurée et les écrit directement dans votre suivi via [MCP](/docs/fr/mcp), afin que vous examiniez les tickets, pas la transcription.",1182 teaches: "Ignorez l'étape de transcription. Claude extrait les actions à mener de l'entrée non structurée et les écrit directement dans votre outil de suivi via [MCP](/docs/fr/mcp), afin que vous examiniez les tickets, pas la transcription.",
1141 next: "Enregistrez ceci en tant que compétence `/tickets`"1183 next: "Enregistrez ceci en tant que skill `/tickets`",
1184 prompt: "lisez {input} et rédigez les actions à mener, puis créez un ticket {tracker} pour chacune avec des critères d'acceptation",
1185 slots: {
1186 input: "@meeting-notes.md",
1187 tracker: "Linear"
1188 }
1142 },1189 },
1143 "map-edge-cases-before": {1190 "map-edge-cases-before": {
1144 title: "Cartographier les cas limites avant de construire",1191 title: "Cartographier les cas limites avant de construire",
1145 teaches: "Demandez ce qui manque, pas ce qui est là. Claude énumère les états d'erreur, les états vides et les cas limites qu'une conception de chemin heureux tend à ignorer."1192 teaches: "Demandez ce qui manque, pas ce qui est là. Claude énumère les états d'erreur, les états vides et les cas limites qu'une conception de chemin heureux tend à ignorer.",
1193 prompt: "listez les états d'erreur, les états vides et les cas limites de {feature} que le design doit couvrir",
1194 slots: {
1195 feature: "le flux de téléversement de fichiers"
1196 }
1146 },1197 },
1147 "turn-a-mockup-into": {1198 "turn-a-mockup-into": {
1148 title: "Transformer une maquette en prototype fonctionnel",1199 title: "Transformer une maquette en prototype fonctionnel",
1149 teaches: "Un prototype cliquable répond à des questions qu'une maquette statique ne peut pas. Remettez le code fonctionnel à l'ingénierie au lieu d'expliquer les interactions dans un document."1200 teaches: "Un prototype cliquable répond à des questions qu'une maquette statique ne peut pas. Remettez le code fonctionnel à l'ingénierie au lieu d'expliquer les interactions dans un document.",
1201 prompt: "voici une maquette. créez un prototype fonctionnel sur lequel je peux cliquer, fidèle à la mise en page et aux états présentés"
1150 },1202 },
1151 "implement-from-a-screenshot": {1203 "implement-from-a-screenshot": {
1152 title: "Implémenter à partir d'une capture d'écran et auto-vérifier",1204 title: "Implémenter à partir d'une capture d'écran et auto-vérifier",
1153 teaches: "Cela donne à Claude une boucle de vérification : il rend, compare par rapport à l'image source, et itère sans que vous pointiez chaque écart.",1205 teaches: "Cela donne à Claude une boucle de vérification : il génère le rendu, le compare à l'image source, et itère sans que vous pointiez chaque écart.",
1154 next: "Utilisez `/goal` pour garder Claude itérant jusqu'à ce que les captures d'écran correspondent"1206 next: "Utilisez `/goal` pour que Claude continue d'itérer jusqu'à ce que les captures d'écran correspondent",
1207 prompt: "implémentez ce design, puis prenez une capture d'écran du résultat, comparez-la à l'original et corrigez toutes les différences"
1155 },1208 },
1156 "follow-an-existing-pattern": {1209 "follow-an-existing-pattern": {
1157 title: "Suivre un modèle existant",1210 title: "Suivre un modèle existant",
1158 teaches: "Pointez du code que vous aimez déjà. Sans référence, Claude utilise par défaut les meilleures pratiques générales. Avec une, il correspond aux conventions que votre base de code utilise réellement.",1211 teaches: "Pointez du code que vous aimez déjà. Sans référence, Claude applique par défaut les bonnes pratiques générales. Avec une référence, il respecte les conventions que votre base de code utilise réellement.",
1159 next: "Demandez à Claude d'écrire le modèle qu'il a suivi dans `CLAUDE.md` afin que les sessions futures le correspondent sans la référence"1212 next: "Demandez à Claude d'écrire le modèle qu'il a suivi dans `CLAUDE.md` afin que les sessions futures s'y conforment sans la référence",
1213 prompt: "regardez comment {example} est implémenté pour comprendre le modèle, puis créez {new} de la même façon",
1214 slots: {
1215 example: "le gestionnaire de webhook GitHub",
1216 new: "un gestionnaire de webhook Stripe"
1217 }
1160 },1218 },
1161 "add-a-small-well": {1219 "add-a-small-well": {
1162 title: "Ajouter une petite fonctionnalité bien définie",1220 title: "Ajouter une petite fonctionnalité bien définie",
1163 teaches: "Énoncez les entrées et les sorties, pas comment la construire. Claude trouve où le code similaire vit et ajoute le vôtre à côté."1221 teaches: "Énoncez les entrées et les sorties, pas comment la construire. Claude trouve où se trouve le code similaire et ajoute le vôtre à côté.",
1222 prompt: "ajoutez un endpoint {endpoint} qui renvoie {payload}",
1223 slots: {
1224 endpoint: "/health",
1225 payload: "la version de l'application et son temps de fonctionnement"
1226 }
1164 },1227 },
1165 "build-a-small-internal": {1228 "build-a-small-internal": {
1166 title: "Construire un petit outil interne à partir de zéro",1229 title: "Construire un petit outil interne à partir de zéro",
1167 teaches: "Vous n'avez pas besoin d'un projet, d'un framework ou d'une étape de construction. Décrivez l'outil et demandez à Claude de l'ouvrir afin que vous le voyiez fonctionner immédiatement."1230 teaches: "Vous n'avez pas besoin d'un projet, d'un framework ou d'une étape de build. Décrivez l'outil et demandez à Claude de l'ouvrir afin que vous le voyiez fonctionner immédiatement.",
1231 prompt: "créez un {tool} en HTML, CSS et JavaScript vanilla, puis ouvrez-le dans mon navigateur",
1232 slots: {
1233 tool: "tableau Kanban en glisser-déposer à trois colonnes"
1234 }
1168 },1235 },
1169 "work-an-issue-end": {1236 "work-an-issue-end": {
1170 title: "Traiter un problème de bout en bout",1237 title: "Traiter un ticket de bout en bout",
1171 teaches: "Donnez le numéro du problème, pas un résumé. Claude lit le ticket complet lui-même, afin que les exigences que vous oublieriez de mentionner passent, et il valide la modification avant de signaler."1238 teaches: "Donnez le numéro du ticket, pas un résumé. Claude lit lui-même le ticket complet, afin que les exigences que vous oublieriez de mentionner soient prises en compte, et il valide la modification avant de vous rendre compte.",
1239 prompt: "lisez le ticket #{issue}, implémentez le correctif et lancez les tests",
1240 slots: {
1241 issue: "312"
1242 }
1172 },1243 },
1173 "find-and-update-copy": {1244 "find-and-update-copy": {
1174 title: "Trouver et mettre à jour le texte dans la base de code",1245 title: "Trouver et mettre à jour le texte dans la base de code",
1175 teaches: "Demandez des variantes et dites ce qu'il faut ignorer. Claude trouve des formulations qu'une recherche littérale manquerait et laisse les fixtures de test et l'historique intacts, afin que vous examiniez uniquement le texte que les utilisateurs voient réellement."1246 teaches: "Demandez des variantes et dites ce qu'il faut ignorer. Claude trouve des formulations qu'une recherche littérale manquerait et laisse les fixtures de test et l'historique intacts, afin que vous examiniez uniquement le texte que les utilisateurs voient réellement.",
1247 prompt: "trouvez chaque endroit où nous disons « {copy} » ou une variante proche, montrez-moi chacun dans son contexte, puis remplacez-les tous par « {new} ». ne touchez pas aux tests ni au changelog",
1248 slots: {
1249 copy: "Inscription gratuite",
1250 new: "Commencer l'essai gratuit"
1251 }
1176 },1252 },
1177 "draft-from-past-examples": {1253 "draft-from-past-examples": {
1178 title: "Rédiger un document à partir d'exemples passés",1254 title: "Rédiger un document à partir d'exemples passés",
1179 teaches: "Pointez un dossier de travail terminé au lieu de décrire votre style. Claude apprend la structure et la voix de ce que vous avez déjà livré, afin que le premier brouillon se lise comme l'un des vôtres.",1255 teaches: "Pointez un dossier de travail terminé au lieu de décrire votre style. Claude apprend la structure et la voix de ce que vous avez déjà livré, afin que le premier brouillon se lise comme l'un des vôtres.",
1180 next: "Enregistrez la voix en tant que compétence afin que chaque brouillon commence là"1256 next: "Enregistrez la voix en tant que skill afin que chaque brouillon commence là",
1257 prompt: "lisez les {examples} dans {folder} pour apprendre la structure et la voix, puis rédigez-en une nouvelle version pour {topic}",
1258 slots: {
1259 examples: "analyses d'impact sur la vie privée",
1260 folder: "legal/pia/",
1261 topic: "la nouvelle intégration analytics"
1262 }
1181 },1263 },
1182 "write-tests-run-them": {1264 "write-tests-run-them": {
1183 title: "Écrire des tests, les exécuter, corriger les défaillances",1265 title: "Écrire des tests, les exécuter, corriger les défaillances",
1184 teaches: "Demandez d'écrire, d'exécuter et de corriger ensemble afin que Claude itère sans s'arrêter pour les instructions.",1266 teaches: "Demandez d'écrire, d'exécuter et de corriger ensemble afin que Claude itère sans s'arrêter pour attendre des instructions.",
1185 next: "Exécutez `/init` afin que Claude apprenne automatiquement votre commande de test"1267 next: "Exécutez `/init` afin que Claude apprenne automatiquement votre commande de test",
1268 prompt: "écrivez des tests pour {path}, exécutez-les et corrigez les échecs",
1269 slots: {
1270 path: "app/parsers/feed.py"
1271 }
1186 },1272 },
1187 "drive-implementation-from-tests": {1273 "drive-implementation-from-tests": {
1188 title: "Piloter l'implémentation à partir des tests",1274 title: "Piloter l'implémentation à partir des tests",
1189 teaches: "Développement piloté par les tests : les tests définissent quand le travail est terminé, et Claude itère sur l'implémentation jusqu'à ce qu'ils passent."1275 teaches: "Développement piloté par les tests : les tests définissent quand le travail est terminé, et Claude itère sur l'implémentation jusqu'à ce qu'ils passent.",
1276 prompt: "écrivez d'abord des tests pour {feature}, puis faites l'implémentation jusqu'à ce qu'ils passent",
1277 slots: {
1278 feature: "le flux de réinitialisation du mot de passe"
1279 }
1190 },1280 },
1191 "fill-gaps-from-a": {1281 "fill-gaps-from-a": {
1192 title: "Combler les lacunes à partir d'un rapport de couverture",1282 title: "Combler les lacunes à partir d'un rapport de couverture",
1193 teaches: "Pointez le rapport de couverture au lieu de deviner ce qui n'est pas testé. Claude lit les chiffres réels et écrit des tests pour les fichiers qui en ont le plus besoin.",1283 teaches: "Pointez le rapport de couverture au lieu de deviner ce qui n'est pas testé. Claude lit les chiffres réels et écrit des tests pour les fichiers qui en ont le plus besoin.",
1194 next: "Définissez ceci en tant que `/goal` afin que Claude continue à écrire des tests jusqu'à ce que la couverture atteigne la cible"1284 next: "Définissez ceci en tant que `/goal` afin que Claude continue à écrire des tests jusqu'à ce que la couverture atteigne la cible",
1285 prompt: "lisez {report} et ajoutez des tests pour les fichiers les moins couverts jusqu'à ce que chacun dépasse {target} %",
1286 slots: {
1287 report: "coverage/coverage-summary.json",
1288 target: "80"
1289 }
1195 },1290 },
1196 "port-code-between-languages": {1291 "port-code-between-languages": {
1197 title: "Porter le code vers un autre langage",1292 title: "Porter le code vers un autre langage",
1198 teaches: "Dites ce qu'il faut préserver, pas seulement le langage cible. Nommer l'API ou le comportement qui doit rester le même donne à Claude un contrat pour vérifier le port."1293 teaches: "Dites ce qu'il faut préserver, pas seulement le langage cible. Nommer l'API ou le comportement qui doit rester le même donne à Claude un contrat pour vérifier le port.",
1294 prompt: "portez {source} en {target}, en conservant {keep}",
1295 slots: {
1296 source: "ce module Python",
1297 target: "Rust",
1298 keep: "la même API publique et le même comportement des tests"
1299 }
1199 },1300 },
1200 "generate-docs-for-code": {1301 "generate-docs-for-code": {
1201 title: "Générer de la documentation pour du code non documenté",1302 title: "Générer de la documentation pour du code non documenté",
1202 teaches: "Nommez la portée et le format. Claude trouve ce qui manque et correspond au style de commentaire déjà dans le fichier, afin que la nouvelle documentation se lise comme le reste."1303 teaches: "Nommez la portée et le format. Claude trouve ce qui manque et respecte le style de commentaire déjà présent dans le fichier, afin que la nouvelle documentation se lise comme le reste.",
1304 prompt: "trouvez {scope} sans commentaires {format} et ajoutez-les, en respectant le style déjà utilisé dans le fichier",
1305 slots: {
1306 scope: "les fonctions publiques de src/auth/",
1307 format: "JSDoc"
1308 }
1203 },1309 },
1204 "migrate-a-pattern-across": {1310 "migrate-a-pattern-across": {
1205 title: "Migrer un modèle dans la base de code",1311 title: "Migrer un modèle dans la base de code",
1206 teaches: "Décrivez l'ancien modèle et le nouveau. Demander à Claude d'identifier d'abord chaque endroit signifie que les sites d'appel sont énumérés dans la réponse, afin que vous puissiez vérifier qu'aucun n'a été manqué. Pour une migration sur plusieurs fichiers, exécutez [/batch](/docs/fr/commands). Claude divise le travail en unités pour que vous approuviez, puis les sous-agents d'arrière-plan effectuent les modifications."1312 teaches: "Décrivez l'ancien modèle et le nouveau. Demander à Claude d'identifier d'abord chaque endroit signifie que les sites d'appel sont énumérés dans la réponse, afin que vous puissiez vérifier qu'aucun n'a été manqué. Pour une migration sur de nombreux fichiers, exécutez [/batch](/docs/fr/commands). Claude divise le travail en unités que vous approuvez, puis des sous-agents en arrière-plan effectuent les modifications.",
1313 prompt: "migrez tout de {from} vers {to} : identifiez chaque endroit à modifier, puis effectuez les modifications",
1314 slots: {
1315 from: "l'ancienne API de logging",
1316 to: "le logger structuré"
1317 }
1207 },1318 },
1208 "optimize-against-a-measurable": {1319 "optimize-against-a-measurable": {
1209 title: "Optimiser par rapport à une cible mesurable",1320 title: "Optimiser par rapport à une cible mesurable",
1210 teaches: "Énoncer la métrique et la cible donne à Claude une définition claire de la fin.",1321 teaches: "Énoncer la métrique et la cible donne à Claude une définition claire de la fin.",
1211 next: "Définissez ceci en tant que `/goal` afin que Claude continue à mesurer et itérer jusqu'à ce qu'il atteigne le nombre"1322 next: "Définissez ceci en tant que `/goal` afin que Claude continue à mesurer et itérer jusqu'à ce qu'il atteigne le nombre",
1323 prompt: "optimisez {target} pour faire passer {metric} de {current} à moins de {goal}",
1324 slots: {
1325 target: "la requête de recherche",
1326 metric: "la latence p95",
1327 current: "2 s",
1328 goal: "500 ms"
1329 }
1212 },1330 },
1213 "fix-a-precise-visual": {1331 "fix-a-precise-visual": {
1214 title: "Corriger un bug visuel précis",1332 title: "Corriger un bug visuel précis",
1215 teaches: "Un retour visuel précis obtient une correction précise. Énoncez l'élément exact, la mesure et la fenêtre d'affichage.",1333 teaches: "Un retour visuel précis obtient une correction précise. Énoncez l'élément exact, la mesure et la fenêtre d'affichage.",
1216 next: "Ajoutez un outil d'aperçu afin que Claude capture une capture d'écran et vérifie la correction lui-même"1334 next: "Ajoutez un outil d'aperçu afin que Claude fasse une capture d'écran et vérifie la correction lui-même",
1335 prompt: "le {element} dépasse de {amount} de la {container} sur {viewport}. corrigez-le.",
1336 slots: {
1337 element: "bouton de connexion",
1338 amount: "20px",
1339 container: "bordure de la carte",
1340 viewport: "mobile"
1341 }
1217 },1342 },
1218 "review-your-changes-before": {1343 "review-your-changes-before": {
1219 title: "Examiner vos modifications avant de valider",1344 title: "Examiner vos modifications avant de faire un commit",
1220 teaches: "Attrapez les problèmes tant qu'ils sont encore bon marché à corriger. Claude lit les fichiers modifiés en entier, pas seulement les lignes de diff, afin qu'il repère les problèmes qu'un auto-examen rapide manquerait.",1345 teaches: "Attrapez les problèmes tant qu'ils sont encore peu coûteux à corriger. Claude lit les fichiers modifiés en entier, pas seulement les lignes du diff, afin de repérer les problèmes qu'une relecture rapide de votre part manquerait.",
1221 next: "Exécutez `/code-review` pour la même vérification en une commande"1346 next: "Exécutez `/code-review` pour la même vérification en une commande",
1347 prompt: "passez en revue mes modifications non commitées et signalez tout ce qui semble risqué avant que je fasse un commit"
1222 },1348 },
1223 "review-a-pull-request": {1349 "review-a-pull-request": {
1224 title: "Examiner une demande de tirage",1350 title: "Examiner une pull request",
1225 teaches: "Claude examine avec la base de code entière en contexte, pas seulement le diff. Il lit le code modifié et ce qu'il appelle, afin qu'il repère les problèmes qu'un examen diff-only manquerait.",1351 teaches: "Claude examine avec la base de code entière en contexte, pas seulement le diff. Il lit le code modifié et ce qu'il appelle, afin de repérer les problèmes qu'une revue limitée au diff manquerait.",
1226 next: "Exécutez `/code-review <pr#>` en une commande, ou activez Code Review pour chaque PR"1352 next: "Exécutez `/code-review <pr#>` en une commande, ou activez Code Review pour chaque PR",
1353 prompt: "passez en revue la PR #{pr}, résumez ce qui a changé, puis listez vos éventuelles préoccupations",
1354 slots: {
1355 pr: "247"
1356 }
1227 },1357 },
1228 "review-infrastructure-changes-before": {1358 "review-infrastructure-changes-before": {
1229 title: "Examiner les modifications d'infrastructure avant d'appliquer",1359 title: "Examiner les modifications d'infrastructure avant de les appliquer",
1230 teaches: "La sortie du plan est dense et difficile à analyser. La coller vous donne un résumé en langage clair de ce qui va réellement changer avant que vous l'appliquiez."1360 teaches: "La sortie du plan est dense et difficile à analyser. La coller vous donne un résumé en langage clair de ce qui va réellement changer avant que vous l'appliquiez.",
1361 prompt: "voici la sortie de mon plan Terraform. qu'est-ce que cela va faire, et y a-t-il quelque chose qui risque de poser problème ?"
1231 },1362 },
1232 "run-a-security-review": {1363 "run-a-security-review": {
1233 title: "Exécuter un examen de sécurité avec un sous-agent",1364 title: "Exécuter une revue de sécurité avec un sous-agent",
1234 teaches: "Un [sous-agent](/docs/fr/sub-agents) exécute l'audit dans sa propre fenêtre de contexte et signale un résumé, afin qu'un long examen de sécurité ne remplisse pas votre session principale. Le sous-agent polyvalent intégré gère ceci sans configuration supplémentaire.",1365 teaches: "Un [sous-agent](/docs/fr/sub-agents) exécute l'audit dans sa propre fenêtre de contexte et renvoie un résumé, afin qu'une longue revue de sécurité ne remplisse pas votre session principale. Le sous-agent polyvalent intégré gère ceci sans configuration supplémentaire.",
1235 next: "Configurez un sous-agent security-review dédié que toute votre équipe peut utiliser"1366 next: "Configurez un sous-agent security-review dédié que toute votre équipe peut utiliser",
1367 prompt: "utilisez un sous-agent pour examiner {path} à la recherche de problèmes de sécurité et rapportez ce qu'il trouve",
1368 slots: {
1369 path: "src/api/"
1370 }
1236 },1371 },
1237 "review-content-before-sending": {1372 "review-content-before-sending": {
1238 title: "Attraper les problèmes avant l'examen formel",1373 title: "Attraper les problèmes avant la revue formelle",
1239 teaches: "Obtenez une première passe avant qu'un humain ne passe du temps dessus. Nommez les préoccupations que vous voulez vérifier afin que l'examen soit ciblé, puis corrigez ce qu'il trouve et envoyez un brouillon plus propre.",1374 teaches: "Obtenez une première passe avant qu'un humain ne passe du temps dessus. Nommez les points que vous voulez vérifier afin que la revue soit ciblée, puis corrigez ce qu'elle trouve et envoyez un brouillon plus propre.",
1240 next: "Capturez votre liste de contrôle d'examen en tant que compétence que toute votre équipe peut exécuter"1375 next: "Capturez votre liste de contrôle de revue en tant que skill que toute votre équipe peut exécuter",
1376 prompt: "relisez {file} pour repérer {concerns} et listez tout ce que je devrais corriger avant de l'envoyer à {reviewer}",
1377 slots: {
1378 file: "launch-post.md",
1379 concerns: "les affirmations non étayées, les attributions manquantes et les problèmes de charte de marque",
1380 reviewer: "l'équipe juridique"
1381 }
1241 },1382 },
1242 "course-correct-a-wrong": {1383 "course-correct-a-wrong": {
1243 title: "Corriger une mauvaise approche",1384 title: "Corriger une mauvaise approche",
1244 teaches: "Nommez la contrainte que Claude a manquée, pas seulement que c'est mal. Une raison spécifique donne à Claude une contrainte concrète à satisfaire à la nouvelle tentative, au lieu de deviner à nouveau.",1385 teaches: "Nommez la contrainte que Claude a manquée, pas seulement que c'est faux. Une raison spécifique donne à Claude une contrainte concrète à satisfaire lors de la nouvelle tentative, au lieu de deviner à nouveau.",
1245 next: "Appuyez sur `Esc` deux fois pour ouvrir le menu de rembobinage et restaurer le code et la conversation afin que la nouvelle tentative commence propre"1386 next: "Appuyez deux fois sur `Esc` pour ouvrir le menu de rembobinage et restaurer le code et la conversation afin que la nouvelle tentative reparte de zéro",
1387 prompt: "ce n'est pas correct : {feedback}. essayez une autre approche",
1388 slots: {
1389 feedback: "la signature de la fonction doit rester rétrocompatible"
1390 }
1246 },1391 },
1247 "narrow-the-scope-of": {1392 "narrow-the-scope-of": {
1248 title: "Réduire la portée d'une modification",1393 title: "Réduire la portée d'une modification",
1249 teaches: "Quand la direction est bonne mais la modification est devenue trop large, demandez à Claude de garder une partie plutôt que de rembobiner tout. Une limite énoncée empêche une petite correction de devenir une refactorisation."1394 teaches: "Quand la direction est bonne mais la modification est devenue trop large, demandez à Claude d'en garder une partie plutôt que de tout rembobiner. Une limite énoncée empêche une petite correction de devenir une refactorisation.",
1395 prompt: "c'est trop. ne gardez que les modifications de {scope} et annulez vos autres modifications",
1396 slots: {
1397 scope: "la logique de validation dans src/forms/"
1398 }
1250 },1399 },
1251 "turn-a-correction-into": {1400 "turn-a-correction-into": {
1252 title: "Transformer une correction en règle",1401 title: "Transformer une correction en règle",
1253 teaches: "Une correction en chat n'est pas partagée avec votre équipe. Une règle dans le [CLAUDE.md](/docs/fr/memory) du projet est partagée une fois que vous la validez, et Claude la lit au début de chaque session.",1402 teaches: "Une correction dans le chat n'est pas partagée avec votre équipe. Une règle dans le [CLAUDE.md](/docs/fr/memory) du projet est partagée dès que vous en faites un commit, et Claude la lit au début de chaque session.",
1254 next: "Ouvrez `/memory` pour examiner ce que Claude a écrit"1403 next: "Ouvrez `/memory` pour examiner ce que Claude a écrit",
1404 prompt: "vous continuez à {mistake}. ajoutez une règle dans CLAUDE.md pour que cela cesse",
1405 slots: {
1406 mistake: "utiliser des exports par défaut alors que ce projet utilise des exports nommés"
1407 }
1255 },1408 },
1256 "resolve-merge-conflicts": {1409 "resolve-merge-conflicts": {
1257 title: "Résoudre les conflits de fusion",1410 title: "Résoudre les conflits de fusion",
1258 teaches: "Dites quel état vous voulez, pas quels marqueurs garder. Demander le raisonnement rend la fusion examinable au lieu d'une boîte noire."1411 teaches: "Dites quel état vous voulez, pas quels marqueurs garder. Demander le raisonnement rend la fusion vérifiable au lieu d'en faire une boîte noire.",
1412 prompt: "résolvez les conflits de fusion de cette branche et expliquez ce que vous avez conservé de chaque côté"
1259 },1413 },
1260 "commit-with-a-generated": {1414 "commit-with-a-generated": {
1261 title: "Valider avec un message généré",1415 title: "Faire un commit avec un message généré",
1262 teaches: "Laissez Claude dériver le message du diff. Il correspond au style de commit existant de votre référentiel."1416 teaches: "Laissez Claude déduire le message du diff. Il respecte le style de commit existant de votre dépôt.",
1417 prompt: "faites un commit de ces modifications avec un message qui résume ce que j'ai fait"
1263 },1418 },
1264 "open-a-pull-request": {1419 "open-a-pull-request": {
1265 title: "Ouvrir une demande de tirage à partir d'un ticket",1420 title: "Ouvrir une pull request à partir d'un ticket",
1266 teaches: "Ignorez le changement de contexte entre le suivi, l'éditeur et GitHub. Un prompt lit la spécification, effectue la modification et ouvre la PR."1421 teaches: "Évitez de jongler entre l'outil de suivi, l'éditeur et GitHub. Un seul prompt lit la spécification, effectue la modification et ouvre la PR.",
1422 prompt: "trouvez le ticket {tracker} concernant {topic} et ouvrez une PR qui l'implémente",
1423 slots: {
1424 tracker: "Linear",
1425 topic: "le délai d'expiration de connexion"
1426 }
1267 },1427 },
1268 "draft-release-notes-from": {1428 "draft-release-notes-from": {
1269 title: "Rédiger les notes de sortie à partir de l'historique git",1429 title: "Rédiger les notes de sortie à partir de l'historique git",
1270 teaches: "Donnez deux points de référence et la structure que vous voulez. Claude lit le journal des commits entre eux et rédige un changelog que vous pouvez modifier.",1430 teaches: "Donnez deux points de référence et la structure que vous voulez. Claude lit le log des commits entre eux et rédige un changelog que vous pouvez modifier.",
1271 next: "Enregistrez ceci en tant que compétence `/changelog`"1431 next: "Enregistrez ceci en tant que skill `/changelog`",
1432 prompt: "comparez {from} à {to} et rédigez des notes de sortie regroupées par fonctionnalité, correctif et changement cassant",
1433 slots: {
1434 from: "v2.3.0",
1435 to: "v2.4.0"
1436 }
1272 },1437 },
1273 "write-a-ci-workflow": {1438 "write-a-ci-workflow": {
1274 title: "Écrire un flux de travail CI",1439 title: "Écrire un workflow CI",
1275 teaches: "Décrivez quand il doit s'exécuter et ce qu'il doit faire ; le YAML est généré pour vous, adapté aux commandes de construction et de test de votre projet."1440 teaches: "Décrivez quand il doit s'exécuter et ce qu'il doit faire ; le YAML est généré pour vous, adapté aux commandes de build et de test de votre projet.",
1441 prompt: "écrivez un workflow GitHub Actions qui {steps} à chaque push sur {branch}",
1442 slots: {
1443 steps: "exécute les tests et déploie en staging",
1444 branch: "main"
1445 }
1276 },1446 },
1277 "find-and-fix-a": {1447 "find-and-fix-a": {
1278 title: "Trouver et corriger un test défaillant",1448 title: "Trouver et corriger un test défaillant",
1279 teaches: "Décrivez le symptôme ; vous n'avez pas besoin de savoir quel fichier est cassé. Claude exécute le test pour voir l'échec, le trace dans la source et le corrige."1449 teaches: "Décrivez le symptôme ; vous n'avez pas besoin de savoir quel fichier est cassé. Claude exécute le test pour voir l'échec, remonte jusqu'à la source et le corrige.",
1450 prompt: "le test {test} échoue, trouvez pourquoi et corrigez-le",
1451 slots: {
1452 test: "UserAuth"
1453 }
1280 },1454 },
1281 "investigate-a-reported-error": {1455 "investigate-a-reported-error": {
1282 title: "Enquêter sur une erreur signalée",1456 title: "Enquêter sur une erreur signalée",
1283 teaches: "Décrivez le symptôme et l'emplacement ; Claude lit le chemin de code pertinent et trace les causes probables. Collez les traces de pile ou les journaux si vous les avez.",1457 teaches: "Décrivez le symptôme et l'emplacement ; Claude lit le chemin de code pertinent et identifie les causes probables. Collez les traces de pile ou les logs si vous les avez.",
1284 next: "Mettez un lien profond dans votre runbook qui ouvre Claude avec ce prompt pré-rempli"1458 next: "Mettez un lien profond dans votre runbook qui ouvre Claude avec ce prompt pré-rempli",
1459 prompt: "les utilisateurs rencontrent des {symptom} sur {where}. enquêtez et dites-moi ce qui se passe",
1460 slots: {
1461 symptom: "erreurs 500",
1462 where: "/api/settings"
1463 }
1285 },1464 },
1286 "fix-a-build-error": {1465 "fix-a-build-error": {
1287 title: "Corriger une erreur de construction à la racine",1466 title: "Corriger une erreur de build à la racine",
1288 teaches: "Demander la cause racine et la vérification empêche les correctifs de surface qui suppriment l'erreur sans la corriger."1467 teaches: "Demander la cause racine et la vérification empêche les correctifs superficiels qui masquent l'erreur sans la corriger.",
1468 prompt: "voici une erreur de build. corrigez la cause racine et vérifiez que le build réussit"
1289 },1469 },
1290 "investigate-a-production-incident": {1470 "investigate-a-production-incident": {
1291 title: "Enquêter sur un incident de production",1471 title: "Enquêter sur un incident de production",
1292 teaches: "Énumérez les sources de preuves à corréler, pas les étapes à suivre. Claude lit les journaux, l'historique git et la configuration ensemble pour réduire la cause.",1472 teaches: "Énumérez les sources de preuves à corréler, pas les étapes à suivre. Claude lit les logs, l'historique git et la configuration ensemble pour cerner la cause.",
1293 next: "Connectez Sentry ou votre magasin de journaux via MCP"1473 next: "Connectez Sentry ou votre magasin de logs via MCP",
1474 prompt: "{symptom}. vérifiez les logs, les déploiements récents et les changements de configuration, puis indiquez-moi la cause la plus probable",
1475 slots: {
1476 symptom: "l'endpoint de checkout renvoie des erreurs 500 depuis une heure"
1477 }
1294 },1478 },
1295 "query-logs-in-plain": {1479 "query-logs-in-plain": {
1296 title: "Interroger les journaux en anglais simple",1480 title: "Interroger les logs en langage courant",
1297 teaches: "Posez la question au lieu d'écrire le SQL. Claude construit la requête, l'exécute contre vos journaux connectés et affiche à la fois la requête et le résultat afin que vous puissiez vérifier ce qui a été exécuté."1481 teaches: "Posez la question au lieu d'écrire le SQL. Claude construit la requête, l'exécute sur vos logs connectés et affiche à la fois la requête et le résultat afin que vous puissiez vérifier ce qui a été exécuté.",
1482 prompt: "montrez-moi tous les {events} pour {scope} sur {timeframe}. écrivez la requête, exécutez-la et dites-moi ce qui ressort",
1483 slots: {
1484 events: "échecs de connexion",
1485 scope: "le service d'authentification",
1486 timeframe: "les dernières 24 heures"
1487 }
1298 },1488 },
1299 "diagnose-from-a-console": {1489 "diagnose-from-a-console": {
1300 title: "Diagnostiquer à partir d'une capture d'écran de console",1490 title: "Diagnostiquer à partir d'une capture d'écran de console",
1301 teaches: "Les consoles cloud vous montrent le problème mais pas les commandes pour le corriger. Claude lit la capture d'écran et traduit le tableau de bord en commandes kubectl, gcloud ou aws à exécuter."1491 teaches: "Les consoles cloud vous montrent le problème mais pas les commandes pour le corriger. Claude lit la capture d'écran et traduit le tableau de bord en commandes kubectl, gcloud ou aws à exécuter.",
1492 prompt: "voici une capture d'écran de {console}. expliquez-moi pourquoi {resource} échoue et donnez-moi les commandes exactes pour le corriger",
1493 slots: {
1494 console: "le tableau de bord Kubernetes de GCP",
1495 resource: "ce pod"
1496 }
1302 },1497 },
1303 "analyze-a-data-file": {1498 "analyze-a-data-file": {
1304 title: "Analyser un fichier de données",1499 title: "Analyser un fichier de données",
1305 teaches: "Une question ponctuelle n'a pas besoin d'un script ponctuel. Pointez un fichier dans votre dossier de projet et Claude le lit directement, trouve les modèles et écrit la sortie où vous le demandez.",1500 teaches: "Une question ponctuelle n'a pas besoin d'un script ponctuel. Pointez un fichier dans votre dossier de projet et Claude le lit directement, trouve les tendances et écrit la sortie où vous le demandez.",
1306 next: "Connectez la source de données via MCP au lieu d'exporter des fichiers"1501 next: "Connectez la source de données via MCP au lieu d'exporter des fichiers",
1502 prompt: "lisez {file}, résumez les tendances clés et écrivez les résultats dans {output}",
1503 slots: {
1504 file: "@reports/q1-signups.csv",
1505 output: "une page HTML avec des graphiques, puis ouvrez-la dans mon navigateur"
1506 }
1307 },1507 },
1308 "generate-variations-from-performance": {1508 "generate-variations-from-performance": {
1309 title: "Générer des variations à partir de données de performance",1509 title: "Générer des variantes à partir de données de performance",
1310 teaches: "Énoncez la contrainte au début afin que la génération reste dans la limite. Claude lit les métriques, choisit ce qu'il faut remplacer et produit des alternatives qui correspondent.",1510 teaches: "Énoncez la contrainte dès le début afin que la génération reste dans la limite. Claude lit les métriques, choisit ce qu'il faut remplacer et produit des alternatives qui respectent la contrainte.",
1311 next: "Connectez la plateforme publicitaire via MCP au lieu d'exporter un fichier"1511 next: "Connectez la plateforme publicitaire via MCP au lieu d'exporter un fichier",
1512 prompt: "lisez {file}, trouvez les {items} les moins performants et générez {n} nouvelles variantes de moins de {limit} caractères",
1513 slots: {
1514 file: "@ads-performance.csv",
1515 items: "titres",
1516 n: "20",
1517 limit: "90"
1518 }
1312 },1519 },
1313 "turn-a-recurring-task": {1520 "turn-a-recurring-task": {
1314 title: "Transformer une tâche récurrente en compétence",1521 title: "Transformer une tâche récurrente en skill",
1315 teaches: "Nommez les étapes une fois ; réutilisez-les en tant que commande. Claude écrit une [compétence](/docs/fr/skills) que n'importe qui dans votre équipe peut exécuter."1522 teaches: "Nommez les étapes une fois ; réutilisez-les en tant que commande. Claude écrit un [skill](/docs/fr/skills) que n'importe qui dans votre équipe peut exécuter.",
1523 prompt: "créez un skill /{name} pour ce projet qui {steps}",
1524 slots: {
1525 name: "ship",
1526 steps: "exécute le linter et les tests, puis rédige un message de commit"
1527 }
1316 },1528 },
1317 "add-a-hook-for": {1529 "add-a-hook-for": {
1318 title: "Ajouter un hook pour un comportement répété",1530 title: "Ajouter un hook pour un comportement répété",
1319 teaches: "Les hooks rendent un comportement automatique au lieu de quelque chose que vous devez vous souvenir de demander. Décrivez le déclencheur et l'action et Claude écrit la configuration du [hook](/docs/fr/hooks)."1531 teaches: "Les hooks rendent un comportement automatique au lieu de quelque chose que vous devez penser à demander. Décrivez le déclencheur et l'action et Claude écrit la configuration du [hook](/docs/fr/hooks).",
1532 prompt: "écrivez un hook qui {action} après chaque {event}",
1533 slots: {
1534 action: "exécute prettier",
1535 event: "modification d'un fichier .ts ou .tsx"
1536 }
1320 },1537 },
1321 "connect-a-tool-with": {1538 "connect-a-tool-with": {
1322 title: "Connecter un outil avec MCP",1539 title: "Connecter un outil avec MCP",
1323 teaches: "Connectez la source une fois au lieu de coller les données à chaque session. Après la configuration [MCP](/docs/fr/mcp), Claude lit directement à partir de l'outil quand vous lui en parlez."1540 teaches: "Connectez la source une fois au lieu de coller les données à chaque session. Après la configuration [MCP](/docs/fr/mcp), Claude lit directement à partir de l'outil quand vous lui posez une question à son sujet.",
1541 prompt: "configurez le serveur MCP {server} pour que vous puissiez lire directement mes {data}",
1542 slots: {
1543 server: "Sentry",
1544 data: "rapports d'erreurs"
1545 }
1324 },1546 },
1325 "capture-what-to-remember": {1547 "capture-what-to-remember": {
1326 title: "Capturer ce qu'il faut retenir pour la prochaine fois",1548 title: "Capturer ce qu'il faut retenir pour la prochaine fois",
1327 teaches: "Demandez avant d'oublier. Claude sait ce qu'il a dû comprendre cette session et propose des entrées [CLAUDE.md](/docs/fr/memory) afin que la session suivante commence avec ce contexte."1549 teaches: "Demandez avant d'oublier. Claude sait ce qu'il a dû comprendre pendant cette session et propose des entrées [CLAUDE.md](/docs/fr/memory) afin que la session suivante commence avec ce contexte.",
1550 prompt: "résumez ce que nous avons fait pendant cette session et suggérez ce qu'il faut ajouter à CLAUDE.md"
1328 }1551 }
1329};1552};
1330 1553