Développement IA

Qu'est-ce que DeepSeek Harness a changé ? Du Agent Framework à l'infrastructure Coding Agent nouvelle génération

Environ 15 min

En août 2026, DeepSeek a open-sourcé DeepSeek Harness (dsh). Ce n'est pas un nouveau modèle, ni une autre API de chaînes façon LangChain. Officiellement, l'agent est scindé : le modèle est l'âme ; le harness est tout ce qui lui permet de voir l'environnement, d'appeler des outils et de continuer à travailler. Cet article explique ce que ce basculement change — et pourquoi JSON Schema, les événements de session et les arbres de config comptent soudain plus qu'un prompt plus long.

Aperçu rapide

Couche En une ligne Ce que vous maintenez
Agent Framework Orchestre prompts, outils et étapes dans le code applicatif Graphes d'appels Python/TS
Agent Harness Runtime qui monte outils, FS, sandbox et boucle en plugins Profile / Bundle / SessionEvent
DeepSeek Harness dsh MIT open-source sur Cordis : everything is a plugin Services ctx.* + JSON tool schemas

Retenir la découpe : le Framework livre des chaînes ; le Harness livre un hôte remplaçable. Les modèles changent ; les seams et contrats JSON doivent rester.

Qu'est-ce que DeepSeek Harness ?

DeepSeek Harness (dsh) est le runtime open-source qui connecte un modèle de langage au monde réel : système de fichiers, terminal, navigateur et les outils que vous montez. Ce n'est pas une nouvelle sortie de modèle. La découpe officielle est simple : le modèle est l'âme ; le harness est tout ce qui lui permet de voir l'environnement, d'appeler des outils et de continuer sur plusieurs tours.

Le slogan de conception est Everything is a Plugin. Modèles, outils, sandboxes, sessions, stockage, Agent Loop et même l'UI se chargent comme plugins Cordis. Vous recomposer l'agent dans la configuration au lieu de forker une classe monolithique.

  • Connecte le LLM au FS, au terminal et au web via des plugins remplaçables
  • Enregistre chaque entrée visible par le modèle dans un Session Log append-only
  • Expose les outils par des contrats JSON Schema (inputSchema), pas seulement par de la prose dans le prompt

Si vous mélangez encore « chatbot », « modèle avec Function Calling » et « runtime multi-étapes » en un seul mot, commencez par Qu'est-ce qu'un agent IA ?. Cet article se concentre sur la moitié harness de cette pile.

Du Agent Framework à l'Agent Harness

Le code Agent Framework traditionnel enterre souvent l'Agent Loop dans une seule classe d'orchestration : prompts, dispatch d'outils, retries et mémoire partagent le même graphe d'appels. L'étendre veut dire éditer le code produit.

Un harness inverse la frontière. La boucle, les outils, le sandbox et la session deviennent des plugins remplaçables derrière des Capability Seams. Les équipes produit composent un Profile et un Bundle ; elles ne réécrivent pas le noyau pour ajouter un outil de recherche dans le dépôt.

  • Noyau privilégié vs plugins : les frameworks figent l'orchestration ; les harnesses montent et démontent des capacités.
  • Historique de chat vs Session Log : les frameworks gardent des messages de conversation ; les harnesses ajoutent des événements typés que le modèle a vraiment vus.
  • Sandbox en dur vs seams : les frameworks encodent la politique FS/shell dans l'app ; les harnesses exposent Definition / Provider / Consumer.
  • Prompt comme produit vs composition de config : les frameworks livrent des system prompts plus longs ; les harnesses livrent des arbres cordis.yml et des contrats JSON.

Ce basculement compte parce que les modèles continueront de changer. Les seams et schemas doivent survivre à n'importe quel snapshot fournisseur.

Plugins Cordis et cordis.yml

DeepSeek Harness tourne sur Cordis. Les plugins se montent et se démontent de façon réversible ; dépendances et services passent par ctx.*. La forme produit vit dans la configuration, pas dans un fork privé de dsh.

