Skip to content

v0.1.0 — the pilot as first published (3 July 2026)

Choose a tag to compare

@tonydzi tonydzi released this 04 Aug 19:35
d10fa18

Graph RAG on SQLite for AI agents — a working pilot, not a framework.

Backfilled release note. The v0.1.0 tag has pointed at this commit since 3 July 2026; what was missing was the changelog, not the code. It is written up now so the release feed tells the truth about when each state of this repo actually existed.

What v0.1.0 is

The extracted memory layer of a personal second-brain agent setup — three small Python scripts that give an LLM agent associative recall over a folder of markdown notes. SQLite is the only database and [[wikilinks]] are the graph.

  • index_notes.py — chunk + embed (e5-base) into a .npy/.pkl index.
  • brain_ask.py — the recall pipeline in one file, in order: dense retrieve → optional 1-hop wikilink expansion → cross-encoder rerank → --ab mode that runs vector-only and vector+graph and logs the delta to SQLite.
  • turnstate_hook.py — a Stop hook that appends one row per assistant turn (ask, summary, files, tools, commands, decisions). Zero LLM tokens, pure stdlib. turnstate_show.py reads it back.
  • schema.sql — both tables, documented.

The bet it encodes

Most Graph RAG stacks assume a graph database, an ETL pipeline and an entity-extraction pass. For a single-user agent over a markdown knowledge base, all three are overkill: the graph already exists because the human hand-curated it as wikilinks, SQLite is enough for the only things worth persisting, and the expensive part of RAG quality is the reranker, not graph infrastructure.

Two design choices that survived contact with reality are in this release: graph expansion is candidate generation and not ranking (so an irrelevant linked note gets buried by the reranker), and an entity gate that switches the hop off for name-shaped queries — because a person's card links to everything, and A/B telemetry showed the hop helping theme queries while hurting name lookups.

What it is not

Pilot is load-bearing: no tests, no eval suite, no incremental indexing, no packaging, no entity lane. It runs daily on one real ~100k-note vault. That is a use, not a benchmark.

Full Changelog: https://github.com/Palo-Alto-AI-Research-Lab/sqlite-graph-memory/commits/v0.1.0