Reducto 🧠
Reduce tokens, not intelligence.
Reducto convierte tu codebase en un knowledge graph local que cualquier LLM puede consultar sin leer archivos enteros. Menos tokens, mejores respuestas, mismo resultado.
Ahorro comprobado: reduce el consumo de contexto en un 85% al pasarle al LLM solo las firmas y resúmenes que necesita, resolviendo código completo on-demand.
Qué hace
- Indexa tu proyecto — extrae funciones, clases, imports y referencias.
- Guarda todo localmente — sin base de datos, sin cuenta, sin internet.
- Expone el grafo via MCP — cualquier LLM que soporte MCP (Claude Code, Antigravity, VS Code Copilot, Cursor) lo puede consultar.
Requisitos
- Python 3.10+ (probado hasta 3.13)
- uv (recomendado) o pip
Opcional (para parsing AST real)
pip install tree-sitter tree-sitter-python tree-sitter-javascript tree-sitter-typescript --user
Sin esto, Reducto usa un parser regex que funciona pero es menos preciso. Con tree-sitter se detectan CALLS reales (función→función).
Instalación
Opción 1: con pip (la más simple)
pip install reducto-graph --user
Opción 2: con uv (más rápido)
uv tool install reducto-graph
Opción 3: desde GitHub directo
pip install git+https://github.com/SudacaDev/reducto.git --user
Opcional: tree-sitter para parsing AST real
pip install tree-sitter tree-sitter-python tree-sitter-javascript tree-sitter-typescript --user
Sin esto, Reducto funciona con regex (menos preciso). Con tree-sitter detecta CALLS reales (función→función).
Verificar
reducto --help
Actualizar a la última versión
pip install reducto-graph --upgrade --user
# o con uv:
uv tool install reducto-graph --force
Primeros pasos
# 1. Ir a tu proyecto
cd mi-proyecto
# 2. Indexar el código (primera vez)
reducto ingest . --clean
# 3. Conectar con tu IDE
reducto install
# → te pregunta qué IDEs querés configurar
# → o directo: reducto install --target all
# 4. Listo — abrí tu IDE y preguntale algo sobre el proyecto
Uso diario
# Re-indexar después de cambios (solo procesa archivos modificados)
reducto ingest .
# Buscar en el grafo
reducto query "auth"
reducto query "getSession" --resolve
# Ver stats de ahorro de tokens
reducto context
# Ver el grafo visualmente
reducto visualize
# → abre reducto-out/graph.html en el navegador
# Imprimir el template SKILL.md (para pegarlo en la carpeta de skills de tu agente)
reducto skill
Comandos
| Comando | Qué hace |
|---|---|
reducto ingest . [--clean] |
Indexa el proyecto (--clean = rebuild completo) |
reducto install [--target X] |
Configura tu IDE (claude-code, antigravity, vscode, cursor, all) |
reducto query "término" [--resolve] |
Busca en el grafo (--resolve = carga el código fuente) |
reducto context |
Muestra tokens usados y ahorrados |
reducto visualize |
Genera un HTML interactivo del grafo |
reducto skill |
Imprime el template SKILL.md para tu agente (stdout) |
reducto serve |
Levanta el MCP server (el IDE lo usa automáticamente) |
reducto skills list |
Lista los Autonomous Skills generados por el LLM que esperan revisión |
reducto skills show <nombre> |
Imprime el código de un skill pendiente |
reducto skills approve <nombre> |
Aprueba y carga un skill pendiente |
reducto skills reject <nombre> |
Descarta un skill pendiente sin cargarlo |
Autonomous Skills (Experimental) — revisión humana obligatoria
Además de consultar el grafo, un LLM conectado por MCP puede proponer una Autonomous Skill: código Python que se convierte en una tool nueva del servidor (por ejemplo, detect_god_classes). Esto pasa por la tool MCP save_autonomous_skill.
Ese código nunca se ejecuta automáticamente. El flujo es:
LLM llama save_autonomous_skill
↓
se guarda en .reducto/skills/pending/<nombre>.py (solo escritura, nada se carga)
↓
vos revisás el código: reducto skills show <nombre>
↓
├─ reducto skills approve <nombre> → se mueve a .reducto/skills/, se carga y queda disponible como tool
└─ reducto skills reject <nombre> → se borra, nunca se ejecuta
Antes de la versión 0.2.66, save_autonomous_skill escribía el código directamente en .reducto/skills/ y lo cargaba (load_skills()) en el mismo paso, sin revisión — cualquier Python generado por el LLM corría de inmediato con los mismos permisos que tu usuario (filesystem, red, git, lo que sea). Ahora esa ejecución automática está deshabilitada; la única forma de que un skill generado corra es que un humano lo lea y lo apruebe explícitamente desde la terminal.
IDEs soportados
| IDE | Config generada |
|---|---|
| Claude Code | .mcp.json + CLAUDE.md + slash commands |
| Antigravity (Google) | AGENTS.md + ~/.gemini/antigravity/mcp_config.json |
| VS Code (Copilot) | .vscode/mcp.json |
| Cursor | .cursor/mcp.json + .cursorrules |
Cómo funciona
reducto ingest . ← parsea el código, extrae nodos y edges, detecta comunidades
todo queda en reducto-out/graph.json
Tu IDE pregunta algo → LLM consulta Reducto via MCP (search_context, get_callers, etc.)
→ Reducto busca en el grafo (metadata, ~10 tokens)
→ Si necesita el código: resuelve el nodo (lee solo esas líneas)
→ Lo cachea con hash SHA256 (próxima vez = 0 tokens)
→ Si el archivo cambió: invalida el cache automáticamente
Arquitectura y Detalles Técnicos
- Parsing Estructural: Parsea
.ts,.tsx,.js,.pyy.mdextrayendo funciones, clases, imports y calls reales (AST via tree-sitter). - Detección de Comunidades: Agrupa automáticamente archivos relacionados usando el algoritmo de Louvain (clustering).
- Cache Inteligente (Schrödinger): Los nodos se resuelven on-demand y se cachean con hash SHA256. Si el archivo cambia, el cache se invalida automáticamente (decoherencia).
- Vistas por Observador: El LLM puede pedir solo la firma (
signature), un resumen (summary), el esqueleto estructural con los cuerpos colapsados (skeleton), o el código completo (full). Cada vista se cachea independientemente, maximizando el ahorro de tokens.
Archivos generados
tu-proyecto/
reducto-out/ ← gitignored
graph.json ← el grafo completo
graph.html ← visualización interactiva
session_stats.json ← stats de tokens
.mcp.json ← config MCP para Claude Code
CLAUDE.md ← routing rules para Claude Code
AGENTS.md ← routing rules para Antigravity
.reducto/
skills/ ← skills aprobados (cargados y activos)
skills/pending/ ← skills generados por el LLM, esperando `reducto skills approve`
Troubleshooting
"tree-sitter no disponible" — Reducto funciona sin tree-sitter (usa regex), pero para CALLS reales necesitás instalarlo: pip install tree-sitter tree-sitter-python tree-sitter-javascript tree-sitter-typescript --user
"error: Failed to install entrypoint" en Windows — Cerrá Antigravity/Claude Code (tienen reducto.exe bloqueado) y reintentá.
"UnicodeEncodeError" en Windows — Setear $env:PYTHONUTF8 = "1" antes de correr Reducto, o agregarlo permanente: [System.Environment]::SetEnvironmentVariable("PYTHONUTF8", "1", "User")
El MCP no conecta en Antigravity — Verificá que ~/.gemini/antigravity/mcp_config.json tenga la entrada de reducto. Corré reducto install --target antigravity para regenerarlo.
Licencia
MIT
Metadata
Release files for reducto-graph 0.3.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| reducto_graph-0.3.2.tar.gz | 206.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| reducto_graph-0.3.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 415.3 kB
Release files / reducto_graph-0.3.2.tar.gz
| Download URL | reducto_graph-0.3.2.tar.gz |
|---|---|
| Size | 206.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b3292094113419e13a6e0eee3acbdd365714211c07483f18a7b80f52c08aafeb
|
|
BLAKE2b-256 checksum How to use checksums |
7b8e1e4cc1119c473fd9204c9c202ca612550c68c37a0651cdde02cadcb9880f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 3, 2026.
Transparency logRelease files / reducto_graph-0.3.2-py3-none-any.whl
| Download URL | reducto_graph-0.3.2-py3-none-any.whl |
|---|---|
| Size | 209.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c273ab7ae8ac445b9272783cccf281c4b21a76ec2eda04d97026cce930c75a81
|
|
BLAKE2b-256 checksum How to use checksums |
85ad5d816c0da91c00956ac89903c64eaa94a841ee96615d292ca70d756b10f8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 3, 2026.
Transparency log