← Retour aux pratiques techniques

AIAgent

DeepSeek Harness en pratique : un AI Agent n’est plus seulement le modèle

Environ 12 min

MacBook affichant du CSS dans un éditeur sombre

Vérifié le 11 septembre 2026 d’après le dépôt officiel DeepSeek Harness, la référence Skills et la documentation Process Sandbox.

Remplacer DeepSeek par Claude ou Gemini peut rendre le chat plus agréable. Ça n’empêche pas la même chute en production : le modèle appelle des outils, modifie des fichiers, lance des scripts, et personne ne peut dire pourquoi cette étape a eu lieu, si on peut la rejouer, où elle a écrit, ni si un nouvel essai est sûr. En 2026, le goulot d’un Agent n’est plus « qui répond le plus fluide ». C’est qui termine une tâche sans laisser un chantier.

D’emblée : le modèle choisit la prochaine intention. Le Harness possède la boucle, la session et la composition des plugins. Un Skill charge un mode d’emploi réutilisable à la demande, au lieu de tout fourrer dans le prompt système. Le Sandbox limite les fichiers que ce sous-processus-là a le droit de toucher, et échoue fermé si l’isolement ne peut pas être imposé. Enlevez une couche : la démo passe, l’audit non.

Nous avons déjà détaillé les frontières de modules dans l’analyse d’architecture DeepSeek Harness. Ici, on ne refait pas l’inventaire des paquets. On répond à une question plus quotidienne : vous savez déjà appeler un modèle, pourquoi ces trois couches existent encore. Le même écart entre « générer du code » et « finir un projet » se retrouve dans notre classement 2026 des AI Software Engineer.

Trois pannes qu’un plus gros modèle ne répare pas

Traiter « un modèle plus fort » comme un plan Agent casse en général à trois endroits à la fois. Changer de fournisseur ne répare rien.

D’abord une boucle sans mémoire fiable. Une vraie tâche liste un dossier, lit, corrige, relance les tests. Si l’historique vit dans un tableau local au processus, un redémarrage ou un rafraîchissement d’UI efface la mémoire de travail. Pire : la personne qui débogue ne lit pas le même journal d’événements. Elle devine à partir de captures.

Ensuite la surcharge de manuels. On colle règles de livraison, style et tickets dans le prompt système. La fenêtre se remplit, des étapes sautent, et un nouveau « vous devez respecter » ne fait qu’augmenter le bruit. Le modèle devrait voir un catalogue la plupart du temps, et charger un corps quand le travail commence vraiment.

Enfin les effets de bord non confinés. Un outil shell peut écrire hors du dépôt, toucher un fichier de secrets, laisser un patch à moitié fini. Un prompt qui dit « ne fais pas ça » n’est pas un plan de contrôle.

Une plus grande fenêtre de contexte ne règle pas ça. Elle laisse seulement un mauvais mode d’emploi occuper plus de jetons. La boucle et la frontière disque restent une couche d’exécution.

Ce que le Harness prend vraiment en charge

DeepSeek Harness (dsh) se présente comme un harness d’agent open source, pas comme une autre peau de chat. La ligne officielle est Everything is a Plugin : adaptateurs de modèle, prompts système, registre d’outils, journaux de session, interface Agent et boucle par défaut partent en paquets remplaçables, composés avec Cordis. Le dépôt est encore en aperçu développeur. Des ruptures peuvent arriver. Cela n’empêche pas de s’en servir pour voir ce qu’une couche d’exécution doit posséder.

En pratique, le Harness porte trois métiers que le modèle ne peut pas faire.

  • Qui pousse l’étape suivante. La agent-loop par défaut n’est qu’une implémentation du contrat Agent. Les plugins doivent dépendre de cette interface, pas souder le métier au pilote par défaut. Les boucles ouvertes vont aux objectifs flous. Les validations appartiennent à un flux déterministe extérieur.
  • Une session reconstructible. La prochaine requête modèle doit se déduire du Session Log, pas d’un tableau temporaire dans une fonction. Les chunks bruts restent pour rejouer, afficher et déboguer.
  • Une composition que l’on peut patcher. Profiles, Bundles et Patches s’empilent en arbre d’exécution. On change de fournisseur de modèle, de backend sandbox ou d’UI par un Patch avant de forker le cœur. dsh --profile web --dump-config affiche l’arbre réellement démarré.

Le Harness ne rend donc pas le modèle plus intelligent. Il répond à qui exécute l’étape suivante, où vit l’historique, et quelle couture on a le droit de remplacer. Sans lui, les Skills n’ont pas de moment d’injection stable et le Sandbox n’a pas d’appelant stable.

À quoi sert un Skill

