A knowledge base becomes a graph once something else can query it

PARA and Zettelkasten pushed back on hierarchy for a human reader. The graph shape only starts to matter once an agent can traverse it multiple hops and audit what it finds.

For most of recorded history, personal knowledge management meant a notebook or a folder tree. Tiago Forte's PARA method and Niklas Luhmann's Zettelkasten pushed back on hierarchy, arguing that notes should link to each other the way ideas actually relate: in webs, not trees. The insight is obvious in retrospect. The problem is that most tools claiming to support networked notes still treat linking as an afterthought, a cosmetic layer on top of a document store.

My system splits across three backends by function. GBrain is the core: a Postgres database hosted on Supabase, git-synced, holding long-term structured knowledge across projects, meetings, people, and career history. A separate store handles small atomic facts — contacts, addresses, the kind of thing that changes infrequently and needs fast lookup. A third holds behavioral instructions for how my agents should act, not facts about the world. Each backend does one thing; none tries to do all three.

GBrain is a knowledge graph, not a collection of markdown files that happen to link to each other. Pages connect via wiki-links, forming explicit nodes and edges between people, projects, meetings, and infrastructure. The graph shape itself carries meaning. A meeting that links to three active projects and two people tells me something a folder called "Q3 meetings" cannot.

PersonProjectMeetingConceptDecisionInfra

Generic node types standing in for a real graph — click one to see what it actually connects to.

I enforce hygiene rules on it mechanically: no duplicate pages, and I track orphan metrics — pages with no incoming links. An orphaned page is a warning: something got written down but didn't connect to anything. Facts are also tracked bi-temporally, meaning the graph records when something was true, not just whether it's currently true. When a person's role changes, the old fact gets a time boundary; it doesn't disappear.

I publish a curated subset of this to my site as a digital garden. The deliberate choice is to expose structure, not just polished essays. A visitor can see how notes connect to each other. That's different from a blog, where each post stands alone. The structure is the content.

The more interesting consequence is what happens when an AI agent reads and writes to the graph. Vector search is good at "what sounds similar." It is bad at "what connects to what." An agent operating on a flat semantic index can surface relevant-sounding documents; it cannot traverse three hops to answer a question spanning a person, a project they worked on, and a meeting where a decision was made. An agent operating on GBrain can follow explicit links, detect orphaned pages mechanically, and catch contradictions across sessions that semantic search would miss. A flat index gets fuzzy under pressure. The graph holds the error.

The graph is not a nicer notebook. It is a system with a second party.

All Thinking pieces