Qué registra Vibetime

La documentación de Vibetime lo presenta como una herramienta de línea de comandos que informa lo que una sesión de codificación asistida por IA cambió realmente en git. En la terminal, envuelve Claude Code, Codex, Gemini, Aster y Opencode. Las sesiones de escritorio de Claude Code, Codex, Cursor y ZCode se capturan mediante hooks de sesión. Las herramientas envueltas siguen funcionando con normalidad: Vibetime observa el estado de git mientras se trabaja e imprime un resumen cuando termina la sesión. De forma predeterminada no requiere configuración, demonio ni cuenta.

Instalación y activación

npm install -g vibetime-cli
vibe
source ~/.zshrc   # o ~/.bashrc / ~/.config/fish/config.fish

Ejecutar vibe sin argumentos realiza toda la configuración. Añade hooks de shell alrededor de los comandos claude, codex, gemini, aster y opencode, y registra hooks de sesión de escritorio para las aplicaciones Claude Code, Codex, Cursor y ZCode. Fish, Bash y Zsh se detectan automáticamente, y la sintaxis correspondiente se escribe en el archivo rc de ese shell. vibe init realiza la misma configuración de manera explícita y puede ejecutarse de nuevo sin riesgo.

Resúmenes de sesión y puntuación

Cuando termina una sesión en una herramienta compatible, Vibetime imprime una tarjeta final como esta:

╭─────────────────────────────────────────────╮
│  ◆ vibe  ·  api  ·  2h 14m                  │
├─────────────────────────────────────────────┤
│                                             │
│  3 commits  ·  +847 −231  ·  12 files       │
│                                             │
│  ████████░░  shipped  ✦                     │
│                                             │
╰─────────────────────────────────────────────╯

Las sesiones del día actual, incluidas las que siguen activas, pueden consultarse con vibe status.

La vista de vibe status
La vista de vibe status — Fuente

Una vez activada la clasificación opcional, cada sesión clasificada como shipped cuenta en ella. Vibetime determina el nivel de la sesión a partir de la actividad de git:

Nivel Barra Significado
shipped ████████░░ commits y cambios significativos
progressed ██████░░░░ commits con cambios pequeños
tinkering ████░░░░░░ cambios sin commits
exploring ██░░░░░░░░ se modificaron unas pocas líneas
idle ░░░░░░░░░░ nada cambió
interrupted ░░░░░░░░░░ la sesión se cerró o falló

Duración e inactividad

Vibetime consulta el estado de git cada 30 segundos. Si durante 30 minutos no detecta cambios de archivos, commits ni actividad de preparación, ese periodo inactivo se excluye de la duración de la sesión. La suspensión del portátil y la inactividad en segundo plano se gestionan automáticamente. En proyectos que no son repositorios git se utiliza el tiempo de reloj.

Propiedad y deduplicación de commits

Después de iniciar sesión, solo se acreditan los commits del propio usuario. Incorporar mediante pull o merge el trabajo de otras personas del equipo a una rama durante una sesión ya no hace que esos commits cuenten como propios. Vibetime compara la dirección de correo de git config user.email del repositorio con las direcciones noreply de GitHub del usuario, por lo que los commits creados desde la interfaz web de GitHub también cuentan sin configuración adicional. Sin iniciar sesión, todo lo incluido en el intervalo medido cuenta como antes.

Cada commit se acredita una sola vez, aunque varias sesiones puedan verlo. Esto puede ocurrir con agentes en worktrees paralelos del mismo repositorio, dos ventanas de editor sobre una misma rama, una terminal junto a un editor o una segunda máquina a la que el usuario haya llevado su propio trabajo. Normalmente el commit se asigna a la sesión que trabaja en el checkout donde se creó, de modo que el trabajo paralelo recibe todo el crédito sin contarse dos veces. Fusionar, rebasar o enmendar trabajo por el que una sesión ya recibió crédito no lo vuelve a contar, y tampoco lo hace una fusión squash de una rama que estaba al día. La documentación señala un caso que no puede reconocer: un squash sobre una rama main que ha avanzado desde entonces.

