Saltar al contenido
Manual de uso · v3.2

Contexto destilado para tu agente, sin releer medio repo.

code-rag es un RAG vectorizado, multi-proyecto y auto-mejorable sobre tus codebases y bases de conocimiento, servido por un MCP local. El agente pide lo que necesita y abre solo los archivos que va a modificar. Cada bugfix se indexa y el sistema aprende.

01

Qué hace realmente

La mayoría de los agentes exploran un repo de la forma cara: abren un archivo grande, leen cientos de líneas, extraen una función útil y repiten en otro lado. Así se quema el presupuesto de tokens sin darse cuenta.

code-rag reemplaza eso por recuperación estructurada. Indexa el repo una vez —módulos, contratos, símbolos AST, docs, findings— y deja que tu agente traiga solo el contexto que de verdad necesita, ya destilado: cómo conecta un módulo, su API, quién lo llama, de qué depende, sus efectos, los modelos de datos, gotchas conocidos y bugs pasados.

La idea en una línea

code-rag no es potente por estar instalado. Es potente porque el agente lo usa antes de leer archivos a lo bruto — y porque cada debug deja conocimiento que aflora la próxima vez.

Se auto-mejora: cada bugfix relevante se indexa como un finding, y un scoring de utilidad (refuerzo por uso + decaimiento de lo obsoleto) hace que lo probado y fresco aparezca primero. El coste marginal por debug baja con el tiempo.

02

Inicio rápido

En este producto el MCP corre en modo hub: un único servidor code-rag atiende todos los proyectos y resuelve cuál usar por request. No hay que configurar nada por proyecto ni pasar el slug: la tool ya consulta el repo del workspace abierto.

1 · Mirá qué proyectos hay

tool
// lista los proyectos indexados y marca cuál está abierto acá
mcp__code-rag__list_projects

2 · Tu primera búsqueda

Ante cualquier duda —un bug, "dónde está la lógica de X", "cómo se conecta Y"— empezá por search_context. Es la puerta de entrada y devuelve contexto ya rankeado.

tool
mcp__code-rag__search_context({ query: "cómo se calcula el ranking de resultados" })

Cada resultado abre con 📁 <slug> · branch: <branch> para que sepas a qué proyecto apuntó. Para consultar otro proyecto, pasá project:"<slug>" a cualquier tool.

3 · Profundizá y editá

Con el contexto en mano, bajá al detalle con get_card, get_symbol o get_file_outline. Recién ahí abrí —con Read— solo los archivos que vas a modificar. El resto del contexto ya llegó por el MCP.

Setup en máquina nueva

Si el hub no está registrado (equipo nuevo o instalación vieja por-repo), corré npm run mcp:sync: registra el hub en todos los clientes y limpia las entradas por-repo. Después abrí una sesión nueva para que el cliente lo tome.

03

El paso que casi todos se saltan

Tener el MCP conectado hace que las tools estén disponibles. No garantiza que el agente deje de abrir archivos gigantes como turista con linterna. La diferencia entre "esto es increíble" y "lo instalé y no cambió nada" suele ser una sola instrucción al agente:

instrucción para el agente
Antes de Grep/Read, usá mcp__code-rag__search_context para traer
contexto del repo. Preferí búsqueda de símbolos, outlines y
recuperación puntual por encima de leer archivos completos.

En un repo que ya trae su CLAUDE.md, esa política puede vivir ahí. Si trabajás sobre otro proyecto indexado, dejale al agente una línea equivalente: le enseñás a navegar, no a hurgar.

04

Modelo mental

Cuatro ideas explican el 90% del comportamiento del sistema:

ADos tiers

El semántico busca por intención (KNN vectorial, vía search_context). El estructural busca por nombre/ubicación —firma, outline, forma, callers— con lookup exacto o grafo, barato y sin GPU.

BFindings

Un bug no obvio + su causa raíz + el fix, indexado. Es la unidad de auto-mejora: nace con más peso que una card normal y aflora cuando vuelve a hacer falta.

CUsefulness

Score [0.1, 3.0] por doc que sube con el uso (hits + feedback) y baja con el decay nocturno de lo viejo y poco usado. Manda el ranking.

DDegradación limpia

Si el box (Redis/Ollama) no responde o la licencia no pasa, las tools avisan y dejan seguir con Grep/Read. El RAG nunca es punto único de fallo.

Redis es caché, los .md son la verdad

Las cards y findings viven versionados en cards/ y knowledge/: son el backup canónico. Redis es un índice vectorial reconstruible con index:initial. El conocimiento sobrevive a un flush.

