<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Sense of [AI]</title>
        <description>Sense of AI — plain-language articles to understand and use AI concretely: coding with AI, models, security, news and good practices. By Adrien Clerbois, Microsoft MVP.</description>
        <link>https://senseof.ai/</link>
        <atom:link href="https://senseof.ai/feed.xml" rel="self" type="application/rss+xml"/>
        <pubDate>Thu, 09 Jul 2026 20:33:10 +0200</pubDate>
        <lastBuildDate>Thu, 09 Jul 2026 20:33:10 +0200</lastBuildDate>
        <generator>Jekyll v4.0.1</generator>
        
            <item>
                <title>C&apos;est quoi un LLM, vraiment ? (l&apos;IA expliquée simplement)</title>
                <description>&lt;p&gt;ChatGPT, Claude, Gemini, Copilot… derrière tous ces noms se cache la même bête : un &lt;strong&gt;LLM&lt;/strong&gt;, pour &lt;em&gt;Large Language Model&lt;/em&gt; — grand modèle de langage. On l’utilise tous les jours, on lui confie du code, des mails, des décisions. Mais au fond, &lt;strong&gt;qu’est-ce que c’est&lt;/strong&gt; ? Une base de connaissances ? Un cerveau ? De la magie ?&lt;/p&gt;

&lt;p&gt;Bonne nouvelle : le principe tient en une phrase, et une fois qu’on l’a compris, tout le reste — les hallucinations, le prix, les limites — devient évident. Vous allez voir : c’est pas sorcier.&lt;/p&gt;

&lt;!--more--&gt;

&lt;h2 id=&quot;limage-à-garder-en-tête--une-autocomplétion-géante&quot;&gt;L’image à garder en tête : une autocomplétion géante&lt;/h2&gt;

&lt;p&gt;Vous connaissez la suggestion de mot suivant sur le clavier de votre téléphone ? Vous tapez « Je rentre à la… » et il propose « maison ». Il ne &lt;em&gt;comprend&lt;/em&gt; rien : il a juste vu des millions de phrases et sait quel mot vient souvent après.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Un LLM, c’est exactement ça — mais qui aurait lu presque tout ce que l’humanité a écrit.&lt;/strong&gt; Des livres, du code, des forums, des articles. À cette échelle, deviner « le mot suivant » cesse d’être un gadget et se met à ressembler à de l’intelligence.&lt;/p&gt;

&lt;p&gt;C’est toute l’idée. Le reste, ce sont les détails — et ils sont passionnants.&lt;/p&gt;

&lt;h2 id=&quot;au-fond-ça-fait-quoi--il-devine-le-token-suivant&quot;&gt;Au fond, ça fait quoi ? Il devine le &lt;a href=&quot;/glossary/#token&quot;&gt;token&lt;/a&gt; suivant&lt;/h2&gt;

&lt;p&gt;Donnez ce début à un modèle : « Le ciel est ». Il ne va pas « chercher » la réponse dans une base. Il va calculer, pour &lt;strong&gt;chaque&lt;/strong&gt; mot possible, une probabilité d’être le suivant :&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Le ciel est →   bleu   (72 %)
                gris   (11 %)
                dégagé  (6 %)
                …
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Il choisit (souvent le plus probable), ajoute le mot, et &lt;strong&gt;recommence&lt;/strong&gt; avec « Le ciel est bleu », puis encore, mot après mot — ou plus exactement &lt;a href=&quot;/glossary/#token&quot;&gt;token&lt;/a&gt; après token. C’est ça, la &lt;a href=&quot;/glossary/#next-token-prediction&quot;&gt;prédiction du token suivant&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Retenez bien ceci, car tout en découle : &lt;strong&gt;un LLM ne récite pas des faits, il calcule le texte le plus plausible.&lt;/strong&gt; La plupart du temps, plausible = correct. Parfois, non — on y revient.&lt;/p&gt;

&lt;h2 id=&quot;comment-il-a--appris---lentraînement&quot;&gt;Comment il a « appris » ? L’entraînement&lt;/h2&gt;

&lt;p&gt;Un LLM est un &lt;a href=&quot;/glossary/#neural-network&quot;&gt;réseau de neurones&lt;/a&gt; : un très gros programme rempli de &lt;strong&gt;milliards de petits réglages&lt;/strong&gt; internes, appelés &lt;a href=&quot;/glossary/#parameters&quot;&gt;paramètres&lt;/a&gt; (ou &lt;em&gt;poids&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;Pendant l’&lt;a href=&quot;/glossary/#training&quot;&gt;entraînement&lt;/a&gt;, on lui montre des quantités colossales de texte en lui faisant jouer, encore et encore, au jeu du mot caché : « Le chat boit du ___ ». À chaque erreur, on ajuste très légèrement ses milliards de réglages pour qu’il se trompe un peu moins la fois suivante. Répétez des milliards de fois : il finit par « intérioriser » la grammaire, des faits, des styles, des raisonnements.&lt;/p&gt;

&lt;p&gt;Deux choses essentielles à comprendre :&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Il ne stocke pas les textes&lt;/strong&gt; comme une bibliothèque. Il en garde une sorte d’intuition statistique diffuse dans ses paramètres. C’est pour ça qu’il peut écrire des phrases inédites — mais aussi pourquoi il ne « connaît » rien de précis à la virgule près.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Entraîner ≠ utiliser.&lt;/strong&gt; L’entraînement est une phase unique, longue et hors de prix (des mois, des millions). Ensuite, chaque fois que vous lui parlez, c’est de l’&lt;a href=&quot;/glossary/#inference&quot;&gt;inférence&lt;/a&gt; : on fait juste tourner le modèle déjà entraîné. Il &lt;strong&gt;n’apprend pas&lt;/strong&gt; de votre conversation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;pourquoi-cest-bluffant-et-pourquoi-ça-se-trompe&quot;&gt;Pourquoi c’est bluffant… et pourquoi ça se trompe&lt;/h2&gt;

&lt;p&gt;À force d’échelle, des capacités &lt;strong&gt;émergent&lt;/strong&gt; : traduire, résumer, coder, raisonner par étapes. Personne ne les a programmées explicitement — elles sont apparues en apprenant à prédire du texte. C’est ce qui rend les LLM si polyvalents.&lt;/p&gt;

&lt;p&gt;Mais la même mécanique explique leurs travers :&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Les &lt;a href=&quot;/glossary/#hallucination&quot;&gt;hallucinations&lt;/a&gt;.&lt;/strong&gt; Puisqu’il produit du texte &lt;em&gt;plausible&lt;/em&gt; et non &lt;em&gt;vérifié&lt;/em&gt;, un LLM peut inventer une citation, une fonction, une date — avec un aplomb total. Ce n’est pas un mensonge : c’est le mot le plus probable, tout simplement.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Une connaissance figée.&lt;/strong&gt; Il ne sait que ce qu’il a vu à l’entraînement (sa &lt;em&gt;date de coupure&lt;/em&gt;). Sans outil pour aller chercher l’info fraîche, il ignore ce qui s’est passé depuis.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Pas de vraie base de faits.&lt;/strong&gt; Il n’a « ni Google, ni calculatrice » par défaut — juste ses intuitions. D’où l’intérêt de lui &lt;strong&gt;fournir&lt;/strong&gt; le contexte (voir le &lt;a href=&quot;/glossary/#rag&quot;&gt;RAG&lt;/a&gt;) plutôt que de compter sur sa mémoire.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;ce-que-ça-change-concrètement-pour-vous&quot;&gt;Ce que ça change concrètement pour vous&lt;/h2&gt;

&lt;p&gt;Voir le LLM comme un &lt;strong&gt;moteur de texte probabiliste&lt;/strong&gt; — et non comme un oracle — change tout de suite la façon de s’en servir :&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Soyez précis.&lt;/strong&gt; Le modèle complète ce que vous donnez : un &lt;a href=&quot;/glossary/#prompt&quot;&gt;prompt&lt;/a&gt; clair et contextualisé produit une bien meilleure suite.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Donnez-lui les faits.&lt;/strong&gt; Pour une réponse fiable sur &lt;em&gt;vos&lt;/em&gt; données, fournissez-les dans le contexte plutôt que d’espérer qu’il les « connaisse ».&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Vérifiez ce qui compte.&lt;/strong&gt; Sur un fait, un chiffre, un bout de code critique : contrôlez. Le plausible n’est pas le vrai.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Choisissez le bon réglage.&lt;/strong&gt; Besoin de créativité ou de rigueur ? C’est le rôle de la &lt;a href=&quot;/glossary/#temperature&quot;&gt;température&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;le-llm-en-5-idées&quot;&gt;Le LLM en 5 idées&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Idée&lt;/th&gt;
      &lt;th&gt;En clair&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Ce qu’il fait&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Il devine le token suivant, encore et encore — une autocomplétion géante&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Comment il a appris&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;En ajustant des milliards de paramètres sur d’énormes textes (l’entraînement)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Ce qu’il garde&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Une intuition statistique, pas une base de faits exacte&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Pourquoi il se trompe&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Il produit du plausible, pas du vérifié → hallucinations&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Comment bien s’en servir&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Être précis, fournir le contexte, vérifier l’important&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;en-résumé&quot;&gt;En résumé&lt;/h2&gt;

&lt;p&gt;Un LLM n’est ni un cerveau, ni une encyclopédie, ni de la magie : c’est une &lt;strong&gt;autocomplétion extraordinairement douée&lt;/strong&gt;, entraînée à deviner la suite d’un texte. Tout le génie — et tous les pièges — vient de là.&lt;/p&gt;

&lt;p&gt;Gardez cette image en tête, et l’IA cesse d’être une boîte noire intimidante. Parce que, au fond… c’est pas sorcier.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Un mot vous échappe ? Le &lt;a href=&quot;/glossary/&quot;&gt;glossaire&lt;/a&gt; définit tous les termes IA, en clair.&lt;/em&gt;&lt;/p&gt;
</description>
                <pubDate>Wed, 08 Jul 2026 12:00:00 +0200</pubDate>
                <link>https://senseof.ai/fr/2026/07/08/c-est-quoi-un-llm/</link>
                <guid isPermaLink="true">https://senseof.ai/fr/2026/07/08/c-est-quoi-un-llm/</guid>
                
                <category>AI</category>
                
                <category>LLM</category>
                
                <category>fundamentals</category>
                
                
            </item>
        
            <item>
                <title>What is an LLM, really? (AI explained simply)</title>
                <description>&lt;p&gt;ChatGPT, Claude, Gemini, Copilot… behind all those names hides the same beast: an &lt;strong&gt;LLM&lt;/strong&gt;, for &lt;em&gt;Large Language Model&lt;/em&gt;. We use one every day, we trust it with code, emails, decisions. But deep down, &lt;strong&gt;what is it&lt;/strong&gt;? A knowledge base? A brain? Magic?&lt;/p&gt;

&lt;p&gt;Good news: the core idea fits in one sentence, and once you get it, everything else — the hallucinations, the price, the limits — becomes obvious. You’ll see: it’s not rocket science.&lt;/p&gt;

&lt;!--more--&gt;

&lt;h2 id=&quot;the-image-to-keep-in-mind-a-giant-autocomplete&quot;&gt;The image to keep in mind: a giant autocomplete&lt;/h2&gt;

&lt;p&gt;You know the next-word suggestion on your phone keyboard? You type “I’m heading back ho…” and it offers “home”. It &lt;em&gt;understands&lt;/em&gt; nothing: it has simply seen millions of sentences and knows which word often comes next.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;An LLM is exactly that — but one that has read almost everything humanity has ever written.&lt;/strong&gt; Books, code, forums, articles. At that scale, guessing “the next word” stops being a gimmick and starts to look like intelligence.&lt;/p&gt;

&lt;p&gt;That’s the whole idea. The rest is detail — and the details are fascinating.&lt;/p&gt;

&lt;h2 id=&quot;deep-down-what-does-it-do-it-guesses-the-next-token&quot;&gt;Deep down, what does it do? It guesses the next &lt;a href=&quot;/glossary/#token&quot;&gt;token&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Give a model this beginning: “The sky is”. It won’t “look up” the answer in a database. It computes, for &lt;strong&gt;every&lt;/strong&gt; possible word, a probability of being next:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;The sky is →   blue    (72%)
               gray    (11%)
               clear    (6%)
               …
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;It picks one (often the most likely), appends the word, and &lt;strong&gt;starts over&lt;/strong&gt; with “The sky is blue”, then again, word after word — or more precisely &lt;a href=&quot;/glossary/#token&quot;&gt;token&lt;/a&gt; after token. That’s &lt;a href=&quot;/glossary/#next-token-prediction&quot;&gt;next-token prediction&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Remember this, because everything follows from it: &lt;strong&gt;an LLM doesn’t recite facts, it computes the most plausible text.&lt;/strong&gt; Most of the time, plausible = correct. Sometimes, not — we’ll get back to that.&lt;/p&gt;

&lt;h2 id=&quot;how-did-it-learn-training&quot;&gt;How did it “learn”? Training&lt;/h2&gt;

&lt;p&gt;An LLM is a &lt;a href=&quot;/glossary/#neural-network&quot;&gt;neural network&lt;/a&gt;: a very large program filled with &lt;strong&gt;billions of tiny internal settings&lt;/strong&gt;, called &lt;a href=&quot;/glossary/#parameters&quot;&gt;parameters&lt;/a&gt; (or &lt;em&gt;weights&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;During &lt;a href=&quot;/glossary/#training&quot;&gt;training&lt;/a&gt;, it’s shown colossal amounts of text and made to play, over and over, a fill-in-the-blank game: “The cat drinks ___”. On every mistake, its billions of settings are nudged ever so slightly so it’s a little less wrong next time. Repeat billions of times, and it ends up “internalizing” grammar, facts, styles, reasoning.&lt;/p&gt;

&lt;p&gt;Two essential things to understand:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;It doesn’t store the texts&lt;/strong&gt; like a library. It keeps a kind of diffuse statistical intuition spread across its parameters. That’s why it can write brand-new sentences — but also why it doesn’t “know” anything precisely, word for word.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Training ≠ using.&lt;/strong&gt; Training is a one-off, long, wildly expensive phase (months, millions). After that, every time you talk to it is &lt;a href=&quot;/glossary/#inference&quot;&gt;inference&lt;/a&gt;: you’re just running the already-trained model. It &lt;strong&gt;doesn’t learn&lt;/strong&gt; from your conversation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;why-its-stunning-and-why-it-gets-things-wrong&quot;&gt;Why it’s stunning… and why it gets things wrong&lt;/h2&gt;

&lt;p&gt;At scale, capabilities &lt;strong&gt;emerge&lt;/strong&gt;: translating, summarizing, coding, reasoning step by step. Nobody programmed them explicitly — they appeared while learning to predict text. That’s what makes LLMs so versatile.&lt;/p&gt;

&lt;p&gt;But the same mechanism explains their flaws:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;/glossary/#hallucination&quot;&gt;Hallucinations&lt;/a&gt;.&lt;/strong&gt; Since it produces &lt;em&gt;plausible&lt;/em&gt; text, not &lt;em&gt;verified&lt;/em&gt; text, an LLM can invent a quote, a function, a date — with total confidence. It’s not lying: it’s simply the most probable word.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Frozen knowledge.&lt;/strong&gt; It only knows what it saw during training (its &lt;em&gt;cutoff date&lt;/em&gt;). Without a tool to fetch fresh information, it’s unaware of anything that happened since.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;No real fact base.&lt;/strong&gt; By default it has “neither Google nor a calculator” — just its intuitions. Hence the value of &lt;strong&gt;giving&lt;/strong&gt; it the context (see &lt;a href=&quot;/glossary/#rag&quot;&gt;RAG&lt;/a&gt;) rather than relying on its memory.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;what-this-changes-for-you-concretely&quot;&gt;What this changes for you, concretely&lt;/h2&gt;

&lt;p&gt;Seeing the LLM as a &lt;strong&gt;probabilistic text engine&lt;/strong&gt; — not an oracle — instantly changes how you use it:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Be specific.&lt;/strong&gt; The model completes what you give it: a clear, contextualized &lt;a href=&quot;/glossary/#prompt&quot;&gt;prompt&lt;/a&gt; produces a far better continuation.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Give it the facts.&lt;/strong&gt; For a reliable answer about &lt;em&gt;your&lt;/em&gt; data, provide it in the context rather than hoping it “knows” it.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Verify what matters.&lt;/strong&gt; For a fact, a number, a critical piece of code: check it. Plausible isn’t the same as true.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Pick the right dial.&lt;/strong&gt; Need creativity or rigor? That’s what &lt;a href=&quot;/glossary/#temperature&quot;&gt;temperature&lt;/a&gt; is for.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;the-llm-in-5-ideas&quot;&gt;The LLM in 5 ideas&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Idea&lt;/th&gt;
      &lt;th&gt;In plain words&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;What it does&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Guesses the next token, over and over — a giant autocomplete&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;How it learned&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;By tuning billions of parameters on enormous texts (training)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;What it keeps&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;A statistical intuition, not an exact fact base&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Why it errs&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;It produces plausible, not verified → hallucinations&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;How to use it well&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Be specific, provide context, verify what matters&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;in-a-nutshell&quot;&gt;In a nutshell&lt;/h2&gt;

&lt;p&gt;An LLM is neither a brain, nor an encyclopedia, nor magic: it’s an &lt;strong&gt;extraordinarily gifted autocomplete&lt;/strong&gt;, trained to guess how a text continues. All the genius — and all the traps — comes from that.&lt;/p&gt;

&lt;p&gt;Keep that image in mind, and AI stops being an intimidating black box. Because, deep down… it’s not rocket science.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;A word you don’t know? The &lt;a href=&quot;/glossary/&quot;&gt;glossary&lt;/a&gt; defines every AI term, in plain language.&lt;/em&gt;&lt;/p&gt;
</description>
                <pubDate>Wed, 08 Jul 2026 12:00:00 +0200</pubDate>
                <link>https://senseof.ai/2026/07/08/what-is-an-llm/</link>
                <guid isPermaLink="true">https://senseof.ai/2026/07/08/what-is-an-llm/</guid>
                
                <category>AI</category>
                
                <category>LLM</category>
                
                <category>fundamentals</category>
                
                
            </item>
        
            <item>
                <title>Tokens envoyés, tokens sortis, tokens en cache… c&apos;est pas sorcier !</title>
                <description>&lt;p&gt;Quand on commence à utiliser des modèles d’IA — que ce soit via une API, GitHub Copilot ou un chatbot — un mot revient partout : &lt;strong&gt;token&lt;/strong&gt;. Sur votre facture, dans les limites (« context window »), dans les messages d’erreur (« trop de tokens »). Et on distingue même les &lt;strong&gt;tokens envoyés&lt;/strong&gt;, les &lt;strong&gt;tokens de sortie&lt;/strong&gt; et les &lt;strong&gt;tokens en cache&lt;/strong&gt;, chacun à un prix différent.&lt;/p&gt;

&lt;p&gt;Ça a l’air ésotérique. En réalité, une fois qu’on a la bonne image en tête, tout devient limpide. Allez, on démonte le compteur. Vous allez voir : c’est pas sorcier.&lt;/p&gt;

&lt;!--more--&gt;

&lt;h2 id=&quot;dabord--cest-quoi-un-token-&quot;&gt;D’abord : c’est quoi un token ?&lt;/h2&gt;

&lt;p&gt;Un modèle de langage ne lit pas des mots, et pas non plus des lettres. Il lit des &lt;strong&gt;jetons&lt;/strong&gt; — des &lt;em&gt;tokens&lt;/em&gt; : des petits morceaux de texte. Avant de traiter votre phrase, le modèle la passe dans un &lt;strong&gt;hachoir&lt;/strong&gt; (le &lt;em&gt;tokenizer&lt;/em&gt;) qui la découpe en jetons.&lt;/p&gt;

&lt;p&gt;Un token, ce n’est &lt;strong&gt;ni un mot, ni une lettre&lt;/strong&gt;. C’est un morceau, souvent une syllabe ou un bout de mot fréquent. Règle de pouce en anglais : &lt;strong&gt;1 token ≈ 4 caractères ≈ ¾ de mot&lt;/strong&gt;. En français, comptez un peu plus (accents et mots longs se découpent davantage).&lt;/p&gt;

&lt;p&gt;Le plus parlant, c’est de le voir. Voici de vrais découpages, avec le tokenizer des modèles GPT récents :&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Texte&lt;/th&gt;
      &lt;th&gt;Nombre de tokens&lt;/th&gt;
      &lt;th&gt;Découpage&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Hello world&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;2&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Hello&lt;/code&gt; · &lt;code class=&quot;highlighter-rouge&quot;&gt;world&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Bonjour le monde&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;3&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Bonjour&lt;/code&gt; · &lt;code class=&quot;highlighter-rouge&quot;&gt;le&lt;/code&gt; · &lt;code class=&quot;highlighter-rouge&quot;&gt;monde&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;développeurs&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;4&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;dé&lt;/code&gt; · &lt;code class=&quot;highlighter-rouge&quot;&gt;velop&lt;/code&gt; · &lt;code class=&quot;highlighter-rouge&quot;&gt;pe&lt;/code&gt; · &lt;code class=&quot;highlighter-rouge&quot;&gt;urs&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;anticonstitutionnellement&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;5&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;ant&lt;/code&gt; · &lt;code class=&quot;highlighter-rouge&quot;&gt;icon&lt;/code&gt; · &lt;code class=&quot;highlighter-rouge&quot;&gt;stitution&lt;/code&gt; · &lt;code class=&quot;highlighter-rouge&quot;&gt;nel&lt;/code&gt; · &lt;code class=&quot;highlighter-rouge&quot;&gt;lement&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;🎉&lt;/code&gt; (emoji)&lt;/td&gt;
      &lt;td&gt;2 à 3&lt;/td&gt;
      &lt;td&gt;selon le modèle&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;`    def hello():` (indenté)&lt;/td&gt;
      &lt;td&gt;4&lt;/td&gt;
      &lt;td&gt;l’indentation compte aussi&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Trois enseignements sautent aux yeux :&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Un mot courant comme &lt;code class=&quot;highlighter-rouge&quot;&gt;world&lt;/code&gt; = &lt;strong&gt;1 seul token&lt;/strong&gt;, mais un mot rare ou long comme &lt;code class=&quot;highlighter-rouge&quot;&gt;développeurs&lt;/code&gt; en vaut &lt;strong&gt;4&lt;/strong&gt; à lui tout seul.&lt;/li&gt;
  &lt;li&gt;Le &lt;strong&gt;français coûte plus cher&lt;/strong&gt; que l’anglais : les accents et les mots longs se fragmentent davantage.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Tout&lt;/strong&gt; compte : les espaces, l’indentation du code, les emojis. Même un simple 🎉 pèse plusieurs tokens.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Le mieux, c’est d’essayer vous-même : collez n’importe quel texte sur &lt;a href=&quot;https://tokenizer.openai.com&quot;&gt;tokenizer.openai.com&lt;/a&gt; et regardez-le se découper en direct. C’est le meilleur moyen de développer une intuition.&lt;/p&gt;

