tokensave

oficial

¡Potencia tu Agente con Inteligencia Semántica de Código y ahorra 💰 en el proceso!

¿Qué puedes hacer con Tokensave MCP?

  • Buscar símbolos por nombre o significado — Usa tokensave_search para localizar funciones, clases o tipos en la base de código indexada.
  • Obtener contexto de código relevante para una tarea en una sola llamada — Pide a tokensave_context puntos de entrada, símbolos relacionados y fragmentos de código para una tarea determinada.
  • Rastrear llamantes y llamados de una función — Usa tokensave_callers y tokensave_callees para navegar por el grafo de llamadas.
  • Analizar el impacto de cambiar un símbolo — Usa tokensave_impact para ver todo el código afectado por una modificación.
  • Identificar problemas de calidad del código — Usa tokensave_dead_code, tokensave_complexity o tokensave_circular para encontrar símbolos inalcanzables, funciones complejas o dependencias circulares.
  • Persistir decisiones entre sesiones — Usa tokensave_record_decision y tokensave_session_recall para guardar y recuperar decisiones de diseño.

Documentación

TokenSave

Inteligencia de Código Semántica para Agentes de Programación con IA

Menos tokens • Menos llamadas a herramientas • 100% local

GitHub stars crates.io License: MIT Rust

macOS Linux Windows Hypercommit


¿Por qué tokensave?

Los agentes de programación con IA desperdician tokens explorando bases de código. Cada grep, glob y lectura de archivo cuesta dinero. En tareas complejas, los agentes generan múltiples subagentes de exploración que escanean cientos de archivos solo para construir contexto.

tokensave proporciona a los agentes un grafo de conocimiento semántico preindexado. En lugar de escanear archivos, el agente consulta el grafo y obtiene respuestas instantáneas y estructuradas: los símbolos correctos, sus relaciones y el código fuente, en una sola llamada.

Cómo Funciona

┌──────────────────────────────────────────────────────────────┐
│  AI Coding Agent (Claude Code, Codex, Gemini, Cursor, ...)   │
│                                                              │
│  "Implement user authentication"                             │
│        │                                                     │
│        ▼                                                     │
│  ┌─────────────────┐       ┌─────────────────┐               │
│  │  Sub-agent      │ ───── │  Sub-agent      │               │
│  └────────┬────────┘       └─────────┬───────┘               │
└───────────┼──────────────────────────┼───────────────────────┘
            │                          │
            ▼                          ▼
┌──────────────────────────────────────────────────────────────┐
│  tokensave MCP Server                                        │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐           │
│  │   Search    │  │   Callers   │  │   Context   │           │
│  │   "auth"    │  │  "login()"  │  │   for task  │           │
│  └──────┬──────┘  └──────┬──────┘  └──────┬──────┘           │
│         └────────────────┼────────────────┘                  │
│                          ▼                                   │
│              ┌───────────────────────┐                       │
│              │   libSQL Graph DB     │                       │
│              │   • Instant lookups   │                       │
│              │   • FTS5 search       │                       │
│              └───────────────────────┘                       │
└──────────────────────────────────────────────────────────────┘

Sin tokensave: Los agentes usan grep, glob y Read para escanear archivos: muchas llamadas a la API, alto uso de tokens.

Con tokensave: Los agentes consultan el grafo a través de herramientas MCP: resultados instantáneos, procesamiento local, menos tokens.


Características Clave

Construcción Inteligente de ContextoBúsqueda SemánticaAnálisis de Impacto
Una llamada a herramienta devuelve todo lo que el agente necesita: puntos de entrada, símbolos relacionados y fragmentos de código.Encuentra código por significado, no solo por texto. Busca "autenticación" y encuentra login, validateToken, AuthService.Sabe exactamente qué se rompe antes de cambiarlo. Rastrea llamadores, llamados y el radio de impacto completo de cualquier símbolo.
Más de 80 Herramientas MCPMás de 50 LenguajesMás de 12 Integraciones con Agentes
Desde recorrido del grafo de llamadas hasta detección de código muerto, primitivas de edición atómica, métricas de salud del código, mapeo de pruebas y análisis de complejidad.Rust, Go, Java, Python, TypeScript, C, C++, Swift, Svelte, Astro y 42 más, incluyendo shaders WGSL/HLSL/Metal y Markdown. Tres niveles (lite/medium/full) controlan el tamaño del binario.Claude Code, Codex CLI, Gemini CLI, Qwen Code, Kiro, Cursor, OpenCode, Copilot, Cline, Roo Code, Zed, Antigravity, Kilo CLI, Kimi CLI, Mistral Vibe, Grok Build, Factory Droid.
Indexación Multi-Rama (opcional)100% LocalSiempre Actualizado
Bases de datos opcionales por rama. Diferencias y búsqueda entre ramas sin cambiar tu checkout.Ningún dato sale de tu máquina. Sin claves API. Sin servicios externos. Todo se ejecuta en una base de datos libSQL local.Verificación de obsolescencia bajo demanda en cada llamada MCP (con enfriamiento de 30 s) más sincronización de actualización cuando el servidor se conecta. Se espera que el trabajo multiagente use git worktrees: cada agente obtiene su propio checkout y las divergencias del índice se fusionan mediante git, no mediante un observador de archivos.
Extracción Aislada en SubprocesoAnalíticas de Salud del CódigoPrimitivas de Edición Atómica
Un fallo nativo en cualquier gramática de tree-sitter (abort, segfault, lo que sea) solo mata al trabajador; el grupo lo regenera y la sincronización continúa. La sincronización nunca muere por un archivo mal formado.Puntuación de salud compuesta (0-10000), desigualdad de Gini, profundidad del DAG de archivos, matriz de estructura de diseño, brechas de prueba ponderadas por riesgo y deltas de sesión.Edita archivos sin riesgos de regex o shell-quoting: str_replace de anclaje único, reemplazo múltiple atómico, reescritura AST, inserción anclada. Reindexa automáticamente después de las escrituras.

Inicio Rápido

1. Instalar

Homebrew (macOS):

brew install aovestdipaperino/tap/tokensave

Scoop (Windows):

scoop bucket add tokensave https://github.com/aovestdipaperino/scoop-bucket
scoop install tokensave

Cargo (cualquier plataforma):

cargo install tokensave                          # full (50+ languages, default)
cargo install tokensave --features medium        # medium tier
cargo install tokensave --no-default-features    # lite (smallest binary)

Binarios precompilados (Linux, Windows, macOS):

Descárgalos desde la última versión y coloca el binario en tu PATH.

PlataformaArchivo
macOS (Apple Silicon)tokensave-vX.Y.Z-aarch64-macos.tar.gz
Linux (x86_64)tokensave-vX.Y.Z-x86_64-linux.tar.gz
Linux (ARM64)tokensave-vX.Y.Z-aarch64-linux.tar.gz
Windows (x86_64)tokensave-vX.Y.Z-x86_64-windows.zip

2. Configurar tu agente

tokensave install                         # auto-detects installed agents
tokensave install --agent antigravity     # Google Antigravity (formerly Windsurf)
tokensave install --agent auggie          # AugmentCode
tokensave install --agent claude          # Claude Code
tokensave install --agent cline           # Cline
tokensave install --agent codex           # OpenAI Codex CLI
tokensave install --agent copilot         # GitHub Copilot
tokensave install --agent cursor          # Cursor
tokensave install --agent droid           # Factory Droid
tokensave install --agent gemini          # Gemini CLI
tokensave install --agent kilo            # Kilo CLI
tokensave install --agent kiro            # AWS Kiro
tokensave install --agent kimi            # Moonshot Kimi CLI
tokensave install --agent opencode        # OpenCode
tokensave install --agent pi              # Pi (pi.dev)
tokensave install --agent qwen            # Qwen Code
tokensave install --agent roo-code        # Roo Code
tokensave install --agent vibe            # Mistral Vibe
tokensave install --agent zed             # Zed
tokensave install --agent grok            # Grok Build (xAI)
tokensave install --git-hook yes           # auto-install the global post-commit and post-checkout hooks (no prompt)
tokensave install --git-hook no            # skip the post-commit and post-checkout hooks (no prompt)

