DeepSeek Harness Creator Mode : installation, connexion d'une API tierce et premier plugin testé

Le 2 novembre, le compte officiel DeepSeek Harness a présenté Creator Mode : vous décrivez un outil en une phrase, et l'agent écrit le plugin, l'installe dans Harness et vérifie qu'il est chargé. Ce guide explique ce qu'est Creator Mode, comment lancer Harness avec npx, comment brancher une API tierce compatible OpenAI (URL de base + clé aicodewith) pour utiliser les modèles Claude, GPT et DeepSeek, puis construit un plugin todo_scan avec Creator Mode, avec les sorties réelles, les erreurs courantes et les équivalents Claude Code / Codex.

10 分钟阅读
DeepSeek Harness Creator Mode : installation, connexion d'une API tierce et premier plugin testé

L'essentiel : Creator Mode est le mode de DeepSeek Harness qui sert à étendre Harness lui-même. Vous décrivez l'outil voulu en une phrase, et l'agent écrit un plugin, l'installe dans le profil courant et vérifie qu'il est bien chargé.

  • Selon la publication officielle de @DeepSeekHarness (2 novembre), Creator Mode transforme des idées en plugins utilisables ; la démo montre un espace de design, un jeu bac à sable et un visualiseur 3D de LLM.
  • Harness se lance avec npx @deepseek-ai/dsh web. Nous avons testé la version 0.2.1-rc.5 sous Linux l'après-midi du 3 novembre (heure de Pékin) ; l'installation des dépendances a pris environ 37 secondes.
  • Il accepte une « Custom model API » : URL de base, protocole et clé suffisent pour parler à une API tierce compatible OpenAI. Avec aicodewith, claude-sonnet-5-5, gpt-6.1-sol et deepseek-flash ont tous appelé les outils correctement.
  • Le plugin todo_scan construit avec Creator Mode a été terminé en 1 min 33 s : 6 fichiers écrits et plugin installé. Les appels depuis une nouvelle session et en mode headless ont renvoyé le bon résultat.

Créer une API Key et utiliser Claude et GPT dans DeepSeek Harness, Claude Code, Codex et Cursor →

Ce que sont DeepSeek Harness et Creator Mode

DeepSeek Harness (commande dsh) est un harnais d'agent open source de DeepSeek, publié sur GitHub sous licence MIT. Sa devise est « Everything is a Plugin » : outils, skills, panneaux d'interface et même les modes sont des plugins assemblés sur le framework Cordis. C'est une préversion pour développeurs, et le README annonce des changements incompatibles.

