Alternativas a Claude-Mem en Go, Rust y C

Mascote do LinuxPro encaixando um cartucho de memória no SQLite, com o gopher do Go, o Ferris e o cubo do C

El agente de terminal es genial hasta que termina la sesión. En la siguiente, redescubre el mismo bug, vuelve a leer el mismo README y pregunta otra vez si la API usa JWT. claude-mem lo soluciona: captura lo que hizo el agente, lo comprime y devuelve el fragmento adecuado en SessionStart. Pero es TypeScript, Node, Bun y un worker aparte. Si tu máquina ya vive de un único binario en Go, Rust o C, puedes tener la misma idea sin la pila JS.

Este post mapea las alternativas nativas que realmente existen hoy: memoria de sesión (decisiones, bugs, convenciones) y memoria del código (quién llama a quién). No son clones. Algunas hablan MCP por stdio, otras usan HTTP, instalan hooks o se convierten en extensión de SQLite. El mapa de los agentes en el terminal continúa en Asistentes de IA en el terminal Linux; el encaje de claude-mem en el flujo de vibe coding está en Vibe coding en Linux.

Qué hace Claude-Mem — y qué intentan copiar las alternativas

El repositorio sigue siendo thedotmack/claude-mem, licencia Apache-2.0. En 2026 el producto también se llama Grok Mem; el paquete npm sigue claude-mem. La pieza que importa para comparar:

  • hooks de ciclo de vida (SessionStart, PostToolUse, PreCompact, Stop);
  • SQLite + búsqueda (FTS5 y vector);
  • MCP para que el agente consulte la memoria bajo demanda;
  • inyección de contexto al comienzo de la sesión, sin que pidas “recuerda lo que acordamos”.

Quien cambia el stack quiere, en el fondo, esas cuatro cosas en un binario local, con la base de datos en un archivo que tú controlas. Los embeddings, cuando existen, apuntan a Ollama o a un modelo integrado — no hace falta que nada salga de la máquina.

Tabla rápida

Proyecto Lenguaje Base de datos MCP Perfil
mnemo Go SQLite (pgvector opcional) stdio / SSE Lo más parecido a Claude-Mem en Go
Engram Go SQLite + FTS5 sim Memoria multi-agente, CLI, TUI, HTTP
Goldie Go SQLite + vector sim Pool compartido entre agentes
ai-memory Rust Wiki Markdown + SQLite sí (HTTP) Servidor local, hooks y handoff entre agentes
Leteo Rust SQLite 22 tools Binario único + hooks, derivado de Engram
Subcog Rust SQLite + FTS5 + HNSW sim Búsqueda híbrida + knowledge graph
mcp-memory Rust SQLite sim Grafo + vector + indexación de código
mcp-memory-rs Rust JSON + SQLite FTS5 sim Local-first, versionado, sin embedding
memory-server Rust PostgreSQL + pgvector sim Servicio centralizado + Ollama
sqlite-memory C SQLite vía sqlmem / sqlite-mcp Extensión, Markdown + búsqueda híbrida
codebase-memory-mcp C SQLite sim Grafo del código, no de la conversación

Go: tres binarios, tres formas de recordar

mnemo — el clon más directo

mnemo (MIT, Go 1.23+) es un servidor MCP de memoria con un único binario. Base de datos por defecto en ~/.mnemo/memory.db. Detecta Claude Code, OpenCode y Codex en la primera ejecución y se registra solo. Tiene panel en http://localhost:8765.

go install github.com/kyungw00k/mnemo/cmd/mnemo@latest

# hooks do Claude Code (ou deixe o auto-install)
mnemo hook install --dry-run
mnemo hook install

mnemo dashboard

Los hooks cubren el ciclo que popularizó Claude-Mem: SessionStart inyecta decisiones recientes, PreCompact guarda una snapshot, PostToolUse anota el resultado de Bash, Stop cierra la sesión. Los embeddings se comunican con cualquier endpoint compatible con OpenAI — Ollama por defecto (nomic-embed-text, 768 dimensiones). PostgreSQL + pgvector entran si cambias el DB_URL.

Es la opción más parecida al original en Go. El proyecto aún es nuevo; trátelo como una herramienta útil, no como un producto maduro de años.

Engram — un cerebro para varios agentes