Cada agente registra su servidor MCP en el formato de configuración nativo. Claude Code recibe adicionalmente un hook PreToolUse (bloquea agentes Explore derrochadores), un hook UserPromptSubmit, un hook Stop, reglas de prompt en CLAUDE.md y permisos de herramientas auto-permitidos. Kiro obtiene configuración MCP global, dirección tokensave.md cargada como recurso y un agente predeterminado gestionado por tokensave con aprobación permisiva de herramientas integradas/de tokensave, hooks de barandilla de delegación y sincronización post-escritura; los agentes Kiro gestionados por el usuario se preservan.

Todos los cambios son idempotentes: es seguro ejecutarlos de nuevo después de una actualización. Después de la configuración del agente, se te ofrecerán hooks globales de git post-commit y post-checkout.

Instalación local del proyecto

Por defecto, tokensave install registra el servidor MCP en la configuración global de tu agente (por ejemplo, ~/.claude.json). Para registrar tokensave solo para el proyecto actual, añade --local:

tokensave install --local --agent claude

Esto escribe una configuración con ámbito de proyecto que puedes commitear y compartir con tu equipo. Para Claude, eso es ./.mcp.json, ./.claude/settings.json y ./CLAUDE.md. Agentes soportados: claude, cursor, droid, gemini, zed, opencode, roo-code, kiro, auggie (cada uno escribe su propio archivo de proyecto, por ejemplo, .cursor/mcp.json, .factory/mcp.json, .gemini/settings.json, .zed/settings.json, opencode.json, .roo/mcp.json, .kiro/settings/mcp.json, .augment/settings.json). Otros agentes no tienen configuración con ámbito de proyecto y reportan un error con --local.

Elimina una instalación local del proyecto con tokensave uninstall --local.

3. Indexar tu proyecto

cd /path/to/your/project
tokensave init

Esto crea un directorio .tokensave/ con la base de datos del grafo de conocimiento. La inicialización y la sincronización son comandos separados: init es una inclusión voluntaria única por proyecto, mientras que sync solo actualiza proyectos que ya fueron inicializados. Esto evita que los hooks globales de git creen bases de datos silenciosamente en repositorios que nunca pretendiste indexar. Después de init, usa tokensave sync para actualizar incrementalmente: solo se reindexan los archivos modificados.

Lo que la instalación escribe para Claude Code

Servidor MCP

{
  "mcpServers": {
    "tokensave": {
      "command": "/path/to/tokensave",
      "args": ["serve"]
    }
  }
}

Hook PreToolUse

El hook ejecuta tokensave hook-pre-tool-use: un comando nativo de Rust (no requiere bash ni jq). Intercepta llamadas a herramientas Agent, Grep y Bash: los agentes Explore se bloquean por completo, y las invocaciones de grep/rg/ag con forma de símbolo (identificadores simples, alternancias, nombres envueltos en \b) se redirigen a la herramienta MCP de tokensave correspondiente. Los patrones regex, modos de descubrimiento de archivos, git grep y comandos con tuberías pasan sin modificaciones; establece TOKENSAVE_DISABLE_GREP_HOOK=1 para excluirte por shell.

Despacho sin cabeza / subagente (claude -p). Los procesos hijos despachados por una sesión orquestadora heredan su ~/.claude/settings.json, incluyendo este hook. Para permitir que un hijo ejecute búsquedas sin procesar, establece TOKENSAVE_DISABLE_GREP_HOOK=1 en el entorno del hijo: el binario nativo lo respeta y deja pasar cada ruta (Grep, Bash, Agent), por lo que no hay necesidad del contundente --settings '{"hooks": {}}' que elimina todos los hooks. La barandilla no tiene estado: nunca consulta el historial de citas, por lo que solo redirige las búsquedas con forma de símbolo descritas anteriormente y dirige la expansión de investigación no tipada; los comandos ordinarios no se ven afectados, ya sea que la sesión sea interactiva o sin cabeza.

Reglas de CLAUDE.md

Añade instrucciones a ~/.claude/CLAUDE.md que le dicen a Claude que use las herramientas de tokensave antes de recurrir a agentes Explore o lecturas de archivos sin procesar.


Sincronización Resistente a Fallos

Las gramáticas de tree-sitter son código C/C++ compilado. Ocasionalmente, alcanzan una aserción interna o terminan el proceso por vías que el manejo de pánico de Rust no puede interceptar. A partir de la v4.3.0, cada archivo se analiza dentro de un subproceso trabajador de corta duración: si una gramática produce un segfault, llama a abort() o alcanza un desbordamiento de pila, solo el trabajador muere. El grupo lo regenera, el archivo ofensivo se registra y se omite, y sync continúa.

El trabajador es un subcomando oculto extract-worker autenticado contra el padre mediante un token de 256 bits por generación, requerido tanto como variable de entorno TOKENSAVE_WORKER_TOKEN como los primeros 32 bytes recibidos en stdin. La invocación directa por parte de los usuarios falla. Por defecto, usa available_parallelism() trabajadores; exclúyete con TOKENSAVE_DISABLE_SUBPROCESS=1.

Las primitivas de edición (tokensave_str_replace, tokensave_insert_at, etc.) aún se ejecutan en el proceso: apuntan a un archivo a la vez, donde la sobrecarga del subproceso dominaría, y un fallo del extractor allí es inmediatamente visible para el agente.


Indexación Multi-Rama (Opcional)

tokensave puede mantener opcionalmente un grafo de código separado por rama de git. Cuando está habilitado, cambiar de rama nunca te da resultados obsoletos y nunca reindexa archivos que ya analizaste en otra rama. El seguimiento multi-rama es opcional: sin él, tokensave usa una única base de datos para todas las ramas.

Cómo funciona

Cuando rastreas una rama, tokensave copia la base de datos del ancestro más cercano y sincroniza solo los archivos que difieren. Esto significa que rastrear una rama de funcionalidad desde main es casi instantáneo: solo analiza los archivos que has cambiado.

Comandos CLI

tokensave branch add              # track the current branch
tokensave branch list             # see tracked branches and DB sizes
tokensave branch remove <name>    # stop tracking a branch
tokensave branch removeall        # remove all tracked branches except default
tokensave branch gc               # clean up branches deleted from git

Herramientas MCP entre ramas

Tres herramientas MCP permiten consultas entre ramas sin cambiar tu checkout:

  • tokensave_branch_search -- busca símbolos en el grafo de otra rama
  • tokensave_branch_diff -- compara grafos de código entre dos ramas: símbolos añadidos, eliminados y cambiados (la firma difiere). Soporta filtros de archivo y tipo.
  • tokensave_branch_list -- lista las ramas rastreadas con tamaños de BD, rama padre y tiempos de sincronización

Repliegue de rama

Cuando el servidor MCP no puede encontrar una base de datos para la rama actual, sirve desde la BD de la rama ancestro más cercana e incluye una advertencia en cada respuesta de herramienta sugiriendo ejecutar tokensave branch add.

Seguimiento automático de ramas (v7.3.0)

