C'est quoi DeepSeek Harness ?

Publié par DeepSeek (ah ouais, vraiment ? 😛), DeepSeek Harness, dsh pour les intimes, est sorti le 13 août 2026 sous licence MIT. Il est différent des harnais que l'on voit habituellement. En effet, son architecture le distingue. dsh repose sur Cordis, un framework de plugins. Au démarrage, il assemble les plugins qui correspondent au profil choisi. Deux profils viennent avec, web pour une interface dans le navigateur et SDK pour piloter l'agent depuis un programme Python, et rien n'empêche de créer le sien.

Le projet est en developer preview. Des changements sont attendus dans les semaines à venir.

Comment l'installer ?

Il vous faut Node.js et une clé API. Une commande suffit :

npx @deepseek-ai/dsh web

Elle démarre un serveur web et ouvre votre navigateur. La clé API se récupère sur platform.deepseek.com, et vous pourrez ajouter d'autres modèles plus tard dans Settings => Models.

Vous choisissez ensuite le dossier de travail, et surtout le mode d'accès :

  • Read Only : l'agent lit vos fichiers, il ne touche à rien
  • Workspace Write : il lit et écrit dans le dossier de travail uniquement
  • Full access : plus aucune limite

Dans les deux premiers modes, les commandes de l'agent ne sont pas lancées directement. Le système d'exploitation les bride pour qu'il ne puisse écrire que dans le workspace. La restriction ne repose donc pas sur la volonté du modèle, mais du mode que vous choisirez.

Premières tâches

Mon terrain de jeu : un projet Wagtail qui gère des événements, avec des réservations, des documents et des photos. Je commence en Read Only, avec un prompt sans risque : « Résume ce dépôt et liste ses principaux fichiers. » L'agent me rend une analyse en deux parties, la structure du projet puis ses fichiers clés.

Je passe en Workspace Write pour faire évoluer mon application : pouvoir corriger une réservation déjà saisie, du genre passer de 15 à 16 menus adultes. Plutôt que de demander le code tout de suite, je lui demande de lire les fichiers concernés, de me dire quels cas limites il voit et ce qu'il compte faire. Il revient avec une liste de cas limites crédibles et un plan. Je décide de passer à l'implémentation 😎. L'agent se donne une liste de tâches, les coche au fur et à mesure, et respecte mes conventions de code sans que j'aie eu à les lui rappeler. En cours de route, on peut changer de modèle, et même sélectionner le niveau d'effort.

Où dsh stocke-t-il ses données ?

Tout vit dans un dossier ~/.dsh :

~/.dsh
├── .anonymous-user-id
├── .credentials.yaml     # vos clés API
├── profiles/             # la configuration des profils
├── sessions/             # les journaux, par dossier de travail
├── settings.yaml         # vos préférences
└── storages/             # les données de session en cache

Comment fonctionnent les plugins ?

C'est là que dsh devient intéressant. Dans Settings => Plugins, on trouve 156 plugins globaux, partagés entre toutes les sessions, et 28 plugins propres à la session. Les presets d'agent (Standard pour l'usage courant, Code pour les tâches répétitives, Minimal pour tester, Creator pour composer le vôtre) sont des assemblages tout faits de ces 28 plugins de session. Le choix du preset ne touche pas aux droits de l'agent, mais aux outils dont il dispose. Les droits, c'est le mode d'accès choisi au départ que nous avons vu avant.

Essayons le plugin tiers dsh-context, qui ajoute un tableau de bord du contexte et une commande /context :

npx @deepseek-ai/dsh plugin --profile web add dsh-context

Pensez à relancer le serveur (npx @deepseek-ai/dsh web) pour avoir le plugin à votre disposition.

Les plugins tiers se trouvent sur GitHub via le topic dsh-plugin, il existe un catalogue dans le dépôt awesome-dsh-plugin, et un tutoriel officiel explique comment écrire le vôtre. Mais attention : un plugin exécute du code tiers sur votre PC. Lisez ce que vous installez.

Savoir ce que fait l'agent

L'onglet Trajectory affiche la session sous forme de registre : vos messages, les réponses de l'agent et chaque appel d'outil, dans l'ordre. C'est mon onglet préféré, car on peut y voir tout ce que l'agent fait, appel d'outil par appel d'outil, au lieu de se fier à son compte rendu. Le registre est un fichier, exportable avec la commande /export ou via le bouton Download session log.

Changer de modèle

dsh ne se limite pas aux modèles DeepSeek. Avec une clé API Mistral saisie dans Settings, les modèles Mistral apparaissent dans la liste. Très intuitif.

Pour un modèle local, on passe par Ollama. N'hésitez pas à aller voir notre carnet sur Ollama. On télécharge un modèle :

ollama pull qwen3:4b

Puis Settings => Add a custom provider. L'API d'Ollama est compatible OpenAI, et la clé API à renseigner est tout simplement ollama. Si vous voulez une fenêtre de contexte plus grande, elle se règle au lancement du serveur :

OLLAMA_CONTEXT_LENGTH=16384 ollama serve

En toute honnêteté, sur mon Mac et ses 8 Go, ça n'a pas été simple. Sur un dépôt qui contient un fichier Shelly Script et un README, il a fallu sept minutes à Qwen pour répondre à « que fait ce projet ? ». Morale de l'histoire : pour du code en local, il faut une machine bien plus costaude que mes 8 Go et un modèle bien plus gros.

Et avec Python ?

Forcément, j'avais envie de faire le lien avec Python. Ça tombe bien, il existe un SDK officiel.

uv add deepseek-harness-sdk
from pathlib import Path
from deepseek_harness import DeepSeekHarness

workspace = Path("/Users/gabrieltrouve/Pro/deepseekh").resolve()
dsh_home = Path("/Users/gabrieltrouve/Pro/deepseekh/.dsh").resolve()

with DeepSeekHarness(
    provider="deepseek-official",
    model="deepseek-v4-flash",
    cwd=str(workspace),
    dsh_home=str(dsh_home),
) as harness:
    resultat = harness.run("Liste les fichiers du projet", session_id="demo-008")

print(resultat.final_response)
print(resultat.finish_reason)
print(len(resultat.events), "événements")

La clé API passe par la variable d'environnement DEEPSEEK_API_KEY, ou par un fichier .env. Le SDK embarque son propre Node.js, vous n'avez donc rien d'autre à installer.

Mon avis

Je n'en fais pas encore mon agent de tous les jours. Je n'exclus pas le fait qu'il le devienne. Mais j'ai pour le moment mes habitudes avec mon harnais autour de Claude Code : CLAUDE.md, skills, hooks, etc.