DeepSeek para programar: guía práctica con prompts y pruebas

Sí, DeepSeek sirve para programar: puede explicar código, localizar errores, proponer cambios pequeños, generar pruebas, revisar lógica y ayudarte a preparar una implementación. La forma más sencilla de comenzar es pegar un fragmento en el chat y describir con precisión el resultado esperado.

La calidad depende del contexto que proporciones y de cómo verifiques la respuesta. DeepSeek puede inventar funciones, usar una versión incorrecta de una biblioteca o producir código que parece válido pero falla en casos límite. Por eso, conviene tratarlo como un asistente que propone cambios, no como un sustituto de las pruebas, la documentación oficial o la revisión humana.

Información verificada el 10 de noviembre de 2026.

¿Para qué sirve DeepSeek al programar?

DeepSeek resulta más útil cuando la tarea está bien delimitada y puedes comprobar el resultado. Pedirle que genere una aplicación completa sin requisitos, versiones ni pruebas suele producir una respuesta difícil de revisar.

TareaCómo puede ayudarteQué debes comprobar
Explicar códigoResume el flujo, las funciones, las entradas y las salidasQue no atribuya comportamientos a archivos o dependencias que no ha visto
Depurar un errorRelaciona el mensaje de error con una causa probable y propone una correcciónQue el problema pueda reproducirse y que la corrección resuelva la causa, no solo el síntoma
Generar una funciónConvierte requisitos concretos en una implementación inicialEntradas inválidas, casos límite, tipos, rendimiento y compatibilidad
Crear pruebasPropone pruebas unitarias y casos que quizá no habías consideradoQue las pruebas puedan fallar cuando existe el defecto y no se limiten al caso feliz
RefactorizarReduce duplicación, divide responsabilidades o mejora nombresQue el comportamiento observable no cambie sin autorización
Revisar códigoSeñala problemas de claridad, lógica, seguridad o mantenimientoQue cada observación esté respaldada por una línea o comportamiento concreto
Preparar documentaciónRedacta docstrings, comentarios, ejemplos y explicaciones de una APIQue la documentación coincida con el código real y sus versiones

Las tareas de autenticación, cifrado, pagos, permisos, infraestructura y manejo de datos sensibles requieren una revisión adicional. Un fragmento puede funcionar y aun así ser inseguro, difícil de mantener o incompatible con producción.

Cuatro formas de usar DeepSeek para programar

No existe una única manera de trabajar con DeepSeek. La opción adecuada depende de si necesitas analizar un fragmento aislado, modificar un proyecto, integrar el modelo en una aplicación o ejecutar un modelo descargado en tu propia computadora.

Forma de usoNecesitasAcceso al proyectoMejor para
DeepSeek ChatUna cuenta y un navegador o la appSolo el contenido que pegues o adjuntesExplicar código, resolver errores puntuales y preparar cambios pequeños
IDE o coding agentUna herramienta compatible y, normalmente, una clave APIDepende de los permisos concedidos a la herramientaLeer varios archivos, proponer diffs, ejecutar pruebas y trabajar sobre un repositorio
DeepSeek APICuenta de plataforma, saldo, clave API y código de integraciónSolo los datos que envíe tu aplicaciónAutomatizaciones, revisores internos, generación estructurada y productos propios
Modelo localUn checkpoint compatible, software de inferencia y hardware suficienteEl acceso que configure el usuarioEntornos con requisitos específicos de control, experimentación o funcionamiento sin depender del chat

El chat es la ruta más sencilla para aprender o resolver una tarea corta. Un agente dentro de la terminal o el editor resulta más cómodo cuando necesitas navegar por varios archivos, pero también introduce más riesgo porque puede recibir permiso para modificar el proyecto o ejecutar comandos.

El modelo y el agente no son lo mismo. DeepSeek genera decisiones o texto; la herramienta que lo rodea es la que puede leer archivos, escribir cambios, abrir una terminal, consultar Git o ejecutar pruebas según los permisos que le concedas.

Qué modelo de DeepSeek conviene para programar

En la API oficial verificada para esta guía aparecen dos identificadores actuales: deepseek-flash y deepseek-v4-pro. El primero dirige las solicitudes a la versión vigente de DeepSeek V4.1 Flash, mientras que el segundo permite acceder a V4 Pro.