Trabajo con varios repositorios

Una sesión puede iniciarse en cualquier directorio. Si ese directorio no es un repositorio, Vibetime detecta los repositorios situados directamente dentro de él y los mide todos, de modo que una sesión que modifica api/ y web/ se puntúa en ambos. Un directorio que no contiene ningún repositorio dentro o debajo no se registra porque no habría nada que medir.

Aplicaciones de escritorio

Las aplicaciones de escritorio Claude Code, Codex, Cursor y ZCode no ejecutan los comandos de terminal envueltos, por lo que el wrapper del shell no puede observarlas. Vibetime las registra mediante hooks de sesión. vibe init configura estos hooks automáticamente; las instalaciones inicializadas antes de que existiera la compatibilidad con escritorio pueden ejecutar vibe init otra vez o usar:

vibe hooks install

El instalador registra hooks en ~/.claude/settings.json, ~/.codex/hooks.json, ~/.cursor/hooks.json y ~/.zcode/cli/config.json para las cuatro aplicaciones. También puede escribir entradas para una aplicación que todavía no esté instalada; permanecen como configuración inerte hasta que la aplicación exista, así que cambiar a una de esas aplicaciones meses después no exige repetir la configuración. Los hooks que Vibetime no creó no se modifican. A partir de entonces, cada sesión de escritorio se registra y aparece en vibe status, vibe log, vibe share y la clasificación igual que una sesión de terminal.

  • Claude Code recarga su configuración automáticamente, por lo que basta con abrir una nueva sesión de Desktop.
  • Codex carga los hooks en la siguiente sesión. Según la versión de Codex, la aplicación puede pedir primero que se revisen y se marquen como de confianza. Si las sesiones de Codex no aparecen en vibe status, la documentación indica que esa es la causa probable; hay que revisar y aceptar los hooks de Vibetime en Settings y después Hooks en la aplicación de escritorio, o con /hooks en la CLI. Se necesita una compilación de Codex de mayo de 2026 o posterior, cuando los hooks pasaron a estar disponibles de forma general. La compatibilidad se ha probado en macOS y Linux. Windows no está probado, aunque los hooks incluyen una variante de comando para Windows y el proyecto agradece informes. Si Codex importó hooks de Claude Code, vibe hooks install sustituye esas copias por versiones propias de Codex que etiquetan las sesiones como Codex y se ajustan al límite de tres segundos de SessionEnd.
  • Cursor recarga automáticamente ~/.cursor/hooks.json, así que es suficiente abrir una nueva sesión de Agent. Si las sesiones no aparecen, se pueden confirmar los hooks de Vibetime en Customize y después Hooks. Cursor también puede importar hooks de Claude Code cuando las configuraciones de terceros están activadas; esas copias se etiquetan como Cursor, no como Claude. Los hooks de nivel de usuario no se ejecutan en agentes en la nube. La compatibilidad con Cursor se ha probado en macOS, y se agradecen informes para Windows y Linux.
  • ZCode lee ~/.zcode/cli/config.json al iniciarse y mantiene desactivados los hooks nuevos. Hay que cerrar y volver a abrir ZCode, y luego activar los cuatro hooks de Vibetime en Installed dentro de Settings y Hooks. Las copias de hooks de Claude Code situadas en Legacy deben dejarse como están, porque los hooks importados etiquetarían las sesiones de ZCode como Claude. Si cambia la ruta fijada de Node y vibe hooks install reescribe los hooks, ZCode los desactiva otra vez hasta que se activen manualmente. ZCode no tiene un evento de fin de sesión, por lo que una sesión se cierra tras 30 minutos de inactividad, igual que una sesión de escritorio abandonada. Los subagentes de ZCode cuentan para la sesión que los inició en lugar de abrir sesiones propias.