&lt;h2 id=&quot;les-trois-compteurs--envoyés-sortis-en-cache&quot;&gt;Les trois compteurs : envoyés, sortis, en cache&lt;/h2&gt;

&lt;p&gt;Maintenant que le hachoir tourne, il y a &lt;strong&gt;trois compteurs&lt;/strong&gt; distincts — et c’est là que se joue votre facture.&lt;/p&gt;

&lt;h3 id=&quot;1-les-tokens-envoyés-entrée--input&quot;&gt;1. Les tokens envoyés (entrée / &lt;em&gt;input&lt;/em&gt;)&lt;/h3&gt;

&lt;p&gt;Ce sont &lt;strong&gt;tous les tokens que vous envoyez au modèle&lt;/strong&gt; à chaque requête. Et attention, ce n’est pas seulement votre question du moment. C’est :&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;l’&lt;strong&gt;instruction système&lt;/strong&gt; (le rôle, les consignes) ;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;tout l’historique&lt;/strong&gt; de la conversation jusqu’ici ;&lt;/li&gt;
  &lt;li&gt;votre &lt;strong&gt;message&lt;/strong&gt; actuel ;&lt;/li&gt;
  &lt;li&gt;les &lt;strong&gt;définitions des outils&lt;/strong&gt; disponibles (par exemple les schémas des serveurs MCP) ;&lt;/li&gt;
  &lt;li&gt;les &lt;strong&gt;documents&lt;/strong&gt; ou le contexte que vous joignez.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Point crucial : vous les payez &lt;strong&gt;à chaque tour&lt;/strong&gt;. Plus la conversation grandit, plus l’entrée grossit — et plus chaque nouvelle requête coûte cher. C’est exactement pour ça que, dans mon article sur &lt;a href=&quot;/2026/07/02/github-copilot-skills-instructions-agents-mcp/&quot;&gt;la personnalisation de GitHub Copilot&lt;/a&gt;, je soulignais qu’un gros fichier d’instructions ou trop de serveurs MCP « pèsent » : tout ça, ce sont des tokens envoyés à chaque appel.&lt;/p&gt;

&lt;h3 id=&quot;2-les-tokens-de-sortie-sortie--output&quot;&gt;2. Les tokens de sortie (sortie / &lt;em&gt;output&lt;/em&gt;)&lt;/h3&gt;

&lt;p&gt;Ce sont les tokens que le &lt;strong&gt;modèle génère&lt;/strong&gt; en réponse. Et voici la surprise : &lt;strong&gt;ils sont généralement plus chers&lt;/strong&gt; — souvent &lt;strong&gt;3 à 5 fois&lt;/strong&gt; le prix d’un token d’entrée.&lt;/p&gt;

&lt;p&gt;Pourquoi ? Parce que produire un token demande au modèle un vrai effort de calcul (il « réfléchit » un jeton à la fois), là où lire l’entrée est comparativement rapide. C’est aussi la raison du paramètre &lt;code class=&quot;highlighter-rouge&quot;&gt;max_tokens&lt;/code&gt; : il plafonne la longueur de la réponse pour éviter les mauvaises surprises.&lt;/p&gt;

&lt;h3 id=&quot;3-les-tokens-en-cache-prompt-caching&quot;&gt;3. Les tokens en cache (&lt;em&gt;prompt caching&lt;/em&gt;)&lt;/h3&gt;

&lt;p&gt;Voici l’astuce qui change tout. Si vous renvoyez &lt;strong&gt;le même début de prompt&lt;/strong&gt; d’une requête à l’autre — un gros prompt système, un long document de référence — le fournisseur peut le &lt;strong&gt;garder en mémoire&lt;/strong&gt; (le mettre en cache) et le relire sans tout recalculer.&lt;/p&gt;

&lt;p&gt;Résultat : ces tokens-là sont facturés une &lt;strong&gt;fraction&lt;/strong&gt; du prix normal (jusqu’à &lt;strong&gt;~90 % moins cher&lt;/strong&gt;) et la réponse arrive &lt;strong&gt;bien plus vite&lt;/strong&gt; (jusqu’à ~80 % de latence en moins). Le modèle a « déjà mâché » ces jetons récemment, il ne repart pas de zéro.&lt;/p&gt;

&lt;p&gt;La règle d’or pour en profiter : &lt;strong&gt;mettez le contenu stable au début&lt;/strong&gt; (instructions, documents fixes) et le &lt;strong&gt;contenu variable à la fin&lt;/strong&gt; (la question de l’utilisateur). Selon le fournisseur, le cache est automatique ou à activer explicitement — mais le principe est le même partout.&lt;/p&gt;

&lt;h2 id=&quot;chaque-modèle-a-ses-particularités&quot;&gt;Chaque modèle a ses particularités&lt;/h2&gt;

&lt;p&gt;On parle des tokens comme d’une unité universelle. Ce n’est pas tout à fait vrai : &lt;strong&gt;chaque modèle a son propre hachoir et son propre bol.&lt;/strong&gt;&lt;/p&gt;

&lt;h3 id=&quot;son-propre-hachoir-le-tokenizer&quot;&gt;Son propre hachoir (le tokenizer)&lt;/h3&gt;

&lt;p&gt;Chaque famille de modèles découpe le texte à sa façon. Les modèles GPT d’OpenAI utilisent la bibliothèque &lt;strong&gt;tiktoken&lt;/strong&gt;, avec plusieurs encodages selon la génération (&lt;code class=&quot;highlighter-rouge&quot;&gt;cl100k_base&lt;/code&gt; pour GPT-4, &lt;code class=&quot;highlighter-rouge&quot;&gt;o200k_base&lt;/code&gt; pour les modèles plus récents). Claude, Gemini ou Llama ont chacun le &lt;strong&gt;leur&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Conséquence très concrète : &lt;strong&gt;le même texte ne fait pas le même nombre de tokens d’un modèle à l’autre.&lt;/strong&gt; Notre emoji 🎉 vaut 2 tokens avec un encodage OpenAI récent, mais 3 avec l’ancien. Donc « ça fait 500 tokens » n’a de sens &lt;strong&gt;que pour un modèle donné&lt;/strong&gt;. Pour un compte exact et une estimation de coût fiable, utilisez toujours le tokenizer &lt;strong&gt;du fournisseur que vous visez&lt;/strong&gt; — et pour visualiser côté OpenAI, &lt;a href=&quot;https://tokenizer.openai.com&quot;&gt;tokenizer.openai.com&lt;/a&gt; reste l’outil le plus parlant.&lt;/p&gt;

&lt;h3 id=&quot;la-taille-de-son-bol-le-context-window&quot;&gt;La taille de son bol (le &lt;em&gt;context window&lt;/em&gt;)&lt;/h3&gt;

&lt;p&gt;Le &lt;strong&gt;context window&lt;/strong&gt;, c’est la &lt;strong&gt;mémoire de travail maximale&lt;/strong&gt; du modèle : le nombre total de tokens qu’il peut prendre en compte d’un coup — &lt;strong&gt;entrée et sortie réunies&lt;/strong&gt;. C’est la taille du bol dans lequel on verse les jetons.&lt;/p&gt;

&lt;p&gt;Cette taille varie énormément d’un modèle à l’autre : de l’ordre de &lt;strong&gt;128 000&lt;/strong&gt; tokens pour certains, jusqu’à &lt;strong&gt;un million et plus&lt;/strong&gt; pour d’autres (et ça évolue vite). Quand vous dépassez ce plafond, le modèle ne peut pas « tout garder en tête » : il faut &lt;strong&gt;tronquer ou résumer&lt;/strong&gt; le contexte. C’est précisément ce qui se passe quand une très longue conversation ou un très gros fichier finit par « saturer ».&lt;/p&gt;

&lt;p&gt;Un grand bol, c’est pratique, mais rappelez-vous les trois compteurs : plus vous remplissez le contexte, plus vous payez de &lt;strong&gt;tokens envoyés à chaque tour&lt;/strong&gt;. La bonne taille de contexte, c’est la plus petite qui fait le travail.&lt;/p&gt;

&lt;h2 id=&quot;le-tableau-récap&quot;&gt;Le tableau récap&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Type de token&lt;/th&gt;
      &lt;th&gt;C’est quoi&lt;/th&gt;
      &lt;th&gt;Coût relatif&lt;/th&gt;
      &lt;th&gt;Comment l’alléger&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Tokens envoyés&lt;/strong&gt; (entrée)&lt;/td&gt;
      &lt;td&gt;Tout ce que vous envoyez : système, historique, message, outils, documents&lt;/td&gt;
      &lt;td&gt;💶 normal — payé à &lt;strong&gt;chaque&lt;/strong&gt; tour&lt;/td&gt;
      &lt;td&gt;Contexte court, historique élagué, n’activez que les outils utiles&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Tokens de sortie&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Ce que le modèle rédige en réponse&lt;/td&gt;
      &lt;td&gt;💶💶💶 le plus cher (souvent 3–5×)&lt;/td&gt;
      &lt;td&gt;Demandez des réponses concises, bornez &lt;code class=&quot;highlighter-rouge&quot;&gt;max_tokens&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Tokens en cache&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Le préfixe répété, déjà « mâché » récemment&lt;/td&gt;
      &lt;td&gt;💶 une fraction (jusqu’à ~90 % de remise)&lt;/td&gt;
      &lt;td&gt;Mettez le contenu &lt;strong&gt;stable en tête&lt;/strong&gt;, le variable en fin&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Et pour les particularités des modèles :&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Notion&lt;/th&gt;
      &lt;th&gt;Ce qu’il faut retenir&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Tokenizer&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Chaque modèle découpe différemment → un même texte = un nombre de tokens différent. Comptez avec le tokenizer &lt;strong&gt;du bon fournisseur&lt;/strong&gt;.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Context window&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;La mémoire de travail max (entrée + sortie). De ~128k à 1M+ selon les modèles. La dépasser force à tronquer/résumer.&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;quelques-réflexes-pour-alléger-la-facture&quot;&gt;Quelques réflexes pour alléger la facture&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Mettez le stable au début.&lt;/strong&gt; Instructions et documents fixes en tête → le cache fait le reste.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Soyez concis en sortie.&lt;/strong&gt; C’est le token le plus cher : demandez des réponses courtes quand vous le pouvez.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Élaguez le contexte.&lt;/strong&gt; L’historique et les gros documents sont renvoyés à &lt;em&gt;chaque&lt;/em&gt; tour. Ne gardez que l’utile.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Coupez les outils inutiles.&lt;/strong&gt; Les schémas d’outils / serveurs MCP inactifs occupent le contexte pour rien.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Attention au français.&lt;/strong&gt; Il est plus « verbeux » en tokens que l’anglais — utile à savoir pour estimer un coût.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Choisissez la bonne taille de contexte.&lt;/strong&gt; Un modèle à 1M de tokens est séduisant, mais un bol plus petit et mieux rempli coûte souvent moins cher.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;en-résumé&quot;&gt;En résumé&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Le modèle lit et écrit en &lt;strong&gt;jetons&lt;/strong&gt; (tokens), pas en mots. Un hachoir (le &lt;em&gt;tokenizer&lt;/em&gt;) découpe tout d’abord.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Trois compteurs&lt;/strong&gt; : les tokens &lt;strong&gt;envoyés&lt;/strong&gt; (tout ce que vous fournissez, payé à chaque tour), les tokens de &lt;strong&gt;sortie&lt;/strong&gt; (ce qu’il génère, le plus cher), les tokens en &lt;strong&gt;cache&lt;/strong&gt; (le préfixe répété, à prix cassé).&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Chaque modèle a son hachoir&lt;/strong&gt; (des comptes différents pour le même texte) et &lt;strong&gt;son bol&lt;/strong&gt; (le context window).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La prochaine fois que vous verrez « tokens » sur une facture ou dans une limite, vous saurez exactement ce qui se cache derrière. Et ça, franchement… c’est pas sorcier.&lt;/p&gt;
</description>
                <pubDate>Sun, 05 Jul 2026 12:00:00 +0200</pubDate>
                <link>https://senseof.ai/fr/2026/07/05/tokens-llm-envoyes-sortie-cache/</link>
                <guid isPermaLink="true">https://senseof.ai/fr/2026/07/05/tokens-llm-envoyes-sortie-cache/</guid>
                
                <category>AI</category>
                
                <category>LLM</category>
                
                <category>tokens</category>
                
                <category>cost</category>
                
                
            </item>
        
            <item>
                <title>Input tokens, output tokens, cached tokens… it&apos;s not rocket science!</title>
                <description>&lt;p&gt;The moment you start using AI models — through an API, GitHub Copilot or a chatbot — one word is everywhere: &lt;strong&gt;token&lt;/strong&gt;. On your bill, in the limits (“context window”), in the error messages (“too many tokens”). And there’s even a distinction between &lt;strong&gt;input tokens&lt;/strong&gt;, &lt;strong&gt;output tokens&lt;/strong&gt; and &lt;strong&gt;cached tokens&lt;/strong&gt;, each at a different price.&lt;/p&gt;

&lt;p&gt;It sounds arcane. In reality, once you have the right mental image, it all becomes clear. So let’s take the meter apart. You’ll see: it’s not rocket science.&lt;/p&gt;

&lt;!--more--&gt;

&lt;h2 id=&quot;first-what-is-a-token&quot;&gt;First: what is a token?&lt;/h2&gt;

&lt;p&gt;A language model doesn’t read words, and it doesn’t read letters either. It reads &lt;strong&gt;tokens&lt;/strong&gt;: small chunks of text. Before processing your sentence, the model runs it through a &lt;strong&gt;shredder&lt;/strong&gt; (the &lt;em&gt;tokenizer&lt;/em&gt;) that cuts it into tokens.&lt;/p&gt;

&lt;p&gt;A token is &lt;strong&gt;neither a word nor a letter&lt;/strong&gt;. It’s a chunk — often a syllable or a common piece of a word. Rule of thumb in English: &lt;strong&gt;1 token ≈ 4 characters ≈ ¾ of a word&lt;/strong&gt;. In other languages (French, for instance), expect a bit more (accents and long words split further).&lt;/p&gt;

&lt;p&gt;The clearest way to get it is to see it. Here are real splits, using the tokenizer of the recent GPT models:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Text&lt;/th&gt;
      &lt;th&gt;Number of tokens&lt;/th&gt;
      &lt;th&gt;Split&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Hello world&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;2&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Hello&lt;/code&gt; · &lt;code class=&quot;highlighter-rouge&quot;&gt;world&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Bonjour le monde&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;3&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Bonjour&lt;/code&gt; · &lt;code class=&quot;highlighter-rouge&quot;&gt;le&lt;/code&gt; · &lt;code class=&quot;highlighter-rouge&quot;&gt;monde&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;développeurs&lt;/code&gt; (French)&lt;/td&gt;
      &lt;td&gt;4&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;dé&lt;/code&gt; · &lt;code class=&quot;highlighter-rouge&quot;&gt;velop&lt;/code&gt; · &lt;code class=&quot;highlighter-rouge&quot;&gt;pe&lt;/code&gt; · &lt;code class=&quot;highlighter-rouge&quot;&gt;urs&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;anticonstitutionnellement&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;5&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;ant&lt;/code&gt; · &lt;code class=&quot;highlighter-rouge&quot;&gt;icon&lt;/code&gt; · &lt;code class=&quot;highlighter-rouge&quot;&gt;stitution&lt;/code&gt; · &lt;code class=&quot;highlighter-rouge&quot;&gt;nel&lt;/code&gt; · &lt;code class=&quot;highlighter-rouge&quot;&gt;lement&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;🎉&lt;/code&gt; (emoji)&lt;/td&gt;
      &lt;td&gt;2 to 3&lt;/td&gt;
      &lt;td&gt;depending on the model&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;`    def hello():` (indented)&lt;/td&gt;
      &lt;td&gt;4&lt;/td&gt;
      &lt;td&gt;indentation counts too&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Three lessons jump out:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;A common word like &lt;code class=&quot;highlighter-rouge&quot;&gt;world&lt;/code&gt; = &lt;strong&gt;1 single token&lt;/strong&gt;, but a rare or long word like &lt;code class=&quot;highlighter-rouge&quot;&gt;développeurs&lt;/code&gt; is worth &lt;strong&gt;4&lt;/strong&gt; all by itself.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Non-English text costs more&lt;/strong&gt; than English: accents and long words fragment more.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Everything&lt;/strong&gt; counts: spaces, code indentation, emojis. Even a plain 🎉 weighs several tokens.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The best thing is to try it yourself: paste any text into &lt;a href=&quot;https://tokenizer.openai.com&quot;&gt;tokenizer.openai.com&lt;/a&gt; and watch it split in real time. It’s the best way to build an intuition.&lt;/p&gt;

&lt;h2 id=&quot;the-three-meters-input-output-cached&quot;&gt;The three meters: input, output, cached&lt;/h2&gt;

&lt;p&gt;Now that the shredder is running, there are &lt;strong&gt;three separate meters&lt;/strong&gt; — and that’s where your bill is decided.&lt;/p&gt;

&lt;h3 id=&quot;1-input-tokens&quot;&gt;1. Input tokens&lt;/h3&gt;

&lt;p&gt;These are &lt;strong&gt;all the tokens you send to the model&lt;/strong&gt; on each request. And beware, it’s not just your current question. It’s:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;the &lt;strong&gt;system instruction&lt;/strong&gt; (the role, the guidelines);&lt;/li&gt;
  &lt;li&gt;the &lt;strong&gt;entire history&lt;/strong&gt; of the conversation so far;&lt;/li&gt;
  &lt;li&gt;your &lt;strong&gt;current message&lt;/strong&gt;;&lt;/li&gt;
  &lt;li&gt;the &lt;strong&gt;tool definitions&lt;/strong&gt; available (for example the schemas of MCP servers);&lt;/li&gt;
  &lt;li&gt;the &lt;strong&gt;documents&lt;/strong&gt; or context you attach.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Crucial point: you pay for them &lt;strong&gt;on every turn&lt;/strong&gt;. The bigger the conversation gets, the bigger the input grows — and the more each new request costs. That’s exactly why, in my article on &lt;a href=&quot;/2026/07/02/github-copilot-skills-instructions-agents-mcp/&quot;&gt;customizing GitHub Copilot&lt;/a&gt;, I stressed that a big instructions file or too many MCP servers “weigh”: all of that is input tokens, sent on every single call.&lt;/p&gt;

&lt;h3 id=&quot;2-output-tokens&quot;&gt;2. Output tokens&lt;/h3&gt;

&lt;p&gt;These are the tokens the &lt;strong&gt;model generates&lt;/strong&gt; in response. And here’s the surprise: &lt;strong&gt;they’re usually more expensive&lt;/strong&gt; — often &lt;strong&gt;3 to 5 times&lt;/strong&gt; the price of an input token.&lt;/p&gt;

&lt;p&gt;Why? Because producing a token takes the model real compute (it “thinks” one token at a time), whereas reading the input is comparatively fast. It’s also the reason for the &lt;code class=&quot;highlighter-rouge&quot;&gt;max_tokens&lt;/code&gt; parameter: it caps the length of the answer to avoid nasty surprises.&lt;/p&gt;

&lt;h3 id=&quot;3-cached-tokens-prompt-caching&quot;&gt;3. Cached tokens (&lt;em&gt;prompt caching&lt;/em&gt;)&lt;/h3&gt;

&lt;p&gt;Here’s the trick that changes everything. If you resend &lt;strong&gt;the same prompt prefix&lt;/strong&gt; from one request to the next — a big system prompt, a long reference document — the provider can &lt;strong&gt;keep it in memory&lt;/strong&gt; (cache it) and reread it without recomputing everything.&lt;/p&gt;

&lt;p&gt;The result: those tokens are billed at a &lt;strong&gt;fraction&lt;/strong&gt; of the normal price (up to &lt;strong&gt;~90% cheaper&lt;/strong&gt;) and the answer arrives &lt;strong&gt;much faster&lt;/strong&gt; (up to ~80% less latency). The model has “already chewed” those tokens recently, so it doesn’t start from scratch.&lt;/p&gt;

&lt;p&gt;The golden rule to benefit from it: &lt;strong&gt;put the stable content at the beginning&lt;/strong&gt; (instructions, fixed documents) and the &lt;strong&gt;variable content at the end&lt;/strong&gt; (the user’s question). Depending on the provider, caching is automatic or has to be enabled explicitly — but the principle is the same everywhere.&lt;/p&gt;

&lt;h2 id=&quot;every-model-has-its-quirks&quot;&gt;Every model has its quirks&lt;/h2&gt;

&lt;p&gt;We talk about tokens as if they were a universal unit. That’s not quite true: &lt;strong&gt;every model has its own shredder and its own bowl.&lt;/strong&gt;&lt;/p&gt;

&lt;h3 id=&quot;its-own-shredder-the-tokenizer&quot;&gt;Its own shredder (the tokenizer)&lt;/h3&gt;

&lt;p&gt;Each model family cuts text its own way. OpenAI’s GPT models use the &lt;strong&gt;tiktoken&lt;/strong&gt; library, with several encodings depending on the generation (&lt;code class=&quot;highlighter-rouge&quot;&gt;cl100k_base&lt;/code&gt; for GPT-4, &lt;code class=&quot;highlighter-rouge&quot;&gt;o200k_base&lt;/code&gt; for the more recent models). Claude, Gemini and Llama each have &lt;strong&gt;their own&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Very concrete consequence: &lt;strong&gt;the same text is not the same number of tokens from one model to another.&lt;/strong&gt; Our 🎉 emoji is 2 tokens with a recent OpenAI encoding, but 3 with the older one. So “that’s 500 tokens” only means something &lt;strong&gt;for a given model&lt;/strong&gt;. For an exact count and a reliable cost estimate, always use the tokenizer &lt;strong&gt;of the provider you’re targeting&lt;/strong&gt; — and to visualize it on the OpenAI side, &lt;a href=&quot;https://tokenizer.openai.com&quot;&gt;tokenizer.openai.com&lt;/a&gt; remains the most telling tool.&lt;/p&gt;

&lt;h3 id=&quot;the-size-of-its-bowl-the-context-window&quot;&gt;The size of its bowl (the &lt;em&gt;context window&lt;/em&gt;)&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;context window&lt;/strong&gt; is the model’s &lt;strong&gt;maximum working memory&lt;/strong&gt;: the total number of tokens it can take into account at once — &lt;strong&gt;input and output combined&lt;/strong&gt;. It’s the size of the bowl you pour the tokens into.&lt;/p&gt;

&lt;p&gt;That size varies enormously from one model to another: on the order of &lt;strong&gt;128,000&lt;/strong&gt; tokens for some, up to &lt;strong&gt;a million and beyond&lt;/strong&gt; for others (and it’s evolving fast). When you exceed that ceiling, the model can’t “keep it all in mind”: you have to &lt;strong&gt;truncate or summarize&lt;/strong&gt; the context. That’s precisely what happens when a very long conversation or a very large file eventually “saturates”.&lt;/p&gt;

&lt;p&gt;A big bowl is handy, but remember the three meters: the more you fill the context, the more &lt;strong&gt;input tokens you pay on every turn&lt;/strong&gt;. The right context size is the smallest one that gets the job done.&lt;/p&gt;

