<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Kroescontrol Blog</title>
  <subtitle>Tech-verhalen van Kroescontrol — Linux, Kubernetes, automatisering en cloud.</subtitle>
  <link rel="self" href="https://kroescontrol.nl/blog/feed.xml"/>
  <link href="https://kroescontrol.nl/blog/"/>
  <id>https://kroescontrol.nl/blog/</id>
  <updated>2026-07-10T07:22:50.087Z</updated>
  <author>
    <name>Kroescontrol</name>
    <uri>https://kroescontrol.nl</uri>
  </author>
  <entry>
    <title>Keeping up with tech today is hard!</title>
    <link href="https://kroescontrol.nl/blog/keeping-up-with-tech-today-is-hard/"/>
    <id>https://kroescontrol.nl/blog/keeping-up-with-tech-today-is-hard/</id>
    <published>2026-07-09T14:21:06.000Z</published>
    <updated>2026-07-10T07:22:50.087Z</updated>
    <author>
      <name>Bas Maas</name>
    </author>
    <summary>The problem I actually had Keeping up with tech today is hard, with new tools, products, and trends every week. I save a stream of articles and YouTube videos to read later, but never get through them all.</summary>
    <content type="html"><![CDATA[<h2>The problem I actually had</h2>
<p>Keeping up with tech today is hard, with new tools, products, and trends every week. I save a stream of articles and YouTube videos to read later, but never get through them all.</p>
<!--more-->
<p>Then I hit Andrej Karpathy's idea of an <a href="https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f" target="_blank" rel="noopener">"LLM wiki"</a>: stop curating by hand. Pile up everything you come across, and let an LLM do the summarising, the tagging, the linking, and the retrieval when you finally need it.</p>
<p>An LLM has already read most of the public web, so the vault isn't there to teach it facts. It's a curated filter: every link I save signals "this one mattered to me", pointing the agent at my slice instead of everything.</p>
<p>That reframed the whole thing for me. I looked at existing tools, but none matched the three constraints I cared about, so I built my own. I call it <strong>LucidVault</strong>. Best part: it meets me where I work: I query it from Claude Code while working, so past reading resurfaces exactly when I need it.</p>
<h2>The three rules it had to follow</h2>
<ol>
<li><strong>Everything after the save is automated.</strong> One tap to bookmark, then hands off. It comes back scraped, summarised, tagged, and filed. I drop a URL and it comes back done.</li>
<li><strong>The vault is portable.</strong> Plain Markdown files on disk. No SaaS lock-in, no proprietary database, works with Obsidian and with <code>grep</code>.</li>
<li><strong>Querying is conversational.</strong> "What did I read about Argo CD multi-source apps?" beats keyword search. An agent retrieves and reasons across my notes, then answers with citations.</li>
</ol>
<p>After a few weeks of running it, the vault holds ~130 enriched pages and I have not manually filed a single thing.</p>
<h2>The whole thing at a glance</h2>
<p>Two ways in, one vault, many ways to use it:</p>
<pre><code>  Ingest                                                    Use
  ------                                                    ---
                                                            ┌──────────────┐
                                                         ┌─►│ Claude Code  │ read + write
                                      ┌ Obsidian vault ┐ │  ├──────────────┤
  URLs ─► inbox ─► scrape ─► enrich ─►│ wiki · index   │─┼─►│ browser chat │ ask questions
  your notes ─► scan ─► auto-tag ────►│ notes · graph  │ │  ├──────────────┤
                                      └────────────────┘ └─►│ any device   │ Obsidian sync
                                                            └──────────────┘
</code></pre>
<p>The rest of this write-up drills into each side: how a link becomes knowledge, and how I query it back out.</p>
<h2>How a link becomes knowledge</h2>
<p>There's no button I press to "process" a link. A background service does the whole thing on a loop.</p>
<pre><code>Raindrop.io   Save a link with one tap, like any bookmark
     |
     v
Poll loop     A service checks Raindrop on a set interval
     |
     v
inbox/        Each new link becomes a simple Markdown file containing just the URL
              (already-seen URLs are skipped, deduped in SQLite)
     |
     v
Scrape        Jina Reader pulls the page text,
              Supadata pulls transcripts for YouTube links
     |
     v
Enrich        An Ollama Cloud LLM writes a summary,
              adds tags, and links it to related notes
     |
     v
Write         A raw copy and an enriched copy are saved,
              and the vault index is regenerated
     |
     v
SQLite        The page is marked processed, the link graph
              is updated, and the inbox file is deleted
</code></pre>
<p>Every page ends up as <strong>two copies on purpose</strong>:</p>
<ul>
<li><code>raw/</code> is ground truth: the full scraped source, untouched. Good for archiving, and for re-enriching later with a better model.</li>
<li><code>wiki/</code> is the curated view: a tight summary, tags, and <code>[[wikilinks]]</code> to related pages. Small, link-dense, and it is what the agents actually search.</li>
</ul>
<p>Every page links to related pages, and those links form a graph across the whole vault. So an agent can follow backlinks and related notes from one page to the next, not just full-text search.</p>
<p><em>A summarised and enriched wiki page in Obsidian:</em></p>
<p><img src="https://48140960.fs1.hubspotusercontent-na1.net/hubfs/48140960/obsidian.png" alt="A LucidVault wiki page open in Obsidian: summary, tags, and wikilinks to related pages" style="max-width: 100%; height: auto;"></p>
<p>The whole thing is just folders you can open in Finder, Obsidian, or <code>grep</code>:</p>
<pre><code>vault/
├── inbox/     # Drop a URL here, the pipeline takes it from here
├── raw/       # Immutable scraped source — ground truth
├── wiki/      # LLM-curated summaries + [[wikilinks]] — what agents search
├── notes/     # My own notes, auto-tagged and linked in alongside the rest
├── index.md   # Master catalog of every page
└── soul.md    # My profile — who I am, so summaries land in my context
</code></pre>
<p>No proprietary format, no database to export. Back it up by copying a directory.</p>
<h2>The one idea that makes it different: native-first retrieval</h2>
<p>Most "AI knowledge base" projects bolt a vector database and a chat UI on top of a pile of files. LucidVault inverts that default.</p>
<pre><code>Ask a question
  -&gt; Agent (Hermes via Open WebUI, or Claude Code on my laptop)
       -&gt; reads the Markdown files directly    (native first)
       -&gt; MCP server for graph hops + writes   (never content reads)
       -&gt; web search via Tavily                (only when the vault falls short)
  -&gt; a cited answer
</code></pre>
<p>The split is deliberate:</p>
<ul>
<li><strong>Content reads go through the filesystem.</strong> No embeddings, no vector DB, no retrieval-augmented prompt spaghetti. The Markdown files <em>are</em> the index.</li>
<li><strong>Every write goes through an MCP server.</strong> Mutations stay deterministic and validated. It is the only way to keep the index consistent.</li>
</ul>
<p>Why it matters: a vector index is a <em>copy</em> of your corpus that can drift from it. A Markdown file <strong>is</strong> the corpus. Nothing to re-embed, nothing to keep in sync, nothing to invalidate when I edit a note.</p>
<p>A generated <code>AGENTS.md</code> at the vault root is the single source of truth for how to search and cite, so every client behaves the same way against the same files:</p>
<ul>
<li><strong><a href="https://github.com/nousresearch/hermes-agent" target="_blank" rel="noopener">Hermes</a></strong>, an agent I reach through <a href="https://openwebui.com/" target="_blank" rel="noopener">Open WebUI</a>, running on the server next to the vault. Its strong part is memory: it carries context across conversations instead of starting cold every time.</li>
<li><strong>Claude Code</strong> on my MacBook, pointing its <code>CLAUDE.md</code> at the vault's <code>AGENTS.md</code> and running the same retrieval against a locally synced copy.</li>
</ul>
<p>Same question, same vault, two clients:</p>
<p><em>Interacting with my vault via Claude Code:</em></p>
<p><img src="https://48140960.fs1.hubspotusercontent-na1.net/hubfs/48140960/claude-code-interaction.png" alt="Querying the vault from Claude Code in the terminal, with a cited answer" style="max-width: 100%; height: auto;"></p>
<p><em>Query my vault from my phone:</em></p>
<p><img src="https://48140960.fs1.hubspotusercontent-na1.net/hubfs/48140960/openwebui.png" alt="Asking Hermes the same question in Open WebUI, answering from the vault" style="max-width: 100%; height: auto;"></p>
<h2>It answers in my voice, not generic LLM-speak</h2>
<p>A short <code>soul.md</code> in the vault captures who I am: my role, my interests, how I like things written. Enrichment reads it to shape every summary and tag toward my expertise. The agent reads it again at retrieval time. So answers come back in my context, not a generic one.</p>
<pre><code># Soul

## Who I am
DevOps/platform engineer. Mostly Kubernetes and AI.

## What I care about
- Distributed systems, infrastructure patterns
- Developer experience and tooling
- AI/LLM applied to engineering workflows

## How to enrich
- Prefer practical takeaways over theory
- Infrastructure &gt; frontend
- Flag contrarian or surprising claims explicitly

## How to respond
- Be direct, no fluff
- Link to related notes when answering
</code></pre>
<h2>Storage and sync</h2>
<p>The vault is just Markdown: portable, Git-friendly, not locked to any single app. To reach it across devices I run <a href="https://couchdb.apache.org/" target="_blank" rel="noopener">Apache CouchDB</a> with <a href="https://community.obsidian.md/plugins/obsidian-livesync" target="_blank" rel="noopener">Obsidian LiveSync</a> + <a href="https://github.com/vrtmrz/livesync-bridge" target="_blank" rel="noopener">LiveSync Bridge</a>, replicating the vault to my laptop and phone. Pipeline output lands in Obsidian, and edits I make by hand flow back into the next pass. The same brain is with me everywhere.</p>
<h2>Try it yourself</h2>
<p>LucidVault is open source: <strong><a href="https://github.com/bamaas/LucidVault" target="_blank" rel="noopener">github.com/bamaas/LucidVault</a></strong></p>
<p>Full setup guide for running the agent chat against your own vault: <strong><a href="https://github.com/bamaas/LucidVault/tree/main/docs/guides/agent-chat" target="_blank" rel="noopener">Agent chat setup guide</a></strong></p>]]></content>
  </entry>
  <entry>
    <title>De Community Dag</title>
    <link href="https://kroescontrol.nl/blog/de-community-dag/"/>
    <id>https://kroescontrol.nl/blog/de-community-dag/</id>
    <published>2026-06-10T07:48:23.000Z</published>
    <updated>2026-06-10T09:50:36.857Z</updated>
    <author>
      <name>Patriek</name>
    </author>
    <summary>Wat is het toch elke keer weer een mooie dag, de Kroescontrol Community Dag. Waar het begon als leuk idee, begint het nu uit te groeien naar een kleinschalig event. En daar zijn we erg trots op!</summary>
    <content type="html"><![CDATA[<p style="font-weight: bold;">Wat is het toch elke keer weer een mooie dag, de Kroescontrol Community Dag. Waar het begon als leuk idee, begint het nu uit te groeien naar een kleinschalig event. En daar zijn we erg trots op!</p>
<!--more-->
<p style="font-weight: normal;">Gezellig om even met mensen uit het netwerk samen te komen. Een dag werken op een van de prachtige kantoren van Mr. Green. Zie het als een hele lange meetup, maar dan zonder het feit dat je na je werkdag nog naar een verlaten kantoor moet rijden. Waar de pizza net te laat maar wel koud geleverd wordt. En er is net niet voldoende eten, zitplek en eigenlijk had je thuis willen zitten. Wij pakken dat net even anders aan. Want wij geloven namelijk wel in het delen van kennis!&nbsp;</p>
<p style="font-weight: normal;">Het concept is simpel. Vanuit Kroescontrol stellen wij een aantal werkplekken beschikbaar van 8:00 tot 17:00. Deze werkplekken zijn voorzien van een goed bureau, stoel en een grote monitor. Toetsenbord en muis zijn zelfs ook aanwezig, maar voor de liefhebber is er ook de mogelijkheid je eigen tools mee te nemen een aan te sluiten. Koffie en thee staan natuurlijk ook klaar voor je. Heb je in de ochtend een stand-up? Geen probleem, het kantoor is voorzien van fijne belcellen, zo kan je ongestoord je stand-up bijwonen.</p>
<p style="font-weight: normal;">Rond 12:00 verzorgen we de lunch. Een vers broodje, kop soep en een gezonde smoothie. Even bijkletsen aan tafel met die ene oud-collega die je al een tijd niet meer hebt gesproken. Anekdotes uitwisselen, gesprek over wat je allemaal voor mooie dingen met AI aan het doen bent. Gewoon jezelf kunnen zijn!</p>
<p style="font-weight: normal;">In de middag proberen we altijd een korte presentatie te geven. En nee, dat is geen praatje over Kroescontrol met een laagje recruitment/sales. Het moet een technische inhoudelijke presentatie zijn, van iemand die weet waar hij/zij het over heeft. Een 'vakidioot' om het zo maar te zeggen. En het liefst wordt het een interactieve sessie, waarbij er echt kennis gebracht en gehaald wordt!&nbsp;</p>
<p style="font-weight: normal;">We sluiten de dag af met een hapje en een drankje. En nee, dat is allemaal niet verplicht. Wil je eerder naar huis? Prima, geen probleem! Wil je tot het eind blijven, ook goed! Niets moet, maar er is gewoon heel veel mogelijk. Dat is hoe wij vanuit Kroescontrol een echte community proberen te bouwen. Een community die er echt voor jou&nbsp;is!</p>]]></content>
  </entry>
</feed>