La duración en escritorio sigue la misma regla que en la terminal: cuenta el tiempo de codificación activa y excluye los huecos inactivos de más de 30 minutos.

Usar a la vez el wrapper de terminal y los hooks de escritorio no hace que una sesión de terminal se cuente dos veces. Los hooks de escritorio no actúan cuando el wrapper del shell ya está registrando el trabajo.

Los hooks usan rutas absolutas porque una aplicación de escritorio iniciada desde el Dock no hereda el PATH del shell, por lo que una llamada simple a vibe podría no resolverse. vibe hooks install fija las rutas absolutas de Node y de la CLI. Tras cambiar de versión de Node, por ejemplo con una actualización de nvm que elimine la versión anterior, vibe status apunta los hooks a la instalación actual de Node. También puede indicar qué aplicación sigue sin registrarse y explicar el motivo, como un archivo de configuración que ya no es JSON válido.

El seguimiento de escritorio puede detenerse sin quitar el wrapper del shell:

vibe hooks uninstall

Clasificación y tarjetas para compartir

La clasificación opcional está disponible públicamente en https://vibetime.club/leaderboard; no se necesita la CLI para consultarla.

vibe login
vibe leaderboard
vibe logout

vibe login inicia sesión mediante GitHub, vibe leaderboard muestra las entregas de esta semana desde la terminal y vibe logout cierra sesión y detiene los envíos.

La clasificación ordena por entregas, es decir, sesiones que confirman un commit con cambios significativos. La documentación define significativos como más de 50 líneas o más de 3 archivos. Los archivos de bloqueo como package-lock.json, yarn.lock y Cargo.lock quedan fuera de ambos recuentos porque un archivo regenerado no se considera trabajo. Los cuadros de la página muestran los días en los que el usuario entregó. La vista web ofrece pestañas para esta semana, definida de lunes a domingo en UTC, este mes y todo el historial.

El inicio de sesión utiliza el flujo de dispositivo de GitHub: no hay una llamada de retorno desde el navegador, solo un código corto que se introduce en github.com. Hasta ejecutar vibe login, Vibetime no realiza solicitudes de red. Después de iniciar sesión, la tarjeta final se muestra con normalidad y la sesión se envía en segundo plano. Si la máquina está sin conexión, el envío se reintenta al terminar la siguiente sesión.

Iniciar sesión por sí solo no crea una entrada en la clasificación. La primera sesión válida debe durar al menos un minuto y confirmar un commit con cambios significativos. Las sesiones de terminal se envían en cuanto Vibetime detecta ese resultado, normalmente en el minuto siguiente al commit, por lo que la entrada puede aparecer mientras el usuario sigue trabajando. Las sesiones de escritorio se envían al terminar. Además, la página web se almacena en caché durante un minuto.

Quienes inician sesión después de haber estado registrando actividad no pierden ese trabajo. Las sesiones de las dos semanas anteriores se envían en el siguiente vaciado, y vibe leaderboard activa uno inmediatamente. Si falta una entrada esperada, vibe status es la herramienta de diagnóstico: las sesiones marcadas como progressed o tinkering no cumplen los requisitos porque solo cuentan las entregas. Si hay sesiones terminadas aún pendientes en el servidor, vibe status lo indica, y vibe leaderboard reintenta la carga.

Los campos enviados son tool, startedAt, endedAt, durationSeconds, commits, linesAdded, linesRemoved, filesTouched, momentum, un hash SHA-256 del nombre del proyecto y un hash con sal del nombre de la rama. La sal de la rama se genera aleatoriamente en la máquina del usuario y nunca se transmite, por lo que el hash solo indica si dos sesiones usaron la misma rama y no puede convertirse de nuevo en el nombre. Para cada commit acreditado, Vibetime envía hashes con clave del commit, de su autor y fecha de autoría, y de la instantánea que produjo, junto con la fecha del commit y sus recuentos de líneas y archivos. La clave se emite por cuenta, así que el mismo commit enviado desde dos máquinas del usuario produce el mismo hash y se cuenta una sola vez. Los identificadores de commits, los mensajes de commit, los nombres de archivos, los nombres de ramas, los nombres de repositorios sin procesar, el correo electrónico del usuario, los códigos de salida y el identificador local nunca salen de la máquina.

