Sobre el proyecto
Vole es un monitor de uso, costo y anomalías local-first para agentes de codificación de IA. Está diseñado para situaciones donde varios agentes se ejecutan simultáneamente, consumiendo tokens de forma independiente y sin señalar errores, como quedar atrapados en un bucle de herramientas, reintentar contra una API rota o leer repetidamente el mismo contexto extenso. Mientras otras herramientas responden "¿cuánto gasté?", Vole pregunta "¿está pasando algo mal ahora mismo?" y reporta el gasto como un efecto secundario.
Gestión de datos
Vole lee los archivos de log que las herramientas ya escriben en el disco —por ejemplo, ~/.claude/projects/**/*.jsonl para Claude Code, ~/.local/share/opencode/opencode.db para OpenCode, ~/.codex/sessions/**/rollout-*.jsonl para Codex CLI, ~/.grok/logs/unified.jsonl para Grok CLI, además de almacenes locales para Cursor, Devin y Antigravity— y los normaliza en un único esquema. Todo se ejecuta localmente: sin scraping, sin APIs en la nube, sin inicio de sesión y sin almacenamiento de contenido de prompts o herramientas. El único permiso opcional solicitado es el de notificaciones, para alertas cuando se dispara un incidente crítico.
Herramientas compatibles y política de fidelidad
La cobertura varía según la herramienta: Claude Code y OpenCode proporcionan tokens y costos exactos; Codex CLI y Grok CLI proporcionan tokens exactos pero no tienen una tarifa publicada; Cursor, Devin y Antigravity no registran tokens localmente y, por lo tanto, se cubren solo como actividad. El proyecto establece que, por política, no existe un nivel de "estimación": el recuento de tokens se lee literalmente de los logs de la herramienta o está ausente, y las filas sin tokens cuentan como llamadas pero se excluyen de los agregados de tokens y costos. Se consideró estimar los tokens de Cursor basándose en líneas de código, pero fue rechazado explícitamente.
La aplicación
Un elemento en la barra de menús muestra tokens en vivo, el costo o simplemente el icono, el cual se tiñe mientras hay un incidente abierto. Al hacer clic, se abre un panel con cifras principales, una sparkline y barras por herramienta; un tablero proporciona la vista completa. Su elemento distintivo es una línea de tiempo anotada con incidentes que apila tokens por herramienta y muestra el nombre del grupo, sus tokens y cualquier incidente disparado al pasar el cursor. La aplicación integra su propio colector, lo inicia y se actualiza in situ: un lanzamiento que publica un archivo checksummed ofrece instalación en un clic que verifica el SHA-256 publicado antes de intercambiar el paquete, y un lanzamiento sin checksum nunca se instala silenciosamente.
Línea de comandos y MCP
Junto con la aplicación, Vole expone comandos de terminal sobre los mismos datos: pnpm top (sesiones en vivo, contexto frente a ventana, tokens por minuto, cuenta regresiva de caché), pnpm digest (un resumen de uso del agente en markdown con opciones de rango y JSON), pnpm pr (uso en la rama actual para una descripción de PR), pnpm statusline y pnpm mcp, un servidor MCP de stdio. El servidor MCP expone vole_summary, vole_live_sessions, vole_session, vole_incidents, vole_breakdown, vole_whatif y vole_digest, permitiendo que un agente pregunte cuánto ha costado su propia sesión o si Vole lo ha marcado. El servidor lee la base de datos local y responde en stdout.
Reglas de anomalías
Se incluyen cinco reglas: billable_burn_spike (una ventana de 10 minutos que cuesta más de 3 veces la ventana típica de esa sesión), repeat_call_loop (más de 45 llamadas en 5 minutos mientras la salida permanece plana), error_storm (ratio de error superior al 20% durante 15 minutos con al menos 5 errores), rate_limit_pressure (Codex reporta más del 80% de la cuota consumida) y context_pressure (una llamada ocupó al menos el 80% de la ventana de contexto del modelo). Las líneas base son leave-one-out, comparando una ventana contra la mediana de todas las demás, y la detección de bucles requiere dos señales para que un ráfaga productiva de llamadas no se confunda con un bucle.
Modelo de costos
El costo es el valor equivalente de la API al precio de lista —lo que el uso habría costado a través de la API— y la interfaz indica que los planes de suscripción no se facturan por token. Las tarifas residen en packages/core/src/data/pricing.json, versionadas con effective_from, y un archivo ~/.vole/pricing.json por instalación se fusiona sobre este para que se pueda añadir un modelo sin un lanzamiento; las filas almacenadas antes de que un modelo tuviera tarifa se recalculan retroactivamente. Los modelos desconocidos devuelven NULL, nunca 0.
Verificación y pruebas
El proyecto incluye pnpm test para pruebas unitarias de reglas, consultas, bucketing e invariantes de confianza, y pnpm verify, que concilia cada fila almacenada contra su propio registro de origen utilizando una fórmula de costo reimplementada independientemente. La verificación compara por registro en lugar de por total y falla si el almacén está vacío para evitar pases vacuos. Un comando pnpm seed escribe 30 días de historial sintético etiquetado como source='seed', graficado separadamente de los datos en vivo.
Construcción y limitaciones
Construir desde el código fuente requiere Node 22+, pnpm y Xcode 26, probado en macOS 26 arm64; pnpm app:bundle construye y abre la aplicación, o el colector y la aplicación pueden ejecutarse por separado. Las limitaciones documentadas incluyen cobertura superficial para herramientas que no registran tokens locales, is_error que cubre solo errores de API (por lo que error_storm puede subcontar), velocidades de generación que son límites inferiores para algunas herramientas, ventanas de contexto que se resuelven solo para IDs de modelos de primera mano y temporización aproximada para Antigravity basada en mtimes de archivos. El proyecto tiene licencia MIT y acepta contribuciones, con dos reglas de revisión: nunca inventar un número y cada colector debe ser idempotente.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.