gitmem
gitmem
Memoria persistente y revisable para tus agentes de IA: en un repositorio git que puedes leer, inspeccionar con git diff y git blame.
Tu agente de programación lo olvida todo entre sesiones. gitmem le proporciona un registro de eventos de solo adición con hechos, decisiones y correcciones, almacenado como JSONL simple en git, con proyecciones deterministas: un brief con presupuesto de tokens para inyectar en el contexto, una vista de los hechos actuales y una cola de conflictos que expone las contradicciones en lugar de sobrescribirlas en silencio.
Sin almacén vectorial. Sin llamadas a LLM. Sin servidor. Un sistema de memoria que puedes recorrer con git log.
Instalación
Instala desde npm:
npm install -g @josephy02/gitmemO, si estás desarrollando o configurando el plugin de Claude Code, clona el repositorio e instálalo localmente:
git clone https://github.com/josephy02/gitmem.git
cd gitmem
npm install # builds automatically
npm link # puts `gitmem` on your PATHVerifica la instalación:
gitmem --helpRelated MCP server: palinode
Inicio rápido en 60 segundos
gitmem init --root ./memory
gitmem --root ./memory append --scope team/core --kind decision \
--body "Mobile still depends on the old auth module; do not refactor." \
--author human:joseph
gitmem --root ./memory append --scope team/core \
--body "The staging DB is reset every Sunday 03:00 UTC." \
--author agent:builder-3
gitmem --root ./memory brief # the context bootstrap, capped at 1,500 tokens
gitmem --root ./memory facts --json # current-value view, NDJSON
gitmem --root ./memory conflicts # contradictions, surfaced never auto-resolved
gitmem --root ./memory commit # git commit of the log, on your cadenceO explora la demo incluida: 45 eventos realistas con correcciones, una retractación, una promoción y un conflicto en vivo:
gitmem --root /tmp/demo init
gitmem --root /tmp/demo append --json --force - < demo/events.ndjson
gitmem --root /tmp/demo briefCómo funciona
flowchart LR
subgraph writers[" "]
CLI[CLI / library]
MCP[MCP client<br/>Claude Code etc.]
end
CLI -->|append| LOG
MCP -->|memory_append| LOG
LOG[("log/YYYY/MM/DD.jsonl<br/>append-only, in git")]
LOG -->|pure function| PROJ[projections]
PROJ --> BRIEF["brief.md<br/>≤1500 tokens"]
PROJ --> FACTS["facts.json<br/>live/superseded/contested"]
PROJ --> CONF["conflicts.json<br/>never auto-resolved"]
LOG -.->|every read| CHOKE{{"readEvents()<br/>capability choke point"}}
CHOKE --> BRIEF & FACTS & CONF
GIT[git history] -->|"gitmem stale"| FACTSEl registro es la única fuente de verdad. Un evento por línea en
log/YYYY/MM/DD.jsonl. Nada se modifica ni se elimina: las correcciones y las retractaciones son eventos nuevos que sustituyen a los antiguos, de modo que la trazabilidad siempre se puede reconstruir (gitmem trace <id>).Las proyecciones son funciones puras del registro.
facts.json(valores actuales con estado live/superseded/retracted/expired/contested),brief.md(el núcleo siempre inyectado, con un límite estricto de 1.500 tokens y las decisiones primero),conflicts.json,stats.json.gitmem rebuildes byte a byte idéntico a una compilación incremental; eso es una prueba.Los conflictos se exponen, nunca se auto-resuelven. Las heurísticas deterministas (correcciones divergentes, parejas de negaciones, divergencias sobre el mismo sujeto) marcan las contradicciones; ambas partes se devuelven juntas como
contested. La resolución es un acto humano: escribe una corrección que se imponga a las perdedoras.El ámbito se controla en un único punto de control. Cada ruta de lectura (búsqueda, consulta directa, brief, trace) pasa por una única función con comprobación de capacidades. Segment-aware:
team/coreotorgateam/core/auth, pero nuncateam/core-secrets. Las promociones cambian el alcance efectivo de un hecho y el control de acceso sigue el alcance efectivo; estrechar el alcance lo reduce de verdad.Nativo de Git de verdad.
gitmem initinstala un controlador de mezcla en modo unión: dos ramas que añaden al mismo archivo diario se fusionan automáticamente —unión de líneas, ordenadas por ULID, siempre correcta porque los eventos son inmutables—.gitmem verifydetecta ids duplicados procedentes de mezclas incorrectas.
Formato de evento
El formato es el producto. Un objeto JSON por línea, esquema en schema/memevent.schema.json: cualquier lenguaje puede escribir eventos sin esta biblioteca:
{"id":"01K2X9...","ts":"2026-08-15T14:03:11.000Z","scope":"team/core","author":{"kind":"human","id":"joseph"},"kind":"decision","body":"Mobile still depends on the old auth module; do not refactor.","derived_from":[],"supersedes":[],"confidence":1}Cinco tipos de eventos: observation, decision, correction, retraction, promotion (los cambios de alcance también son eventos: compartir tiene procedencia).
Biblioteca
import { GitMem } from "@josephy02/gitmem";
const log = GitMem.open("./memory");
const cap = { principal: "agent:builder-3", scopes: ["team/core"], mode: "read" as const };
log.append({ scope: "team/core", kind: "observation", body: "...", author: { kind: "agent", id: "builder-3" } });
log.brief(cap); // markdown string, reprojects lazily if the log advanced
log.facts(cap, { status: "live" });
log.conflicts(cap);
log.trace(cap, id); // full derivation ancestryCompromisos de diseño
Sin LLM en la ruta de escritura. Los escritos son baratos, sin pérdidas y síncronos.
Sin deduplicación en el momento de escribir. Las contradicciones se parecen a cuasi duplicados; un filtro en la escritura rechazaría justo los eventos que el detector de conflictos necesita ver. Todo se admite; la resolución ocurre en el momento de la proyección.
brief.override.md— un archivo de autoría humana que siempre gana la parte superior del brief.Almacenamiento ante los humanos.
git diffa un cambio de memoria.git blamea un hecho. Revisa la memoria de un agente en un PR.
Plugin de Claude Code
La forma más rápida de dar memoria persistente a Claude Code. Este repositorio es un marketplace de plugins:
/plugin marketplace add josephy02/gitmem
/plugin install gitmem@gitmem(Requiere el CLI de gitmem: npm install -g @josephy02/gitmem.)
Lo que obtienes:
Memory brief al inicio de sesión — un hook de
SessionStartinyectagitmem briefen el contexto, de modo que cada sesión empieza conociendo las decisiones y los hechos de tu proyecto. ¿No hay raíz de gitmem en el proyecto? El hook no hace nada, sin avisar.Herramientas de memoria en MCP — Claude puede añadir observaciones, decisiones y correcciones mientras trabaja. La raíz se detecta automáticamente (
$GITMEM_ROOT,./.gitmem,./memory,./.memory) y se inicializa automáticamente el primer uso./remember <fact>— guarda un hecho o decisión duradera, con semántica de corrección cuando contradice una memoria existente./remembersin argumentos aprovecha la conversación actual./memory-review— recorre la cola de conflictos y las anclas obsoletas, y resuélvelas a través del registro.
Servidor MCP
Dale a cualquier cliente MCP (Claude Code, Claude Desktop, cualquier cosa que hable MCP) memoria persistente en una sola línea:
{
"mcpServers": {
"gitmem": { "command": "gitmem", "args": ["--root", "/path/to/memory", "serve"] }
}
}Expone cinco herramientas mediante stdio: memory_append, memory_brief, memory_facts, memory_conflicts, memory_trace. Las adiciones se atribuyen a agent:mcp por defecto (--author para cambiarlas); las lecturas pasan por el mismo punto de control de capacidades que todo lo demás.
Obsolescencia anclada a Git
Un hecho puede anclarse al código mediante meta.source_uri (por ejemplo, "src/auth.ts#validate_token"). Como el registro vive en git junto al código, la detección de obsolescencia es solo un git log:
gitmem stale # lists live facts whose anchored file changed since the fact was written[stale?] validateToken always returns true in dev mode
anchor: src/auth.ts#validateToken
changed by:
e1faa27 flip validateToken defaultSin embeddings, sin LLM y sin índice que mantener: la misma propiedad que hace revisable la memoria hace que se invalide a sí misma.
API
npm install
npm run build
npm test # 16 tests incl. property-based scope isolation and a real git-branch mergeRendimiento: la proyección completa de un registro de 10.000 eventos se ejecuta en ~50ms.
Licencia
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceOpen, Git-native memory protocol for MCP agents: stores memories as Markdown files in a Git repo, enabling portability, auditability, and human-editable memory across different AI agents.8715MIT
- AlicenseAqualityAmaintenanceAudit-grade, git-versioned memory for AI coding agents that enables saving, searching, editing, and rolling back facts through markdown files served via MCP.3028MIT
- AlicenseBqualityAmaintenanceA local MCP server that provides agents with tools to list, read, search, inspect history and diffs, and capture unstructured text in a user-owned Git repository of durable memory.5MIT
- AlicenseNot gradedqualityBmaintenanceMCP server providing persistent, local-first memory for AI agents via Markdown files in a git repo, with search, branching, and auditability.2MIT
Related MCP Connectors
Shared, governed long-term memory for AI agents across tools and sessions via MCP and REST.
Shared long-term memory vault for AI agents with 20 MCP tools.
Your memory, everywhere AI goes. Build knowledge once, access it via MCP anywhere.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/josephy02/gitmem'
If you have feedback or need assistance with the MCP directory API, please join our Discord server