Local Research Workflow

A privacy-first workflow for processing documents, videos, podcasts, and RSS feeds with local AI. Designed for a Mac with Apple Silicon; no cloud storage for your research data.

Estimated installation time: 60–120 minutes Requirements: macOS Sequoia or later, internet connection for downloads, an Anthropic account (for Claude Code)


The 3-phase model

Every source — paper, podcast, video, RSS article — passes through three explicit phases:

PhaseGoalHow
1 — Cast wideCapture everything relevantItems flow into Zotero _inbox from three sources: (1) the feedreader (feedreader-score.py) scores RSS/YouTube/podcast feeds daily and produces a sorted HTML reader and Atom feed; (2) items shared directly via the iOS share sheet; (3) manual additions from desktop/email/notes
2 — FilterYou decide what enters the vaultindex-score.py ranks inbox items by semantic similarity to your library; Qwen3.5:9b (local) generates a summary for mid-range items; you give a Go or No-go
3 — ProcessFull processing of approved itemsThe local subagent process_item.py fetches the full text, generates a structured literature note via Qwen3.5:9b, and writes it to the Obsidian vault — including key findings, methodology notes, relevant quotes, and [[internal links]]

The separation between phases 1 and 3 keeps both your feed reader and your vault clean: only sources you have consciously approved end up in the vault.


Tools required

ToolRoleLocal / Cloud
ZoteroReference manager and central inboxLocal
Zotero MCPConnects Claude Code to your Zotero library via local APILocal
ObsidianMarkdown-based note-taking and knowledge baseLocal
OllamaLocal language model for offline tasksLocal
yt-dlpDownload YouTube transcripts and podcast audioLocal
whisper.cppLocal speech-to-text transcription for podcastsLocal
NetNewsWireRSS reader for academic and non-academic feedsLocal
Claude CodeAI assistant that orchestrates the workflow; generative work runs locally via Qwen3.5:9b (Ollama)Local (default) / Cloud API with --hd

In standard mode, only orchestration instructions are sent to the Anthropic API; all generative work is handled locally by Qwen3.5:9b. Only when --hd is explicitly requested do the prompt and source content go to the Anthropic API (Claude Sonnet 4.6). Reference data, notes, and transcriptions always stay local.


Overview of steps

  1. Install Homebrew (package manager)
  2. Install and configure Zotero 7 (including _inbox collection)
  3. Set up Python environment
  4. Install and configure Zotero MCP
  5. Install Claude Code
  6. Install Ollama (local language model)
  7. Install Obsidian and create vault
  8. Connect everything: configure Claude Code with MCP
  9. Run first test
  10. Optional extensions (yt-dlp, semantic search, automatic updates)
  11. Podcast integration (whisper.cpp)
  12. RSS integration + feedreader filtering (NetNewsWire + feedreader-score.py)
  13. Spaced repetition (Obsidian plugin)
  14. Set up filter layer per source