Retrato de Santiago Fernández

CubeLabs

IA · Fintech · Agentes · Automatización
⚡ Práctico

CodeGraph: Grafo de Conocimiento de Código para Agentes de IA

Contexto quirúrgico del código en una sola llamada — el knowledge graph en Rust con 68K estrellas

⏱ 45 min 📊 Intermedio 📝 10 lecciones

Cuando un agente de IA necesita entender tu código, normalmente lo descubre a lo bruto: grep, glob y read, archivo a archivo, reconstruyendo call paths y dependencias a mano. CodeGraph le da al agente el código exacto en una sola llamada: un grafo de conocimiento pre-construido con cada símbolo, cada edge de llamada y cada dependencia de tu codebase. El resultado medido sobre 7 repos reales: 88% menos tool calls, 62% menos tokens, 53% más rápido y un 44% más barato — con cero lecturas de archivo. Y es 100% local, sin API keys, con kernel nativo en Rust. Este curso te lleva de cero a experto: instalación, conexión con Claude Code, Cursor, Codex y Hermes Agent, indexado, exploración, análisis de impacto, MCP y uso como librería.

CodeGraph — semantic code intelligence para agentes de IA
CodeGraph · github.com/colbymchenry/codegraph

Contenido

  1. ¿Qué es CodeGraph y por qué tu agente lo necesita?
  2. Instalación en 1 minuto
  3. Conecta tus agentes: codegraph install
  4. Indexa tu primer proyecto: codegraph init
  5. Arquitectura: el kernel Rust y el ciclo de vida del grafo
  6. Explora el grafo: query, explore, node y files
  7. Callers, callees e impacto: blast radius antes de tocar nada
  8. codegraph affected: tests en CI
  9. CodeGraph como servidor MCP
  10. Configuración avanzada, librería y buenas prácticas

1. ¿Qué es CodeGraph y por qué tu agente lo necesita?

CodeGraph es un knowledge graph local de tu código: una base de datos SQLite (`.codegraph/codegraph.db`) que contiene cada símbolo — funciones, clases, métodos — y cada relación entre ellos — llamadas, imports, herencias, implementaciones — extraída con un kernel nativo en Rust. Cuando tu agente pregunta "¿cómo llega una petición a la base de datos?", en vez de hacer 28 llamadas de descubrimiento (find, ls, grep, read), hace una: `codegraph_explore`, y recibe el código fuente verbatim agrupado por archivo, los call paths entre símbolos y el resumen del blast radius.

El problema que resuelve es el bucle grep-and-read: los agentes actuales gastan la mayor parte de su presupuesto en descubrir estructura antes de hacer el trabajo real. CodeGraph pre-indexa esa estructura, así el agente responde directamente desde el grafo.

Métrica (mediana, 7 repos)Sin CodeGraphCon CodeGraphCambio
Tool calls6–431–488% menos
Tokens procesados180k–991k87k–209k62% menos
Lecturas de archivo2–190Cero
Tiempo46s–2m43s28s–1m3s53% más rápido
Costo$0.31–$2.43$0.31–$0.6644% más barato

Los benchmarks usan 7 codebases reales (VS Code ~11k archivos, Excalidraw, Django, Tokio, OkHttp, Gin, Alamofire) con Claude Code headless y el CLI bloqueado en ambos brazos para evitar contaminación. CodeGraph ganó en todos los repos, desde 110 hasta 11.000 archivos.

💡 Tip

CodeGraph solo ayuda cuando el agente lo consulta directamente. Por eso el instalador escribe instrucciones en tu archivo de agente (CLAUDE.md / AGENTS.md) para que responda desde el grafo y no delegue la exploración a sub-agentes que leen archivos igualmente.

2. Instalación en 1 minuto

CodeGraph se instala como un único binario autocontenido — no necesitas Node.js ni compilar nada: cada release incluye su propio runtime. Tres vías equivalentes:

# Opción A: instalador oficial (macOS / Linux) — no requiere Node
curl -fsSL https://raw.githubusercontent.com/colbymchenry/codegraph/main/install.sh | sh

# Opción B: Windows (PowerShell)
irm https://raw.githubusercontent.com/colbymchenry/codegraph/main/install.ps1 | iex

