Qu'est ce qu'un harnais IA ?
Sujet avancéLors de mon dernier atelier cours-socrate.ai, j'ai eu le besoin d'expliquer aux élèves présents la différence entre harnais IA, modèle IA, Agent IA et IA, tout court.
Agent et harnais sont des vocables assez récents que l'on a vu apparaître ces deux dernières années et il peut être utile de les distinguer de modèle et d'IA tout court.
| Terme | Ce que c'est | Nature | Exemples |
|---|---|---|---|
| Modèle | Les milliards de paramètres + l'algorithme qui produit le mot suivant | mathématique | Sonnet 5, Fable 5.1, Qwen 3.8, GPT 6 Astra, Deepseek V4 Flash, Gemini 3.8 Flash |
| Harnais | Le texte ajouté au contexte + la couche software qui agit | informatique | Claude Code, Codex, Cursor, Pi, OpenCode, Hermes, Openclaw |
| Agent | Un modèle et son harnais, mis ensemble | les deux | Pi + Qwen 3.8 27B; Claude code + Claude Opus 5 |
Le reste de l'article apporte une explication à chacune de ces lignes, autour d'un exemple concret.
Qu'est-ce qu'un modèle IA ?
Le modèle, on peut dire que c'est le moteur, la base sur laquelle repose le harnais. Sonnet 5, Fable 5.1, GPT 6 Astra, Gemini 3.8 Flash, etc. En général on les nomme avec leur version à côté (ex : Fable 5.1).
Le modèle, c'est d'abord les milliards de nombres (aussi appelés poids ou paramètres) qui permettent de déterminer le prochain mot que la machine va vous dire. Et c'est ensuite la gigantesque succession d'opérations (sommes et multiplications) que réalise l'ordinateur pour déterminer ce prochain mot.
Le modèle, en fin de compte, c'est à la fois ces milliards de nombres et cette succession d'opérations qu'on appelle aussi algorithme.
C'est aussi la partie la plus mathématique de l'IA. Les milliards de paramètres ont été ajustés peu à peu (on dit aussi que le modèle a été entraîné) sur des quantités astronomiques de texte, de façon à produire du texte qui ait du sens et qui soit utile pour les utilisateurs (c'est-à-dire nous).
Au final, lorsque vous parlez au modèle IA :
- les mots que vous écrivez sont convertis en nombres ;
- ceux-ci suivent la succession d'opérations avec les paramètres du modèle décrite plus haut ;
- le modèle sort le premier mot de la réponse ;
- en se basant sur ce premier mot, il réitère les opérations précédentes pour produire les mots suivants.

Je ne m'appesantis pas plus sur le modèle qui n'est pas le sujet principal de cet article. Venons en au coeur du sujet : le harnais.
Qu'est ce qu'un harnais IA ?
À partir de là, le harnais se « pose » sur le modèle. On appelle ça harnais car ça se compare tout à fait au harnais qui se pose sur les chevaux d'une calèche : le harnais s'accroche au cheval pour transmettre la puissance du cheval à la calèche, comme le harnais IA s'accroche au modèle pour transmettre la puissance du modèle à l'utilisateur.
Pour comparer aux noms de modèles indiqués plus haut, voici quelques noms de harnais : Claude Code, Codex, Cursor, Pi, Opencode, Openclaw, Hermes.
Notez que contrairement aux modèles, on évoque rarement la version du harnais. En réalité, on devrait aussi le faire, car ces harnais ont évidemment aussi des versions qui évoluent, mais dans les faits, on laisse souvent ça sous silence.
Très bien pour les noms, mais maintenat, plus précisément : qu'est-ce que le harnais IA ?
Un exemple : une question de calcul
Prenons un exemple simple et voyons où intervient ce harnais. Nous allons poser une question de calcul un peu complexe à un agent et voir ce qu'il se passe.
Oups, je parle d'agent sans trop avoir défini ce dont il s'agit. J'anticipe un peu car c'est utile pour expliquer : l'agent, c'est tout simplement le modèle, plus son harnais. On en dira quelques mots de plus ci-bas.
Revenons à nos moutons. Pour poser ma question, j'utilise l'agent suivant :
- harnais : Pi — un excellent harnais Open Source sur lequel je vais bientôt faire un article spécifique ;
- modèle : Qwen 3.8 27B, qui tourne sur ma carte graphique locale.
Vous voyez bien ici la décomposition : harnais + modèle. Et notez que j'aurais très bien pu décider d'utiliser exactement ce même harnais, mais avec un autre modèle (un modèle Claude Opus 5 par exemple).
Voilà la question de calcul :
Fais le calcul suivant : sin(3.3) * exp(1.4) + 321
Et voici l'échange complet avec l'agent :

Qui parle, à quel moment ?
À partir de cet exemple simple, voyons quelques endroits où intervient le harnais, et où il n'intervient pas à proprement parler.
| Moment de l'échange | Qui écrit/agit ? |
|---|---|
| Contexte, définitions d'outils, skills, extensions | harnais |
| Mon message « Fais le calcul suivant… » | moi |
| Raisonnement en italique, puis demande d'outil | modèle |
| Exécution de la commande bash, résultat renvoyé | harnais |
| Raisonnement final, puis réponse récapitulative | modèle |
On voit que dans toute cette conversation, en fait ce n'est pas un, mais trois acteurs qui se combinent et se parlent :
- moi (l'utilisateur de l'agent)
- le modèle d'IA qui produit du texte
- le harnais qui rajoute du contexte, écoute le modèle et éxécute les tâches demandées
Rentrons maintenant plus encore dans le détail : de ce qui est ajouté avant la conversation, puis de la conversation elle-même.
Ce que le harnais ajoute avant la conversation
| Élément ajouté | À quoi ça sert |
|---|---|
[Context] (en orange) | 3 fichiers AGENTS.md qui donnent des directions générales à suivre |
| Définitions d'outils | Non visibles ici, mais bien envoyées au modèle : read, write, edit, bash |
| Définitions des skills | Des fichiers texte chargés à la demande, si le modèle les réclame |
| Extensions Pi | Un mélange de texte et de code qui raffine encore l'agent |
Quelques précisions sur ces quatre lignes :
- Les trois
AGENTS.mddonnent un contexte général à la conversation. Dans~/AGENTS.md, je donne des informations sur moi, mon parcours, un CV court en quelques lignes, utiles pour améliorer les réponses. C'est un fichier qui est chargé quel que soit le harnais que je choisis (claude, pi, opencode, etc.). Dans~/pi/agents/AGENTS.md, je donne des informations spécifiques à l'agent Pi, ici de me répondre en français (je l'ai mis dans celui-ci car j'ai noté qu'avec Pi, on me répondait plus souvent en anglais si je n'ajoutais pas ce fichier). A bien noter que ces deux premiers fichiers sont utilisés dans toutes les conversations Pi. Dans l'AGENTS.mdau niveau du projet, je mets des informations spécifiques au projet — par exemple, dans un projet Next.js, on met souvent l'instruction d'aller chercher la doc récente Next.js, pour que le modèle ne se serve pas de ce qu'il a en mémoire, et qui peut être daté. Ce fichier n'est utilisé que dans le cadre des conversations Pi que j'ai dans le cadre de ce projet spécifique. - Les outils. Pi, qui est un harnais très léger, ne définit que 4 outils de base :
read,write,editetbash. C'est peu, mais c'est déjà beaucoup : avec ça on peut presque tout faire, et l'intérêt d'en avoir très peu, c'est que le contexte reste léger (il coûte donc moins de tokens). Pour voir leurs définitions vraiment, il faudrait regarder les tokens que voit le modèle — je le ferai et vous le partagerai dans un autre article très bientôt. - Les skills. J'en ai ici une vingtaine (c'est beaucoup, ça coûte du contexte, je pourrais songer à réduire) —
frontend-designetbetter-uipour améliorer le rendu des UI,supabasepour mieux me connecter à ma base de données, et un skill persoverifier_avant_affirmerqui force le modèle à vérifier sur internet quand il n'est pas sûr. - Les extensions. Par exemple
pi-web-accessoutodo-list. Les extensions Orca, elles, permettent de se connecter au système multi-agent Orca. (Je ferai un article sur ce système bientôt, également.)
Je saute la partie « Packages update available » : c'est un simple affichage de Pi sur des mises à jour à faire, sans rapport avec l'agent.
La conversation elle-même
Vient ensuite la conversation proprement dite. Ici, il ne s'agit plus du harnais. On voit :
- mon entrée « Fais le calcul suivant : … ». Elle entre dans le modèle IA qui va la lire et produire…
- …la partie raisonnement du modèle (en italique) : « The user is asking, etc… ». À la fin de cette partie, on voit très bien que le modèle propose de vérifier avec bash : « Let me verify with bash ».
Le harnais reprend alors le contrôle :
- il lance la commande
python3 -c "import math; print(math.sin(3.3) * math.exp(1.4) + 321)"; - il renvoie le résultat
320.xxxdans la conversation.
La conversation reprend, ce n'est à nouveau plus le harnais qui est en jeu :
- à nouveau une partie raisonnement du modèle : « The result is 320.xxx » ;
- puis la réponse du modèle, qui récapitule :
sin(3.3) × e¹·⁴ + 321 ≈ 320,3603
Détail du calcul (3.3 en radians) : sin(3.3) ≈ −0,15775 · exp(1.4) ≈ 4,05520 · produit ≈ −0,63969 · + 321 → 320,36031
Ouf, on a fini ! Sur cette toute petite conversation, on voit qu'il y a déjà beaucoup d'échanges entre harnais et modèle.
C'est tout ce qu'il fait, ce harnais ?
En fait le harnais, à proprement parler, c'est deux choses :
| Des éléments de texte | Une partie software | |
|---|---|---|
| Quoi | Du texte qui s'ajoute à la conversation (le contexte augmenté des outils, vu plus haut) | Du code qui s'éxécute autour de la conversation proprement dite (par exemple qui lance les outils read ou bash vu plus haut) |
| Vu par le modèle ? | Oui, intégralement | Non — le modèle ne voit pas qu'on lance une commande bash, seulement les résultats que le harnais décide de réinjecter |
En ça, on le voit, le harnais est très « informatique », « software », contrairement au modèle, qui est d'un aspect plus mathématique. Le harnais, on peut donc dire que c'est de l'ingénierie de contexte, plus une couche software que l'on rajoute au modèle.
Dans l'exemple plus haut, on n'a en fait vu que quelques éléments d'un harnais (définitions des tools, des skills, appel des tools), mais il y en a d'autres.
Côté texte, ce que le harnais peut encore ajouter au contexte :
| Élément | Effet |
|---|---|
| Le dossier du projet | Comme le modèle sait où l'on travaille, il peut décider très naturellement de lister les fichiers déjà présents . Quand on travaille sur un répertoire de code, c'est souvent la première étape que l'on voit être effectuée par le harnais en début de conversation après que l'on lui a demandé quelque chose : read README.md, read package.json, etc. |
| L'état git | Optionnel, selon le harnais |
| La date et l'heure | Optionnel, selon le harnais |
Certains éléments dépendent d'un harnais à l'autre : le harnais Pi (je viens de le vérifier) n'ajoute par example nativement ni l'état git, ni la date. En revanche, rien n'empêche le modèle de décider, de façon ad-hoc, de demander une commande bash au harnais qui lui renverra ces éléments. Ce n'est juste pas natif dans le harnais.
Côté software, ce que le harnais fait encore :
| Fonction | Ce qu'il se passe |
|---|---|
| Auto-compaction | Quand le contexte approche du maximum, il résume la conversation dans un fichier mémoire, supprime le contexte actuel, et relance le modèle avec ce fichier (bien plus petit) |
| Chargement des skills | C'est lui qui va chercher les fichiers de skills et les rajoute dans le contexte lorsque le modèle demande de les charger |
| Hooks | Il exécute certains scripts automatiques (appelés hooks) à lancer avant ou après l'appel d'un outil |
| Permissions | Quand un outil doit être appelé, il vérifie les droits pour éxécuter cet outil. C'est ici qu'intervient le choix que vous avez fait dans Claude Code par exemple : mode plan, auto ou bypass |
| Sous-agents | Il peut en lancer, récupérer leur résumé et l'envoyer dans le contexte |
| Résultats d'outils | Il coupe les sorties trop longues et remonte les erreurs au modèle pour qu'il se corrige |
| Mémoire persistante | Il vous permet de basculer d'une session à l'autre, (/resume dans Claude Code pour récupérer une conversation précédente) |
En réalité, il y a tellement de sujets qu'un harnais peut ajouter que je ne les liste pas tous ici, mais vous en avez déjà une bonne vision. Chaque développeur de harnais peut ajouter toute surcouche de software qu'il juge nécessaire (sauvegardes, etc.).
Le fait de développer un nouveau harnais qui rajoute ou enlève certaines parties de contexte ou certains morceaux de software, s'appelle le harness engineering ou ingénierie de harnais.
Et comment marche-t-il, ce harnais ?
Je crois que c'est la partie la plus étonnante de cet article.
Lorsque je pose la question de calcul, le modèle commence à produire :
- son raisonnement : « The user is asking, etc… » ;
- puis du texte qui demande l'appel d'une fonction bash, laquelle appelle une fonction Python ;
- un token de fin de conversation.
Notez bien ici que le modèle, lui, ne produit que du texte. Alors comment est-ce que la fonction est vraiment appelée ?
Eh bien, dans mon cas, le modèle est servi par vLLM (service d'inférence de modèles IA), qui va faire une analyse syntaxique du texte produit (« parser » le texte) pour reconnaître les différentes parties : 1/ le raisonnement, 2/ l'appel à une fonction avec ses arguments. Grâce à cette analyse, il produit un JSON contenant : le raisonnement d'un côté, et les outils à appeler de l'autre.
Une fois ce JSON construit, c'est Pi (le harnais) qui prend le relais et décide, si les permissions l'autorisent, du lancement des outils (ici commande bash qui éxécute du python). Lorsque le calcul est fini, la sortie de la commande est ajoutée à la suite du texte de la conversation (concaténation), et ce texte concaténé est renvoyé au modèle. Le modèle poursuit alors sa génération de texte : son raisonnement (« The result is 320.3603096663404. ») puis sa réponse finale.
Ce qui est tout à fait étonnant ici, c'est la succession :
| Dans la conversation | Origine |
|---|---|
| « The user is asking… » + demande d'outil | texte généré par le modèle |
320.3603096663404 | résultat du tool, collé par le harnais à la suite de la conversation (concaténé) |
| « The result is… » + réponse finale | texte généré par le modèle |
Une partie du texte de la conversation est donc générée, tandis qu'une autre est simplement « collée ».
Pour voir cela plus précisément, nous ferons très bientôt un nouvel article : « Qu'est-ce que "voit" le modèle ? ». Il détaillera cette succession et l'encadrement des différentes parties de la conversation par des balises : <think>, <tool_call>, <tool_result>… Stay tuned !
Qu'est ce qu'un agent IA ?
Nous avons déjà défloré le sujet ci-haut, mais répétons le à nouveau, un agent IA, c'est tout simplement :
- un modèle
- combiné à un harnais
Notez que dans la conversation, agent et harnais sont souvent confondus l'un pour l'autre et l'on parle volontiers de Claude Code par exemple comme d'un agent, alors que techniquement on devrait plutôt parler de harnais. Pareil pour Pi, on voit certains parler de Pi agent, alors que Pi est plutôt le harnais. Cette confusion n'a aucune gravité, et pas d'impact dans les faits.
Qu'est ce que l'IA ?
Maintenant que nous avons défini tous ces termes, nous pouvons passer à la définition d'IA.
L'IA, c'est tout simplement, par métonymie, l'un ou l'autre des éléments évoqués ci-dessus : modèle, harnais, ou agent.
Si vous avez aimé cet article, partagez-le sur vos réseaux !
À bientôt, sur le blog de Cours-socrate.ai
Le meilleur moyen d'apprendre, c'est de faire.
Inscrivez-vous à la prochaine session du cours : 8 soirées, un groupe de 10, Paris 5ᵉ — satisfait ou remboursé.