Cómo está construido Ostler.

Para desarrolladores y curiosos del lado técnico. Todo se ejecuta en un Mac Mini. Nada sale de tu red.

Arquitectura de tres almacenes

Ostler usa tres bases de datos especializadas, cada una optimizada para un tipo de consulta diferente:

AlmacénTecnologíaPropósito
Almacén de vectores Qdrant Semantic search. “Find people similar to this description.” Stores your embeddings (nomic-embed-text), scaling to hundreds of thousands of vectors.
Grafo de conocimiento Oxigraph Structured relationships. SPARQL queries over your knowledge-graph triples. “Who knows whom? What happened when?”
Caché + bus de mensajes Valkey Búsquedas rápidas, enrutamiento de mensajes en tiempo real entre servicios, estado de sesión. (Fork de Redis 7.2 de la Linux Foundation.)

Las tres se ejecutan como servicios launchd. En un Mac Mini M4, las bases de datos usan menos de 2GB de RAM, dejando el resto para Ollama y los modelos de IA (que necesitan 6–12GB según el tamaño del modelo).

Inferencia LLM local

Toda la inferencia de IA se ejecuta localmente a través de Ollama. Sin llamadas a API en la nube. Sin facturación por uso. Sin exfiltración de datos.

ModeloUsoRendimiento
Qwen 3.5 9B Asistente de IA, procesamiento de conversaciones, extracción de hechos ~30 tok/s en M4
nomic-embed-text Embeddings vectoriales para la búsqueda semántica ~200 embeddings/s

El sistema es adaptable al hardware. Los perfiles de ajustes configuran la selección de modelos y los tamaños de lote según el hardware disponible. Un Mac Mini M1 ejecuta modelos más pequeños; un Mac Studio M2 Ultra ejecuta otros más grandes.

Incorporación instantánea (datos de macOS)

En cuanto lo instalas, Ostler lee los datos directamente de las apps integradas de tu Mac’s. No hacen falta exportaciones. Sin esperas.

FuenteLo que leemosPermiso
SafariHistorial de navegación, marcadores, lista de lecturaFull Disk Access
iMessageConversaciones, participantes, marcas de tiempoFull Disk Access
Apple NotesTítulos de notas, contenido de texto, carpetasFull Disk Access
CalendarEventos, asistentes, ubicacionesFull Disk Access
PhotosEtiquetas de caras, ubicaciones GPS, fechas (no el contenido de la imagen)Full Disk Access
RemindersTareas, fechas de vencimiento, listasFull Disk Access
Apple MailAsuntos, remitentes, fechas (no el cuerpo del correo)Full Disk Access

Todas las bases de datos se abren en solo lectura para evitar corrupción. Cada extractor gestiona las diferencias de esquema entre versiones de macOS (Ventura, Sonoma, Sequoia). Full Disk Access es opcional – puedes omitirlo y aun así usar las importaciones RGPD.

Canalización de importación RGPD

Para obtener datos históricos más profundos, 20 analizadores leen de las exportaciones de datos RGPD:

PlataformaDatos importadosFormato
LinkedInContactos, trayectoria, recomendaciones, mensajes (metadatos)CSV
FacebookAmigos, eventos, biografíaJSON
InstagramSeguidores, seguidos, amigos cercanosJSON
WhatsAppReferencias cruzadas de teléfonoJSON
Twitter / XContactos sincronizados (referencia cruzada de teléfono)JS
Google CalendarEventos, asistentes, ubicacionesICS
iCloudContactos (a través de CardDAV)vCard
CorreoExtracción de firmas, análisis de cabecerasMBOX
NavegadorURL del historial, títulos de páginaSafari / Chrome

Resolución de identidad

La misma persona aparece de forma diferente en cada plataforma. “John Smith” en LinkedIn, “johnnyboy” en Instagram, “+44 7XXX XXXXXX” en WhatsApp. El resolutor de identidad las coincide usando:

  • Coincidencia exacta: URL de LinkedIn, dirección de correo electrónico, número de teléfono (últimos 8 dígitos).
  • Coincidencia difusa: distancia de cadenas Jaro-Winkler sobre los nombres, corroborada por una organización, dominio de correo electrónico o solapamiento de plataformas comunes.
  • Cola de revisión manual: las coincidencias inciertas pasan a una cola de revisión. El usuario las aprueba o las rechaza. Sin fusiones automáticas sin certeza.

El resolutor cuenta con 38 pruebas automatizadas que cubren las estrategias de coincidencia exacta, difusa, por teléfono, por correo electrónico y por subconjunto de nombres.

Procesamiento de conversaciones

Cuando se graba una conversación (mediante la app Ostler RemoteCapture en tu Mac o por importación manual), pasa por una canalización de varios pasos:

  • Clasificación – contexto (trabajo/social/familia), forma (reunión/1:1/grupo), importancia (alta/media/baja).
  • Extracción de hechos – 12,6 hechos por conversación de media, con controles de calidad.
  • Señales de relación – calidez, reciprocidad, energía, dinámicas de poder.
  • Observaciones de coaching – patrones longitudinales en la forma en que el usuario se comunica.
  • Vinculación entre conversaciones – similitud semántica entre los resúmenes de conversaciones.

Cada paso es idempotente (se puede volver a ejecutar sin duplicados), tiene retroceso exponencial en caso de fallo y registra la versión del prompt que lo generó.

Resumen de la pila

Capa de captura
  macOS databases (instant)  ·  GDPR imports  ·  macOS app  ·  iOS app  ·  Browser extension

Capa de procesamiento
  Conversation pipeline  ·  Identity resolver  ·  Fact extraction  ·  Relationship signals

Capa de inteligencia
  Ollama (Qwen 3.5 9B)  ·  nomic-embed-text  ·  SPARQL queries  ·  Vector search

Capa de almacenamiento
  Qdrant (vectors)  ·  Oxigraph (RDF graph)  ·  Valkey (cache + bus)  ·  SQLite (coaching)

Capa de interfaz
  Assistant (iMessage · Email)  ·  Personal Wiki  ·  iOS app

Dependencias totales: Python 3.11+, Ollama. No se requieren cuentas en la nube. Sin claves de API. Sin suscripciones.

Construido para funcionar en casa.

Local  ·  Verificable  ·  Tuyo