À la création d'une session dans l'interface web, quatre modes sont proposés (libellés relevés dans l'interface pendant notre test) :

ModeDescription dans l'interface
Standard modeTravailler sur du code, des fichiers et des informations ; convient à la plupart des tâches
PTC modeTout Standard, mieux adapté aux appels d'outils par lots suivis d'un tri des résultats
Minimal modeTerminal et lecture d'images seulement ; utile pour tester le comportement de base
Creator modePersonnaliser DSH en conversation : l'agent écrit des plugins qui ajoutent des fonctions ou de l'interface, ou combine outils et prompts en un mode à vous

Selon le guide officiel des plugins dynamiques et le README Agent Preset, l'identifiant interne de Creator Mode est cordis. Par rapport à Standard, il ajoute trois choses :

  • Inspection du runtime : deux outils en lecture seule, cordis_inspect_list et cordis_inspect_query, qui montrent les services, les schémas d'outils et les schémas de configuration réels, pour que l'agent ne devine pas les API à partir du code source.
  • Gestion des plugins : l'outil plugin_manager (présent aussi dans Standard) installe, active, désactive et supprime des bundles. La configuration des plugins appartient au profil courant, s'applique à toutes ses sessions et survit aux redémarrages.
  • Skills de création : des skills comme cordis-plugin-development sont montés automatiquement, avec les étapes et des modèles pour écrire plugins, bundles et modes.

Il utilise le modèle choisi dans le sélecteur de modèles. En plus du sélecteur de nouvelle session, le menu Add plugin de la page Plugins propose « Let the agent create a plugin », qui ouvre le même parcours Creator.

Quelques retours tiers :

  • Selon @rohanpaul_ai, la fonction existe depuis août ; le 2 novembre, DeepSeek a publié une vidéo de démo et les prompts de ses 7 exemples.
  • Selon @testingcatalog, Creator Mode crée des plugins réutilisables pour des usages variés, du jeu au travail.
  • Selon l'utilisateur @superalesha, il fait tourner Kimi, GLM, MiniMax, DeepSeek et d'autres modèles ouverts dans Harness, et a « même ajouté les modèles GPT via un plugin ».

Pour l'autre projet de DeepSeek basé sur Harness, Super-agent, voir notre test de DeepSeek Super-agent et du prototype dsh-superagent ; nous ne le répétons pas ici.

Installer DeepSeek Harness

Installez Node.js (nous avons utilisé la 22.23), puis lancez :

bash
# Node.js 22 or newer
npx @deepseek-ai/dsh --version
# 0.2.1-rc.5

npx @deepseek-ai/dsh web
# dsh web: http://127.0.0.1:3080/?token=...

En local, le navigateur s'ouvre tout seul ; sur un serveur ou en SSH, ajoutez --no-open et seule l'adresse s'affiche. L'adresse contient un token : ouvrez ce lien complet, car http://127.0.0.1:3080/ seul renvoie 401.

Pour exécuter une tâche dans le terminal sans interface web, utilisez le mode headless : la réponse va sur stdout et les diagnostics sur stderr, pratique pour les scripts et la CI. Les options sont dans l'aide CLI officielle.

La note de sécurité officielle rappelle que Harness exécute du code et des commandes générés par le modèle, charge des plugins tiers et n'a pas été audité. Faites-le tourner dans une VM jetable, un conteneur ou un dossier dédié, loin de vos projets et identifiants importants.

Connecter DeepSeek Harness à une API tierce (aicodewith)

Les modèles se configurent dans Settings → Models. En plus de la carte DeepSeek et des fournisseurs tiers intégrés, vous pouvez choisir Custom model API pour un relais, une passerelle d'entreprise ou un serveur auto-hébergé. Selon le guide officiel de configuration des modèles, trois protocoles sont proposés : OpenAI Chat Completions, OpenAI Responses et Anthropic Messages.

Créer une API Key pour DeepSeek Harness →

Méthode 1 : remplir la page Models

text
Settings → Models → Add model provider → Custom model API
  Provider ID   aicodewith
  Base URL      https://api.aicodewith.ai/v1
  API protocol  OpenAI Chat Completions
  API key       (your aicodewith key)
  Models        claude-sonnet-5-5, gpt-6.1-sol, deepseek-flash

Après enregistrement, les trois modèles apparaissent dans le sélecteur. Une clé enregistrée depuis la page est écrite dans ~/.dsh/.credentials.yaml, et la configuration ne garde qu'une référence.

Méthode 2 : modifier le fichier de configuration

La page écrit le cordis.patch.yml du profil. Avec dsh web le profil s'appelle web, en headless headless. Voici exactement le fichier testé (la clé vient d'une variable d'environnement, elle n'est pas écrite dans le fichier) :

yaml
# ~/.dsh/profiles/web/cordis.patch.yml
- id: llm-pi-ai
  config:
    providers:
      aicodewith:
        displayName: aicodewith
        apiKeyEnv: AICODEWITH_API_KEY
        api: openai-completions
        baseURL: https://api.aicodewith.ai/v1
        models:
          - id: claude-sonnet-5-5
          - id: gpt-6.1-sol
          - id: deepseek-flash
- id: agent-default-model
  config:
    provider: aicodewith
    model: claude-sonnet-5-5

Exportez la clé avant le lancement :

bash
export AICODEWITH_API_KEY="VOTRE_API_KEY"
npx @deepseek-ai/dsh web

Windows PowerShell :

powershell
$env:AICODEWITH_API_KEY = "VOTRE_API_KEY"
npx @deepseek-ai/dsh web

Les modifications s'appliquent à la requête suivante, sans redémarrage. Envoyez un message pour vérifier :

bash
npx @deepseek-ai/dsh headless "Reply with exactly: harness ok"
# harness ok

Nos résultats (3 novembre, heure de Pékin) :

TestModèleRésultatDurée
Réponse d'une ligneclaude-sonnet-5-5harness ok renvoyé4,5 s
Réponse d'une lignegpt-6.1-solharness ok renvoyé3,7 s
Écrire hello.py et l'exécuter (appels write + bash)claude-sonnet-5-5Sortie 50508,2 s
Idem avec le protocole Anthropic Messages et l'URL https://api.aicodewith.aiclaude-sonnet-5-5harness ok renvoyé3,0 s

