Introduction
In 2023, I wrote about my first experiment with ChatGPT for a strategic analysis task. Fun times, though in retrospect it was roughly as sophisticated as asking a very literate parrot to summarize a website. Still, it worked, and I was excited.
Three years later, bigger problems remain unsolved — climate, geopolitics, the persistent question of why printers still don’t work — but in the meantime I spent three days building a research workflow. This post is about that, and about why I finally started using Obsidian for knowledge management after years of good intentions.
The actual problem
I work on health policy topics, which means sources arrive from all directions: academic papers, policy documents, the occasional YouTube lecture from someone who really should have been a professor but ended up on the internet instead, podcasts, RSS feeds. Keeping track of all this was less of a system and more of an archaeology project — layers of half-processed material accumulating in various apps, with no clear path from “I found this interesting thing” to “I actually know something about this topic now.”
The obvious solution is a knowledge management tool. Obsidian is the one everyone recommends. I tried it twice, both times abandoned it within a week. The reason was always the same: manually adding notes, manually creating links between them, manually tagging everything. The whole premise of Obsidian — that you build up a connected web of knowledge over time — sounds wonderful until you’re staring at a blank note at 10pm after a full day of meetings, trying to remember why you bookmarked a paper about care substitution in 2022.
A cloud solution detour
A while ago I tried Recall.ai, which promises to solve exactly this problem: save anything to it, and it automatically connects related items, summarizes them, surfaces connections you hadn’t noticed. I liked the concept. The execution was genuinely impressive, many thanks for this experience! But I was hesitant about uploading the PDFs of academic papers — papers from journals that are already not thrilled about their content being distributed. Copyrighted material, on a cloud service, being processed by models I know nothing about. That felt like a problem I would create for future me, so I quit.
What I actually wanted was Recall.ai’s idea — automated linking, surfaced connections, growing smarter over time — but running entirely on my own machine.
The local setup
The hardware made this feasible in a way it wouldn’t have been two years ago. A Mac mini M4 with 24 GB of unified memory can run local language models at useful speeds, and its GPU handles audio transcription fast enough that a one-hour podcast takes about four minutes to process. That’s the boring infrastructure detail that makes everything else possible.
The software stack ended up being: Zotero as the central reference manager and inbox, Obsidian as the knowledge vault, Ollama for running a local language model (Qwen3.5:9b), yt-dlp for downloading transcripts and audio, and whisper.cpp for local transcription. None of this is new software — what took work was connecting them into something that actually flows.
The result is documented in a GitHub repository called ResearchVault, with a full installation guide if you want to try it yourself. Fair warning: it requires comfort with the command line — I run everything from the integrated terminal in VS Code. It is emphatically not a one-click setup.
Two newsletters were an important source of inspiration along the way: AI Report for its enthusiastic coverage of what’s becoming possible with Claude Code, and Causal Inference with AI for its focus on applying AI in academic research specifically. Both are worth following if this kind of thing interests you.
How the workflow actually works
The design follows a 3-phase model, and the structure matters more than any individual tool.
Phase 1 — Cast wide. Everything goes into a single Zotero _inbox collection via the browser extension or iOS share sheet. No filtering, no judgment, no friction. The bar for adding something is essentially zero.
Phase 2 — Filter. This is the part that makes the whole thing work. The local language model generates a 2–3 sentence summary per inbox item. I give a Go or No-go. That’s it. The point is to create a deliberate moment between “I found this” and “this is in my vault,” rather than letting everything accumulate until the vault becomes the same archaeological dig as everything before it.
Phase 3 — Process. Approved items get full treatment: a structured literature note in Obsidian, automatically tagged and linked to related notes already in the vault. For videos and podcasts, the audio is downloaded and transcribed locally — no content leaves the machine.
The linking is what finally made Obsidian work for me. When a new paper is processed, the system looks at what’s already in the vault and adds [[double bracket links]] to related notes. Over time, this builds the connected knowledge graph that Obsidian promises — not because I remember to do it manually after a long day, but because it happens automatically every time I approve a new item. Flashcards get generated in the process too, which means I’m actually retaining more of what I read rather than filing papers I’ll never think about again.1
1 Whether these flashcards justify three days of setup time is a question I am choosing not to examine too closely. I will give flashcards a try, but do not use this Obsidian plugin if you are reminded of your memory capabilities in a way that makes you feel bad about yourself.
The privacy piece
All the processing — model inference, transcription, note generation — runs locally. Zotero’s API is localhost-only. Obsidian stores plain Markdown files on your local disk. No copyrighted PDFs or confidential items go anywhere they shouldn’t.
The one honest exception: when I type instructions into Claude Code, those prompts reach Anthropic’s API. The content of papers and notes does not. That tradeoff felt acceptable, and it’s explicit rather than buried in a terms-of-service document I’ll never read.
A few words about the AI-assisted coding process
Claude helped me building the entire local workflow enormously. I was acting like a CEO of a firm or like a conductor of an orchestra, guiding Claude to build the configuration files, the skill file that drives the workflow, and the documentation — including a first draft of this blog post, which after redrafting I then edited into something more closely resembling my own voice. The back-and-forth over three days was more useful than going fast, because several early design assumptions turned out to be wrong at both sides every now and then, and catching them early mattered.
This is not a post about AI being miraculous (although, I must admit, the feeling was there at times). It’s a post about a workflow for managing research material. The AI assistance was a means, not the point — roughly as interesting to mention as the fact that I used a text editor. Which is why we listed Claude as a co-author: honest about what happened, but not making it the headline.2
2 I am first author of this blog post — but is that fair? The question is not unique to AI collaboration. A conductor vs the orchestra, a CEO vs the employees, a professor vs the PhD students: in each case, one person mainly sets the direction while others do the work that makes it real. The division of labour is clear enough, but we humans — especially in academia — are obsessed with ranking contributions and putting someone at the top of some list. Which I did here too. Sorry, Claude.
What it’s like to actually use it
We have just started, but the vault is already growing in a way that feels meaningful rather than just accumulating. Papers from different research lines are starting to link to each other in ways I hadn’t made explicit before. The connected graph that Obsidian keeps showing me in its visualization pane is starting to look less like a joke and more like something actually useful.
Whether all of this makes me a more productive researcher, or simply a researcher with a more aesthetically pleasing note-taking system, remains to be determined. I am still struggling to open an issue myself like phasing out Claude in its orchestrating role in this workflow, because this would be a very harsh thing to do to a co-author. Anyhow, happy (vibe) coding!
A note on what this isn’t
This is a personal system that happens to be documented well enough to share. It works for my situation — Mac mini 4, comfort with terminal commands, academic research (or other serious stuff that needs connecting the dots). If you’re on Windows, or if command lines make you nervous, or if your primary source material is TikTok, this is probably not for you. That’s fine.
If you try it and hit rough edges, the GitHub issues are open.
Citation
BibTeX citation:
@online{stam2026,
author = {Stam, Piet and {Claude Sonnet 4.6}},
title = {A privacy-first workflow for processing documents, videos, podcasts, and RSS feeds with local AI},
date = {2026-03-14},
url = {https://www.pietstam.nl/posts/2026-03-14-building-a-privacy-first-research-workflow/},
langid = {en}
}
For attribution, please cite this work as:
Stam, Piet, and Claude Sonnet 4.6. 2026. “A privacy-first workflow for processing documents, videos, podcasts, and RSS feeds with local AI.” March 14, 2026. https://www.pietstam.nl/posts/2026-03-14-building-a-privacy-first-research-workflow/
Citation
@online{stam2026,
author = {Stam, Piet and Sonnet 4.6, Claude},
title = {A Privacy-First Workflow for Processing Documents, Videos,
Podcasts, and {RSS} Feeds with Local {AI}},
pages = {undefined},
date = {2026-03-14},
url = {https://www.pietstam.nl/posts/2026-03-14-building-a-privacy-first-research-workflow},
langid = {en}
}