vibe logout elimina ~/.vibe/auth.json y los envíos se detienen inmediatamente.

Una insignia para README puede mostrar las entregas del usuario:

[![vibetime](https://vibetime.club/@your-handle/badge.svg)](https://vibetime.club/@your-handle)

La insignia muestra las entregas históricas y se actualiza cada hora. Añadir ?window=week o ?window=month a la URL de la insignia cambia el periodo mostrado.

vibe share imprime una tarjeta semanal de resumen. Al pulsar h se abre la versión HTML, que puede copiarse, capturarse en una imagen o publicarse.

La tarjeta semanal de vibe share en una terminal
La tarjeta semanal de vibe share en una terminal — Fuente
La versión HTML de una tarjeta de vibe share
La versión HTML de una tarjeta de vibe share — Fuente

Las rachas miden días consecutivos con entregas. Si el usuario entregó ayer pero todavía no lo ha hecho hoy, la racha muestra un reloj de arena para indicar que el día aún está abierto.

Herramientas adicionales y comandos

La documentación afirma que Vibetime puede envolver cualquier CLI de IA. Una herramienta no cubierta por la configuración predeterminada puede añadirse explícitamente, por ejemplo:

vibe config add-tool aider
Comando Función
vibe status Muestra las sesiones de hoy, incluidas las activas
vibe log Muestra las últimas 20 sesiones
vibe share Imprime la tarjeta semanal de resumen
vibe share --html Genera una tarjeta HTML para compartir
vibe login Inicia sesión en la clasificación mediante GitHub
vibe logout Cierra la sesión de la clasificación
vibe leaderboard Muestra las entregas de esta semana
vibe config show Muestra la configuración actual
vibe config set handle <name> Define el @handle que aparece en las tarjetas
vibe config add-tool <name> Registra otra CLI de IA
vibe hooks install Activa el registro de sesiones de escritorio de Claude Code, Codex, Cursor y ZCode
vibe hooks uninstall Detiene el registro de sesiones de escritorio
vibe uninstall Elimina los hooks de shell y de escritorio

Cada sesión pertenece al día en que comenzó, de modo que una sesión que continúa después de medianoche sigue apareciendo bajo el día anterior.

Desinstalación, privacidad y licencia

vibe uninstall
npm uninstall -g vibetime-cli

vibe uninstall retira todo lo configurado por vibe init: los hooks de shell del archivo rc y los hooks de escritorio de Vibetime en ~/.claude/settings.json, ~/.codex/hooks.json, ~/.cursor/hooks.json y ~/.zcode/cli/config.json, conservando los hooks que no creó. vibe hooks uninstall elimina solo el seguimiento de escritorio. Los datos de sesión de ~/.vibe/ se conservan; quien desee una eliminación completa debe borrar ese directorio manualmente.

Vibetime no tiene telemetría y no exige una cuenta de forma predeterminada. Los datos permanecen en la máquina salvo que el usuario active los envíos a la clasificación con vibe login. La herramienta indica que solo lee metadatos de git como recuentos de commits, líneas y archivos. No lee contenido de archivos, variables de entorno, claves de API ni texto escrito en una herramienta envuelta. La entrada y salida estándar de la CLI de IA se transmiten directamente mediante spawn con stdio: 'inherit'.

La documentación describe los hooks de escritorio con los mismos límites: leen únicamente el identificador de sesión y el directorio de trabajo de la carga útil del hook, nunca la transcripción, los prompts ni la salida del modelo, y derivan a partir de ahí los mismos metadatos de git. Todos los datos locales se almacenan en ~/.vibe/.

Vibetime se distribuye bajo la licencia MIT.