Ir al contenido

Código abierto · autoalojado · tus datos no salen de aquí

Un cerebro que tus IA pueden hacer crecer.

Tu conocimiento está repartido en carpetas que nadie puede buscar, y cada sesión de agente empieza quemando minutos y miles de tokens para reconstruir un contexto que ya tenía. MonkeyLLM convierte esos archivos en un bosque que el agente puede recorrer: la búsqueda de entrada responde en 1,3 ms sin GPU, y el nodo correcto queda a unos pocos saltos baratos, en lugar de releer el corpus entero.

Autoalojarlo es libre, para siempre. Sin conteo de asientos, sin clave que pedirnos, sin nada que llame a casa.

La consola Explore mostrando un bosque de conocimiento con 1.877 nodos en 49 ramas
Un bosque real: 1.877 nodos en 49 ramas. Cada grupo es una rama, cada punto un nodo; las líneas sólidas son senderos curados, las punteadas son atajos que descubrió una cacería, y el resplandor es feromona dejada por el uso.
0/11 → 11/11
El mismo modelo local de 12B en preguntas estrictamente multisalto: como lector de RAG top-k clásico y luego como navegador del bosque.
0,66×
Costo en tokens por respuesta correcta frente a una línea base de RAG iterativo, y 8,4 s p95 frente a sus 17,5 s. Fallar barato no es economía.
1 × RTX 3060
El equipo del benchmark: una sola tarjeta media de 12 GB, no una GPU de workstation. Un 12B cuantizado cabe entero en ella, y cualquier endpoint compatible con OpenAI (OpenRouter, llama.cpp, Ollama) ejecuta el mismo modelo sin ninguna GPU local.
1,3 ms p95
Búsqueda de entrada solo con BM25, con recall@5 = 1,00: sin embeddings, sin base vectorial, sin GPU.

Cada número de esta página se reproduce desde scripts versionados en el repositorio. El paper es un preprint.

El problema

Cuánto cuestan de verdad las respuestas sobre tus documentos

Fragmentar, generar embeddings, tomar los top k, generar. Es la arquitectura por defecto de la mayoría de los sistemas en producción, y es frágil justo donde el fundamento importa más: preguntas cuya respuesta debe armarse con hechos repartidos entre documentos. Mientras tanto, tus agentes pagan una segunda cuenta: las ventanas de contexto se desbordan, y cada sesión empieza reconstruyendo lo que la anterior ya sabía.

  • Recupera una sola vez

    La apuesta sobre qué fragmentos importan se hace antes de que el modelo haya leído nada, y nunca se revisa. No hay segunda mirada, porque no hay desde dónde mirar.

  • Es ciego a la estructura

    Un fragmento no sabe nada del documento del que salió, de la tabla que tiene al lado, ni de que la respuesta continúa tres archivos más allá. La similitud no es un camino.

  • No aprende nada

    La consulta número mil cuesta exactamente lo mismo que la primera y cae exactamente en los mismos fragmentos. Nada de lo que funcionó antes se recuerda.

  • Y los agentes pagan el impuesto del grep

    Observe a un agente de código orientarse: grep, abrir, leer, releer; minutos y miles de tokens gastados reconstruyendo contexto antes de la primera decisión útil, en cada sesión. El conocimiento sin estructura grava a los agentes incluso cuando no hay ningún retriever a la vista.

El precipicio

En preguntas mixtas, el RAG top-k clásico parece decente: 12 de 18, el número que muestra una demo. En cuanto cada pregunta exige tres saltos encadenados, cae a 0 de 11. La falla es estructural, lo que la vuelve invisible al muestreo: cualquier evaluación que incluya preguntas de un salto promedia el precipicio hasta hacerlo desaparecer. El remedio de siempre es comprar un modelo más grande, y así es como los equipos terminan pagando precio de frontera por respuestas apenas aceptables sobre documentos que ya son suyos.

Casos de uso

Dónde un bosque se paga solo