Una vez que el modo multi-rama está inicializado (un primer tokensave branch add manual creó los metadatos de la rama), las nuevas ramas pueden rastrearse automáticamente en lugar de recurrir a la BD ancestro. Dos mecanismos independientes cubren esto; los proyectos en modo de BD única nunca se ven afectados, y ninguno de los mecanismos toca la base de datos de la rama por defecto.

Hook de git (al hacer checkout de rama). El hook post-checkout que tokensave install configura reconoce un checkout de rama (a diferencia de un checkout de archivo) y ejecuta tokensave branch add en segundo plano. Ese comando no hace nada cuando la rama ya está rastreada o es la rama por defecto, por lo que el cambio ordinario entre ramas conocidas no cuesta nada.

Seguimiento automático al abrir (opcional). Cuando TokenSave::open se ejecuta — comando CLI o inicio del servidor MCP — y la rama activa no está rastreada, tokensave puede rastrearla en el momento copiando la BD del ancestro rastreado más cercano y registrándola en los metadatos de la rama. Esto está controlado por el campo de configuración auto_track (por defecto false) o la variable de entorno TOKENSAVE_AUTO_TRACK, que anula la configuración por ejecución (cualquier valor lo habilita excepto 0, false, no, off o vacío). La copia es la misma copia casi instantánea de la BD ancestro que realiza un branch add manual; no se ejecuta ninguna sincronización en ese momento — el hook post-commit mantiene la BD de la nueva rama actualizada a medida que haces commits, o ejecuta tokensave sync para actualizar inmediatamente. El seguimiento automático es estrictamente de mejor esfuerzo: cualquier fallo se reporta como una advertencia y open() procede con el repliegue habitual al ancestro, por lo que nunca puede romper una llamada a herramienta.

En resumen: con el hook instalado, hacer checkout de una nueva rama de funcionalidad le da transparentemente su propio grafo por rama; con auto_track habilitado, incluso una rama creada fuera de un checkout (por ejemplo, en un worktree nuevo) se detecta la primera vez que tokensave abre el proyecto en ella.

Consulta docs/BRANCHING-USER-GUIDE.md para la guía completa.


Memoria entre Sesiones

Tres herramientas MCP persisten decisiones y contexto de área de código entre sesiones, almacenadas en el .tokensave/tokensave.db por proyecto.

HerramientaPropósito
tokensave_record_decisionGuardar una decisión de diseño/arquitectura con razón opcional, archivos y etiquetas
tokensave_record_code_areaMarcar una ruta en la que el agente ha trabajado (contador de toques + last_touched_at)
tokensave_session_recallConsulta FTS5 sobre decisiones guardadas; combinar con las dos herramientas de escritura

Úsalas para que el agente no tenga que volver a explicar decisiones de arquitectura entre sesiones.


Libro de Ahorros

Cada llamada MCP escribe una fila de solo agregar en ~/.tokensave/global.db (tabla savings_ledger). Inspecciona con tokensave gain:

tokensave gain                    # current project, last 30 days
tokensave gain --all              # all projects
tokensave gain --history --range 7d
tokensave gain --json

Las estimaciones en dólares usan el módulo de precios existente (precios de entrada de Sonnet, actualizados diariamente vía LiteLLM).

tokensave gain history output


Benchmark Reproducible

tokensave bench ejecuta un conjunto fijo de consultas a través de tokensave_context e informa los ahorros de recuperación frente a una línea base de archivo completo (refleja la metodología CCE):

tokensave bench                                    # ships with 10 default queries
tokensave bench --queries my-queries.toml --json
tokensave bench --max-nodes 5

tokensave bench output

Medido contra este repositorio (el propio tokensave) usando el conjunto de consultas genérico incluido:

#ConsultaLínea baseContextoAhorroArchivosNodos
1¿Cómo se carga la configuración al inicio?45.3k45499%45
2¿Dónde se analizan y despachan los argumentos de línea de comandos?94840258%33
3¿Cómo está organizado el punto de entrada principal?6.1k25196%38
4¿Cómo se definen, envuelven y propagan los errores?3.5k81977%23
5¿Dónde se emite el registro o la salida de diagnóstico?8.6k51494%614
6¿Cómo están organizadas las pruebas y qué arnés de pruebas se usa?3.5k81877%23
7¿Cómo se persisten los datos en disco o en una base de datos?11.9k33097%36
8¿Cómo se generan tareas asíncronas o trabajo en segundo plano?29.4k36499%23
9¿Cómo conecta la compilación las dependencias e inicializa el estado?10.9k1.4k88%45
10¿Cómo se exponen las superficies de API públicas (endpoints HTTP, exportaciones de biblioteca o comandos CLI)?22.5k23599%45

Agregado: 88% de ahorro medio de recuperación (142.8k → 5.5k tokens en 10 consultas).

El conjunto de consultas predeterminado apunta a patrones presentes en la mayoría de bases de código de aplicaciones (CLIs, demonios, servicios). Ejecútalo en tu propio proyecto con tokensave bench para ver tus números, o escribe un archivo de consultas personalizado (--queries my.toml) para una recuperación más ajustada.

Prueba de criterio contra repositorios grandes del mundo real

benches/large_repos.rs es un micro-benchmark de criterion que ejercita las herramientas MCP de extremo a extremo contra cuatro grandes bases de código de código abierto fijadas en referencias constantes. Cada herramienta es impulsada por al menos 5 consultas con argumentos (ids de nodo, nombres cualificados, globs de archivo, …) muestreados del grafo indexado una vez por repositorio, para que los tiempos sean reproducibles entre ejecuciones.

Repositorios y referencias fijadas (definidos en benches/repos.rs):

RepoURLRef
polkadot-sdkhttps://github.com/paritytech/polkadot-sdkpolkadot-stable2412
emacshttps://github.com/emacs-mirror/emacsemacs-30.1
scipyhttps://github.com/scipy/scipyv1.14.1
nodehttps://github.com/nodejs/nodev22.11.0

Cada repositorio se clona superficialmente (git init + git fetch --progress --depth 1 origin <ref> + checkout FETCH_HEAD) en el primer uso y se almacena en caché localmente; las ejecuciones posteriores reutilizan la copia local. La salida de Git se transmite a la terminal para que la descarga de varios GB muestre el progreso en tiempo real.

Herramientas cubiertas (5 consultas cada una). Herramientas de lectura — search, context, callers, callees, node, by_qualified_name, signature, impact, body, files, complexity, doc_coverage, largest, hotspots, god_class, module_api, derives, dead_code, rank, coupling, circular. Herramientas de escritura — str_replace, multi_str_replace, insert_at, y (si ast-grep está en PATH) ast_grep_rewrite.

Sincronización forzada en cada ejecución. Antes de que se active cualquier benchmark, el arnés ejecuta el equivalente a tokensave sync --force en cada repositorio (index_all() independientemente de la frescura de .tokensave/) para que los tiempos siempre reflejen la fuente fijada.

Pruebas de escritura y limpieza. Las herramientas de escritura mutan archivos. Para mantener la condición previa de "la coincidencia debe ser única", el arnés utiliza iter_batched de criterion — un pequeño archivo temporal bajo <repo>/.tokensave-bench-scratch/ se reescribe con contenido conocido antes de cada iteración cronometrada, luego la herramienta de edición se ejecuta contra él. Después de que todos los benchmarks finalizan, el arnés ejecuta git stash --include-untracked && git stash drop dentro de cada repositorio preparado para que el árbol de trabajo vuelva a la referencia fijada.

