title: "AgenteDSH de DeepSeek Harness: mi experiencia migrando una app legacy"
published: true
description: "Cómo migré una aplicación con DWR y Tomcat a Nginx + JavaScript vanilla ES6 en 2 días usando DeepSeek y DeepSeek Harness (DSH)."
tags: deepseek, javascript, java, ai

cover_image:

Durante algún tiempo he usado varias herramientas en mis desarrollos: Pool, Hermes, OpenCode y, de forma ocasional, Claude, OpenAI y DeepSeek. Estas últimas más que todo para verificación, consultas puntuales y, de vez en cuando, para alguna propuesta de desarrollo. En general, la cosa me ha funcionado bastante bien.

El problema

Se presentó la necesidad de migrar una aplicación que tenía. Usaba DWR como API y Tomcat como contenedor. El problema es que DWR ya no está soportado, así que tocaba migrarlo sí o sí.

Mi nuevo stack es Nginx, JavaScript vanilla ES6 y, ocasionalmente, Font Awesome y Bootstrap. La aplicación tiene bastantes archivos. En otras ocasiones he hecho migraciones puntuales o reescrito el código desde cero, pero esta vez eso era complicado.

Después de intentarlo con varias de mis herramientas usuales, me encontré con que se agotaban los tokens y se demoraban una eternidad; es decir, no podía por ese medio.

Plan B: entidad por entidad

Así que me di al dolor y empecé a cambiar los archivos con DeepSeek, entidad por entidad. Muy dispendioso, pero funcionaba.

El principal problema: DeepSeek normal no acepta archivos .rar, .tar, .zip ni ningún tipo de empaquetamiento. Al preguntar por qué, la respuesta fue sencilla:

"Porque DeepSeek no es un sistema operativo ni pretende reemplazarlo".

La sugerencia fue clara: si quieres hacerlo, usa DSH y descarga los plugins que permiten hacerlo.

Lo hice, y me di cuenta de que DSH no es una utilidad de DeepSeek: es un agente, bastante bueno por cierto, que puede intervenir tus archivos de forma local, en un ambiente gráfico.

El resultado fue impresionante. Lo que pensé que me iba a tomar días, semanas incluso, lo hice básicamente en 2 días, con DeepSeek como asistente general para temas gruesos y DSH para afinación y puesta a punto.

¿Qué es DSH?

DeepSeek Harness (DSH) es un agente de código open-source construido sobre el SDK de DeepSeek Harness. Su arquitectura se basa en que "todo es un plugin". No es solo un chat: es un entorno de ejecución que puede leer, escribir y ejecutar comandos en tu máquina, siempre bajo un modelo de permisos (sandbox).

Guía de instalación en Linux

Requisitos previos

  • Node.js ^22.19 o >= 24
  • pnpm (recomendado 11 o superior). DSH lo necesita para gestionar los plugins.

Paso 1: Instalar pnpm

curl -fsSL https://get.pnpm.io/install.sh | sh - source ~/.bashrc pnpm --version 

Paso 2: Lanzar DSH

El comando más rápido para empezar:

npx @deepseek-ai/dsh web 

Esto descargará y ejecutará DSH, abriendo la interfaz web en http://127.0.0.1:3080.

Si npx da problemas, puedes forzar una versión específica (por ejemplo, la 0.2.2-rc.1 que usamos):

npx @deepseek-ai/dsh@0.2.2-rc.1 web 

Paso 3: Configurar la API Key

La primera vez que intentes usar el agente, verás un error como:

llm-deepseek: no API key for provider route "deepseek-official" 

Se soluciona de dos formas:

  1. Desde la interfaz web: ve a Settings → Models, pega tu API Key de DeepSeek (sk-...) y guarda.
  2. Desde la terminal: exporta la variable antes de lanzar DSH:
export DEEPSEEK_API_KEY="sk-tu-clave-aqui" npx @deepseek-ai/dsh@0.2.2-rc.1 web 

Instalando plugins para leer ZIPs

DSH por sí solo no lee ZIPs. Necesitas un plugin. El que usamos fue dsh-dragndrop-attachments, que permite arrastrar un .zip a la interfaz y que el agente liste su contenido y lea archivos internos sin descomprimirlo.

Paso 1: Autorizar la compilación del plugin

Antes de instalar plugins desde GitHub, DSH (a través de pnpm) bloquea los scripts de compilación por seguridad. Hay que autorizarlo en el archivo de configuración del perfil web:

nano ~/.dsh/profiles/web/pnpm-workspace.yaml 

Añade (o fusiona) al final:

allowBuilds: dsh-dragndrop-attachments: true 

Nota: la clave debe ser el nombre exacto del paquete. Si pnpm se queja, revisa el mensaje de error para ver la clave correcta.

Paso 2: Instalar el plugin

npx @deepseek-ai/dsh@0.2.2-rc.1 plugin --profile web add github:aa2246740/dsh-dragndrop-attachments 

Paso 3: Reiniciar DSH

Detén DSH (Ctrl+C en la terminal donde corre) y vuelve a lanzarlo:

npx @deepseek-ai/dsh@0.2.2-rc.1 web 

Refresca el navegador (F5). Ahora deberías poder arrastrar un .zip a la ventana del chat y pedirle al agente que liste su contenido.

Alternativa: un gestor de archivos visual

Si prefieres una experiencia más parecida a VS Code (árbol de archivos, editor con resaltado de sintaxis), el plugin @rose43/dsh-file es muy completo:

npx @deepseek-ai/dsh@0.2.2-rc.1 plugin --profile web add @rose43/dsh-file 

Reinicia DSH y busca el botón Files en la barra lateral.

Conclusión

DSH ha sido un descubrimiento. No es solo un chat con plugins: es un agente de código que puede intervenir tus archivos localmente, con un sistema de permisos que te da control. Para migraciones grandes, la combinación de DeepSeek (para el análisis grueso) + DSH (para la afinación y la lectura/escritura de archivos) es muy potente.

Si estás en una situación similar, con un legacy que migrar y herramientas que se quedan cortas, vale la pena explorar DSH. La curva de instalación es baja y el retorno es alto.

¿Has usado DSH? ¿Qué plugins te han sido útiles? Cuéntamelo en los comentarios.

 ` Cambios menores que hice: "Cloud" → "Claude", "Awesome" → "Font Awesome", y quité los marcadores de cita (` .`) que quedaron sueltos. Dejé `published: false` para que lo revises como borrador antes de publicar. Si quieres, te lo entrego como archivo `.md`.