Engram (MIT) nació inspirado en claude-mem, pero es agent-agnostic: un binario Go, un SQLite con FTS5 en ~/.engram/engram.db, MCP, HTTP, CLI y TUI. Sin Node, sin Python, sin Docker para ejecutar.

# Claude Code
claude plugin marketplace add Gentleman-Programming/engram
claude plugin install engram

# Codex, OpenCode, Antigravity, Cursor…
engram setup codex
engram setup opencode
engram setup antigravity-cli

engram tui

El contrato con el agente es explícito: oriéntese con mem_context / mem_search antes de repetir trabajo; guarde solo lo que dura (mem_save); cierre la sesión con mem_session_summary. No es un vertedero de transcripts. El README de producción pide el binario de las GitHub Releases; Homebrew cubre la línea estable.

Si Claude Code, Codex y la CLI de Google necesitan recordar la misma decisión, empiece por aquí. El paso a paso de instalación, MCP, nombre de proyecto y systemd está en Engram: memoria persistente para agentes en Linux.

Goldie: un pool, varios agentes

Goldie (MIT) cambia el MEMORY.md por un archivo SQLite compartido. Herramientas en el vocabulario adecuado: remember, recall, update_memory, forget. Memorias tipadas (user, feedback, project, reference…), grafo de conceptos, embeddings locales mediante MiniLM (ONNX Runtime) u Ollama.

# Linux amd64 — pegue o binário da release
curl -LO https://github.com/srfrog/goldie-mcp/releases/latest/download/goldie-mcp-linux-amd64
chmod +x goldie-mcp-linux-amd64
mv goldie-mcp-linux-amd64 ~/.local/bin/goldie-mcp

# MiniLM precisa do ONNX Runtime
sudo apt install libonnxruntime-dev   # Debian/Ubuntu

# ou pule o ONNX e use Ollama
ollama pull nomic-embed-text
claude mcp add -s user -e GOLDIE_DB_PATH=~/.local/share/goldie/index.db goldie goldie-mcp -- -b ollama

El “alcance” es el archivo. Dos agentes en el mismo GOLDIE_DB_PATH comparten la memoria. No escriba desde dos máquinas a la vez si .db está en Syncthing — el README es honesto al respecto.

Rust: del binario único al servidor de memoria

ai-memory: wiki versionada y pase de relevo

ai-memory (MIT, Rust) es la opción más estructurada de esta parte de la lista. En lugar de que cada agente escriba directamente en la base de datos, un servidor es el único escritor: recibe observaciones saneadas por los hooks, mantiene un wiki Markdown versionado en Git como fuente de verdad y usa SQLite como índice derivado (FTS5, entidades y vectores opcionales).

El flujo es capturar → consolidar → recuperar → entregar. Al final de la sesión, las observaciones pueden convertirse en páginas legibles del wiki; en la siguiente, el agente recibe un handoff limitado y puede buscar en el historial. Captura, búsqueda y handoff funcionan sin clave ni llamada a un LLM; configurar un proveedor solo añade consolidación y búsqueda semántica. Es una diferencia importante respecto a Engram y Leteo: ai-memory es un servicio local vía HTTP/MCP, no solo un proceso que abre un SQLite.

La ruta documentada para Linux es Docker o Podman. Quien ya use mise puede descargar el binario de release con checksum, sin instalar Rust:

mise use -g github:akitaonrails/ai-memory

# uma vez: cria o estado local; depois sobe MCP + API + hooks HTTP
ai-memory init
ai-memory serve --transport http --bind 127.0.0.1:49374

# em outro terminal, registre MCP e hooks para o cliente escolhido
ai-memory install-mcp --client claude-code --apply
ai-memory install-hooks --agent claude-code --apply

# para o Codex, troque claude-code por codex nos dois comandos

Claude Code, Codex, OpenCode, Gemini CLI, Grok Build y varios otros clientes tienen integración de primera parte. En una sola máquina, el servidor escucha en el loopback; para un equipo o homelab, puede estar en un host compartido con autenticación y HTTPS. Elija ai-memory cuando la prioridad sea la transición explícita entre Claude, Codex y otros agentes — o cuando quiera inspeccionar y versionar la memoria como Markdown. Para un SQLite directo y una configuración más pequeña, Engram y Leteo siguen siendo más sencillos.

Leteo: el Engram en Rust

