Dès le premier commit de mon projet Python, une règle comptait plus que toutes les autres : l'agent de codage ne doit jamais voir les critères d'acceptation. J'ai donc construit deux agents qui ne partagent jamais leurs notes. L'un écrit les tests à partir de la spécification complète, et un autre agent de codage écrit le code à partir de la même spécification, mais sans les critères. Dans la plupart des environnements de codage, le même agent écrit les deux, ce qui compromet la validité des résultats de tests.
J'ai forcé cette coupure dans le code, par l'assemblage du contexte, l'étape qui construit le prompt de l'agent de codage : la section des critères du fichier de tâche est retirée avant que le prompt ne soit construit. Pendant un temps, j'ai cru que cette coupure était étanche. Puis j'ai découvert qu'une seule ligne de commentaire la brisait : la coupure s'arrêtait là, et chaque critère placé après le commentaire parvenait à l'agent de codage. Une semaine plus tard, un critère dont le texte passait sur une seconde ligne produisit le même effet. Les deux bogues étaient de mon fait. Cette fois, après les avoir corrigés, j'ai ajouté des tests pour qu'à l'avenir tout build échoue si la coupure n'est pas appliquée comme prévu.
Les Skills et les serveurs MCP sont souvent comparés l'un à l'autre, mais pour la règle dont dépend mon projet, la réponse s'est avérée être aucun des deux. Je voulais que les utilisateurs puissent atteindre qikly, mon outil en ligne de commande, depuis un assistant IA comme Claude Code ou Cursor. Cela met en jeu deux LLM, et aucun ne devrait voir les critères d'acceptation. L'assistant pouvait déjà exécuter qikly, mais il ne savait pas quand s'en servir. J'ai donc écrit un Skill : un dossier d'instructions en Markdown que l'assistant charge lorsqu'une demande correspond à sa description.
Rédiger le Skill a séparé deux tâches. Le rôle du Skill est de conseiller sur ce qui doit figurer dans les exigences plutôt que dans les critères d'acceptation. Cela ne peut qu'être enseigné, pas garanti. Le rôle de l'assemblage du contexte est de retirer les critères à chaque fois, qu'un Skill soit installé ou non. Le conseil reste important, car un critère également écrit dans les exigences parvient de toute façon à l'agent de codage. J'ai donc ajouté à qikly --validate une vérification qui signale ces répétitions.
Question fréquente
Q : Pourquoi ne pas se fier à un meilleur modèle ou à une température nulle pour empêcher le LLM de voir les critères ?
R : Un meilleur modèle suit les consignes plus souvent, mais pas toujours, et fixer la température à zéro rend les réponses plus reproductibles, sans les rendre plus obéissantes. Les règles qui doivent toujours être respectées doivent être imposées dans le code, par exemple par l'assemblage du contexte, tandis que les conseils fondés sur le jugement peuvent vivre dans un Skill.
Source: Towards Data Science · Résumé par HeadlinesBriefing