Comparación oficial de deepseek-flash y deepseek-v4-pro con Thinking Mode y funciones de programación
  • deepseek-flash: es una opción razonable para explicaciones, cambios acotados, pruebas, revisión cotidiana y flujos de agentes donde importa controlar el costo y la velocidad.
  • deepseek-v4-pro: puede evaluarse para problemas más complejos, planificación extensa o tareas que requieren más razonamiento. En web y app se ofrece mediante el modo Expert.
  • Thinking mode: ambos modelos permiten activar o desactivar el razonamiento y elegir niveles de esfuerzo. Un nivel mayor no garantiza una respuesta correcta y puede aumentar el consumo.
  • FIM: la API Fill In the Middle completa código entre un prefijo y un sufijo. Continúa marcada como beta y utiliza un endpoint específico.

No elijas un modelo únicamente por un benchmark. Prueba ambos con tareas reales de tu repositorio, utilizando los mismos prompts, pruebas y criterios de aceptación. Una diferencia en un examen de programación no demuestra automáticamente que un modelo será mejor con tu framework, estilo de código o sistema de compilación.

¿DeepSeek Coder sigue siendo el modelo actual?

DeepSeek Coder fue una familia de modelos especializada en código y todavía existen repositorios y checkpoints con ese nombre. Sin embargo, el registro oficial documenta que los modelos DeepSeek Coder V2 y DeepSeek Chat V2 se fusionaron en DeepSeek V2.5 en septiembre de 2024.

Por tanto, no debes usar automáticamente deepseek-coder como nombre de un modelo API actual. En la API vigente, consulta la página oficial de modelos y utiliza los identificadores que aparezcan allí. Tampoco atribuyas a un checkpoint antiguo las capacidades, el contexto o las integraciones de los modelos actuales.

Cómo programar con DeepSeek desde el chat

Para una tarea puntual, abre el chat oficial de DeepSeek y comienza con el fragmento mínimo que permita reproducir el problema. No pegues todo el proyecto si una función, un error y dos archivos relevantes son suficientes.

  1. Define el entorno: indica el lenguaje, su versión, el framework, el runtime y el sistema operativo cuando sean relevantes.
  2. Describe el comportamiento actual: explica qué ocurre y aporta el mensaje de error completo.
  3. Define el resultado esperado: especifica qué debería devolver, mostrar o guardar el programa.
  4. Proporciona una reproducción mínima: elimina código no relacionado sin ocultar las dependencias necesarias.
  5. Limita el cambio: indica qué archivos o interfaces no deben modificarse.
  6. Pide una explicación: solicita que identifique la causa antes de proponer el arreglo.
  7. Exige pruebas: incluye el caso que fallaba, un caso normal, entradas inválidas y casos límite.
  8. Ejecuta y revisa: prueba el cambio en una rama, entorno virtual, contenedor o sandbox.

Cuando el problema dependa de varios archivos, proporciona primero un mapa breve del proyecto. Indica qué archivo inicia la aplicación, dónde se encuentra la función afectada y qué módulos intervienen. El modelo no conoce automáticamente la estructura de tu computadora.

Plantilla para pedir código sin perder contexto

Un prompt útil separa los hechos de las instrucciones. Esta plantilla evita solicitudes ambiguas como “arregla este código”:

Actúa como revisor de código para esta tarea.

Entorno:
- Lenguaje y versión: [LENGUAJE_Y_VERSION]
- Framework y versión: [FRAMEWORK]
- Sistema o runtime: [ENTORNO]

Objetivo:
[RESULTADO_QUE_DEBE_LOGRAR_EL_CODIGO]

Comportamiento actual:
[QUE_OCURRE_AHORA]

Comportamiento esperado:
[QUE_DEBERIA_OCURRIR]

Pasos para reproducirlo:
1. [PASO_1]
2. [PASO_2]
3. [PASO_3]

Error completo:
[ERROR_O_TRACEBACK]

Código relevante:
[CODIGO]

Restricciones:
- No cambies [INTERFAZ_O_ARCHIVO].
- No agregues dependencias sin justificarlo.
- Propón el cambio mínimo necesario.
- Señala cualquier supuesto que no puedas verificar.

Entrega:
1. Causa probable.
2. Cambio propuesto.
3. Código corregido.
4. Pruebas que demuestren el defecto y la corrección.
5. Comando para ejecutar las pruebas.
6. Riesgos o casos que todavía requieren revisión.