05

Referencia de tools

Doce tools sobre mcp__code-rag__*. No hace falta elegir: search_context es la puerta y ya aflora símbolos; las demás son para profundizar. Todas aceptan un project:<slug> opcional.

Búsqueda y contexto

ToolQué haceInputs
search_contextLa tool estrella. Contexto ya destilado + hits de símbolo, rankeado. Úsala ANTES de Grep/Read.query, filters?, k?
get_cardTarjeta completa de UN módulo cuando ya sabés cuál. Lookup directo, sin KNN.id | path | symbol
get_module_mapÍndice de un área/módulo sin abrir decenas de archivos.area

Estructura de código

ToolQué haceInputs
get_file_outlineOutline de un archivo (símbolos + firma + líneas) sin abrirlo. Extracción JIT en vivo.path
get_symbolDetalle de un símbolo: firma, doc, ubicación, nº de callers.id | name
find_referencesQuién referencia un símbolo (análisis de impacto). Heurístico por nombre.symbol
get_typeLa forma de una interface / type / enum + sus usos.name

Datos tabulares

ToolQué haceInputs
query_datasetSQL SELECT-only (dialecto DuckDB) sobre datasets indexados (Excel/CSV/Parquet/SQLite…). Para cifras exactas que los agregados no cubren. Sin args → lista datasets; con dataset y sin sql → esquema.dataset?, sql?, project?

Auto-mejora

ToolQué haceInputs
record_findingIndexa un hallazgo de debugging. Requiere confirmed:true (normalmente vía /aprende). Escribe knowledge/<slug>.md + índice.title, rootCause, fix, filesTouched, modules, confirmed
feedbackAjusta la utilidad de un resultado: útil +0.3 / inútil −0.5. Mejora el ranking futuro.id, useful

Mantenimiento del índice

ToolQué haceInputs
reindexRefresca el índice ESTRUCTURAL del proyecto activo (símbolos, funciones, clases, cards de módulo) para que no driftee tras una ampliación. No indexa en el acto: encola el trabajo y el job-runner del box lo ejecuta async. Mira COMMITS, no el working tree — commiteá y pusheá antes. Requiere confirmed:true.mode? (incremental|full), confirmed

Multi-proyecto (hub)

ToolQué haceInputs
list_projectsLista los proyectos indexados y marca cuál está abierto. Para apuntar a otro, pasá project:<slug> a la tool que uses.
06

Flujos de trabajo

Repo nuevo o desconocido

search_contextget_module_mapget_file_outline

Buscá por intención, orientate en el área, y recién después mirá el outline del archivo. Sin spelunking a ciegas.

Buscar y leer una función

search_contextget_symbolRead (solo eso)

Buscá, identificá el símbolo, traé su detalle, y abrí únicamente lo que vas a editar. Ahí está el ahorro de tokens.

Análisis de impacto

find_referencesget_typeGrep (confirmar)

Mirá quién lo referencia y la forma del tipo. find_references es heurístico por nombre — para cambios críticos, confirmá con Grep.

Una pregunta de cifras exactas

search_contextquery_dataset

Cuando los agregados no alcanzan (mediana de marzo filtrando región X, percentiles, group-by arbitrario), escribí un SELECT y DuckDB lo ejecuta.

Cerrar dejando conocimiento

arreglás el bug/aprenderecord_finding

Al cerrar, el Stop-hook deja un draft. /aprende redacta el finding desde la conversación y lo indexa tras tu confirmación.

07

Bases de conocimiento

code-rag no es solo para código. El núcleo es agnóstico; un perfil (RAG_PROFILE) declara, por base de conocimiento, qué se ingiere y con qué vocabulario le hablan las tools. Sin perfil ⇒ code (cero migración).

code

Símbolos AST (ts-morph), cards LLM por módulo, findings. El comportamiento por defecto.

docs

Prosa: MD, TXT, PDF, DOCX, RST. Chunk por headings (~600 tokens).

data

Tabular: Excel/CSV/TSV en 3 niveles — esquema, registros fila-a-fila y agregaciones.

business

Documentos + datos de CRM/ERP/MRP combinados. Deriva a query_dataset cuando hace falta cálculo exacto.

La ingesta universal (v3.2) cubre además HTML, JSON/JSONL/YAML/XML, PPTX, ODT, RTF, logs, correos .eml/.msg, QIF/OFX, Parquet, SQLite e imágenes/PDF escaneado vía OCR opt-in (RAG_OCR=1). Los parsers binarios son dependencias opcionales: si faltan, avisa y sigue con el resto.

