Cómo usar DeepSeek Harness Creator Mode: instalación, conexión de una API de terceros y primer plugin probado

El 2 de noviembre la cuenta oficial de DeepSeek Harness presentó Creator Mode: describes una herramienta en una frase y el agente escribe el plugin, lo instala en Harness y comprueba que se cargó. Esta guía explica qué es Creator Mode, cómo arrancar Harness con npx, cómo conectar una API de terceros compatible con OpenAI (base URL + clave de aicodewith) para usar modelos Claude, GPT y DeepSeek, y construye un plugin todo_scan con Creator Mode, con salidas reales, errores comunes y los equivalentes en Claude Code / Codex.

10 分钟阅读
Cómo usar DeepSeek Harness Creator Mode: instalación, conexión de una API de terceros y primer plugin probado

En resumen: Creator Mode es el modo de DeepSeek Harness para ampliar el propio Harness. Describes en una frase la herramienta que quieres, y el agente escribe un plugin, lo instala en el profile actual y comprueba que se cargó.

  • Según la publicación oficial de @DeepSeekHarness (2 de noviembre), Creator Mode convierte ideas en plugins que puedes usar; la demo muestra un espacio de diseño, un juego sandbox y un visualizador 3D de LLM.
  • Harness arranca con npx @deepseek-ai/dsh web. Probamos la versión 0.2.1-rc.5 en Linux la tarde del 3 de noviembre (hora de Pekín); instalar las dependencias llevó unos 37 segundos.
  • Admite una «Custom model API»: con base URL, protocolo y clave se conecta a cualquier API de terceros compatible con OpenAI. Con aicodewith, claude-sonnet-5-5, gpt-6.1-sol y deepseek-flash llamaron a las herramientas correctamente.
  • El plugin todo_scan hecho con Creator Mode quedó listo en 1 min 33 s: escribió 6 archivos e instaló el plugin. Las llamadas desde una sesión nueva y en modo headless devolvieron la salida correcta.

Crear una API Key y usar Claude y GPT en DeepSeek Harness, Claude Code, Codex y Cursor →

Qué son DeepSeek Harness y Creator Mode

DeepSeek Harness (comando dsh) es un harness de agentes de código abierto de DeepSeek, publicado en GitHub con licencia MIT. Su lema es «Everything is a Plugin»: herramientas, skills, paneles de interfaz e incluso los modos son plugins que se combinan sobre el framework Cordis. Es una versión preliminar para desarrolladores, y el README avisa de que habrá cambios incompatibles.

Al crear una sesión en la interfaz web se puede elegir entre cuatro modos (textos copiados de la interfaz en nuestra prueba):

ModoDescripción en la interfaz
Standard modeTrabajar con código, archivos e información; sirve para la mayoría de tareas
PTC modeTodo lo de Standard, mejor para llamar herramientas en lote y luego ordenar los resultados
Minimal modeSolo terminal y lectura de imágenes; útil para probar el comportamiento básico
Creator modePersonalizar DSH conversando: que el agente escriba plugins que añaden funciones o interfaz, o combinar herramientas y prompts en un modo propio

Según la guía oficial de plugins dinámicos y el README de Agent Preset, el id interno de Creator Mode es cordis. Frente a Standard añade tres cosas:

  • Inspección del runtime: dos herramientas de solo lectura, cordis_inspect_list y cordis_inspect_query, que muestran los servicios, esquemas de herramientas y esquemas de configuración reales, para que el agente no adivine APIs a partir del código fuente.
  • Gestión de plugins: la herramienta plugin_manager (también en Standard) instala, activa, desactiva y elimina bundles. La configuración de plugins pertenece al profile actual, afecta a todas sus sesiones y se mantiene tras reiniciar.
  • Skills de creación: se montan automáticamente skills como cordis-plugin-development, con pasos y plantillas para escribir plugins, bundles y modos.

Usa el modelo que elijas en el selector de modelos. Además del selector de sesión nueva, el menú Add plugin de la página Plugins tiene la entrada «Let the agent create a plugin», que abre el mismo flujo de Creator.

