Mijn Second Brain: gesprekken en documenten terugvinden Mijn agenda, mail en notities bevatten vaak al wat ik nodig heb. Ik bouw een eigen AI-assistent om die informatie terug te vinden en samen te gebruiken. Over dit artikel Ik bouw een persoonlijke AI-assistent rond mijn Mac, OpenClaw en een eigen MCP-koppeling. Mijn bronnen, relaties en correcties bewaar ik in een eigen kennislaag. De voorbeelden van 4 oktober 2026 laten zien hoe ik een bouwhistorisch rapport terugvind en een werkoverleg voorbereid. Het tijdstip komt uit de agenda; een oudere mail geeft achtergrond. De technische verdieping beschrijft PostgreSQL, pgvector, RAG en de keuze van relevante bronnen. De route om een eerdere taak te hervatten is nog in ontwikkeling. Voordat ik AI een vraag kan laten beantwoorden, ben ik vaak eerst bezig uit te leggen waar die vraag over gaat. De afspraak staat in mijn agenda, een wijziging in de mail, mijn aantekeningen op een reMarkable en het bijbehorende document op mijn Mac. Daarom bouw ik aan een assistent die mijn eigen bronnen kan raadplegen. Ik noem het mijn Second Brain. Ik wil bijvoorbeeld mijn verbouwdossier terugvinden of een werkoverleg voorbereiden zonder eerst zelf alle informatie over te typen. Mijn Mac is de werkplek. OpenClaw verzorgt de gateway; via een eigen MCP-koppeling kan een AI-client mijn zoekfuncties gebruiken. Hieronder begin ik bij de vragen die ik ermee stel. De architectuur en code staan in de [technische verdieping](#technical). Bij de voorbeelden. De leesrondes zijn van 4 oktober 2026 en de technische beschrijving sluit aan op de versie van 5 oktober. In die stand zijn de hervattingsroute, verdere contextlussen en delen van de lokale modeluitvoering nog ontwikkelwerk. De vragen waarmee ik begin Twee bronvoorbeelden, een beperkte mailselectie en een hervattingsroute die ik nog ontwerp. Mijn verbouwdossier: Wat zegt mijn bouwhistorisch rapport over de onderdelen die ik wil veranderen? Passages uit mijn eigen dossier met hun waardering. Voorbeeld van 4 oktober Een overleg voorbereiden: Wanneer is mijn volgende werkoverleg en welke achtergrond kan ik terugvinden? Een agenda-afspraak naast eerdere correspondentie. Voorbeeld van 4 oktober Mail opvolgen: Welk gesprek vraagt mogelijk nog een reactie? Een kandidaat en de reden om de latere uitwisseling te controleren. Beperkte leesronde Verdergaan: Waar was ik gisteren gebleven? Het laatste besluit, de open vraag en een bron om weer te openen. In ontwikkeling Minder opnieuw uitleggen Mijn maatstaf is vrij praktisch: helpt dit me een afspraak voor te bereiden, een eerdere afweging terug te vinden of een vergeten bron te openen? Een antwoord is pas bruikbaar als ik kan zien waar het op steunt. Software voor mijn eigen werkplek Dit project hoeft geen algemeen product te worden. Ik kan het inrichten voor mijn apparaten, mijn geschiedenis en de apps die ik wil blijven gebruiken. Een diepe koppeling met mijn Mac kan voor mij de moeite waard zijn, ook als ik die nooit voor andere gebruikers zou willen onderhouden. Daar zit ook plezier in. Ik maak iets voor een terugkerende vraag, probeer het uit en ontdek wat er nog ontbreekt. Mijn tijd gaat naar een omgeving die ik zelf wil gebruiken. Mijn verbouwdossier en een werkoverleg Op 4 oktober 2026 stelde ik vragen over mijn eigen woningdossier en een aanstaand overleg voor Vanas. De voorbeelden laten de gevonden bronnen en het daarop gebaseerde antwoord zien. Adres, namen en bedrijfsdetails zijn afgeschermd; tijden staan in Europe/Amsterdam.33 Wat staat er in mijn bouwhistorisch rapport? Ik wilde weten welke onderdelen van mijn woning historisch waardevol zijn en waar ik bij de verbouwing op moet letten. Eerst kwam correspondentie uit 1986 naar boven. Die hielp bij de bouwgeschiedenis, maar gaf geen antwoord op wat ik nu mag veranderen. Met files.local_search en de term bouwhistor vond ik vervolgens een bouwhistorische verkenning uit 2023. De zoeklaag keek in de documentindex, Spotlight en lokale bestandsnamen. Drie verwijzingen bleken niet vanzelf drie verschillende onderzoeken.33 { "actionType": "files.local_search", "request": {"query": "bouwhistor", "limit": 6} } { "count": 3, "providersQueried": [ "openclaw.ai_documents", "spotlight_local", "bounded_local_filename" ], "results": [{ "displayName": "2023 06 06 Bouwhistorische verkenning [adres verwijderd].pdf", "source": "spotlight_local", "sizeBytes": 6172492, "indexed": true, "absolutePathExposed": false }] } Daarna zocht ik ín de gevonden inhoud, op waardestelling, interieur en balklagen. Onder Page 45 stond “Interne waardestelling”. De opgehaalde passages beschreven onder meer het lijstwerk, de geprofileerde balklagen, de bogen in de kruipruimte en de marmeren gangvloer.3334 > In de verkenning krijgen de historische bouwmassa en genoemde interieuronderdelen een hoge waardering. De scheiding met suitedeuren en inbouwkasten wordt positief gewaardeerd. Die categorieën moeten herkenbaar blijven als ik mijn plan langs het rapport leg. Dit is een samenvatting van rapportpassages, geen nieuwe bouwkundige inspectie. De waardestelling bepaalt ook niet op zichzelf de juridische bescherming. De RCE beschrijft dat de bescherming van een gebouwd rijksmonument de hele onroerende zaak kan omvatten, inclusief het interieur. Voor concrete wijzigingen en verduurzaming hoort overleg met de gemeente bij de voorbereiding.313234 Wat dit voor mij opleverde: ik had de relevante onderdelen van mijn eigen rapport bij elkaar. De assistent moest de waarderingscategorieën en het onderzoeksjaar behouden. Een opnieuw geïndexeerd rapport uit 2023 werd daarmee geen nieuw onderzoek. Wanneer is mijn volgende overleg voor Vanas? Mijn volgende vraag was: “Wanneer staat mijn volgende meeting voor Vanas gepland? Geef me een prep.” Daarvoor moest de assistent eerst een zakelijke afspraak vinden en vervolgens de achtergrond erbij zoeken. De agendaquery liep van 4 tot en met 6 oktober. In deze read werden lokale gegevens uit Apple Calendar en de Outlook-widgetcache op mijn Mac gebruikt. Het uitlezen zelf gebruikte geen netwerkverbinding.33 { "actionType": "calendar.range", "request": { "fromDate": "2026-10-04", "toDate": "2026-10-06", "limit": 10 } } { "sourceAdapter": "microsoft-outlook-calendar-widget", "title": "[interne onderwerpregel verwijderd]", "start": "2026-10-05T08:30:00+02:00", "end": "2026-10-05T09:00:00+02:00", "allDay": false, "location": "Microsoft Teams-vergadering" } De gevonden afspraak stond op 5 oktober, 08.30–09.00, via Teams. Met de onderwerpregel kon de assistent via meeting.prep, mail.search en mail.get_message eerdere correspondentie ophalen.33 Daar zat precies het soort valkuil in waar ik op wil letten. De mail verwees naar een maandagoverleg, maar was ontvangen op 28 mei 2026. Dat “maandag” kon dus niet zomaar morgen betekenen. De agenda leverde het actuele tijdstip; de mail leverde oudere achtergrond. > Voorstel voor mijn voorbereiding: controleer of de oude vergelijking nog past bij de huidige vraag, zet de uitgangspunten naast elkaar en bepaal welke beslissing in het overleg nodig is. Dat laatste is een voorstel op basis van de bronnen, geen opdracht die letterlijk in de afspraak stond. Zo kon ik de voorgeschiedenis erbij pakken zonder een oude mail voor actuele instructie aan te zien. Een handleiding terugvinden De zoekterm monument vond ook groene_gids-binnengevelisolatie_van_monumenten.pdf via bounded_local_filename. Die aanroep vond het bestand; de inhoud was daarmee nog niet gelezen. Voor mij was het al nuttig de handleiding terug te krijgen zonder haar mapnaam te kennen.33 Wat de AI bij deze vragen ontvangt Het model ontvangt gerichte toolresultaten: velden, passages, bronlabels en datums. Het krijgt niet vanzelf mijn hele schijf of scherm. Na het vinden van een document kan een tweede aanroep nodig zijn om de inhoud te lezen. Deze voorbeelden tonen de gebruikte leesroutes. Ze bewijzen niet dat iedere vraag tegelijk vectorzoekwerk, graphuitbreiding en een neuraal rerankermodel gebruikt. Er zijn bij deze vragen ook geen mails verstuurd of afspraken veranderd.33 Wie wacht er op wie? Een gelezen mail kan nog op mij wachten. Een vraag in mijn eigen verzonden bericht kan juist bij iemand anders liggen. Ik wil daarom de uitwisseling terugzien voordat ik besluit wie moet reageren. Een beperkte mailselectie Op 4 oktober gebruikte ik de planner en daarna mail.search voor een kleine selectie. De zoekactie gaf vier kandidaten terug en meldde possiblyTruncated: true: er kon meer mail buiten het resultaat vallen.36 { "actionType": "mail.search", "request": { "query": "", "limit": 4, "actionableOnly": true, "excludePromotional": true, "excludeAutomated": true, "excludeTransactional": true } } Van één kandidaat liet ik mail.thread_summary en mail.get_message de beschikbare inhoud ophalen: { "count": 1, "threadCompleteness": { "messageCount": 1, "fullContentMessageCount": 1, "possiblyTruncated": false, "reconstructionStatus": "bounded_local_records", "provenanceStatus": "source_ids_available" } } In de lokale thread stond één bericht van 22 september. Het vroeg anderen iets vast te leggen en een keuze te bevestigen. Daaruit kon ik niet afleiden dat ík nog moest antwoorden. Eerst moest de latere uitwisseling worden gecontroleerd.36 Een inschatting met een reden Ik wil vier mogelijke uitkomsten kunnen zien: waarschijnlijk aan mij, waarschijnlijk wachten op een ander, waarschijnlijk afgerond, of onvoldoende bewijs. Een vlag als needsReply helpt een kandidaat vinden. De inhoud moet de inschatting dragen. Een deadline, afspraak of toezegging kan daarna de volgorde bepalen. Die bredere ronde met agenda en taken zit niet in het kleine voorbeeld hierboven. De bestaande leesfuncties wil ik later samenbrengen in mail.followup_candidates. Waar was ik gisteren gebleven? Soms weet ik een dag later nog wel aan welk onderwerp ik werkte, maar niet waarom een bepaalde optie afviel. Ik wil dan het laatste besluit, de open vraag en het document terug waar ik verder kan. Die hervattingsroute werk ik nog uit. Ze begint bij een lokaal tijdvenster en de beschikbare sporen: gewijzigde notities, gedateerde bestanden, browserhistorie, gesprekken, taken en repositoryactiviteit. Een bekeken pagina is geen genomen besluit. Een huidige open tab vertelt evenmin wat gisteren openstond. De route moet het verschil bewaren tussen bekeken, gewijzigd, besproken en besloten. Het gewenste antwoord wijst terug naar de bron van die laatste stand. Aansluiten op mijn Mac Ik wil Apple Notes, mijn agenda en mijn bestaande bestanden blijven gebruiken. Daarom sluit ik aan op de apps die al op mijn werkplek staan. macOS kan apps met toestemming andere apps laten besturen; de mogelijkheden verschillen per toepassing.1 Voor lezen combineer ik bestanden, exports, appkoppelingen en waar bruikbaar lokale SQLite-databases of caches. Een cache kan achterlopen en een app-update kan het formaat veranderen. Geen resultaat krijgen betekent dan niet automatisch dat de informatie ontbreekt. Een passende API blijft ook een optie. Voor wijzigingen gebruik ik geschikte appfuncties of automatisering. Rechtstreeks schrijven in een interne appdatabase is geen vervolg op het kunnen uitlezen ervan. Notities op het apparaat dat ik bij me heb Apple Notes geeft me al een leesplek op mijn Mac, telefoon en iPad. Notities in iCloud kunnen tussen die apparaten synchroniseren als hetzelfde Apple Account wordt gebruikt en Notes aanstaat. Notities onder “Op mijn Mac” vallen daarbuiten.151617 Dat scheelt het bouwen van een eigen notitie-editor en mobiele synchronisatie. Handoff helpt daarnaast om in ondersteunde apps op een ander Apple-apparaat verder te gaan.18 Mijn kennisdatabase synchroniseert niet vanzelf mee. Een correctie moet eerst op de Mac aankomen en daarna door mijn eigen verwerking worden opgepakt. Verbinding, synchronisatie en de volgende verwerkingsronde bepalen wanneer ze ook in de kennislaag staat. OpenClaw en mijn MCP-koppeling MCP, het Model Context Protocol, beschrijft hoe een AI-client aangeboden tools en context gebruikt. Mijn MCP-server maakt de functies van mijn eigen omgeving bereikbaar. Het protocol bepaalt niet hoe ik mijn kennis organiseer.2 OpenClaw vormt de gateway voor clients, kanalen en agents. Daaromheen bouw ik mijn bronadapters, kennislaag en werkafspraken. Die eigen onderdelen zijn niet automatisch standaardfuncties van OpenClaw.3 Welke onderdelen ik zelf bouw De gateway hergebruiken Ik gebruik OpenClaw voor de infrastructuur die verzoeken routeert en uitvoeringen organiseert. Zo kan ik mijn bouwtijd besteden aan de informatie die ik nodig heb: het juiste document, de juiste persoon en de voorgeschiedenis van een afspraak.3 Mijn eigen kennislaag Ik bepaal zelf hoe bronnen, personen, versies en besluiten bij elkaar horen. Bronselectie, zoeklogica, correcties en mijn werkafspraken liggen achter mijn eigen MCP-koppeling. Die keuzes wil ik ook kunnen meenemen naar een andere AI-client. Lezen en uitvoeren De agenda lezen en een afspraak verplaatsen vragen verschillende rechten. Voor handelingen met gevolgen wil ik een concreet voorstel en de goedkeuring die mijn beleid vereist. OpenClaw biedt uitvoeringsgoedkeuring; apprechten en mijn adapters houden hun eigen verantwoordelijkheid.37 Later een andere gateway kiezen Bij een overstap verwacht ik integratiewerk. Wat ik wil behouden zijn de bronnen, relaties, correcties en geschiedenis in mijn eigen kennisbasis. Daarvoor zijn exporteerbare structuren, versies en herstelbare back-ups nodig. Een ander embeddingmodel vraagt bovendien een eigen migratie. Schrijven, typen en inspreken Mijn aantekeningen ontstaan op verschillende plekken. Op reMarkable schrijf ik met een pen; via de desktopapp zijn inhoud en exports beschikbaar. Het ophalen, uitlezen en koppelen aan mijn andere bronnen organiseer ik zelf.4 PLAUD gebruik ik als audio-ingang. De exportmogelijkheden geven me een route naar mijn eigen verwerking, terwijl de overdracht nog van PLAUD-software kan afhangen.5 Daarnaast ontwerp ik een eigen notetaker voor gesprekken op de Mac. Ik wil deze ingangen op dezelfde kennisomgeving laten aansluiten, zodat de keuze voor pen of microfoon niet bepaalt waar ik later moet zoeken. De concrete audiokoppeling, de importcijfers en mijn ervaring met de synchronisatie staan in [het PLAUD-artikel](/articles/plaud-apple-notes/). Van stem naar een herkenbare spreker Mijn notetakerontwerp begint met transcriptie. Whisper kan via whisper.cpp lokaal op Apple Silicon draaien. De applicatie eromheen moet audiosegmenten en tijdcodes organiseren.6 Nemotron 3 Diarization van NVIDIA krijgt de taak om sprekerwisselingen te vinden. Het ondersteunt streaming en offline verwerking en levert sprekerlabels. Een label is nog geen naam uit mijn contacten.7 Daarvoor volgt een aparte vergelijking met bekende stemprofielen via speaker embeddings. Een deelnemerslijst helpt kandidaten vinden, maar bewijst niet wie een stem is. Bij twijfel blijft de identiteit onbekend of vraag ik om bevestiging.8 Een bevestigde spreker kan ik vervolgens verbinden met een contact en de bijbehorende mail, afspraak en eerdere notities. Transcriptie, sprekerscheiding en identificatie blijven afzonderlijke onderdelen. Een gesprek teruglezen Na een brainstorm wil ik ideeën en afwegingen terugzien. Na een technisch overleg zoek ik eerder besluiten en verantwoordelijkheden. Daarom wil ik het notitieformaat op het soort gesprek laten aansluiten en zelf kunnen corrigeren. Apple Notes is de beoogde leesplek. Daar moet herkenbaar blijven wat in het gesprek is gezegd, wat uit een eerdere bron komt en wat de AI voorstelt. Mijn correcties moeten daarna met een bron en versie terug kunnen naar de kennisbasis. Een werkdag achteraf bekijken Waar zat ruimte in mijn agenda? Op 4 oktober haalde ik de agenda van dinsdag 22 september 2026 terug. Het is een reconstructie van die planning, geen automatisch verstuurde ochtendbriefing of urenregistratie. De klantnamen zijn vervangen door projectletters.38 Binnen een gekozen werkvenster van 08.30–17.00 stonden zes tijdgebonden blokken, samen zes uur. Een projectblok liep direct over in een demo. De open tijd zat verspreid over de dag. Open tijd is niet altijd bruikbare werktijd Ik voegde als planningsvoorstel vijftien minuten demovoorbereiding, vijftien minuten afronding en een halfuur lunch toe. Dan zijn werk en pauze samen zeven uur. Er blijft anderhalf uur over, verdeeld over drie blokken: | Tussenruimte uit de agenda | Planningsvoorstel | Over na dit voorstel | | --- | --- | --- | | 09:30–10:00 | Onverdeeld houden / korte afhandeling | 30 min | | 11:15–11:45 | 15 min voorbereiding demo | 15 min | | 12:30–13:00 | 30 min lunchpauze | 0 min | | 16:00–17:00 | 15 min afronding demo | 45 min | Dat is ruimte voor een taak van dertig of vijfenveertig minuten. Een taak die negentig minuten aaneengesloten vraagt, past niet zonder iets te verschuiven. De toeslagen komen uit het voorstel; ze stonden niet in de agenda. De bron achter de berekening Na een query voor 21–27 september haalde calendar.range dinsdag afzonderlijk op. De read gebruikte apple-calendar-sqlite, gaf acht bronregels terug en meldde geen afkapping.38 { "actionType": "calendar.range", "request": { "fromDate": "2026-09-22", "toDate": "2026-09-22", "limit": 20 } } { "count": 8, "possiblyTruncated": false, "windowMode": "explicit_date_range", "sourceStatus": "searched", "networkUsed": false, "sourceDiagnostics": { "calendarAdapters": [ "apple-calendar-sqlite" ] } } Zes regels waren werkblokken. Twee regels beschreven hetzelfde meerdaagse informatieve evenement; die zijn niet als twee extra afspraken meegeteld. Bij daadwerkelijke aanwezigheid zou de berekening anders worden. De weekquery liet voor woensdag ook 286 minuten geplande reistijd zien. Dat was een reden om in het voorstel alvast dinsdag ontbrekende input te verzamelen. Mail en taken van die ochtend zijn niet in deze terugblik meegenomen, en de agenda is ongewijzigd gebleven.38 Bronnen met elkaar verbinden Mijn lokale kennisbasis gebruikt PostgreSQL met pgvector voor vectorzoekwerk. Relevante passages kunnen vóór het genereren van een antwoord worden opgehaald: retrieval-augmented generation, of RAG.9 Daarnaast leg ik relaties vast tussen personen, gesprekken, documenten, projecten en besluiten. Stel dat een latere mail een eerdere materiaalkeuze verandert. Dan wil ik bij de vraag “wat geldt nu?” beide bronnen kunnen vinden en zien waarom de keuze veranderde. Dit is een voorbeeld van de relatie die ik wil kunnen volgen. Bij elke relatie horen bron, datum en status: bevestigd, afgeleid of onzeker. De graph helpt zoeken, maar een lijn tussen twee gegevens maakt de verbinding nog niet waar. Verderop beschrijf ik hoe ik de resultaten selecteer. Contactgegevens uit een mailhandtekening Een kleiner voorbeeld is een naam of telefoonnummer uit een e-mailhandtekening. Ik wil een voorstel voor mijn adresboek krijgen dat eerst wordt vergeleken met wat al bekend is. Daar moet de herkomst bij blijven. Een doorgestuurde handtekening kan van iemand anders zijn; een oude functietitel kan inmiddels zijn veranderd. Pas na die controle wil ik het contact verbinden met gesprekken, mail en afspraken. Waarom ik eigen koppelingen toevoeg ChatGPT en Claude kunnen al apps en bronnen combineren. Ik gebruik zulke bouwstenen ook. Mijn keuze voor een eigen omgeving gaat over de plek waar ik relaties, bronstatus, correcties en werkafspraken bewaar.1011 Ik wil zelf kunnen bepalen welke documentversie geldt en wanneer twee bronnen over dezelfde persoon gaan. Een standaardconnector kan een bron ontsluiten; mijn eigen zoeklaag organiseert hoe die informatie samen met de andere bronnen wordt geselecteerd. Een ander model proberen Mijn bronnen, relaties en correcties wil ik buiten één chatsessie bewaren. Een andere client kan er dan via een geschikte adapter gebruik van maken. Ook geheugenimport en -export, zoals Claude die aanbiedt, kunnen bij een overstap helpen.12 Dat levert geen identieke antwoorden op. Modellen verschillen in contextgebruik en toolgedrag, dus die moet ik opnieuw proberen en controleren. Informatie die alleen in een oude chat bleef staan, gaat niet vanzelf mee. Dezelfde opzet geeft ruimte voor lokale modellen per taak. Dat maakt niet de hele omgeving offline: synchronisatiediensten, externe modellen en bijvoorbeeld Telegram houden hun eigen verbindingen. Van een antwoord naar een handeling Ik wil vanuit een gevonden bron een conceptantwoord kunnen laten voorbereiden, een notitie openen of een taak voorstellen. De MCP-opzet bevat gerichte functies voor acties, geheugenupdates en feedback.28 Telegram is in mijn opzet een kanaal voor voorstellen en goedkeuringen. OpenClaw kan uitvoeringsverzoeken via dat kanaal laten beoordelen. Bij een wijziging wil ik kunnen zien wat ik toestaan ga; een eenvoudige toegestane read hoeft me niet telkens te onderbreken.13 De koppelingen onderhouden Apps en bestandsformaten veranderen. Daarom wil ik bij een mislukte zoekactie kunnen zien of de oorzaak in de bron, synchronisatie of adapter zit. Technische feedback krijgt een eigen onderhoudsroute. Via OpenClaw wil ik zo’n melding laten uitwerken tot een kleine herstelopdracht. Codex kan via de CLI relevante code onderzoeken, aanpassen en testen. Voordat een wijziging in mijn werkende omgeving komt, wil ik de verandering en haar gevolgen beoordelen.14 Na een aanpassing hoort de oorspronkelijke vraag opnieuw te worden gecontroleerd. Een ontbrekende macOS-toestemming vraagt bijvoorbeeld een andere oplossing dan een gewijzigd databaseveld. Technische verdieping: van bron naar antwoord Hieronder staat hoe ik de lagen uit elkaar houd. De voorbeelden eerder in het artikel tonen concrete reads. Dit overzicht bevat ook ontwerpkeuzes voor de verdere uitbouw; niet iedere zoekroute draait bij iedere vraag. A. Interfaces en toegang tot apps Een AI-client ontdekt MCP-tools via tools/list en gebruikt tools/call. inputSchema beschrijft de invoer en een optioneel outputSchema de gestructureerde uitvoer. Mijn bridge vertaalt die aanroepen naar OpenClaw en de bronadapters. MCP-transport, zoals stdio of Streamable HTTP, staat los van OpenClaws WebSocket-control-plane.1920283 Adapters kunnen scriptbare apps via AppleScript of JXA bedienen, native frameworks gebruiken of lokale data lezen. NSWorkspace kan de voorgrondapp bepalen; EventKit biedt toegang tot agenda’s en herinneringen. De adapter moet aangeven of hij een bestandsnaam, metadata of inhoud teruggeeft.212223 Bij SQLite in WAL-modus kan recente data nog in het write-ahead log staan. Een kopie van alleen het hoofdbestand is daarom geen algemene snapshot. De leesroute vraagt een consistente transactie of passende back-up, binnen de macOS-rechten van de service.242526 In de getoonde voorbeelden staan onder meer spotlight_local, icloud_drive, microsoft-outlook-calendar-widget en apple_reminders als bronlabels. Dat EventKit beschikbaar is, zegt niet dat die concrete reads EventKit gebruikten.33 B. Ingestie en afgeleide gegevens Ingestie herkent wijzigingen, extraheert inhoud en bouwt doorzoekbare representaties. Tekstchunks, tabellen en relaties kunnen afzonderlijk worden bijgewerkt. Bronnen → wijzigingen herkennen → extractie + bronmetadata ├→ tekstchunks → embeddings ├→ secties, tabellen, lijsten en content objects └→ entiteiten, relaties en observaties ↓ zoekindices + versies + kwaliteit + actualiteit PostgreSQL bevat documentrecords, content objects, entiteiten, relaties en observaties. Bron-ID’s en versies verbinden die gegevens met de oorspronkelijke inhoud. Chunks, embeddings en indexen zijn afgeleid.927 Bij herverwerking wil ik gewijzigde representaties bijwerken, oude versies markeren en duplicaten voorkomen. Ook verwijderingen en ingetrokken bronnen moeten doorwerken. Een Notes-correctie moet eerst op de Mac aankomen voordat ingestie haar kan verwerken.1516 Het generatieve model, embeddingmodel en een eventuele neurale reranker zijn afzonderlijke onderdelen. Een ander embeddingmodel kan herindexering vragen; gelijke vectordimensies maken twee embeddingruimtes niet uitwisselbaar.30 C. Betekenis, identiteit en tijd De vraag bepaalt intentie, persoon, onderwerp en tijdvenster. “Gisteren” wordt een lokale datum; “laatste gesprek” gaat over gesprekstijd. Een stabiele contact-ID is sterker dan een gelijke naam of gedeelde mailbox. Bronrechten, expliciete persoons-ID’s en verplichte datumbereiken begrenzen de selectie. Een hoge semantische score mag die voorwaarden niet overrulen. D. Verschillende zoekroutes Exact en full-text: namen, termen, bestandsnamen en nummers. PostgreSQLs full-text-ranking is niet automatisch BM25.29 Vector: inhoud vinden die hetzelfde onderwerp anders verwoordt. Overeenkomst in betekenis bewijst geen identiteit of exact onderdeelnummer.9 Gestructureerd: secties, tabellen en lijsten met hun koppen, rijcontext en eenheden. Graph: zoeken via onderbouwde relaties, met grenzen aan type en diepte. Geheugen en apps: voorkeuren, correcties, mail, agenda en gesprekken. De vraag bepaalt welke route nodig is. Actueel nieuws vraagt een aanvullende externe bron; een lokale index levert dat niet vanzelf. E. Resultaten samenvoegen en rangschikken Ik voeg kandidaten samen op bronidentiteit en behoud hun vindplaats en zoekroute. Verschillende kopieën van één bron tellen niet als onafhankelijke bevestiging. Tekstscores en cosine similarities kun je niet zomaar optellen; rank fusion is een mogelijke manier om routes samen te brengen.9 Bij reranking worden de gevonden kandidaten opnieuw voor de vraag beoordeeld. Mijn scoring gebruikt onder meer relevante termen, exacte entiteiten, bronherkomst, relaties en tijd. Duplicaten, ruis en tegenstrijdige versies kunnen lager eindigen.27 Een gedateerd gesprek kan bij “wie sprak ik het laatst?” boven een recente nieuwsbrief horen. Een aparte cross-encoder is een mogelijke extra stap, geen gevolg van het bestaan van een rankingscore. De score zelf is geen waarheidskans.30 F. Datums, versies en herkomst Gebeurtenistijd, geldigheidsperiode, bronwijziging en indexmoment betekenen iets anders. Een oud besluit kan nog geldig zijn; een nieuw concept kan het nog niet vervangen. Een bijgewerkte index van een achterlopende cache blijft achterlopende informatie bevatten. Ik groepeer duplicaten, versies en afgeleide kopieën. Een mail, export en AI-samenvatting kunnen dezelfde oorsprong hebben. Bijna gelijke versies moet ik wel vergelijken: het gewijzigde getal kan juist het antwoord bevatten. Een bewering moet terug te voeren zijn op een ondersteunende passage, tabelcel, bericht of tijdcode. Een link naar een document over hetzelfde onderwerp is daarvoor niet voldoende. G. Het bewijspakket voor het model De geselecteerde inhoud krijgt een begrensd contextpakket. Passages behouden de koppen, versies en verwijzingen die nodig zijn om ze te lezen. Bij inkorten moeten datums, eenheden, ontkenningen en uitzonderingen behouden blijven. Answerability is de vraag of de bronnen de gevraagde conclusie ondersteunen. Coverage gaat over welke deelvragen zijn afgedekt. Als alleen de afspraak is gevonden, is de voorbereiding nog niet compleet. H. Gericht verder zoeken Een ontbrekend stuk kan aanleiding zijn voor een volgende query: de naam uit een transcript oplossen, een projectalias in mail zoeken of latere reacties ophalen. De nieuwe resultaten worden opnieuw beoordeeld. Ik begrens die lus op zoekrondes, tijd en tokens. Als een ronde niets toevoegt, heeft dezelfde brede query herhalen weinig zin. Vraag → intentie + identiteit + tijd + constraints → gerouteerde hybrid retrieval [exact/FTS | vector | structured | graph | memory | apps/web] → candidate fusion → reranking → context package → answerability + coverage → antwoord, of gericht herzoeken binnen budget Doorlopend in de keten: bronselectie · actualiteit · geldigheid · kwaliteit · dedupe · herkomst I. Van antwoord naar voorgestelde actie Een antwoord geeft geen toestemming om een mail te versturen, afspraak te wijzigen of code uit te rollen. Zulke handelingen volgen hun eigen rechten en goedkeuringen. Voor appwijzigingen gebruik ik geschikte appfuncties.1337 De onderstaande combinaties zijn mogelijke routes met de bouwstenen uit mijn register. Ze beschrijven gewenste uitkomsten; de aangesloten bronnen bepalen wat een uitvoering kan leveren.28 | Gebruikersvraag | Mogelijke route door de interface | Gewenst resultaat | | --- | --- | --- | | Waar werkte ik gisteren aan? | personal.search en knowledge.search, aangevuld met beschikbare gesprekshistorie en gedateerde activiteiten | Onderwerpen, besluiten en het punt om verder te gaan | | Welke mailgesprekken lijken nog iets van mij nodig te hebben, en welke eerst? | mail.search → mail.thread_summary / mail.get_message → gerichte agenda- en taakcontext | Onderbouwde inschatting van wie aan zet is, prioriteit en onzekerheid | | Bereid mijn volgende meeting voor | calendar.next → contacts.resolve → mail.thread_summary / meeting.prep → rag.context_package | Actuele afspraak, wijzigingen sinds het vorige contact en open vragen | | Wie sprak ik over verpakkingsmachines? | meeting_search → meeting_transcript → contacts.resolve / person_meetings → knowledge.graph_search | Juiste gesprekspartner, gesprekstijd en bijbehorende bron | | Welk nieuws raakt mijn projecten? | profile.context + projectcontext → actuele externe zoek- of feedadapter → selectie en deduplicatie | Nieuwe ontwikkeling, persoonlijke relevantie en bron | | Onthoud deze correctie | profile_remember met een gerichte update | Dezelfde correctie beschikbaar via een volgende client | | Verbeter deze interface of zoekroute | product_feedback_append → ontwikkelroute via OpenClaw → Codex → tests en beoordeling | Een afgebakende verbetering met controle op de gebruikersvraag | J. Zien waar iets misgaat Ik wil bronactualiteit, extractiedekking, indexstatus, wachtrijen, graphvertraging en toolfouten kunnen volgen. Daarmee kan ik een leeg resultaat terugzoeken tot de bron of verwerkingsstap. Voor veranderingen in zoekkwaliteit wil ik vaste, niet-gevoelige referentievragen gebruiken. Exacte matches, besluitgeldigheid en de bijdrage van een tweede zoekronde vragen andere controles dan alleen documenten tellen. Na een herstelwijziging moet ook de oorspronkelijke gebruikersvraag opnieuw worden geprobeerd. De clientkant telt mee: een gewijzigde server vernieuwt niet vanzelf de tooldefinitie die de AI-client kent.10 Waarom ik hier zelf tijd in steek Ik weet welke informatie ik vaak opnieuw bij elkaar zoek en welke apps ik wil blijven gebruiken. Door die koppelingen zelf te maken, kan ik met mijn eigen vragen beginnen. Ik leer tijdens het bouwen waar een nette architectuur nog niet aansluit op werkelijk gebruik. Een startprompt voor dit project De prompt hieronder helpt een coding agent eerst de bestaande omgeving en de gewenste gebruiksvragen vast te leggen. Daarna volgen keuzes, instructies en één kleine werkende keten. Het is een beginpunt dat je aan je eigen situatie moet aanpassen. https://www.dewind.me/articles/second-brain/prompts/kickstart-foundation.html Kopiëren of openen op deze pagina voert niets uit. Gebruik de prompt in de werkmap die je wilt laten onderzoeken, met de toegangsrechten die daarbij passen. Beginnen met één vraag Als je dit zelf wilt proberen, zou ik één vraag kiezen waarvoor je steeds meerdere apps opent. Bijvoorbeeld een afspraak voorbereiden met agenda, mail en eigen notities. Controleer eerst of die ene route de juiste bronnen vindt. Daarna kun je een bron toevoegen. Houd ook bouwtijd, onderhoud, hardware en modelgebruik bij. Een eigen kennislaag is alleen de moeite waard als je haar wilt blijven gebruiken en onderhouden. Waar ik verder mee wil De woning- en overlegvragen laten zien waarom ik dit bouw. Ik kan beginnen bij mijn eigen bronnen, met hun datums en voorgeschiedenis. De volgende stap is die samenhang bruikbaar maken wanneer ik een gesprek opvolg of een eerdere taak hervat. Ik wil best een ander model proberen. Mijn eigen context wil ik daarbij kunnen blijven gebruiken. Bronnen & verantwoording [1] Apple Support: Apps toestaan om andere apps op de Mac te besturen https://support.apple.com/nl-nl/guide/mac-help/mchl07817563/27/mac/27 Appautomatisering op de Mac en de benodigde toestemming. [2] Model Context Protocol: Architecture overview https://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/docs/docs/2026-07-28/learn/architecture.mdx Het protocol voor aangeboden tools en context. [3] OpenClaw: Gateway architecture https://docs.openclaw.ai/concepts/architecture De gateway voor kanalen, clients en agents. De eigen kennislaag staat daarbuiten. [4] reMarkable Support: Desktop app https://support.remarkable.com/articles/Knowledge/Desktop-app Desktopweergave en export van reMarkable-notities. [5] Plaud Support: Export recordings, transcripts, and summaries https://support.plaud.ai/hc/en-us/articles/50835453223705-Export-recordings-transcripts-and-summaries Export van opnames en resultaten als ingang voor verdere verwerking. [6] ggml-org: whisper.cpp https://github.com/ggml-org/whisper.cpp Lokale Whisper-uitvoering, Apple Silicon en voorbeelden voor verwerking van streaming audio. [7] NVIDIA: Nemotron 3 Diarization — model card https://huggingface.co/nvidia/Nemotron-3-Diarization/blob/main/ASR_INTEGRATION_GUIDE.md Modelkaart voor sprekerscheiding. Identificatie van personen vraagt een aparte stap. [8] NVIDIA NeMo: Speaker Recognition https://docs.nvidia.com/nemo-framework/user-guide/24.07/nemotoolkit/asr/speaker_recognition/intro.html Identificatie en verificatie via speaker embeddings zijn aparte taken; matching vraagt bekende profielen en besluitregels. [9] pgvector: Open-source vector similarity search for Postgres https://github.com/pgvector/pgvector Vectorzoekfunctionaliteit en combinatie met full-text search. De knowledge graph wordt in de eigen kennislaag gemodelleerd. [10] OpenAI Help Center: Developer mode and MCP apps in ChatGPT https://help.openai.com/en/articles/12584461-developer-mode-and-mcp-apps-in-chatgpt MCP-apps en het vernieuwen en beoordelen van gewijzigde tooldefinities. [11] Claude Help Center: Custom connectors via remote MCP https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp Eigen MCP-connectors en onderzoek met meerdere bronnen. [12] Claude Help Center: Import and export your memory from Claude https://support.claude.com/en/articles/12123587-import-and-export-your-memory-from-claude Geheugen importeren en exporteren tussen AI-omgevingen. [13] OpenClaw: Exec approvals — advanced https://docs.openclaw.ai/tools/exec-approvals-advanced Uitvoeringsgoedkeuring via onder meer Telegram; de inrichting bepaalt de eigen route. [14] OpenAI: Codex CLI https://developers.openai.com/codex/cli/ Codex CLI voor codeonderzoek en wijzigingen. De beschreven onderhoudsketen is mijn ontwerp. [15] Apple Support: iCloud voor Notities configureren https://support.apple.com/nl-nl/guide/icloud/mm8685520792/icloud Dezelfde Apple Account, Notities-sync en toegang via iPhone, iPad, Mac en web. [16] Apple Support: Notes up-to-date houden met iCloud https://support.apple.com/en-gb/guide/icloud/mm2d069f7097/icloud Notities aanmaken, wijzigen en synchroniseren via iCloud. [17] Apple Support: Accounts voor Notities op de Mac https://support.apple.com/en-ae/guide/notes/not85d6f7b58/mac Notities in On My Mac zijn lokaal; voor iCloud-notities gelden account- en syncinstellingen. [18] Apple Support: Handoff gebruiken https://support.apple.com/nl-nl/102426 Ondersteunde apparaten, apps en instellingen voor verder werken op een ander apparaat. [19] MCP-specificatie: Tools https://modelcontextprotocol.io/specification/2025-11-25/server/tools De aangehaalde protocolversie beschrijft discovery, tools/call en input- en outputschema’s. [20] MCP-specificatie: Transports https://modelcontextprotocol.io/specification/2025-11-25/basic/transports stdio en Streamable HTTP. OpenClaw-control-plane en MCP-transport zijn afzonderlijke lagen. [21] Apple Developer: NSWorkspace.frontmostApplication https://developer.apple.com/documentation/appkit/nsworkspace/frontmostapplication De voorgrondapp bepalen via NSWorkspace. [22] Apple Developer: EKEventStore https://developer.apple.com/documentation/eventkit/ekeventstore EventKit voor agenda en herinneringen; een andere route dan de getoonde widget- en SQLite-reads. [23] Apple Support: Scripts met Automator https://support.apple.com/en-qa/guide/automator/aut4bb6b2b4f/mac AppleScript, JavaScript for Automation en shell als algemene macOS-bouwstenen. [24] SQLite: Online Backup API https://sqlite.org/backup.html Consistente snapshots en back-ups als uitgangspunt voor het adapterontwerp. [25] SQLite: Write-Ahead Logging https://sqlite.org/wal.html WAL-bijbestanden horen bij de actuele toestand; alleen het hoofdbestand kopiëren is geen algemene snapshotoplossing. [26] OpenClaw: macOS permissions https://docs.openclaw.ai/platforms/mac/permissions Toestemming en service-identiteit zijn relevant voor native automatisering. [27] Eigen OpenClaw-ontwerp: retrieval en gebruikersroutes https://www.dewind.me/articles/assets/second-brain/evidence/design-and-routes.md Mijn ontwerp voor retrieval, met het MCP-register en rankingmetadata als achtergrond. [28] Eigen MCP-register: gepubliceerde toolmetadata https://www.dewind.me/articles/assets/second-brain/evidence/mcp-endpoint-register.md Toolmetadata opgehaald op 4 oktober 2026. Het register beschrijft bouwstenen, inclusief aliases; de praktijkvoorbeelden laten uitgevoerde combinaties zien. [29] PostgreSQL: Controlling Text Search https://www.postgresql.org/docs/18/textsearch-controls.html Full-text parsing en ranking, waaronder ts_rank en ts_rank_cd. PostgreSQL FTS is niet automatisch BM25. [30] Sentence Transformers: Retrieve & Re-Rank https://www.sbert.net/examples/sentence_transformer/applications/retrieve_rerank/README.html Verschil tussen kandidaatselectie met een bi-encoder en gezamenlijke beoordeling van vraag en passage met een cross-encoder. De eigen rankingstap is niet automatisch een neuraal model. [31] RCE: Welke elementen van een rijksmonument zijn beschermd? https://www.cultureelerfgoed.nl/onderwerpen/i/interieurs/vraag-antwoord Geraadpleegd 4 oktober 2026. Bescherming van de hele onroerende zaak, inclusief interieur; niet alleen onderdelen die in de registeromschrijving genoemd zijn. [32] RCE: Overleg en vergunning bij verduurzaming https://www.cultureelerfgoed.nl/onderwerpen/d/duurzaamheid/waar-starten/vergunning Geraadpleegd 4 oktober 2026. Vooroverleg met gemeente en beoordeling van wijzigingen die monumentale waarden beïnvloeden. [33] Eigen MCP: echte queries en geredigeerde bronuitkomsten https://www.dewind.me/articles/assets/second-brain/evidence/redacted-query-results.json Geselecteerde leesacties van 4 oktober 2026. De bijlage bewaart de technische velden en beschrijft de afscherming van privégegevens. [34] Wieringa bouwadvies (2023): bouwhistorische verkenning, woningdossier https://www.dewind.me/articles/assets/second-brain/evidence/source-notes.md Geïndexeerde passages uit het rapport van 2023, waaronder Interne waardestelling onder Page 45. De bijlage bevat een korte parafrase; het adres en de oorspronkelijke PDF blijven privé. [35] Over de gedeelde bronfragmenten https://www.dewind.me/articles/assets/second-brain/evidence/publication-check.md Toelichting op welke brongegevens in de voorbeelden zijn gedeeld of afgeschermd. [36] Geredigeerde mailleesronde en afbakening van de nieuwe gebruikersroutes https://www.dewind.me/articles/assets/second-brain/evidence/attention-methodology.nl.md Mailzoekactie en gelezen lokale thread van 4 oktober 2026. Gedeeld zijn geselecteerde velden en een korte parafrase, met behoud van de beperkte dekking. [37] OpenClaw: Exec approvals https://docs.openclaw.ai/tools/exec-approvals Uitvoeringsgoedkeuring naast toolbeleid en hostrechten. Goedkeuring vervangt geen toegangsbeheer. [38] Eigen MCP: dagbriefing 22 september, bronselectie en capaciteitsberekening https://www.dewind.me/articles/assets/second-brain/evidence/daily-briefing-2026-09-22.redacted.json Twee calendar.range-reads van 4 oktober over 22 september en de omliggende week. De bijlage onderscheidt agendatijden en planningsaannames.