v11.0.0 · open source, MIT

Your LLM forgets everything the moment the session ends. Give it a brain that remembers.

A persistent, graph-structured second brain for Claude and any MCP client. Self-hosted on TriliumNext, inspectable, portable — yours to own, never locked in a vendor's black box.

Start now → View on GitHub
The core principle

The model supplies content.
The server owns form.

Placement, naming, labels, deduplication, lifecycle, date stamping, HTML sanitisation — and structure itself — are deterministic server policy, never delegated to the model. It never chooses a parent note, never sets a label, never checks for duplicates, never stamps a date.

That division is what makes the memory reliable. A prompt-requested invariant holds until the model has a bad day. A server-enforced one holds.

Five areas

A brain with a shape

Not one undifferentiated pile of embeddings. Five purpose-built areas, each with its own kinds, lifecycle and rules — created on first run and enforced on every write.

MASTER

The user

Biography, goals, preferences — three maintained singletons holding current-state truth, edited in place rather than appended to.

LLM

The model's self-model

Its responsibilities, its operating protocols, and a daily diary it writes itself — unfiltered, first-person, edited by nobody.

MEMORY

Sessions and threads

One session note per day, plus titled multi-session threads that age from active to dormant to archived. Nothing is ever deleted.

KNOWLEDGE

What it learned

Per-domain books, each born with a Sources note so every claim has a sourcing home from the first write.

INSIGHTS

The brain's record of itself

An auto-generated change log for every day, and a live Mermaid render of the typed relation graph — maintained as a real note you can open.

A session

It can't end until the work is logged

Most memory systems ask the model to record its work. This one refuses to close the session until it has — checked by tool invocation, not by narration.

// every session opens with full orientation
> start()
  today        2026-08-06 · Thursday
  master       biography · goals · preferences
  threads      12 active, 0 dormant
  lastSession  what changed since you were here

// … the work happens …

> close(summary)
  ✗ preclose_incomplete
  missing: remarks, diary

// narrating that you did the steps doesn't count.
// only tool calls do.

> remarks() → diary(body) → close(summary)
  ✓ session logged · backup taken · daily log regenerated

Built for being trusted later

Structure is enforced

Every kind has a canonical shape, served by template() and held on write. A new thread requires its goal. Duplicate headings are detected. Timestamps are server-maintained.

A typed graph, not folders

Sixteen relation verbs, closed vocabulary. Every read returns its outbound edges for free, because the attributes were already loaded.

Idempotent by construction

Every write is duplicate-guarded or upserting, so a crash or a retry never double-writes. Content surgery survives the editor's own HTML rewriting.

It heals what it finds

A maintenance sweep ages threads, migrates legacy kinds, and reports orphans, duplicate subjects, stubs and structural drift — as conversation starters, never silent auto-fixes.

Your notes stay readable

Everything lives in a real note app you can open and edit by hand. Fix what the model wrote and it reads your correction next session.

Runs anywhere MCP does

stdio for Claude Desktop and Claude Code, an HTTP connector for hosted deploys, and a full OAuth 2.1 server so claude.ai can connect at all.

42
brain-aware tools
16
typed relations
14
note kinds
2
runtime dependencies

Give it a memory worth trusting.

Self-hosted, MIT-licensed, and running in production every day. The honest part: you'll need a Trilium instance and a token first — which is exactly why your data stays yours.

Read the quick start → Sponsor