{"slug": "why-i-built-a-small-desktop-app-to-stop-losing-my-claude-code-sessions", "title": "Why I built a small desktop app to stop losing my Claude Code sessions", "summary": "A developer built a desktop app called Shelf to recover lost Claude Code sessions after struggling to find a three-week-old session across twelve repositories. The tool, now at version 0.2.18, evolved from a 200-line Python script with SQLite into a Tauri-based desktop application that indexes and searches local session files. The developer chose a local desktop app over a web service to keep private session data, including personal notes, off any server.", "body_md": "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?\n\nHere is the honest answer.\n\nThe 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/`\n\nthe session lived in, and I did not remember the timestamp.\n\nThe 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.\n\nThe first version of [Shelf](https://github.com/Harukaon/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.\n\nThe 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:\n\nLocal, 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.\n\nIf you have ever grepped `~/.claude/projects/*/*.jsonl`\n\nand felt like that should not be the answer, the project is here: [https://github.com/Harukaon/shelf](https://github.com/Harukaon/shelf). Pull it apart, tell me what is wrong, fork it, do not use it, all of the above.", "url": "https://wpnews.pro/news/why-i-built-a-small-desktop-app-to-stop-losing-my-claude-code-sessions", "canonical_source": "https://dev.to/uzoma_uche_3ec83974b4a8a5/why-i-built-a-small-desktop-app-to-stop-losing-my-claude-code-sessions-2i86", "published_at": "2026-06-03 05:00:22+00:00", "updated_at": "2026-06-03 05:11:35.737394+00:00", "lang": "en", "topics": ["ai-tools", "ai-products", "ai-agents", "large-language-models", "ai-infrastructure"], "entities": ["Claude Code", "Shelf", "Tauri", "Rust", "SQLite", "Python", "Harukaon"], "alternates": {"html": "https://wpnews.pro/news/why-i-built-a-small-desktop-app-to-stop-losing-my-claude-code-sessions", "markdown": "https://wpnews.pro/news/why-i-built-a-small-desktop-app-to-stop-losing-my-claude-code-sessions.md", "text": "https://wpnews.pro/news/why-i-built-a-small-desktop-app-to-stop-losing-my-claude-code-sessions.txt", "jsonld": "https://wpnews.pro/news/why-i-built-a-small-desktop-app-to-stop-losing-my-claude-code-sessions.jsonld"}}