Configuración de Criterion. El benchmark anula los valores predeterminados de criterion a sample_size = 10 y measurement_time = 30s (frente a los 100 / 5s estándar), lo que da a cada medición de tiempo por consulta ~30 segundos de medición — suficiente para que herramientas lentas como tokensave_context en polkadot-sdk produzcan números estables.

Ejecútalo:

# Required: a writable cache directory for the cloned repos + their indexes.
# Expect several GB of disk and a long first run (shallow clone + full index of each repo).
export TOKENSAVE_BENCH_REPOS_DIR=~/tokensave-bench-cache

cargo bench --bench large_repos

Si TOKENSAVE_BENCH_REPOS_DIR no está configurada, la prueba imprime un aviso y registra cero benchmarks (para que cargo bench --all se mantenga ligero en las máquinas de los colaboradores).

Configuración (todo opcional, vía entorno):

VariableEfecto
TOKENSAVE_BENCH_REPOS_DIRRequerida. Directorio raíz donde cada repositorio se clona en $DIR/<repo-name>/.
TOKENSAVE_BENCH_REPOSSubconjunto separado por comas de nombres de repositorios a probar, p. ej. TOKENSAVE_BENCH_REPOS=emacs,scipy. Por defecto, los cuatro.
TOKENSAVE_BENCH_SKIP_CLONESi se establece, la prueba falla rápidamente para cualquier repositorio que no esté ya en su referencia fijada en lugar de descargar. Útil en CI / ejecuciones sin conexión.

El filtrado de benchmarks utiliza la CLI estándar de criterion — por ejemplo, solo la herramienta search en scipy:

cargo bench --bench large_repos -- 'scipy/tokensave_search'

Los informes (HTML + muestras sin procesar) se almacenan en target/criterion/.

Para cambiar las referencias fijadas (p. ej., a una versión más reciente o un SHA específico), edita REPOS en benches/repos.rs y elimina el marcador $TOKENSAVE_BENCH_REPOS_DIR/<repo>/.bench-ref correspondiente para que la siguiente ejecución lo vuelva a obtener. Si omites la limpieza posterior a la ejecución (p. ej., haces Ctrl-C a mitad de la prueba), ejecutar git stash --include-untracked && git stash drop dentro de cada directorio de repositorio lo restaura manualmente.

Sonda de matriz de pruebas MCP (scripts/mcp_probe)

scripts/mcp_probe/ es un arnés de Python que impulsa tokensave serve sobre stdio contra un conjunto configurable de repositorios reales y ejercita cada herramienta MCP de solo lectura con 5 variantes de consulta por lenguaje, produciendo una tabla de estado por herramienta / por repositorio. El mismo arnés sirve para dos propósitos:

  • Barrido de regresión. Nuevo soporte de lenguaje, nueva herramienta o una refactorización — vuelve a ejecutar la matriz y cualquier celda que ahora tenga errores, tiempo de espera agotado o devuelva resultados vacíos se destaca como un 🚩.
  • Sonda de rendimiento. Los tiempos por llamada se registran en TSV; el mismo corpus fijo de repositorios sirve como una comparación aproximada entre versiones. El ciclo actual de errores de tokensave_inheritance_depth fue encontrado por este arnés cuando una sola herramienta en polkadot-sdk agotó el tiempo de espera a >60 s.

Diseñoprobe.py es el controlador (JSON-RPC con id coincidente para que una herramienta lenta no pueda envenenar las llamadas posteriores), isolated.py vuelve a ejecutar una sola herramienta con un servidor nuevo por llamada (escapa del encolamiento del servidor), build_matrix.py lee el TSV y emite markdown, los módulos tools/<lang>.py contribuyen con conjuntos de consultas por lenguaje (Rust incluido; añade Python/Go/… agregando un nuevo módulo), repos.toml enumera los repositorios objetivo (anular vía $TOKENSAVE_PROBE_REPOS).

Ejecución rápida:

cargo build --release --bin tokensave
python3 scripts/mcp_probe/probe.py
python3 scripts/mcp_probe/build_matrix.py > matrix.md

Las celdas de salida son ✓ 5/5 (limpio), 🐛 e/N (errores), ⏱ N/N (tiempos de espera agotados), ∅ E/N (vacío), 🐢 ok/slow (llamadas >10 s). Cualquier celda que tenga un error o tiempo de espera agotado gana un 🚩 en la columna de más a la derecha. El detalle por llamada con los primeros 100 caracteres de cada error se registra en el archivo TSV para seguimiento.

Diferente del benchmark de criterion anterior: criterion mide la latencia por iteración para un conjunto de herramientas enfocado en referencias fijadas y produce informes estadísticos bajo target/criterion/; mcp_probe ejercita cada herramienta con un conjunto de consultas más amplio en los repositorios a los que apuntes, optimizando para la amplitud de cobertura en lugar de la precisión de medición.


Más de 80 herramientas MCP

El servidor expone más de 80 herramientas (una menos cuando el binario opcional ast-grep no está en PATH); las tablas a continuación agrupan las más comúnmente usadas por categoría. La mayoría son de solo lectura, seguras para llamar en paralelo y anotadas con readOnlyHint. Las primitivas de edición están limitadas a archivos individuales y se reindexan en el lugar; las herramientas de línea base de sesión y grabación de memoria también mutan el estado local de .tokensave y están anotadas como no de solo lectura. Las tres herramientas principales (tokensave_context, tokensave_search, tokensave_status) están marcadas como anthropic/alwaysLoad para que eviten el viaje de ida y vuelta de búsqueda de herramientas del cliente.

Descubrimiento

HerramientaPropósito
tokensave_contextObtener contexto de código relevante para una tarea -- puntos de entrada, símbolos relacionados, fragmentos de código
tokensave_searchEncontrar símbolos por nombre (funciones, clases, tipos)
tokensave_nodeObtener detalles + código fuente para un símbolo específico
tokensave_filesListar archivos de proyecto indexados con filtrado
tokensave_module_apiSuperficie de API pública de un archivo o directorio
tokensave_similarEncontrar símbolos con nombres similares
tokensave_annotationsIntrospección de atributos/anotaciones/decoradores -- histograma de todas las anotaciones o listados por sitio con filtros de destino
tokensave_dependenciesIntrospección de manifiesto de paquete en 17 ecosistemas -- resumen del espacio de trabajo, búsqueda por paquete, superficie de licencia, deriva de versión
tokensave_statusEstado del índice, estadísticas, tokens ahorrados

Grafo de Llamadas e Impacto

HerramientaPropósito
tokensave_callersEncontrar qué llama a una función
tokensave_calleesEncontrar qué llama una función
tokensave_impactVer qué se ve afectado al cambiar un símbolo
tokensave_affectedEncontrar archivos de prueba afectados por cambios en el código fuente
tokensave_rename_previewTodas las referencias a un símbolo (vista previa del impacto de renombrar)
tokensave_hotspotsSímbolos más conectados (mayor número de llamadas)

Calidad del Código

HerramientaPropósito
tokensave_complexityClasificar funciones por complejidad ciclomática y cognitiva, profundidad de anidamiento, métricas de Halstead, índice de mantenibilidad, CRAP y métricas de seguridad
tokensave_dead_codeEncontrar símbolos inalcanzables (sin aristas entrantes)
tokensave_god_classEncontrar clases con demasiados miembros
tokensave_couplingClasificar archivos por fan-in/fan-out
tokensave_inheritance_depthEncontrar las jerarquías de herencia más profundas
tokensave_circularDetectar dependencias circulares de archivos
tokensave_recursionDetectar ciclos de llamadas recursivas/mutuamente recursivas
tokensave_unused_importsSentencias de importación nunca referenciadas
tokensave_doc_coverageSímbolos públicos que carecen de documentación
tokensave_simplify_scanAnálisis de calidad de archivos modificados (duplicaciones, código muerto, complejidad)

