Marcel Bruckner

#trilium#ai#claude

My Trilium setup: notes Claude can read, write and remember

My notes have lived in Trilium for years. Over the last few weeks they became something Claude works in too: it reads them before it answers, files what we figure out, and turns the articles I save into a wiki. This post is the map: which pieces there are, how they fit together, and where each one has its own post.

flowchart LR
  me["Me: browser, phone"] -- "save + tag" --> kk["Karakeep"]
  kk -- "tagged bookmarks" --> sync["karakeep-trilium-sync"]
  claude["Claude: Code, claude.ai, apps"] -- "MCP, OAuth login" --> proxy["trilium-mcp-proxy"]
  claude -- "recall" --> recall["trilium-recall"]
  subgraph T["Trilium"]
    mcp["built-in MCP server"]
    src["Sources"]
    wiki["Wiki"]
  end
  proxy --> mcp
  recall -. "reads" .-> T
  sync --> src
  mcp -- "ingest" --> wiki

The pieces

Piece What it does
Trilium 0.106+ The notes. Since 0.106 it has its own MCP server, so any MCP client can search, read and write them.
trilium-mcp-proxy Puts an OAuth login in front of that server: add one URL to claude.ai or Claude Code and log in with your Trilium password, no token to paste.
trilium-recall A search index next to Trilium (keywords plus embeddings, German and English) that hands Claude what the notes already know, before it starts guessing.
trilium-llm-wiki A Claude Code plugin that builds and maintains an LLM wiki inside Trilium, following Karpathy’s pattern.
trilium-plugin Claude Code skills for everyday notes: search, create, move, tag, templates, journal, export.
karakeep-trilium-sync Copies bookmarks I tag trilium in Karakeep into the wiki’s Sources every 15 minutes.

All of them are open source (AGPL-3.0-or-later) and run as small containers next to Trilium, or as plugins in Claude Code.

How knowledge gets in

  1. Collect. I save an article to Karakeep and tag it trilium. Reddit posts I save get the tag automatically.
  2. Sync. A few minutes later it is a read-only source note in Trilium.
  3. Ingest. I tell Claude “ingest”. It reads the source, writes a summary, updates the concept and entity pages it touches and logs the change in the day note. The rules for all of that live in a schema note in Trilium, so I change the wiki’s conventions by editing a note.
  4. Adopt. At the end of a work session Claude offers to file what we found: a decision, a fix, how a system actually behaves. Most of my wiki comes from this, not from articles.
  5. Review. Everything Claude writes is a draft marked AI-assisted until I set it to reviewed.

How it gets back out

Connecting Claude to Trilium isn’t enough: a model rarely stops to ask “do my notes know something about this?”. trilium-recall closes that gap. In Claude Code a prompt hook checks every prompt against the index and adds up to three short passages when the notes have something, and nothing when they don’t. On claude.ai the same engine is an MCP server whose instructions tell Claude when to look. In practice this is what makes the rest worth it: I speak a rough request (“the server from yesterday”, “like we did for the other repo”) and Claude starts from what I already wrote down.

What changed this week

  • Trilium’s own MCP server replaced mine. My ETAPI-based trilium-mcp is archived; the plugins now use the built-in tools, and trilium-mcp-proxy only adds the login.
  • trilium-recall became its own project, because it indexes all of Trilium, not only the wiki. Since 0.6.0 adding its URL to a client is the whole setup.
  • Release notes land here. Every release of these projects now posts its notes to this feed automatically.

Where to read more

Follow along with the RSS feed.

← All posts

This post also lives on notefeed ↗