Leteo (MIT) es un producto independiente en Rust derivado del flujo y la implementación MIT de Engram. Un binario, SQLite en ~/.leteo/leteo.db, sin API key, sin servidor. Importa la base de datos de Engram con leteo import --from-engram.

curl -fsSL https://raw.githubusercontent.com/asanabrial/leteo/main/scripts/install.sh | sh
leteo tui
leteo setup claude-code --hooks
leteo setup codex

Los archivos de las releases de Linux requieren glibc 2.34 — Debian 12, Ubuntu 22.04, RHEL 9 o más reciente. Plugin de Claude Code: /plugin marketplace add asanabrial/leteo e /plugin install leteo@leteo. No registre plugin e leteo setup --hooks al mismo tiempo: cada evento se dispara dos veces.

Subcog: búsqueda híbrida de verdad

Subcog (MIT, Rust 1.88+) apila tres capas: SQLite como fuente de verdad, FTS5 (BM25) y vectores HNSW mediante usearch. Embeddings con all-MiniLM-L6-v2 mediante fastembed, 384 dimensiones, sin llamar a la API. Fusión RRF. Knowledge graph con entidades y relaciones.

cargo install subcog
# ou: brew install zircote/tap/subcog

subcog capture --namespace decisions "Use PostgreSQL por causa do ACID"
subcog recall "decisão de banco"
subcog serve

Hooks de Claude Code: SessionStart, UserPromptSubmit, PostToolUse, PreCompact, Stop. Es la opción si “recordar” necesita ser búsqueda semántica, no solo grep en SQLite.

mcp-memory: grafo + código en el mismo binario

mcp-memory (Apache-2.0) reúne knowledge graph, FTS5, vector (usearch HNSW) e indexación tree-sitter en Rust, Python, JS/TS, Go, Java, C, C++, Ruby y PHP. Las tools entran por categoría: nada se expone hasta que pases --enable-graph-read / --enable-code / --enable-all.

cargo install mcp-memory
mcp-memory --transport stdio --enable-all

Útil cuando quieres un proceso recordando entidades del proyecto e el mapa de símbolos. No sustituye a codebase-memory-mcp a escala de kernel, pero cabe en un portátil sin daemon extra.

mcp-memory-rs: cuaderno local, sin ML

mcp-memory-rs (Apache-2.0) guarda el estado del agente en JSON por categoría, con índice SQLite FTS5. Cada escritura está versionada. Sin descarga de modelo, sin embedding. La sincronización entre máquinas es un paso explícito (manifest Merkle + HTTP), nunca una dependencia oculta.

El valor por defecto offline es el punto: Claude Code y Codex apuntan al mismo binario y el estado sobrevive al cambio de modelo. Para corpus (documentos fragmentados) el autor señala el companion mcp-vl-msa-rs — este es el cuaderno, no la biblioteca.

memory-server: cuando la memoria es un servicio

memory-server separa las piezas: el agente habla MCP con memory-mcp, que llama memoryd por HTTP, que escribe en PostgreSQL + pgvector y solicita embedding a Ollama (bge-m3 por defecto).

agent  --stdio-->  memory-mcp  --HTTP-->  memoryd
                                           |-- PostgreSQL + pgvector
                                           +-- Ollama

Categorías fijas: context, decision, error_fix, plan, rule. Tiene sentido cuando portátil y servidor necesitan el mismo almacén — y aceptas operar Postgres 17 con pgvector. Para un único usuario en el portátil, es matar moscas a cañonazos.

C: extensión SQLite y grafo del repositorio

sqlite-memory: memoria como SQL

sqlite-memory (MIT) es una extensión en C: Markdown como fuente de verdad, fragmentación consciente del encabezado, búsqueda híbrida (vectorial + FTS5), embeddings locales con llama.cpp. Forma parte de la familia SQLite AI (sqlite-vector, sqlite-sync, sqlite-mcp…).

.load ./vector
.load ./memory
SELECT memory_set_model('local', '/path/to/nomic-embed-text-v1.5.Q8_0.gguf');
SELECT memory_add_directory('/path/to/docs', 'project-docs');
SELECT path, snippet, ranking FROM memory_search
 WHERE query = 'como o agente persiste contexto';

El CLI en Go, sqlmem, envuelve esto en un proyecto (sqlmem init, add, search) y expone las tools vía MCP. Es el camino si quieres construir tu propia capa, no instalar un producto listo. La sincronización entre agentes usa CRDT de sqlite-sync — cada uno trabaja offline y fusiona después.