Pour le modèle de DeepSeek, ajoutez deepseek-flash à la liste ; voir les nouveautés de DeepSeek V4.1 Flash 1017 et son usage dans Claude Code / Codex.

Premier plugin avec Creator Mode : todo_scan

Objectif : un outil todo_scan qui trouve les lignes contenant TODO ou FIXME et renvoie fichier:ligne: texte, 50 entrées au maximum.

Dans l'interface web, ouvrez le sélecteur de mode, choisissez Creator mode et envoyez cette demande (nous avons utilisé claude-sonnet-5-5 avec la permission par défaut Workspace Write) :

text
Write a DSH plugin that adds a tool named todo_scan. It takes an optional path
(default: the working directory), recursively scans text files for lines
containing TODO or FIXME (skip node_modules and .git), and returns a list of
file:line: text entries, at most 50. Install it into this profile and verify
it loaded.

Il a demandé une confirmation une fois, car installer un plugin est une action à haute confiance ; nous avons cliqué Allow once. Réponse finale (extrait) :

text
Completed in 1m 33s

The todo_scan plugin is installed and loaded, and a test call returned correct results.
Install: @local/todo-scan installed with application: applied and no warnings.
Tool registration: todo_scan appears in the live tool list with the schema from my plugin.
...
It skips symlinks, binary files and files over 1 MiB.
If more than 50 matches exist, it returns 50 and marks the result as truncated.

Edited 6 files  +147 -0

Le plugin généré dans le dossier de travail :

text
todo-scan/
├── package.json        # "dsh": { "bundle": { "patch": "./cordis.patch.yml" } }
├── cordis.patch.yml    # inserts the plugin into the profile
├── index.js            # 127 lines: registers the todo_scan tool
├── icon.svg
└── locale/
    ├── en.json
    └── zh.json

Les deux fichiers clés sont cordis.patch.yml et index.js. Le premier demande à Harness d'insérer le plugin dans le profil :

yaml
# todo-scan/cordis.patch.yml
- insert:
    - id: todo-scan
      name: '@local/todo-scan'
      config: {}

Le second enregistre l'outil, comme dans le tutoriel officiel du premier plugin : exporter name, inject et apply, puis appeler ctx.tools.register dans apply :

js
// todo-scan/index.js (abridged)
export const name = 'todo-scan'
export const inject = ['tools', 'workingDirectory']

export function apply(ctx) {
  return ctx.effect(() =>
    ctx.tools.register({
      name: 'todo_scan',
      description: 'Recursively scan text files for lines containing TODO or FIXME ...',
      parameters: {
        type: 'object',
        properties: { path: { type: 'string', description: 'File or directory to scan ...' } },
        additionalProperties: false,
      },
      output: { schema: { /* entries: string[], truncated: boolean */ }, render: (_a, v) => [/* text */] },
      async execute(args, exec) {
        const cwd = await ctx.workingDirectory.ensure(exec.agent, exec.signal)
        return scan(args.path ? resolve(cwd, args.path) : cwd, exec.signal)
      },
    }),
  )
}

Après installation, le package.json du profil gagne une dépendance link: et @local/todo-scan dans bundles ; le plugin reste donc après un redémarrage.

Vérifier le plugin

Dans une nouvelle session Standard, nous lui avons demandé d'appeler todo_scan : 7 secondes. Nous avions ajouté un fichier de 60 lignes TODO, et le résultat s'arrête pile à 50 :

text
many.txt:1: TODO item 0 many.txt:2: TODO item 1 ... many.txt:50: TODO item 49 (truncated at 50 entries)

Puis nous avons vérifié l'exclusion de node_modules et .git : des lignes TODO aussi dans demo/node_modules et demo/.git, plugin installé dans le profil headless, appel en ligne de commande :

bash
npx @deepseek-ai/dsh plugin --profile headless add link:/absolute/path/to/todo-scan
# dependencies:
# + @local/todo-scan <- .../todo-scan
# Done in 23ms using pnpm v12.15.0

