Memoria
Evita que tu IA rompa código al revelar dependencias ocultas de archivos mediante análisis forense de git.
Documentación
Memoria
La memoria que tu IA necesita.
Un servidor MCP que evita que tu IA rompa código al revelar dependencias ocultas entre archivos mediante análisis forense de git.
⚡ Instalación rápida
Instalación con un clic (Smithery)
Haz clic en la insignia de arriba para instalar Memoria con un solo clic a través de Smithery.
Configuración rápida de copiar y pegar
Añade esto a tu archivo de configuración MCP (funciona con Claude, Cursor, Windsurf, Cline):
{
"mcpServers": {
"memoria": {
"command": "npx",
"args": ["-y", "@byronwade/memoria"]
}
}
}
Comandos de una línea para terminal
| Herramienta | Comando |
|---|---|
| Claude Code | claude mcp add memoria -- npx -y @byronwade/memoria |
| Claude Desktop | npx @anthropic/claude-code mcp add memoria -- npx -y @byronwade/memoria |
| Cursor | mkdir -p .cursor && echo '{"mcpServers":{"memoria":{"command":"npx","args":["-y","@byronwade/memoria"]}}}' > .cursor/mcp.json |
| npm global | npm install -g @byronwade/memoria |
🪟 Instalación en Windows PowerShell
# Claude Desktop
$config = "$env:APPDATA\Claude\claude_desktop_config.json"
$json = if(Test-Path $config){Get-Content $config | ConvertFrom-Json}else{@{}}
$json.mcpServers = @{memoria=@{command="npx";args=@("-y","@byronwade/memoria")}}
$json | ConvertTo-Json -Depth 10 | Set-Content $config
🍎 Instalación manual en macOS
# Claude Desktop (requires jq: brew install jq)
echo '{"mcpServers":{"memoria":{"command":"npx","args":["-y","@byronwade/memoria"]}}}' | \
jq -s '.[0] * .[1]' ~/Library/Application\ Support/Claude/claude_desktop_config.json - > tmp.json && \
mv tmp.json ~/Library/Application\ Support/Claude/claude_desktop_config.json
Luego reinicia tu herramienta de IA. ¡Eso es todo!
¿Por qué Memoria?
Le pides a tu IA que refactorice un archivo. Hace un trabajo perfecto. Ejecutas tu aplicación. Se bloquea.
¿Por qué? Algún otro archivo dependía de la implementación anterior, pero no hay ninguna importación entre ellos, así que la IA no lo sabía.
Memoria lo soluciona. Analiza el historial de git para encontrar archivos que cambian juntos, incluso sin importaciones directas.
Without Memoria: With Memoria:
───────────────── ─────────────
You: "Update route.ts" You: "Update route.ts"
AI: "Done!" ✅ Memoria: "⚠️ 85% coupled with billing.tsx"
Result: 💥 CRASH AI: "I'll update both files"
Result: ✅ Works
Privado y local
Memoria se ejecuta 100% en tu máquina.
- No se sube código a la nube
- No se requieren claves API
- Funciona sin conexión
- Analiza tu carpeta local
.gitdirectamente
Tu código nunca sale de tu computadora.
Instalación
Elige tu herramienta de IA:
| Herramienta | Comando de una línea | Archivo de configuración |
|---|---|---|
npx @anthropic/claude-code mcp add memoria -- npx -y @byronwade/memoria | Ver abajo | |
claude mcp add memoria -- npx -y @byronwade/memoria | Automático | |
mkdir -p .cursor && echo '{"mcpServers":{"memoria":{"command":"npx","args":["-y","@byronwade/memoria"]}}}' > .cursor/mcp.json | .cursor/mcp.json | |
| Configuración manual | ~/.codeium/windsurf/mcp_config.json | |
| Configuración manual | ~/.continue/config.json | |
| Interfaz de configuración | Configuración MCP de Cline |
📦 Claude Desktop
Ubicación de la configuración:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
Opción 1: CLI de Claude Code (recomendado)
npx @anthropic/claude-code mcp add memoria -- npx -y @byronwade/memoria
Opción 2: Configuración manual
{
"mcpServers": {
"memoria": {
"command": "npx",
"args": ["-y", "@byronwade/memoria"]
}
}
}
📦 Claude Code (CLI)
claude mcp add memoria -- npx -y @byronwade/memoria
¡Listo! Claude Code maneja todo automáticamente.
📦 Cursor
Comando de una línea (nivel de proyecto):
mkdir -p .cursor && echo '{"mcpServers":{"memoria":{"command":"npx","args":["-y","@byronwade/memoria"]}}}' > .cursor/mcp.json
Ubicaciones de configuración:
- Proyecto:
.cursor/mcp.json(en la raíz del proyecto) - Global:
~/.cursor/mcp.json
{
"mcpServers": {
"memoria": {
"command": "npx",
"args": ["-y", "@byronwade/memoria"]
}
}
}
📦 Windsurf
Configuración: ~/.codeium/windsurf/mcp_config.json
{
"mcpServers": {
"memoria": {
"command": "npx",
"args": ["-y", "@byronwade/memoria"]
}
}
}
📦 Continue (VS Code)
Configuración: ~/.continue/config.json
{
"experimental": {
"modelContextProtocolServers": [
{
"transport": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@byronwade/memoria"]
}
}
]
}
}
📦 Cline (VS Code)
Abre la configuración de Cline → Servidores MCP → Añadir nuevo servidor:
{
"mcpServers": {
"memoria": {
"command": "npx",
"args": ["-y", "@byronwade/memoria"]
}
}
}
📦 Otros clientes MCP
Cualquier cliente compatible con MCP funciona. Usa esta configuración universal:
{
"mcpServers": {
"memoria": {
"command": "npx",
"args": ["-y", "@byronwade/memoria"]
}
}
}
⚠️ Después de configurar, reinicia tu herramienta de IA.
Verificar la instalación
Después de reiniciar, pregúntale a tu IA:
"What MCP tools do you have available?"
Deberías ver analyze_file y ask_history en la lista.
O prueba directamente:
"Use the analyze_file tool on any file in this project"
Uso
Pídele a tu IA que analice un archivo antes de hacer cambios:
"Analyze src/api/stripe/route.ts before I refactor it"
Memoria devuelve:
- Archivos acoplados - Archivos que cambian juntos con frecuencia
- Puntuación de riesgo - Qué tan propenso a errores es este código históricamente
- Dependencias obsoletas - Archivos acoplados que pueden necesitar actualización
- Evidencia - Diffs de código reales que muestran por qué los archivos están relacionados
Comandos CLI
Memoria incluye un CLI completo para análisis manual: las mismas capacidades que usa tu IA:
# Full forensic analysis (same as AI's analyze_file)
memoria analyze src/index.ts
# Quick risk assessment
memoria risk src/api/route.ts
# Show coupled files
memoria coupled src/auth.ts
# Find files that import the target
memoria importers src/types.ts
# Search git history (same as AI's ask_history)
memoria history "setTimeout" src/utils.ts
memoria history "fix" --type=message
Opciones de salida
# JSON output for scripting/CI
memoria analyze src/index.ts --json
# Pipe to other tools
memoria risk src/api/route.ts --json | jq '.riskScore'
Ejemplo de salida
$ memoria analyze src/index.ts
Forensics for `index.ts`
RISK: 45/100 (MEDIUM)
Risk factors: High volatility (38%) • Coupled (5 files) • 3 dependents
VOLATILITY
Panic score: 38% | Commits: 24
Top author: Dave (72%)
COUPLED FILES
85% billing/page.tsx [schema]
References: billing_records table. Schema changes may break queries.
90% index.test.ts [test]
Test file matches naming pattern. Update when changing exports.
75% config.ts [env]
Shares env vars: API_KEY, DATABASE_URL
65% hooks/useData.ts [api]
Calls endpoint: GET /api/data
STATIC DEPENDENTS
- [ ] Check `cli.ts`
- [ ] Check `server.ts`
- [ ] Check `utils.ts`
Analysis completed in 142ms
Configuración (opcional)
Crea un .memoria.json en la raíz de tu proyecto para personalizar los umbrales:
{
"thresholds": {
"couplingPercent": 20,
"driftDays": 14,
"analysisWindow": 100
},
"ignore": [
"**/*.lock",
"dist/",
"legacy/**"
],
"panicKeywords": {
"postmortem": 3,
"incident": 3,
"p0": 3
},
"riskWeights": {
"volatility": 0.35,
"coupling": 0.30,
"drift": 0.20,
"importers": 0.15
}
}
| Opción | Predeterminado | Descripción |
|---|---|---|
thresholds.couplingPercent | 15 | Porcentaje mínimo de acoplamiento para informar |
thresholds.driftDays | 7 | Días antes de que un archivo esté "obsoleto" |
thresholds.analysisWindow | 50 | Número de commits a analizar |
ignore | [] | Patrones glob adicionales a ignorar |
panicKeywords | {} | Palabras clave personalizadas con pesos de severidad |
riskWeights | {} | Sobrescribir pesos de cálculo de riesgo |
Cómo funciona
Motor de volatilidad
Escanea commits en busca de palabras clave de pánico (fix, bug, revert, urgent, hotfix) con decaimiento temporal: los errores recientes importan más que los antiguos. También rastrea el Factor de autobús (quién es dueño del código).
Motor de entrelazamiento
Encuentra archivos que cambian juntos >15% del tiempo. Revela dependencias implícitas que las importaciones no pueden mostrar.
Motor centinela
Detecta cuando los archivos acoplados están desincronizados por más de 7 días. Señala dependencias obsoletas antes de que causen errores.
Motor de importación estática
Usa git grep para encontrar archivos que importan el objetivo, incluso para archivos nuevos sin historial de git.
Búsqueda de historial (El arqueólogo)
Busca en el historial de git para entender por qué se escribió el código. Resuelve el problema de la "Valla de Chesterton" antes de eliminar ese código de aspecto extraño.
Acoplamiento de documentación
Encuentra archivos markdown que referencian tus funciones/tipos exportados. Detecta actualizaciones de README necesarias cuando cambia el formato de salida.
Acoplamiento de tipos
Usa git pickaxe (git log -S) para encontrar archivos que comparten definiciones de tipos, incluso sin importaciones directas.
Acoplamiento de contenido
Encuentra archivos que comparten literales de cadena (mensajes de error, constantes) que deberían mantenerse sincronizados.
Acoplamiento de archivos de prueba
Descubre automáticamente archivos de prueba que coinciden con convenciones de nombres (*.test.*, *.spec.*, *_test.*, etc.) y archivos mock/fixture, sin extensiones codificadas.
Acoplamiento de variables de entorno
Encuentra archivos que comparten variables de entorno ALL_CAPS_UNDERSCORE (API_KEY, DATABASE_URL, etc.): funciona en cualquier lenguaje.
Acoplamiento de esquema/modelo
Detecta definiciones de esquemas de base de datos (SQL, Prisma, TypeORM, Mongoose) y encuentra archivos que consultan esas tablas/modelos.
Acoplamiento de endpoints de API
Encuentra código de cliente que llama a endpoints de API definidos en archivos de rutas. Detecta cambios en la forma de respuesta que rompen a los consumidores.
Acoplamiento de cadenas de re-exportación
Detecta archivos barrel (index.ts) que re-exportan tu módulo y encuentra importadores transitivos a través de esos barrels.
Ejemplo de salida
# Forensics: `route.ts`
**RISK: 65/100** — HIGH
45% volatility · 3 coupled · 8 dependents · 1 stale
> Proceed carefully. Check all coupled files and update stale dependencies.
---
## Coupled Files
**`billing/page.tsx`** — 85% (schema)
> These files share type definitions. If you modify types in one, update the other to match.
+ interface SubscriptionUpdated
- oldStatus: string
**`route.test.ts`** — 90% [test]
> Test file for this module. Update when changing exports.
**`services/stripe.ts`** — 75% [env]
> Shares env vars: STRIPE_KEY, STRIPE_SECRET
**`README.md`** — 70% [docs]
> Documentation references: generateReport, SubscriptionStatus
**`types/billing.ts`** — 65% [type]
> Shared types: SubscriptionUpdated, PaymentStatus
**`features/billing/index.ts`** — 60% [transitive]
> Re-exports this file. Changes propagate through this barrel.
---
## Static Dependents
These files import `route.ts`. API changes require updating them.
- [ ] `src/components/SubscriptionCard.tsx`
- [ ] `src/hooks/useSubscription.ts`
---
## Pre-flight Checklist
- [ ] Modify `route.ts`
- [ ] Update `billing/page.tsx` (schema)
- [ ] Update `tests/stripe.test.ts` — stale 12d
---
## File History
**Volatile** — 45% panic score
**Expert:** Dave (90% of commits)
Modo piloto automático
¿Quieres que tu IA verifique Memoria automáticamente antes de cada edición? Instala los archivos de reglas:
# Install globally first
npm install -g @byronwade/memoria
# Then in your project directory:
memoria init --all
Esto instala archivos de reglas que le indican a tu IA que siempre llame a analyze_file antes de editar código.
Qué se instala
| Indicador | Archivo | Herramienta |
|---|---|---|
--cursor | .cursor/rules/memoria.mdc | Cursor |
--claude | .claude/CLAUDE.md | Claude Code |
--windsurf | .windsurfrules | Windsurf |
--cline | .clinerules | Cline/Continue |
--all | Todos los anteriores | Todas las herramientas |
--force | Actualizar reglas existentes | Sobrescribe la sección de Memoria |
Comportamiento de fusión inteligente
memoria init es seguro de ejecutar varias veces: no sobrescribirá tus reglas existentes:
| Escenario | Qué sucede |
|---|---|
| El archivo no existe | Crea un archivo nuevo con reglas de Memoria |
| El archivo existe, sin Memoria | Agrega reglas de Memoria (tu contenido se conserva) |
| El archivo existe, con Memoria | Omite (usa --force para actualizar) |
# First run - creates or appends
memoria init --cursor
# ✓ Created .cursor/rules/memoria.mdc
# Second run - skips (already installed)
memoria init --cursor
# ⊘ Skipped .cursor/rules/memoria.mdc (already has Memoria rules)
# Use --force to update existing Memoria rules.
# Force update to latest version
memoria init --cursor --force
# ✓ Updated .cursor/rules/memoria.mdc (--force)
Detección automática
Ejecutar memoria init sin indicadores detectará automáticamente qué herramientas estás usando:
memoria init
# Detected: Cursor, Claude Code
# Installing Memoria rules...
# ✓ Created .cursor/rules/memoria.mdc
# ✓ Appended to .claude/CLAUDE.md (preserved existing content)
# ✓ Installed/updated 2 rule file(s)
Ahora Memoria actúa como un guardia de seguridad obligatorio para cada edición.
Rendimiento
Memoria está optimizado para velocidad y uso mínimo de tokens:
| Métrica | Valor |
|---|---|
| Tiempo de análisis completo | <100ms |
| Tokens por análisis | ~600 tokens |
| Aceleración de caché | 2000x+ en llamadas repetidas |
Desglose de motores
| Motor | Tiempo | Propósito |
|---|---|---|
| Acoplamiento | ~45ms | Encontrar archivos que cambian juntos |
| Volatilidad | ~10ms | Calcular puntuación de propensión a errores |
| Deriva | <1ms | Detectar dependencias obsoletas |
| Importadores | ~8ms | Encontrar dependientes estáticos |
| Búsqueda de historial | ~7ms | Buscar commits de git |
Ejecuta los benchmarks tú mismo:
npm run build
npx tsx benchmarks/run-benchmarks.ts
Requisitos
- Node.js 18+
- Repositorio git con historial de commits
- Herramienta de IA compatible con MCP
Estructura del monorepo (Turbo)
apps/mcp-server— Servidor MCP y paquete npm (publica@byronwade/memoria)apps/api— Stub de backend API (placeholder HTTP de Node)apps/web— Stub de frontend webpackages— Bibliotecas compartidas (futuro)
Desarrollo
npm install
npm run build # turbo build across workspaces
npm test # turbo test (runs vitest in mcp-server)
# Focus on a single app/package
npx turbo run build --filter=@byronwade/memoria
npx turbo run dev --filter=@byronwade/memoria
Solución de problemas
❌ "Herramienta no encontrada" o "analyze_file no disponible"
- Reinicia tu herramienta de IA - Los servidores MCP solo se cargan al inicio
- Verifica la sintaxis de configuración - El JSON debe ser válido (sin comas finales)
- Verifica Node.js 18+ - Ejecuta
node --versionpara comprobar - Verifica la ruta del archivo - El archivo de configuración debe estar en la ubicación exacta para tu herramienta
❌ "No es un repositorio git"
Memoria requiere un repositorio git con historial. Asegúrate de:
- Estar en un repositorio git (
git statusdebería funcionar) - Que el repositorio tenga al menos algunos commits
- Estar pasando una ruta absoluta a
analyze_file
❌ npx es lento o se agota el tiempo
Instala globalmente para un inicio más rápido:
npm install -g @byronwade/memoria
Luego actualiza tu configuración para usar memoria directamente:
{
"mcpServers": {
"memoria": {
"command": "memoria"
}
}
}
❌ Problemas con rutas de Windows
Usa barras diagonales o barras invertidas escapadas en las rutas:
"args": ["-y", "@byronwade/memoria"]
Si los problemas persisten, instala globalmente y usa el comando directamente.
¿Sigue atascado? Abre un issue con tu configuración y mensaje de error.
Licencia
MIT
Cuando Memoria te salve de una regresión, haznos saber.