&lt;h2 id=&quot;the-recap-table&quot;&gt;The recap table&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Token type&lt;/th&gt;
      &lt;th&gt;What it is&lt;/th&gt;
      &lt;th&gt;Relative cost&lt;/th&gt;
      &lt;th&gt;How to trim it&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Input tokens&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Everything you send: system, history, message, tools, documents&lt;/td&gt;
      &lt;td&gt;💶 normal — paid on &lt;strong&gt;every&lt;/strong&gt; turn&lt;/td&gt;
      &lt;td&gt;Short context, pruned history, only enable useful tools&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Output tokens&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;What the model writes back&lt;/td&gt;
      &lt;td&gt;💶💶💶 the most expensive (often 3–5×)&lt;/td&gt;
      &lt;td&gt;Ask for concise answers, cap &lt;code class=&quot;highlighter-rouge&quot;&gt;max_tokens&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Cached tokens&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;The repeated prefix, “chewed” recently&lt;/td&gt;
      &lt;td&gt;💶 a fraction (up to ~90% off)&lt;/td&gt;
      &lt;td&gt;Put the &lt;strong&gt;stable content first&lt;/strong&gt;, variable content last&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;And for the per-model quirks:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Concept&lt;/th&gt;
      &lt;th&gt;What to remember&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Tokenizer&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Every model splits differently → the same text = a different token count. Count with the &lt;strong&gt;right provider’s&lt;/strong&gt; tokenizer.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Context window&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;The max working memory (input + output). From ~128k to 1M+ depending on the model. Exceeding it forces truncation/summarization.&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;a-few-reflexes-to-trim-the-bill&quot;&gt;A few reflexes to trim the bill&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Put the stable stuff first.&lt;/strong&gt; Instructions and fixed documents up front → the cache does the rest.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Be concise in output.&lt;/strong&gt; It’s the priciest token: ask for short answers when you can.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Prune the context.&lt;/strong&gt; History and large documents are resent on &lt;em&gt;every&lt;/em&gt; turn. Keep only what’s useful.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Cut the useless tools.&lt;/strong&gt; Inactive tool/MCP server schemas take up context for nothing.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Mind non-English text.&lt;/strong&gt; It’s more “verbose” in tokens than English — handy to know when estimating a cost.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Pick the right context size.&lt;/strong&gt; A 1M-token model is tempting, but a smaller, better-filled bowl often costs less.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;in-a-nutshell&quot;&gt;In a nutshell&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;The model reads and writes in &lt;strong&gt;tokens&lt;/strong&gt;, not words. A shredder (the &lt;em&gt;tokenizer&lt;/em&gt;) cuts everything up first.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Three meters&lt;/strong&gt;: &lt;strong&gt;input&lt;/strong&gt; tokens (everything you provide, paid on every turn), &lt;strong&gt;output&lt;/strong&gt; tokens (what it generates, the most expensive), &lt;strong&gt;cached&lt;/strong&gt; tokens (the repeated prefix, at a slashed price).&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Every model has its own shredder&lt;/strong&gt; (different counts for the same text) and &lt;strong&gt;its own bowl&lt;/strong&gt; (the context window).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Next time you see “tokens” on a bill or in a limit, you’ll know exactly what’s behind it. And honestly… that’s not rocket science.&lt;/p&gt;
</description>
                <pubDate>Sun, 05 Jul 2026 12:00:00 +0200</pubDate>
                <link>https://senseof.ai/2026/07/05/llm-tokens-input-output-cached/</link>
                <guid isPermaLink="true">https://senseof.ai/2026/07/05/llm-tokens-input-output-cached/</guid>
                
                <category>AI</category>
                
                <category>LLM</category>
                
                <category>tokens</category>
                
                <category>cost</category>
                
                
            </item>
        
            <item>
                <title>GitHub Copilot : Skills, Instructions, Agents, MCP… c&apos;est pas sorcier !</title>
                <description>&lt;p&gt;GitHub Copilot n’est plus le petit assistant qui complétait vos lignes de code. C’est devenu un véritable agent, capable de lire votre projet, lancer des commandes, appeler des outils externes et suivre vos règles. Le problème ? On peut désormais le personnaliser de &lt;strong&gt;cinq façons différentes&lt;/strong&gt; — Instructions, Prompts, Skills, Agents, MCP — et tout le monde s’y perd.&lt;/p&gt;

&lt;p&gt;Alors on va démonter la mécanique, pièce par pièce. Et pour chacune, on répondra à la question qui fâche : &lt;strong&gt;à quel moment est-elle chargée, et qu’est-ce qui entre vraiment dans le contexte du modèle ?&lt;/strong&gt; Parce que c’est ça, le vrai secret. Et vous allez voir : c’est pas sorcier.&lt;/p&gt;

&lt;!--more--&gt;

&lt;h2 id=&quot;le-fil-rouge--imaginez-un-nouvel-assistant-surdoué&quot;&gt;Le fil rouge : imaginez un nouvel assistant surdoué&lt;/h2&gt;

&lt;p&gt;Pour comprendre les cinq mécanismes, une seule image suffit : &lt;strong&gt;Copilot, c’est un nouvel employé brillant mais amnésique.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Il code très bien, il apprend vite… mais à chaque matin il a tout oublié : vos conventions, vos outils, la façon dont vous aimez travailler. Votre job, c’est de l’équiper pour qu’il soit efficace &lt;strong&gt;sans que vous ayez à tout ré-expliquer à chaque fois&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Chaque fonctionnalité de personnalisation répond à un moment de cet accueil :&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;le &lt;strong&gt;livret d’accueil&lt;/strong&gt; (Custom Instructions, et son cousin universel &lt;code class=&quot;highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt;),&lt;/li&gt;
  &lt;li&gt;les &lt;strong&gt;mémos prêts à l’emploi&lt;/strong&gt; (Prompts),&lt;/li&gt;
  &lt;li&gt;les &lt;strong&gt;fiches savoir-faire&lt;/strong&gt; rangées dans un classeur (Skills),&lt;/li&gt;
  &lt;li&gt;les &lt;strong&gt;casquettes de spécialiste&lt;/strong&gt; (Agents),&lt;/li&gt;
  &lt;li&gt;et les &lt;strong&gt;badges d’accès&lt;/strong&gt; vers vos outils maison (MCP).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Et pour chacune, on ajoutera un petit encadré ⚙️ qui dit &lt;strong&gt;quand elle est chargée&lt;/strong&gt; et &lt;strong&gt;ce que le modèle voit réellement&lt;/strong&gt;. Reprenons dans l’ordre.&lt;/p&gt;

&lt;h2 id=&quot;avant-de-démonter--le-frontmatter-létiquette-sur-la-fiche&quot;&gt;Avant de démonter : le frontmatter, l’étiquette sur la fiche&lt;/h2&gt;

&lt;p&gt;Un dernier outil avant d’ouvrir le capot, parce qu’il revient dans presque tous les exemples qui suivent : le &lt;strong&gt;frontmatter&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;L’analogie :&lt;/strong&gt; c’est l’&lt;strong&gt;étiquette collée sur la fiche&lt;/strong&gt;. Elle ne fait pas partie de la procédure elle-même — elle dit &lt;em&gt;à qui&lt;/em&gt; la fiche s’adresse, &lt;em&gt;quand&lt;/em&gt; la sortir et &lt;em&gt;comment&lt;/em&gt; la ranger. On peut trier tout le classeur rien qu’en lisant les étiquettes, sans jamais ouvrir les fiches.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Concrètement :&lt;/strong&gt; c’est un petit bloc &lt;strong&gt;YAML&lt;/strong&gt; placé tout en haut d’un fichier Markdown, délimité par deux lignes &lt;code class=&quot;highlighter-rouge&quot;&gt;---&lt;/code&gt; :&lt;/p&gt;

&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;deploiement-azure&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Déploie l&apos;app sur Azure App Service.&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;

Ici commence le contenu Markdown normal…
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Tout ce qui est entre les deux &lt;code class=&quot;highlighter-rouge&quot;&gt;---&lt;/code&gt;, ce sont des &lt;strong&gt;métadonnées&lt;/strong&gt; sous forme de paires clé-valeur. Tout ce qui vient après, c’est le contenu proprement dit.&lt;/p&gt;

&lt;p&gt;Et cette distinction n’est pas cosmétique — elle recoupe exactement notre question fétiche du « qui voit quoi » :&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;le &lt;strong&gt;frontmatter&lt;/strong&gt; est lu par le &lt;strong&gt;harness&lt;/strong&gt; (VS Code, Copilot CLI…) &lt;em&gt;avant&lt;/em&gt; tout appel au modèle : c’est lui qui décide si le fichier s’applique, quand le charger et avec quels réglages ;&lt;/li&gt;
  &lt;li&gt;le &lt;strong&gt;corps&lt;/strong&gt; est le texte destiné au &lt;strong&gt;modèle&lt;/strong&gt;, chargé au moment prévu par le mécanisme.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Chaque mécanisme utilise ses propres clés, et vous les reconnaîtrez au fil de l’article :&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Clé&lt;/th&gt;
      &lt;th&gt;Vue dans…&lt;/th&gt;
      &lt;th&gt;Elle sert à…&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;applyTo&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;*.instructions.md&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;Restreindre les règles aux fichiers qui matchent le motif glob&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;mode&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;*.prompt.md&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;Choisir le mode d’exécution du prompt (ex. &lt;code class=&quot;highlighter-rouge&quot;&gt;agent&lt;/code&gt;)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;name&lt;/code&gt; / &lt;code class=&quot;highlighter-rouge&quot;&gt;description&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;SKILL.md&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;*.agent.md&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;Identifier la fiche — c’est la partie &lt;strong&gt;toujours visible&lt;/strong&gt; du skill&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;tools&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;*.agent.md&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;Restreindre les outils exposés à l’agent&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;model&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;*.agent.md&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;Imposer le modèle à utiliser&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Deux cas particuliers à noter : &lt;code class=&quot;highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt; n’a &lt;strong&gt;pas de frontmatter du tout&lt;/strong&gt; (c’est justement sa promesse — du Markdown brut compris par tous les agents), et dans un &lt;code class=&quot;highlighter-rouge&quot;&gt;SKILL.md&lt;/code&gt;, le frontmatter joue un rôle de premier plan : &lt;code class=&quot;highlighter-rouge&quot;&gt;name&lt;/code&gt; et &lt;code class=&quot;highlighter-rouge&quot;&gt;description&lt;/code&gt; sont &lt;strong&gt;la seule chose chargée en permanence&lt;/strong&gt; — c’est l’étiquette que le modèle lit pour décider d’ouvrir la fiche.&lt;/p&gt;

&lt;p&gt;Voilà, vous avez la clé de lecture. Maintenant, démontons.&lt;/p&gt;

&lt;h2 id=&quot;1-custom-instructions--le-livret-daccueil&quot;&gt;1. Custom Instructions — le livret d’accueil&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;L’analogie :&lt;/strong&gt; c’est le règlement intérieur affiché au mur. Votre assistant le lit &lt;em&gt;à chaque tâche&lt;/em&gt;, sans qu’on lui demande. « Ici, on écrit en C#, on teste avec xUnit, et on répond en français. »&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Concrètement :&lt;/strong&gt; un fichier Markdown à la racine du dépôt qui donne à Copilot le contexte permanent du projet — la stack, les conventions, les préférences.&lt;/p&gt;

&lt;p&gt;Le fichier principal vit dans &lt;code class=&quot;highlighter-rouge&quot;&gt;.github/copilot-instructions.md&lt;/code&gt; :&lt;/p&gt;

&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;gh&quot;&gt;# Contexte du projet&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;
-&lt;/span&gt; API ASP.NET Core en C# (.NET 9).
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; Utilise des &lt;span class=&quot;sb&quot;&gt;`record`&lt;/span&gt; immuables pour les DTO.
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; Écris les tests avec xUnit et FluentAssertions.
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; Dans tes explications, réponds en français.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Besoin de règles &lt;strong&gt;ciblées&lt;/strong&gt; sur certains fichiers ? On ajoute des fichiers &lt;code class=&quot;highlighter-rouge&quot;&gt;*.instructions.md&lt;/code&gt; dans &lt;code class=&quot;highlighter-rouge&quot;&gt;.github/instructions/&lt;/code&gt;, avec un en-tête &lt;code class=&quot;highlighter-rouge&quot;&gt;applyTo&lt;/code&gt; qui utilise un motif glob :&lt;/p&gt;