npx @deepseek-ai/dsh headless --json "Call the todo_scan tool once with path demo and paste its raw output verbatim, nothing else."
text
{"type":"tool_call","tool":"todo_scan","input":{"path":"demo"}}
{"type":"tool_result","status":"completed","result":"src/app.py:2: # TODO: handle empty input\nsrc/app.py:4: # FIXME: off by one"}
{"type":"final","text":"src/app.py:2: # TODO: handle empty input\nsrc/app.py:4: # FIXME: off by one"}

Seules les deux lignes de src/app.py sont revenues ; celles de node_modules et .git ont été ignorées. Le même plugin avec trois modèles :

ModèleAppel de todo_scanSortieDurée
claude-sonnet-5-5OuiDeux lignes, correctes5,5 s
gpt-6.1-solOuiDeux lignes, correctes6,9 s
deepseek-flashOuiDeux lignes, correctes7,6 s

Erreurs courantes

Mauvaise clé :

{ERR401}

Vérifiez que AICODEWITH_API_KEY contient la clé complète, sans espace en trop.

Variable d'environnement non exportée :

text
dsh: MISSING_CREDENTIAL: llm-pi-ai: no credential for provider route "aicodewith"; its profile
resolves AICODEWITH_API_KEY, which is not set — store AICODEWITH_API_KEY through the credentials
service (the web Models page writes it) or export it ...

La variable nommée dans apiKeyEnv doit être exportée dans le terminal qui lance dsh, ou la clé doit être enregistrée une fois depuis la page Models.

Modèle par défaut absent de la liste :

text
dsh: UNKNOWN_MODEL: pi-ai provider "aicodewith" has no configured model "claude-sonnet-9"

Le model de agent-default-model doit figurer dans la liste models du fournisseur.

Identifiant de modèle inconnu de la passerelle :

{ERR400}

Prenez les identifiants dans la liste des modèles aicodewith, ou cliquez sur Fetch available models dans la page Models.

SymptômeCauseSolution
http://127.0.0.1:3080/ affiche 401Le token de démarrage manqueOuvrir le lien complet affiché dans le terminal
AUTH: 401Clé erronée ou suppriméeUtiliser une clé valide
MISSING_CREDENTIALVariable non exportéeL'exporter ou enregistrer la clé dans la page Models
UNKNOWN_MODELModèle par défaut hors de la liste modelsAjouter le modèle à la liste
INVALID_REQUEST: 400 modèle inexistantLa passerelle ne connaît pas l'identifiantCorriger l'identifiant d'après la liste
Plugin installé mais outil absentPlugin non chargé ou en échecDemander à Creator Mode de lister les bundles installés et les avertissements

Faire la même chose dans Claude Code / Codex / Cursor

Un plugin Harness donne un nouvel outil à l'agent. Dans les autres clients, l'équivalent le plus proche est une Skill (étapes et scripts rangés dans un dossier) ou un serveur MCP :

ClientEmplacement des Skills
Claude Code~/.claude/skills/<nom>/SKILL.md
Codex~/.agents/skills/<nom>/SKILL.md
Cursor~/.cursor/skills/ ou ~/.agents/skills/

Pour les écrire et les déclencher, voir comment utiliser les Agent Skills dans Claude Code et Codex.

Ces clients peuvent aussi utiliser aicodewith. Claude Code :

bash
export ANTHROPIC_BASE_URL="https://api.aicodewith.ai"
export ANTHROPIC_AUTH_TOKEN="VOTRE_API_KEY"
claude

Codex (~/.codex/config.toml) :

toml
# ~/.codex/config.toml
model_provider = "aicodewith"
model = "gpt-6.1-sol"

[model_providers.aicodewith]
name = "aicodewith"
base_url = "https://api.aicodewith.ai/chatgpt/v1"
wire_api = "responses"
experimental_bearer_token = "VOTRE_API_KEY"

Plus de détails : connecter Claude Code à une API tierce.

FAQ

Creator Mode est-il un nouveau modèle ?

Non. C'est un mode qui utilise le modèle choisi dans le sélecteur, avec en plus des outils et skills pour inspecter le runtime, gérer et écrire des plugins. Nous avons utilisé claude-sonnet-5-5.

Faut-il l'API de DeepSeek ?

Non. Harness gère des fournisseurs tiers intégrés et des endpoints personnalisés compatibles OpenAI. Avec aicodewith, nous avons utilisé des modèles Claude, GPT et DeepSeek, y compris pour écrire un plugin en Creator Mode.