Algunas opiniones de terceros:

  • Según @rohanpaul_ai, la función existe desde agosto; el 2 de noviembre DeepSeek publicó un vídeo de demo y los prompts de sus 7 ejemplos.
  • Según @testingcatalog, Creator Mode crea plugins reutilizables para usos variados, desde juegos hasta trabajo profesional.
  • Según el usuario @superalesha, ejecuta Kimi, GLM, MiniMax, DeepSeek y otros modelos abiertos en Harness, y «hasta añadió modelos GPT mediante un plugin».

Para el otro proyecto de DeepSeek basado en Harness, Super-agent, mira nuestra prueba de DeepSeek Super-agent y del prototipo dsh-superagent; aquí no lo repetimos.

Instalar DeepSeek Harness

Instala Node.js (usamos la 22.23) y ejecuta:

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 se abre el navegador solo; en un servidor o por SSH añade --no-open y solo imprime la dirección. La dirección lleva un token, así que abre ese enlace completo: http://127.0.0.1:3080/ a secas devuelve 401.

Para ejecutar una tarea en la terminal sin interfaz web, usa el modo headless: la respuesta va a stdout y los diagnósticos a stderr, ideal para scripts y CI. Las opciones están en la ayuda oficial de la CLI.

El aviso de seguridad oficial advierte que Harness ejecuta código y comandos generados por el modelo, carga plugins de terceros y no ha pasado una auditoría de seguridad. Ejecútalo en una VM desechable, un contenedor o un directorio dedicado, lejos de proyectos y credenciales importantes.

Conectar DeepSeek Harness a una API de terceros (aicodewith)

Los modelos se configuran en Settings → Models. Además de la tarjeta de DeepSeek y los proveedores de terceros integrados, puedes elegir Custom model API para un relay, una pasarela de empresa o un servidor propio. Según la guía oficial de configuración de modelos, hay tres protocolos: OpenAI Chat Completions, OpenAI Responses y Anthropic Messages.

Crear una API Key para DeepSeek Harness →

Opción 1: rellenar la página 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

Al guardar, los tres modelos aparecen en el selector. Una clave guardada en la página se escribe en ~/.dsh/.credentials.yaml, y la configuración solo guarda una referencia.

Opción 2: editar el archivo de configuración

La página escribe el cordis.patch.yml del profile. Con dsh web el profile es web; en headless, headless. Este es exactamente el archivo que probamos (la clave llega por variable de entorno y no se escribe en el archivo):

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

Exporta la clave antes de arrancar:

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

Windows PowerShell:

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

Los cambios se aplican en la siguiente petición, sin reiniciar. Envía un mensaje para comprobarlo:

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

Nuestros resultados (3 de noviembre, hora de Pekín):

PruebaModeloResultadoTiempo
Respuesta de una líneaclaude-sonnet-5-5Devolvió harness ok4,5 s
Respuesta de una líneagpt-6.1-solDevolvió harness ok3,7 s
Escribir hello.py y ejecutarlo (llamadas write + bash)claude-sonnet-5-5Salida 50508,2 s
Igual, con el protocolo Anthropic Messages y base URL https://api.aicodewith.aiclaude-sonnet-5-5Devolvió harness ok3,0 s

Para el modelo propio de DeepSeek, añade deepseek-flash a la lista; mira qué cambió en DeepSeek V4.1 Flash 1017 y cómo usarlo en Claude Code / Codex.

Primer plugin con Creator Mode: todo_scan

Objetivo: una herramienta todo_scan que encuentre líneas con TODO o FIXME y devuelva archivo:línea: texto, como máximo 50 entradas.

En la interfaz web abre el selector de modo, elige Creator mode y envía esta petición (usamos claude-sonnet-5-5 con el permiso por defecto 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.

Pidió confirmación una vez, porque instalar un plugin es una acción de alta confianza; pulsamos Allow once. La respuesta final (extracto):

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

El plugin que generó en el directorio de trabajo:

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

Los dos archivos clave son cordis.patch.yml e index.js. El primero indica a Harness que inserte el plugin en el profile:

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

El segundo registra la herramienta, igual que el tutorial oficial del primer plugin: exportar name, inject y apply, y llamar a ctx.tools.register dentro de 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)
      },
    }),
  )
}