# Opción C: npm (si ya tienes Node, funciona en cualquier versión)
npm i -g @colbymchenry/codegraph

# Verifica
codegraph --version

El instalador coloca `codegraph` en tu PATH pero no cambia tu shell actual — abre una terminal nueva antes del siguiente paso para que el comando se resuelva.

1

Instala el CLI

Ejecuta el instalador de tu sistema (curl, PowerShell o npm). Sin Node.js requerido en las opciones A y B.

2

Abre una terminal nueva

Para que el binario entre en tu PATH. Verifica con codegraph --version.

3

Actualiza cuando quieras

codegraph upgrade detecta cómo lo instalaste (bundle, npm o npx) y actualiza in situ. Con --check ves si hay versión nueva; con codegraph upgrade 1.2.3 fijas una versión concreta.

⚠️ Error común

"command not found: codegraph" justo después de instalar. Es porque la instalación no afecta a la terminal abierta. Cierra y abre una nueva — el comando resuelve.

¿Instalaste por curiosidad y quieres revertirlo? codegraph uninstall elimina la configuración de todos los agentes que tocó y el CLI mismo, mostrándote antes todo lo que va a borrar. Con --keep-cli solo quita las configuraciones de agentes. Los índices de proyectos (`.codegraph/`) no se tocan; se eliminan por proyecto con codegraph uninit.

3. Conecta tus agentes: codegraph install

Instalar el CLI no conecta nada: el paso clave es cablear el servidor MCP de CodeGraph dentro de tus agentes. En una terminal nueva:

codegraph install

El instalador interactivo:

Para scripting y CI existe el modo no interactivo:

codegraph install --yes                              # auto-detecta agentes, instalación global
codegraph install --yes --init                       # lo mismo + indexa el proyecto actual (bootstrap one-shot)
codegraph install --target=cursor,claude --yes       # lista de targets explícita
codegraph install --target=auto --location=local     # agentes detectados, configuración local al proyecto
codegraph install --print-config codex               # imprime el snippet sin escribir nada
FlagValoresDefault
--targetauto, all, none o csv (claude,cursor,...)pregunta
--locationglobal, localpregunta
--yesbooleanpregunta en cada paso
--initboolean — corre codegraph init tras cablear—
--no-permissionsboolean — salta el auto-allow de Claudepermisos on
💡 Tip

Un único codegraph install global cubre todos tus proyectos. El instalador no indexa nada — eso lo hace codegraph init una vez por proyecto. El atajo npx @colbymchenry/codegraph descarga y ejecuta el instalador en un solo paso.

Importante: reinicia tu agente (Claude Code, Cursor, Codex, VS Code, etc.) después de instalar para que el servidor MCP cargue.

4. Indexa tu primer proyecto: codegraph init

Entra en tu proyecto y construye el grafo. Un solo comando crea el directorio local y construye el grafo completo en el mismo paso:

cd /ruta/a/tu/proyecto
codegraph init

Esto crea .codegraph/ con la base SQLite. El tiempo varía desde segundos (proyectos pequeños) hasta un par de minutos (proyectos grandes). En una workstation, el repo del compilador Swift (27k archivos) indexa fresco en ~100 segundos; en un VPS de 2 cores / 6GB, el kernel de Linux (70k archivos, 2M símbolos, 6.4M relaciones) completa en menos de 12 minutos con el pipeline auto-ajustado.

1

Verifica el estado

codegraph status muestra archivos indexados, entidades detectadas (clases, funciones, tipos), tamaño del grafo y cobertura.

2

Genera contexto del proyecto

codegraph context produce un resumen estructurado: arquitectura, módulos, dependencias y APIs — ideal como contexto inicial para un agente que no conoce tu codebase.

3

Exporta a markdown

codegraph context --format markdown > contexto.md para inyectarlo en el prompt de cualquier agente.

Lo mejor de todo: no hay que sincronizar nada. El auto-sync está activado por defecto — CodeGraph observa el proyecto y actualiza el grafo con cada cambio de archivo, mientras tu agente edita código o tú añades/borras archivos. El índice nunca está obsoleto y no hay nada que re-ejecutar.

⚠️ Error común

Si un indexado se queda bloqueado por un lock stale (por ejemplo, tras un crash), codegraph unlock elimina el lock y desbloquea el indexado. Para re-indexar desde cero: codegraph index --force.