&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;applyTo&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;**/*.test.ts&quot;&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; Utilise Vitest et Testing Library.
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; Un bloc &lt;span class=&quot;sb&quot;&gt;`describe`&lt;/span&gt; par composant.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Si le fichier correspond, ces règles s’ajoutent à celles de tout le projet.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;⚙️ &lt;strong&gt;Chargé quand :&lt;/strong&gt; à &lt;strong&gt;chaque&lt;/strong&gt; requête, automatiquement. Le fichier racine s’applique toujours ; un &lt;code class=&quot;highlighter-rouge&quot;&gt;*.instructions.md&lt;/code&gt; ne s’ajoute que si son motif &lt;code class=&quot;highlighter-rouge&quot;&gt;applyTo&lt;/code&gt; correspond aux fichiers en jeu.&lt;/p&gt;

  &lt;p&gt;&lt;strong&gt;Ce qui entre dans le contexte :&lt;/strong&gt; le &lt;strong&gt;texte intégral&lt;/strong&gt; du fichier, injecté en tête de contexte comme une consigne système. Il est présent à &lt;em&gt;chaque&lt;/em&gt; appel — d’où l’importance de le garder court et net.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Quand l’utiliser :&lt;/strong&gt; &lt;strong&gt;toujours, et en premier.&lt;/strong&gt; C’est le socle. Dès que vous vous surprenez à répéter « en C#, avec des records, en français… » à chaque conversation, c’est qu’il faut l’écrire une bonne fois ici.&lt;/p&gt;

&lt;h3 id=&quot;le-cousin-universel--agentsmd&quot;&gt;Le cousin universel : &lt;code class=&quot;highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;.github/copilot-instructions.md&lt;/code&gt; est propre à Copilot. Mais si vous jonglez entre plusieurs agents (Copilot, mais aussi Cursor, Codex, Jules…), il existe un fichier &lt;strong&gt;standard et neutre&lt;/strong&gt; : &lt;code class=&quot;highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt;, à la racine du dépôt.&lt;/p&gt;

&lt;p&gt;C’est un simple Markdown — un « README pour les agents » — où l’on met ce qui encombrerait le README humain : commandes de build, façon de lancer les tests, conventions maison, pièges à éviter. Pas d’en-tête, pas de syntaxe particulière : du Markdown, point.&lt;/p&gt;

&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;gh&quot;&gt;# AGENTS.md&lt;/span&gt;

&lt;span class=&quot;gu&quot;&gt;## Build &amp;amp; tests&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; Installer : &lt;span class=&quot;sb&quot;&gt;`dotnet restore`&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; Lancer les tests : &lt;span class=&quot;sb&quot;&gt;`dotnet test`&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; Ne jamais committer dans &lt;span class=&quot;sb&quot;&gt;`main`&lt;/span&gt; directement.

&lt;span class=&quot;gu&quot;&gt;## Conventions&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; C# / .NET 9, DTO en &lt;span class=&quot;sb&quot;&gt;`record`&lt;/span&gt; immuables.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Deux choses à retenir :&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;C’est un standard ouvert&lt;/strong&gt;, piloté par l’Agentic AI Foundation (sous la Linux Foundation) et adopté par OpenAI Codex, Cursor, Jules (Google), Amp, Factory… et lu par l’agent de codage GitHub Copilot.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Le plus proche gagne.&lt;/strong&gt; Vous pouvez poser un &lt;code class=&quot;highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt; à la racine &lt;em&gt;et&lt;/em&gt; des &lt;code class=&quot;highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt; dans des sous-dossiers : l’agent lit le plus proche des fichiers sur lesquels il travaille. Chaque sous-projet peut ainsi avoir ses propres consignes.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;⚙️ &lt;strong&gt;Chargé quand :&lt;/strong&gt; automatiquement, comme les Custom Instructions. Celui de la racine s’applique toujours ; un &lt;code class=&quot;highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt; de sous-dossier prend le relais quand l’agent travaille dans ce dossier.&lt;/p&gt;

  &lt;p&gt;&lt;strong&gt;Ce qui entre dans le contexte :&lt;/strong&gt; le texte du &lt;code class=&quot;highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt; le plus proche, injecté comme consigne. Bonus : l’agent de codage Copilot sait aussi lire &lt;code class=&quot;highlighter-rouge&quot;&gt;.github/copilot-instructions.md&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;*.instructions.md&lt;/code&gt;, ainsi que &lt;code class=&quot;highlighter-rouge&quot;&gt;CLAUDE.md&lt;/code&gt; et &lt;code class=&quot;highlighter-rouge&quot;&gt;GEMINI.md&lt;/code&gt; — vous n’êtes pas obligé de tout dupliquer.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Instructions ou &lt;code class=&quot;highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt; ?&lt;/strong&gt; Même idée (le « livret d’accueil »), deux portées : &lt;code class=&quot;highlighter-rouge&quot;&gt;copilot-instructions.md&lt;/code&gt; si vous êtes 100 % Copilot, &lt;code class=&quot;highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt; si vous voulez &lt;strong&gt;un seul fichier compris par tous les agents&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id=&quot;2-prompts--les-mémos-prêts-à-lemploi&quot;&gt;2. Prompts — les mémos prêts à l’emploi&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;L’analogie :&lt;/strong&gt; le post-it « Voici comment tu prépares une fiche de release » collé sur le bureau. Un raccourci pour une tâche que vous redemandez souvent, mot pour mot.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Concrètement :&lt;/strong&gt; un &lt;em&gt;prompt file&lt;/em&gt;, fichier &lt;code class=&quot;highlighter-rouge&quot;&gt;.prompt.md&lt;/code&gt; rangé dans &lt;code class=&quot;highlighter-rouge&quot;&gt;.github/prompts/&lt;/code&gt;, que vous déclenchez comme une commande avec un slash.&lt;/p&gt;

&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;mode&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;agent&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;
Prépare la description de la Pull Request à partir du diff courant :
un résumé en une phrase, la liste des changements, et les risques éventuels.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Enregistré sous &lt;code class=&quot;highlighter-rouge&quot;&gt;pr.prompt.md&lt;/code&gt;, il s’appelle en tapant simplement &lt;code class=&quot;highlighter-rouge&quot;&gt;/pr&lt;/code&gt; dans le chat. Fini le paragraphe d’instructions recopié à la main.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;⚙️ &lt;strong&gt;Chargé quand :&lt;/strong&gt; uniquement quand &lt;strong&gt;vous&lt;/strong&gt; tapez &lt;code class=&quot;highlighter-rouge&quot;&gt;/mon-prompt&lt;/code&gt;. Jamais tout seul.&lt;/p&gt;

  &lt;p&gt;&lt;strong&gt;Ce qui entre dans le contexte :&lt;/strong&gt; le corps du prompt est inséré à ce moment-là comme (partie de) votre message, avec les fichiers qu’il référence. Le reste du temps, il n’occupe &lt;strong&gt;aucune&lt;/strong&gt; place dans le contexte.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Le mot d’honnêteté :&lt;/strong&gt; vous avez peut-être entendu que les prompt files sont &lt;strong&gt;« moins nécessaires » aujourd’hui&lt;/strong&gt;. C’est vrai — et c’est assumé. Les &lt;strong&gt;Agents&lt;/strong&gt; (qui embarquent déjà un rôle et des consignes) et les &lt;strong&gt;Skills&lt;/strong&gt; (qui se déclenchent tout seuls) couvrent une bonne partie des besoins. Le prompt file reste néanmoins l’option la plus &lt;strong&gt;simple et rapide&lt;/strong&gt; pour transformer un paragraphe récurrent en une commande d’un mot. Un couteau qui coupe encore très bien, même s’il existe désormais des robots de cuisine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quand l’utiliser :&lt;/strong&gt; pour un raccourci &lt;strong&gt;simple et personnel&lt;/strong&gt;, sans script ni outil particulier. Si votre besoin devient un vrai savoir-faire multi-étapes, passez aux Skills.&lt;/p&gt;

&lt;h2 id=&quot;3-skills--les-fiches-savoir-faire-dans-le-classeur&quot;&gt;3. Skills — les fiches savoir-faire dans le classeur&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;L’analogie :&lt;/strong&gt; un classeur de fiches procédure. Votre assistant ne les lit pas toutes en permanence — il en lit juste le &lt;strong&gt;titre&lt;/strong&gt;, et quand une tâche correspond, il sort la bonne fiche et suit la procédure (qui peut même contenir des scripts et des exemples).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Concrètement :&lt;/strong&gt; une &lt;em&gt;Agent Skill&lt;/em&gt; est un &lt;strong&gt;dossier&lt;/strong&gt; contenant un fichier &lt;code class=&quot;highlighter-rouge&quot;&gt;SKILL.md&lt;/code&gt; (plus, éventuellement, des scripts, gabarits ou exemples).&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;.github/skills/
└── deploiement-azure/
    ├── SKILL.md
    ├── deploy.sh
    └── exemples/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Le &lt;code class=&quot;highlighter-rouge&quot;&gt;SKILL.md&lt;/code&gt; commence par un en-tête qui décrit &lt;em&gt;quand&lt;/em&gt; l’utiliser :&lt;/p&gt;

&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;deploiement-azure&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Déploie l&apos;app sur Azure App Service et vérifie le health check.&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;

&lt;span class=&quot;p&quot;&gt;1.&lt;/span&gt; Construire l&apos;image avec &lt;span class=&quot;sb&quot;&gt;`docker build ...`&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;2.&lt;/span&gt; Pousser vers le registre &lt;span class=&quot;sb&quot;&gt;`az acr ...`&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;3.&lt;/span&gt; Déployer avec &lt;span class=&quot;sb&quot;&gt;`az webapp up ...`&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;4.&lt;/span&gt; Vérifier &lt;span class=&quot;sb&quot;&gt;`https://.../health`&lt;/span&gt; avant de confirmer.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;⚙️ &lt;strong&gt;Chargé quand :&lt;/strong&gt; en &lt;strong&gt;divulgation progressive&lt;/strong&gt;, à l’initiative du modèle. Au départ, il ne « voit » que le &lt;code class=&quot;highlighter-rouge&quot;&gt;name&lt;/code&gt; et la &lt;code class=&quot;highlighter-rouge&quot;&gt;description&lt;/code&gt;. Il ne charge le corps du &lt;code class=&quot;highlighter-rouge&quot;&gt;SKILL.md&lt;/code&gt; que si la tâche correspond (ou si vous l’invoquez), et n’ouvre les scripts que s’il en a besoin.&lt;/p&gt;

  &lt;p&gt;&lt;strong&gt;Ce qui entre dans le contexte :&lt;/strong&gt; au repos, &lt;strong&gt;juste une ligne de description&lt;/strong&gt; par skill. Puis, à la demande, le corps de la fiche, puis les ressources. C’est exactement pour ça qu’on peut en avoir des dizaines sans saturer le contexte.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Autre avantage : les Skills suivent un &lt;strong&gt;standard ouvert&lt;/strong&gt;. La même fiche fonctionne dans Copilot sous VS Code, dans Copilot CLI et dans l’agent cloud — et même avec d’autres agents compatibles.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quand l’utiliser :&lt;/strong&gt; pour un &lt;strong&gt;savoir-faire réutilisable et multi-étapes&lt;/strong&gt;, surtout s’il embarque des scripts ou des ressources. « Comment on déploie », « comment on écrit un test d’intégration maison » : ce sont des skills.&lt;/p&gt;

&lt;h2 id=&quot;4-agents--les-casquettes-de-spécialiste&quot;&gt;4. Agents — les casquettes de spécialiste&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;L’analogie :&lt;/strong&gt; au lieu d’un assistant généraliste, vous convoquez &lt;strong&gt;le bon spécialiste&lt;/strong&gt; : le relecteur tatillon, l’architecte, le rédacteur de docs. Chacun a son caractère, ses outils autorisés et sa manière de travailler.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Concrètement :&lt;/strong&gt; un &lt;em&gt;custom agent&lt;/em&gt; est un fichier &lt;code class=&quot;highlighter-rouge&quot;&gt;*.agent.md&lt;/code&gt; (dans &lt;code class=&quot;highlighter-rouge&quot;&gt;.github/agents/&lt;/code&gt;) qui définit une &lt;strong&gt;persona&lt;/strong&gt; : son rôle, ses consignes, les outils qu’il a le droit d’utiliser, et même le &lt;strong&gt;modèle&lt;/strong&gt; à employer.&lt;/p&gt;

&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;relecteur&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Relecteur de code senior, exigeant sur la sécurité et les tests.&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;tools&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;search&apos;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;edit&apos;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;claude-sonnet-5&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;
Tu es un relecteur senior. Concentre-toi sur :
les bugs, les failles de sécurité, les cas limites et les tests manquants.
Sois direct, propose des correctifs concrets, ne reformule pas le code qui va bien.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;On bascule alors sur cet agent en un clic, plutôt que de ré-expliquer son rôle à chaque conversation. C’est aussi le principe de l’&lt;strong&gt;agent de codage&lt;/strong&gt; (le &lt;em&gt;coding agent&lt;/em&gt;) auquel vous pouvez carrément assigner une issue GitHub : il travaille en autonomie et ouvre une Pull Request.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;⚙️ &lt;strong&gt;Chargé quand :&lt;/strong&gt; quand vous &lt;strong&gt;activez&lt;/strong&gt; l’agent (sélection dans l’interface, &lt;code class=&quot;highlighter-rouge&quot;&gt;@mention&lt;/code&gt;, ou assignation d’une issue pour l’agent de codage).&lt;/p&gt;

  &lt;p&gt;&lt;strong&gt;Ce qui entre dans le contexte :&lt;/strong&gt; ses consignes deviennent la &lt;strong&gt;consigne système&lt;/strong&gt; active ; sa liste &lt;code class=&quot;highlighter-rouge&quot;&gt;tools&lt;/code&gt; &lt;strong&gt;restreint&lt;/strong&gt; les outils exposés par le harness ; son &lt;code class=&quot;highlighter-rouge&quot;&gt;model&lt;/code&gt; choisit le modèle. Un agent ne fait pas qu’ajouter du texte : il &lt;strong&gt;reconfigure la session&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Quand l’utiliser :&lt;/strong&gt; quand vous voulez un &lt;strong&gt;rôle spécialisé et récurrent&lt;/strong&gt;, avec ses propres outils et garde-fous. Si vous jonglez entre « casquette dev » et « casquette relecture », faites-en deux agents.&lt;/p&gt;

&lt;h2 id=&quot;5-mcp--les-badges-daccès-vers-le-monde-extérieur&quot;&gt;5. MCP — les badges d’accès vers le monde extérieur&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;L’analogie :&lt;/strong&gt; jusqu’ici, votre assistant ne connaît que votre code. MCP, ce sont les &lt;strong&gt;badges et les prises&lt;/strong&gt; qui le branchent sur le reste de votre écosystème : la base de données, Jira, votre monitoring, un navigateur, votre CRM…&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Concrètement :&lt;/strong&gt; le &lt;em&gt;Model Context Protocol&lt;/em&gt; est un &lt;strong&gt;standard ouvert&lt;/strong&gt; pour connecter un agent IA à des outils et des données externes. Vous déclarez les serveurs MCP dans un fichier &lt;code class=&quot;highlighter-rouge&quot;&gt;mcp.json&lt;/code&gt; (dans &lt;code class=&quot;highlighter-rouge&quot;&gt;.vscode/mcp.json&lt;/code&gt; pour un projet) :&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;servers&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;github&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;http&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;url&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://api.githubcopilot.com/mcp&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;playwright&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;command&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;npx&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;args&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;-y&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;@microsoft/mcp-server-playwright&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Une fois branché, Copilot peut lire vos issues GitHub, piloter un navigateur, interroger une base… selon les outils que le serveur expose.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;⚙️ &lt;strong&gt;Chargé quand :&lt;/strong&gt; dès qu’un serveur est &lt;strong&gt;activé&lt;/strong&gt;, le harness charge la &lt;strong&gt;description des outils&lt;/strong&gt; qu’il expose (nom, rôle, schéma d’entrée) — même si vous ne les appelez jamais. Les &lt;strong&gt;résultats&lt;/strong&gt;, eux, n’arrivent que lorsqu’un outil est réellement appelé.&lt;/p&gt;

  &lt;p&gt;&lt;strong&gt;Ce qui entre dans le contexte :&lt;/strong&gt; les &lt;strong&gt;définitions d’outils&lt;/strong&gt; (en permanence, tant que le serveur est actif) puis les &lt;strong&gt;résultats d’appels&lt;/strong&gt; (à la demande). Conséquence très concrète : trop de serveurs MCP = un contexte encombré rien que par les schémas. D’où l’intérêt de &lt;strong&gt;désactiver ceux qu’on n’utilise pas&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Attention au badge d’accès :&lt;/strong&gt; un serveur MCP, c’est du code tiers à qui vous donnez les clés. VS Code vous demande de &lt;strong&gt;confirmer votre confiance&lt;/strong&gt; avant de le démarrer, et permet de mettre les serveurs locaux dans un bac à sable (accès fichiers/réseau restreint). Ne branchez que ce que vous connaissez — j’en parlais déjà dans mon article sur &lt;a href=&quot;/2025/02/24/Securing-MCP-Servers-Automated-Whitelist-Scanner/&quot;&gt;la sécurisation des serveurs MCP&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quand l’utiliser :&lt;/strong&gt; dès que Copilot a besoin de &lt;strong&gt;données ou d’actions qui vivent en dehors de votre code&lt;/strong&gt;. Pour tout ce qui est purement « connaissances et conventions du projet », les Instructions et les Skills suffisent.&lt;/p&gt;

&lt;h2 id=&quot;le-tableau-récap--quand-utiliser-quoi--et-quand-cest-chargé-&quot;&gt;Le tableau récap : quand utiliser quoi — et quand c’est chargé ?&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Élément&lt;/th&gt;
      &lt;th&gt;Ça sert à…&lt;/th&gt;
      &lt;th&gt;Où ça vit&lt;/th&gt;
      &lt;th&gt;Chargé dans le contexte&lt;/th&gt;
      &lt;th&gt;Quand l’utiliser&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Custom Instructions&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Contexte et conventions permanents du projet&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;.github/copilot-instructions.md&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;*.instructions.md&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Toujours&lt;/strong&gt; — texte intégral, à chaque requête&lt;/td&gt;
      &lt;td&gt;Dès que vous répétez les mêmes règles&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Les mêmes consignes, mais pour &lt;strong&gt;tous&lt;/strong&gt; les agents&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt; (racine + sous-dossiers)&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Toujours&lt;/strong&gt; — le fichier le plus proche l’emporte&lt;/td&gt;
      &lt;td&gt;Vous utilisez plusieurs agents, pas que Copilot&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Prompts&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Rejouer un prompt récurrent en &lt;code class=&quot;highlighter-rouge&quot;&gt;/commande&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;*.prompt.md&lt;/code&gt; dans &lt;code class=&quot;highlighter-rouge&quot;&gt;.github/prompts/&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;À l’invocation&lt;/strong&gt; manuelle uniquement&lt;/td&gt;
      &lt;td&gt;Un raccourci simple et personnel, sans script&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Skills&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Un savoir-faire multi-étapes (+ scripts)&lt;/td&gt;
      &lt;td&gt;Dossier &lt;code class=&quot;highlighter-rouge&quot;&gt;SKILL.md&lt;/code&gt; dans &lt;code class=&quot;highlighter-rouge&quot;&gt;.github/skills/&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;À la demande&lt;/strong&gt; — nom + description, puis le reste&lt;/td&gt;
      &lt;td&gt;Une procédure réutilisable (« comment on déploie »)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Agents&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Un rôle dédié, avec ses outils et son modèle&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;*.agent.md&lt;/code&gt; dans &lt;code class=&quot;highlighter-rouge&quot;&gt;.github/agents/&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;À l’activation&lt;/strong&gt; — devient la consigne système&lt;/td&gt;
      &lt;td&gt;Un profil récurrent (relecteur, architecte…)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;MCP&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Brancher Copilot sur des outils/données externes&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;mcp.json&lt;/code&gt; (ex. &lt;code class=&quot;highlighter-rouge&quot;&gt;.vscode/mcp.json&lt;/code&gt;)&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Schémas&lt;/strong&gt; dès l’activation, &lt;strong&gt;résultats&lt;/strong&gt; à l’appel&lt;/td&gt;
      &lt;td&gt;Besoin d’agir hors du code (BDD, Jira, navigateur…)&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;-lastuce-de-départ--faites-écrire-le-livret-daccueil-par-lassistant-lui-même&quot;&gt;🎁 L’astuce de départ : faites écrire le livret d’accueil… par l’assistant lui-même&lt;/h2&gt;

&lt;p&gt;Vous êtes convaincu par le &lt;code class=&quot;highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt;, mais la page blanche vous freine ? Bonne nouvelle : il existe un &lt;strong&gt;skill dont le seul métier est de générer votre &lt;code class=&quot;highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt;&lt;/strong&gt;. Oui, vous avez bien lu — on utilise une fiche savoir-faire (mécanisme n° 3) pour fabriquer le livret d’accueil (mécanisme n° 1). C’est un peu de l’inception, et c’est surtout de l’&lt;strong&gt;auto-apprentissage&lt;/strong&gt; : l’assistant explore votre dépôt et rédige lui-même le document qui lui servira de mémoire à chaque session.&lt;/p&gt;

&lt;p&gt;Le skill s’appelle &lt;a href=&quot;https://www.skills.sh/github/awesome-copilot/create-agentsmd&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;create-agentsmd&lt;/code&gt;&lt;/a&gt; et vient du dépôt officiel &lt;a href=&quot;https://github.com/github/awesome-copilot&quot;&gt;awesome-copilot&lt;/a&gt; de GitHub. Une commande suffit :&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;npx skills add https://github.com/github/awesome-copilot &lt;span class=&quot;nt&quot;&gt;--skill&lt;/span&gt; create-agentsmd
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Ensuite, demandez simplement à Copilot de « créer le AGENTS.md du projet » : le skill se déclenche, analyse votre dépôt (stack, commandes de build, façon de lancer les tests, conventions, structure — monorepos compris) et produit un &lt;code class=&quot;highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt; conforme au standard ouvert, prêt à être relu et committé.&lt;/p&gt;

&lt;p&gt;Et c’est là que la boucle se referme : au prochain démarrage, votre employé amnésique &lt;strong&gt;lira le livret qu’il a écrit lui-même la veille&lt;/strong&gt;. Relisez-le, corrigez ce qui manque, committez — et vous venez de faire le premier pas concret pour aider votre agent à garder son contexte d’une session à l’autre.&lt;/p&gt;

&lt;h2 id=&quot;la-règle-simple-à-retenir&quot;&gt;La règle simple à retenir&lt;/h2&gt;

&lt;p&gt;Si vous ne deviez retenir qu’une chose : &lt;strong&gt;commencez par les Instructions, ajoutez le reste seulement quand un besoin revient.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Vous répétez des &lt;strong&gt;règles&lt;/strong&gt; ? → Instructions (ou &lt;code class=&quot;highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt; si plusieurs agents).&lt;/li&gt;
  &lt;li&gt;Vous répétez un &lt;strong&gt;prompt&lt;/strong&gt; ? → Prompt file.&lt;/li&gt;
  &lt;li&gt;Vous répétez une &lt;strong&gt;procédure&lt;/strong&gt; ? → Skill.&lt;/li&gt;
  &lt;li&gt;Vous répétez un &lt;strong&gt;rôle&lt;/strong&gt; ? → Agent.&lt;/li&gt;
  &lt;li&gt;Vous répétez un &lt;strong&gt;branchement&lt;/strong&gt; vers un outil externe ? → MCP.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Et si vous ne deviez en retenir &lt;em&gt;deux&lt;/em&gt;, ajoutez le réflexe &lt;strong&gt;contexte&lt;/strong&gt; : ce qui est « toujours chargé » (Instructions, &lt;code class=&quot;highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt;, schémas MCP) doit rester léger, car vous le payez à &lt;em&gt;chaque&lt;/em&gt; requête ; ce qui est « à la demande » (Prompts, Skills, résultats d’outils) peut être plus riche, car il ne coûte que lorsqu’on s’en sert.&lt;/p&gt;

&lt;p&gt;Vous voyez la logique ? À chaque fois que vous vous entendez dire « je l’ai déjà expliqué la semaine dernière… », c’est le signal qu’un de ces mécanismes attend d’être utilisé.&lt;/p&gt;

&lt;p&gt;Et ça, mine de rien… c’est pas sorcier.&lt;/p&gt;
</description>
                <pubDate>Thu, 02 Jul 2026 12:00:00 +0200</pubDate>
                <link>https://senseof.ai/fr/2026/07/02/github-copilot-skills-instructions-agents-mcp/</link>
                <guid isPermaLink="true">https://senseof.ai/fr/2026/07/02/github-copilot-skills-instructions-agents-mcp/</guid>
                
                <category>github</category>
                
                <category>copilot</category>
                
                <category>AI</category>
                
                <category>MCP</category>
                
                <category>skills</category>
                
                
            </item>
        
            <item>
                <title>GitHub Copilot: Skills, Instructions, Agents, MCP… it&apos;s not rocket science!</title>
                <description>&lt;p&gt;GitHub Copilot is no longer the little assistant that finished your lines of code. It has become a real agent, able to read your project, run commands, call external tools and follow your rules. The catch? You can now customize it in &lt;strong&gt;five different ways&lt;/strong&gt; — Instructions, Prompts, Skills, Agents, MCP — and everyone gets lost.&lt;/p&gt;

&lt;p&gt;So let’s take the machine apart, piece by piece. And for each one, we’ll answer the awkward question: &lt;strong&gt;when does it get loaded, and what actually enters the model’s context?&lt;/strong&gt; Because that’s the real secret. And you’ll see: it’s not rocket science.&lt;/p&gt;

&lt;!--more--&gt;

&lt;h2 id=&quot;the-through-line-picture-a-brilliant-new-assistant&quot;&gt;The through-line: picture a brilliant new assistant&lt;/h2&gt;

&lt;p&gt;To understand all five mechanisms, one image is enough: &lt;strong&gt;Copilot is a brilliant but amnesiac new hire.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It codes very well, it learns fast… but every morning it has forgotten everything: your conventions, your tools, the way you like to work. Your job is to equip it so that it’s productive &lt;strong&gt;without you having to re-explain everything every single time&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Each customization feature answers a moment in that onboarding:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;the &lt;strong&gt;welcome handbook&lt;/strong&gt; (Custom Instructions, and its universal cousin &lt;code class=&quot;highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt;),&lt;/li&gt;
  &lt;li&gt;the &lt;strong&gt;ready-made memos&lt;/strong&gt; (Prompts),&lt;/li&gt;
  &lt;li&gt;the &lt;strong&gt;know-how sheets&lt;/strong&gt; filed in a binder (Skills),&lt;/li&gt;
  &lt;li&gt;the &lt;strong&gt;specialist hats&lt;/strong&gt; (Agents),&lt;/li&gt;
  &lt;li&gt;and the &lt;strong&gt;access badges&lt;/strong&gt; to your in-house tools (MCP).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And for each one, we’ll add a little ⚙️ box that says &lt;strong&gt;when it’s loaded&lt;/strong&gt; and &lt;strong&gt;what the model actually sees&lt;/strong&gt;. Let’s take them in order.&lt;/p&gt;

&lt;h2 id=&quot;before-we-take-it-apart-frontmatter-the-label-on-the-sheet&quot;&gt;Before we take it apart: frontmatter, the label on the sheet&lt;/h2&gt;

&lt;p&gt;One last tool before we open the hood, because it shows up in almost every example that follows: &lt;strong&gt;frontmatter&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The analogy:&lt;/strong&gt; it’s the &lt;strong&gt;label stuck on the sheet&lt;/strong&gt;. It’s not part of the procedure itself — it says &lt;em&gt;who&lt;/em&gt; the sheet is for, &lt;em&gt;when&lt;/em&gt; to pull it out and &lt;em&gt;how&lt;/em&gt; to file it. You can sort the whole binder just by reading the labels, without ever opening the sheets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Concretely:&lt;/strong&gt; it’s a small &lt;strong&gt;YAML&lt;/strong&gt; block at the very top of a Markdown file, delimited by two &lt;code class=&quot;highlighter-rouge&quot;&gt;---&lt;/code&gt; lines:&lt;/p&gt;

&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;azure-deploy&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Deploy the app to Azure App Service.&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;

The normal Markdown content starts here…
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Everything between the two &lt;code class=&quot;highlighter-rouge&quot;&gt;---&lt;/code&gt; lines is &lt;strong&gt;metadata&lt;/strong&gt;, as key-value pairs. Everything after is the actual content.&lt;/p&gt;

&lt;p&gt;And that distinction is not cosmetic — it maps exactly onto our favorite question of “who sees what”:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;the &lt;strong&gt;frontmatter&lt;/strong&gt; is read by the &lt;strong&gt;harness&lt;/strong&gt; (VS Code, Copilot CLI…) &lt;em&gt;before&lt;/em&gt; any call to the model: it’s what decides whether the file applies, when to load it and with which settings;&lt;/li&gt;
  &lt;li&gt;the &lt;strong&gt;body&lt;/strong&gt; is the text meant for the &lt;strong&gt;model&lt;/strong&gt;, loaded at the moment the mechanism dictates.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each mechanism uses its own keys, and you’ll recognize them throughout the article:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Key&lt;/th&gt;
      &lt;th&gt;Seen in…&lt;/th&gt;
      &lt;th&gt;It’s used to…&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;applyTo&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;*.instructions.md&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;Restrict the rules to files matching the glob pattern&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;mode&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;*.prompt.md&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;Pick the prompt’s execution mode (e.g. &lt;code class=&quot;highlighter-rouge&quot;&gt;agent&lt;/code&gt;)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;name&lt;/code&gt; / &lt;code class=&quot;highlighter-rouge&quot;&gt;description&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;SKILL.md&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;*.agent.md&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;Identify the sheet — the &lt;strong&gt;always-visible&lt;/strong&gt; part of a skill&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;tools&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;*.agent.md&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;Restrict the tools exposed to the agent&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;model&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;*.agent.md&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;Force which model to use&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Two special cases worth noting: &lt;code class=&quot;highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt; has &lt;strong&gt;no frontmatter at all&lt;/strong&gt; (that’s precisely its promise — plain Markdown understood by every agent), and in a &lt;code class=&quot;highlighter-rouge&quot;&gt;SKILL.md&lt;/code&gt; the frontmatter plays a starring role: &lt;code class=&quot;highlighter-rouge&quot;&gt;name&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;description&lt;/code&gt; are &lt;strong&gt;the only thing loaded permanently&lt;/strong&gt; — the label the model reads to decide whether to open the sheet.&lt;/p&gt;

&lt;p&gt;There’s your reading key. Now, let’s take it apart.&lt;/p&gt;

&lt;h2 id=&quot;1-custom-instructions--the-welcome-handbook&quot;&gt;1. Custom Instructions — the welcome handbook&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The analogy:&lt;/strong&gt; it’s the house rules pinned to the wall. Your assistant reads them &lt;em&gt;on every task&lt;/em&gt;, without being asked. “Here, we write C#, we test with xUnit, and we answer in English.”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Concretely:&lt;/strong&gt; a Markdown file at the root of the repository that gives Copilot the project’s permanent context — the stack, the conventions, the preferences.&lt;/p&gt;

&lt;p&gt;The main file lives in &lt;code class=&quot;highlighter-rouge&quot;&gt;.github/copilot-instructions.md&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;gh&quot;&gt;# Project context&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;
-&lt;/span&gt; ASP.NET Core API in C# (.NET 9).
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; Use immutable &lt;span class=&quot;sb&quot;&gt;`record`&lt;/span&gt; types for DTOs.
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; Write tests with xUnit and FluentAssertions.
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; In your explanations, answer in English.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Need rules &lt;strong&gt;targeted&lt;/strong&gt; at certain files? Add &lt;code class=&quot;highlighter-rouge&quot;&gt;*.instructions.md&lt;/code&gt; files under &lt;code class=&quot;highlighter-rouge&quot;&gt;.github/instructions/&lt;/code&gt;, with an &lt;code class=&quot;highlighter-rouge&quot;&gt;applyTo&lt;/code&gt; header that uses a glob pattern:&lt;/p&gt;

&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;applyTo&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;**/*.test.ts&quot;&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; Use Vitest and Testing Library.
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; One &lt;span class=&quot;sb&quot;&gt;`describe`&lt;/span&gt; block per component.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;If the file matches, those rules are added on top of the project-wide ones.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;⚙️ &lt;strong&gt;Loaded when:&lt;/strong&gt; on &lt;strong&gt;every&lt;/strong&gt; request, automatically. The root file always applies; a &lt;code class=&quot;highlighter-rouge&quot;&gt;*.instructions.md&lt;/code&gt; is only added when its &lt;code class=&quot;highlighter-rouge&quot;&gt;applyTo&lt;/code&gt; pattern matches the files in play.&lt;/p&gt;

  &lt;p&gt;&lt;strong&gt;What enters the context:&lt;/strong&gt; the &lt;strong&gt;full text&lt;/strong&gt; of the file, injected at the top of the context like a system instruction. It’s there on &lt;em&gt;every&lt;/em&gt; call — which is why you keep it short and sharp.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;When to use it:&lt;/strong&gt; &lt;strong&gt;always, and first.&lt;/strong&gt; It’s the foundation. The moment you catch yourself repeating “in C#, with records, in English…” in every conversation, it’s time to write it down here once and for all.&lt;/p&gt;

&lt;h3 id=&quot;the-universal-cousin-agentsmd&quot;&gt;The universal cousin: &lt;code class=&quot;highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;.github/copilot-instructions.md&lt;/code&gt; is Copilot-specific. But if you juggle several agents (Copilot, but also Cursor, Codex, Jules…), there’s a &lt;strong&gt;standard, tool-agnostic&lt;/strong&gt; file: &lt;code class=&quot;highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt;, at the root of the repository.&lt;/p&gt;