Les plugins installés par Creator Mode sont-ils sûrs ?

Selon le README officiel du Plugin Manager, le code d'un plugin installé s'exécute dans le processus hôte de Harness, hors du bac à sable de l'espace de travail. C'est pourquoi chaque action de plugin_manager exige un accès complet ou une approbation ponctuelle ; nous avons eu une demande de confirmation pendant le test. Essayez d'abord dans un profil ou dossier jetable et lisez le code avant d'installer dans votre environnement principal.

Peut-on utiliser Creator Mode sans navigateur ?

Nous avons choisi Creator mode dans l'interface web. Le mode headless nous a servi à lancer des tâches et à appeler le plugin installé, et l'installation peut aussi se faire en ligne de commande avec dsh plugin --profile <nom> add.

Comment désinstaller un plugin ?

Désactivez ou supprimez le bundle dans Creator Mode ou la page Plugins, ou en ligne de commande :

bash
npx @deepseek-ai/dsh plugin --profile headless remove @local/todo-scan
# dependencies:
# - @local/todo-scan link:.../todo-scan

Après suppression dans notre test, @local/todo-scan n'était plus dans la liste bundles du profil, et le modèle, invité à appeler todo_scan, a répondu que cet outil n'existe pas.

Pour aller plus loin

Sources : DeepSeek Harness sur GitHub · guide de configuration des modèles · tutoriel du premier plugin · aide CLI · note de sécurité · site DeepSeek Harness · publication @DeepSeekHarness (vérifié le 2026-11-03)

相关文章

Claude Code auto mode échoue à chaque tour derrière une passerelle ? La 2.1.317 corrige les 403/422 (mise à jour et tests)

Claude Code auto mode échoue à chaque tour derrière une passerelle ? La 2.1.317 corrige les 403/422 (mise à jour et tests)

Claude Code 2.1.317 (publié le 3 novembre) corrige l'échec du mode auto à chaque tour lorsque ANTHROPIC_BASE_URL pointe vers une passerelle LLM qui répond 403 ou 422 à la vérification de sécurité côté serveur. Ce guide explique ce qui change, qui est concerné, comment mettre à jour et vérifier la version, comment configurer la Base URL et la clé puis activer le mode auto, avec des tests comparés de 2.1.316 et 2.1.317, un tableau des erreurs et une FAQ.

Claude Message Threads : comment les utiliser ? Bêta des threads de l'API Messages, n'envoyer que les nouveaux messages, premier token ~35 % plus rapide (test Claude Code / API)

Claude Message Threads : comment les utiliser ? Bêta des threads de l'API Messages, n'envoyer que les nouveaux messages, premier token ~35 % plus rapide (test Claude Code / API)

Le 2 novembre, Anthropic a ouvert en bêta publique les Message Threads de l'API Messages. La première requête envoie toute la conversation et crée un thread ; ensuite, chaque tour n'envoie que les nouveaux messages et l'id de la réponse précédente. Le premier token arrive plus tôt dans les longues conversations, mais la consommation de tokens et la facturation ne changent pas. Ce guide explique le paramètre thread, l'en-tête bêta, l'expiration de 5 minutes et la relance après une 404 d'après la documentation officielle, donne des exemples curl, Python et TypeScript, et présente notre test avec une clé aicodewith : via aicodewith, le champ thread est actuellement ignoré et le tour de continuation perd le contexte, Claude Code n'est pas concerné, avec la solution de rechange et les erreurs courantes.

Comment refaire HackerTube de Karpathy avec Claude Code ou Codex : extraire les vidéos des commentaires Hacker News pour un site sans algorithme (testé)

Comment refaire HackerTube de Karpathy avec Claude Code ou Codex : extraire les vidéos des commentaires Hacker News pour un site sans algorithme (testé)

Karpathy a construit HackerTube en deux heures environ avec Claude Code et Opus 5.5, en retenant 6 454 vidéos YouTube que les commentateurs de Hacker News se recommandent depuis 20 ans. Avec notre API Key, nous avons demandé à Claude Code et à Codex de construire chacun une version réduite : récupérer deux mois de commentaires via l'API Algolia officielle de HN, extraire les liens YouTube, dédoublonner, compter et générer une page statique. Prompt complet, durées mesurées, comparaison des deux clients et étapes restantes jusqu'à HackerTube.