¿No quieres el grafo en un proyecto? codegraph uninit lo elimina (con --force salta la confirmación).

5. Arquitectura: el kernel Rust y el ciclo de vida del grafo

Entender cómo funciona por dentro te ayuda a sacarle partido. CodeGraph tiene un kernel nativo en Rust que parsea el código con gramáticas tree-sitter compiladas dentro: 20 lenguajes — TypeScript, JavaScript, Java, Python, Go, C, C++, Rust, C#, Ruby, PHP, Swift, Kotlin, Scala, Dart, R, Lua, Luau, etc. — con una sola frontera de cruce por archivo. Cada lenguaje se publica solo tras demostrar grafos byte-for-byte idénticos al motor de referencia sobre repos reales, desde librerías pequeñas hasta el kernel de Linux.

El ciclo de vida del grafo tiene 4 fases:

1

Extracción

El kernel Rust parsea el fuente y extrae nodos (funciones, clases, métodos) y edges (llamadas, imports, extends, implements) para 20 lenguajes. Plataformas sin binario precompilado y archivos con errores de sintaxis caen al motor portable por archivo — mismo grafo en ambos casos.

2

Almacenamiento

Todo se guarda en una base SQLite local (.codegraph/codegraph.db) con búsqueda full-text FTS5.

3

Resolución

Tras extraer, se resuelven las referencias: llamadas de función → definiciones, imports → archivos fuente, herencia de clases y patrones específicos de frameworks.

4

Auto-sync

El servidor MCP observa tu proyecto con eventos nativos de OS (FSEvents / inotify / ReadDirectoryChangesW). Los cambios se debouncean (ventana de 2 segundos), se filtran a archivos de código y se sincronizan incrementalmente. Guardar un archivo actualiza el grafo en menos de un segundo: ~0.3s de trabajo en un proyecto de 4.400 archivos.

El pipeline se escala solo a la máquina: worker pools, resolución paralela y cachés de análisis se dimensionan con los cores reales (consciente de contenedores: un VPS con 2 cores se dimensiona para 2, no para los 64 del host), la RAM medida de verdad y el coste medido de tu proyecto. Un workstation recibe el pipeline paralelo completo; un VPS de 2 cores recibe uno afinado para terminar.

💡 Tip

CodeGraph es 100% local: ningún dato sale de tu máquina, no pide API keys ni servicios externos — solo SQLite. La telemetría es anónima (qué comandos y lenguajes se usan, nunca código ni rutas) y se desactiva con codegraph telemetry off, CODEGRAPH_TELEMETRY=0 o DO_NOT_TRACK=1.

6. Explora el grafo: query, explore, node y files

La CLI es tu interfaz directa con el grafo, y cada comando tiene su equivalente en las herramientas MCP:

codegraph query "sendEmail"                  # busca símbolos por nombre (--kind, --limit, --json)
codegraph explore "authentication flow"       # una llamada: fuente verbatim + call paths + blast radius
codegraph node "UserService"                  # fuente de un símbolo + sus callers, o lee un archivo con números de línea
codegraph files                               # muestra la estructura de archivos (--format, --filter, --max-depth)
codegraph search "interface:Repository"       # búsqueda por tipo de entidad

codegraph explore es la joya: responde casi cualquier pregunta en una llamada — "¿cómo funciona X?", un flujo ("¿cómo llega X a Y?") o un reconocimiento de zona — devolviendo el fuente verbatim de los símbolos relevantes agrupado por archivo, los call paths entre ellos incluyendo saltos de dynamic dispatch (callbacks, re-renders de React, interface→impl) que grep no puede seguir, y un resumen del blast radius. Si nombras un archivo o símbolo en la query, lees su fuente actual con números de línea — la misma forma que la herramienta Read.

Ejemplos de búsquedas útiles:

⚠️ Error común

Preguntas demasiado vagas ("dame todo el contexto") devuelven rankings amplios. Sé concreto: nombra un símbolo, un archivo o un flujo. La búsqueda full-text FTS5 premia términos exactos.

💡 Tip