Analíticas de Salud del Código

Cinco herramientas muestran señales de calidad estructural del grafo existente. La puntuación compuesta utiliza una media geométrica sobre dimensiones independientes para que ninguna pueda ser manipulada individualmente.

HerramientaPropósito
tokensave_healthSeñal de calidad compuesta (0-10000) de aciclicidad, profundidad, igualdad, redundancia y modularidad
tokensave_giniCoeficiente de desigualdad de Gini para cualquier métrica (complejidad, líneas, fan-in/out, miembros) -- encuentra archivos dios y distribución desigual
tokensave_dependency_depthCadenas de dependencia a nivel de archivo más largas (nivelación de Lakos) con reconstrucción completa de la cadena después de la ruptura de ciclos SCC de Tarjan
tokensave_dsmMatriz de Estructura de Diseño en forma stats, clusters o matrix -- revela violaciones de capas y acoplamiento oculto
tokensave_test_riskAnálisis de brecha de pruebas ponderado por riesgo que combina complejidad, fan-in, cobertura y cambios en git de 90 días en una sola puntuación

Sesiones

Toma una instantánea de las métricas de salud al inicio de una sesión de codificación de IA, luego compara al final para ver qué mejoró o retrocedió.

HerramientaPropósito
tokensave_session_startGuardar las métricas de salud actuales como una línea base JSON para comparación posterior
tokensave_session_endRecalcular y comparar contra la línea base -- deltas por dimensión, aprobado/fallido, limpieza automática

Primitivas de Edición

Cuatro herramientas de escritura que permiten a los agentes modificar archivos sin los riesgos de expresiones regulares o escapes de shell. Cada una es de archivo único, anclada y desencadena una reindexación en el lugar después de escribir para que el grafo nunca quede desactualizado.

HerramientaPropósito
tokensave_str_replaceReemplazar un old_str único con new_str; falla si hay 0 o >1 coincidencias (protege contra errores de edición múltiple)
tokensave_multi_str_replaceAplicar N reemplazos de (old, new) atómicamente -- transacción todo o nada
tokensave_insert_atInsertar contenido antes o después de una cadena ancla única o número de línea
tokensave_ast_grep_rewriteReescritura estructural de código mediante la CLI de ast-grep en modo --rewrite

Git y Flujo de Trabajo

HerramientaPropósito
tokensave_diff_contextContexto semántico para archivos modificados -- símbolos modificados, dependencias, pruebas afectadas
tokensave_commit_contextResumen semántico de cambios no confirmados para redactar mensajes de commit
tokensave_pr_contextDiff semántico entre referencias de git para descripciones de pull request
tokensave_changelogDiff semántico entre dos referencias de git
tokensave_test_mapMapeo de código fuente a pruebas a nivel de símbolo, con detección de símbolos no cubiertos
tokensave_test_coverageResumen de cobertura por archivo/símbolo/función de prueba con expansión transitiva de aristas de llamada

Sistema de Tipos

HerramientaPropósito
tokensave_type_hierarchyÁrbol de jerarquía de tipos recursivo para traits, interfaces y clases
tokensave_rankClasificar nodos por cantidad de relaciones (interfaz más implementada, clase más extendida)
tokensave_distributionDesglose de tipos de nodo por archivo o directorio
tokensave_largestClasificar nodos por tamaño -- clases más grandes, métodos más largos

Portabilidad

HerramientaPropósito
tokensave_port_statusComparar símbolos entre directorios de origen/destino para seguir el progreso de la portabilidad
tokensave_port_orderOrdenamiento topológico de símbolos para portar -- portar primero las hojas, luego los dependientes

Multi-Rama

HerramientaPropósito
tokensave_branch_searchBuscar símbolos en el grafo de otra rama
tokensave_branch_diffComparar símbolos entre ramas (añadidos/eliminados/cambiados)
tokensave_branch_listListar ramas rastreadas con tamaños de BD y tiempos de sincronización

Recursos MCP

Se exponen cuatro recursos a través de resources/list y resources/read:

  • tokensave://status -- estadísticas del grafo como JSON
  • tokensave://files -- árbol de archivos indexados agrupados por directorio
  • tokensave://overview -- resumen del proyecto con distribución de lenguajes y tipos de símbolos
  • tokensave://branches -- ramas rastreadas con tamaños de BD e información del padre

Seguimiento de Tokens

tokensave mide los tokens que ahorra en cada llamada a herramienta MCP. Cada respuesta de herramienta incluye una línea tokensave_metrics: before=N after=M que muestra cuántos tokens de archivos sin procesar se evitaron con esa llamada específica.

Observabilidad de costos

tokensave cost                     # 7-day cost summary (default)
tokensave cost today               # today only
tokensave cost --by-model          # breakdown by Claude model
tokensave cost --by-task           # breakdown by task category (coding, debugging, exploration, ...)
tokensave cost --export json       # JSON export to stdout
tokensave cost --export csv        # CSV export to stdout

Analiza las transcripciones de sesión de Claude Code (~/.claude/projects/**/*.jsonl), clasifica cada turno de API en una de 13 categorías de tareas, calcula el costo en dólares usando precios de modelos y almacena los resultados en ~/.tokensave/global.db para consultas agregadas rápidas. Los precios se actualizan desde LiteLLM cada 24 horas y recurren a una tabla integrada cuando no hay conexión.

El encabezado tokensave status incluye una fila de costos que muestra el gasto de hoy, el total de 7 días y la relación de eficiencia (tokens ahorrados / tokens totales). La TUI tokensave monitor muestra un panel de costos en vivo junto a la fuente de ahorros. Al final de cada sesión de Claude Code, el manejador hook_stop imprime un recibo de una línea en la terminal.

Categorías de clasificación de tareas: Codificación, Depuración, Desarrollo de Funcionalidades, Refactorización, Pruebas, Exploración, Planificación, Delegación, Operaciones Git, Construcción/Despliegue, Lluvia de Ideas, Conversación, General. La clasificación es determinista (coincidencia de patrones en nombres de herramientas y comandos Bash), no requiere llamadas a LLM y está adaptada de AgentSeal/codeburn.

Monitor en vivo

tokensave monitor

Una TUI global que muestra las llamadas a herramientas MCP de todos los proyectos en tiempo real, a través de un búfer circular mapeado en memoria compartida en ~/.tokensave/monitor.mmap. Cada entrada muestra el nombre del proyecto, el nombre de la herramienta y el delta de tokens. Un panel de costos en la parte superior muestra el gasto de hoy, ahorros, eficiencia y el modelo principal (actualizado cada 30 segundos).

tokensave monitor TUI

Contadores de sesión y de por vida

tokensave current-counter          # show per-project session counter
tokensave reset-counter            # reset the session counter
tokensave status                   # shows project + global lifetime totals + cost

tokensave status muestra las estadísticas del índice del proyecto, desglose de lenguajes, fila de costos (hoy / 7d / eficiencia) y totales de por vida del proyecto y mundial:

tokensave status output

Contador mundial

Todos los usuarios de tokensave contribuyen a un contador agregado anónimo. tokensave status muestra tanto el total de tu proyecto como el total mundial. La carga envía solo un único número (por ejemplo, 4823) sin información identificativa. Puedes optar por no participar con tokensave disable-upload-counter.


Frescura del Índice

tokensave mantiene el grafo actualizado sin un demonio en segundo plano ni un observador de archivos a nivel de SO.

