Comment Ostler est conçu.

Pour les développeurs et les curieux du côté technique. Tout fonctionne sur un Mac Mini. Rien ne quitte votre réseau.

Architecture à trois bases de données

Ostler utilise trois bases de données spécialisées, chacune optimisée pour un type de requête différent :

Base de donnéesTechnologieObjectif
Base de données vectorielle Qdrant Semantic search. “Find people similar to this description.” Stores your embeddings (nomic-embed-text), scaling to hundreds of thousands of vectors.
Graphe de connaissances Oxigraph Structured relationships. SPARQL queries over your knowledge-graph triples. “Who knows whom? What happened when?”
Cache + bus de messages Valkey Recherches rapides, routage de messages en temps réel entre services, état de session. (Fork de Redis 7.2 par la Linux Foundation.)

Toutes trois fonctionnent en tant que services launchd. Sur un Mac Mini M4, les bases de données utilisent moins de 2 Go de RAM, laissant le reste pour Ollama et les modèles d'IA (qui nécessitent 6–12 Go selon la taille du modèle).

Inférence LLM locale

Toute l'inférence d'IA s'exécute localement via Ollama. Aucun appel d'API cloud. Aucune facturation à l'usage. Aucune exfiltration de données.

ModèleUsagePerformance
Qwen 3.5 9B Assistant IA, traitement des conversations, extraction de faits ~30 tok/s sur M4
nomic-embed-text Embeddings vectoriels pour la recherche sémantique ~200 embeddings/s

Le système est adaptatif au matériel. Les profils de réglages configurent la sélection des modèles et les tailles de lots en fonction du matériel disponible. Un Mac Mini M1 exécute des modèles plus petits ; un Mac Studio M2 Ultra en exécute de plus grands.

Intégration instantanée (données macOS)

Dès l'installation, Ostler lit les données directement depuis les applications intégrées de votre Mac’s. Aucun export nécessaire. Aucune attente.

SourceCe que nous lisonsAutorisation
SafariHistorique de navigation, signets, liste de lectureFull Disk Access
iMessageConversations, participants, horodatagesFull Disk Access
Apple NotesTitres de notes, contenu textuel, dossiersFull Disk Access
CalendarÉvénements, participants, lieuxFull Disk Access
PhotosÉtiquettes de visages, positions GPS, dates (pas le contenu des images)Full Disk Access
RemindersTâches, dates d'échéance, listesFull Disk Access
Apple MailObjets, expéditeurs, dates (pas le corps de l'e-mail)Full Disk Access

Toutes les bases de données sont ouvertes en lecture seule pour éviter toute corruption. Chaque extracteur gère les différences de schéma entre les versions de macOS (Ventura, Sonoma, Sequoia). Full Disk Access est facultatif – vous pouvez l'ignorer et utiliser quand même les imports RGPD.

Pipeline d'import RGPD

Pour des données historiques plus approfondies, 20 parseurs lisent les exports de données RGPD :

PlateformeDonnées importéesFormat
LinkedInRelations, carrière, recommandations, messages (métadonnées)CSV
FacebookAmis, événements, journalJSON
InstagramAbonnés, abonnements, amis prochesJSON
WhatsAppRecoupements téléphoniquesJSON
Twitter / XContacts synchronisés (recoupement téléphonique)JS
Google CalendarÉvénements, participants, lieuxICS
iCloudContacts (via CardDAV)vCard
E-mailExtraction de signatures, analyse d'en-têtesMBOX
NavigateurURL d'historique, titres de pagesSafari / Chrome

Résolution d'identité

La même personne apparaît différemment selon les plateformes. “John Smith” sur LinkedIn, “johnnyboy” sur Instagram, “+44 7XXX XXXXXX” sur WhatsApp. Le résolveur d'identité les rapproche en utilisant :

  • Correspondance exacte : URL LinkedIn, adresse e-mail, numéro de téléphone (8 derniers chiffres).
  • Correspondance approximative : distance de chaînes Jaro-Winkler sur les noms, corroborée par une organisation, un domaine d'e-mail ou un chevauchement de plateformes communs.
  • File de revue manuelle : les correspondances incertaines passent dans une file de revue. L'utilisateur approuve ou rejette. Aucune fusion automatique sans certitude.

Le résolveur dispose de 38 tests automatisés couvrant les stratégies de correspondance exacte, approximative, par téléphone, par e-mail et par sous-ensemble de noms.

Traitement des conversations

Lorsqu'une conversation est enregistrée (via l'application Ostler RemoteCapture sur votre Mac ou par import manuel), elle traverse un pipeline en plusieurs étapes :

  • Classification – contexte (professionnel/social/familial), forme (réunion/tête-à-tête/groupe), enjeux (élevés/moyens/faibles).
  • Extraction de faits – 12,6 faits par conversation en moyenne, avec contrôles de qualité.
  • Signaux relationnels – chaleur, réciprocité, énergie, dynamiques de pouvoir.
  • Observations de coaching – tendances longitudinales dans la manière dont l'utilisateur communique.
  • Liaison inter-conversations – similarité sémantique entre les résumés de conversations.

Chaque étape est idempotente (réexécutable sans doublons), comporte un backoff exponentiel en cas d'échec et enregistre la version du prompt qui l'a générée.

Récapitulatif de la pile

Couche de capture
  macOS databases (instant)  ·  GDPR imports  ·  macOS app  ·  iOS app  ·  Browser extension

Couche de traitement
  Conversation pipeline  ·  Identity resolver  ·  Fact extraction  ·  Relationship signals

Couche d'intelligence
  Ollama (Qwen 3.5 9B)  ·  nomic-embed-text  ·  SPARQL queries  ·  Vector search

Couche de stockage
  Qdrant (vectors)  ·  Oxigraph (RDF graph)  ·  Valkey (cache + bus)  ·  SQLite (coaching)

Couche d'interface
  Assistant (iMessage · Email)  ·  Personal Wiki  ·  iOS app

Dépendances totales : Python 3.11+, Ollama. Aucun compte cloud requis. Aucune clé d'API. Aucun abonnement.

Conçu pour fonctionner chez vous.

Local  ·  Vérifiable  ·  À vous