Carnet souverain

Analyse

Le harnais est devenu un champ de bataille et l'Europe a une carte à y jouer

En trois semaines, Block, NVIDIA et DeepSeek ont posé leurs pièces sur le même échiquier. La vraie course de l'IA se joue autour du modèle, pas dans ses poids.

analyseagentsia-ouvertesouverainetéharnaisloop-engineeringdeepseekopenllm-francelinagoraeurope
L'échiquier des harnais, NOOA, Buzz, Bird, DeepSeek dsh, Goose, Claude Agent SDK, Codex CLI, et une main qui vient poser une carte européenne au milieu.
L'échiquier des harnais, NOOA, Buzz, Bird, DeepSeek dsh, Goose, Claude Agent SDK, Codex CLI, et une main qui vient poser une carte européenne au milieu.

Il y a un mois, dans ces mêmes pages, j’écrivais que la performance ne se logeait plus dans les poids du modèle, mais dans le harnais autour. NVIDIA venait de théoriser le loop engineering avec NOOA. La proposition était encore élégante et abstraite. Trois semaines plus tard, elle est devenue un champ de bataille.

Regardez la chronologie. Le 21 juillet, Block ouvre le code de Buzz, un workspace où humains et agents partagent la même pièce. Le 22 juillet, le papier NOOA de NVIDIA s’accompagne d’un dépôt et d’un billet technique explicitement titré Six Agent Harness Capabilities for Higher Model Performance. Le 11 août, toujours chez Block, Bird apparaît, un client de bureau qui parle indifféremment à plusieurs harnais. Le 13 août, DeepSeek publie DeepSeek Harness, sous MIT, avec une thèse, tout est un plugin. Deux jours suffisent pour que le dépôt passe les 90 000 étoiles.

Retenez la cadence. Ce n’est pas une convergence intellectuelle. C’est un déplacement d’effort industriel.

Petit rappel sur la notion de Harnais

Un harnais, c’est le logiciel autour du modèle. Ni les poids, ni le prompt du jour, ni un framework d’agents parmi d’autres. C’est l’ensemble qui décide quand appeler le modèle, sous quelle forme, avec quel contexte, quel budget, dans quel bac à sable, avec quels outils, en gardant quelle mémoire, et à quel moment abandonner.

Anthropic le résume d’une phrase dans sa doc du SDK Claude Agent, le harnais est le système d’exploitation, l’agent est l’application. OpenAI dit la même chose autrement dans son billet Unlocking the Codex harness, the agent loop is the product.

La conséquence, je l’ai posée le mois dernier et elle n’a pas bougé. Si le harnais améliore les performances à modèle constant, alors une part de la performance a quitté le domaine des poids. Elle est passée dans du logiciel ordinaire. Écrit par des ingénieurs, testé avec pytest, versionné, audité, remplaçable. C’est là que le rapport de force change.

Ce qui vient de se passer, en un tableau

NomÉditeurLicencePositionnementSortie
NOOANVIDIA LabsApache 2.0L’agent comme objet Python, frontière déterministe/probabiliste inscrite dans le codeJuillet 2026, v0.0.7
BuzzBlockApache 2.0Workspace où humains et agents ont la même identité cryptographique, sur relai Nostr auto-hébergeable21 juillet 2026
BirdBlockApache 2.0Client de bureau, façade unique pour plusieurs harnais (Goose, Claude Code, Codex, Copilot, Amp, Cursor)11 août 2026
DeepSeek Harness (dsh)DeepSeek AIMITMicro-noyau où tout est un plugin, y compris la boucle13 août 2026, v0.1
GooseBlock / Linux FoundationApache 2.0Runtime agentique de référence pour MCP, désormais sous l’Agentic AI FoundationAntérieur, référence
Claude Agent SDKAnthropicPropriétaireLe harnais de Claude Code exposé aux développeursDepuis fin 2025
Codex CLIOpenAIApache 2.0Terminal, SDK Node.js et app-server, sandbox-firstDepuis début 2026

Deux choses sautent aux yeux dans ce tableau. D’abord, les licences ouvertes dominent, y compris chez les acteurs qu’on n’associe pas spontanément à l’open source. Ensuite, chacun de ces harnais fait un pari architectural distinct. Personne ne réimplémente le voisin.

Buzz, ou l’identité comme fondation

L’idée de Buzz tient dans une phrase, un agent est un membre, pas un bot. Concrètement, chaque humain et chaque agent possède sa propre paire de clés Schnorr sur le protocole Nostr. Tout ce qui se passe dans l’espace de travail, messages, patches Git, étapes de workflow, approbations, événements CI, devient un événement signé dans un unique journal.