Verificación de desactualización bajo demanda. Cada llamada a herramienta MCP verifica si algún archivo indexado ha sido modificado desde la última sincronización. Si se encuentran archivos desactualizados, se reextraen antes de devolver la respuesta de la herramienta. Un período de espera de 30 segundos evita que las llamadas consecutivas re-recorran el árbol en cada pulsación de tecla.

Sincronización de puesta al día al conectar. Cuando el servidor MCP se inicia, ejecuta inmediatamente una sincronización de puesta al día no bloqueante que recoge cualquier cambio realizado mientras no había ningún agente conectado — un git pull, una edición del IDE, un paso de construcción — para que la primera llamada a herramienta de una sesión vea un índice fresco.

Trabajo multi-agente y worktrees de git. Cuando múltiples agentes trabajan en el mismo proyecto concurrentemente, la suposición fuerte es que cada agente opera en su propio worktree de git. Los worktrees son copias de trabajo independientes del sistema de archivos del mismo repositorio: el agente A y el agente B tienen cada uno su propia copia de cada archivo, por lo que nunca sobrescriben las ediciones en curso del otro. tokensave detecta automáticamente cuando una consulta proviene de un worktree anidado dentro de la copia principal y sirve resultados del grafo de la rama correcta. Los cambios se acumulan de forma independiente y eventualmente se reconcilian mediante git merge o rebase — el mismo proceso utilizado para cualquier otro desarrollo paralelo. Este diseño evita la complejidad y los modos de fallo del bloqueo entre agentes sobre un directorio mutable compartido.

Flujos de trabajo solo con CLI. Si ejecutas comandos tokensave sin un agente conectado (sin servidor MCP), la verificación de desactualización no se ejecuta entre comandos. Instala hooks de git para mantener el índice fresco automáticamente después de cada commit o clonación:

cp scripts/post-commit scripts/post-checkout .git/hooks/
chmod +x .git/hooks/post-commit .git/hooks/post-checkout

Actualizando desde 5.x

El comando independiente tokensave daemon y su inicio automático launchd/systemd/Servicio de Windows se eliminaron en 6.0.0. El observador de archivos integrado a nivel de SO que reemplazó al demonio fue a su vez eliminado en 6.1.0 (causaba un uso descontrolado de CPU y memoria en monorepositorios grandes con árboles profundos de node_modules o target). El modelo de desactualización bajo demanda anterior es el diseño actual.

Si todavía tienes un inicio automático del demonio de 5.x, elimínalo:

  • macOS: launchctl unload ~/Library/LaunchAgents/com.tokensave.daemon.plist && rm ~/Library/LaunchAgents/com.tokensave.daemon.plist
  • Linux: systemctl --user disable --now tokensave-daemon && rm ~/.config/systemd/user/tokensave-daemon.service
  • Windows: sc.exe delete tokensave-daemon (desde una terminal elevada)

Si no recuerdas el nombre exacto: launchctl list | grep tokensave / systemctl --user list-units | grep tokensave / sc.exe query state= all | findstr -i tokensave.


Auto-Actualización

tokensave upgrade                  # upgrade to latest in current channel
tokensave channel                  # show current channel (stable/beta)
tokensave channel beta             # switch to beta channel
tokensave channel stable           # switch back to stable

tokensave upgrade descarga el binario de plataforma correcto desde los lanzamientos de GitHub y reemplaza el binario en ejecución en el lugar. Soporta canales estable y beta de forma independiente.


Versionado y actualizaciones

Los números de versión de tokensave se parecen a SemVer pero no lo siguen: el componente que cambia codifica el mantenimiento que requiere la actualización, el cual tokensave realiza automáticamente en el siguiente lanzamiento — nunca ejecutas una reinstalación o reindexación manualmente.

IncrementoEjemploLa actualización requiereAcción automática
Parche (x.y.Z)7.2.0 → 7.2.1NadaNinguna — sin reinstalación, sin reindexación
Menor (x.Y.0)7.2.0 → 7.3.0Una reinstalación (nuevos arneses, nuevas herramientas, nueva configuración)Reinstalación global de cada integración de agente instalada (refresca permisos, hooks y configuración MCP)
Mayor (X.0.0)7.2.0 → 8.0.0Una reinstalación + resincronización completaReinstalación global y una reindexación forzada por proyecto (equivalente a sync -f)

Reinstalación global. En la primera ejecución de una nueva compilación menor o mayor, tokensave vuelve a ejecutar silenciosamente install para cada agente que ha registrado, de modo que la configuración del agente siempre apunte al binario actual y exponga el conjunto de herramientas actual. Los incrementos de parche se saltan esto — el marcador de versión en ejecución simplemente se avanza.

Reindexación forzada por proyecto (solo mayor). Un incremento mayor significa que los índices del proyecto deben reconstruirse. tokensave hace esto de forma diferida y por proyecto: en la primera llamada a herramienta MCP en un proyecto después de una actualización mayor, genera una reindexación completa en segundo plano (equivalente a tokensave sync --force) que nunca bloquea la respuesta de la herramienta.

Alternativa Brew / cargo. Las actualizaciones externas que reemplazan el binario fuera de tokensave upgradebrew upgrade tokensave o cargo install tokensave — se detectan de la misma manera: si la versión en ejecución es más reciente que la última versión que realizó una instalación, la reinstalación se ejecuta en el siguiente lanzamiento tal como lo haría después de una auto-actualización.

Consulta TOKENSAVE-VERSIONING.md para saber por qué tokensave se aparta de SemVer (codificar el mantenimiento en la versión es lo que hace posibles las actualizaciones sin intervención), la mecánica de los marcadores, la versión independiente del esquema de la base de datos y las reglas para los mantenedores al publicar lanzamientos.


Referencia de CLI

tokensave init [path]              # Initialize a new project (full index)
tokensave sync [path]              # Incremental sync (must be initialized first)
tokensave sync --force [path]      # Force a full re-index
tokensave sync --doctor [path]     # Sync and list added/modified/removed files
tokensave status [path]            # Show statistics + cost summary
tokensave status [path] --json     # Show statistics (JSON output)
tokensave status --details         # Include node-kind breakdown
tokensave cost [range]             # Token cost summary (default: 7d)
tokensave cost --by-model          # Cost grouped by model
tokensave cost --by-task           # Cost grouped by task category
tokensave cost --export json|csv   # Export cost data
tokensave query <search> [path]    # Search symbols
tokensave files [--filter dir] [--pattern glob] [--json]   # List indexed files
tokensave affected <files...> [--stdin] [--depth N]        # Find affected test files
tokensave install [--agent NAME]   # Configure agent integration
tokensave reinstall                # Refresh settings for all installed agents
tokensave uninstall [--agent NAME] # Remove agent integration
tokensave serve                    # Start MCP server
tokensave monitor                  # Live TUI showing MCP calls across all projects
tokensave upgrade                  # Self-update to latest version
tokensave channel [stable|beta]    # Show or switch update channel
tokensave doctor [--agent NAME]    # Check installation health
tokensave branch add|list|remove|removeall|gc   # Multi-branch management
tokensave current-counter          # Show per-project token counter
tokensave reset-counter            # Reset per-project token counter
tokensave disable-upload-counter   # Opt out of worldwide counter uploads
tokensave enable-upload-counter    # Re-enable worldwide counter uploads

tokensave doctor

Ejecuta una verificación de salud integral de tu instalación de tokensave:

tokensave doctor

