Groundwork
A knowledge graph and a Claude agent. Built for myself.
A knowledge graph and a Claude agent with full read/write access. Built it for myself.
Two tables: nodes and edges. Properties are freeform JSON. No rigid schemas, no app-specific tables.
Everything is a node. Beliefs, people, feed items, signals, projects, the page you're reading now.
The agent sits on top of the graph. Skills are markdown files. One for ingesting a profile, one for surfacing what I read, one for drafting content, one for working through a thesis. A few hundred lines each. The agent picks which one to use.
What I use it for
Brainstorming. I dump something I'm chewing on. The agent expands it, finds what already connects in the graph, and lets me follow threads.
Loading my own data. What matters to me ends up as a node. Beliefs, values, what energises me, what drains me, people I want to keep close, things I've read.
A personalised feed. Hacker News, RSS, a handful of other sources. Pulled in, scored against the graph, ranked. What I scroll on my phone is shaped by what I actually care about.
Writing and the website. Every page on qni.dk, including this one, is a node. I draft, edit and publish through the agent.
Background agents. Cron-scheduled runs that work while I'm away. Pulling the feed. Ranking it. Cleaning out what's gone stale. Pre-drafting things I'll come back to.
Idea validation. When I want to dig into a specific idea, I have skills for research and outreach. One thing the graph is useful for, not the point of it.
What is public, what is not
What you see on qni.dk is a few dozen nodes. This page, the blog, projects, notes. The graph itself is around 600 nodes and 600 edges. Drafts, raw research, journal entries, signals from things I read, contacts, transcripts. They sit in the same database, connected to the same nodes. Publishing is flipping a status.
Still early. The architecture is deliberately boring. Postgres on Neon, a Hono worker on Cloudflare, the Claude Agent SDK, MCP tools for graph access.