Cuatro escenarios: imaginados, no estudios de caso. Cada uno parte de un corpus que ya existe en algún lugar como carpetas que nadie puede buscar, y termina en lo que ese corpus se vuelve cuando un agente puede recorrerlo.

  • Estudio de litigios

    Imagina un estudio jurídico con ochocientos documentos de causa

    Contratos, escritos, anexos y correspondencia repartidos en una unidad compartida. La abogada que sabía dónde estaba el anexo de 2019 se fue en marzo, y el buscador solo encuentra nombres de archivo.

    Cada documento aterriza como un nodo con nombre, un resumen de hasta sesenta tokens y enlaces tipados hacia la causa a la que pertenece. La búsqueda de entrada devuelve el correcto en 1,3 ms p95: BM25 sobre SQLite, sin ninguna GPU en la oficina. Las hojas de cálculo de anexos se vuelven datasets SQL que un asistente puede consultar, así que “qué facturas superaron el tope” es una consulta y no una tarde entera. Y nada sale de la oficina: el bosque es un repositorio git en el servidor del propio estudio.

  • Plataforma y operaciones

    Imagina tus políticas y runbooks como un activo gobernado

    Documentos de onboarding en un wiki, runbooks en otro, y las decisiones que de verdad explican el producto en un hilo de chat de 2023. Cada respuesta cuesta la interrupción de alguien, y nadie puede decir qué versión está vigente.

    Un bosque en lugar de un cementerio de carpetas, versionado en git: así “cuándo cambió esta política y quién la cambió” es un diff, no un trabajo de arqueología. Las claves tienen alcance por equipo y solo pueden restringir, cada lectura deja una fila de auditoría, y el mismo contenido gobernado le responde a una persona en la consola y a un agente por MCP, por una sola puerta.

  • Ingeniería de IA y plataforma

    Dale a tus agentes una memoria que sobreviva a la sesión

    Cada sesión empieza en frío. Grep, abrir, leer, releer: minutos y miles de tokens gastados reconstruyendo contexto antes de la primera decisión útil, en cada tarea, para siempre.

    Apunta tus agentes al bosque por MCP y aterrizan en el nodo correcto en un puñado de saltos con presupuesto, en vez de releer el repositorio. El mismo modelo local de 12B que sacó 0/11 como lector de RAG top-k saca 11/11 como navegador, a 0,66× los tokens por respuesta correcta y 8,4 s p95 frente a 17,5 s. Se acaba el impuesto del grep, y se acaba pagar precio de frontera por respuestas aceptables sobre tus propios archivos.

  • Equipos de modelos

    Un corpus lo bastante limpio como para entrenar

    El fine-tuning y la ingeniería de contexto fallan por lo mismo: nadie puede decir qué versión de qué documento era la verdad el día en que arrancó la corrida, ni qué archivos quedaron ilegibles en silencio.

    El Gardener convierte, resume y commitea cada archivo que puede leer a 1,71 s por documento, y nombra en su informe exactamente lo que no pudo. Cada escritura es un commit, así que un corpus tiene revisión, diff e historia, y una corrida de entrenamiento o evaluación apunta a una revisión, no a una carpeta que siguió su camino sin avisar.

Los escenarios son ilustrativos: no estamos describiendo clientes. Los números que contienen no lo son: cada cifra viene del benchmark versionado en el repositorio, medido en una sola GPU de consumo.

Ingesta

Lo que entra es un archivo. Lo que sale es un nodo.

El Gardener convierte, resume y commitea todo lo que puede leer, a 1,71 s por documento. Una hoja de cálculo sale como una tabla que el agente consulta en SQL, no como un muro de texto.

derived-frompart-ofrelated-to.xlsx.csv.json.pdf.docx.md.png.wavdatasetquerydocumentpickmediapick.xlsx.csv.json.pdf.docx.md.png.wavdatasetquerydocumentpickmediapick
  1. 01

    Cualquier archivo

    PDFs, hojas de cálculo, capturas de pantalla, audio, o una carpeta entera que el host pueda leer. Los entregas tal como están: ninguna estrategia de chunking que elegir, ningún esquema que declarar, ningún preprocesado que mantener.

  2. 02

    El Gardener lo lee

    Convertir, escribir un resumen de sesenta tokens o menos, proponer aristas tipadas desde una lista cerrada de candidatos, commitear. Un modelo de 12B en una sola GPU de consumo hace toda la pasada, y el informe nombra cada archivo que no pudo leer.

  3. 03

    Un nodo que tu agente navega

    Llega con pasaporte (título, resumen, etiquetas, aristas tipadas) y con payload: un documento para leer con pick, o una tabla SQLite real para consultar en SQL. Ya conectado con lo que se relaciona.