Verifica: ubicación del binario, índice del proyecto, BD global, configuración de usuario, integración del agente (servidor MCP, hooks, permisos, reglas de prompt) y conectividad de red. Si falta algún permiso de herramienta después de una actualización, te indica que ejecutes tokensave install. Usa --agent para verificar solo un agente específico.

Doctor también valida que cada hook instalado use el subcomando correcto de tokensave y repara automáticamente los hooks rotos.


Cómo Funciona con Claude Code

Una vez configurado, Claude Code usa automáticamente tokensave en lugar de leer archivos sin procesar cuando necesita entender tu base de código. Tres capas se refuerzan mutuamente:

CapaQué hacePor qué es importante
Servidor MCPExpone más de 80 herramientas tokensave_* a ClaudeClaude puede consultar el grafo directamente
Reglas CLAUDE.mdLe dice a Claude que prefiera tokensave sobre agentes/lecturas de archivosEvita que el modelo recurra a patrones costosos
Hook PreToolUseHook nativo en Rust bloquea agentes de ExploraciónCaptura casos donde el modelo ignora las reglas de CLAUDE.md
Hook UserPromptSubmitSe ejecuta al enviar el promptSeguimiento del ciclo de vida para contabilidad de tokens
Hook StopSe ejecuta cuando la sesión terminaVacía los contadores de tokens

El resultado: Claude obtiene la misma comprensión del código con muchos menos tokens. Un agente de Exploración típico lee de 20 a 50 archivos; tokensave devuelve los símbolos, relaciones y fragmentos de código relevantes desde su índice preconstruido.


Llamadas de Red y Privacidad

La funcionalidad principal de tokensave (indexación, búsqueda, consultas de grafos, servidor MCP) es 100% local -- tu código nunca sale de tu máquina.

LlamadaDatos enviadosCuándoExclusión voluntaria
Carga del contador mundialRecuento de tokens (un número) + país (desde IP)sync, status, sesiones MCPtokensave disable-upload-counter
Lectura del contador mundialNada (solicitud GET)statusN/A (solo lectura, tiempo de espera 1s)
Verificación de versiónNada (solicitud GET)status (cache 5m), sync (paralelo)N/A (tiempo de espera 1s, sin operación en caso de fallo)
Actualización de precios de modelosNada (solicitud GET)tokensave cost (cache 24h)N/A (tiempo de espera 5s, recurre a precios integrados)

La carga del contador mundial envía un único HTTP POST con un cuerpo JSON como {"amount": 4823}. Sin cookies, sin seguimiento, sin ID de usuario. El Cloudflare Worker registra el país de tu dirección IP (derivado de las cabeceras de la solicitud) para estadísticas geográficas agregadas -- tu dirección IP real no se almacena.

La actualización de precios de modelos obtiene un archivo JSON público de GitHub (raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json) para mantener los precios de los modelos de Claude actualizados para tokensave cost. No se envían datos -- es un HTTPS GET simple. La respuesta se almacena en caché en ~/.tokensave/pricing.json durante 24 horas. Si la obtención falla, tokensave usa su tabla de precios compilada.


Más de 50 lenguajes

tokensave soporta más de 50 lenguajes de programación organizados en tres niveles controlados por flags de características de Cargo. Cada nivel incluye todos los lenguajes del nivel inferior. Las cabeceras Markdown se extraen como nodos Module con aristas jerárquicas Contains para que la estructura del documento participe en las consultas del grafo junto con el código fuente.

Lite -- --no-default-features

Siempre compilado. El binario más pequeño para los lenguajes más populares, más Svelte y Astro (extracción de bloques de script a través del extractor de TypeScript, sin dependencia de gramática adicional).

LenguajeExtensiones
Rust.rs
Go.go
Java.java
Scala.scala, .sc
TypeScript.ts, .tsx
JavaScript.js, .jsx
Python.py
C.c, .h
C++.cpp, .hpp, .cc, .cxx, .hh
Kotlin.kt, .kts
C#.cs
Swift.swift
Svelte.svelte
Astro.astro

Medium (Lite + 9 más) -- --features medium

LenguajeExtensionesFlag de característica
Dart.dartlang-dart
Pascal.pas, .pp, .dprlang-pascal
PHP.phplang-php
Ruby.rblang-ruby
Bash.sh, .bashlang-bash
Protobuf.protolang-protobuf
PowerShell.ps1, .psm1lang-powershell
Nix.nixlang-nix
VB.NET.vblang-vbnet

Full (Medium + todo lo demás) -- predeterminado

LenguajeExtensionesFlag de característica
ActionScript.aslang-actionscript
Lua.lualang-lua
Zig.ziglang-zig
Objective-C.m, .mmlang-objc
Perl.pl, .pmlang-perl
Batch/CMD.bat, .cmdlang-batch
Fortran.f90, .f95, .f03, .f08, .f18, .f, .forlang-fortran
COBOL.cob, .cbl, .cpylang-cobol
MS BASIC 2.0.baslang-msbasic2
GW-BASIC.gwlang-gwbasic
QBasic.qblang-qbasic
QuickBASIC 4.5.bi, .bmlang-qbasic
DockerfileDockerfile, .dockerfilelang-dockerfile
GLSL.glsl, .vert, .frag, .complang-glsl
WGSL.wgsllang-wgsl
HLSL.hlsl, .fxlang-hlsl
Metal.metallang-metal
Markdown.md, .markdownlang-markdown
R.r, .Rlang-r
SQL.sqllang-sql
Julia.jllang-julia
Haskell.hs, .lhslang-haskell
OCaml.ml, .mlilang-ocaml
Clojure.clj, .cljs, .cljclang-clojure
Erlang.erl, .hrllang-erlang
Elixir.ex, .exslang-elixir
F#.fs, .fsi, .fsxlang-fsharp
F*.fst, .fstilang-fstar
Quint.qntlang-quint
TOML.tomllang-toml
Lean.leanlang-lean

Los lenguajes individuales también se pueden seleccionar sin un nivel completo:

cargo install tokensave --no-default-features --features lang-nix,lang-bash

Todos los extractores comparten la misma profundidad: funciones, clases, métodos, campos, importaciones, grafos de llamadas, cadenas de herencia, docstrings, métricas de complejidad, extracción de decoradores/anotaciones y seguimiento de dependencias entre archivos.


tokensave vs CodeGraph

tokensave es una reescritura desde cero en Rust de CodeGraph (Node.js/TypeScript). Ambos construyen grafos de código semánticos para agentes de codificación de IA, pero divergen significativamente en alcance y capacidades.

