I write notes to get thoughts out of my head, work through ideas, and keep things I might want to revisit. That applies to my diary, literature notes, areas of interest, and projects.

Writing often helps me think in the moment. And when I want to return to something, to learn from it, use it, or connect it to another idea, I need to find it with as little friction as possible.

Sometimes I remember the exact words I wrote. Other times, I remember the idea and almost nothing about how I expressed it. Search needs to help with both.

That’s one of the main reasons I’m building Trama for Obsidian.

Working with what Obsidian already provides

Obsidian already has built-in search, including exact phrases, filters, and operators. It’s a useful starting point when I know what to look for. Omnisearch adds another approach to finding and ranking files, with a keyboard-oriented workflow.

Then there are links. Backlinks show notes that reference the current note, while the graph view makes those connections visible across the vault. Those connections are a large part of Obsidian’s appeal.

I want to keep using them. A link I deliberately add records a relationship I’ve considered useful, and I can explain that relationship in the surrounding text.

But finding those connections takes time. I need to remember the other note, retrieve it, check whether it’s relevant, and add the reference. As the collection grows, there’s more material I might never think to revisit.

Semantic retrieval gives me another way into that material.

One query, two ways to find a note

Lexical search works with the words in a query. A library name, a term from a book, or a phrase I remember gives it something concrete to match.

Semantic search uses similarity in meaning. It can surface a note that discusses the idea I’m looking for using different words.

Say I search for protecting time for focused work. A note about interruptions and fragmented mornings might be relevant without containing those terms. That’s the kind of connection I want semantic search to help uncover.

Neither approach consistently gives me everything I need. And I don’t want to decide which one to use before every search.

Lente, Trama’s search interface, combines both. SQLite ranks keyword matches through full-text search. Semantic retrieval compares a query embedding with indexed note chunks, using each note’s strongest chunk match.

Trama then combines the ranked lists using reciprocal rank fusion. Each result contributes according to its position in its list. This avoids treating keyword scores and vector similarity as directly comparable numbers.

The result is one list to inspect. It won’t always put the right note first, but I can search without choosing a retrieval strategy.

Filo starts from the note I already have open and surfaces semantically related notes. It uses stored vectors, so opening it doesn’t require another embedding request.

This is useful even when I don’t have a query in mind. A suggestion can bring an older literature note or project observation back into view.

I still need to read it and decide whether the connection matters. Similarity is less precise than a reference I’ve deliberately chosen. But it can reduce the work of discovering candidates for those references.

So cross-linking stays part of my workflow. Filo can help me find a connection; I decide whether to turn it into a lasting link.

Keeping notes focused helps

I try to give each note a clear subject: one idea, one book, or one project. That’s how I prefer to organize material anyway.

It also fits Filo’s current approach. Filo represents each note through an aggregate of its chunk vectors. A long note covering unrelated subjects can lose detail in that representation. With focused notes, I find that trade-off more reasonable, though it doesn’t make every suggestion useful.

There are other boundaries. Trama currently indexes Markdown notes, rather than the contents of every PDF or image. Semantic retrieval depends on the embedding model and indexed material. If query embeddings are unavailable, Lente falls back to lexical search and reports the change.

Trama is getting close to release. I’m building these features to spend less time hunting through my notes and more time reading, connecting, and learning from them.