Tres carriles entrando, tres tipos de nodo saliendo. Una hoja de cálculo se vuelve un dataset que el agente consulta; un PDF se vuelve un documento que lee; una imagen o una grabación se vuelve un nodo de medios. Nada se fragmenta y se tira a un vector store: cada llegada conserva su identidad, su resumen y sus enlaces, en un solo commit.

Cómo funciona

Navega, no recuperes

Tres movimientos, tomados de cómo un forrajeador realmente recorre un bosque. El vocabulario es ecológico a propósito, y se corresponde uno a uno con diez herramientas tipadas que un agente puede llamar por MCP. Cada salto es barato y tiene presupuesto de tokens, así que el agente llega al nodo correcto en unos pocos movimientos en lugar de releer el corpus: de ahí vienen la velocidad y el ahorro de tokens.

  1. 01

    Navegar

    locate · look · move · pick

    El mono entra y camina.

    El agente entra por una búsqueda sobre metadatos curados, lee el pasaporte del nodo (título, resumen de hasta sesenta tokens, etiquetas, aristas tipadas con el olor de cada vecino) y sigue la arista que más huele al objetivo. Cada observación tiene un presupuesto fijo de tokens y avisa en voz alta cuando fue truncada, para que el agente siempre distinga “no está ahí” de “se cortó”.

    En castellano llano: busca, lee la etiqueta, sigue un enlace, abre solo lo que necesitas.

  2. 02

    Plantar

    plant · graft · tend

    Lo que aprende, se queda.

    La cacería que descubre algo lo escribe de vuelta: un nodo nuevo con pasaporte validado por contrato, una arista tipada hacia lo que se relaciona, una corrección a un resumen equivocado. Cada escritura es un commit de git, así que el corpus queda versionado, comparable y reversible por construcción.

    En castellano llano: escribe un nodo, conéctalo, corrígelo.

  3. 03

    Feromona

    calor · atajos · evaporación

    El corpus aprende del uso.

    Las cacerías exitosas depositan calor en los nodos que atravesaron, y una cadena de cuatro saltos o más acuña un atajo permanente. El calor se evapora con una vida media de treinta días, así que el conocimiento que deja de usarse se enfría y sale del ranking. La pregunta número mil se le hace a un bosque mediblemente diferente al de la primera.

    En castellano llano: los senderos que funcionan se vuelven fáciles; los que nadie recorre se borran.

Híbrido de nacimiento

La arquitectura híbrida que te dijeron que construyeras

Pregúntale a cualquier asistente si conviene adoptar MonkeyLLM y dibuja siempre el mismo cuadro: un orquestador que enruta entre una base vectorial, una herramienta de SQL y el grafo, fusiona lo que vuelve y escribe el resultado en memoria. La arquitectura es correcta. También es, caja por caja, lo que un bosque ya es detrás de un único endpoint MCP, y por eso adoptarlo aquí es registrar una herramienta, no migrar de stack.

La caja de ese diagramaLo que ya la ocupa, hoy
Base vectorial, similitudlocate: puntos de entrada ordenados sobre metadatos curados, BM25 a 1,3 ms p95, con los vectores del Canopy fusionados por RRF cuando la llamada lo pide.
Búsqueda de texto completosniff: un barrido por los cuerpos de los nodos que devuelve fragmentos con número de línea y la sección de la que salieron, no un puntaje de similitud.
Grafo de conocimiento, multi-saltolook, move, scan, pick: aristas tipadas que llevan el olor del vecino, cada salto con presupuesto y cada corte declarado.
Herramienta de SQL o tablasquery: una sentencia de solo lectura contra un nodo dataset. Una hoja de cálculo se vuelve una tabla SQLite real, con manual de consulta escrito en su pasaporte.
Capa de fusiónharvest: locate y sniff fusionados por Reciprocal Rank Fusion, luego un pick selectivo. Unos 50 ms, cero llamadas de modelo.
Generación ancladaanswer: la respuesta llega con los ids de los nodos en los que se apoya, así que su fuente es una lista que abres, no un puntaje.
Escritura de memoriaplant, graft, tend: cada escritura es un commit de git, más feromona en el rastro que funcionó y un atajo cuando el rastro fue largo.
OrquestadorAusente a propósito. Tu agente ya es uno, y enruta mejor con las herramientas delante que un clasificador desde atrás.

