I've always hated having chats siloed in Claude and not having an easy way to connect that context in other apps. Anything that exists today has a subscription and is stored on their servers, and really wanted something fast, local, and offline.
How Tennis works: * SQLite/FTS5 (keyword) + vec0 (vector) * model2vec / potion-retrieval-32M (512-dim, 123MB). This is a flat vector table, and what helps make this work well local/offline. * RRF (k=60) fuses BM25 keyword rank + cosine semantic rank into one score
Tennis also creates markdown files called 'cards' at indexing time. This gives you an easy, summarized, human readable format to see what Tennis has. You can edit these files (but won't change the embeddings in SQLite).
You can use Tennis via API and MCP. It's incredibly fast, and the MCP works great as a connector to different applications (ChatGPT, Claude, Opencode, etc).
You can install and use it today: https://tennis.jlachance1.workers.dev/
Thanks for checking this out! I would love any feedback. Thank you