&lt;p&gt;It’s a plain Markdown file — a “README for agents” — where you put what would clutter the human README: build commands, how to run the tests, house conventions, gotchas to avoid. No frontmatter, no special syntax: just Markdown.&lt;/p&gt;

&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;gh&quot;&gt;# AGENTS.md&lt;/span&gt;

&lt;span class=&quot;gu&quot;&gt;## Build &amp;amp; tests&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; Install: &lt;span class=&quot;sb&quot;&gt;`dotnet restore`&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; Run tests: &lt;span class=&quot;sb&quot;&gt;`dotnet test`&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; Never commit to &lt;span class=&quot;sb&quot;&gt;`main`&lt;/span&gt; directly.

&lt;span class=&quot;gu&quot;&gt;## Conventions&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; C# / .NET 9, DTOs as immutable &lt;span class=&quot;sb&quot;&gt;`record`&lt;/span&gt; types.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Two things to remember:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;It’s an open standard&lt;/strong&gt;, stewarded by the Agentic AI Foundation (under the Linux Foundation) and adopted by OpenAI Codex, Cursor, Jules (Google), Amp, Factory… and read by the GitHub Copilot coding agent.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Nearest wins.&lt;/strong&gt; You can drop an &lt;code class=&quot;highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt; at the root &lt;em&gt;and&lt;/em&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt; files in subfolders: the agent reads the nearest one to the files it’s working on. Every subproject can have its own instructions.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;⚙️ &lt;strong&gt;Loaded when:&lt;/strong&gt; automatically, just like Custom Instructions. The root one always applies; a subfolder &lt;code class=&quot;highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt; takes over when the agent works in that folder.&lt;/p&gt;

  &lt;p&gt;&lt;strong&gt;What enters the context:&lt;/strong&gt; the text of the nearest &lt;code class=&quot;highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt;, injected as an instruction. Bonus: the Copilot coding agent also reads &lt;code class=&quot;highlighter-rouge&quot;&gt;.github/copilot-instructions.md&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;*.instructions.md&lt;/code&gt;, as well as &lt;code class=&quot;highlighter-rouge&quot;&gt;CLAUDE.md&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;GEMINI.md&lt;/code&gt; — you don’t have to duplicate everything.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Instructions or &lt;code class=&quot;highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt;?&lt;/strong&gt; Same idea (the “welcome handbook”), two scopes: &lt;code class=&quot;highlighter-rouge&quot;&gt;copilot-instructions.md&lt;/code&gt; if you’re 100% Copilot, &lt;code class=&quot;highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt; if you want &lt;strong&gt;a single file understood by every agent&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id=&quot;2-prompts--the-ready-made-memos&quot;&gt;2. Prompts — the ready-made memos&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The analogy:&lt;/strong&gt; the sticky note “here’s how you prepare a release sheet” stuck on the desk. A shortcut for a task you keep asking for, word for word.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Concretely:&lt;/strong&gt; a &lt;em&gt;prompt file&lt;/em&gt;, a &lt;code class=&quot;highlighter-rouge&quot;&gt;.prompt.md&lt;/code&gt; file filed under &lt;code class=&quot;highlighter-rouge&quot;&gt;.github/prompts/&lt;/code&gt;, that you trigger like a slash command.&lt;/p&gt;

&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;mode&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;agent&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;
Prepare the Pull Request description from the current diff:
a one-sentence summary, the list of changes, and any risks.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Saved as &lt;code class=&quot;highlighter-rouge&quot;&gt;pr.prompt.md&lt;/code&gt;, it’s invoked by simply typing &lt;code class=&quot;highlighter-rouge&quot;&gt;/pr&lt;/code&gt; in chat. No more re-typing the same paragraph of instructions.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;⚙️ &lt;strong&gt;Loaded when:&lt;/strong&gt; only when &lt;strong&gt;you&lt;/strong&gt; type &lt;code class=&quot;highlighter-rouge&quot;&gt;/my-prompt&lt;/code&gt;. Never on its own.&lt;/p&gt;

  &lt;p&gt;&lt;strong&gt;What enters the context:&lt;/strong&gt; the prompt body is inserted at that moment as (part of) your message, along with the files it references. The rest of the time, it takes up &lt;strong&gt;no&lt;/strong&gt; space in the context.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;A word of honesty:&lt;/strong&gt; you may have heard that prompt files are &lt;strong&gt;“less necessary” today&lt;/strong&gt;. That’s true — and it’s fair. &lt;strong&gt;Agents&lt;/strong&gt; (which already carry a role and instructions) and &lt;strong&gt;Skills&lt;/strong&gt; (which trigger on their own) cover a good chunk of the need. Still, the prompt file remains the &lt;strong&gt;simplest and fastest&lt;/strong&gt; option to turn a recurring paragraph into a one-word command. A knife that still cuts very well, even though food processors now exist.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use it:&lt;/strong&gt; for a &lt;strong&gt;simple, personal&lt;/strong&gt; shortcut, with no script or special tool. If your need grows into a real multi-step know-how, move up to Skills.&lt;/p&gt;

&lt;h2 id=&quot;3-skills--the-know-how-sheets-in-the-binder&quot;&gt;3. Skills — the know-how sheets in the binder&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The analogy:&lt;/strong&gt; a binder of procedure sheets. Your assistant doesn’t read them all the time — it just reads the &lt;strong&gt;title&lt;/strong&gt;, and when a task matches, it pulls out the right sheet and follows the procedure (which can even contain scripts and examples).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Concretely:&lt;/strong&gt; an &lt;em&gt;Agent Skill&lt;/em&gt; is a &lt;strong&gt;folder&lt;/strong&gt; containing a &lt;code class=&quot;highlighter-rouge&quot;&gt;SKILL.md&lt;/code&gt; file (plus, optionally, scripts, templates or examples).&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;.github/skills/
└── azure-deploy/
    ├── SKILL.md
    ├── deploy.sh
    └── examples/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The &lt;code class=&quot;highlighter-rouge&quot;&gt;SKILL.md&lt;/code&gt; starts with a header describing &lt;em&gt;when&lt;/em&gt; to use it:&lt;/p&gt;

&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;azure-deploy&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Deploy the app to Azure App Service and check the health endpoint.&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;

&lt;span class=&quot;p&quot;&gt;1.&lt;/span&gt; Build the image with &lt;span class=&quot;sb&quot;&gt;`docker build ...`&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;2.&lt;/span&gt; Push to the registry with &lt;span class=&quot;sb&quot;&gt;`az acr ...`&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;3.&lt;/span&gt; Deploy with &lt;span class=&quot;sb&quot;&gt;`az webapp up ...`&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;4.&lt;/span&gt; Check &lt;span class=&quot;sb&quot;&gt;`https://.../health`&lt;/span&gt; before confirming.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;⚙️ &lt;strong&gt;Loaded when:&lt;/strong&gt; through &lt;strong&gt;progressive disclosure&lt;/strong&gt;, decided by the model. At first it only “sees” the &lt;code class=&quot;highlighter-rouge&quot;&gt;name&lt;/code&gt; and the &lt;code class=&quot;highlighter-rouge&quot;&gt;description&lt;/code&gt;. It loads the body of the &lt;code class=&quot;highlighter-rouge&quot;&gt;SKILL.md&lt;/code&gt; only if the task matches (or if you invoke it), and opens the scripts only if it needs them.&lt;/p&gt;

  &lt;p&gt;&lt;strong&gt;What enters the context:&lt;/strong&gt; at rest, &lt;strong&gt;just a one-line description&lt;/strong&gt; per skill. Then, on demand, the body of the sheet, then the resources. That’s exactly why you can have dozens of them without saturating the context.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Another upside: Skills follow an &lt;strong&gt;open standard&lt;/strong&gt;. The same sheet works in Copilot inside VS Code, in Copilot CLI and in the cloud agent — and even with other compatible agents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use it:&lt;/strong&gt; for a &lt;strong&gt;reusable, multi-step know-how&lt;/strong&gt;, especially if it bundles scripts or resources. “How we deploy”, “how we write an in-house integration test”: those are skills.&lt;/p&gt;

&lt;h2 id=&quot;4-agents--the-specialist-hats&quot;&gt;4. Agents — the specialist hats&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The analogy:&lt;/strong&gt; instead of a generalist assistant, you summon &lt;strong&gt;the right specialist&lt;/strong&gt;: the nitpicky reviewer, the architect, the docs writer. Each one has its own character, its allowed tools and its way of working.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Concretely:&lt;/strong&gt; a &lt;em&gt;custom agent&lt;/em&gt; is a &lt;code class=&quot;highlighter-rouge&quot;&gt;*.agent.md&lt;/code&gt; file (under &lt;code class=&quot;highlighter-rouge&quot;&gt;.github/agents/&lt;/code&gt;) that defines a &lt;strong&gt;persona&lt;/strong&gt;: its role, its instructions, the tools it’s allowed to use, and even the &lt;strong&gt;model&lt;/strong&gt; to run.&lt;/p&gt;

&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;reviewer&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Senior code reviewer, demanding about security and tests.&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;tools&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;search&apos;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;edit&apos;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;claude-sonnet-5&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;
You are a senior reviewer. Focus on:
bugs, security flaws, edge cases and missing tests.
Be direct, propose concrete fixes, don&apos;t reword code that&apos;s already fine.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;You then switch to that agent in one click, instead of re-explaining its role in every conversation. It’s also the principle behind the &lt;strong&gt;coding agent&lt;/strong&gt;, which you can outright assign a GitHub issue to: it works autonomously and opens a Pull Request.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;⚙️ &lt;strong&gt;Loaded when:&lt;/strong&gt; when you &lt;strong&gt;activate&lt;/strong&gt; the agent (selecting it in the UI, an &lt;code class=&quot;highlighter-rouge&quot;&gt;@mention&lt;/code&gt;, or assigning it an issue for the coding agent).&lt;/p&gt;

  &lt;p&gt;&lt;strong&gt;What enters the context:&lt;/strong&gt; its instructions become the active &lt;strong&gt;system prompt&lt;/strong&gt;; its &lt;code class=&quot;highlighter-rouge&quot;&gt;tools&lt;/code&gt; list &lt;strong&gt;restricts&lt;/strong&gt; which tools the harness exposes; its &lt;code class=&quot;highlighter-rouge&quot;&gt;model&lt;/code&gt; picks the model. An agent doesn’t just add text: it &lt;strong&gt;reconfigures the session&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;When to use it:&lt;/strong&gt; when you want a &lt;strong&gt;specialized, recurring role&lt;/strong&gt;, with its own tools and guardrails. If you juggle between “dev hat” and “review hat”, make two agents.&lt;/p&gt;

&lt;h2 id=&quot;5-mcp--the-access-badges-to-the-outside-world&quot;&gt;5. MCP — the access badges to the outside world&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The analogy:&lt;/strong&gt; so far, your assistant only knows your code. MCP is the &lt;strong&gt;badges and sockets&lt;/strong&gt; that plug it into the rest of your ecosystem: the database, Jira, your monitoring, a browser, your CRM…&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Concretely:&lt;/strong&gt; the &lt;em&gt;Model Context Protocol&lt;/em&gt; is an &lt;strong&gt;open standard&lt;/strong&gt; for connecting an AI agent to external tools and data. You declare MCP servers in an &lt;code class=&quot;highlighter-rouge&quot;&gt;mcp.json&lt;/code&gt; file (in &lt;code class=&quot;highlighter-rouge&quot;&gt;.vscode/mcp.json&lt;/code&gt; for a project):&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;servers&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;github&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;http&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;url&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://api.githubcopilot.com/mcp&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;playwright&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;command&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;npx&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;args&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;-y&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;@microsoft/mcp-server-playwright&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Once plugged in, Copilot can read your GitHub issues, drive a browser, query a database… depending on the tools the server exposes.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;⚙️ &lt;strong&gt;Loaded when:&lt;/strong&gt; as soon as a server is &lt;strong&gt;enabled&lt;/strong&gt;, the harness loads the &lt;strong&gt;descriptions of the tools&lt;/strong&gt; it exposes (name, role, input schema) — even if you never call them. The &lt;strong&gt;results&lt;/strong&gt;, on the other hand, only arrive when a tool is actually called.&lt;/p&gt;

  &lt;p&gt;&lt;strong&gt;What enters the context:&lt;/strong&gt; the &lt;strong&gt;tool definitions&lt;/strong&gt; (permanently, as long as the server is active) then the &lt;strong&gt;call results&lt;/strong&gt; (on demand). A very concrete consequence: too many MCP servers means a context cluttered by schemas alone. Hence the value of &lt;strong&gt;disabling the ones you don’t use&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Mind the access badge:&lt;/strong&gt; an MCP server is third-party code you’re handing the keys to. VS Code asks you to &lt;strong&gt;confirm your trust&lt;/strong&gt; before starting it, and lets you sandbox local servers (restricted file/network access). Only plug in what you know — I already wrote about this in my article on &lt;a href=&quot;/2025/02/24/Securing-MCP-Servers-Automated-Whitelist-Scanner/&quot;&gt;securing MCP servers&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use it:&lt;/strong&gt; whenever Copilot needs &lt;strong&gt;data or actions that live outside your code&lt;/strong&gt;. For anything that’s purely “project knowledge and conventions”, Instructions and Skills are enough.&lt;/p&gt;

&lt;h2 id=&quot;the-recap-table-when-to-use-what--and-when-its-loaded&quot;&gt;The recap table: when to use what — and when it’s loaded?&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Element&lt;/th&gt;
      &lt;th&gt;It’s for…&lt;/th&gt;
      &lt;th&gt;Where it lives&lt;/th&gt;
      &lt;th&gt;Loaded into the context&lt;/th&gt;
      &lt;th&gt;When to use it&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Custom Instructions&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Permanent project context and conventions&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;.github/copilot-instructions.md&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;*.instructions.md&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Always&lt;/strong&gt; — full text, on every request&lt;/td&gt;
      &lt;td&gt;As soon as you repeat the same rules&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;The same guidance, but for &lt;strong&gt;every&lt;/strong&gt; agent&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt; (root + subfolders)&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Always&lt;/strong&gt; — the nearest file wins&lt;/td&gt;
      &lt;td&gt;You use several agents, not just Copilot&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Prompts&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Replaying a recurring prompt as a &lt;code class=&quot;highlighter-rouge&quot;&gt;/command&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;*.prompt.md&lt;/code&gt; in &lt;code class=&quot;highlighter-rouge&quot;&gt;.github/prompts/&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;On manual invocation&lt;/strong&gt; only&lt;/td&gt;
      &lt;td&gt;A simple, personal shortcut, no script&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Skills&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;A multi-step know-how (+ scripts)&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;SKILL.md&lt;/code&gt; folder in &lt;code class=&quot;highlighter-rouge&quot;&gt;.github/skills/&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;On demand&lt;/strong&gt; — name + description, then the rest&lt;/td&gt;
      &lt;td&gt;A reusable procedure (“how we deploy”)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Agents&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;A dedicated role, with its own tools and model&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;*.agent.md&lt;/code&gt; in &lt;code class=&quot;highlighter-rouge&quot;&gt;.github/agents/&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;On activation&lt;/strong&gt; — becomes the system prompt&lt;/td&gt;
      &lt;td&gt;A recurring profile (reviewer, architect…)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;MCP&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Plugging Copilot into external tools/data&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;mcp.json&lt;/code&gt; (e.g. &lt;code class=&quot;highlighter-rouge&quot;&gt;.vscode/mcp.json&lt;/code&gt;)&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Schemas&lt;/strong&gt; on enable, &lt;strong&gt;results&lt;/strong&gt; on call&lt;/td&gt;
      &lt;td&gt;Need to act outside the code (DB, Jira, browser…)&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;-the-starter-tip-have-the-assistant-write-its-own-welcome-handbook&quot;&gt;🎁 The starter tip: have the assistant write its own welcome handbook&lt;/h2&gt;