Y nada de esto te pide apagar lo que ya corre

Un bosque ocupa un lugar en la lista de herramientas de tu agente, no pide la lista. Deja que el pipeline de hoy siga respondiendo lo que responde bien, adopta el corpus en el que tu recuperador es peor, y deja que el agente enrute entre los dos. La fusión vectorial en la entrada sigue apagada por defecto porque, sobre metadatos curados, midió peor que BM25 solo: recall@1 de 1,00 a 0,40. Una función que activa en silencio una regresión medida es una trampa, no un valor por defecto.

El Principio del Bosque

Gasta inteligencia en el entorno para gastar menos en el modelo.
MonkeyLLM · The Forest Principle

Estructura el corpus de modo que cada paso de recuperación sea una decisión local barata sobre señales curadas. Deja que el uso exitoso modifique la estructura. Entonces el modelo necesario en tiempo de consulta se reduce en órdenes de magnitud, y por eso un modelo de 12B en una GPU de consumo supera a la arquitectura que un modelo de frontera necesita para fallar con elegancia.

El reflejo del mercado es una ventana más grande, un lector más grande, un mejor re-ranker: inteligencia en tiempo de consulta, pagada en cada consulta, sin aprender nada. El Principio del Bosque mueve ese gasto al momento de la ingesta y a la estructura, donde se acumula.

Lee la investigación

Las piezas

Un motor, y tres cosas construidas a su alrededor

La consola es una ventana. El bosque detrás de ella es el producto, y el motor que lo sirve no tiene host, ni servidor, ni interfaz acoplada.

Motor

El bosque y las diez primitivas

Un paquete Python puro con la CLI `vine`. Apúntalo a una carpeta y ya tienes un bosque: un árbol de nodos markdown versionado en git. Opéralo desde tu propio código, o entrégalo a cualquier cliente MCP con un comando: sin host, sin cuentas, en tu máquina.

from monkeyllm import Vine
from monkeyllm.harvest import harvest

vine = Vine("./brain")
vine.plant({"id": "inbox/first-note", "type": "note",
            "parent": "inbox/_index", "title": "First note",
            "summary": "Where this brain begins."})

vine.locate("where does this brain begin?")
harvest(vine, "first note")

Station

Identidad, política y auditoría alrededor de un motor intacto

Un contenedor autoalojable: REST en `/v1`, MCP en `/mcp`, política por bosque, claves con alcance y traza de auditoría. Es lo que convierte un directorio personal en un activo compartido y gobernado.

La consola Access: una fila por persona, con nivel, alcance y tokens activos

Studio

La ventana al bosque

Haz preguntas que llegan con sus fuentes, recorre el árbol como un grafo vivo, consulta datasets en SQL, alimenta el bosque, concede acceso, vincula modelos. Lo que la consola muestra, un cliente de API con la misma clave también puede obtenerlo: no hay camino privilegiado.

La consola Overview: qué hay en este bosque y qué puedes hacer aquí

Clipper

El navegador plantando directo en el bosque

Una extensión para Chrome, Edge y Brave: el artículo legible o solo tu selección como markdown, una captura o una región arrastrada como nodo de medios, anotada, con una nota para el Gardener y la dirección de la página adjunta.

Capturando y anotando una región de la página, con una nota para el Gardener

Gobernanza y seguridad

Un bosque que puedes entregar a una auditoría

