Registro automático y verificable del tiempo de desarrollo en VS Code. DevPulse mide cuánto se dedica a cada proyecto sin cronómetros manuales, calcula estadísticas útiles para el equipo y la administración, y exporta informes de Excel firmados criptográficamente para que nadie pueda alterarlos después de entregarlos.
- Tiempo activo: ventana enfocada con interacción reciente (teclado, cursor, cambios de archivo) o un comando corriendo en el terminal integrado. El umbral de inactividad por defecto es de 2 minutos, el valor con mejor respaldo empírico en la literatura; muchas herramientas usan 15 minutos, lo que infla las cifras.
- Tiempo en terminal: parte del tiempo activo transcurrida con un comando en marcha. Hoy media jornada puede transcurrir en agentes de línea de comandos, compilaciones y pruebas; ninguna otra extensión lo contabiliza.
- Tiempo en primer plano: ventana de VS Code enfocada, aunque no haya interacción.
- Tiempo en segundo plano: VS Code abierto sin foco, dentro de un periodo de gracia configurable.
- Líneas añadidas y eliminadas (churn de edición), caracteres escritos y guardados.
- Archivos únicos editados y tiempo por lenguaje.
- Sesiones de trabajo y concentración: bloques continuos de actividad. Se informa del número de sesiones de foco (15 minutos o más) y del porcentaje de días con al menos una, no de "horas de foco": son los dos indicadores con validación publicada frente a la concentración percibida, mientras que el total de horas no predice nada.
- Compilaciones y pruebas: cuánto tardan (mediana y percentil 90, no media), con qué frecuencia fallan y cuánto tiempo se pierde esperándolas. Mide el proyecto, no a la persona: si empeora, hay algo que arreglar.
- Cómo llega el código: qué parte se teclea y qué parte entra en bloque (pegado, plantillas o sugerencias aceptadas de un asistente), junto con los asistentes de IA instalados. También cuenta los archivos modificados fuera del editor por scripts o agentes. No afirma quién escribió el código: dice cómo llegó.
- Entregas: los commits de los repositorios abiertos, guardando solo el hash abreviado y la hora, para contrastar el tiempo registrado con trabajo real y verificable.
- Histograma por hora del día (horas pico), por día de la semana, y agregados diarios, semanales (ISO), mensuales y totales.
- Indicadores derivados: media por día activo, media semanal y mensual, rachas de días consecutivos, índice de consistencia, tendencia (media móvil exponencial y regresión lineal) y ratio de foco.
El tiempo se acumula con un muestreo de baja frecuencia (5 s por defecto) con detección de inactividad y protección frente a suspensiones del equipo: dejar el portátil abierto no infla las horas.
- La barra de estado muestra el tiempo de hoy en el proyecto actual; el tooltip resume día, semana y mes.
- El comando DevPulse: Abrir panel de métricas abre un dashboard con KPIs, gráfico de actividad de los últimos 30 días con línea de tendencia, mapa de calor semana × hora, tabla por proyecto y distribución por lenguajes. Se adapta al tema claro/oscuro del editor.
Comandos Exportar informe a Excel (.xlsx), Exportar datos a CSV y Exportar datos a JSON.
- Antes de exportar puedes elegir qué proyectos incluir: los proyectos personales quedan fuera del informe si los desmarcas.
- El Excel incluye 10 hojas: Resumen (KPIs), Proyectos, Diario, Semanal, Mensual, Compilaciones y pruebas, Lenguajes, Sesiones, Horas del día y Verificación.
- El CSV usa separador
;, decimales con coma y BOM UTF-8, de modo que Excel en español lo abre directamente.
Cada exportación se firma con una clave Ed25519 generada en la instalación del desarrollador:
- Junto al informe se crea un fichero
*.firma.jsoncon los datos canónicos, el hash SHA-256 del contenido y del propio fichero exportado, y la firma. - El administrador verifica cualquier informe con DevPulse: Verificar una exportación firmada. Si el Excel, el CSV o la firma se tocaron después de generarse, la verificación falla e indica el motivo.
- Cada desarrollador comunica una única vez su huella de clave (DevPulse: Mostrar huella de la clave de firma). La huella aparece en cada firma y en la hoja Verificación del Excel, lo que permite atribuir cada informe a la instalación que lo emitió.
Conviene ser preciso, porque de ello depende el uso que tenga sentido dar a los informes.
Sí garantiza que el informe recibido es byte a byte el que salió de la extensión. Detecta que alguien abra el Excel y cambie 4 horas por 8, que se retoque el CSV en el camino o que se altere el propio fichero de firma. También vincula el informe a una instalación concreta a través de la huella.
No garantiza que los datos fueran ciertos en el momento de generarse. La extensión se ejecuta en el equipo del desarrollador, con sus datos en un JSON local y su clave privada en su disco: quien controla la máquina puede editar el registro antes de exportar, o firmar un informe fabricado con su propia clave, y en ambos casos la verificación resultará válida. Esto no es un defecto de la implementación, sino el límite de cualquier registro que se ejecute íntegramente en el equipo medido.
En consecuencia, DevPulse está pensado como herramienta de medición y reporte, útil para conocer la dedicación real y para impedir la manipulación del informe una vez emitido. Si se necesita un registro resistente a la manipulación del propio usuario medido, los datos deben enviarse en continuo a un servidor bajo control de la organización, que sea quien selle el tiempo y emita los informes.
DevPulse funciona por completo sin servidor, y así viene de fábrica. Las organizaciones que necesiten un registro de horas que el propio trabajador no pueda alterar pueden conectar su instalación de DevMonitor, un servidor que se instala en la máquina de la empresa.
Con el comando Conectar con el servidor de la organización se indican la dirección y el token personal. A partir de ahí:
- La primera vez que se abre un proyecto, la extensión pregunta si es de trabajo o personal. Los personales no se envían nunca: ni sus horas, ni su nombre, ni su ruta. Mientras un proyecto no se haya clasificado tampoco sale nada, así que un descuido no filtra información privada. La decisión se cambia cuando se quiera desde Clasificar proyectos.
- La actividad se envía en bloques de un minuto. El servidor los sella con su propio reloj, rechaza los que vengan del futuro y no admite dos veces el mismo minuto, de modo que no se puede declarar más jornada que tiempo realmente transcurrido, ni cambiando la hora del equipo ni repitiendo envíos.
- Si no hay conexión, nada se pierde: la cola se conserva y se reintenta.
- El informe lo descarga el administrador desde el servidor, con datos que no han pasado por las manos de quien los genera.
El token se guarda en el almacén de secretos del editor, nunca en un fichero de configuración.
Sin modo servidor, todos los datos se guardan solo en tu equipo, en el almacenamiento global de la extensión, particionados por mes en JSON. DevPulse no envía nada a ningún servidor. El comando Abrir carpeta de datos muestra los ficheros; Restablecer datos crea siempre una copia de seguridad antes de vaciar.
| Comando | Descripción |
|---|---|
DevPulse: Abrir panel de métricas |
Dashboard con KPIs y gráficos |
DevPulse: Exportar informe a Excel (.xlsx) |
Informe completo firmado |
DevPulse: Exportar datos a CSV |
Datos diarios firmados, formato Excel es-ES |
DevPulse: Exportar datos a JSON |
Datos en bruto firmados |
DevPulse: Conectar con el servidor de la organización |
Configura dirección y token (opcional) |
DevPulse: Clasificar proyectos (trabajo o personal) |
Decide qué proyectos se envían y cuáles no |
DevPulse: Enviar ahora al servidor |
Fuerza el envío de lo pendiente |
DevPulse: Verificar una exportación firmada |
Comprueba integridad y huella de un informe |
DevPulse: Mostrar huella de la clave de firma |
Huella a registrar por el administrador |
DevPulse: Abrir carpeta de datos |
Abre el directorio de datos local |
DevPulse: Restablecer datos (con copia de seguridad) |
Vacía los datos tras crear una copia |
| Ajuste | Por defecto | Descripción |
|---|---|---|
devpulse.idleTimeoutSeconds |
120 |
Segundos sin interacción para dejar de contar tiempo activo |
devpulse.sessionGapSeconds |
600 |
Pausa máxima que mantiene viva una sesión |
devpulse.backgroundGraceSeconds |
1800 |
Máximo de segundo plano contabilizado tras perder el foco |
devpulse.tickSeconds |
5 |
Frecuencia interna de muestreo |
devpulse.excludedProjects |
[] |
Carpetas de proyecto que no se registran nunca |
devpulse.trackTerminal |
true |
Contar los comandos del terminal integrado como tiempo activo |
devpulse.trackFeedbackLoops |
true |
Medir duración y fallos de compilaciones y pruebas |
¿Las líneas añadidas/eliminadas son el diff de git? No: miden el trabajo de edición (churn). Reescribir una línea cuenta en ambos lados. Es una medida de esfuerzo, no de tamaño final del cambio.
¿Qué pasa si dejo VS Code abierto toda la noche? Nada: sin interacción el tiempo activo se corta a los 2 minutos, el segundo plano a los 30, y una suspensión del equipo no acredita el hueco.
¿Funciona con varios proyectos en la misma ventana (multi-root)? Sí: el tiempo se atribuye al proyecto del archivo activo.
¿Y si tengo una ventana abierta por proyecto? También. Cada ventana guarda en su propia partición y los informes las combinan, así que ninguna pisa el trabajo de las otras.
¿Por qué no medís productividad? Porque no se puede desde un editor, y quien diga lo contrario está vendiendo humo. Lo que ocurre en el editor es esfuerzo, no resultado: la comprensión de código ocupa cerca del 70 % de la jornada y la edición apenas el 5 %, y el tiempo de teclado explica solo una fracción marginal de la productividad percibida. DevPulse mide dedicación y salud del entorno de trabajo, que sí son medibles y accionables.
MIT