DesirePath

← Back to projects

Desire Paths — How My Insights Learn Where I Walk

This is the second entry in my decision log, after How My Memory System Works, In My Words. Today I replaced the noisiest part of my system — the insight engine — with something I'm genuinely proud of designing.

The problem, in numbers

Before deciding anything, we looked at my own usage data. It was damning. The old insight engine compared notes in pairs and asked an expensive model "are these related?" over and over. It had made 1,401 of those calls — more than half of every token my system has ever spent — and out of 213 judged pairs it said "yes" to almost all of them (only 10 rejections). Of those, I had accepted exactly 3. The machine was enthusiastically producing suggestions at a 1.4% hit rate, and I was paying for every miss.

The deeper flaw: it compared everything against everything, with no sense of what actually mattered to me.

The idea: desire paths

In parks, planners pave sidewalks — and then people wear dirt trails through the grass where they actually want to walk. Those trails are called desire paths. My vault now works the same way. Every note is a point on a flat field. Every time a note gets pulled into one of my answers, or a new note links to an old one, that's a footstep — a visit. Notes that keep getting visited, by many different other notes, become intersections where paths converge. Those intersections are called hubs, and a validated hub becomes a concept: an idea that emerged from my own behavior, not from a category anyone predefined.

How a concept earns its existence

Attention is scored by a novelty score: how much of a note's traffic is recent (a spike), how fresh the last visit is (freshness fades by half every week), and how many different notes visit it (variety). A note only becomes a candidate when its score stands out from the whole field — the bar is set from the average plus two standard deviations, so as the vault grows, the bar rises on its own.

Then three tiers of screening, each more expensive and rarer than the last:

Detection — pure math, costs nothing, runs daily. Screening — one cheap batched call labels all candidates; duplicates of existing concepts and generic labels get thrown out. Formation — only survivors get the expensive model: a real description, relations to existing concepts, and insights. Insights now exist only between confirmed concepts — never between two random notes.

This is the same philosophy from Per-Purpose Model Routing and Batch Curation Scoring — pay for permanence, save on volume — but applied structurally: the expensive step isn't just routed to a cheaper model, it's made rare. What I kept, what I killed

Killed: the pairwise semantic and link-of-a-link scans, the four ranking tabs, and the narrative cards — my 200-suggestion backlog was archived in one sweep. Kept: fertile collisions and blending, because Conceptual Blending for Emergent Ideas is a different mechanism (shared bridging domains, not similarity), it produced none of the noise, and it's my creative-synthesis path. The four-tab curation design from Curation Layer for Semantic Memory Insights served its purpose and taught me what I actually wanted — its replacement wouldn't exist without it.

I also decided concepts stay internal — they live in the graph view and the Insights page, but never become notes in my vault. The vault stays purely mine. Two switches I gave myself

Insights and deep research now have on/off toggles in Settings. Off means genuinely off — zero background model calls. The system spends money only when I've decided it should.

Lessons this feature paid for

Measure before fixing. I came in saying "too much noise, too many tokens." The usage log turned a feeling into a diagnosis: it wasn't everything — it was one call type, with one cause (an unfiltered candidate source and a judge that never said no).

Beware feedback loops. The link-of-a-link scan fed on its own output: every link I accepted created new open triangles, which created more suggestions. A system that generates its own future workload needs a brake built in, not bolted on.

Structure beats willpower. The old prompt said "be selective" and the model ignored it 95% of the time. The new design doesn't ask a model to be selective — the math is selective, and the model only ever sees what survived.

Main Page