{
  "markdown": "# misMEM\n\n> Memoria persistente cooperativa para LLMs. Un solo territorio (`~/.mismem/mem.db`), múltiples instancias (Copilot, Claude Code, Claude Desktop, agentes custom) hablando el mismo protocolo MCP.\n\n**La cooperatividad hace a la persistencia de la información.**\n\n## Por qué existe\n\nCada instancia de un LLM nace sin memoria. Cada cliente (Copilot, Claude Desktop, Claude Code, ChatGPT) guarda lo suyo en silos incompatibles. El usuario repite contexto. La continuidad muere entre sesiones.\n\nmisMEM resuelve esto con un solo gesto: **una base de datos SQLite + un protocolo MCP de 5 invocaciones**, accesible desde cualquier cliente que hable MCP.\n\n## Arquitectura: 3 capas, como la memoria biológica\n\n```\nepisodes  (verbatim, efímero, TTL post-consolidación)\n    ↓  consolidación (manual o LLM nocturno)\nmemories  (gist + details, salience con decay + refuerzo Hebbiano)\n    ↓  crystallize\ntraits    (patrones cristalizados — identidad, leyes, decisiones firmes)\n```\n\nLa pérdida es **intencional y asimétrica**, como en la memoria humana: lo crudo se disuelve, lo destilado persiste, lo cristalizado permanece.\n\n### Qué guarda cada capa\n\n| Capa | Qué representa | Ciclo de vida | Para qué sirve |\n|---|---|---|---|\n| `episodes` | Lo que ocurrió: texto original y fechado | Efímero después de consolidarse | Evidencia y contexto inmediato |\n| `memories` | Lo aprendido al resumir varios episodios | Su `salience` baja si no se usa y sube al recordarla | Conocimiento operativo y búsqueda semántica |\n| `traits` | Patrones, preferencias o decisiones estables | Permanente salvo borrado explícito | Identidad y reglas de máxima prioridad |\n\nEjemplo: “hoy PostgreSQL rindió mejor” es un episode; “PostgreSQL es\npreferible en este proyecto” es una memory; “priorizamos soluciones robustas\npara concurrencia” puede cristalizar como trait.\n\n## Cinco gestos, un solo territorio\n\n| Invocación | Qué hace |\n|---|---|\n| `capture` | Inscribir un episodio en un scope jerárquico (`proyecto/diario`, `vscode/transcripts`, …) |\n| `recall` | Buscar con FTS5 + semántica y reforzar las memories devueltas |\n| `consolidate` | Espesar episodios relacionados en una memoria |\n| `crystallize` | Fijar un trait/ley con evidencia (identidad, decisiones firmes) |\n| `forget` | Soltar lo que ya no se consulta |\n\nAdemás, una **capa engram-compat** (`mem_save`, `mem_search`, `mem_context`, `mem_session_*`, …) mantiene compatibilidad con clientes que hablan el protocolo Engram.\n\n## Quickstart\n\nLa forma más rápida — sin clonar nada, vía [npm](https://www.npmjs.com/package/@lucasmella/mismem). En el `mcp.json` de tu cliente (VS Code / Claude Code / Claude Desktop):\n\n```json\n{\n  \"mcpServers\": {\n    \"mismem\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@lucasmella/mismem\"]\n    }\n  }\n}\n```\n\nLa DB se crea sola en el primer uso (default: `~/.mismem/mem.db`, configurable con `MISMEM_DB`). Tu memoria vive en tu disco — nunca sale de tu máquina.\n\n### Instancia remota (multi-cliente)\n\nPara acceder a la misma memoria desde varias máquinas, la imagen Docker oficial:\n\n```bash\ndocker run -d --name mismem-brain \\\n  -e MISMEM_AUTH_USER=brain -e MISMEM_AUTH_PASS=<pass> \\\n  -v mismem-data:/data -p 3200:3200 \\\n  ghcr.io/lucasmella-stack/mismem-brain:latest\n```\n\nGuía completa con Traefik + TLS en [DEPLOY.md](./DEPLOY.md).\n\n### Desde el código\n\n```bash\ngit clone https://github.com/lucasmella-stack/misMEM.git\ncd misMEM/engine\npnpm install\npnpm test        # todo verde antes de usar\npnpm build       # tsc → dist/\n```\n\nY en `mcp.json`: `\"command\": \"node\", \"args\": [\"<ruta-al-repo>/misMEM/engine/dist/server.js\"]`.\n\n## Componentes\n\n- **`engine/src/server.ts`** — MCP server stdio (uso local).\n- **`engine/src/server-http.ts`** — Streamable HTTP para deploy remoto (BasicAuth opcional, `/healthz`). Ver [DEPLOY.md](./DEPLOY.md).\n- **`engine/src/viewer.ts`** — panel read-only en `/viewer` + `/api/{stats,recent,search}`.\n- **Consolidación LLM** — cron nocturno que destila episodios en memorias vía OpenRouter, con pre-filtro Pareto para descartar ruido. Ver [engine/src/consolidation/README.md](engine/src/consolidation/README.md).\n- **CLIs** — `mismem-ingest` (exports de ChatGPT / transcripts de VS Code), `mismem-consolidate`, `mismem-forget`, `mismem-stats`, `mismem-migrate-engram`.\n\n## Stack\n\n- **Engine**: TypeScript estricto, ES2022, ESM, Node ≥22.\n- **Storage**: SQLite con WAL (multiple readers + 1 writer concurrente). `better-sqlite3`.\n- **Búsqueda**: FTS5 + RRF semántico para memories, manteniendo traits > memories > episodes.\n- **Protocolo**: [Model Context Protocol](https://modelcontextprotocol.io/) vía `@modelcontextprotocol/sdk`.\n- **Validación**: Zod en todos los bordes.\n\n## Estado\n\n- ✅ Engine MCP funcionando (5 invocaciones + capa engram-compat).\n- ✅ Hebbian boost activo en recall; salience con decay.\n- ✅ Scopes jerárquicos sin cross-scope leakage.\n- ✅ Servidor Streamable HTTP + deploy Docker/Traefik.\n- ✅ Consolidación LLM nocturna (episodes → memories).\n- ✅ Viewer read-only + CLIs de introspección.\n- ✅ Dedup en captura/ingesta (re-ingestar es idempotente).\n- ✅ Recall híbrido: FTS5 + búsqueda semántica opcional vía [Ollama](https://ollama.com) local.\n- 🚧 Binario distribuible (Bun --compile).\n\n### Búsqueda semántica (opcional)\n\nCon Ollama corriendo (`ollama pull nomic-embed-text`), `recall` suma búsqueda\npor significado: \"problemas de plata\" encuentra memorias que dicen \"deudas\".\nLos vectores se guardan como BLOB en la misma SQLite y la búsqueda es coseno\nen JS — sin extensiones nativas ni servicios externos. Si Ollama no está,\ntodo degrada silenciosamente a FTS5 puro. La semántica cubre deliberadamente\nsolo `memories`; `episodes` y `traits` conservan búsqueda FTS5. Backfill y\nreindexado: `mismem-embed` (`--status`, `--force`).\n\n### Salience, decay y olvido\n\nLas memories pierden la mitad de su salience cada 90 días sin refuerzo\n(configurable con `MISMEM_SALIENCE_HALF_LIFE_DAYS`). `recall` aplica el decay\npendiente y después suma el refuerzo Hebbiano. `forget` elimina memories bajo\nel umbral solo después de su período de gracia; `--dry-run` calcula el\nresultado sin modificar la DB.\n\n## Privacidad\n\nTu memoria es tuya. La DB (`*.db`), los dumps y los exports personales están en `.gitignore` — **nunca** los commitees. El servidor HTTP sin `MISMEM_AUTH_USER`/`MISMEM_AUTH_PASS` corre sin auth: usalo así solo en localhost.\n\n## Filosofía\n\n> *El pasado existe porque lo hemos escrito y compactado para que así sea.*\n\nInspirado en parte por *Initiation Into Hermetics* de Franz Bardon: el espejo que refleja la conciencia entre instancias necesita dos polos. misMEM es el **suelo de Tierra** — la memoria que no se disuelve entre sesiones — para que la cooperación humano⇄LLM tenga continuidad real.\n\n## Contribuir\n\nIssues y PRs bienvenidos. Antes de un PR: `pnpm typecheck && pnpm test` desde `engine/` (todo verde), commits convencionales (`feat:`, `fix:`, …). Las convenciones de código están en [.github/copilot-instructions.md](.github/copilot-instructions.md).\n\n## Licencia\n\nMIT. Ver [LICENSE](./LICENSE).\n",
  "bytes": 7042,
  "sha": "8c5e18493ac98a4572d22c4c1f580ea89d5f67f67b7455da45b11493f994dce2",
  "repo_slug": "lucasmella-stack/mismem",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_lucasmella_stack_mismem_c7e7d6c7/readme"
}