Tras la instalación, el package.json del profile gana una dependencia link: y @local/todo-scan en bundles, así que se mantiene tras reiniciar.

Comprobar el plugin

En una sesión Standard nueva le pedimos llamar a todo_scan: 7 segundos. Habíamos añadido un archivo con 60 líneas TODO, y el resultado se cortó justo en 50:

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

Después comprobamos que omite node_modules y .git: pusimos líneas TODO también en demo/node_modules y demo/.git, instalamos el plugin en el profile headless y lo llamamos desde la línea de comandos:

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"}

Solo volvieron las dos líneas de src/app.py; las de node_modules y .git se omitieron. El mismo plugin con tres modelos:

ModeloLlamó a todo_scanSalidaTiempo
claude-sonnet-5-5SíDos líneas, correctas5,5 s
gpt-6.1-solSíDos líneas, correctas6,9 s
deepseek-flashSíDos líneas, correctas7,6 s

Errores comunes

Clave incorrecta:

{ERR401}

Comprueba que AICODEWITH_API_KEY tenga la clave completa, sin espacios de más.

Variable de entorno sin exportar:

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 indicada en apiKeyEnv debe exportarse en la terminal que arranca dsh, o la clave debe guardarse una vez en la página Models.

El modelo por defecto no está en la lista:

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

El model de agent-default-model debe aparecer en la lista models de ese proveedor.

Id de modelo que la pasarela no conoce:

{ERR400}

Usa los ids de la lista de modelos de aicodewith, o pulsa Fetch available models en la página Models.

SíntomaCausaSolución
http://127.0.0.1:3080/ muestra 401Falta el token de arranqueAbrir el enlace completo impreso en la terminal
AUTH: 401Clave incorrecta o eliminadaUsar una clave válida
MISSING_CREDENTIALVariable sin exportarExportarla o guardar la clave en la página Models
UNKNOWN_MODELModelo por defecto fuera de la lista modelsAñadir el modelo a la lista
INVALID_REQUEST: 400 el modelo no existeLa pasarela no conoce el idCorregir el id según la lista de modelos
Plugin instalado pero falta la herramientaEl plugin no se cargó o falló al cargarPedir a Creator Mode que liste los bundles instalados y los avisos

Hacer lo mismo en Claude Code / Codex / Cursor

Un plugin de Harness da al agente una herramienta nueva. En otros clientes lo más parecido es una Skill (pasos y scripts dentro de una carpeta) o un servidor MCP:

ClienteDónde van las Skills
Claude Code~/.claude/skills/<nombre>/SKILL.md
Codex~/.agents/skills/<nombre>/SKILL.md
Cursor~/.cursor/skills/ o ~/.agents/skills/

Para escribirlas y activarlas, mira cómo usar Agent Skills en Claude Code y Codex.

Estos clientes también pueden usar aicodewith. Claude Code:

bash
export ANTHROPIC_BASE_URL="https://api.aicodewith.ai"
export ANTHROPIC_AUTH_TOKEN="TU_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 = "TU_API_KEY"

Más detalles: cómo conectar Claude Code a una API de terceros.

Preguntas frecuentes

¿Creator Mode es un modelo nuevo?

No. Es un modo que usa el modelo que elijas en el selector, con herramientas y skills extra para inspeccionar el runtime, gestionar plugins y escribirlos. Nosotros usamos claude-sonnet-5-5.

¿Necesito la API de DeepSeek?

No. Harness admite proveedores de terceros integrados y endpoints propios compatibles con OpenAI. Con aicodewith usamos modelos Claude, GPT y DeepSeek, también para escribir un plugin en Creator Mode.

¿Son seguros los plugins que instala Creator Mode?