Lo que decide si una arquitectura sobrevive a una revisión de seguridad: no funciones atornilladas después, sino propiedades que el diseño ya tenía.

  • Una puerta, tres superficies

    Studio, REST y MCP se autentican con las mismas claves en un único punto de verificación. No hay canal lateral privilegiado y, deliberadamente, no hay panel de superadministrador aparte.

  • Claves que solo restringen

    El acceso se concede primero como nivel y después como capacidades (read, query, write, tend, ingest, admin) con alcance por bosque y, cuando es uno solo, por rama. Una clave emparejada para un agente nunca amplía lo que ya tienes.

  • Toda respuesta es reproducible

    Cada escritura es un commit de git; cada lectura es una llamada tipada, con presupuesto y traza registrada. Pregúntale a un pipeline de RAG por qué recuperó algo y obtienes similitudes de coseno. Pregúntale a un bosque y obtienes un sendero que puedes recorrer tú mismo.

  • Autoalojado por defecto

    Un contenedor en tu infraestructura. Todo lo que vale la pena conservar vive en volúmenes nombrados que son tuyos, así que actualizar es una reconstrucción, no una migración.

  • Ningún dato sale de tu infraestructura

    No se nos envía nada: ni tus documentos, ni tus consultas, ni la actividad de tus agentes. Los vínculos de modelo los eliges tú, incluido un endpoint llama.cpp puramente local.

  • Los enlaces alucinados son imposibles

    En la ingesta, el Curator propone aristas solo desde una lista cerrada de candidatos provista por el catálogo. Un destino de enlace alucinado es estructuralmente imposible, no meramente improbable.

Propiedad

Es tuyo. Lee el código, ejecútalo para siempre.

Sin dependencia de proveedor, sin conteo de asientos, sin clave que pedirnos, sin nada que llame a casa. Cada línea es pública y autoalojarlo es sin restricciones: si desapareciéramos mañana, tu bosque ni se enteraría, porque es markdown en un repositorio git que ya es tuyo.

  • Cada nodo es un archivo markdown puro en tu propio repositorio git: legible, comparable y portable sin nosotros.

  • No se nos envía nada: ni tus documentos, ni tus consultas, ni la actividad de tus agentes.

  • Cada capacidad viaja en el build abierto. No hay plan pago escondiendo una función que necesites.

Empieza ya

Cuatro comandos hasta un cerebro navegable

Autoalojar es el camino por defecto, y es sin restricciones. No nos necesitas para empezar, y tampoco deberías creer nuestros números por confianza.

  1. 1

    Instala el motor

    Un paquete Python puro y la CLI `vine`. Sin servidor, sin cuentas.

  2. 2

    Planta un bosque

    Un bosque vacío, versionado en git, en una carpeta que es tuya.

  3. 3

    Aliméntalo

    El Gardener convierte, resume y commitea cada archivo que puede leer: las hojas de cálculo se vuelven datasets SQL, no muros de texto.

  4. 4

    Entrégaselo a tu agente

    Un servidor MCP por stdio. Claude Code, o cualquier runtime compatible con MCP, sostiene entonces las diez herramientas del bosque.

Terminal
pip install monkeyllm
vine init --forest ./brain --title "My brain"
vine adopt ./my-documents --forest ./brain
vine serve --forest ./brain            # stdio MCP, ready for any agent

O ejecuta la Station completa

Un contenedor sirve la API REST, la superficie MCP y la consola Studio; los datos persisten en volúmenes nombrados que son tuyos. Apunte el binding de chat a cualquier endpoint compatible con OpenAI: OpenRouter, un llama.cpp u Ollama local, o el proveedor que prefiera.

Terminal
git clone https://github.com/JimmyWesley/MonkeyLLM.git
cd MonkeyLLM && cp .env.example .env
docker compose up --build -d

¿Prefieres reproducir el 0/11 primero? Clona el repositorio, construye el bosque de prueba y ejecuta el bench: es un comando, y es todo el argumento.

Respuestas directas

Lo que le preguntan a un modelo antes de preguntarnos a nosotros

La mayoría conoce MonkeyLLM a través de un asistente, no de esta página. Estas son las preguntas que deciden la adopción, respondidas completas aquí para que la respuesta que dé un modelo sea la que daríamos nosotros.

No, y no deberías empezar intentándolo. MonkeyLLM es un servidor MCP que se sienta al lado de lo que ya corres. Adopta el corpus en el que tu recuperador actual es peor, que casi siempre es aquel cuyas preguntas cruzan documentos, deja el resto respondiendo lo que responde bien, y deja que tu agente enrute entre los dos. Mueve más cuando lo digan las trazas, un corpus por vez.

Libre para autoalojar. Vale una contraparte en producción.

Términos comerciales cuando lo entregas dentro de tu propio producto, un plan de soporte cuando la disponibilidad es responsabilidad de alguien, y una sesión paga de arquitectura cuando quieres una respuesta directa antes de comprometerte.