No ocultes la versión de una biblioteca cuando el error puede depender de ella. Una solución válida para una versión anterior puede utilizar funciones eliminadas o parámetros que cambiaron de nombre.

Prompts prácticos para programar con DeepSeek

Explicar un fragmento de código

Explica este código como si yo fuera a mantenerlo a partir de hoy.

Incluye:
- Propósito general.
- Flujo de ejecución.
- Entradas y salidas.
- Efectos secundarios.
- Archivos, servicios o variables externas de los que depende.
- Casos límite.
- Partes que no puedes confirmar con el fragmento disponible.

No inventes el contenido de funciones, módulos o archivos que no aparecen en el mensaje.

Código:
[CODIGO]

Depurar un error sin reescribir todo

Analiza este error y busca la causa raíz.

Entorno:
[VERSIONES_Y_SISTEMA]

Comportamiento esperado:
[RESULTADO_ESPERADO]

Comportamiento actual:
[RESULTADO_ACTUAL]

Traceback o log:
[ERROR_COMPLETO]

Código mínimo:
[CODIGO]

Propón el cambio más pequeño posible. No reescribas otros módulos. Explica por qué ocurre el error y crea una prueba que falle antes del cambio y pase después.

Crear pruebas unitarias útiles

Genera pruebas unitarias para esta función usando [FRAMEWORK_DE_PRUEBAS].

Cubre:
- Caso normal.
- Entrada vacía.
- Valores límite.
- Tipo o valor inválido.
- El defecto descrito.
- Una condición que no debe cambiar durante la refactorización.

Antes de escribirlas, enumera los comportamientos observables que vas a comprobar. No pruebes detalles internos salvo que sea imprescindible.

Código:
[CODIGO]

Refactorizar sin cambiar el comportamiento

Refactoriza este código para mejorar legibilidad y mantenimiento sin cambiar su comportamiento observable.

Restricciones:
- Conserva las firmas públicas.
- No agregues dependencias.
- No cambies el formato de las respuestas.
- No optimices rendimiento sin una medición.
- Presenta el resultado como un diff o separa claramente cada cambio.

Primero identifica los riesgos de regresión. Después propone pruebas de caracterización que documenten el comportamiento actual.

Código:
[CODIGO]

Revisar un pull request

Revisa este cambio como si fuera un pull request.

Busca:
- Errores lógicos.
- Regresiones.
- Manejo incompleto de errores.
- Problemas de concurrencia.
- Riesgos de seguridad.
- Dependencias nuevas o inexistentes.
- Falta de pruebas.
- Cambios incompatibles con la interfaz pública.

Para cada hallazgo indica:
1. Severidad.
2. Archivo y línea o fragmento.
3. Escenario en el que falla.
4. Corrección mínima.
5. Prueba que demostraría el problema.

No marques como error una preferencia de estilo sin explicar su impacto.

Ejemplo práctico: corregir una función y demostrarlo con pruebas

El siguiente ejemplo muestra un defecto pequeño pero realista. La función divide una lista en lotes, pero añade un lote vacío cuando la cantidad de elementos es divisible exactamente por el tamaño.

def dividir_en_lotes(elementos, tamano):
    return [
        elementos[i:i + tamano]
        for i in range(0, len(elementos) + 1, tamano)
    ]

Para [1, 2, 3, 4] y un tamaño de 2, la función devuelve [[1, 2], [3, 4], []]. El lote vacío aparece por el + 1 utilizado en el límite de range.

Un prompt adecuado sería:

Estoy usando Python 3.13.

La función debe dividir una lista en lotes:
- [1, 2, 3, 4] con tamaño 2 debe devolver [[1, 2], [3, 4]].
- [1, 2, 3, 4, 5] con tamaño 2 debe devolver [[1, 2], [3, 4], [5]].
- Una lista vacía debe devolver [].
- Un tamaño igual o menor que cero debe producir ValueError.

Identifica la causa del lote vacío, propón el cambio mínimo y crea pruebas con unittest. No agregues dependencias.
DeepSeek identifica la causa de un error en Python y propone una corrección mínima para dividir listas en lotes

Una corrección mínima es eliminar el incremento del límite y validar el tamaño:

