Show HN: I built ThreadShelf to reuse hard-to-export AI chats like OpenRouter A developer released ThreadShelf, a local-first tool that archives and semantically searches AI chat exports from six providers: ChatGPT, Claude, Google AI Studio, OpenRouter, LM Studio, and Grok. The archive pipeline — parsing, embeddings, LanceDB storage, search, HTTP API, and MCP — runs locally, while conversation generation is labeled an Experimental Beta that keeps llama.cpp loopback-only and sends context off-device only through the explicitly marked OpenRouter external provider. ThreadShelf is tested against snapshots of specific versions, such as LM Studio 0.4.x, and its developer warns that Google AI Studio, OpenRouter, LM Studio, and Grok have no documented, stable export schema. Local-first archive, semantic search, and continuation for your AI conversations. One private workspace across ChatGPT, Claude, Google AI Studio, OpenRouter, LM Studio, and Grok . Search old conversations by meaning, reopen the complete thread, and continue it with a local GGUF model through llama.cpp or the explicitly external OpenRouter provider. The archive pipeline—parsing, embeddings, LanceDB storage, search, HTTP API, and MCP—runs locally. Conversation generation is an Experimental Beta : llama.cpp stays loopback-only; switching to the clearly marked OpenRouter · external provider sends the selected user/assistant context and new prompt off-device. | Capability | What ThreadShelf provides | |---|---| | Archive & retrieval | Multi-provider normalization, local multilingual embeddings, semantic and exact search, complete thread reconstruction | | Continue & create | Local GGUF inference through managed llama.cpp , plus optional OpenRouter streaming | | Use it anywhere | React UI, command-line ingest/search, HTTP API, and an MCP stdio server over the same index | | Keep control | Loopback defaults, isolated local storage, explicit off-device labeling, synthetic test data | 1. You export/copy your chats as JSON see Get your data get-your-data . 2. ThreadShelf parses them into a common format, embeds them locally , and stores them in a local vector database LanceDB . 3. You search by meaning in the web UI, open the full original thread, and export any conversation to Markdown — or query the same index from an MCP client. 4. Optionally start a new chat or continue an archived thread through local llama.cpp or explicitly external OpenRouter. php flowchart LR exports "AI chat exports" -- parser "Provider parsers" parser -- turns "Normalized turns" turns -- chunks "Chunks" chunks -- embed "Local embeddings" embed -- db "LanceDB + thread store" db -- ui "React UI" db -- api "HTTP API" db -- mcp "MCP stdio" db -- generation "Generation registry" generation -- llama "llama.cpp