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 con 7 tools (brain_search, brain_save, brain_update…). 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.
No sólo guarda y busca: entiende el tiempo, aprende qué sirve y protege su propia calidad.
Marcás qué reemplaza a qué (supersedes) y preguntás "¿qué sabíamos en tal fecha?" con search --as-of. Lo viejo deja de confundir, pero queda auditable.
El hook stop correlaciona qué entradas el agente realmente releyó y las marca útiles. pinky stats --value te muestra qué te está dando el brain.
Entiende los [[wikilinks]] de tus notas: search --links promueve lo enlazado a los mejores resultados. El valor de un grafo sin arrastrar una graph DB.
pinky sync versiona el conocimiento en git y resuelve solo los conflictos de diaries y frontmatter. Tu equipo comparte la misma memoria.
No sólo brain_search y brain_save: también brain_update, brain_delete, brain_feedback y brain_similar. El agente cura su propia memoria.
El harness de eval reporta hit@k, MRR y nDCG sobre un golden set; el CI corta el build si la relevancia baja. No se degrada en silencio.
| 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.
Un binario en Rust, sin runtime ni daemon. Todo lo de abajo está medido y es reproducible con pinky bench y pinky eval en tu máquina.
| Entradas | Indexado | Tamaño DB | Búsqueda p50 | Búsqueda p95 |
|---|---|---|---|---|
| 1.000 | 0,4 s | 10 MB | 8,1 ms | 8,7 ms |
| 10.000 | 4,8 s | 104 MB | 49,4 ms | 52,7 ms |
| 100.000 | 56,6 s | 1,03 GB | 470,9 ms | 494,6 ms |
El caso real de un brain personal o de equipo (1k–10k entradas) va sobrado: p95 < 55 ms de punta a punta. A 100k la KNN de fuerza bruta ronda el ½ s — usable, con cuantización binaria en el roadmap (justificada ≥ 50k). Latencia y calidad medidas con el embedder determinista (motor puro); el modelo semántico ONNX es opcional —se baja una vez— o corré con --hash-embed sin modelo. MacBook Apple Silicon, build release.
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.
Firmado, reproducible, auditable y probado sin red. Lo que un equipo regulado revisa antes de adoptar una herramienta.
Feature opt-in con SQLCipher (AES-256, page-level): el brain.db queda cifrado. La clave viaja por entorno; abrir con la equivocada falla claro, no corrompe.
Un agente con permisos de escritura puede destruir meses de conocimiento. snapshot hace tar.gz + manifest SHA-256; restore verifica cada checksum antes de escribir un byte.
Binarios firmados con minisign + checksum SHA-256 obligatorio. Builds reproducibles bit a bit (toolchain pinneado) y un SBOM CycloneDX por release.
minisign · SBOM · reproduciblepinky doctor --airgap falla si algo necesitaría red. Y un job de CI corre indexar + buscar dentro de un namespace de red aislado: el claim se prueba en cada push.
Los .md son la interfaz estable; el índice, desechable. Un binario viejo sobre un índice más nuevo falla claro en vez de operar en silencio.
cargo-deny en CI (advisories RUSTSEC + licencias + fuentes), GitHub Actions pinneadas por hash de commit, y publish = false para que nada se filtre a crates.io.
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
¿Ya lo tenés? Actualizá con pinky update (descarga verificada del CDN).
Todas las opciones de instalación (descarga manual, Docker, compilar desde fuente) →
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 (~450 MB, opcional) se baja una sola vez y después todo corre offline. Si querés cero-red y cero-modelo desde el minuto uno, usá --hash-embed: un embedder determinista que nunca toca la red y corre en ~13 MB de RAM (algo menos preciso, ideal para airgapped/CI).
Medido y reproducible (pinky bench): a 10.000 entradas la búsqueda híbrida completa ronda ~50 ms (p95); a 1.000, ~9 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.