Conocimiento en Markdown versionado en git. Búsqueda híbrida BM25 + semántica. 100% local y offline. Nativo para agentes vía MCP.
Cero lock-in. Te quedan los .md · el índice se reconstruye solo · $0 por query.
Cada sesión, tu agente vuelve a tropezar con el mismo gotcha, re-decide lo ya decidido y re-lee lo ya leído. Pinky le da una memoria durable y auditable — sin mandar tu código a ningún lado.
Los .md con frontmatter que escribe el agente (o vos). Legibles, versionados en git, revisables con git diff. Es tuyo y se queda con vos.
↓ pinky reindex
Un índice SQLite (FTS5 + sqlite-vec) derivado del Markdown. Si se corrompe o cambia el modelo, se reconstruye solo. Nada crítico vive sólo acá.
↑ 100% regenerable
Local y offline, híbrido, markdown-as-truth y nativo-para-agentes. Los demás tienen una o dos.
Embeddings ONNX locales, o un embedder determinista sin red. SQLite in-process, cero daemon. Ideal para código sensible o regulado que no puede salir de la máquina.
--hash-embed → sin red, jamásBM25 encuentra lo exacto (pg_pool_timeout); el vector encuentra lo parecido ("el pool se cuelga"). Se fusionan con Reciprocal Rank Fusion.
calidad medible: hit@k + MRREl índice es cache; los .md son la verdad. Cero lock-in: te quedan archivos legibles. Auditás lo que aprendió tu agente con un git diff.
reindex reconstruye todoServidor MCP estándar: brain_search, brain_save, brain_stats. Más hooks de Claude Code. No es una app — es infraestructura.
cualquier cliente MCP · el CLI anda soloDedup semántico, decay por antigüedad, backlinks código↔conocimiento, telemetría de poda y validador evergreen. Combate la entropía; no es un vertedero.
pinky dedup · stale · telemetrySin Docker obligatorio, sin servicios, sin base de datos que administrar. Un archivo brain.db desechable y tres binarios chicos en Rust.
curl | sh → andando en <2 minEl agente busca antes de actuar, guarda lo que descubre y deja diary al terminar. El conocimiento crece solo mientras trabajás.
El agente (guiado por una regla), el hook stop o vos. Frontmatter YAML + cuerpo Markdown.
Parse → chunk → embed → SQLite. Incremental: sólo re-embebe lo que cambió.
Híbrido BM25 + vector, fusión RRF, rerank léxico opcional, filtros por proyecto/tipo/tag.
Dedup, staleness, rollups de diary, telemetría de poda, eval de calidad.
La memoria del agente. Se registra en Claude Code (o cualquier cliente MCP) con pinky init.
Inyectan contexto antes de leer/escribir y escriben diary al terminar. Con presupuesto de tiempo: nunca bloquean.
| Pinky | Memoria de plataforma | Vector-DB SaaS | grep + notas | |
|---|---|---|---|---|
| Local / offline | Sí | No | No | Sí |
| Híbrido BM25 + vector | Sí | No | parcial | No |
| Markdown portable (sin lock-in) | Sí | No | No | Sí |
| Nativo para agentes (MCP) | Sí | parcial | No | No |
| Cero-ops (un binario) | Sí | Sí | No | Sí |
| Costo por query | $0 | incluido | 💲 | $0 |
Pinky es el único que combina local + offline, híbrido, markdown-as-truth y nativo-para-agentes al mismo tiempo.
Tokens de contexto que entran por cada consulta de conocimiento, mismo escenario, medido sobre un corpus real de 16 docs (~59 KB).
Medido con el binario pinky: payload de brain_search --json vs. grep + leer los archivos vs. releer el código (tokens ≈ chars/4). Es el payload de recuperación; en corpus más grandes la brecha se agranda.
Los gotchas se inyectan antes de escribir código. Menos errores re-cometidos — no sólo menos tokens.
El conocimiento persiste y se acumula; un dev o agente nuevo arranca sabiendo lo que el equipo ya aprendió.
100% local y offline: habilita proyectos sensibles o regulados que con un SaaS no podrías tocar. $0 por query.
Markdown versionado en git: lo revisás con un git diff en un PR. Cero lock-in — te quedan los archivos.
Dedup, decay por antigüedad y telemetría de poda; el eval en CI corta el build si la relevancia baja.
Un binario, sin daemon; pinky init en un comando; los hooks tienen presupuesto de tiempo y jamás bloquean tu agente.
Airgapped u on-prem: los embeddings corren locales y nada sale de la máquina. La memoria del agente cumple sin exfiltrar código.
El agente hereda gotchas, decisiones y patrones acumulados. Onboarding instantáneo: un dev (o un agente) nuevo arranca sabiendo lo que el equipo ya aprendió.
El hook stop deja una entrada de diary por sesión; los rollups arman el resumen semanal/mensual sin LLM.
El modelo multilingual-e5-small cubre ES e IT: buscás en un idioma y encontrás lo escrito en otro.
Linux x86_64 y macOS Apple Silicon con binario prebuilt. Otras plataformas: compilá desde fuente.
# 1 · preparar el proyecto: crea documentation/ y registra el MCP pinky init # 2 · indexar el conocimiento (búsqueda híbrida, modelo multilingüe) pinky reindex documentation # 3 · buscar — o dejá que el agente use la tool brain_search pinky search "timeout al cerrar el pool de postgres" # 4 · reabrí el proyecto en Claude Code → el MCP 'pinky' queda disponible
Para retrieval, el híbrido BM25 + vector compensa el gap: los términos exactos los clava BM25 y lo semántico el vector. Y la calidad es medible — el harness de eval reporta hit@k y MRR, y el CI falla el build ante una regresión de relevancia.
El índice es desechable: pinky reindex lo reconstruye entero desde los .md. Además hay guardas de versión de schema y de modelo de embeddings: si algo no cuadra, avisa y se regenera — no corrompe en silencio.
El núcleo es agnóstico y MCP es un estándar abierto: sirve para cualquier cliente MCP, y el CLI funciona solo. Los hooks, eso sí, hoy son específicos de Claude Code.
El modelo ONNX (~100 MB) se baja una sola vez y después todo corre offline. Si querés cero-red desde el minuto uno, usá --hash-embed: un embedder determinista que nunca toca la red (algo menos preciso, ideal para airgapped/CI).
Decenas de miles de entradas son poco para SQLite, y la búsqueda vectorial sobre eso es <10 ms. El cuello de botella no es el volumen: es la organización y el retrieval, que es justo lo que Pinky resuelve.
curl | sh instala los binarios; pinky init deja el proyecto listo con el MCP registrado con rutas relativas (relocatable). Sin rutas absolutas horneadas, sin tocar código.