Aether
- Role
- Design and build
- Timeline
- Oct 2024
- Type
- Obsidian plugin + local service
- Stack
- TypeScript, Python, Flask, ChromaDB, Groq
Overview
What if you could just ask your notes?
Aether is an Obsidian plugin. Hold space in any note, ask a question in plain words, and it answers from the vault, with the notes it used one click away.
Problem
Years of notes pile up, and search only finds the exact word you typed.
Solution
An ask bar that opens inside the note you’re writing and answers from the whole vault, on your own computer.
My role
Design and build, end to end: the interaction, the motion and the local service behind it.
Problem
Capturing was the easy half.
Obsidian is built on the file-over-app idea: your notes are just files on your disk. A couple of years in, the pile only ever grows, and adding to it is the easy part. How do you get anything useful back out of something this size?
Search works when you know what you’re looking for. But a list of results still leaves the reading and the stitching to you.
It needs the right word
Search finds the word you type, which is rarely the word you used at the time.
The answer is scattered
What you want is spread across months of notes, and no single one holds it.
Asking means leaving
Every tool that could answer lives in a panel or another app, away from the note.
What’s missing is a way to ask the notes a question and get an answer back.
Solution
Aether: ask your notes, and they answer.
Type the question the way you’d say it out loud. Aether reads across the whole vault and answers in a few sentences, with the notes it used listed underneath.
Ask without leaving the note
Hold space in any note and the ask bar opens on the screen you are already on.
An answer with its sources
The answer is written onto the note, with numbered citations and the notes it came from one click away.
Keep the answer in the note
Ctrl enter inserts it at the cursor as a callout, with links back to the notes it used.
Point at a passage and change it
Highlight a passage, hold space and say how to change it; ctrl enter puts the rewrite in its place.
Go deeper in chat
When one question turns into several, ctrl shift enter carries it into a chat panel that keeps the thread.
Research
What already exists, and why it didn’t fit.
People already have ways to get answers out of a vault. Each one stops short somewhere.
What they get right
Reading by meaning, and showing where an answer came from. Both went straight into Aether.
What none of them do
Answer inside the note you’re writing, without sending the vault anywhere or asking you to move.
Design decisions
The hard part was how asking should feel.
What is the most natural way to ask a question in the middle of writing? A few shapes were tried before one felt right.
A sidebar
The first experiment. A whole panel is too much to open for one question, and not a great place to start from.
A popover
Lighter, but it lands on top of the writing. The note is the context, and it should always be in view.
A bar in the note
One line at the foot of the screen, with the whole note still in view above it. Hence this design.
01Not another chat window.
The obvious shape is a chat panel in the sidebar, but a chat is a second place to be, with a thread to keep up. Aether is for a question that comes up in the middle of writing, so it has a single bar that takes one question and gives one answer.
02It opens where you already are.
Asking shouldn’t pull you out of what you’re doing, so there is nothing to open and no reason to reach for the mouse. Hold space for 400 ms in any note and the bar is there, on the screen you were already looking at. Esc puts everything back exactly as it was.
03The screen leans back to make room.
A text box needs somewhere to go, and a box laid over the note would cover what you were just writing. So the whole app tilts back three degrees on its top edge, which opens a small space at the foot of the window for the bar without covering anything. The note still scrolls while it is set back.
04A blur that fades out.
The answer is written straight onto the note, so it needs something behind it to stay readable. A solid panel did the job but looked like a slab, so the blur is progressive: strongest behind the bar and gone above the answer. It grows as the answer arrives from the bottom line up.
05The answer goes back into the note.
An answer that lives in a panel is gone when the panel closes. Ctrl enter drops it into the note as a callout, with links to the notes it came from, so it is saved in the file like everything else in the vault.
Problems and how Aether solves them
Local-first, like Obsidian itself.
Obsidian’s promise is that the notes are yours: plain files on your disk. An assistant that needs the whole vault uploaded somewhere breaks that promise, so the vault never goes anywhere.
- Your notesPlain files in the vault.
- The indexA folder beside the vault.
- Search by meaningWorked out on this machine.
- Aether’s serviceRuns here, behind a token.
- Your question
- The note you’re in
- A few matching passages
- The answer
Meaning alone misses exact names.
Two searches, fused
Every question runs as a search by meaning and a keyword search, and the two rankings are merged. Names and jargon still match exactly; everything else matches by sense.
A vault changes all day.
The index follows the files
A file watcher re-indexes a note when it is created, edited, renamed or deleted, so an answer is never built on a note you removed last week.
An answer you can’t check is worth little.
Every claim links to its note
Numbered citations link to the note each sentence came from, and the exact passages the model was given can be opened under any answer.
Follow-ups lean on what was said before.
Questions are rewritten first
“What about the other one?” is turned into a standalone question before the search, so it finds the right notes.
Reflection
What building it taught me about RAG.
Aether answers by pulling the relevant passages out of the vault and handing them to a model, an approach known as RAG. Building it showed me where that works well, where it falls short, and how to design around both.
Retrieval is a freshness problem
Picking the right embedding model looked like the hard part, but keeping the index current mattered more. The notes change every day, and an answer can only be as accurate as the last index.
Stronger models raise the ceiling
As models get stronger, I can pull in more context for each question, and the answer gets better for it.
The note comes first
AI gets added to everything now, and adding it here could have felt like following everyone else. Used intentionally, though, it can make a real difference to how you work. So I designed Aether to stay a note first, with the AI as a helper that assists and nothing more.
This is a good first step, and one I want to keep improving.