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-solydeepseek-flashllamaron a las herramientas correctamente. - El plugin
todo_scanhecho 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):
| Modo | Descripción en la interfaz |
|---|---|
| Standard mode | Trabajar con código, archivos e información; sirve para la mayoría de tareas |
| PTC mode | Todo lo de Standard, mejor para llamar herramientas en lote y luego ordenar los resultados |
| Minimal mode | Solo terminal y lectura de imágenes; útil para probar el comportamiento básico |
| Creator mode | Personalizar 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_listycordis_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:
# 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
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):
# ~/.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:
export AICODEWITH_API_KEY="TU_API_KEY"
npx @deepseek-ai/dsh web
Windows 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:
npx @deepseek-ai/dsh headless "Reply with exactly: harness ok"
# harness ok
Nuestros resultados (3 de noviembre, hora de Pekín):
| Prueba | Modelo | Resultado | Tiempo |
|---|---|---|---|
| Respuesta de una línea | claude-sonnet-5-5 | Devolvió harness ok | 4,5 s |
| Respuesta de una línea | gpt-6.1-sol | Devolvió harness ok | 3,7 s |
| Escribir hello.py y ejecutarlo (llamadas write + bash) | claude-sonnet-5-5 | Salida 5050 | 8,2 s |
| Igual, con el protocolo Anthropic Messages y base URL https://api.aicodewith.ai | claude-sonnet-5-5 | Devolvió harness ok | 3,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):
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):
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:
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:
# 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:
// 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:
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:
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."
{"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:
| Modelo | Llamó a todo_scan | Salida | Tiempo |
|---|---|---|---|
| claude-sonnet-5-5 | Sí | Dos líneas, correctas | 5,5 s |
| gpt-6.1-sol | Sí | Dos líneas, correctas | 6,9 s |
| deepseek-flash | Sí | Dos líneas, correctas | 7,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:
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:
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íntoma | Causa | Solución |
|---|---|---|
| http://127.0.0.1:3080/ muestra 401 | Falta el token de arranque | Abrir el enlace completo impreso en la terminal |
| AUTH: 401 | Clave incorrecta o eliminada | Usar una clave válida |
| MISSING_CREDENTIAL | Variable sin exportar | Exportarla o guardar la clave en la página Models |
| UNKNOWN_MODEL | Modelo por defecto fuera de la lista models | Añadir el modelo a la lista |
| INVALID_REQUEST: 400 el modelo no existe | La pasarela no conoce el id | Corregir el id según la lista de modelos |
| Plugin instalado pero falta la herramienta | El plugin no se cargó o falló al cargar | Pedir 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:
| Cliente | Dó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:
export ANTHROPIC_BASE_URL="https://api.aicodewith.ai"
export ANTHROPIC_AUTH_TOKEN="TU_API_KEY"
claude
Codex (~/.codex/config.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:
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
- ¿Qué es DeepSeek Super-agent? Arquitectura, resultados oficiales y prueba del prototipo dsh-superagent
- Qué cambió en DeepSeek V4.1 Flash 1017 y cómo usarlo en Claude Code / Codex
- Cómo conectar Claude Code a una API de terceros: base URL, API key y modelos
- Cómo usar Agent Skills: carpetas de instalación y activación en Claude Code / Codex
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)