Dominios propios sin tocar código

Un preset en ~/.coderag/profiles.json declara un dominio nuevo (contabilidad, laboratorio) que extiende docs/data/business sin editar profiles.ts. La detección contable, por ejemplo, reconoce una tabla cuenta+debe+haber y arma balance de sumas y saldos.

08

Cómo funciona la búsqueda

search_context no es un grep con bigote falso. El flujo es:

  1. 1Embedding asimétrico. A la query se le antepone una instrucción de tarea (Instruct: … Query: …); los documentos van sin prefijo. Embedder fijo qwen3-embedding:4b a 2560d.
  2. 2KNN + rerank. Se recuperan k×3 vecinos por coseno y se re-rankean a k con el scoring: similitud × (usefulness + recencia + hits).
  3. 3Refuerzo. Lo recuperado suma un hit (sube su ranking futuro) y late al dashboard. El resultado se trunca a ~4000 chars por hit para no reventar el límite de tokens.

Práctico: usá una query precisa cuando sabés el nombre del símbolo; agregá filters (type, module, kind) cuando el repo es grande; describí la intención en lenguaje natural (ES o EN) cuando no sabés cómo se llama el código.

09

/aprende y la auto-mejora

El valor del RAG crece con los findings, pero pedirte que documentes al final de cada sesión no escala. El lazo lo automatiza en tres piezas:

Stop-hook/aprenderecord_findingfeedbackdecay
  • Stop-hook. Al cerrar la sesión detecta los archivos editados y deja un draft; sugiere escribir /aprende. No indexa (a prueba de fallos: nunca rompe el cierre).
  • /aprende. Reconstruye la sesión desde la conversación + git diff, redacta el finding (síntoma, causa raíz, fix), te lo muestra y pide confirmar.
  • record_finding. Al confirmar, escribe knowledge/<slug>.md e indexa con usefulness:1.5. Idempotente por título.

Después, cada vez que un finding se recupera suma un hit; feedback ajusta su utilidad; y si pasa 60+ días sin uso, el decay nocturno lo baja a piso (deja de aflorar, no se borra).

No indexes ruido

Un finding bueno es conocimiento reutilizable. No registres renombres, formato, bumps ni experimentos a medio hacer. Si hubo varios bugs independientes, registrá uno por finding, no un cajón.

10

Buenas prácticas

Hacé

  • Empezá por search_context; profundizá con outline/símbolo.
  • Abrí solo los archivos que vas a editar.
  • Verificá el símbolo antes de citar su implementación.
  • Marcá feedback cuando un resultado ayudó (o no).
  • Cerrá con /aprende si el fix fue un hallazgo no obvio.
  • Reindexá con reindex (confirmed:true) cuando el codebase cambie de forma material — commiteá y pusheá antes.

Evitá

  • "Leé todo el repo y decime qué hace."
  • Abrir todos los archivos candidatos por las dudas.
  • Buscar a mano por el fuente hasta encontrarlo.
  • Confiar en find_references para un cambio crítico sin Grep.
  • Indexar findings triviales.
11

Degradación y fallos

SíntomaCausa probable → qué hacer
"⚠️ RAG no disponible"El box está apagado / fuera de Tailscale, un modelo cargando, o la licencia no pasó (deliberadamente indistinguible). Seguí con Grep/Read sin bloquearte y reintentá.
Sin resultados / índice vacíoEl repo puede no estar indexado, o hay un mismatch de slug (es case-sensitive en Redis; una diferencia de mayúsculas busca en un índice vacío). Confirmá con list_projects.
Primera consulta muy lenta (~85 s)Cold-start del LLM. El MCP usa RAG_HTTP_TIMEOUT_MS=300000 y keep_alive:-1 mantiene los modelos residentes: la siguiente ya es rápida.
query_dataset: "archivo en otra máquina"Los datasets viven donde se indexaron. Si indexó el box y consultás desde otra máquina, la consulta debe correr donde están los archivos.
El skill /aprende no aparece en el menúLimitación de la extensión de VS Code (no de code-rag): igual funciona escribiéndolo directo. Si nunca se instaló, corré npm run setup:claude.
Principio transversal

El RAG jamás debe ser un punto único de fallo. Toda tool envuelve su cuerpo en degrade(): si algo del box no responde, devuelve un aviso legible y el agente sigue explorando normal. Nunca lanza ni rompe la sesión.

Descargar este manual en PDF

CODE:RAG · v3.2 · [Hacemos.Software]

Manual de uso · CODE-RAG