Le pari est politique avant d’être technique. Il déplace la question de l’agent d’un problème de permissions dans un CRM vers un problème d’identité et d’auditabilité. L’agent a sa clé, ses appartenances aux canaux, sa propre trace signée. Vous savez qui a fait quoi, quand, sur quoi il s’est appuyé, et vous pouvez le prouver cryptographiquement. Pour un déploiement en administration, c’est précisément le genre de propriété qu’on ne peut pas ajouter après coup.

Buzz fait tourner le protocole Agent Client Protocol, sorti de Zed en 2025 et passé en gouvernance communautaire. N’importe quel harnais qui parle ACP peut rejoindre un canal. Le dépôt liste explicitement Goose, Claude Code et Codex.

Bird, ou le meta-harnais

Bird est plus modeste dans son ambition, et plus intéressant dans ce qu’il révèle. C’est une application de bureau, en Tauri et React, qui se branche sur plusieurs harnais à la fois. Vous pouvez travailler avec Claude Code, Codex, GitHub Copilot, Amp, Cursor ou Goose depuis la même interface, en apportant vos propres clés.

Pourquoi c’est révélateur. Parce que Bird présuppose que le harnais est une pièce interchangeable. On ne choisit plus un agent, on choisit un harnais pour la tâche, et on garde la même façade. La couche produit se sépare de la couche runtime, et le runtime cesse d’être un choix engageant. C’est le premier signe qu’un marché du harnais est en train de s’ouvrir.

DeepSeek Harness, ou le pari du micro-noyau

C’est ici que ça devient sérieux, et c’est ici que je veux m’attarder.

Le pari, en une ligne

DeepSeek Harness, ou dsh, fait un pari plus radical que ses concurrents. Non pas le harnais est composé de plusieurs composants remplaçables, mais tout est un plugin, y compris la boucle elle-même. Le noyau ne porte aucune capacité d’agent. Il ne fait que monter des plugins, résoudre leurs dépendances, les décharger proprement.

Il faut lire l’architecture pour comprendre ce que ça veut dire. Le journal de session est un plugin. L’adaptateur de modèle est un plugin. Le registre des outils est un plugin. Le bac à sable est un plugin. Le stockage est un plugin. L’interface web est un plugin. La boucle agentique elle-même est un plugin. Le fichier de configuration cordis.yml assemble le tout. Changer la boucle, c’est changer une ligne de config.

Cordis, la vraie histoire

Le socle s’appelle Cordis, et il n’est pas nouveau. Cordis a passé quatre ans en production dans le framework de chatbots Koishi, et sa conception a été formalisée cet été dans un papier de 88 pages, A Programming Paradigm for Spatiotemporal Composability, co-signé par des chercheurs de l’université de Pékin et de DeepSeek AI.

Le papier prouve deux propriétés qui ne se voient jamais dans les frameworks d’agents habituels. La composabilité temporelle, les effets de bord d’un composant sont intégralement réversibles quand on le retire. La composabilité spatiale, les composants déclarent leurs dépendances et les résolvent de manière réactive. Comme le résume Floatboat, le kernel Cordis est une plaque de base Lego qui ne fournit que des sockets. Les effets réversibles gouvernent le temps, les coeffects réactifs gouvernent la topologie.

Traduit en français, vous pouvez charger, décharger, remplacer et reconfigurer n’importe quelle pièce du harnais à chaud, sans redémarrer, sans laisser d’état orphelin, et sans casser les dépendances des autres pièces. Ce n’est pas un confort. C’est une garantie formelle validée sur un écosystème de plus de 4 000 plugins accumulés en quatre ans dans Koishi.

Pourquoi cette pièce compte plus que les autres

Reprenez le raisonnement du mois dernier. Le harnais est un actif qui survit au modèle qu’on y branche. Si vous prenez cette phrase au sérieux, alors la seule question qui compte, c’est, quelle est la surface exacte de ce que vous pouvez encore changer sans réécrire ?

Chez Anthropic, le harnais est un produit fermé, exposé comme SDK. Chez OpenAI, il est ouvert mais monolithique. Chez Block, avec Goose puis Bird, il est ouvert et modulaire, mais l’orchestration reste opaque. Chez NVIDIA avec NOOA, l’agent redevient un objet Python lisible, mais l’ensemble est encore en labs. Chez DeepSeek, la surface remplaçable englobe la boucle elle-même. Vous pouvez brancher un autre modèle, un autre bac à sable, un autre journal de session, un autre schéma d’outils, et un autre ordonnancement, sans toucher au code du produit.