Un patch typique remplace l'adaptateur de modèle et ajoute un outil sans toucher à l'Agent Loop :

# cordis.patch.yml — swap model + add a tool
plugins:
  - name: llm/deepseek
    config:
      model: deepseek-v4-pro
  - name: tools/my-repo-search
    config:
      root: ./src

C'est le sens pratique de « everything is a plugin » : changer le Bundle, redémarrer l'hôte, garder stables le format du Session Log et les tool schemas.

Capability Seams

Un Capability Seam est la façon dont les plugins coopèrent sans importer les internes les uns des autres. Trois rôles reviennent souvent :

  1. Definition : déclarer le contrat de service (par exemple une interface d'exécution bash).
  2. Provider : implémenter le contrat (shell local, sandbox distant, mock).
  3. Consumer : appeler le service depuis l'Agent Loop ou un autre outil sans savoir quel provider a gagné.

Les outils eux-mêmes sont des seams à face JSON. Le modèle ne voit qu'un nom, une description et inputSchema — le même diamètre utilisé par Function Calling et MCP.

Un outil d'édition de fichier ressemble à ceci :

{
  "name": "str_replace_editor",
  "description": "Edit a file by exact string replacement",
  "inputSchema": {
    "type": "object",
    "properties": {
      "path": { "type": "string" },
      "old_str": { "type": "string" },
      "new_str": { "type": "string" }
    },
    "required": ["path", "old_str", "new_str"],
    "additionalProperties": false
  }
}

Traitez ce Schema comme du code produit. MCP Tool Schema vs Function Calling explique la frontière de protocole ; Pourquoi l'IA a besoin de JSON Schema explique pourquoi le diamètre doit vivre dans git, pas seulement dans un prompt.

Session Log : reconstruire ce que le modèle a vu

Chaque exécution ajoute un Session Log : system prompts, raisonnement, tool_calls, résultats d'outils, ordonnancement de subagents et injections de contexte. Resume, fork, search et replay lisent tous le même flux d'événements.

Un résultat d'outil est un événement typé, pas un paragraphe dans une UI de chat :

{
  "type": "tool/result",
  "tool_call_id": "call_7f2a",
  "name": "bash",
  "ok": true,
  "content": {
    "stdout": "passed 12",
    "exit_code": 0
  },
  "ts": "2026-09-11T06:12:04.221Z"
}

Quand un coding agent « a soudain oublié » un test en échec, ouvrez le log avant de réécrire le prompt. formater et vérifier la syntaxe l'événement en local, puis JSON Diff contre la trajectoire d'hier. Ne collez pas de secrets sur un site JSON public.

Profile, Bundle et Agent Loop

La composition runtime a quelques couches nommées :

  • Profile : comment vous lancez l'hôte (UI web vs headless).
  • Bundle : l'ensemble empilé de plugins qui définit outils, sandboxes et comportement de boucle.
  • Turn / step : un tour utilisateur peut contenir beaucoup d'étapes d'outils ; les événements restent granulaires.
  • Événements agent/* : des hooks de cycle de vie que d'autres plugins peuvent observer sans patcher la boucle.

Une fois ces couches explicites, changer de fournisseur de modèle est un changement de config — pas une réécriture de l'orchestration produit.

Quatre modes : Standard, Code, Minimal, Creation

dsh livre plusieurs modes runtime pour changer la surface d'outils sans forker le dépôt :

Mode À quoi ça sert
Standard Coding agent complet : édition, shell, recherche, skills, planning, subagents, workflows
Code Outils Standard exposés via le Code Mode SDK pour composer des ops multi-étapes dans un programme TypeScript
Minimal Surface à deux outils (bash + str_replace_editor) pour des benchmarks serrés
Creation Inspecter le runtime, expérimenter des plugins Cordis en mémoire, écrire de nouveaux presets

Choisissez le plus petit mode qui répond à votre question. Minimal Mode suffit souvent pour évaluer un modèle ; Creation Mode est pour les développeurs de harness, pas pour des utilisateurs non fiables.

Ce que signifie « infrastructure Coding Agent nouvelle génération »

Appeler dsh une infrastructure n'est pas du marketing. Cela veut dire quatre habitudes d'ingénierie :

  • Capability Seams au lieu d'imports privés entre outils et boucle
  • Sécurité fail-closed autour des montages FS, shell et réseau
  • Contrats JSON pour les arguments d'outils et les événements de session
  • Session Logs rejouables au lieu de captures d'écran de chat non reproductibles

Ces habitudes rejoignent déjà la façon dont tournent les workflows d'agents en production. workflows d'agents JSON Schema projette la même idée sur des portes Schema entre les sauts.

Framework vs Harness en un coup d'œil

Utilisez ce tableau quand on vous demande si vous avez encore besoin d'« un autre Agent Framework » :

Dimension Agent Framework Agent Harness
Extension Éditer l'orchestrateur / sous-classer Monter un plugin / patcher cordis.yml
Observabilité Logs et traces rajoutés après coup Le Session Log est l'artefact principal
Changer de backend Réécrire les adaptateurs dans le code app Remplacer le Provider derrière un seam
Frontière produit Le code de chaînes est le produit Schemas, seams et Bundles sont le produit

Les frameworks aident encore à prototyper. Les harnesses comptent quand l'hôte doit survivre aux changements de modèle et aux outils tiers.

Pièges fréquents

  • Prendre DeepSeek Harness pour un nouveau modèle. dsh est de l'infrastructure runtime. Qualité de modèle et conception du harness sont deux molettes séparées.
  • Forker tout le dépôt pour ajouter un outil. Écrivez plutôt un plugin Cordis et un JSON inputSchema.
  • Sauter la validation Schema des arguments d'outils. Les tool_calls exigent encore un contrôle côté hôte avant effets shell ou FS.
  • Ignorer le Session Log. Si vous ne pouvez pas reconstruire ce que le modèle a vu, vous ne pouvez pas déboguer un coding agent.
  • Lancer Creation Mode dans un environnement non fiable. Il sert à inspecter et composer des plugins — gardez-le hors des hôtes de production partagés.

FAQ

En quoi est-ce différent de Claude Code ou d'autres coding agents ?

Les coding agents produit livrent un Bundle opinionné. DeepSeek Harness open-source l'hôte remplaçable : plugins, seams, Session Log et modes. Vous pouvez construire une expérience proche de Claude Code — ou une bien plus mince — sans forker un runtime fermé.

Faut-il un modèle DeepSeek pour utiliser dsh ?

Non. L'adaptateur de modèle est un plugin. Les modèles DeepSeek sont un choix naturel, mais l'idée du harness est indépendante du fournisseur : remplacez le Provider, gardez seams et schemas.

Cordis est-il obligatoire ?

Pour DeepSeek Harness tel qu'il est livré, oui — Cordis est le noyau de plugins. Vous pouvez quand même reprendre les idées de seam et de Session Log dans un autre hôte.

Quel est le rôle du JSON ici ?

Les inputSchema d'outils, les événements de session et les arbres de config sont les contrats stables. Function Calling et MCP sont deux façons de projeter le même Schema. Le prompt n'est pas la source de vérité.

Est-ce prêt pour la production ?

C'est une developer preview. Attendez-vous à des breaking changes. Servez-vous-en pour concevoir plugins et contrats dès maintenant ; épinglez prudemment avant de le mettre sous astreinte.

Conclusion

DeepSeek Harness n'a pas livré « un DeepSeek plus intelligent ». Il a livré l'autre moitié de l'agent : un hôte remplaçable où outils, sandboxes, boucles et UI sont des plugins.

Si vous construisez des coding agents en 2026, écrivez d'abord schemas et Capability Seams. Les modèles tourneront. Le Session Log et les contrats JSON ne devraient pas.

Pour aller plus loin

Journal : première publication