Funciona por proyecto: si estás en un monorepo donde solo algunos servicios tienen índice, o tienes un segundo repo abierto, pasa projectPath y CodeGraph consulta cualquier proyecto indexado en la misma sesión. Una ruta sin índice devuelve una guía limpia para usar las herramientas nativas — no falla ruidosamente.

7. Callers, callees e impacto: blast radius antes de tocar nada

Antes de modificar una función, necesitas saber quién la llama, a quién llama y qué se rompería. CodeGraph responde esto en milisegundos con tres comandos:

codegraph callers "UserService.getUser"       # qué llama a este método (--limit, --json)
codegraph callees "UserService.getUser"       # qué llama este método (--limit, --json)
codegraph impact "UserService"                # qué código se ve afectado al cambiar el símbolo (--depth, --json)

codegraph impact es el análisis de blast radius: recorre transitivamente los callers del símbolo hasta la profundidad que indiques (--depth 2 para saltos indirectos) y te devuelve el conjunto de código afectado. Perfecto para:

💡 Tip

Todas las herramientas devuelven también los dynamic-dispatch hops — callbacks, re-renders de React, interface→impl — que un grep estático no puede seguir. Es el diferenciador clave frente a "buscar el símbolo en el repo".

8. codegraph affected: tests en CI

Una de las funciones más infravaloradas: codegraph affected traza las dependencias de import de forma transitiva para encontrar qué archivos de test se ven afectados por los archivos fuente que cambiaste.

codegraph affected src/utils.ts src/api.ts              # pasa archivos como argumentos
git diff --name-only | codegraph affected --stdin        # pipe desde git diff
codegraph affected src/auth.ts --filter "e2e/*"          # patrón de test personalizado
OpciónDescripciónDefault
--stdinLee la lista de archivos desde stdinfalse
-d, --depth <n>Profundidad máxima de recorrido de dependencias5
-f, --filter <glob>Glob para identificar archivos de testauto-detect
-j, --jsonSalida JSONfalse
-q, --quietSolo rutas de archivofalse

Ejemplo de hook de CI que ejecuta solo los tests afectados:

#!/usr/bin/env bash
# run-affected-tests.sh
AFFECTED=$(git diff --name-only HEAD | codegraph affected --stdin --quiet)
if [ -n "$AFFECTED" ]; then
  npx vitest run $AFFECTED
fi

Con esto, un PR que toca src/utils.ts ejecuta únicamente los tests que dependen transitivamente de ese archivo — en vez de la suite completa. Menos tiempo de CI, feedback más rápido.

⚠️ Error común

codegraph affected depende de que el índice exista y esté fresco. Si acabas de clonar el repo en CI, ejecuta codegraph init --yes antes (o usa codegraph install --yes --init como bootstrap one-shot).

9. CodeGraph como servidor MCP

Cuando CodeGraph corre como servidor MCP expone una única herramienta: codegraph_explore. La decisión de diseño es deliberada: la medición de comportamiento con agentes reales mostró que una herramienta fuerte orienta mejor que un menú de herramientas estrechas — menos elecciones erróneas y ahorro de contexto en cada sesión.

Las demás herramientas (codegraph_node, codegraph_search, codegraph_callers, codegraph_callees, codegraph_impact, codegraph_files, codegraph_status) siguen funcionando pero no aparecen listadas por defecto — todo lo que devuelven ya llega inline en codegraph_explore (sección blast radius, mapa de relaciones, el cuerpo de un símbolo como lista de callees).

Para re-habilitarlas en la superficie MCP, usa la variable de entorno CODEGRAPH_MCP_TOOLS:

CODEGRAPH_MCP_TOOLS=explore,node,search,callers

Si prefieres configurar a mano (sin instalador), así se ve la integración en ~/.claude.json:

{
  "mcpServers": {
    "codegraph": {
      "type": "stdio",
      "command": "codegraph",
      "args": ["serve", "--mcp"]
    }
  }
}

Y para auto-aprobar todas las herramientas de CodeGraph en Claude Code (opcional, en ~/.claude/settings.json):

{
  "permissions": {
    "allow": [
      "mcp__codegraph__*"
    ]
  }
}
💡 Tip