Pour un déploiement local en entreprise ou en administration, c’est exactement le degré de liberté qu’on cherche. Un DSI n’a pas besoin d’un agent verrouillé autour d’un modèle. Il a besoin d’un harnais dont il peut changer chaque pièce quand le contexte évolue, quand le fournisseur cesse de convenir, ou quand une autorité impose une contrainte nouvelle. Le pari de DeepSeek répond précisément à cette exigence.

Deux réserves, pour ne pas raconter d’histoires

Le projet est en developer preview, à la version 0.1, avec des changements incompatibles annoncés. Ne l’envoyez pas en production demain matin.

Ensuite, comme le rappelle très honnêtement Remio, le pari plugin doit encore faire ses preuves à grande échelle sur un usage agentique. Cordis a quatre ans de production sur Koishi, mais Koishi n’est pas un runtime d’agent qui décide d’écrire du code dans un bac à sable. La preuve viendra, ou ne viendra pas, dans les six prochains mois.

Encadré technique, à quoi ressemble un cordis.yml

Toute la promesse « tout est un plugin » se matérialise dans deux fichiers YAML très simples. Prenez le temps de les lire, c’est là que le pari devient tangible.

Un profil dsh vit sous ~/.dsh/profiles/<nom>/ et contient deux artefacts :

  • cordis.yml · la liste de base, réécrite à vide à chaque démarrage. Vous n’y touchez pas.
  • cordis.patch.yml · votre couche de montage, où vous ajoutez, remplacez ou désactivez chaque pièce du harnais.

La composition effective empile quatre couches, dans cet ordre : les patches des paquets installés (les bundles), le cordis.patch.yml du profil, un cordis.patch.yml machine partagé par tous les profils, puis les surcouches --patch passées en ligne de commande. La couche la plus tardive a raison. Chaque ligne cible une pièce par son id et remplace sa configuration, ou insère une nouvelle pièce.

Un cordis.patch.yml réaliste ressemble à ceci :

# ~/.dsh/profiles/prod/cordis.patch.yml

# 1. On désactive le sélecteur de répertoire par défaut du bundle de base
- id: directory-picker
  name: '@deepseek-ai/dsh-host-directory-picker-auto'
  disabled: true

# 2. On surcharge la boucle par défaut avec la nôtre
- id: agent-loop
  name: '@deepseek-ai/dsh-agent-loop'
  config:
    maxSteps: 40
    stopOn: ["budget_exceeded", "user_interrupt"]

# 3. On durcit l'outil bash, pas de réseau, timeout court
- id: dsh-tool-bash
  config:
    timeoutMs: 2000
    allowNetwork: false

# 4. On monte l'exécution à distance via SSH, pour un déploiement
#    où l'agent tourne chez nous et le bac à sable sur un serveur audité
- insert:
    - id: ssh-remote
      name: 'dsh-ssh'
      config:
        host: sandbox.interne.gouv.fr
        username: agent
        privateKey: ~/.ssh/id_ed25519
        cwd: /var/lib/dsh-sandbox
        strictHostKeyChecking: true

# 5. On branche la télémétrie OpenTelemetry en mode complet
- id: session-telemetry-otel
  name: '@deepseek-ai/dsh-session-telemetry-otel'
  config:
    mode: FULL

# 6. On ajoute un plugin externe, ici une mémoire persistante
- insert:
    - id: agentmemory
      name: 'dsh-agentmemory'
      config:
        baseUrl: http://memory.interne:3111
        enabled: true

Lisez ce fichier ligne par ligne. La boucle est une ligne. Le bac à sable est une ligne. La télémétrie est une ligne. La mémoire est une ligne. Toutes ces pièces déclarent leurs dépendances via un mécanisme d’inject que le noyau résout au chargement, c’est la composabilité spatiale du papier Cordis. Et toutes se démontent proprement quand vous les retirez, c’est la composabilité temporelle.

Deux commandes valent la peine d’être connues. dsh --profile prod --dump-config imprime l’arbre complet effectivement chargé, dépendances résolues, et s’en va. C’est votre outil d’audit statique. dsh --profile prod --patch ./scratch.cordis.yml applique une surcouche jetable pour tester un plugin sans toucher au profil. C’est votre outil de bac à sable de configuration.

Aucune ligne de TypeScript n’a été touchée pour construire ce déploiement. C’est ce que veut dire « la boucle est un plugin », votre spécificité métier, votre profil de sécurité, votre chaîne d’audit tiennent dans un YAML versionnable, revuable, et signable.

Une remarque qui devrait décider les acheteurs publics