Officiellement, un Skill est une instruction optionnelle, pas un événement de session. Le modèle voit d’ordinaire un catalogue : des name triés et des description échappées, tronquées (plafond par défaut 500). Corps, chemins, sources et indices de routage restent hors du prompt. Quand le travail démarre, le modèle appelle skill({ name }). Le cadre résout le skill gagnant contre le cwd de session et renvoie une charge canonique.

Les skills locaux utilisent le kebab-case. On livre un paquet dossier avec SKILL.md ou un Markdown plat. La découverte récursive **/SKILL.md n’est pas prise en charge. Le fournisseur local scanne les racines par rang : d’abord .dsh/skills du projet, puis .agents/skills, puis les dossiers personnalisés, utilisateur et empaquetés. La racine projet est la plus proche racine Git ; à défaut, le cwd lui-même.

Cette couche répond à « quand le mode d’emploi apparaît ». Une checklist de livraison ou une procédure de correctif de test en Skill ne se charge que pour ce travail. Modifier le corps change les appels suivants, pas les anciens résultats d’outils. Le catalogue peut se rafraîchir à chaud, mais une découverte incomplète ne doit pas écraser le dernier catalogue utilisable.

Un Skill n’est pas un système de droits. Il dit comment travailler. Il ne décide pas si une écriture peut quitter l’espace de travail. Sans Sandbox, un Skill « déployer » très clair est plus dangereux, parce que les étapes risquées deviennent plus exécutables.

Ce que le Sandbox confine

Le Process Sandbox couvre les effets fichiers d’un sous-processus sur la même machine. Réseau et visibilité des processus sont hors vocabulaire. Conteneurs, microVM et exécution distante sont des coutures sœurs, pas des fournisseurs de ctx.sandbox. En local : bwrap/Landlock sous Linux, Seatbelt sous macOS, jeton restreint et ACL sous Windows.

Il y a trois modes. Seuls les deux premiers vont au fournisseur isolant :

  • read-only refuse les écritures ; les lanceurs POSIX laissent le puits /dev/null dont les shells ont besoin.
  • workspace-write autorise d’écrire sous le cwd immuable de la session et dans une zone temporaire promise par le backend.
  • danger-full-access saute le confinement. L’appelant lance l’argv d’origine et n’appelle pas ctx.sandbox.

La règle qui compte au labo est l’échec fermé : si vous avez demandé un confinement et qu’aucun backend ne peut l’imposer, on lève SANDBOX_UNAVAILABLE. Le passage silencieux sans isolation est interdit. La politique se résout à chaque appel : bash peut rester en lecture seule pendant qu’un agent enfant écrit son répertoire d’état. Il faut aussi séparer deux pannes : le lanceur n’a jamais démarré, versus le confinement a fonctionné et a bloqué l’écriture. La première est de l’infra. La seconde prouve que le Sandbox a fait son métier.

L’application peut être full ou partial. D’anciens ABI Landlock et certains bords ACL Windows sont partial aujourd’hui. Si vous voulez une promesse absolue, ne traitez pas partial comme verrouillé.

Comment une tâche enchaîne les trois

Ouvrez un « corriger le test qui casse et ouvrir un patch » : la coupure cesse d’être abstraite.

Le modèle choisit l’étape, le Harness tourne la boucle, le Skill charge le mode d’emploi, le Sandbox enveloppe l’écriture
Le modèle n’émet que l’intention. Le Harness garde la boucle et le journal. Le Skill charge les consignes avant la modification. Le Sandbox enveloppe le seul argv qui peut toucher le disque.
  1. Le Harness reconstruit le contexte depuis le Session Log et injecte le catalogue visible (noms et descriptions seulement).
  2. Le modèle charge un Skill du type repo-test-patch au lieu d’inventer les étapes de mémoire.
  3. L’outil skill relit le corps pour ce cwd et renvoie consignes plus indices de ressources relatives.
  4. Le modèle demande à lire ou à tester. Le Harness enchaîne le pipeline d’outils. Le Sandbox enveloppe cet argv sous la politique de cet appel.
  5. Les résultats reviennent dans le Session Log. L’étape suivante se déduit du journal, pas d’une variable globale « on a dû le faire ».

Sans Harness, pas d’injection de catalogue stable ni de persistance des résultats. Sans Skills, le prompt système noie sous les manuels. Sans Sandbox, un Skill plus clair n’est qu’un guide d’élévation de privilèges plus clair. Les trois couches se complètent ; ce ne sont pas trois noms pour la même fonction.

Lancer et écrire un premier Skill

Le départ officiel le plus court est npx @deepseek-ai/dsh web, interface Web par défaut sur http://127.0.0.1:3080. Depuis les sources : cloner, puis pnpm install && pnpm run build && pnpm dsh web. En SSH, il n’imprime souvent que l’URL hôte ; l’adresse locale transférée reste à votre client.

Placez le premier skill projet à la racine du dépôt, là où le fournisseur local cherche en premier :

