This is a builder note, not a launch post. I am writing it because the project is now at v0.2.18, and the question I keep getting asked in private is: why a desktop app, why Tauri, why not just a web app?
Here is the honest answer.
The trigger was small. I had twelve repos I was actively using Claude Code on. One afternoon I wanted to recover a session from three weeks ago, in a repo I had not touched in a month. I knew what I had asked the model to do. I did not know which of the twelve project folders under ~/.claude/projects/ the session lived in, and I did not remember the timestamp.
The session was technically on disk. I just could not find it. That gap (the data exists, but the index is missing) is what I wanted to close.
The first version of Shelf was 200 lines of Python and a SQLite table. It just listed every session in every project, sorted by mtime. I could grep the table. That alone was useful.
The current version is a Tauri app (Rust + WebView). The reason I switched from a CLI to a desktop app was not aesthetics. It was because the actual use case has three sub-tasks that are awkward on a terminal:
- Scan, then show the result in a way that surfaces "this is the session that touched file X" without me having to open the JSONL.
- One click to resume the session. Claude Code's CLI resume is fine if you know the id, but you never know the id.
- Work on more than one project at once. The terminal is great for one project. It is bad at three.
Local, not cloud, was a deliberate choice. The session files contain everything I have ever typed into a model, including private notes about my own work. I do not want a server roundtrip just to read my own data. Tauri was the smallest path to a real desktop app I could ship and maintain myself.
If you have ever grepped ~/.claude/projects/*/*.jsonl and felt like that should not be the answer, the project is here: https://github.com/Harukaon/shelf. Pull it apart, tell me what is wrong, fork it, do not use it, all of the above.
Top comments (0)