Dans VS Copilot, le processus de travail ressemble généralement à ceci.
D’abord, le Plan agent ou l’ingénieur fixe le plan des étapes.
La tâche est lancée dans une session locale, car c’est là que l’agent a un accès complet au workspace, aux tools et aux modèles.
Le contexte est fourni via les fichiers actifs,
#file,
#codebase,
#terminalSelection et les instructions du projet.
L’Agent effectue des modifications multi-fichiers et, si nécessaire, travaille à côté du terminal.
L’ingénieur examine les inline diffs, Keep/Undo et les checkpoints.
Si une vérification séparée est nécessaire, on lance un passage critique via un autre agent, une session séparée ou un custom agent de type reviewer.
Si le comportement de l’agent semble étrange, on utilise Agent Logs ou Chat Debug view, et non des suppositions.
Comment nos principes de cet article se réalisent dans le processus CopilotAvant, nous avons analysé les principes et approches établis des systèmes multi-agents. Voyons maintenant comment les implémenter dans Copilot.
Plan-and-ExecuteIl ne faut pas demander directement à Copilot : « corrige tout ». Pour les tâches complexes, il vaut mieux séparer planification et exécution.
D’abord, on demande au Plan agent de préparer un plan : quels fichiers consulter, quelles hypothèses vérifier, quelles modifications sont possibles et comment valider ensuite le résultat. Ensuite, on exécute la tâche étape par étape : soit une étape par message, soit une étape par session séparée.
Pour le DevOps, c’est particulièrement utile lorsque la tâche touche plusieurs endroits à la fois : pipeline YAML, Dockerfile, Helm chart, variables d’environnement et commandes de vérification. Le plan aide à ne pas mélanger tout cela dans une seule grosse modification.
Context engineeringLa qualité de la réponse de Copilot dépend fortement du contexte qu’on lui donne.
Il vaut mieux indiquer explicitement les sources nécessaires : un
#file précis avec la configuration du pipeline, le Dockerfile concerné, un fragment d’erreur sélectionné via
#terminalSelection.
#codebase est utile pendant la recherche et la première découverte du projet, mais il ne faut pas l’utiliser dans chaque requête sans nécessité.
La règle principale : donner à l’agent exactement le contexte nécessaire à l’étape en cours.
L’erreur typique consiste à charger immédiatement tout le dépôt, tout l’historique du chat et toutes les instructions du projet. La réponse ne devient pas forcément plus intelligente. Souvent, c’est l’inverse : l’agent commence à relier des parties non pertinentes du projet et produit des conclusions moins précises.
ReAct : regarder, formuler une hypothèse, vérifierDans Copilot, cette approche est pratique sous forme de cycle d’ingénierie court :
regarder les fichiers et la sortie du terminal -> formuler une hypothèse -> faire une action ciblée -> vérifier le résultat -> proposer l’étape suivantePar exemple, si le pipeline a échoué après une modification du Dockerfile, il ne faut pas demander immédiatement à Copilot de réécrire massivement la configuration. Il vaut mieux d’abord lui demander de regarder l’erreur, de nommer une ou deux causes les plus probables, puis de vérifier une hypothèse, et seulement ensuite de proposer une modification.
Cela réduit le risque que l’agent passe d’un symptôme à une grande modification insuffisamment justifiée.
Critic isolationIl vaut mieux sortir la vérification du résultat dans une étape séparée.
L’idée est simple : celui qui a effectué les changements ne doit pas se relire lui-même dans le même passage. Sinon, Copilot peut continuer à défendre sa propre logique au lieu de chercher honnêtement les problèmes.
En pratique, on peut faire ainsi :
- d’abord Copilot en agent mode exécute la tâche et propose des changements ;
- ensuite, une session de review séparée ou un reviewer agent séparé vérifie le résultat.
Il vaut mieux donner au reviewer non pas tout l’historique initial, mais des matériaux précis à vérifier :
- le diff ;
- la liste des fichiers modifiés ;
- les critères d’acceptation ;
- les commandes de validation ;
- le résultat attendu.
Le reviewer regarde alors précisément le résultat du travail : ce qui a changé, si cela correspond à la tâche, s’il y a des erreurs, des risques ou des vérifications manquantes.
Plus simplement : d’abord un passage séparé pour l’exécution, puis un passage séparé pour la critique du résultat. La review devient ainsi plus indépendante et plus utile.
Rubric-based reviewIl vaut mieux ne pas formuler la review comme « vérifie si tout va bien », mais selon des critères définis à l’avance.
Pour les changements DevOps, ces critères peuvent être simples :
- Blocker — ce qu’il ne faut absolument pas laisser passer ;
- Warning — ce qui ne bloque pas, mais exige de l’attention ;
- Missing validation — quelles vérifications manquent ;
- Rollback risk — existe-t-il un risque de problème de rollback ;
- Security impact — y a-t-il un impact sur la sécurité.
Cette rubric peut être enregistrée dans
copilot-instructions.md, dans un prompt de review séparé ou dans les paramètres d’un reviewer agent.
Ainsi, Copilot vérifiera les changements non pas en texte libre, mais selon une structure compréhensible. À la sortie, on n’obtiendra pas « ça a l’air bon », mais une liste concrète : ce qui bloque le merge, ce qu’il faut corriger, quelles vérifications ajouter et où se trouvent les risques.
ReflexionSi une tentative n’a pas fonctionné, il ne faut pas simplement répéter la même requête. Copilot peut reprendre le même mauvais chemin.
Il vaut mieux fixer brièvement avant la prochaine tentative :
- ce qui a déjà été essayé ;
- quelle commande a été lancée ;
- quelle erreur reste ;
- quelles hypothèses n’ont pas été confirmées ;
- ce qu’il ne faut pas répéter.
Par exemple :
Nous avons essayé de modifier le Dockerfile et de remplacer l’image de base.
Après cela, le build échoue toujours sur la restauration des dépendances.
L’hypothèse d’un problème d’accès au registry n’a pas été confirmée.
Ne répète pas la vérification des droits sur le registry ; passe à l’analyse de NuGet/source mapping.
Copilot n’a pas de bouton séparé « Reflexion », mais cette approche est facile à utiliser manuellement : à la fin d’une tentative infructueuse, demander un court résumé, puis le transmettre à la session suivante ou à l’étape suivante.
Il est important de comprendre que les checkpoints aident à revenir en arrière sur les fichiers, mais n’expliquent pas pourquoi la tentative n’a pas fonctionné. En plus d’un checkpoint, il est donc utile de sauvegarder une courte conclusion textuelle : ce qui a été fait, ce qui a été obtenu et quelle conclusion en tirer.
Session contextIl vaut mieux diviser un long travail en sessions par phase.
Par exemple :
- session 1 — discovery et plan ;
- session 2 — exécution ;
- session 3 — review ;
- session 4 — documentation ou message de commit.
Au début de chaque session, il est utile d’écrire explicitement l’objectif, les contraintes et le critère de fin.
Si le chat devient trop long et trop bruyant, il vaut mieux commencer une nouvelle session et y transmettre un court handoff plutôt que de continuer à traîner tout l’historique.
Step logging / tracePour les tâches DevOps sérieuses, il est important de comprendre exactement ce qui a été fait.
Copilot fournit la partie technique de l’observabilité via Agent Logs, Summary, Agent Flow Chart et Chat Debug view. On peut y voir les tool calls, le contexte, les LLM requests et les erreurs.
Mais cela ne suffit pas toujours. Pour une trace d’ingénierie exploitable, il est utile de conserver aussi un court journal :
- ce qui a été vérifié ;
- quels fichiers ont été modifiés ;
- quelles commandes ont été lancées ;
- quel résultat a été obtenu ;
- quelles conclusions ont été faites.
Un tel journal aide à revenir plus tard sur la tâche ou à la transmettre à un autre ingénieur sans perte de contexte.
Stop and escalateIl faut définir à l’avance quand l’agent doit s’arrêter.
Par exemple :
- pas plus de deux ou trois tentatives sans progrès ;
- arrêt en cas de contexte insuffisant ;
- arrêt avant modification de secrets ou de permissions ;
- arrêt avant changements critiques pour la production ;
- arrêt en cas de risque de suppression ou d’écrasement de données.
Dans Copilot, cela est pris en charge à la fois par le processus et techniquement. Les permission levels limitent l’autonomie de l’agent, et l’ingénieur peut arrêter l’exécution à tout moment pour passer en mode manuel.
C’est particulièrement important en DevOps, où une erreur peut toucher l’infrastructure, les accès ou la production.
Least privilege toolsIl ne faut pas donner à chaque rôle un accès maximal.
Le planner et le reviewer peuvent généralement travailler en read-only. Il leur suffit de lire les fichiers, d’analyser le diff et de proposer des conclusions.
L’executor peut recevoir le droit de modifier des fichiers et d’utiliser le terminal de manière limitée.
Les systèmes externes ne doivent être connectés que via les MCP servers réellement nécessaires pour la tâche concernée.
Ce n’est pas seulement une question de sécurité. Moins l’agent a d’outils inutiles, plus son comportement est prévisible. Si l’on donne trop de capacités à un rôle, il fera plus souvent des étapes inutiles et compliquera le processus.
En réunissant tout cela, Copilot dans VS Code permet d’appliquer les principes multi-agents sous une forme très pratique : planifier séparément de l’exécution, gérer le contexte, vérifier le résultat par un passage reviewer séparé, tracer les étapes, limiter les accès et arrêter l’automatisation à temps. C’est ce qui transforme Copilot d’un « chat intelligent dans l’IDE » en outil de travail pour un processus d’ingénierie contrôlé.