.dsh/skills/repo-test-patch/SKILL.md
---
name: repo-test-patch
description: À n’utiliser que pour corriger un test en échec avec un patch minimal.
---

# repo-test-patch
1. Confirmer la branche à la racine de l’espace de travail.
2. Relancer le test en échec avant de modifier le code de production.
3. Limiter le patch aux fichiers réellement concernés.
4. Ne pas écrire hors de l’espace de travail.

Les noms doivent être en kebab-case. Utilisez un paquet SKILL.md ; l’imbrication profonde ne sera pas découverte. Les clés de frontmatter disable-model-invocation et user-invocable décident si le modèle ou un humain voit l’entrée. Les deux à faux : seul un appelant de confiance ctx.skills.get() peut encore charger.

Après le démarrage, vérifiez trois faits : un message de catalogue est apparu dans la session ; un appel skill renvoie le corps au lieu de coller tout le manuel dans le prompt système ; une écriture hors espace de travail en read-only est refusée par le backend, pas seulement déconseillée par le prompt. S’il n’existe aucun backend isolant, le processus doit s’arrêter en erreur plutôt que continuer à nu.

Traitez DeepSeek Harness comme un échantillon d’architecture à vérifier, pas comme une plateforme déjà certifiée production. Vous acceptez la boucle, le catalogue et le chemin de confinement — pas une vidéo de démo.

Quand la pile complète vaut le coup

SituationFairePourquoi
Une lecture structurée ou un seul appel de fonctionPasser le Harness completUne boucle de function calling suffit
Éditions répétées, tests, rejeuHarness + Session LogSans journal reconstructible, le debug est une capture
La même procédure sur beaucoup de dépôtsLivrer un SkillCharger à la demande bat un prompt gonflé
Le modèle peut lancer un shell ou écrireSandbox, échec ferméUn prompt n’est pas une politique fichiers
Validations et compensations fixesFlux déterministe extérieurLa boucle ouverte ne doit raisonner que localement

Face à un while maison plus quelques outils, DeepSeek Harness achète des coutures séparées pour la composition, la reconstruction de session et l’isolement par appel. Vous payez le modèle Cordis, les cassures d’aperçu, et l’apprentissage que Skill et Sandbox ne sont pas la même chose. Cette découpe vaut si vous allez vraiment changer de backend modèle, d’implémentation sandbox, ou partager un catalogue de skills entre dépôts cette année.

En une phrase : un Agent stable en 2026 n’est pas un autre modèle de chat. Séparez le jugement, la boucle, le mode d’emploi et la frontière disque. Le Harness termine la course. Le Skill explique le travail quand il faut. Le Sandbox dit où cet appel peut écrire. Ensemble, une démo devient une tâche auditable.

Questions fréquentes

En quoi un Harness diffère-t-il d’une API modèle ?

Une API modèle émet la prochaine intention ou l’appel d’outil. Un Harness conduit la boucle, persiste la session, compose les plugins et décide quand injecter un catalogue ou passer un appel au confinement.

Un Skill donne-t-il le droit d’écrire ?

Non. Un Skill est un mode d’emploi à la demande. Le catalogue n’expose en général qu’un nom et une description. L’écriture dépend de la politique Sandbox de cet appel.

Le Sandbox bloque-t-il le réseau ?

Le vocabulaire officiel du Process Sandbox ne couvre que les effets fichiers. Réseau et visibilité des processus sont hors sujet. Pour isoler le réseau, ajoutez une autre couture. N’attendez pas de read-only qu’il coupe le trafic sortant.

Peut-on s’en servir en production aujourd’hui ?

Comme échantillon d’architecture et hôte de prototype, oui. Pas comme plateforme certifiée production. Le dépôt officiel reste un aperçu développeur et peut casser la compatibilité.

Isoler les essais d’Agent sur un Mac mini cloud

Sous macOS, le sandbox DeepSeek Harness passe par Seatbelt, et les Skills se résolvent contre le cwd du projet. Faire tourner un Agent en aperçu sur la seule machine de build production empile la boucle, les manuels et l’isolement fichiers sur le travail client. La mémoire unifiée d’un Mac mini M4 permet une voie de build stable et une boîte dsh jetable côte à côte. Environ 4 W au repos rendent réaliste un nœud 24/7 « Agent seulement, jamais la branche de livraison ». Unix natif, Homebrew et SSH fixent la racine de travail plus prévisiblement qu’un bureau distant vers un portable Windows à la maison.

Si le prototype Harness doit quitter la machine qui livre les builds, Kvmkit Mac mini M4 cloud peut ajouter un nœud isolé à la demande—voir les offres pour que catalogues de skills et modes sandbox aient un endroit où échouer sans casser la livraison.

Un nœud rien que pour les essais d’Agent ?

Gardez le Harness d’aperçu hors de la machine qui livre. Offres et aide sur les pages tarif et support.