def dividir_en_lotes(elementos, tamano):
    if tamano <= 0:
        raise ValueError("tamano debe ser mayor que 0")

    return [
        elementos[i:i + tamano]
        for i in range(0, len(elementos), tamano)
    ]

Las pruebas pueden escribirse así:

import unittest


class TestDividirEnLotes(unittest.TestCase):
    def test_division_exacta(self):
        resultado = dividir_en_lotes([1, 2, 3, 4], 2)
        self.assertEqual(resultado, [[1, 2], [3, 4]])

    def test_ultimo_lote_incompleto(self):
        resultado = dividir_en_lotes([1, 2, 3, 4, 5], 2)
        self.assertEqual(resultado, [[1, 2], [3, 4], [5]])

    def test_lista_vacia(self):
        self.assertEqual(dividir_en_lotes([], 3), [])

    def test_tamano_invalido(self):
        with self.assertRaises(ValueError):
            dividir_en_lotes([1, 2], 0)


if __name__ == "__main__":
    unittest.main()

Guarda la función y las pruebas en un archivo y ejecútalo con:

python archivo_prueba.py

Este ejemplo se ejecutó localmente con Python 3.13.5 el 10 de noviembre de 2026. Las cuatro pruebas finalizaron correctamente. El objetivo no es asumir que cualquier propuesta del modelo funcionará, sino mostrar que una corrección debe acompañarse de una forma reproducible de comprobarla.

Cómo usar DeepSeek en VS Code o desde la terminal

Para trabajar sobre varios archivos resulta más práctico conectar los modelos de DeepSeek a un coding agent. La documentación oficial mantiene guías para distintas herramientas, pero cada una tiene permisos y comportamientos propios.

HerramientaIntegración oficial documentadaQué debes revisar
CodexUtiliza la compatibilidad de DeepSeek con Responses API y comparte configuración entre CLI, aplicación de escritorio y extensión de VS CodeArchivo de configuración, modelo seleccionado, comandos, permisos del proyecto y cualquier script de instalación
Claude CodeSe conecta mediante el endpoint compatible con Anthropic y variables de entornoQue la clave pertenezca a DeepSeek, el modelo mapeado y los comandos que el agente solicita ejecutar
OpenCodePermite elegir DeepSeek como proveedor e introducir una clave APIVersión de OpenCode, modelo activo, directorio de trabajo y permisos
ContinuePuede utilizar la función FIM para completar código dentro de VS CodeQue FIM sigue en beta, el endpoint configurado y el límite de salida de esa función
DeepSeek HarnessHerramienta oficial de agentes, abierta y disponible en vista previa públicaPlugins instalados, acceso al sistema, comandos, archivos modificados y estado de la versión
Documentación oficial de DeepSeek para integrar sus modelos con Codex CLI y la extensión de VS Code

No instales una extensión solo porque contiene “DeepSeek” en el nombre. Comprueba el editor, el publicador, el repositorio, los permisos solicitados, la fecha de actualización y la política de manejo de la clave API.

Si una guía propone ejecutar un comando descargado directamente de Internet, abre primero el script y revisa su contenido. También conserva una copia de la configuración anterior y trabaja sobre una rama de Git limpia.

¿Puede un agente leer y modificar todo el repositorio?

Depende de la herramienta y de los permisos que le concedas. Un agente puede recibir acceso para buscar archivos, crear cambios, ejecutar comandos o consultar servicios externos. Eso no significa que el modelo comprenda automáticamente todo el proyecto ni que deba recibir permisos ilimitados.

Comienza con acceso de lectura, limita el directorio de trabajo y exige aprobación para comandos. Revisa el diff después de cada cambio y no permitas que el agente combine una refactorización extensa con una corrección urgente en el mismo paso.

Usar DeepSeek API para tareas de programación

La API es útil cuando quieres integrar DeepSeek en un revisor interno, una automatización o una herramienta propia. Es compatible con formatos de OpenAI y Anthropic, pero necesitas una clave API y saldo separado del chat gratuito.

Este ejemplo utiliza el formato Responses API con el SDK de OpenAI:

import os
from openai import OpenAI


client = OpenAI(
    api_key=os.environ["DEEPSEEK_API_KEY"],
    base_url="https://api.deepseek.com",
)