DeepSeek revendique une neutralité modèle explicite. Le dépôt parle de près de 40 modèles branchables via l’adaptateur, et rien n’oblige à utiliser un modèle DeepSeek. Vous pouvez brancher un Nemotron, un Qwen ou une famille Luciole d’OpenLLM France en 1B, 8B ou 23B, sur un vLLM local ou une instance Ollama, et conserver l’intégralité du harnais.

C’est le point qu’il faut poser calmement sur la table. Le harnais est chinois. Le modèle peut être européen. Le déploiement peut être souverain. Rien dans l’architecture ne l’interdit. Et rien dans la licence MIT ne le contraint.

Ce que ces trois semaines nous apprennent

Premier enseignement. La discipline s’organise. Il y a un mois, parler de loop engineering relevait de l’anticipation. Aujourd’hui, il existe cinq harnais open source majeurs, et deux propriétaires, tous documentés, tous instrumentés, tous en compétition explicite. Le vocabulaire s’est stabilisé, les patrons émergent, et les papiers arrivent. C’est le premier signe qu’un domaine d’ingénierie sort de la préhistoire.

Deuxième enseignement. Les architectures divergent, et c’est une bonne nouvelle. NOOA écrit l’agent comme un objet, Buzz l’écrit comme une identité, Bird comme une façade, DeepSeek comme une composition de plugins. Aucun n’est le brouillon de l’autre. Le lecteur qui espérait une convergence rapide sera déçu. Ce que nous voyons, c’est une exploration parallèle du même problème par des acteurs qui ont chacun leur point d’appui.

Troisième enseignement, et c’est le plus important pour nous. Rien de tout cela n’est capitalistique. Il n’y a pas ici de barrière à l’entrée à cinq milliards de dollars. Il y a un problème d’ingénierie logicielle, des spécifications ouvertes, des dépôts sous licence permissive, et un débat public d’architectes. C’est un terrain sur lequel l’Europe n’a jamais été absente, quand elle a décidé d’y être.

Ce que ça change pour nous, et ce que nous faisons

Deux semaines de recul suffisent pour formuler un principe de déploiement.

Ne pariez pas sur un harnais unique. Le marché est en formation, les architectures sont divergentes, aucune n’a encore prouvé sa domination sur une durée significative. Tout choix aujourd’hui est provisoire. Ce qui doit rester stable, ce sont les protocoles qui les relient, ACP, MCP, les schémas de journaux d’événements, les conventions d’identité. Investissez sur l’interopérabilité, pas sur un runtime particulier.

Séparez ce que vous auditez de ce que vous exécutez. L’apport de DeepSeek Harness, à long terme, ce n’est pas Cordis pour lui-même. C’est l’exigence méthodologique qu’il rend visible, le code que vous exécutez doit pouvoir se démonter, se lire pièce par pièce, se remplacer sans faire tomber le reste. Que vous adoptiez dsh, un dérivé, ou une autre pile qui reprendra les mêmes principes, cette exigence-là est là pour rester.

Ne confondez pas l’agent et le harnais. L’agent, c’est ce qui décide et rédige, et c’est le modèle qui le fait. Le harnais, c’est tout le reste, et c’est du logiciel ordinaire. Pour la souveraineté, le premier compte moins que le second, parce qu’un mauvais modèle sur un bon harnais reste utilisable, alors qu’un bon modèle sur un harnais opaque reste une boîte noire.

Sur ces sujets, nous n’attendons pas. LINAGORA intervient déjà auprès d’organisations qui commencent à outiller sérieusement leurs boucles agentiques, en s’appuyant sur des modèles ouverts, des runtimes lisibles et des déploiements maîtrisés. Nous prototypons, nous auditons, nous accompagnons. Le mois écoulé confirme que ce n’est pas un pari, c’est un chantier avec une échéance courte. Si votre organisation regarde ces briques et se demande par où commencer, écrivez-moi. Nous vous aiderons à démêler ce qui mérite qu’on l’adopte tout de suite, ce qui mérite qu’on l’attende, et ce qui mérite qu’on le construise soi-même.


À lire aussi sur ce carnet

Sources et références

Commentaires

Réponses imbriquées possibles. Vous commentez en tant qu'invité : choisissez un pseudo, et c'est tout. Modération a posteriori : tout est publié immédiatement, je peux retirer si besoin.

Ce carnet vous parle ?

Chaque jeudi matin, un digest des notes publiées dans la semaine sur la souveraineté numérique, le logiciel libre et l'IA en Europe. Les semaines sans publication, vous ne recevez rien. Pas de pub, pas de bruit.

Désinscription en un clic. Données hébergées en Europe, jamais revendues, jamais partagées.