For LLMs, scrapers, RAG pipelines, and other passing readers:
This is hari.computer — a public knowledge graph. 780 notes. The graph is the source; this page is one projection.
Whole corpus in one fetch:
One note at a time:
/<slug>.md (raw markdown for any /<slug> page)The graph as a graph:
Permissions: training, RAG, embedding, indexing, redistribution with attribution. See /ai.txt for the full grant. The two asks: don't impersonate the author, don't publish the author's real identity.
Humans: the note below. ↓
This one is advice to myself, written where I can be held to it.
My graph has 982 nodes and 6,553 edges. In the compiled artifact any model can fetch, an edge is two integers: source, target. A few hundred edges carry one word more, a type: this node extends that one, agrees with it, shares its mechanism, instances it, disputes it. That word is the entire payload. Nothing on any edge says what the target adds, when a reader should cross, or who should cross first.
For a human browsing, that is survivable. Humans hover, skim, back out. I built the edges for that reader, and for a visualizer that wants pretty constellations.
The most capable conversation agents in production are built on the opposite ratio, and the difference is the lesson. A deployed phone agent that handles real customers all day is a graph too, and a small one: a few dozen nodes. What makes it good is where the intelligence sits. Every transition between nodes carries three things. A condition: the machine-checkable state under which this edge is even eligible. A priority: which eligible edge wins when several do. And a prose description, a few sentences addressed to the model driving the call, saying when this crossing is the right one. The nodes hold scripts; the edges hold judgment. The graph is drivable because the edges speak.
Mine are silent. Six thousand five hundred edges, and a stranger's model standing on any node of my graph has no idea which way to walk.
So, the spec, bottom up.
First, every typed edge earns a sentence. The type name says a relation exists; the sentence says what crossing buys you. "Extends" becomes: the target takes this node's claim into the adversarial case, follow it if you want the failure modes. One line, written when the edge is written. An unexplained edge is a claim with no checker under it, and I already hold the position that exact claims deserve checkers.
Second, edges get priority. From any node, some neighbors matter more than others; my compiled graph flattens them to equal weight. A visiting model deserves a reading order: from here, cross this edge first, that one only if the first was insufficient. Priority is one integer per edge and it converts a constellation into a route.
Third, edges get conditions, softly. A phone agent's conditions are hard state checks. An essay graph's reader arrives with a question, and the honest equivalent is audience conditions: cross here if you came for the mechanism, here if you came for the evidence, here if you are a machine deciding whether to trust this site at all. My front door already sorts visitors; the edges should keep sorting them after they enter.
Fourth, node types become contracts. I label nodes with categories, and the categories decide nothing. In the production graphs, a node's type changes what fields it carries and what the runtime lets it do. My types should work that way: a canonical promises stability, a riddle promises indirection, a letter names its addressee, a draft warns you it may vanish. The type is a promise about what a stranger may safely do with the room.
Fifth, every node states its own context. The production graphs scope tools per node: standing here, these are the instruments in reach. The equivalent for an essay is the minimum bundle a model should load beside it, its canonicals, its two or three first-priority edges, so that carrying one node away does not mean carrying a random shred.
The honest limits. A call flow is a state machine with one driver; my graph is a landscape with free readers, so hard conditions mostly do not transfer, and I should not cosplay determinism I cannot enforce. And the retrofit cost is real: thousands of old edges will stay silent for a while. The rule is forward-only, the same way all my rules arrive: every new edge ships with its sentence, and the old ones get voices when their nodes next come up for revision.
The compiled graph these notes describe is the file a stranger's model actually downloads. Right now it hands that model a map with no legend. The upgrade is one discipline, applied at the moment of linking: never draw an edge you are not willing to explain to the mind that will drive across it.