&lt;p&gt;Sold on &lt;code class=&quot;highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt;, but stuck on the blank page? Good news: there’s a &lt;strong&gt;skill whose only job is to generate your &lt;code class=&quot;highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt;&lt;/strong&gt;. Yes, you read that right — you use a know-how sheet (mechanism #3) to produce the welcome handbook (mechanism #1). It’s a bit of inception, and above all it’s &lt;strong&gt;self-teaching&lt;/strong&gt;: the assistant explores your repository and writes, by itself, the document that will serve as its memory in every session.&lt;/p&gt;

&lt;p&gt;The skill is called &lt;a href=&quot;https://www.skills.sh/github/awesome-copilot/create-agentsmd&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;create-agentsmd&lt;/code&gt;&lt;/a&gt; and comes from GitHub’s official &lt;a href=&quot;https://github.com/github/awesome-copilot&quot;&gt;awesome-copilot&lt;/a&gt; repository. One command is all it takes:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;npx skills add https://github.com/github/awesome-copilot &lt;span class=&quot;nt&quot;&gt;--skill&lt;/span&gt; create-agentsmd
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Then simply ask Copilot to “create the AGENTS.md for the project”: the skill kicks in, analyzes your repository (stack, build commands, how to run the tests, conventions, structure — monorepos included) and produces an &lt;code class=&quot;highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt; that follows the open standard, ready to be reviewed and committed.&lt;/p&gt;

&lt;p&gt;And that’s where the loop closes: on the next start, your amnesiac hire &lt;strong&gt;reads the handbook it wrote itself the day before&lt;/strong&gt;. Review it, fix what’s missing, commit it — and you’ve just taken the first concrete step to help your agent keep its context from one session to the next.&lt;/p&gt;

&lt;h2 id=&quot;the-simple-rule-to-remember&quot;&gt;The simple rule to remember&lt;/h2&gt;

&lt;p&gt;If you only take away one thing: &lt;strong&gt;start with Instructions, add the rest only when a need keeps coming back.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Repeating &lt;strong&gt;rules&lt;/strong&gt;? → Instructions (or &lt;code class=&quot;highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt; if several agents).&lt;/li&gt;
  &lt;li&gt;Repeating a &lt;strong&gt;prompt&lt;/strong&gt;? → Prompt file.&lt;/li&gt;
  &lt;li&gt;Repeating a &lt;strong&gt;procedure&lt;/strong&gt;? → Skill.&lt;/li&gt;
  &lt;li&gt;Repeating a &lt;strong&gt;role&lt;/strong&gt;? → Agent.&lt;/li&gt;
  &lt;li&gt;Repeating a &lt;strong&gt;connection&lt;/strong&gt; to an external tool? → MCP.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And if you take away &lt;em&gt;two&lt;/em&gt; things, add the &lt;strong&gt;context&lt;/strong&gt; reflex: whatever is “always loaded” (Instructions, &lt;code class=&quot;highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt;, MCP schemas) must stay lightweight, because you pay for it on &lt;em&gt;every&lt;/em&gt; request; whatever is “on demand” (Prompts, Skills, tool results) can be richer, because it only costs you when it’s actually used.&lt;/p&gt;

&lt;p&gt;See the logic? Every time you hear yourself say “I already explained this last week…”, that’s the signal that one of these mechanisms is waiting to be used.&lt;/p&gt;

&lt;p&gt;And that, when you get down to it… is not rocket science.&lt;/p&gt;
</description>
                <pubDate>Thu, 02 Jul 2026 12:00:00 +0200</pubDate>
                <link>https://senseof.ai/2026/07/02/github-copilot-skills-instructions-agents-mcp/</link>
                <guid isPermaLink="true">https://senseof.ai/2026/07/02/github-copilot-skills-instructions-agents-mcp/</guid>
                
                <category>github</category>
                
                <category>copilot</category>
                
                <category>AI</category>
                
                <category>MCP</category>
                
                <category>skills</category>
                
                
            </item>
        
            <item>
                <title>Le « harnais » de l&apos;IA : comment un modèle devient un agent — c&apos;est pas sorcier !</title>
                <description>&lt;p&gt;Tout le monde parle du « modèle » : GPT, Claude, Gemini… Comme si toute la magie tenait dans le cerveau. Pourtant, un modèle tout seul ne sait &lt;strong&gt;rien faire&lt;/strong&gt; : il ne voit pas votre code, ne lance aucune commande, oublie tout d’une phrase à l’autre. Ce qui transforme ce cerveau en véritable &lt;strong&gt;agent&lt;/strong&gt;, c’est une pièce dont on parle beaucoup moins : le &lt;strong&gt;harnais&lt;/strong&gt; (le &lt;em&gt;harness&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;Alors on va ouvrir le capot et regarder cette mécanique de près. Et vous allez voir : c’est pas sorcier.&lt;/p&gt;

&lt;!--more--&gt;

&lt;h2 id=&quot;le-fil-rouge--un-cheval-de-trait-surpuissant&quot;&gt;Le fil rouge : un cheval de trait surpuissant&lt;/h2&gt;

&lt;p&gt;Imaginez un &lt;strong&gt;cheval de trait&lt;/strong&gt; d’exception. Une force brute phénoménale. Mais lâché seul dans un pré, cette puissance ne laboure aucun champ et ne tire aucune charrette. Elle tourne en rond.&lt;/p&gt;

&lt;p&gt;Pour en faire un travail utile, il faut un &lt;strong&gt;harnais&lt;/strong&gt; : les œillères qui canalisent l’attention, les rênes qui donnent la direction, et l’attelage qui relie enfin le cheval à la charrue.&lt;/p&gt;

&lt;p&gt;Un modèle d’IA, c’est exactement ce cheval. Le &lt;strong&gt;harnais&lt;/strong&gt;, c’est tout le logiciel qu’on met autour pour transformer sa puissance brute en actions concrètes : lire un fichier, modifier du code, lancer un test, appeler un outil. Le mot n’est pas de moi — c’est le terme que tout le milieu utilise. &lt;strong&gt;GitHub Copilot, Claude Code, Cursor… ce sont des harnais.&lt;/strong&gt; Le modèle est interchangeable ; le harnais, lui, fait toute la différence entre un joli chatbot et un collègue qui abat le travail.&lt;/p&gt;

&lt;h2 id=&quot;dabord-un-modèle-tout-seul--que-sait-il-faire-&quot;&gt;D’abord, un modèle tout seul : que sait-il faire ?&lt;/h2&gt;

&lt;p&gt;Réponse honnête : &lt;strong&gt;du texte, et rien d’autre.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Un grand modèle de langage (LLM), c’est une fonction. Vous lui donnez du texte en entrée, il vous rend du texte en sortie. C’est prodigieux… mais c’est tout. En l’état, il souffre de trois handicaps :&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Il est aveugle et manchot.&lt;/strong&gt; Il ne peut ni ouvrir un fichier, ni exécuter une commande. Il ne peut que &lt;em&gt;décrire&lt;/em&gt; ce qu’il ferait.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Il est amnésique.&lt;/strong&gt; À chaque appel, il repart de zéro. Il n’a aucun souvenir de la phrase précédente, sauf si on la lui redonne à chaque fois.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Il ne fait qu’un pas.&lt;/strong&gt; Une question, une réponse. Il ne sait pas enchaîner « je regarde → je corrige → je vérifie ».&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Le harnais est là pour compenser ces trois handicaps. Regardons ses pièces une par une.&lt;/p&gt;

&lt;h2 id=&quot;lanatomie-dun-harnais-pièce-par-pièce&quot;&gt;L’anatomie d’un harnais, pièce par pièce&lt;/h2&gt;

&lt;h3 id=&quot;1-la-boucle-agentique--le-cœur-qui-bat&quot;&gt;1. La boucle agentique — le cœur qui bat&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;L’analogie :&lt;/strong&gt; c’est le contremaître qui fait tourner le chantier. Il transmet une consigne au cheval, regarde le résultat, décide de la suite, recommence — jusqu’à ce que le travail soit fait.&lt;/p&gt;

&lt;p&gt;C’est &lt;strong&gt;la&lt;/strong&gt; pièce maîtresse. Un chatbot classique fait un aller-retour : question → réponse, terminé. Un agent, lui, &lt;strong&gt;boucle&lt;/strong&gt; :&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Le harnais envoie au modèle tout le contexte connu.&lt;/li&gt;
  &lt;li&gt;Le modèle répond… mais au lieu d’une simple phrase, il peut demander : « lance tel outil ».&lt;/li&gt;
  &lt;li&gt;Le harnais &lt;strong&gt;exécute&lt;/strong&gt; l’outil et &lt;strong&gt;réinjecte le résultat&lt;/strong&gt; dans la conversation.&lt;/li&gt;
  &lt;li&gt;On recommence — jusqu’à ce que le modèle déclare : « c’est bon, j’ai fini ».&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Cette boucle « penser → agir → observer → recommencer », c’est ce qui transforme une réponse unique en une &lt;strong&gt;suite d’actions autonome&lt;/strong&gt;. Sans elle, pas d’agent.&lt;/p&gt;

&lt;h3 id=&quot;2-les-outils--les-mains-et-les-yeux&quot;&gt;2. Les outils — les mains et les yeux&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;L’analogie :&lt;/strong&gt; on donne enfin au cerveau des mains pour agir et des yeux pour voir.&lt;/p&gt;

&lt;p&gt;Un &lt;strong&gt;outil&lt;/strong&gt;, c’est une fonction que le harnais met à disposition du modèle, avec une description précise : son nom, ce qu’elle fait, les paramètres attendus. Par exemple :&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;read_file(chemin)&lt;/code&gt; — lire un fichier,&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;edit(chemin, modif)&lt;/code&gt; — modifier du code,&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;run_terminal(commande)&lt;/code&gt; — lancer une commande,&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;search(requête)&lt;/code&gt; — chercher dans le projet.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Le modèle ne &lt;em&gt;fait&lt;/em&gt; pas l’action lui-même : il &lt;strong&gt;demande&lt;/strong&gt; au harnais de la faire, sous forme d’un petit message structuré (« appelle &lt;code class=&quot;highlighter-rouge&quot;&gt;run_terminal&lt;/code&gt; avec &lt;code class=&quot;highlighter-rouge&quot;&gt;dotnet test&lt;/code&gt; »). Le harnais l’exécute pour de vrai et lui rapporte le résultat. C’est la différence entre un modèle qui &lt;em&gt;raconte&lt;/em&gt; qu’il lancerait les tests… et un agent qui les lance vraiment.&lt;/p&gt;

&lt;h3 id=&quot;3-les-consignes-système--le-règlement-affiché-au-mur&quot;&gt;3. Les consignes système — le règlement affiché au mur&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;L’analogie :&lt;/strong&gt; le règlement intérieur que le cheval « lit » avant chaque tâche. Qui il est, comment il travaille, ce qu’il a le droit de faire.&lt;/p&gt;

&lt;p&gt;Le &lt;em&gt;system prompt&lt;/em&gt; est un bloc de texte que le harnais place &lt;strong&gt;en tête de chaque conversation&lt;/strong&gt;, avant même votre demande. Il définit la personnalité de l’agent, ses règles, le catalogue d’outils disponibles, le format attendu. C’est invisible pour vous, mais c’est ce qui fait qu’un même modèle se comporte en « assistant de code prudent » plutôt qu’en poète bavard.&lt;/p&gt;

&lt;h3 id=&quot;4-la-gestion-du-contexte--un-bureau-trop-petit&quot;&gt;4. La gestion du contexte — un bureau trop petit&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;L’analogie :&lt;/strong&gt; le modèle travaille sur un bureau minuscule. Impossible d’y étaler tout le projet à la fois. Le harnais est le documentaliste qui choisit &lt;strong&gt;quelles feuilles poser sur le bureau&lt;/strong&gt; à chaque instant.&lt;/p&gt;

&lt;p&gt;Le modèle a une &lt;strong&gt;fenêtre de contexte&lt;/strong&gt; limitée : une quantité maximale de texte qu’il peut « voir » d’un coup. Un vrai projet n’y tient jamais entièrement. Le harnais doit donc :&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;sélectionner&lt;/strong&gt; ce qui est pertinent (les bons fichiers, les bons extraits) ;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;résumer&lt;/strong&gt; ou &lt;strong&gt;compacter&lt;/strong&gt; l’historique quand la conversation devient trop longue ;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;jeter&lt;/strong&gt; ce qui ne sert plus.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;C’est un art délicat : trop peu de contexte, le modèle travaille à l’aveugle ; trop de contexte, il se noie et coûte cher. La qualité d’un harnais se joue beaucoup ici.&lt;/p&gt;

&lt;h3 id=&quot;5-les-garde-fous--le-frein-à-main&quot;&gt;5. Les garde-fous — le frein à main&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;L’analogie :&lt;/strong&gt; on ne laisse pas le cheval partir au galop vers la falaise. Il y a des rênes, un frein, et parfois un enclos.&lt;/p&gt;

&lt;p&gt;Un agent qui peut lancer des commandes et modifier des fichiers, c’est puissant… et potentiellement dangereux. Le harnais ajoute des &lt;strong&gt;garde-fous&lt;/strong&gt; :&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;la confirmation&lt;/strong&gt; : demander votre feu vert avant une action sensible (supprimer, exécuter, pousser) ;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;les listes d’autorisation&lt;/strong&gt; : &lt;code class=&quot;highlighter-rouge&quot;&gt;dotnet test&lt;/code&gt; passe tout seul, &lt;code class=&quot;highlighter-rouge&quot;&gt;rm -rf&lt;/code&gt; demande validation ;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;le bac à sable&lt;/strong&gt; : restreindre l’accès aux fichiers et au réseau.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sans garde-fous, un agent est une tronçonneuse sans carter. Avec, il devient un outil de chantier sûr.&lt;/p&gt;

&lt;h3 id=&quot;et-le-modèle-dans-tout-ça-&quot;&gt;Et le modèle, dans tout ça ?&lt;/h3&gt;

&lt;p&gt;Le modèle reste le &lt;strong&gt;cheval&lt;/strong&gt; : la source de puissance. Mais dans un bon harnais, il est &lt;strong&gt;interchangeable&lt;/strong&gt;. Le même harnais peut atteler un GPT, un Claude ou un Gemini, selon la tâche, le budget ou vos préférences. La force change ; l’attelage reste.&lt;/p&gt;

&lt;h2 id=&quot;deep-dive--le-harnais-à-lœuvre-dans-github-copilot&quot;&gt;Deep-dive : le harnais à l’œuvre dans GitHub Copilot&lt;/h2&gt;

&lt;p&gt;Assez de théorie. Ouvrons un vrai harnais et regardons ses rouages. GitHub Copilot est un excellent cas d’école, parce qu’il expose &lt;strong&gt;toutes&lt;/strong&gt; les pièces qu’on vient de décrire — et qu’il les décline en plusieurs « carrosseries ».&lt;/p&gt;

&lt;h3 id=&quot;le-cerveau-interchangeable--le-sélecteur-de-modèle&quot;&gt;Le cerveau interchangeable : le sélecteur de modèle&lt;/h3&gt;

&lt;p&gt;Copilot n’est pas marié à un seul modèle. Un &lt;strong&gt;sélecteur&lt;/strong&gt; vous laisse choisir la monture : les modèles d’OpenAI (famille GPT et modèles de raisonnement), d’Anthropic (Claude Sonnet, Claude Opus), de Google (Gemini)… Le harnais, lui, ne change pas : c’est toujours la même boucle, les mêmes outils. Vous changez seulement le cheval sous le harnais — un modèle rapide pour les petites tâches, un modèle de raisonnement pour les gros morceaux. Quant à savoir &lt;em&gt;quel&lt;/em&gt; cheval atteler, c’est justement le sujet de &lt;a href=&quot;/fr/2026/06/25/quel-modele-choisir-github-copilot/&quot;&gt;mon article sur le choix du modèle&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;le-mode-agent--la-boucle-en-action&quot;&gt;Le mode agent : la boucle en action&lt;/h3&gt;

&lt;p&gt;Le &lt;strong&gt;mode agent&lt;/strong&gt; de Copilot (dans VS Code, Visual Studio ou JetBrains), c’est la boucle agentique à l’état pur. Vous donnez un objectif de haut niveau ; l’agent &lt;strong&gt;planifie&lt;/strong&gt;, modifie plusieurs fichiers, lance des commandes au terminal, lit les erreurs, se corrige, et recommence jusqu’à atteindre le but. Il ne s’arrête pas à la première réponse : il itère.&lt;/p&gt;

&lt;p&gt;Voici à quoi ressemble, de l’intérieur, un seul objectif qui déroule la boucle :&lt;/p&gt;

&lt;div class=&quot;language-text highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Vous : « Ajoute un endpoint /health et son test. »

┌─ Tour 1
│  🧠 Modèle : je dois d&apos;abord comprendre la structure.
│  🔧 Outil  : search(&quot;Program.cs&quot;)            → 1 résultat
├─ Tour 2
│  🧠 Modèle : j&apos;ajoute la route de santé.
│  🔧 Outil  : edit(Program.cs, +8 lignes)
├─ Tour 3
│  🧠 Modèle : j&apos;écris le test associé.
│  🔧 Outil  : edit(HealthTests.cs, nouveau fichier)
├─ Tour 4
│  🧠 Modèle : je vérifie que tout passe.
│  🔧 Outil  : runInTerminal(&quot;dotnet test&quot;)     → ❌ 1 échec
├─ Tour 5
│  🧠 Modèle : un `using` manque, je corrige.
│  🔧 Outil  : edit(HealthTests.cs, +1 ligne)
│  🔧 Outil  : runInTerminal(&quot;dotnet test&quot;)     → ✅ 12 réussis
└─ ✅ Terminé.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Regardez le &lt;strong&gt;tour 4 → tour 5&lt;/strong&gt; : l’agent lance les tests, voit un échec, comprend la cause et se corrige &lt;strong&gt;tout seul&lt;/strong&gt;. Cette capacité à observer un résultat et rebondir, c’est toute la valeur de la boucle. Un simple assistant se serait arrêté au tour 3 en disant « voici le code, à vous de tester ».&lt;/p&gt;

&lt;h3 id=&quot;les-outils-intégrés--les-mains-de-copilot&quot;&gt;Les outils intégrés — les mains de Copilot&lt;/h3&gt;

&lt;p&gt;En mode agent, Copilot dispose d’une trousse d’outils prêts à l’emploi. Sans être exhaustif :&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;explorer et chercher&lt;/strong&gt; dans le code (l’index du &lt;em&gt;workspace&lt;/em&gt;) ;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;lire et éditer&lt;/strong&gt; des fichiers, sur plusieurs endroits à la fois ;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;lancer des commandes&lt;/strong&gt; au terminal ;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;exécuter les tests&lt;/strong&gt; et lire les erreurs (les &lt;em&gt;problems&lt;/em&gt;) ;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;aller chercher une page web&lt;/strong&gt; pour une doc externe.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Et surtout, cette trousse est &lt;strong&gt;extensible via MCP&lt;/strong&gt; (&lt;em&gt;Model Context Protocol&lt;/em&gt;) : vous branchez vos propres outils maison — base de données, Jira, monitoring, navigateur… — et ils viennent s’ajouter au catalogue que le modèle peut appeler. Le harnais ne se limite plus à votre code : il touche tout votre écosystème.&lt;/p&gt;

&lt;h3 id=&quot;comment-copilot-remplit-le-bureau--le-contexte&quot;&gt;Comment Copilot remplit le bureau — le contexte&lt;/h3&gt;

&lt;p&gt;Souvenez-vous du bureau trop petit. Copilot le garnit de plusieurs façons :&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;automatiquement&lt;/strong&gt; : les fichiers ouverts, la sélection courante, un &lt;strong&gt;index du dépôt&lt;/strong&gt; qui permet de retrouver le bon extrait sans tout charger ;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;à la demande&lt;/strong&gt;, quand vous pointez du doigt avec les &lt;code class=&quot;highlighter-rouge&quot;&gt;#&lt;/code&gt;-références (&lt;code class=&quot;highlighter-rouge&quot;&gt;#file&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;#selection&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;#codebase&lt;/code&gt;…) ou les &lt;code class=&quot;highlighter-rouge&quot;&gt;@&lt;/code&gt;-participants (&lt;code class=&quot;highlighter-rouge&quot;&gt;@workspace&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;@terminal&lt;/code&gt;) ;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;en permanence&lt;/strong&gt;, via vos fichiers d’&lt;strong&gt;instructions&lt;/strong&gt; (&lt;code class=&quot;highlighter-rouge&quot;&gt;.github/copilot-instructions.md&lt;/code&gt;), qui rappellent à chaque tour vos conventions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;C’est précisément le rôle du documentaliste : décider ce qui mérite une place sur le bureau. Et c’est là que vos personnalisations entrent en jeu — un sujet que j’ai détaillé dans &lt;a href=&quot;/fr/2026/07/02/github-copilot-skills-instructions-agents-mcp/&quot;&gt;Skills, Instructions, Agents, MCP… c’est pas sorcier !&lt;/a&gt;. Ces fichiers ne sont, au fond, que des &lt;strong&gt;manières de mieux garnir le harnais&lt;/strong&gt;.&lt;/p&gt;

&lt;h3 id=&quot;les-garde-fous--copilot-ne-part-pas-au-galop&quot;&gt;Les garde-fous — Copilot ne part pas au galop&lt;/h3&gt;

&lt;p&gt;Copilot applique tous les freins qu’on a vus. Avant de lancer une commande au terminal, il &lt;strong&gt;demande confirmation&lt;/strong&gt;. Vous pouvez définir des &lt;strong&gt;listes d’autorisation&lt;/strong&gt; (les commandes de confiance passent sans interruption, les autres non) et &lt;strong&gt;bac-à-sabler&lt;/strong&gt; les serveurs MCP locaux pour restreindre leurs accès. Le principe : l’agent propose, mais &lt;strong&gt;vous gardez la main&lt;/strong&gt; sur ce qui touche vraiment à votre machine.&lt;/p&gt;

&lt;h3 id=&quot;un-seul-harnais-trois-carrosseries&quot;&gt;Un seul harnais, trois carrosseries&lt;/h3&gt;

&lt;p&gt;Le point le plus élégant : c’est &lt;strong&gt;la même mécanique&lt;/strong&gt; qui se décline sous trois formes, selon l’endroit où vous travaillez.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Carrosserie&lt;/th&gt;
      &lt;th&gt;Où ça tourne&lt;/th&gt;
      &lt;th&gt;Pour quoi faire&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Dans l’IDE&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;VS Code, Visual Studio, JetBrains&lt;/td&gt;
      &lt;td&gt;Complétion, chat et mode agent, à côté de votre code&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;En ligne de commande&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Copilot CLI, dans le terminal&lt;/td&gt;
      &lt;td&gt;Piloter l’agent au clavier, sans quitter le shell&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Dans le cloud&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Coding agent&lt;/em&gt;, sur GitHub Actions&lt;/td&gt;
      &lt;td&gt;On lui &lt;strong&gt;assigne une issue&lt;/strong&gt; : il travaille seul et ouvre une Pull Request&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Le &lt;em&gt;coding agent&lt;/em&gt; est le plus spectaculaire : vous lui confiez un ticket GitHub, il démarre un environnement éphémère, déroule exactement la même boucle « penser → agir → observer », et vous livre une PR à relire. Même harnais, même boucle, même outils — simplement débranché de votre écran et rebranché sur un serveur.&lt;/p&gt;

&lt;h2 id=&quot;le-récap--les-pièces-du-harnais&quot;&gt;Le récap : les pièces du harnais&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Pièce&lt;/th&gt;
      &lt;th&gt;L’image&lt;/th&gt;
      &lt;th&gt;Son rôle&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;La boucle&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Le contremaître&lt;/td&gt;
      &lt;td&gt;Enchaîner penser → agir → observer jusqu’au but&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Les outils&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Les mains et les yeux&lt;/td&gt;
      &lt;td&gt;Lire, éditer, exécuter, chercher — agir pour de vrai&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Les consignes&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Le règlement au mur&lt;/td&gt;
      &lt;td&gt;Définir qui est l’agent et ses règles&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Le contexte&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Le documentaliste&lt;/td&gt;
      &lt;td&gt;Choisir quoi poser sur un bureau trop petit&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Les garde-fous&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Le frein à main&lt;/td&gt;
      &lt;td&gt;Confirmer, autoriser, mettre en bac à sable&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Le modèle&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Le cheval de trait&lt;/td&gt;
      &lt;td&gt;La puissance brute — interchangeable&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;la-morale-de-lhistoire&quot;&gt;La morale de l’histoire&lt;/h2&gt;

&lt;p&gt;La prochaine fois qu’on vous vantera « le nouveau modèle qui change tout », rappelez-vous du cheval de trait. La puissance brute compte, bien sûr. Mais ce qui transforme cette puissance en travail réel — lire, corriger, tester, livrer — &lt;strong&gt;c’est le harnais&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Et comprendre le harnais, ça change votre regard : quand vous ajoutez des instructions, une skill, un agent ou un serveur MCP, vous n’êtes pas en train de « configurer un chatbot ». Vous êtes en train d’&lt;strong&gt;ajuster l’attelage&lt;/strong&gt; pour que le cheval tire droit.&lt;/p&gt;

&lt;p&gt;Vous voyez la mécanique, maintenant ? Le cerveau, la boucle, les outils, le contexte, les freins…&lt;/p&gt;

&lt;p&gt;Et ça, mine de rien… c’est pas sorcier.&lt;/p&gt;
</description>
                <pubDate>Wed, 01 Jul 2026 12:00:00 +0200</pubDate>
                <link>https://senseof.ai/fr/2026/07/01/le-harnais-de-l-ia-github-copilot/</link>
                <guid isPermaLink="true">https://senseof.ai/fr/2026/07/01/le-harnais-de-l-ia-github-copilot/</guid>
                
                <category>AI</category>
                
                <category>agents</category>
                
                <category>github</category>
                
                <category>copilot</category>
                
                <category>LLM</category>
                
                
            </item>
        
            <item>
                <title>The AI &quot;harness&quot;: how a model becomes an agent — it&apos;s not rocket science!</title>
                <description>&lt;p&gt;Everyone talks about “the model”: GPT, Claude, Gemini… as if all the magic lived in the brain. Yet a model on its own can’t &lt;strong&gt;do&lt;/strong&gt; anything: it can’t see your code, it can’t run a command, it forgets everything from one sentence to the next. What turns that brain into a real &lt;strong&gt;agent&lt;/strong&gt; is a part we talk about far less: the &lt;strong&gt;harness&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So let’s pop the hood and look closely at the machinery. And you’ll see: it’s not rocket science.&lt;/p&gt;

&lt;!--more--&gt;

&lt;h2 id=&quot;the-through-line-an-over-powered-draft-horse&quot;&gt;The through-line: an over-powered draft horse&lt;/h2&gt;

&lt;p&gt;Picture an exceptional &lt;strong&gt;draft horse&lt;/strong&gt;. Phenomenal raw strength. But turned loose alone in a field, that power ploughs no furrow and pulls no cart. It just goes in circles.&lt;/p&gt;

&lt;p&gt;To turn it into useful work, you need a &lt;strong&gt;harness&lt;/strong&gt;: the blinkers that channel its focus, the reins that give it direction, and the hitch that finally connects the horse to the plough.&lt;/p&gt;

&lt;p&gt;An AI model is exactly that horse. The &lt;strong&gt;harness&lt;/strong&gt; is all the software we wrap around it to turn its raw power into concrete action: read a file, edit code, run a test, call a tool. The word isn’t mine — it’s the term the whole field uses. &lt;strong&gt;GitHub Copilot, Claude Code, Cursor… these are harnesses.&lt;/strong&gt; The model is swappable; the harness is what separates a pretty chatbot from a colleague who actually gets work done.&lt;/p&gt;

&lt;h2 id=&quot;first-a-model-on-its-own-what-can-it-do&quot;&gt;First, a model on its own: what can it do?&lt;/h2&gt;

&lt;p&gt;Honest answer: &lt;strong&gt;text, and nothing else.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A large language model (LLM) is a function. You give it text in, it gives you text out. It’s astonishing… but that’s all. As it stands, it suffers from three handicaps:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;It’s blind and handless.&lt;/strong&gt; It can’t open a file or run a command. It can only &lt;em&gt;describe&lt;/em&gt; what it would do.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;It’s amnesiac.&lt;/strong&gt; Every call starts from scratch. It has no memory of the previous sentence unless you feed it back in every time.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;It takes only one step.&lt;/strong&gt; One question, one answer. It can’t chain “I look → I fix → I check”.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The harness exists to compensate for those three handicaps. Let’s take its parts one by one.&lt;/p&gt;

&lt;h2 id=&quot;the-anatomy-of-a-harness-part-by-part&quot;&gt;The anatomy of a harness, part by part&lt;/h2&gt;

&lt;h3 id=&quot;1-the-agent-loop--the-beating-heart&quot;&gt;1. The agent loop — the beating heart&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The analogy:&lt;/strong&gt; it’s the foreman running the job site. He hands the horse an instruction, watches the result, decides what’s next, and starts again — until the work is done.&lt;/p&gt;

&lt;p&gt;This is &lt;strong&gt;the&lt;/strong&gt; central piece. A classic chatbot does one round trip: question → answer, done. An agent &lt;strong&gt;loops&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;The harness sends the model all the context it knows.&lt;/li&gt;
  &lt;li&gt;The model replies… but instead of a plain sentence, it can ask: “run this tool”.&lt;/li&gt;
  &lt;li&gt;The harness &lt;strong&gt;executes&lt;/strong&gt; the tool and &lt;strong&gt;feeds the result back&lt;/strong&gt; into the conversation.&lt;/li&gt;
  &lt;li&gt;Repeat — until the model declares: “done, I’ve finished”.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That “think → act → observe → repeat” loop is what turns a single reply into an &lt;strong&gt;autonomous sequence of actions&lt;/strong&gt;. Without it, there is no agent.&lt;/p&gt;

&lt;h3 id=&quot;2-the-tools--the-hands-and-the-eyes&quot;&gt;2. The tools — the hands and the eyes&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The analogy:&lt;/strong&gt; we finally give the brain hands to act and eyes to see.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;tool&lt;/strong&gt; is a function the harness exposes to the model, with a precise description: its name, what it does, the expected parameters. For example:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;read_file(path)&lt;/code&gt; — read a file,&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;edit(path, change)&lt;/code&gt; — modify code,&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;run_terminal(command)&lt;/code&gt; — run a command,&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;search(query)&lt;/code&gt; — search the project.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The model doesn’t &lt;em&gt;perform&lt;/em&gt; the action itself: it &lt;strong&gt;asks&lt;/strong&gt; the harness to do it, as a small structured message (“call &lt;code class=&quot;highlighter-rouge&quot;&gt;run_terminal&lt;/code&gt; with &lt;code class=&quot;highlighter-rouge&quot;&gt;dotnet test&lt;/code&gt;”). The harness runs it for real and reports back the result. That’s the difference between a model that &lt;em&gt;says&lt;/em&gt; it would run the tests… and an agent that actually runs them.&lt;/p&gt;

&lt;h3 id=&quot;3-the-system-prompt--the-house-rules-on-the-wall&quot;&gt;3. The system prompt — the house rules on the wall&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The analogy:&lt;/strong&gt; the house rules the horse “reads” before every task. Who it is, how it works, what it’s allowed to do.&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;system prompt&lt;/em&gt; is a block of text the harness places &lt;strong&gt;at the head of every conversation&lt;/strong&gt;, before your request even starts. It defines the agent’s personality, its rules, the catalogue of available tools, the expected format. It’s invisible to you, but it’s what makes one and the same model behave like a “careful coding assistant” rather than a chatty poet.&lt;/p&gt;

&lt;h3 id=&quot;4-context-management--a-desk-thats-too-small&quot;&gt;4. Context management — a desk that’s too small&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The analogy:&lt;/strong&gt; the model works on a tiny desk. You can’t spread the whole project on it at once. The harness is the librarian who decides &lt;strong&gt;which sheets to put on the desk&lt;/strong&gt; at any given moment.&lt;/p&gt;

&lt;p&gt;The model has a limited &lt;strong&gt;context window&lt;/strong&gt;: a maximum amount of text it can “see” at once. A real project never fits entirely. So the harness has to:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;select&lt;/strong&gt; what’s relevant (the right files, the right excerpts);&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;summarize&lt;/strong&gt; or &lt;strong&gt;compact&lt;/strong&gt; the history when the conversation grows too long;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;discard&lt;/strong&gt; what’s no longer useful.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s a delicate art: too little context and the model works blind; too much and it drowns — and costs a fortune. A harness’s quality is largely decided here.&lt;/p&gt;

&lt;h3 id=&quot;5-the-guardrails--the-handbrake&quot;&gt;5. The guardrails — the handbrake&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The analogy:&lt;/strong&gt; you don’t let the horse bolt toward the cliff. There are reins, a brake, and sometimes a fenced paddock.&lt;/p&gt;

&lt;p&gt;An agent that can run commands and edit files is powerful… and potentially dangerous. The harness adds &lt;strong&gt;guardrails&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;confirmation&lt;/strong&gt;: ask for your go-ahead before a sensitive action (delete, execute, push);&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;allow-lists&lt;/strong&gt;: &lt;code class=&quot;highlighter-rouge&quot;&gt;dotnet test&lt;/code&gt; goes through on its own, &lt;code class=&quot;highlighter-rouge&quot;&gt;rm -rf&lt;/code&gt; needs approval;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;sandboxing&lt;/strong&gt;: restrict access to files and the network.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without guardrails, an agent is a chainsaw with no guard. With them, it becomes a safe power tool.&lt;/p&gt;

&lt;h3 id=&quot;and-the-model-in-all-this&quot;&gt;And the model, in all this?&lt;/h3&gt;

&lt;p&gt;The model stays the &lt;strong&gt;horse&lt;/strong&gt;: the source of power. But in a good harness it’s &lt;strong&gt;swappable&lt;/strong&gt;. The same harness can hitch a GPT, a Claude or a Gemini, depending on the task, the budget or your preferences. The strength changes; the hitch stays.&lt;/p&gt;

&lt;h2 id=&quot;deep-dive-the-harness-at-work-inside-github-copilot&quot;&gt;Deep-dive: the harness at work inside GitHub Copilot&lt;/h2&gt;

&lt;p&gt;Enough theory. Let’s open a real harness and look at its gears. GitHub Copilot is a great case study, because it exposes &lt;strong&gt;every&lt;/strong&gt; part we just described — and offers them in several “body shapes”.&lt;/p&gt;

&lt;h3 id=&quot;the-swappable-brain-the-model-picker&quot;&gt;The swappable brain: the model picker&lt;/h3&gt;

&lt;p&gt;Copilot isn’t married to a single model. A &lt;strong&gt;picker&lt;/strong&gt; lets you choose your mount: OpenAI’s models (the GPT family and reasoning models), Anthropic’s (Claude Sonnet, Claude Opus), Google’s (Gemini)… The harness itself doesn’t change: it’s always the same loop, the same tools. You’re only swapping the horse under the harness — a fast model for small chores, a reasoning model for the heavy lifting. As for &lt;em&gt;which&lt;/em&gt; horse to hitch, that’s exactly the topic of &lt;a href=&quot;/2026/06/25/which-model-to-choose-github-copilot/&quot;&gt;my article on choosing the model&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;agent-mode-the-loop-in-action&quot;&gt;Agent mode: the loop in action&lt;/h3&gt;

&lt;p&gt;Copilot’s &lt;strong&gt;agent mode&lt;/strong&gt; (in VS Code, Visual Studio or JetBrains) is the agent loop in its purest form. You give a high-level goal; the agent &lt;strong&gt;plans&lt;/strong&gt;, edits multiple files, runs terminal commands, reads the errors, corrects itself, and starts over until it reaches the goal. It doesn’t stop at the first answer: it iterates.&lt;/p&gt;

&lt;p&gt;Here’s what a single goal looks like from the inside as it unspools the loop:&lt;/p&gt;

&lt;div class=&quot;language-text highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;You: &quot;Add a /health endpoint and its test.&quot;

┌─ Turn 1
│  🧠 Model : first I need to understand the structure.
│  🔧 Tool  : search(&quot;Program.cs&quot;)            → 1 result
├─ Turn 2
│  🧠 Model : I add the health route.
│  🔧 Tool  : edit(Program.cs, +8 lines)
├─ Turn 3
│  🧠 Model : I write the matching test.
│  🔧 Tool  : edit(HealthTests.cs, new file)
├─ Turn 4
│  🧠 Model : I check that everything passes.
│  🔧 Tool  : runInTerminal(&quot;dotnet test&quot;)     → ❌ 1 failed
├─ Turn 5
│  🧠 Model : a `using` is missing, I fix it.
│  🔧 Tool  : edit(HealthTests.cs, +1 line)
│  🔧 Tool  : runInTerminal(&quot;dotnet test&quot;)     → ✅ 12 passed
└─ ✅ Done.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Look at &lt;strong&gt;turn 4 → turn 5&lt;/strong&gt;: the agent runs the tests, sees a failure, understands the cause and fixes it &lt;strong&gt;on its own&lt;/strong&gt;. That ability to observe a result and bounce back is the whole value of the loop. A plain assistant would have stopped at turn 3 with “here’s the code, test it yourself”.&lt;/p&gt;

&lt;h3 id=&quot;the-built-in-tools--copilots-hands&quot;&gt;The built-in tools — Copilot’s hands&lt;/h3&gt;

&lt;p&gt;In agent mode, Copilot ships with a ready-made toolkit. Without being exhaustive:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;explore and search&lt;/strong&gt; the code (the &lt;em&gt;workspace&lt;/em&gt; index);&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;read and edit&lt;/strong&gt; files, in several places at once;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;run commands&lt;/strong&gt; in the terminal;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;run the tests&lt;/strong&gt; and read the errors (the &lt;em&gt;problems&lt;/em&gt;);&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;fetch a web page&lt;/strong&gt; for external docs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And above all, this toolkit is &lt;strong&gt;extensible via MCP&lt;/strong&gt; (&lt;em&gt;Model Context Protocol&lt;/em&gt;): you plug in your own in-house tools — database, Jira, monitoring, browser… — and they join the catalogue the model can call. The harness is no longer limited to your code: it reaches your whole ecosystem.&lt;/p&gt;

&lt;h3 id=&quot;how-copilot-fills-the-desk--context&quot;&gt;How Copilot fills the desk — context&lt;/h3&gt;

&lt;p&gt;Remember the too-small desk. Copilot furnishes it in several ways:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;automatically&lt;/strong&gt;: the open files, the current selection, a &lt;strong&gt;repository index&lt;/strong&gt; that lets it retrieve the right excerpt without loading everything;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;on demand&lt;/strong&gt;, when you point at things with &lt;code class=&quot;highlighter-rouge&quot;&gt;#&lt;/code&gt;-references (&lt;code class=&quot;highlighter-rouge&quot;&gt;#file&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;#selection&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;#codebase&lt;/code&gt;…) or &lt;code class=&quot;highlighter-rouge&quot;&gt;@&lt;/code&gt;-participants (&lt;code class=&quot;highlighter-rouge&quot;&gt;@workspace&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;@terminal&lt;/code&gt;);&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;permanently&lt;/strong&gt;, via your &lt;strong&gt;instructions&lt;/strong&gt; files (&lt;code class=&quot;highlighter-rouge&quot;&gt;.github/copilot-instructions.md&lt;/code&gt;), which restate your conventions on every turn.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s exactly the librarian’s job: deciding what deserves a spot on the desk. And this is where your customizations come in — a topic I covered in detail in &lt;a href=&quot;/2026/07/02/github-copilot-skills-instructions-agents-mcp/&quot;&gt;Skills, Instructions, Agents, MCP… it’s not rocket science!&lt;/a&gt;. Those files are, at heart, just &lt;strong&gt;better ways to pack the harness&lt;/strong&gt;.&lt;/p&gt;

&lt;h3 id=&quot;the-guardrails--copilot-doesnt-bolt-off&quot;&gt;The guardrails — Copilot doesn’t bolt off&lt;/h3&gt;

&lt;p&gt;Copilot applies every brake we’ve seen. Before running a terminal command, it &lt;strong&gt;asks for confirmation&lt;/strong&gt;. You can define &lt;strong&gt;allow-lists&lt;/strong&gt; (trusted commands go through without interruption, the rest don’t) and &lt;strong&gt;sandbox&lt;/strong&gt; local MCP servers to restrict their access. The principle: the agent proposes, but &lt;strong&gt;you keep control&lt;/strong&gt; of anything that really touches your machine.&lt;/p&gt;

&lt;h3 id=&quot;one-harness-three-body-shapes&quot;&gt;One harness, three body shapes&lt;/h3&gt;

&lt;p&gt;The most elegant part: it’s &lt;strong&gt;the same machinery&lt;/strong&gt; offered in three forms, depending on where you work.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Body shape&lt;/th&gt;
      &lt;th&gt;Where it runs&lt;/th&gt;
      &lt;th&gt;What it’s for&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;In the IDE&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;VS Code, Visual Studio, JetBrains&lt;/td&gt;
      &lt;td&gt;Completion, chat and agent mode, right next to your code&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;On the command line&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Copilot CLI, in the terminal&lt;/td&gt;
      &lt;td&gt;Drive the agent from the keyboard, without leaving the shell&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;In the cloud&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;em&gt;Coding agent&lt;/em&gt;, on GitHub Actions&lt;/td&gt;
      &lt;td&gt;You &lt;strong&gt;assign it an issue&lt;/strong&gt;: it works alone and opens a Pull Request&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;The &lt;em&gt;coding agent&lt;/em&gt; is the most spectacular: you hand it a GitHub ticket, it spins up an ephemeral environment, runs the exact same “think → act → observe” loop, and delivers a PR for you to review. Same harness, same loop, same tools — simply unplugged from your screen and plugged into a server.&lt;/p&gt;

&lt;h2 id=&quot;the-recap-the-parts-of-the-harness&quot;&gt;The recap: the parts of the harness&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Part&lt;/th&gt;
      &lt;th&gt;The image&lt;/th&gt;
      &lt;th&gt;Its role&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;The loop&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;The foreman&lt;/td&gt;
      &lt;td&gt;Chain think → act → observe until the goal&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;The tools&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;The hands and eyes&lt;/td&gt;
      &lt;td&gt;Read, edit, execute, search — act for real&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;The system prompt&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;The rules on the wall&lt;/td&gt;
      &lt;td&gt;Define who the agent is and its rules&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;The context&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;The librarian&lt;/td&gt;
      &lt;td&gt;Choose what to put on a too-small desk&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;The guardrails&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;The handbrake&lt;/td&gt;
      &lt;td&gt;Confirm, allow-list, sandbox&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;The model&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;The draft horse&lt;/td&gt;
      &lt;td&gt;The raw power — swappable&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;the-moral-of-the-story&quot;&gt;The moral of the story&lt;/h2&gt;

&lt;p&gt;Next time someone sells you “the new model that changes everything”, remember the draft horse. Raw power matters, of course. But what turns that power into real work — reading, fixing, testing, shipping — &lt;strong&gt;is the harness&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And understanding the harness changes how you see things: when you add instructions, a skill, an agent or an MCP server, you’re not “configuring a chatbot”. You’re &lt;strong&gt;adjusting the hitch&lt;/strong&gt; so the horse pulls straight.&lt;/p&gt;

&lt;p&gt;See the machinery now? The brain, the loop, the tools, the context, the brakes…&lt;/p&gt;

&lt;p&gt;And that, when you get down to it… is not rocket science.&lt;/p&gt;
</description>
                <pubDate>Wed, 01 Jul 2026 12:00:00 +0200</pubDate>
                <link>https://senseof.ai/2026/07/01/the-ai-harness-github-copilot/</link>
                <guid isPermaLink="true">https://senseof.ai/2026/07/01/the-ai-harness-github-copilot/</guid>
                
                <category>AI</category>
                
                <category>agents</category>
                
                <category>github</category>
                
                <category>copilot</category>
                
                <category>LLM</category>
                
                
            </item>
        
            <item>
                <title>GPT, Claude, Gemini… quel modèle choisir dans GitHub Copilot ? C&apos;est pas sorcier !</title>
                <description>&lt;p&gt;Vous ouvrez le sélecteur de modèles de GitHub Copilot et vous tombez sur une carte des vins : GPT-5.5, Claude Opus 4.8, Gemini 3.5 Flash, Haiku, Sonnet, mini, nano, Codex… Lequel prendre ? Le plus récent ? Le plus cher ? Celui avec le plus grand numéro ?&lt;/p&gt;

&lt;p&gt;Spoiler : la question « quel est le meilleur modèle ? » est mal posée. La bonne question, c’est « &lt;strong&gt;le meilleur pour quoi faire ?&lt;/strong&gt; ». On va démonter la mécanique — pourquoi un modèle n’est pas l’autre — puis je vous donne une méthode toute simple pour trouver &lt;strong&gt;le vôtre&lt;/strong&gt;, chiffres à l’appui. Et vous allez voir : c’est pas sorcier.&lt;/p&gt;

&lt;!--more--&gt;

&lt;h2 id=&quot;le-fil-rouge--personne-ne-demande--quel-est-le-meilleur-véhicule--&quot;&gt;Le fil rouge : personne ne demande « quel est le meilleur véhicule ? »&lt;/h2&gt;

&lt;p&gt;Imaginez la question posée dans un garage : « quel est le meilleur véhicule ? » Le vendeur vous regarderait bizarrement. Le meilleur… pour quoi ? Aller chercher le pain ? La citadine. Déménager un piano ? Le camion. Rouler tous les jours ? La berline polyvalente.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Un modèle d’IA, c’est un véhicule.&lt;/strong&gt; Il y a des citadines nerveuses, des berlines fiables, des semi-remorques capables de tracter l’impossible — mais lents et gourmands. Et comme au garage, tout se joue sur une poignée de caractéristiques mesurables. Regardons lesquelles.&lt;/p&gt;

&lt;h2 id=&quot;pourquoi-un-modèle-nest-pas-lautre--les-5-différences-qui-comptent&quot;&gt;Pourquoi un modèle n’est pas l’autre : les 5 différences qui comptent&lt;/h2&gt;

&lt;h3 id=&quot;1-la-cylindrée--la-taille-du-modèle&quot;&gt;1. La cylindrée — la taille du modèle&lt;/h3&gt;

&lt;p&gt;Un modèle, c’est un moteur fait de milliards de « réglages » internes (les &lt;em&gt;paramètres&lt;/em&gt;). Plus il y en a, plus le modèle capte de nuances… mais plus chaque mot généré coûte du calcul. C’est physique : &lt;strong&gt;chaque mot de la réponse doit traverser tout le moteur&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;D’où les gammes que vous voyez partout : &lt;em&gt;nano&lt;/em&gt;, &lt;em&gt;mini&lt;/em&gt;, &lt;em&gt;Flash&lt;/em&gt;, &lt;em&gt;Haiku&lt;/em&gt; d’un côté (petites cylindrées, réponses quasi instantanées), &lt;em&gt;Opus&lt;/em&gt; ou les gros GPT de l’autre (grosses cylindrées, plus futées mais plus lentes et plus chères).&lt;/p&gt;

&lt;h3 id=&quot;2-le-vécu-du-conducteur--lentraînement&quot;&gt;2. Le vécu du conducteur — l’entraînement&lt;/h3&gt;

&lt;p&gt;Deux véhicules identiques ne se conduisent pas pareil selon qui est au volant. Deux modèles de taille comparable ne « pensent » pas pareil non plus : tout dépend de &lt;strong&gt;ce qu’on leur a appris&lt;/strong&gt;, et de comment.&lt;/p&gt;

&lt;p&gt;C’est pour ça que certains modèles du sélecteur sont des &lt;strong&gt;spécialistes du code&lt;/strong&gt; : GPT-5.3-Codex, Raptor mini (un GPT-5 mini ré-entraîné spécialement pour la complétion), Kimi-K2.7-Code… À taille égale, un modèle spécialisé bat souvent un généraliste sur son terrain. Comme un chauffeur-livreur connaît mieux les ruelles qu’un pilote de F1.&lt;/p&gt;

&lt;h3 id=&quot;3-larrêt-carte-routière--le-raisonnement&quot;&gt;3. L’arrêt carte routière — le raisonnement&lt;/h3&gt;

&lt;p&gt;Certains modèles répondent au fil de la plume. D’autres — les modèles « de raisonnement » — &lt;strong&gt;s’arrêtent d’abord sur le bas-côté pour étudier la carte&lt;/strong&gt; : ils produisent un brouillon interne, explorent des pistes, se corrigent, puis seulement répondent.&lt;/p&gt;

&lt;p&gt;Sur un problème retors (un bug vicieux, une architecture à repenser), cet arrêt change tout. Pour renommer une variable ? C’est payer un détour d’autoroute pour aller au bout de la rue. Le raisonnement est un &lt;strong&gt;super-pouvoir facturé&lt;/strong&gt; : du temps et des tokens en plus.&lt;/p&gt;

&lt;h3 id=&quot;4-la-taille-du-coffre--la-fenêtre-de-contexte&quot;&gt;4. La taille du coffre — la fenêtre de contexte&lt;/h3&gt;

&lt;p&gt;Chaque modèle a une limite de texte qu’il peut « voir » d’un coup : sa &lt;strong&gt;fenêtre de contexte&lt;/strong&gt;. Petite fenêtre : quelques fichiers. Grande fenêtre : certains modèles montent aujourd’hui à &lt;strong&gt;un million de tokens&lt;/strong&gt; (dans VS Code et Copilot CLI), de quoi embarquer une grosse partie du projet.&lt;/p&gt;

&lt;p&gt;Mais attention au réflexe « plus grand = mieux » : un grand coffre ne sert que &lt;strong&gt;si vous avez des bagages&lt;/strong&gt;. Pour une question de syntaxe, il ne vous apporte rien — et le remplir coûte de l’argent, on y vient.&lt;/p&gt;

&lt;h3 id=&quot;5-la-consommation--le-coût&quot;&gt;5. La consommation — le coût&lt;/h3&gt;

&lt;p&gt;Depuis le &lt;strong&gt;1ᵉʳ juin 2026&lt;/strong&gt;, Copilot est passé à la facturation à l’usage : chaque échange consomme des &lt;strong&gt;AI Credits&lt;/strong&gt; (1 crédit = 0,01 $) selon les tokens envoyés au modèle, générés par lui, et mis en cache. Trois choses à savoir, ordres de grandeur au moment où j’écris (&lt;a href=&quot;https://docs.github.com/en/copilot/reference/copilot-billing/models-and-pricing&quot;&gt;tarifs officiels&lt;/a&gt;) :&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;L’écart entre gammes est énorme&lt;/strong&gt; : ~0,20 à 0,50 $ le million de tokens d’entrée pour les légers, ~2 à 2,50 $ pour les polyvalents, &lt;strong&gt;4 à 10 $ pour les puissants&lt;/strong&gt;. Du simple au vingtuple.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;La sortie coûte 4 à 10× plus cher que l’entrée&lt;/strong&gt; : un modèle bavard se paie.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Le cache réduit l’entrée d’environ 90 %&lt;/strong&gt; : rester dans la même conversation bien contextée coûte moins cher que tout renvoyer à chaque fois.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Un exemple pour fixer les idées : un aller-retour qui envoie ~50 000 tokens de contexte et en génère 5 000 coûte grosso modo &lt;strong&gt;2 crédits sur une citadine… et 40 à 50 sur un semi-remorque&lt;/strong&gt;. Même conversation, facture ×20. Voilà pourquoi « je mets le plus gros modèle partout » est une stratégie de millionnaire.&lt;/p&gt;

&lt;h2 id=&quot;le-parking-copilot-en-juin-2026&quot;&gt;Le parking Copilot en juin 2026&lt;/h2&gt;

&lt;p&gt;Voici la gamme actuelle, rangée par vocation. La liste bouge tous les mois (des nouveaux comme Claude Fable 5 arrivent, d’autres partent à la retraite) : la référence reste &lt;a href=&quot;https://docs.github.com/en/copilot/reference/ai-models/supported-models&quot;&gt;la liste officielle&lt;/a&gt; et &lt;a href=&quot;https://docs.github.com/en/copilot/reference/ai-models/model-comparison&quot;&gt;le comparatif officiel&lt;/a&gt;.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;La gamme&lt;/th&gt;
      &lt;th&gt;Les modèles (extraits)&lt;/th&gt;
      &lt;th&gt;Taillés pour&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Les citadines&lt;/strong&gt; — légers, vifs, sobres&lt;/td&gt;
      &lt;td&gt;Claude Haiku 4.5, Gemini 3.5 Flash, GPT-5 mini / 5.4 nano&lt;/td&gt;
      &lt;td&gt;Questions rapides, petites retouches, prototypage léger&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Les berlines&lt;/strong&gt; — les polyvalents du quotidien&lt;/td&gt;
      &lt;td&gt;Claude Sonnet 5 (et 4.6), GPT-5.4, MAI-Code-1-Flash&lt;/td&gt;
      &lt;td&gt;Le gros du travail : coder, expliquer, tester&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Les semi-remorques&lt;/strong&gt; — raisonnement profond&lt;/td&gt;
      &lt;td&gt;Claude Opus 4.8, GPT-5.5, Gemini 3.1 Pro&lt;/td&gt;
      &lt;td&gt;Refactorings multi-fichiers, debug retors, décisions d’architecture&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Les utilitaires spécialisés&lt;/strong&gt; — fine-tunés code&lt;/td&gt;
      &lt;td&gt;GPT-5.3-Codex, Raptor mini, Kimi-K2.7-Code&lt;/td&gt;
      &lt;td&gt;Tâches d’ingénierie pures, complétion affûtée&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Bonus : certains modèles acceptent aussi les &lt;strong&gt;images&lt;/strong&gt; (GPT-5 mini, Claude Sonnet 4.6, Gemini 3.1 Pro) — pratique pour partir d’une capture d’écran ou d’une maquette.&lt;/p&gt;

&lt;h2 id=&quot;le-banc-dessai-maison--trouvez-votre-modèle-en-une-heure&quot;&gt;Le banc d’essai maison : trouvez VOTRE modèle en une heure&lt;/h2&gt;

&lt;p&gt;Les classements publics ne répondent pas à la seule question qui compte : le meilleur &lt;strong&gt;pour vos tâches à vous&lt;/strong&gt;, votre codebase, vos habitudes. La bonne nouvelle : faire votre propre essai routier est à la portée de tout le monde. Cinq étapes.&lt;/p&gt;

&lt;h3 id=&quot;étape-1--choisissez-vos-3-trajets-types&quot;&gt;Étape 1 — Choisissez vos 3 trajets types&lt;/h3&gt;

&lt;p&gt;Prenez trois tâches &lt;strong&gt;réelles et récentes&lt;/strong&gt; de votre quotidien — pas des exercices inventés. Par exemple :&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;une &lt;strong&gt;course&lt;/strong&gt; : corriger un test cassé, écrire une petite fonction ;&lt;/li&gt;
  &lt;li&gt;un &lt;strong&gt;trajet quotidien&lt;/strong&gt; : ajouter une fonctionnalité de taille moyenne ;&lt;/li&gt;
  &lt;li&gt;un &lt;strong&gt;déménagement&lt;/strong&gt; : un refactoring multi-fichiers ou une question d’architecture.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;étape-2--sélectionnez-3-candidats&quot;&gt;Étape 2 — Sélectionnez 3 candidats&lt;/h3&gt;

&lt;p&gt;Un par gamme suffit pour commencer : une citadine, une berline, un semi-remorque. Inutile de tester douze modèles — vous comparez des &lt;strong&gt;gammes&lt;/strong&gt;, pas des étiquettes.&lt;/p&gt;

&lt;h3 id=&quot;étape-3--roulez-proprement&quot;&gt;Étape 3 — Roulez proprement&lt;/h3&gt;

&lt;p&gt;C’est l’étape que tout le monde rate. Pour que la comparaison vaille quelque chose :&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;même prompt&lt;/strong&gt;, copié-collé à l’identique ;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;même contexte&lt;/strong&gt; (mêmes fichiers ouverts, mêmes &lt;code class=&quot;highlighter-rouge&quot;&gt;#&lt;/code&gt;-références) ;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;conversation neuve&lt;/strong&gt; à chaque essai — un historique pollué fausse tout ;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;deux passages&lt;/strong&gt; par modèle : une seule réponse ne prouve rien, les modèles ont de la variance.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;étape-4--notez-sur-une-grille&quot;&gt;Étape 4 — Notez sur une grille&lt;/h3&gt;

&lt;p&gt;Quatre colonnes, pas plus :&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Qualité&lt;/strong&gt; (le résultat est-il juste, complet, idiomatique ?) — sur 5 ;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Allers-retours&lt;/strong&gt; nécessaires avant un résultat acceptable ;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Temps&lt;/strong&gt; ressenti ;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Crédits&lt;/strong&gt; consommés (visibles sur la page d’usage de votre compte GitHub).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Voici à quoi ça peut ressembler — chiffres &lt;strong&gt;fictifs&lt;/strong&gt;, pour l’exemple :&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Tâche&lt;/th&gt;
      &lt;th&gt;Citadine (Haiku 4.5)&lt;/th&gt;
      &lt;th&gt;Berline (Sonnet 5)&lt;/th&gt;
      &lt;th&gt;Semi (Opus 4.8)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Corriger un test cassé&lt;/td&gt;
      &lt;td&gt;4/5 · 1 échange · ~2 crédits&lt;/td&gt;
      &lt;td&gt;5/5 · 1 échange · ~8 crédits&lt;/td&gt;
      &lt;td&gt;5/5 · 1 échange · ~40 crédits&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Ajouter une fonctionnalité&lt;/td&gt;
      &lt;td&gt;2/5 · 4 échanges · ~10 crédits&lt;/td&gt;
      &lt;td&gt;4/5 · 2 échanges · ~20 crédits&lt;/td&gt;
      &lt;td&gt;5/5 · 1 échange · ~45 crédits&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Question d’architecture&lt;/td&gt;
      &lt;td&gt;1/5 · abandonné&lt;/td&gt;
      &lt;td&gt;3/5 · 3 échanges · ~30 crédits&lt;/td&gt;
      &lt;td&gt;5/5 · 1 échange · ~60 crédits&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;étape-5--le-verdict-par-type-de-tâche&quot;&gt;Étape 5 — Le verdict… par type de tâche&lt;/h3&gt;

&lt;p&gt;Lisez la grille &lt;strong&gt;ligne par ligne&lt;/strong&gt;, jamais en score global. Dans l’exemple ci-dessus, le verdict n’est pas « Opus gagne » : c’est « Haiku suffit largement pour les courses (20× moins cher !), Sonnet est ma berline, et Opus vaut chaque centime sur l’architecture — et uniquement là ».&lt;/p&gt;

&lt;p&gt;Refaites l’exercice tous les deux ou trois mois : les modèles changent vite, votre classement aussi.&lt;/p&gt;

&lt;h2 id=&quot;les-4-pièges-du-comparateur-amateur&quot;&gt;Les 4 pièges du comparateur amateur&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;L’effet démo.&lt;/strong&gt; Une réponse assurée et bien rédigée n’est pas une réponse juste. Vérifiez le fond (lancez les tests !), pas le style.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Le jugement sur un seul essai.&lt;/strong&gt; La variance existe. Deux passages minimum avant de conclure.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;L’historique qui triche.&lt;/strong&gt; Si le modèle B passe après le modèle A dans la même conversation, il hérite de ses indices. Conversation neuve, toujours.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Oublier la colonne coût.&lt;/strong&gt; Une réponse 5 % meilleure pour 20× le prix, c’est rarement une bonne affaire — sauf le jour du déménagement.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;la-règle-simple-à-retenir&quot;&gt;La règle simple à retenir&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Par défaut : la berline.&lt;/strong&gt; Un polyvalent couvre 80 % de vos journées.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Pour les courses : la citadine.&lt;/strong&gt; Question rapide, petite retouche → modèle léger, réponse immédiate, coût dérisoire.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Quand ça coince : le semi-remorque.&lt;/strong&gt; Deux allers-retours sans progrès sur un problème complexe ? Montez en gamme, posez le problème une bonne fois. Puis &lt;strong&gt;redescendez&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Si votre quotidien est du code pur : essayez un utilitaire spécialisé.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Et surtout : ne croyez ni les benchmarks, ni les influenceurs, ni moi. &lt;strong&gt;Croyez votre grille.&lt;/strong&gt; Trois tâches, trois modèles, une heure d’essai routier — c’est tout ce qu’il faut pour savoir ce qui roule le mieux chez vous.&lt;/p&gt;

&lt;p&gt;Un modèle n’est pas l’autre : pas parce que le marketing le dit, mais parce que la cylindrée, l’entraînement, le raisonnement, le coffre et la consommation diffèrent — et maintenant, vous savez lire la fiche technique.&lt;/p&gt;

&lt;p&gt;Et ça, mine de rien… c’est pas sorcier.&lt;/p&gt;
</description>
                <pubDate>Thu, 25 Jun 2026 12:00:00 +0200</pubDate>
                <link>https://senseof.ai/fr/2026/06/25/quel-modele-choisir-github-copilot/</link>
                <guid isPermaLink="true">https://senseof.ai/fr/2026/06/25/quel-modele-choisir-github-copilot/</guid>
                
                <category>github</category>
                
                <category>copilot</category>
                
                <category>AI</category>
                
                <category>LLM</category>
                
                <category>models</category>
                
                
            </item>
        
            <item>
                <title>GPT, Claude, Gemini… which model should you pick in GitHub Copilot? It&apos;s not rocket science!</title>
                <description>&lt;p&gt;You open GitHub Copilot’s model picker and land on a wine list: GPT-5.5, Claude Opus 4.8, Gemini 3.5 Flash, Haiku, Sonnet, mini, nano, Codex… Which one do you take? The newest? The priciest? The one with the biggest number?&lt;/p&gt;

&lt;p&gt;Spoiler: the question “which model is the best?” is the wrong question. The right one is “&lt;strong&gt;the best for what?&lt;/strong&gt;”. We’re going to take the machinery apart — why one model is not another — and then I’ll give you a dead-simple method to find &lt;strong&gt;yours&lt;/strong&gt;, numbers included. And you’ll see: it’s not rocket science.&lt;/p&gt;

&lt;!--more--&gt;

&lt;h2 id=&quot;the-through-line-nobody-asks-whats-the-best-vehicle&quot;&gt;The through-line: nobody asks “what’s the best vehicle?”&lt;/h2&gt;

&lt;p&gt;Picture the question asked at a car dealership: “what’s the best vehicle?” The salesman would give you a strange look. The best… for what? Picking up bread? The city car. Moving a piano? The truck. Daily commuting? The all-round sedan.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;An AI model is a vehicle.&lt;/strong&gt; There are nimble city cars, dependable sedans, and semi-trailers that can tow the impossible — but slow and thirsty. And just like at the dealership, everything comes down to a handful of measurable characteristics. Let’s look at them.&lt;/p&gt;

&lt;h2 id=&quot;why-one-model-is-not-another-the-5-differences-that-matter&quot;&gt;Why one model is not another: the 5 differences that matter&lt;/h2&gt;

&lt;h3 id=&quot;1-engine-size--the-models-size&quot;&gt;1. Engine size — the model’s size&lt;/h3&gt;

&lt;p&gt;A model is an engine made of billions of internal “dials” (the &lt;em&gt;parameters&lt;/em&gt;). More dials means the model picks up more nuance… but every generated word costs more compute. It’s physics: &lt;strong&gt;each word of the answer has to travel through the whole engine&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Hence the ranges you see everywhere: &lt;em&gt;nano&lt;/em&gt;, &lt;em&gt;mini&lt;/em&gt;, &lt;em&gt;Flash&lt;/em&gt;, &lt;em&gt;Haiku&lt;/em&gt; on one side (small engines, near-instant answers), &lt;em&gt;Opus&lt;/em&gt; and the big GPTs on the other (big engines, smarter but slower and pricier).&lt;/p&gt;

&lt;h3 id=&quot;2-the-drivers-experience--the-training&quot;&gt;2. The driver’s experience — the training&lt;/h3&gt;

&lt;p&gt;Two identical vehicles don’t drive the same depending on who’s behind the wheel. Two models of comparable size don’t “think” the same either: it all depends on &lt;strong&gt;what they were taught&lt;/strong&gt;, and how.&lt;/p&gt;

&lt;p&gt;That’s why some models in the picker are &lt;strong&gt;code specialists&lt;/strong&gt;: GPT-5.3-Codex, Raptor mini (a GPT-5 mini re-trained specifically for completion), Kimi-K2.7-Code… At equal size, a specialist often beats a generalist on its home turf. Just like a delivery driver knows the back alleys better than an F1 pilot.&lt;/p&gt;

&lt;h3 id=&quot;3-the-roadmap-stop--reasoning&quot;&gt;3. The roadmap stop — reasoning&lt;/h3&gt;

&lt;p&gt;Some models answer straight off the pen. Others — the “reasoning” models — &lt;strong&gt;pull over first to study the map&lt;/strong&gt;: they produce an internal draft, explore leads, correct themselves, and only then answer.&lt;/p&gt;

&lt;p&gt;On a thorny problem (a vicious bug, an architecture to rethink), that stop changes everything. To rename a variable? It’s paying a highway detour to reach the end of your street. Reasoning is a &lt;strong&gt;billed super-power&lt;/strong&gt;: extra time and extra tokens.&lt;/p&gt;

&lt;h3 id=&quot;4-trunk-size--the-context-window&quot;&gt;4. Trunk size — the context window&lt;/h3&gt;

&lt;p&gt;Every model has a limit on the text it can “see” at once: its &lt;strong&gt;context window&lt;/strong&gt;. Small window: a few files. Large window: some models now reach &lt;strong&gt;one million tokens&lt;/strong&gt; (in VS Code and Copilot CLI), enough to carry a big chunk of the project.&lt;/p&gt;

&lt;p&gt;But beware the “bigger = better” reflex: a big trunk only helps &lt;strong&gt;if you have luggage&lt;/strong&gt;. For a syntax question it brings you nothing — and filling it costs money, as we’re about to see.&lt;/p&gt;

&lt;h3 id=&quot;5-fuel-consumption--the-cost&quot;&gt;5. Fuel consumption — the cost&lt;/h3&gt;

&lt;p&gt;Since &lt;strong&gt;June 1, 2026&lt;/strong&gt;, Copilot has moved to usage-based billing: every exchange consumes &lt;strong&gt;AI Credits&lt;/strong&gt; (1 credit = $0.01) based on the tokens sent to the model, generated by it, and cached. Three things to know, orders of magnitude as I write (&lt;a href=&quot;https://docs.github.com/en/copilot/reference/copilot-billing/models-and-pricing&quot;&gt;official pricing&lt;/a&gt;):&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;The gap between ranges is huge&lt;/strong&gt;: ~$0.20–0.50 per million input tokens for the light models, ~$2–2.50 for the versatile ones, &lt;strong&gt;$4–10 for the powerful ones&lt;/strong&gt;. A factor of twenty.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Output costs 4–10× more than input&lt;/strong&gt;: a chatty model comes at a price.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Caching cuts input cost by about 90%&lt;/strong&gt;: staying in one well-set-up conversation is cheaper than resending everything each time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One example to make it concrete: a round trip that sends ~50,000 tokens of context and generates 5,000 costs roughly &lt;strong&gt;2 credits on a city car… and 40–50 on a semi-trailer&lt;/strong&gt;. Same conversation, 20× the bill. That’s why “I’ll just use the biggest model everywhere” is a millionaire’s strategy.&lt;/p&gt;

&lt;h2 id=&quot;the-copilot-parking-lot-june-2026&quot;&gt;The Copilot parking lot, June 2026&lt;/h2&gt;

&lt;p&gt;Here is the current lineup, sorted by vocation. The list moves every month (newcomers like Claude Fable 5 arrive, others retire): the reference remains &lt;a href=&quot;https://docs.github.com/en/copilot/reference/ai-models/supported-models&quot;&gt;the official list&lt;/a&gt; and &lt;a href=&quot;https://docs.github.com/en/copilot/reference/ai-models/model-comparison&quot;&gt;the official comparison&lt;/a&gt;.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;The range&lt;/th&gt;
      &lt;th&gt;The models (excerpt)&lt;/th&gt;
      &lt;th&gt;Built for&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;The city cars&lt;/strong&gt; — light, quick, frugal&lt;/td&gt;
      &lt;td&gt;Claude Haiku 4.5, Gemini 3.5 Flash, GPT-5 mini / 5.4 nano&lt;/td&gt;
      &lt;td&gt;Quick questions, small edits, lightweight prototyping&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;The sedans&lt;/strong&gt; — the everyday all-rounders&lt;/td&gt;
      &lt;td&gt;Claude Sonnet 5 (and 4.6), GPT-5.4, MAI-Code-1-Flash&lt;/td&gt;
      &lt;td&gt;The bulk of the work: coding, explaining, testing&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;The semi-trailers&lt;/strong&gt; — deep reasoning&lt;/td&gt;
      &lt;td&gt;Claude Opus 4.8, GPT-5.5, Gemini 3.1 Pro&lt;/td&gt;
      &lt;td&gt;Multi-file refactorings, gnarly debugging, architecture decisions&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;The specialized vans&lt;/strong&gt; — fine-tuned for code&lt;/td&gt;
      &lt;td&gt;GPT-5.3-Codex, Raptor mini, Kimi-K2.7-Code&lt;/td&gt;
      &lt;td&gt;Pure engineering tasks, razor-sharp completion&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Bonus: some models also accept &lt;strong&gt;images&lt;/strong&gt; (GPT-5 mini, Claude Sonnet 4.6, Gemini 3.1 Pro) — handy for starting from a screenshot or a mockup.&lt;/p&gt;

&lt;h2 id=&quot;the-home-test-bench-find-your-model-in-an-hour&quot;&gt;The home test bench: find YOUR model in an hour&lt;/h2&gt;

&lt;p&gt;Public leaderboards don’t answer the only question that matters: the best &lt;strong&gt;for your own tasks&lt;/strong&gt;, your codebase, your habits. The good news: running your own road test is within everyone’s reach. Five steps.&lt;/p&gt;

&lt;h3 id=&quot;step-1--pick-your-3-typical-trips&quot;&gt;Step 1 — Pick your 3 typical trips&lt;/h3&gt;

&lt;p&gt;Take three &lt;strong&gt;real, recent&lt;/strong&gt; tasks from your daily work — not made-up exercises. For example:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;an &lt;strong&gt;errand&lt;/strong&gt;: fix a broken test, write a small function;&lt;/li&gt;
  &lt;li&gt;a &lt;strong&gt;daily commute&lt;/strong&gt;: add a medium-sized feature;&lt;/li&gt;
  &lt;li&gt;a &lt;strong&gt;house move&lt;/strong&gt;: a multi-file refactoring or an architecture question.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;step-2--select-3-candidates&quot;&gt;Step 2 — Select 3 candidates&lt;/h3&gt;

&lt;p&gt;One per range is enough to start: a city car, a sedan, a semi-trailer. No need to test twelve models — you’re comparing &lt;strong&gt;ranges&lt;/strong&gt;, not badges.&lt;/p&gt;

&lt;h3 id=&quot;step-3--drive-clean&quot;&gt;Step 3 — Drive clean&lt;/h3&gt;

&lt;p&gt;This is the step everyone gets wrong. For the comparison to be worth anything:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;same prompt&lt;/strong&gt;, copy-pasted identically;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;same context&lt;/strong&gt; (same open files, same &lt;code class=&quot;highlighter-rouge&quot;&gt;#&lt;/code&gt;-references);&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;fresh conversation&lt;/strong&gt; for every run — a polluted history skews everything;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;two runs&lt;/strong&gt; per model: a single answer proves nothing, models have variance.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;step-4--score-on-a-grid&quot;&gt;Step 4 — Score on a grid&lt;/h3&gt;

&lt;p&gt;Four columns, no more:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Quality&lt;/strong&gt; (is the result correct, complete, idiomatic?) — out of 5;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Round trips&lt;/strong&gt; needed to reach an acceptable result;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Time&lt;/strong&gt; as experienced;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Credits&lt;/strong&gt; consumed (visible on your GitHub account’s usage page).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here’s what it can look like — &lt;strong&gt;fictional&lt;/strong&gt; numbers, for the sake of the example:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Task&lt;/th&gt;
      &lt;th&gt;City car (Haiku 4.5)&lt;/th&gt;
      &lt;th&gt;Sedan (Sonnet 5)&lt;/th&gt;
      &lt;th&gt;Semi (Opus 4.8)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Fix a broken test&lt;/td&gt;
      &lt;td&gt;4/5 · 1 exchange · ~2 credits&lt;/td&gt;
      &lt;td&gt;5/5 · 1 exchange · ~8 credits&lt;/td&gt;
      &lt;td&gt;5/5 · 1 exchange · ~40 credits&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Add a feature&lt;/td&gt;
      &lt;td&gt;2/5 · 4 exchanges · ~10 credits&lt;/td&gt;
      &lt;td&gt;4/5 · 2 exchanges · ~20 credits&lt;/td&gt;
      &lt;td&gt;5/5 · 1 exchange · ~45 credits&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Architecture question&lt;/td&gt;
      &lt;td&gt;1/5 · gave up&lt;/td&gt;
      &lt;td&gt;3/5 · 3 exchanges · ~30 credits&lt;/td&gt;
      &lt;td&gt;5/5 · 1 exchange · ~60 credits&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;step-5--the-verdict-per-task-type&quot;&gt;Step 5 — The verdict… per task type&lt;/h3&gt;

&lt;p&gt;Read the grid &lt;strong&gt;row by row&lt;/strong&gt;, never as a global score. In the example above, the verdict is not “Opus wins”: it’s “Haiku is plenty for errands (20× cheaper!), Sonnet is my sedan, and Opus is worth every cent on architecture — and only there”.&lt;/p&gt;

&lt;p&gt;Redo the exercise every two or three months: models change fast, and so will your ranking.&lt;/p&gt;

&lt;h2 id=&quot;the-4-traps-of-the-amateur-comparer&quot;&gt;The 4 traps of the amateur comparer&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;The demo effect.&lt;/strong&gt; A confident, well-written answer is not a correct answer. Check the substance (run the tests!), not the style.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Judging on a single run.&lt;/strong&gt; Variance is real. Two runs minimum before concluding.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The cheating history.&lt;/strong&gt; If model B runs after model A in the same conversation, it inherits its clues. Fresh conversation, always.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Forgetting the cost column.&lt;/strong&gt; An answer that’s 5% better for 20× the price is rarely a good deal — except on moving day.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;the-simple-rule-to-remember&quot;&gt;The simple rule to remember&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;By default: the sedan.&lt;/strong&gt; An all-rounder covers 80% of your days.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;For errands: the city car.&lt;/strong&gt; Quick question, small edit → light model, instant answer, negligible cost.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;When you’re stuck: the semi-trailer.&lt;/strong&gt; Two round trips with no progress on a complex problem? Move up a range, state the problem properly once. Then &lt;strong&gt;come back down&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;If your daily work is pure code: try a specialized van.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And above all: don’t trust the benchmarks, the influencers, or me. &lt;strong&gt;Trust your grid.&lt;/strong&gt; Three tasks, three models, one hour of road testing — that’s all it takes to know what drives best at your place.&lt;/p&gt;

&lt;p&gt;One model is not another: not because marketing says so, but because the engine size, the training, the reasoning, the trunk and the fuel consumption differ — and now you know how to read the spec sheet.&lt;/p&gt;

&lt;p&gt;And that, when you get down to it… is not rocket science.&lt;/p&gt;
</description>
                <pubDate>Thu, 25 Jun 2026 12:00:00 +0200</pubDate>
                <link>https://senseof.ai/2026/06/25/which-model-to-choose-github-copilot/</link>
                <guid isPermaLink="true">https://senseof.ai/2026/06/25/which-model-to-choose-github-copilot/</guid>
                
                <category>github</category>
                
                <category>copilot</category>
                
                <category>AI</category>
                
                <category>LLM</category>
                
                <category>models</category>
                
                
            </item>
        
    </channel>
</rss>