response = client.responses.create(
    model="deepseek-flash",
    instructions=(
        "Actúa como revisor de código. "
        "No inventes dependencias y señala los supuestos."
    ),
    input=(
        "Explica esta función y propone dos casos límite:\n\n"
        "def porcentaje(parte, total):\n"
        "    return parte / total * 100"
    ),
)

print(response.output_text)

Guarda la clave en una variable de entorno. No la escribas dentro del repositorio, un notebook compartido, una captura de pantalla o un archivo que pueda terminar en Git.

La Responses API es stateless: tu aplicación debe administrar el historial necesario y enviarlo cuando corresponda. Evita reenviar conversaciones completas por costumbre; selecciona solo el contexto requerido para la tarea y controla el consumo.

Autocompletado con FIM

FIM significa Fill In the Middle. En lugar de enviar solo el inicio del código, proporcionas un prefijo y un sufijo para que el modelo complete la parte intermedia. Es útil para autocompletado dentro de un editor.

La documentación oficial sigue marcando esta función como beta, requiere la base URL https://api.deepseek.com/beta y limita la salida de FIM a 4K tokens. No la trates como una interfaz estable sin revisar el estado actual antes de integrarla en producción.

Documentación oficial de DeepSeek FIM Completion Beta con límites de 4K tokens y ejemplo de código Python

Cómo verificar el código generado por DeepSeek

El código no es correcto únicamente porque compile o no produzca una excepción. Debe cumplir los requisitos, manejar entradas inesperadas, respetar las interfaces existentes y no introducir riesgos evitables.

  1. Lee la explicación: si no puedes entender el cambio, no lo aceptes.
  2. Revisa el diff: confirma que solo cambió lo necesario.
  3. Ejecuta el formatter y el linter: detecta errores básicos, imports y convenciones.
  4. Ejecuta las pruebas existentes: un arreglo local no debe romper otras funciones.
  5. Añade una prueba de regresión: debe fallar con el código anterior y pasar con la corrección.
  6. Prueba casos límite: valores vacíos, nulos, máximos, mínimos, tipos incorrectos y errores de red.
  7. Verifica dependencias: confirma el nombre en el registro oficial y revisa la versión.
  8. Consulta la documentación: comprueba funciones, parámetros y métodos propuestos.
  9. Mide antes de optimizar: no aceptes una mejora de rendimiento sin benchmark comparable.
  10. Revisa la seguridad: presta especial atención a entradas de usuario, consultas, permisos, secretos y comandos.
  11. Prueba en un entorno separado: evita ejecutar código desconocido directamente en producción.
  12. Haz commit antes del cambio: conserva una forma sencilla de revertirlo.

Distingue entre cuatro niveles: código que no se bloquea, código que devuelve el resultado correcto, código que funciona con entradas reales y código suficientemente seguro y mantenible para producción. Pasar el primer nivel no demuestra los otros tres.

Errores frecuentes al pedir código a DeepSeek

  • No indicar versiones: el modelo puede mezclar APIs antiguas y actuales.
  • Pegar solo el error: sin el código mínimo y los pasos de reproducción, la causa es una conjetura.
  • Pedir una reescritura completa: aumenta el tamaño del cambio y dificulta detectar regresiones.
  • Aceptar una dependencia nueva: el paquete puede no existir, ser innecesario o tener un nombre parecido a otro legítimo.
  • Confundir explicación con ejecución: una respuesta detallada no demuestra que el código se haya ejecutado.
  • Dar acceso al repositorio completo: muchas tareas se resuelven con dos o tres archivos.
  • Confiar en una optimización sin datos: una versión más compleja puede ser más lenta en el entorno real.
  • No revisar comandos del agente: una orden de terminal puede borrar, sobrescribir o publicar información.
  • Usar un nombre de modelo antiguo: una guía desactualizada puede apuntar a un identificador retirado.

Privacidad y seguridad del código

La política de privacidad de DeepSeek incluye los prompts, archivos subidos, fotos, historial del chat y otros contenidos enviados por el usuario entre los datos que puede recopilar. También ofrece controles para excluir los datos del entrenamiento o la optimización de sus tecnologías, según las opciones disponibles en la cuenta.

Esto no convierte automáticamente el chat en un lugar adecuado para código confidencial. Antes de utilizarlo, revisa la política de tu empresa, las condiciones del proyecto y las obligaciones contractuales.