codebase-memory-mcp: la otra memoria

codebase-memory-mcp (MIT, C puro) no es una alternativa a Claude-Mem. Indexa el repositorio en un knowledge graph: funciones, clases, rutas HTTP, quién llama a quién. Tree-sitter, 15 tools MCP, binario nativo. El preprint está en arXiv 2603.27277.

curl -fsSL https://raw.githubusercontent.com/DeusData/codebase-memory-mcp/main/install.sh | bash
# reinicie o agente e peça: index this project

Preguntas que responde y el grep no: “¿quién llama a esta función?”, “¿cuál es el radio de explosión de este diff?”, “¿dónde se implementa esta interfaz?”. Detalles de uso en el post de skills de IA en la CLI. El caso feliz es los dos en el mismo agente: uno recuerda la conversación, el otro recuerda el código.

C++: aún no hay un clon listo

Entre los proyectos de esta lista, no aparece un equivalente maduro a Claude-Mem cuya implementación principal sea C++. Lo que existe en C++ entra como pieza — llama.cpp para embedding, SQLite, índices vectoriales — no como producto de memoria de sesión. El codebase-memory-mcp analiza C/C++ muy bien; sin embargo, su binario es C.

Por dónde probar en Linux

Orden práctico para Claude Code + Codex + lo que esté en PATH:

  1. ai-memory (Rust) — cuando el punto principal es el handoff automático entre Claude, Codex y otros agentes, con wiki en Markdown versionada y un servidor local.
  2. Engram (Go) — un banco, varios agentes, TUI para inspeccionar lo que se ha grabado.
  3. mnemo (Go) — si lo que quieres es el ciclo de hooks de Claude-Mem, sin cambiar de filosofía.
  4. Leteo (Rust) — el mismo flujo que Engram, binario Rust, importa el .db de él.
  5. Subcog (Rust) — cuando la búsqueda necesita vector + BM25 de verdad.
  6. mcp-memory (Rust) — si quieres grafo + índice de código en el mismo proceso.
  7. Goldie (Go) — pool compartido, vocabulario remember/recall.
  8. sqlite-memory (C) — si la idea es montar tu propia capa encima de SQLite.

Y, en paralelo, no en su lugar: codebase-memory-mcp.

          Claude Code / Codex / OpenCode
                       |
              +--------+--------+
              |                 |
              v                 v
     memória de sessão    memória do código
     Engram / mnemo /     codebase-memory-mcp
     Leteo / Subcog              |
              |                  v
              v            knowledge graph
         SQLite + FTS5         (tree-sitter)
              |
              +--------+--------+
                       v
              contexto persistente

Así, el agente de la mañana siguiente ya sabe que la autenticación es JWT con refresh, e lograr señalar el handler.go sin releer el repo.

Qué no externalizar

La memoria persistente no es una copia de seguridad de la verdad. Git sigue siendo el registro; la historia está en La historia de Git. Lo que va a SQLite es decisión, convención, bug costoso — no contraseña, no token, no dump de journalctl. Los proyectos serios tienen etiqueta <private> o filtro de secretos; si lo que elegiste no lo tiene, no guardes lo que no puede filtrarse.

Y no instales tres servidores de memoria en el mismo agente “para asegurarte”. Compiten por el contexto. Uno de sesión + el grafo del código ya es el techo útil.

Cerrando

Claude-Mem mostró el formato: hook en el ciclo de vida, estado local y MCP en la consulta. Go y Rust ya lo entregan en un único binario; Rust también tiene la ruta de servidor + wiki versionada de ai-memory. C entrega la extensión y el grafo del código. C++ sigue siendo una pieza, no un producto. Elige por la pregunta que duele hoy — “el agente olvidó la decisión”, “necesito pasar el trabajo a otro agente” o “el agente no encuentra la función” — y coloca solo la herramienta que responde esa pregunta.

Repositorios: claude-mem · mnemo · Engram · ai-memory · Goldie · Leteo · Subcog · mcp-memory · mcp-memory-rs · memory-server · sqlite-memory · codebase-memory-mcp. Documentación: docs.claude-mem.ai · engram.gentlemanprogramming.com.

Gopher de Go dibujado por Renée French (CC BY 3.0). Ferris, la mascota no oficial de Rust, por Karen Rustad Tölva.