Según el README oficial de Plugin Manager, el código de un plugin instalado se ejecuta dentro del proceso host de Harness, fuera del sandbox del espacio de trabajo. Por eso cada acción de plugin_manager necesita acceso total o una aprobación puntual; en nuestra prueba salió una petición de confirmación. Prueba los plugins primero en un profile o directorio desechable y lee el código antes de instalarlos en tu entorno principal.

¿Se puede usar Creator Mode sin navegador?

Elegimos Creator mode en la interfaz web. El modo headless lo usamos para ejecutar tareas y llamar al plugin instalado, y los plugins también se instalan desde la línea de comandos con dsh plugin --profile <nombre> add.

¿Cómo desinstalo un plugin?

Desactiva o elimina el bundle en Creator Mode o en la página Plugins, o desde la línea de comandos:

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

Tras eliminarlo en nuestra prueba, @local/todo-scan ya no estaba en la lista bundles del profile, y al pedirle llamar a todo_scan el modelo respondió que esa herramienta no existe.

Lecturas relacionadas

Fuentes: DeepSeek Harness en GitHub · guía de configuración de modelos · tutorial del primer plugin · ayuda de la CLI · aviso de seguridad · web de DeepSeek Harness · publicación de @DeepSeekHarness (comprobado el 2026-11-03)

相关文章

¿Claude Code auto mode falla en cada turno detrás de un gateway? La 2.1.317 corrige los 403/422 (actualización y pruebas)

¿Claude Code auto mode falla en cada turno detrás de un gateway? La 2.1.317 corrige los 403/422 (actualización y pruebas)

Claude Code 2.1.317 (publicado el 3 de noviembre) corrige que el modo auto falle en cada turno cuando ANTHROPIC_BASE_URL apunta a un gateway LLM que responde 403 o 422 a la comprobación de seguridad del servidor. Esta guía explica qué cambia, a quién afecta, cómo actualizar y comprobar la versión, cómo configurar la Base URL y la clave y activar el modo auto, con pruebas comparadas de 2.1.316 y 2.1.317, una tabla de errores y FAQ.

Cómo usar Claude Message Threads: beta de hilos en la Messages API, enviar solo los mensajes nuevos y primer token ~35 % más rápido (prueba en Claude Code / API)

Cómo usar Claude Message Threads: beta de hilos en la Messages API, enviar solo los mensajes nuevos y primer token ~35 % más rápido (prueba en Claude Code / API)

El 2 de noviembre Anthropic abrió en beta pública los Message Threads (hilos de mensajes) de la Messages API. La primera petición envía la conversación completa y crea un hilo; después, cada turno envía solo los mensajes nuevos y el id de la respuesta anterior. En conversaciones largas el primer token llega antes, pero el uso de tokens y la facturación no cambian. Esta guía explica, según la documentación oficial, el parámetro thread, la cabecera beta, la caducidad de 5 minutos y el reenvío tras un 404, da ejemplos en curl, Python y TypeScript y cuenta nuestra prueba con una clave de aicodewith: a través de aicodewith el campo thread se ignora por ahora y el turno de continuación pierde el contexto, Claude Code no se ve afectado, con la alternativa y los errores frecuentes.

Cómo hacer el HackerTube de Karpathy con Claude Code o Codex: sacar vídeos de los comentarios de Hacker News para un sitio sin algoritmo (probado)

Cómo hacer el HackerTube de Karpathy con Claude Code o Codex: sacar vídeos de los comentarios de Hacker News para un sitio sin algoritmo (probado)

Karpathy hizo HackerTube en unas dos horas con Claude Code y Opus 5.5, eligiendo 6.454 vídeos de YouTube que los comentaristas de Hacker News llevan 20 años recomendándose. Con nuestra API Key, pedimos a Claude Code y a Codex que hicieran cada uno una versión reducida: traer dos meses de comentarios con la API oficial de Algolia de HN, extraer los enlaces de YouTube, quitar duplicados, contar y generar una página estática. Incluye el prompt completo, los tiempos medidos, la comparación de ambos clientes y los pasos que faltan hasta HackerTube.