No envíes sin una necesidad justificada:

  • Claves API, access tokens o contraseñas.
  • Archivos .env.
  • Private keys o certificados.
  • Credenciales de bases de datos.
  • Datos de clientes, empleados o usuarios.
  • Logs con correos, identificadores, rutas privadas o tokens.
  • Código propietario sin autorización.
  • Configuraciones de producción.
  • Secretos comerciales o documentación interna restringida.

Sustituye los valores sensibles por placeholders, comparte el fragmento mínimo y elimina datos personales de los logs. Si un agente propone instalar una biblioteca, confirma su existencia en el registro oficial y revisa sus avisos de seguridad antes de ejecutar el comando.

Ventajas y límites de DeepSeek para código

Ventajas

  • Permite comenzar desde un chat gratuito.
  • Puede explicar código y errores en español.
  • Ofrece API compatible con formatos utilizados por herramientas populares.
  • Dispone de integraciones documentadas para agentes de programación.
  • Puede generar pruebas, documentación y cambios pequeños con rapidez.
  • Incluye modos de razonamiento ajustables.

Límites

  • Puede inventar bibliotecas, parámetros o APIs.
  • No conoce tu repositorio salvo que se lo proporciones mediante el chat o una herramienta.
  • No demuestra que el código funciona si no se ejecutan pruebas.
  • Puede utilizar ejemplos de versiones distintas.
  • Requiere revisión adicional para seguridad y producción.
  • Las integraciones con agentes amplían tanto la utilidad como el riesgo.

Preguntas frecuentes

¿DeepSeek es gratis para programar?

El chat web y la aplicación oficial se presentan como gratuitos. Puedes utilizarlos para pegar código, pedir explicaciones y preparar correcciones. La API es un servicio separado que se factura según el uso y requiere saldo.

¿Necesito una clave API?

No para usar el chat oficial. Sí necesitas una clave cuando conectas DeepSeek a tu propia aplicación o a la mayoría de los agentes y herramientas externas que utilizan la API.

¿DeepSeek puede ejecutar código?

No debes asumir que el chat ejecutó el código solo porque muestre una salida. Un coding agent o harness puede ejecutar comandos si dispone de una herramienta y tú le concediste permiso. Comprueba siempre dónde se ejecuta y qué acceso tiene.

¿Puede leer un repositorio completo?

Desde el chat solo conoce el contenido que pegues o adjuntes. Una integración con IDE o un agente puede buscar y leer archivos, pero depende de sus permisos, del contexto enviado y de la configuración. Tener acceso no garantiza que interprete correctamente todo el sistema.

¿Qué lenguajes de programación puede manejar?

Los modelos actuales son de propósito general y pueden trabajar con numerosos lenguajes comunes. La calidad varía según el lenguaje, la biblioteca y la complejidad. Evalúa el resultado con el compilador, el intérprete, las pruebas y la documentación de tu stack.

¿DeepSeek Coder es una extensión oficial para VS Code?

No. DeepSeek Coder fue una familia de modelos, no el nombre genérico de una extensión oficial de VS Code. Existen extensiones de terceros que utilizan DeepSeek, además de integraciones documentadas con Codex, Claude Code, OpenCode, Continue y otras herramientas.

¿Cómo evito que invente dependencias?

Indica que no agregue paquetes sin justificarlo y pide el enlace a la documentación oficial. Después busca el nombre en el registro correspondiente, verifica el publicador, la versión, la fecha de actualización y los avisos de seguridad. No ejecutes un comando de instalación solo porque aparece en la respuesta.

¿Cuándo conviene utilizar otra herramienta?

Considera otra opción cuando necesites una integración que DeepSeek no admite, políticas empresariales específicas, residencia de datos distinta, soporte contractual, herramientas de seguridad especializadas o mejores resultados demostrados en las tareas reales de tu equipo.

Flujo recomendado para trabajar con DeepSeek

Empieza por una tarea pequeña y reproducible. Describe el entorno, entrega el código mínimo, exige una explicación y solicita pruebas. Revisa el diff, ejecuta el código en un entorno seguro y contrasta cualquier API o dependencia con su documentación oficial.

Cuando ese flujo funcione de forma consistente, puedes pasar del chat a una integración con el editor o la API. Amplía los permisos de forma gradual y conserva siempre el control sobre los archivos modificados y los comandos ejecutados.

Fuentes consultadas