tokensaveCodeGraph
Tiempo de ejecuciónBinario nativo (Rust)Node.js 18+
Instalaciónbrew install, cargo install, scoop installnpx @colbymchenry/codegraph
Lenguajes50+ (3 niveles: lite/medium/full)19+
Herramientas MCP80+9
Integraciones de agente12+ (Claude, Codex, Gemini, Qwen, OpenCode, Cursor, Cline, Copilot, Roo Code, Zed, Antigravity, Kilo, Kiro, Kimi, Vibe, Grok, Factory Droid)1 (Claude Code)
Frescura del índiceVerificación de obsolescencia bajo demanda en cada llamada MCP; sincronización de actualización al conectar; se espera que el trabajo multiagente use git worktreesObservador de archivos nativo a nivel de SO (FSEvents/inotify/ReadDirectoryChangesW, 2 s de rebote); sincronización de actualización al conectar
Indexación multirramaSí, opcional (BDs por rama, diff/búsqueda entre ramas)No
Métricas de complejidadExtraídas del AST (ramas, bucles, profundidad de anidamiento, complejidad ciclomática y cognitiva, Halstead, índice de mantenibilidad, CRAP)No
Herramientas de portabilidadSí (port_status, port_order)No
Visualizador de grafosEliminado (v4.0.1)
Búsqueda semánticaExpansión de palabras clave impulsada por el agente (coste cero)Incrustaciones locales (nomic-embed-text-v1.5 vía ONNX)
Recursos MCP4 (status, files, overview, branches)No
Anotaciones MCPSí (readOnlyHint, alwaysLoad)No
Detección de código muertoNo
Detección de dependencias circularesNo
Jerarquía de tiposNo
Análisis de clase Dios / acoplamientoNo
Contexto de commit / PRNo
Mapeo de pruebasNo
Vista previa de renombradoNo
Seguimiento de tokensMétricas por llamada, monitor TUI en vivo, contadores de sesión + vida útilNo
Analíticas de salud del códigoPuntuación compuesta, Gini, profundidad de dependencia, DSM, brechas de prueba ponderadas por riesgo, deltas de sesiónNo
Primitivas de edición4 escritores atómicos (str_replace, multi_str_replace, insert_at, ast_grep_rewrite) con reindexación automáticaNo
Resiliencia a fallosExtracción aislada en subproceso; los fallos de gramática nativa omiten el archivo, la sincronización continúaNo
Autoactualizacióntokensave upgrade con canales stable/betanpm update
Motor de BDlibsql (fork de SQLite, WAL, asíncrono)better-sqlite3 / wa-sqlite (WASM)
Velocidad de indexación~1.2s para 1,782 archivos~4s para 1,782 archivos
Tamaño del binario~25 MB (todas las gramáticas incluidas)~80 MB (node_modules + WASM)

CodeGraph fue pionero en el enfoque y sigue siendo una opción sólida si prefieres las herramientas npm y solo necesitas integración con Claude Code. tokensave extiende el concepto con análisis más profundo, más agentes, soporte multirrama y un binario nativo sin dependencias de tiempo de ejecución.

Para comparaciones detalladas con CodeGraph, Dual-Graph (GrapeRoot), code-review-graph y OpenWolf, consulta docs/COMPARABLE-TOOLS.md.


Por qué tokensave frente a las alternativas

Varias herramientas reducen el uso de tokens para agentes de codificación de IA. He aquí por qué tokensave destaca.

Binario nativo único, cero dependencias

Cada alternativa requiere un tiempo de ejecución: Python, Node.js o ambos. tokensave se distribuye como un único binario Rust de ~25 MB con todas las más de 50 gramáticas tree-sitter incluidas. Nada más que instalar.

Inteligencia de código más profunda

tokensave trabaja a nivel de símbolo: funciones, estructuras, campos, aristas de llamada, jerarquías de tipos, métricas de complejidad. Alternativas como Dual-Graph (GrapeRoot) trabajan a nivel de archivo -- saben qué archivos existen pero no pueden responder "¿quién llama a esta función?" o "¿qué se rompe si cambio esta estructura?". Las más de 80 herramientas MCP especializadas de tokensave cubren recorrido de grafos de llamadas, análisis de impacto, detección de código muerto, mapeo de pruebas, vista previa de renombrado, jerarquías de tipos, detección de dependencias circulares, clasificación de complejidad, analíticas de salud del código (Gini, DSM, profundidad de dependencia, brechas de prueba ponderadas por riesgo), primitivas de edición atómica y más. El competidor más cercano (code-review-graph) tiene 22 herramientas; otros tienen 5-9.

Soporte de agente más amplio

Más de una docena de integraciones de agentes de codificación de IA con formatos de configuración nativos por agente. Ninguna otra herramienta cubre tantos agentes con una integración tan profunda. Claude Code obtiene hooks, reglas de prompt y permisos de herramientas auto-permitidos. Kiro obtiene configuración MCP global, tokensave.md steering cargado como recurso, un agente gestionado con aprobación permisiva de herramientas integradas/tokensave, y hooks para barreras de delegación más sincronización post-escritura. Otros agentes obtienen registro de servidor MCP en su formato de configuración nativo.

Indexación multirrama

La única herramienta en este espacio con bases de datos de grafos opcionales por rama y diff y búsqueda entre ramas. Cuando está habilitado, cambiar de rama es instantáneo -- no se requiere reindexación.

Seguimiento de tokens por llamada

La única herramienta que informa exactamente cuántos tokens ahorró cada llamada de herramienta MCP individual, más un monitor TUI en vivo en todos los proyectos y contadores de por vida.

Completamente de código abierto

Rust con licencia MIT, auditable de extremo a extremo. El motor central de Dual-Graph (graperoot en PyPI) es propietario -- no puedes ver qué hace con tu grafo de código. OpenWolf es AGPL-3.0, que requiere que los trabajos derivados sean de código abierto.

Rendimiento

Benchmark de indexación completa en un código base mixto Rust/Java/Scala de 1,782 archivos (57K nodos, 103K aristas):

HerramientaTiempoAceleración
CodeGraph (TypeScript)31.2s1x
tokensave (Rust)1.2s26x

Solución de problemas

"tokensave no inicializado"

El directorio .tokensave/ no existe en tu proyecto.

tokensave init

El servidor MCP no se conecta

El agente de IA no ve las herramientas de tokensave.

  1. Asegúrate de que la configuración del agente incluya el servidor MCP de tokensave (ejecuta tokensave doctor)
  2. Reinicia el agente completamente
  3. Verifica que tokensave esté en tu PATH: which tokensave

Símbolos faltantes en la búsqueda

  • Ejecuta tokensave sync para actualizar el índice
  • Verifica que el lenguaje sea soportado (ver tabla arriba)
  • Verifica que el archivo no esté excluido por .gitignore

La indexación es lenta

Los proyectos grandes tardan más en el primer índice completo.

  • Las ejecuciones posteriores usan sincronización incremental y son mucho más rápidas
  • Usa tokensave sync (no --force) para las actualizaciones diarias
  • La obsolescencia se verifica automáticamente en cada llamada a la herramienta MCP mientras un agente está conectado

Deshabilitar tokensave para proyectos específicos

Si un proyecto es demasiado grande y tokensave consume demasiada RAM, puedes deshabilitarlo por proyecto configurando DISABLE_TOKENSAVE=true en el entorno del servidor MCP. El servidor se cierra limpiamente sin inicializarse.

Claude Code — añade a tu .claude/settings.json del proyecto:

{
  "mcpServers": {
    "tokensave": {
      "command": "tokensave",
      "args": ["serve"],
      "env": {
        "DISABLE_TOKENSAVE": "true"
      }
    }
  }
}

Otros agentes — establece la variable de entorno en la configuración que tu agente use para lanzar servidores MCP.

También puedes configurarlo globalmente a través del shell (DISABLE_TOKENSAVE=true claude), pero esto deshabilita tokensave para cada proyecto en la sesión.


Origen

Este proyecto es un port a Rust de la implementación original en TypeScript de CodeGraph por @colbymchenry. El port mantiene la misma arquitectura e interfaz de herramientas MCP, aprovechando Rust para el rendimiento y los bindings nativos de tree-sitter.


Compilación

cargo build --release                          # full (50+ languages, default)
cargo build --release --features medium        # medium tier
cargo build --release --no-default-features    # lite (smallest binary)

cargo test                                     # run all tests (requires full)
cargo check --no-default-features              # verify lite compiles
cargo clippy --all

Historial de Estrellas

Star history

Patrocinadores

SignPath Firma de código gratuita en Windows proporcionada por SignPath.io, certificado por SignPath Foundation

Licencia

Licencia MIT — consulta LICENSE para más detalles.

tokensave.dev