La guía de uso llega al agente automáticamente en la respuesta de inicialización MCP: le dice que responda las preguntas estructurales directamente con CodeGraph, que trate el fuente devuelto como ya leído y que confíe en los resultados sin re-verificar con grep. Los subagentes y agentes sin MCP aprenden el equivalente CLI (codegraph explore) por la sección marcada que el instalador escribe en CLAUDE.md / AGENTS.md.

10. Configuración avanzada, librería y buenas prácticas

Configuración casi cero. CodeGraph es zero-config por defecto: el soporte de lenguajes es automático por extensión y no hay nada que cablear por lenguaje. Excluye por defecto directorios de dependencias/build/caché (node_modules, vendor, dist, build, target, .venv, Pods, .next), respeta tu .gitignore y salta archivos de más de 1 MB.

El archivo opcional codegraph.json en la raíz del proyecto afina el comportamiento:

{
  "exclude": ["static/", "**/vendor/**"],
  "include": ["Tools/", "Local/typescript/"],
  "deprioritize": ["optional-skills/", "scripts/"],
  "extensions": { ".dota_lua": "lua", ".tpl": "php" }
}

Uso como librería. El paquete npm re-exporta la API programática — puedes incrustar el grafo en tu propia app (p.ej. un proceso principal de Electron):

import CodeGraph from '@colbymchenry/codegraph';

const cg = await CodeGraph.init('/path/to/project');

await cg.indexAll({
  onProgress: (p) => console.log(`${p.phase}: ${p.current}/${p.total}`)
});

const results = cg.searchNodes('UserService');
const callers = cg.getCallers(results[0].node.id);
const context = await cg.buildContext('fix login bug', {
  maxNodes: 20, includeCode: true, format: 'markdown'
});
const impact = cg.getImpactRadius(results[0].node.id, 2);

cg.watch();    // auto-sync en cambios
cg.unwatch();  // deja de observar
cg.close();

Requisitos para incrustarlo: npm (npm i @colbymchenry/codegraph), Node 22.5+ para el node:sqlite integrado (el CLI y el servidor MCP no se ven afectados — corren en su runtime autocontenido), y skipLibCheck: true en TypeScript.

Buenas prácticas resumidas:

  1. Instala una vez, cablea todos tus agentes (codegraph install --yes), indexa cada proyecto (codegraph init).
  2. Deja que el auto-sync haga su trabajo — no corras codegraph sync a mano.
  3. En prompts largos con ventana pequeña, presupuesta el footprint: CodeGraph deja ~80% más contexto residual residente al final de la sesión (mecanismo del mismo que lo hace rápido: un payload denso que responde y se queda, frente a muchos resultados pequeños que se evictan).
  4. Usa codegraph affected en CI para testear solo lo afectado.
  5. Revisa la nota de staleness tras ediciones: si el agente muestra el banner, el índice se re-sincroniza solo en ~2 segundos.
⚠️ Limitaciones

CodeGraph está en desarrollo activo — las APIs pueden cambiar. Proyectos con archivos generados o bundles de >1MB no se indexan. Y recuerda: la lectura de archivos se reduce a cero solo si el agente consulta el grafo directamente en vez de delegar a sub-agentes de exploración.

Preguntas frecuentes

¿Necesito Node.js para usar CodeGraph?

No. El instalador oficial (curl/PowerShell) descarga un binario autocontenido con su propio runtime. Solo lo necesitas (Node 22.5+) si quieres incrustar la API programática como librería en tu propia app.

¿CodeGraph envía mi código a algún servidor?

No. Es 100% local: todo vive en una base SQLite en .codegraph/. La telemetría es anónima y agregada (comandos y lenguajes usados, nunca código, rutas, símbolos o queries) y se desactiva con codegraph telemetry off.

¿Funciona con Hermes Agent?

Sí — Hermes Agent está en la lista de agentes soportados que el instalador auto-detecta y configura. También Claude Code, Cursor, Codex CLI, opencode, Gemini CLI, Antigravity, Kiro y GitHub Copilot (VS Code, CLI y JetBrains).

¿Y si mi proyecto usa un lenguaje o extensión rara?

CodeGraph soporta 20+ lenguajes de serie. Para extensiones no estándar, mapea la extensión a un lenguaje soportado en codegraph.json y re-indexa. Para lenguajes no soportados, las herramientas nativas del agente siguen disponibles — no rompe nada.