The first thing the tool told me was that I probably didn’t need it. 🔮
I pointed a graph generator at this repository and it came back with a corpus check before anything else:
Corpus is ~32,220 words — fits in a single context window. You may not need a graph.
Fair enough, honestly. That’s the correct answer for a codebase this size, and it’s the kind of answer most tools are too polite to give. A knowledge graph is a retrieval structure — it exists so you can find things across a body too large to hold. Mine fits in one window.
I built one anyway.
410 nodes · 618 edges · 31 communities
108 files scanned
Token cost: 0 input · 0 output
Zero tokens, which I liked. It walked the repo locally and left the result on disk as a JSON blob, an HTML viewer, and a Markdown report.
It handed me my own index 📚
Then I read the community list, and stopped.
The graph had clustered 410 nodes into 31 groups and named them. Among them:
Terminal & Shell Stack
Ghostty & Yazi Setup
Modern CLI Replacements
Alacritty (Rejected)
Kitty (Rejected)
Wave (Rejected)
WezTerm (Rejected)
Helix (Rejected)
Kakoune (Rejected)
Nushell (Rejected)
Final Terminal Stack
Seven rejected terminal emulators, each one prominent enough to become its own cluster — and then a small, quiet one called Final Terminal Stack. The tool had no idea it was describing a person. It just noticed that seven groups of files talked about things I’d tried and dropped, and one group talked about the thing I kept.
I went and checked, because a graph that hallucinates is worse than no graph. Every one of those seven names is genuinely in the writing — Alacritty, Kitty, WezTerm, Helix, Kakoune and Nushell each appear, Wave in two posts, and Ptyxis appears in four. The graph didn’t invent a history. It read one.
And sitting right beside them:
Modern CLI Replacements
bat (cat replacement) fd (find replacement)
lsd (ls replacement) ripgrep (grep replacement)
tldr (man replacement)
Classic Unix Commands (cat, find, grep, ls, man, cls)
That is a cluster holding an entire argument I’ve written about three separate times without ever putting those five tools in one sentence. The graph did it for me, by noticing they were all the same kind of thing — swaps — and that Classic Unix Commands was what they’d all been swapped from.
The bits it was honest about 🧾
What I trust about this report is how much of it is hedged.
- 91% extracted, 9% inferred. 53 of the edges are the model’s inference rather than something it found on a line, averaging 0.87 confidence.
- 3 ambiguous edges, listed under a heading that literally says Review These.
- 164 isolated nodes — flagged as “possible missing edges or undocumented components”, not quietly absorbed.
- 12 thin communities omitted from the report rather than padded out to look complete.
And a section of Suggested Questions, framed as things the graph is “uniquely positioned to answer” — including why the astro node sits between three communities at once, marked as a cross-community bridge.
That last one is the real find. astro is the highest-betweenness node in the whole thing, which is a mathematically fancy way of saying: almost everything routes through it. Which, if you have ever tried to change the build, you already knew.
A health check for the graph itself 🩺
One small thing I’m unreasonably pleased with: I wrote a fish function that checks whether the graph tool is actually working before I trust what it says.
graphify-health looks in two places. First it asks the plugin registry whether graphify is registered and active for the current directory. Then it reads the application log and compares line numbers between the newest successful load and the newest failed load — not timestamps, line numbers, so it can’t go stale as time passes. Newest wins.
RESULT: HEALTHY
Three lines of output, exit code 0 or 1, and it answers the only question that matters before you read a report: is the tool that produced this currently in a working state?
That’s a habit worth stealing regardless of what tool you’re graphing. Before you trust an answer, check whether the thing that gave it to you was healthy when it gave it.
Mirror, not index 🪞
So what is a 410-node graph of a small blog actually for? The tool was right that it isn’t retrieval — I can read all 32,220 words.
What it gave me instead was distance. Not a way to find my content, but a view of it from somewhere I’m never standing.
I know I tried seven terminal emulators; I don’t feel that as a shape. I know I’ve replaced five core Unix commands; I’ve never seen them grouped as one decision. I have written all of this, and reading it back clustered and named by something with no stake in it — seven things I rejected, one thing I kept — was a stranger describing my desk.
The corpus fits in a context window. But a context window is me looking at my own work from the inside, and that has blind spots a graph doesn’t.
I keep the report around for that, mostly. Less the 410 nodes, more the moment of seeing Rejected seven times in a row and realising how much of this journey has been subtraction. 🔮
If a tool read your own work back to you and clustered it into 31 things you never grouped that way — would you want to see it, or would you rather keep believing the shape you already had? 👇